(function(n){function t(r){if(i[r])return i[r].exports;var u=i[r]={i:r,l:!1,exports:{}};return n[r].call(u.exports,u,u.exports,t),u.l=!0,u.exports}var i={};return t.m=n,t.c=i,t.d=function(n,i,r){t.o(n,i)||Object.defineProperty(n,i,{enumerable:!0,get:r})},t.r=function(n){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"});Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,i){var r,u;if((i&1&&(n=t(n)),i&8)||i&4&&typeof n=="object"&&n&&n.__esModule)return n;if(r=Object.create(null),t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:n}),i&2&&typeof n!="string")for(u in n)t.d(r,u,function(t){return n[t]}.bind(null,u));return r},t.n=function(n){var i=n&&n.__esModule?function(){return n["default"]}:function(){return n};return t.d(i,"a",i),i},t.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},t.p="",t(t.s=0)})({"../FloodgateCore/dist/index.js":function(){"use strict";eval('\n/**\n * Main entry point.\n */\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.Utils = exports.Api = void 0;\nvar Api = __webpack_require__(/*! ./src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\nexports.Api = Api;\nvar Utils = __webpack_require__(/*! ./src/Utils */ "../FloodgateCore/dist/src/Utils.js");\nexports.Utils = Utils;\nvar FloodgateEngine_1 = __webpack_require__(/*! ./src/FloodgateEngine */ "../FloodgateCore/dist/src/FloodgateEngine.js");\nObject.defineProperty(exports, "FloodgateEngine", { enumerable: true, get: function () { return FloodgateEngine_1.FloodgateEngine; } });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vaW5kZXgudHM/Yjg1ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILDJGQUFxQztBQUk1QixrQkFBRztBQUhaLHlGQUFxQztBQUd2QixzQkFBSztBQURuQix5SEFBd0Q7QUFBL0MsaUlBQWUiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIE1haW4gZW50cnkgcG9pbnQuXHJcbiAqL1xyXG5cclxuaW1wb3J0ICogYXMgQXBpIGZyb20gXCIuL3NyYy9BcGkvQXBpXCI7XHJcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gXCIuL3NyYy9VdGlsc1wiO1xyXG5cclxuZXhwb3J0IHsgRmxvb2RnYXRlRW5naW5lIH0gZnJvbSBcIi4vc3JjL0Zsb29kZ2F0ZUVuZ2luZVwiO1xyXG5leHBvcnQgeyBBcGksIFV0aWxzIH07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/index.js\n')},"../FloodgateCore/dist/src/ActivityTracker.js":function(){"use strict";eval('\n/**\n * Class to track ticks against a list of expected counts in a thread-safe way\n * Main API of interest is incrementActivity, which returns an enumerated value indicating\n * whether or not the increment resulted in no thresholds crossed, a single activity threshold crossed,\n * or the final activity threshold crossed.\n */\nvar ActivityTracker = /** @class */ (function () {\n    function ActivityTracker(trackingSet) {\n        if (!trackingSet) {\n            throw new Error("trackingSet must not be null");\n        }\n        if (trackingSet.getList().length > 32) {\n            throw new Error("trackingSet list size must be less than 32");\n        }\n        this.isOrdered = trackingSet.getIsOrdered();\n        this.trackedActivities = trackingSet.getList();\n        /**\n         * For ordered sets, the current index.\n         */\n        this.currentIndex = 0;\n        this.activationMask = 0;\n        this.currentActivationFlags = 0;\n        this.isActivationByInitPending = false;\n        this.currentCounts = new Array(this.trackedActivities.length);\n        this.currentStartTimes = new Array(this.trackedActivities.length);\n        this.currentSessionCounts = new Array(this.trackedActivities.length);\n        for (var i = 0; i < this.trackedActivities.length; i++) {\n            this.currentCounts[i] = 0;\n            this.currentSessionCounts[i] = 0;\n        }\n        for (var i = 0; i < this.trackedActivities.length; i++) {\n            this.activationMask |= 0x1 << i;\n            if (this.trackedActivities[i].getCount() < 1) {\n                this.trackedActivities[i].setCount(1);\n            }\n        }\n    }\n    /**\n     * Get the count for the activity at the specified index. Returns 0 for out-of-range indices\n     *\n     * @param index index\n     */\n    ActivityTracker.prototype.getCount = function (index) {\n        if (!this.isValidIndex(index)) {\n            return 0;\n        }\n        return this.currentCounts[index];\n    };\n    /**\n     * Get the count for the activity at the specified index, as tracked only for this session.\n     * Returns 0 for out-of-range indices\n     *\n     * @param index index\n     */\n    ActivityTracker.prototype.getSessionCount = function (index) {\n        if (!this.isValidIndex(index)) {\n            return 0;\n        }\n        return this.currentSessionCounts[index];\n    };\n    /**\n     * Get the StartTime for the activity at the specified index. Returns null for out-of-range indices\n     *\n     * @param index index\n     */\n    ActivityTracker.prototype.getStartTime = function (index) {\n        if (!this.isValidIndex(index)) {\n            return null;\n        }\n        return this.currentStartTimes[index];\n    };\n    /**\n     * A get-and-set method. Returns the current SessionCount, resetting it to zero and adding it into\n     * the established baseline.\n     *\n     * @param index index\n     */\n    ActivityTracker.prototype.moveSessionCountIntoBaseCount = function (index) {\n        if (!this.isValidIndex(index)) {\n            return 0;\n        }\n        var sessionCount = this.currentSessionCounts[index];\n        this.currentSessionCounts[index] = 0;\n        return sessionCount;\n    };\n    /**\n     * Forcibly set the counts for the activities in the trackingSet.\n     * Unlike other APIs, this expects vector indices to match the order\n     * of the ActivityTrackingSet.List initially used to construct this tracker.\n     * (When data is copied from a different IndexedTracker, it will properly use the IndexedTracker.Index to query internals)\n     * Note:\n     * 1) Assumes a count of 0 for any missing index in undersized arrays.\n     * 2) Respects and enforces ordered list initialization (i.e. all init values are ignored once a unfinished activity is\n     * encountered in an ordered tracking list).\n     * 3) If the tracker is fully Activated as a result of this call, the next call to IncrementActivity will raise the\n     * IncrementEdgeResult.AllActivitiesActivated, for any valid index accepted by IsPermittedIndexForActivationByInit().\n     */\n    ActivityTracker.prototype.initCounts = function (baselineCounts, otherTrackers, wasAlreadyActivatedThisSession) {\n        // NOTE: baselineIncrements and sessionIncrements are sorted the same as the initial trackedActivity set, which\n        // for this class is the same as trackedActivities\n        if (wasAlreadyActivatedThisSession === void 0) { wasAlreadyActivatedThisSession = false; }\n        for (var i = 0; i < this.trackedActivities.length; i++) {\n            // Only accept values up to the current index, when ordered\n            if (this.isOrdered && i > this.currentIndex) {\n                break;\n            }\n            // Start off by pulling values from this session\n            if (i < otherTrackers.length && otherTrackers[i]) {\n                this.currentSessionCounts[i] = this.currentCounts[i] = otherTrackers[i].tracker.getSessionCount(otherTrackers[i].index);\n                this.currentStartTimes[i] = otherTrackers[i].tracker.getStartTime(otherTrackers[i].index);\n            }\n            // If we\'ve got a baseline from previous sessions, add it in as well\n            if (this.trackedActivities[i].getIsAggregate() && i < baselineCounts.length) {\n                this.currentCounts[i] += baselineCounts[i];\n            }\n            if (this.hasCountCrossedThreshold(i)) {\n                this.finishActivityAtIndex(i);\n            }\n        }\n        if (this.isActivated() && !wasAlreadyActivatedThisSession) {\n            // Mark this object so that the next time any permitted activation event is logged, the survey will activate\n            this.isActivationByInitPending = true;\n        }\n    };\n    ActivityTracker.prototype.generateActivityIndexList = function () {\n        var indexList = new Array();\n        for (var i = 0; i < this.trackedActivities.length; i++) {\n            var current = new ActivityTracker.ActivityIndex();\n            current.activity = this.trackedActivities[i].getActivity();\n            current.index = i;\n            indexList.push(current);\n        }\n        return indexList;\n    };\n    /**\n     * Increments the count at the specified index by the given increment.  Returns a value indicating whether\n     * or not this call triggered a transition edge (activating the activity at \'index\', or finishing the activation\n     * of the final pending activity)\n     */\n    ActivityTracker.prototype.incrementActivity = function (index, increment) {\n        if (!this.isValidIndex(index)) {\n            return 0 /* Pending */;\n        }\n        if (increment < 0) {\n            throw new Error("increment must be non-negative");\n        }\n        // Ordered sets must be triggered in order.  We can only track at the current index, or before\n        if (this.isOrdered && index > this.currentIndex) {\n            return 0 /* Pending */;\n        }\n        // Add to our counts after storing off our current state\n        var startedLessThanThreshold = !this.hasCountCrossedThreshold(index);\n        this.currentCounts[index] += increment;\n        this.currentSessionCounts[index] += increment;\n        if (this.isActivationByInitPending) {\n            if (this.isPermittedIndexForActivationByInit(index)) {\n                // This tracker was completed due to the initialization from previous increment data\n                // now that we\'ve store this activities increments, raise the AllActivitiesActivated signal\n                return this.commitActivation();\n            }\n            else {\n                // Still waiting for a valid re-activation activity\n                return 0 /* Pending */;\n            }\n        }\n        if (!(startedLessThanThreshold && this.hasCountCrossedThreshold(index))) {\n            // Still waiting for this activity to finish\n            return 0 /* Pending */;\n        }\n        // Mark this activity as complete in our flag collection\n        this.finishActivityAtIndex(index);\n        if (this.isActivated()) {\n            return this.commitActivation();\n        }\n        return 1 /* SingleActivityActivated */;\n    };\n    /**\n     * Explicitly sets a start timestamp (now if startTime is null) for the specified activity index. Overwrites any previous StartTime.\n     */\n    ActivityTracker.prototype.startTime = function (index, startTime) {\n        if (!this.isValidIndex(index)) {\n            return;\n        }\n        this.currentStartTimes[index] = (!startTime) ? new Date() : startTime;\n    };\n    /**\n     * Computes the "count" delta (delta in whatever units are appropriate for a subsequent call to IncrementActivity)\n     * elapsed between now and a previously logged StartTime for this activity index.\n     * Always clears the previous StartTime.\n     * Returns 0 if no previous StartTime was logged, or if StartTime > StopTime\n     */\n    ActivityTracker.prototype.stopTime = function (index, stopTime) {\n        if (!this.isValidIndex(index)) {\n            return 0;\n        }\n        var startTime = this.currentStartTimes[index];\n        this.currentStartTimes[index] = null;\n        if (!startTime) {\n            return 0;\n        }\n        stopTime = (!stopTime) ? new Date() : stopTime;\n        if (startTime > stopTime) {\n            return 0;\n        }\n        var deltaMS = stopTime.getTime() - startTime.getTime();\n        // Currently all timer activities return seconds as the increment unit\n        var diff = deltaMS / 1000;\n        // Adding 1ms to the count so it can have the decimal place\n        // So that we can distinguish the Time activity\n        if (diff % 1 === 0) {\n            diff += 0.001;\n        }\n        return diff;\n    };\n    /**\n     * Returns true if the index is valid for accessing the stored activity counts, false otherwise\n     */\n    ActivityTracker.prototype.isValidIndex = function (index) {\n        return index < this.trackedActivities.length;\n    };\n    /**\n     * Gets whether or not the full set of activities for this tracker have exceeded their trigger thresholds\n     */\n    ActivityTracker.prototype.isActivated = function () {\n        return (this.currentActivationFlags & this.activationMask) === this.activationMask;\n    };\n    /**\n        * Marks the activity at the index as finished. Includes setting the proper\n        * activation flags and potentially advancing the current index for ordered tracking sets\n        */\n    ActivityTracker.prototype.finishActivityAtIndex = function (index) {\n        if (!this.isValidIndex(index)) {\n            throw new Error("Index is not valid");\n        }\n        this.currentActivationFlags |= 0x1 << index;\n        if (index + 1 < this.trackedActivities.length) {\n            this.currentIndex = index + 1;\n        }\n    };\n    /**\n     * @param index index\n     * @return true if the counts for the activity at the specified index have met or exceeded the threshold count.\n     */\n    ActivityTracker.prototype.hasCountCrossedThreshold = function (index) {\n        if (!this.isValidIndex(index)) {\n            throw new Error("Index is not valid");\n        }\n        return this.currentCounts[index] >= this.trackedActivities[index].getCount();\n    };\n    /**\n     * Returns true if the index refers to an activity that can re-activate a tracked object (aka return AllActivitiesActivated)\n     * that was initialized as "complete" via initCounts.\n     * Note: For unordered sets, any activity is valid. For ordered sequences, only the final activity is valid\n     */\n    ActivityTracker.prototype.isPermittedIndexForActivationByInit = function (index) {\n        return !this.isOrdered || ((index + 1) === this.currentCounts.length);\n    };\n    ActivityTracker.prototype.commitActivation = function () {\n        this.isActivationByInitPending = false;\n        return 2 /* AllActivitiesActivated */;\n    };\n    return ActivityTracker;\n}());\n(function (ActivityTracker) {\n    /**\n     * Structure returned by an ActivityTracker to call back into\n     * IncrementActivity with valid index values\n     */\n    var ActivityIndex = /** @class */ (function () {\n        function ActivityIndex() {\n        }\n        return ActivityIndex;\n    }());\n    ActivityTracker.ActivityIndex = ActivityIndex;\n})(ActivityTracker || (ActivityTracker = {}));\nmodule.exports = ActivityTracker;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FjdGl2aXR5VHJhY2tlci50cz8yMGIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFJQTs7Ozs7R0FLRztBQUNIO0lBV0MseUJBQW1CLFdBQWdDO1FBQ2xELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7U0FDOUQ7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRS9DOztXQUVHO1FBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBRXZDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxLQUFLLENBQVMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEtBQUssQ0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksS0FBSyxDQUFTLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZ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QUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU8sMENBQWdCLEdBQXhCO1FBQ0MsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztRQUN2QyxzQ0FBOEQ7SUFDL0QsQ0FBQztJQUNGLHNCQUFDO0FBQUQsQ0FBQztBQUVELFdBQU8sZUFBZTtJQUNyQjs7O09BR0c7SUFDSDtRQUFBO1FBR0EsQ0FBQztRQUFELG9CQUFDO0lBQUQsQ0FBQztJQUhZLDZCQUFhLGdCQUd6QjtBQW1CRixDQUFDLEVBM0JNLGVBQWUsS0FBZixlQUFlLFFBMkJyQjtBQUVELGlCQUFTLGVBQWUsQ0FBQyIsImZpbGUiOiIuLi9GbG9vZGdhdGVDb3JlL2Rpc3Qvc3JjL0FjdGl2aXR5VHJhY2tlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2aXR5VHJhY2tpbmdEYXRhIH0gZnJvbSBcIi4vQWN0aXZpdHlUcmFja2luZ0RhdGFcIjtcclxuaW1wb3J0IHsgQWN0aXZpdHlUcmFja2luZ1NldCB9IGZyb20gXCIuL0FjdGl2aXR5VHJhY2tpbmdTZXRcIjtcclxuaW1wb3J0IHsgSW5kZXhlZFRyYWNrZXIgfSBmcm9tIFwiLi9JbmRleGVkVHJhY2tlclwiO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIHRvIHRyYWNrIHRpY2tzIGFnYWluc3QgYSBsaXN0IG9mIGV4cGVjdGVkIGNvdW50cyBpbiBhIHRocmVhZC1zYWZlIHdheVxyXG4gKiBNYWluIEFQSSBvZiBpbnRlcmVzdCBpcyBpbmNyZW1lbnRBY3Rpdml0eSwgd2hpY2ggcmV0dXJucyBhbiBlbnVtZXJhdGVkIHZhbHVlIGluZGljYXRpbmdcclxuICogd2hldGhlciBvciBub3QgdGhlIGluY3JlbWVudCByZXN1bHRlZCBpbiBubyB0aHJlc2hvbGRzIGNyb3NzZWQsIGEgc2luZ2xlIGFjdGl2aXR5IHRocmVzaG9sZCBjcm9zc2VkLFxyXG4gKiBvciB0aGUgZmluYWwgYWN0aXZpdHkgdGhyZXNob2xkIGNyb3NzZWQuXHJcbiAqL1xyXG5jbGFzcyBBY3Rpdml0eVRyYWNrZXIge1xyXG5cdHByaXZhdGUgaXNPcmRlcmVkOiBib29sZWFuO1xyXG5cdHByaXZhdGUgdHJhY2tlZEFjdGl2aXRpZXM6IEFjdGl2aXR5VHJhY2tpbmdEYXRhW107XHJcblx0cHJpdmF0ZSBjdXJyZW50SW5kZXg6IG51bWJlcjtcclxuXHRwcml2YXRlIGFjdGl2YXRpb25NYXNrOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBjdXJyZW50QWN0aXZhdGlvbkZsYWdzOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBpc0FjdGl2YXRpb25CeUluaXRQZW5kaW5nOiBib29sZWFuO1xyXG5cdHByaXZhdGUgY3VycmVudENvdW50czogbnVtYmVyW107XHJcblx0cHJpdmF0ZSBjdXJyZW50U2Vzc2lvbkNvdW50czogbnVtYmVyW107XHJcblx0cHJpdmF0ZSBjdXJyZW50U3RhcnRUaW1lczogRGF0ZVtdO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3IodHJhY2tpbmdTZXQ6IEFjdGl2aXR5VHJhY2tpbmdTZXQpIHtcclxuXHRcdGlmICghdHJhY2tpbmdTZXQpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHJhY2tpbmdTZXQgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHRcdGlmICh0cmFja2luZ1NldC5nZXRMaXN0KCkubGVuZ3RoID4gMzIpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHJhY2tpbmdTZXQgbGlzdCBzaXplIG11c3QgYmUgbGVzcyB0aGFuIDMyXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuaXNPcmRlcmVkID0gdHJhY2tpbmdTZXQuZ2V0SXNPcmRlcmVkKCk7XHJcblx0XHR0aGlzLnRyYWNrZWRBY3Rpdml0aWVzID0gdHJhY2tpbmdTZXQuZ2V0TGlzdCgpO1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRm9yIG9yZGVyZWQgc2V0cywgdGhlIGN1cnJlbnQgaW5kZXguXHJcblx0XHQgKi9cclxuXHRcdHRoaXMuY3VycmVudEluZGV4ID0gMDtcclxuXHRcdHRoaXMuYWN0aXZhdGlvbk1hc2sgPSAwO1xyXG5cdFx0dGhpcy5jdXJyZW50QWN0aXZhdGlvbkZsYWdzID0gMDtcclxuXHRcdHRoaXMuaXNBY3RpdmF0aW9uQnlJbml0UGVuZGluZyA9IGZhbHNlO1xyXG5cclxuXHRcdHRoaXMuY3VycmVudENvdW50cyA9IG5ldyBBcnJheTxudW1iZXI+KHRoaXMudHJhY2tlZEFjdGl2aXRpZXMubGVuZ3RoKTtcclxuXHRcdHRoaXMuY3VycmVudFN0YXJ0VGltZXMgPSBuZXcgQXJyYXk8RGF0ZT4odGhpcy50cmFja2VkQWN0aXZpdGllcy5sZW5ndGgpO1xyXG5cdFx0dGhpcy5jdXJyZW50U2Vzc2lvbkNvdW50cyA9IG5ldyBBcnJheTxudW1iZXI+KHRoaXMudHJhY2tlZEFjdGl2aXRpZXMubGVuZ3RoKTtcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJhY2tlZEFjdGl2aXRpZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dGhpcy5jdXJyZW50Q291bnRzW2ldID0gMDtcclxuXHRcdFx0dGhpcy5jdXJyZW50U2Vzc2lvbkNvdW50c1tpXSA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRyYWNrZWRBY3Rpdml0aWVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHRoaXMuYWN0aXZhdGlvbk1hc2sgfD0gMHgxIDw8IGk7XHJcblxyXG5cdFx0XHRpZiAodGhpcy50cmFja2VkQWN0aXZpdGllc1tpXS5nZXRDb3VudCgpIDwgMSkge1xyXG5cdFx0XHRcdHRoaXMudHJhY2tlZEFjdGl2aXRpZXNbaV0uc2V0Q291bnQoMSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0aGUgY291bnQgZm9yIHRoZSBhY3Rpdml0eSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LiBSZXR1cm5zIDAgZm9yIG91dC1vZi1yYW5nZSBpbmRpY2VzXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gaW5kZXggaW5kZXhcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0Q291bnQoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIXRoaXMuaXNWYWxpZEluZGV4KGluZGV4KSkge1xyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jdXJyZW50Q291bnRzW2luZGV4XTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0aGUgY291bnQgZm9yIHRoZSBhY3Rpdml0eSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LCBhcyB0cmFja2VkIG9ubHkgZm9yIHRoaXMgc2Vzc2lvbi5cclxuXHQgKiBSZXR1cm5zIDAgZm9yIG91dC1vZi1yYW5nZSBpbmRpY2VzXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gaW5kZXggaW5kZXhcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0U2Vzc2lvbkNvdW50KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCF0aGlzLmlzVmFsaWRJbmRleChpbmRleCkpIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY3VycmVudFNlc3Npb25Db3VudHNbaW5kZXhdO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IHRoZSBTdGFydFRpbWUgZm9yIHRoZSBhY3Rpdml0eSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LiBSZXR1cm5zIG51bGwgZm9yIG91dC1vZi1yYW5nZSBpbmRpY2VzXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gaW5kZXggaW5kZXhcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0U3RhcnRUaW1lKGluZGV4OiBudW1iZXIpOiBEYXRlIHtcclxuXHRcdGlmICghdGhpcy5pc1ZhbGlkSW5kZXgoaW5kZXgpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmN1cnJlbnRTdGFydFRpbWVzW2luZGV4XTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgZ2V0LWFuZC1zZXQgbWV0aG9kLiBSZXR1cm5zIHRoZSBjdXJyZW50IFNlc3Npb25Db3VudCwgcmVzZXR0aW5nIGl0IHRvIHplcm8gYW5kIGFkZGluZyBpdCBpbnRvXHJcblx0ICogdGhlIGVzdGFibGlzaGVkIGJhc2VsaW5lLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGluZGV4IGluZGV4XHJcblx0ICovXHJcblx0cHVibGljIG1vdmVTZXNzaW9uQ291bnRJbnRvQmFzZUNvdW50KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCF0aGlzLmlzVmFsaWRJbmRleChpbmRleCkpIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc2Vzc2lvbkNvdW50OiBudW1iZXIgPSB0aGlzLmN1cnJlbnRTZXNzaW9uQ291bnRzW2luZGV4XTtcclxuXHRcdHRoaXMuY3VycmVudFNlc3Npb25Db3VudHNbaW5kZXhdID0gMDtcclxuXHJcblx0XHRyZXR1cm4gc2Vzc2lvbkNvdW50O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRm9yY2libHkgc2V0IHRoZSBjb3VudHMgZm9yIHRoZSBhY3Rpdml0aWVzIGluIHRoZSB0cmFja2luZ1NldC5cclxuXHQgKiBVbmxpa2Ugb3RoZXIgQVBJcywgdGhpcyBleHBlY3RzIHZlY3RvciBpbmRpY2VzIHRvIG1hdGNoIHRoZSBvcmRlclxyXG5cdCAqIG9mIHRoZSBBY3Rpdml0eVRyYWNraW5nU2V0Lkxpc3QgaW5pdGlhbGx5IHVzZWQgdG8gY29uc3RydWN0IHRoaXMgdHJhY2tlci5cclxuXHQgKiAoV2hlbiBkYXRhIGlzIGNvcGllZCBmcm9tIGEgZGlmZmVyZW50IEluZGV4ZWRUcmFja2VyLCBpdCB3aWxsIHByb3Blcmx5IHVzZSB0aGUgSW5kZXhlZFRyYWNrZXIuSW5kZXggdG8gcXVlcnkgaW50ZXJuYWxzKVxyXG5cdCAqIE5vdGU6XHJcblx0ICogMSkgQXNzdW1lcyBhIGNvdW50IG9mIDAgZm9yIGFueSBtaXNzaW5nIGluZGV4IGluIHVuZGVyc2l6ZWQgYXJyYXlzLlxyXG5cdCAqIDIpIFJlc3BlY3RzIGFuZCBlbmZvcmNlcyBvcmRlcmVkIGxpc3QgaW5pdGlhbGl6YXRpb24gKGkuZS4gYWxsIGluaXQgdmFsdWVzIGFyZSBpZ25vcmVkIG9uY2UgYSB1bmZpbmlzaGVkIGFjdGl2aXR5IGlzXHJcblx0ICogZW5jb3VudGVyZWQgaW4gYW4gb3JkZXJlZCB0cmFja2luZyBsaXN0KS5cclxuXHQgKiAzKSBJZiB0aGUgdHJhY2tlciBpcyBmdWxseSBBY3RpdmF0ZWQgYXMgYSByZXN1bHQgb2YgdGhpcyBjYWxsLCB0aGUgbmV4dCBjYWxsIHRvIEluY3JlbWVudEFjdGl2aXR5IHdpbGwgcmFpc2UgdGhlXHJcblx0ICogSW5jcmVtZW50RWRnZVJlc3VsdC5BbGxBY3Rpdml0aWVzQWN0aXZhdGVkLCBmb3IgYW55IHZhbGlkIGluZGV4IGFjY2VwdGVkIGJ5IElzUGVybWl0dGVkSW5kZXhGb3JBY3RpdmF0aW9uQnlJbml0KCkuXHJcblx0ICovXHJcblx0cHVibGljIGluaXRDb3VudHMoYmFzZWxpbmVDb3VudHM6IG51bWJlcltdLCBvdGhlclRyYWNrZXJzOiBJbmRleGVkVHJhY2tlcltdLCB3YXNBbHJlYWR5QWN0aXZhdGVkVGhpc1Nlc3Npb246IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG5cdFx0Ly8gTk9URTogYmFzZWxpbmVJbmNyZW1lbnRzIGFuZCBzZXNzaW9uSW5jcmVtZW50cyBhcmUgc29ydGVkIHRoZSBzYW1lIGFzIHRoZSBpbml0aWFsIHRyYWNrZWRBY3Rpdml0eSBzZXQsIHdoaWNoXHJcblx0XHQvLyBmb3IgdGhpcyBjbGFzcyBpcyB0aGUgc2FtZSBhcyB0cmFja2VkQWN0aXZpdGllc1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmFja2VkQWN0aXZpdGllcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHQvLyBPbmx5IGFjY2VwdCB2YWx1ZXMgdXAgdG8gdGhlIGN1cnJlbnQgaW5kZXgsIHdoZW4gb3JkZXJlZFxyXG5cdFx0XHRpZiAodGhpcy5pc09yZGVyZWQgJiYgaSA+IHRoaXMuY3VycmVudEluZGV4KSB7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFN0YXJ0IG9mZiBieSBwdWxsaW5nIHZhbHVlcyBmcm9tIHRoaXMgc2Vzc2lvblxyXG5cdFx0XHRpZiAoaSA8IG90aGVyVHJhY2tlcnMubGVuZ3RoICYmIG90aGVyVHJhY2tlcnNbaV0pIHtcclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRTZXNzaW9uQ291bnRzW2ldID0gdGhpcy5jdXJyZW50Q291bnRzW2ldID0gb3RoZXJUcmFja2Vyc1tpXS50cmFja2VyLmdldFNlc3Npb25Db3VudChvdGhlclRyYWNrZXJzW2ldLmluZGV4KTtcclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRTdGFydFRpbWVzW2ldID0gb3RoZXJUcmFja2Vyc1tpXS50cmFja2VyLmdldFN0YXJ0VGltZShvdGhlclRyYWNrZXJzW2ldLmluZGV4KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSWYgd2UndmUgZ290IGEgYmFzZWxpbmUgZnJvbSBwcmV2aW91cyBzZXNzaW9ucywgYWRkIGl0IGluIGFzIHdlbGxcclxuXHRcdFx0aWYgKHRoaXMudHJhY2tlZEFjdGl2aXRpZXNbaV0uZ2V0SXNBZ2dyZWdhdGUoKSAmJiBpIDwgYmFzZWxpbmVDb3VudHMubGVuZ3RoKSB7XHJcblx0XHRcdFx0dGhpcy5jdXJyZW50Q291bnRzW2ldICs9IGJhc2VsaW5lQ291bnRzW2ldO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodGhpcy5oYXNDb3VudENyb3NzZWRUaHJlc2hvbGQoaSkpIHtcclxuXHRcdFx0XHR0aGlzLmZpbmlzaEFjdGl2aXR5QXRJbmRleChpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmlzQWN0aXZhdGVkKCkgJiYgIXdhc0FscmVhZHlBY3RpdmF0ZWRUaGlzU2Vzc2lvbikge1xyXG5cdFx0XHQvLyBNYXJrIHRoaXMgb2JqZWN0IHNvIHRoYXQgdGhlIG5leHQgdGltZSBhbnkgcGVybWl0dGVkIGFjdGl2YXRpb24gZXZlbnQgaXMgbG9nZ2VkLCB0aGUgc3VydmV5IHdpbGwgYWN0aXZhdGVcclxuXHRcdFx0dGhpcy5pc0FjdGl2YXRpb25CeUluaXRQZW5kaW5nID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZW5lcmF0ZUFjdGl2aXR5SW5kZXhMaXN0KCk6IEFjdGl2aXR5VHJhY2tlci5BY3Rpdml0eUluZGV4W10ge1xyXG5cdFx0Y29uc3QgaW5kZXhMaXN0ID0gbmV3IEFycmF5PEFjdGl2aXR5VHJhY2tlci5BY3Rpdml0eUluZGV4PigpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRyYWNrZWRBY3Rpdml0aWVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnQgPSBuZXcgQWN0aXZpdHlUcmFja2VyLkFjdGl2aXR5SW5kZXgoKTtcclxuXHRcdFx0Y3VycmVudC5hY3Rpdml0eSA9IHRoaXMudHJhY2tlZEFjdGl2aXRpZXNbaV0uZ2V0QWN0aXZpdHkoKTtcclxuXHRcdFx0Y3VycmVudC5pbmRleCA9IGk7XHJcblx0XHRcdGluZGV4TGlzdC5wdXNoKGN1cnJlbnQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpbmRleExpc3Q7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbmNyZW1lbnRzIHRoZSBjb3VudCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IGJ5IHRoZSBnaXZlbiBpbmNyZW1lbnQuICBSZXR1cm5zIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyXHJcblx0ICogb3Igbm90IHRoaXMgY2FsbCB0cmlnZ2VyZWQgYSB0cmFuc2l0aW9uIGVkZ2UgKGFjdGl2YXRpbmcgdGhlIGFjdGl2aXR5IGF0ICdpbmRleCcsIG9yIGZpbmlzaGluZyB0aGUgYWN0aXZhdGlvblxyXG5cdCAqIG9mIHRoZSBmaW5hbCBwZW5kaW5nIGFjdGl2aXR5KVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpbmNyZW1lbnRBY3Rpdml0eShpbmRleDogbnVtYmVyLCBpbmNyZW1lbnQ6IG51bWJlcik6IEFjdGl2aXR5VHJhY2tlci5JbmNyZW1lbnRSZXN1bHQge1xyXG5cdFx0aWYgKCF0aGlzLmlzVmFsaWRJbmRleChpbmRleCkpIHtcclxuXHRcdFx0cmV0dXJuIEFjdGl2aXR5VHJhY2tlci5JbmNyZW1lbnRSZXN1bHQuUGVuZGluZztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5jcmVtZW50IDwgMCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbmNyZW1lbnQgbXVzdCBiZSBub24tbmVnYXRpdmVcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gT3JkZXJlZCBzZXRzIG11c3QgYmUgdHJpZ2dlcmVkIGluIG9yZGVyLiAgV2UgY2FuIG9ubHkgdHJhY2sgYXQgdGhlIGN1cnJlbnQgaW5kZXgsIG9yIGJlZm9yZVxyXG5cdFx0aWYgKHRoaXMuaXNPcmRlcmVkICYmIGluZGV4ID4gdGhpcy5jdXJyZW50SW5kZXgpIHtcclxuXHRcdFx0cmV0dXJuIEFjdGl2aXR5VHJhY2tlci5JbmNyZW1lbnRSZXN1bHQuUGVuZGluZztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBZGQgdG8gb3VyIGNvdW50cyBhZnRlciBzdG9yaW5nIG9mZiBvdXIgY3VycmVudCBzdGF0ZVxyXG5cdFx0Y29uc3Qgc3RhcnRlZExlc3NUaGFuVGhyZXNob2xkID0gIXRoaXMuaGFzQ291bnRDcm9zc2VkVGhyZXNob2xkKGluZGV4KTtcclxuXHRcdHRoaXMuY3VycmVudENvdW50c1tpbmRleF0gKz0gaW5jcmVtZW50O1xyXG5cdFx0dGhpcy5jdXJyZW50U2Vzc2lvbkNvdW50c1tpbmRleF0gKz0gaW5jcmVtZW50O1xyXG5cclxuXHRcdGlmICh0aGlzLmlzQWN0aXZhdGlvbkJ5SW5pdFBlbmRpbmcpIHtcclxuXHRcdFx0aWYgKHRoaXMuaXNQZXJtaXR0ZWRJbmRleEZvckFjdGl2YXRpb25CeUluaXQoaW5kZXgpKSB7XHJcblx0XHRcdFx0Ly8gVGhpcyB0cmFja2VyIHdhcyBjb21wbGV0ZWQgZHVlIHRvIHRoZSBpbml0aWFsaXphdGlvbiBmcm9tIHByZXZpb3VzIGluY3JlbWVudCBkYXRhXHJcblx0XHRcdFx0Ly8gbm93IHRoYXQgd2UndmUgc3RvcmUgdGhpcyBhY3Rpdml0aWVzIGluY3JlbWVudHMsIHJhaXNlIHRoZSBBbGxBY3Rpdml0aWVzQWN0aXZhdGVkIHNpZ25hbFxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbW1pdEFjdGl2YXRpb24oKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBTdGlsbCB3YWl0aW5nIGZvciBhIHZhbGlkIHJlLWFjdGl2YXRpb24gYWN0aXZpdHlcclxuXHRcdFx0XHRyZXR1cm4gQWN0aXZpdHlUcmFja2VyLkluY3JlbWVudFJlc3VsdC5QZW5kaW5nO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCEoc3RhcnRlZExlc3NUaGFuVGhyZXNob2xkICYmIHRoaXMuaGFzQ291bnRDcm9zc2VkVGhyZXNob2xkKGluZGV4KSkpIHtcclxuXHRcdFx0Ly8gU3RpbGwgd2FpdGluZyBmb3IgdGhpcyBhY3Rpdml0eSB0byBmaW5pc2hcclxuXHRcdFx0cmV0dXJuIEFjdGl2aXR5VHJhY2tlci5JbmNyZW1lbnRSZXN1bHQuUGVuZGluZztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBNYXJrIHRoaXMgYWN0aXZpdHkgYXMgY29tcGxldGUgaW4gb3VyIGZsYWcgY29sbGVjdGlvblxyXG5cdFx0dGhpcy5maW5pc2hBY3Rpdml0eUF0SW5kZXgoaW5kZXgpO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzQWN0aXZhdGVkKCkpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuY29tbWl0QWN0aXZhdGlvbigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBBY3Rpdml0eVRyYWNrZXIuSW5jcmVtZW50UmVzdWx0LlNpbmdsZUFjdGl2aXR5QWN0aXZhdGVkO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRXhwbGljaXRseSBzZXRzIGEgc3RhcnQgdGltZXN0YW1wIChub3cgaWYgc3RhcnRUaW1lIGlzIG51bGwpIGZvciB0aGUgc3BlY2lmaWVkIGFjdGl2aXR5IGluZGV4LiBPdmVyd3JpdGVzIGFueSBwcmV2aW91cyBTdGFydFRpbWUuXHJcblx0ICovXHJcblx0cHVibGljIHN0YXJ0VGltZShpbmRleDogbnVtYmVyLCBzdGFydFRpbWU/OiBEYXRlKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuaXNWYWxpZEluZGV4KGluZGV4KSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5jdXJyZW50U3RhcnRUaW1lc1tpbmRleF0gPSAoIXN0YXJ0VGltZSkgPyBuZXcgRGF0ZSgpIDogc3RhcnRUaW1lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29tcHV0ZXMgdGhlIFwiY291bnRcIiBkZWx0YSAoZGVsdGEgaW4gd2hhdGV2ZXIgdW5pdHMgYXJlIGFwcHJvcHJpYXRlIGZvciBhIHN1YnNlcXVlbnQgY2FsbCB0byBJbmNyZW1lbnRBY3Rpdml0eSlcclxuXHQgKiBlbGFwc2VkIGJldHdlZW4gbm93IGFuZCBhIHByZXZpb3VzbHkgbG9nZ2VkIFN0YXJ0VGltZSBmb3IgdGhpcyBhY3Rpdml0eSBpbmRleC5cclxuXHQgKiBBbHdheXMgY2xlYXJzIHRoZSBwcmV2aW91cyBTdGFydFRpbWUuXHJcblx0ICogUmV0dXJucyAwIGlmIG5vIHByZXZpb3VzIFN0YXJ0VGltZSB3YXMgbG9nZ2VkLCBvciBpZiBTdGFydFRpbWUgPiBTdG9wVGltZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdG9wVGltZShpbmRleDogbnVtYmVyLCBzdG9wVGltZT86IERhdGUpOiBudW1iZXIge1xyXG5cdFx0aWYgKCF0aGlzLmlzVmFsaWRJbmRleChpbmRleCkpIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc3RhcnRUaW1lID0gdGhpcy5jdXJyZW50U3RhcnRUaW1lc1tpbmRleF07XHJcblx0XHR0aGlzLmN1cnJlbnRTdGFydFRpbWVzW2luZGV4XSA9IG51bGw7XHJcblxyXG5cdFx0aWYgKCFzdGFydFRpbWUpIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0c3RvcFRpbWUgPSAoIXN0b3BUaW1lKSA/IG5ldyBEYXRlKCkgOiBzdG9wVGltZTtcclxuXHRcdGlmIChzdGFydFRpbWUgPiBzdG9wVGltZSkge1xyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBkZWx0YU1TID0gc3RvcFRpbWUuZ2V0VGltZSgpIC0gc3RhcnRUaW1lLmdldFRpbWUoKTtcclxuXHRcdC8vIEN1cnJlbnRseSBhbGwgdGltZXIgYWN0aXZpdGllcyByZXR1cm4gc2Vjb25kcyBhcyB0aGUgaW5jcmVtZW50IHVuaXRcclxuXHRcdGxldCBkaWZmID0gZGVsdGFNUyAvIDEwMDA7XHJcblxyXG5cdFx0Ly8gQWRkaW5nIDFtcyB0byB0aGUgY291bnQgc28gaXQgY2FuIGhhdmUgdGhlIGRlY2ltYWwgcGxhY2VcclxuXHRcdC8vIFNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHRoZSBUaW1lIGFjdGl2aXR5XHJcblx0XHRpZiAoZGlmZiAlIDEgPT09IDApIHtcclxuXHRcdFx0ZGlmZiArPSAwLjAwMTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGlmZjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5kZXggaXMgdmFsaWQgZm9yIGFjY2Vzc2luZyB0aGUgc3RvcmVkIGFjdGl2aXR5IGNvdW50cywgZmFsc2Ugb3RoZXJ3aXNlXHJcblx0ICovXHJcblx0cHVibGljIGlzVmFsaWRJbmRleChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gaW5kZXggPCB0aGlzLnRyYWNrZWRBY3Rpdml0aWVzLmxlbmd0aDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIGZ1bGwgc2V0IG9mIGFjdGl2aXRpZXMgZm9yIHRoaXMgdHJhY2tlciBoYXZlIGV4Y2VlZGVkIHRoZWlyIHRyaWdnZXIgdGhyZXNob2xkc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0FjdGl2YXRlZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAodGhpcy5jdXJyZW50QWN0aXZhdGlvbkZsYWdzICYgdGhpcy5hY3RpdmF0aW9uTWFzaykgPT09IHRoaXMuYWN0aXZhdGlvbk1hc2s7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHRcdCogTWFya3MgdGhlIGFjdGl2aXR5IGF0IHRoZSBpbmRleCBhcyBmaW5pc2hlZC4gSW5jbHVkZXMgc2V0dGluZyB0aGUgcHJvcGVyXHJcblx0XHQqIGFjdGl2YXRpb24gZmxhZ3MgYW5kIHBvdGVudGlhbGx5IGFkdmFuY2luZyB0aGUgY3VycmVudCBpbmRleCBmb3Igb3JkZXJlZCB0cmFja2luZyBzZXRzXHJcblx0XHQqL1xyXG5cdHByaXZhdGUgZmluaXNoQWN0aXZpdHlBdEluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5pc1ZhbGlkSW5kZXgoaW5kZXgpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkluZGV4IGlzIG5vdCB2YWxpZFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmN1cnJlbnRBY3RpdmF0aW9uRmxhZ3MgfD0gMHgxIDw8IGluZGV4O1xyXG5cclxuXHRcdGlmIChpbmRleCArIDEgPCB0aGlzLnRyYWNrZWRBY3Rpdml0aWVzLmxlbmd0aCkge1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRJbmRleCA9IGluZGV4ICsgMTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwYXJhbSBpbmRleCBpbmRleFxyXG5cdCAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgY291bnRzIGZvciB0aGUgYWN0aXZpdHkgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBoYXZlIG1ldCBvciBleGNlZWRlZCB0aGUgdGhyZXNob2xkIGNvdW50LlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgaGFzQ291bnRDcm9zc2VkVGhyZXNob2xkKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuXHRcdGlmICghdGhpcy5pc1ZhbGlkSW5kZXgoaW5kZXgpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkluZGV4IGlzIG5vdCB2YWxpZFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jdXJyZW50Q291bnRzW2luZGV4XSA+PSB0aGlzLnRyYWNrZWRBY3Rpdml0aWVzW2luZGV4XS5nZXRDb3VudCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbmRleCByZWZlcnMgdG8gYW4gYWN0aXZpdHkgdGhhdCBjYW4gcmUtYWN0aXZhdGUgYSB0cmFja2VkIG9iamVjdCAoYWthIHJldHVybiBBbGxBY3Rpdml0aWVzQWN0aXZhdGVkKVxyXG5cdCAqIHRoYXQgd2FzIGluaXRpYWxpemVkIGFzIFwiY29tcGxldGVcIiB2aWEgaW5pdENvdW50cy5cclxuXHQgKiBOb3RlOiBGb3IgdW5vcmRlcmVkIHNldHMsIGFueSBhY3Rpdml0eSBpcyB2YWxpZC4gRm9yIG9yZGVyZWQgc2VxdWVuY2VzLCBvbmx5IHRoZSBmaW5hbCBhY3Rpdml0eSBpcyB2YWxpZFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgaXNQZXJtaXR0ZWRJbmRleEZvckFjdGl2YXRpb25CeUluaXQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuICF0aGlzLmlzT3JkZXJlZCB8fCAoKGluZGV4ICsgMSkgPT09IHRoaXMuY3VycmVudENvdW50cy5sZW5ndGgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjb21taXRBY3RpdmF0aW9uKCk6IEFjdGl2aXR5VHJhY2tlci5JbmNyZW1lbnRSZXN1bHQge1xyXG5cdFx0dGhpcy5pc0FjdGl2YXRpb25CeUluaXRQZW5kaW5nID0gZmFsc2U7XHJcblx0XHRyZXR1cm4gQWN0aXZpdHlUcmFja2VyLkluY3JlbWVudFJlc3VsdC5BbGxBY3Rpdml0aWVzQWN0aXZhdGVkO1xyXG5cdH1cclxufVxyXG5cclxubW9kdWxlIEFjdGl2aXR5VHJhY2tlciB7XHJcblx0LyoqXHJcblx0ICogU3RydWN0dXJlIHJldHVybmVkIGJ5IGFuIEFjdGl2aXR5VHJhY2tlciB0byBjYWxsIGJhY2sgaW50b1xyXG5cdCAqIEluY3JlbWVudEFjdGl2aXR5IHdpdGggdmFsaWQgaW5kZXggdmFsdWVzXHJcblx0ICovXHJcblx0ZXhwb3J0IGNsYXNzIEFjdGl2aXR5SW5kZXgge1xyXG5cdFx0cHVibGljIGFjdGl2aXR5OiBzdHJpbmc7XHJcblx0XHRwdWJsaWMgaW5kZXg6IG51bWJlcjtcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBjb25zdCBlbnVtIEluY3JlbWVudFJlc3VsdCB7XHJcblx0XHQvKipcclxuXHRcdCAqIE5vIHRocmVzaG9sZHMgY3Jvc3NlZCBhcyBhIHJlc3VsdCBvZiB0aGlzIGluY3JlbWVudCBvcGVyYXRpb25cclxuXHRcdCAqL1xyXG5cdFx0UGVuZGluZyxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFRoZSB0aHJlc2hvbGQgZm9yIHRoZSB0YXJnZXRlZCBhY3Rpdml0eSBpbmRleCB3YXMgY3Jvc3NlZCBhcyBhIHJlc3VsdCBvZiB0aGlzIGluY3JlbWVudCBvcGVyYXRpb25cclxuXHRcdCAqL1xyXG5cdFx0U2luZ2xlQWN0aXZpdHlBY3RpdmF0ZWQsXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBUaGUgdGhyZXNob2xkIGZvciB0aGUgdGFyZ2V0ZWQgYWN0aXZpdHkgaW5kZXggd2FzIGNyb3NzZWQgYXMgYSByZXN1bHQgb2YgdGhpcyBpbmNyZW1lbnQgb3BlcmF0aW9uXHJcblx0XHQgKiBhbmQgdGhpcyB3YXMgdGhlIGZpbmFsIGFjdGl2aXR5IGJlaW5nIHRyYWNrZWRcclxuXHRcdCAqL1xyXG5cdFx0QWxsQWN0aXZpdGllc0FjdGl2YXRlZCxcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCA9IEFjdGl2aXR5VHJhY2tlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/ActivityTracker.js\n')},"../FloodgateCore/dist/src/ActivityTrackingContract.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.ActivityTrackingContract = void 0;\nvar ActivityTrackingContract = /** @class */ (function () {\n    function ActivityTrackingContract(surveyId, trackingSet) {\n        this.surveyId = surveyId;\n        this.trackingSet = trackingSet;\n    }\n    return ActivityTrackingContract;\n}());\nexports.ActivityTrackingContract = ActivityTrackingContract;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FjdGl2aXR5VHJhY2tpbmdDb250cmFjdC50cz80NDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBO0lBSUMsa0NBQW1CLFFBQWdCLEVBQUUsV0FBZ0M7UUFDcEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDaEMsQ0FBQztJQUNGLCtCQUFDO0FBQUQsQ0FBQztBQVJZLDREQUF3QiIsImZpbGUiOiIuLi9GbG9vZGdhdGVDb3JlL2Rpc3Qvc3JjL0FjdGl2aXR5VHJhY2tpbmdDb250cmFjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2aXR5VHJhY2tpbmdTZXQgfSBmcm9tIFwiLi9BY3Rpdml0eVRyYWNraW5nU2V0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQWN0aXZpdHlUcmFja2luZ0NvbnRyYWN0IHtcclxuXHRwdWJsaWMgc3VydmV5SWQ6IHN0cmluZztcclxuXHRwdWJsaWMgdHJhY2tpbmdTZXQ6IEFjdGl2aXR5VHJhY2tpbmdTZXQ7XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihzdXJ2ZXlJZDogc3RyaW5nLCB0cmFja2luZ1NldDogQWN0aXZpdHlUcmFja2luZ1NldCkge1xyXG5cdFx0dGhpcy5zdXJ2ZXlJZCA9IHN1cnZleUlkO1xyXG5cdFx0dGhpcy50cmFja2luZ1NldCA9IHRyYWNraW5nU2V0O1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/ActivityTrackingContract.js\n')},"../FloodgateCore/dist/src/ActivityTrackingData.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.ActivityTrackingData = void 0;\n/**\n * Basic structure used to configure an ActivityTracker\n */\nvar ActivityTrackingData = /** @class */ (function () {\n    function ActivityTrackingData(activity, count, isAggregate) {\n        this.activity = activity;\n        this.count = count;\n        this.isAggregate = isAggregate;\n    }\n    ActivityTrackingData.prototype.getActivity = function () {\n        return this.activity;\n    };\n    ActivityTrackingData.prototype.getCount = function () {\n        return this.count;\n    };\n    ActivityTrackingData.prototype.setCount = function (count) {\n        this.count = count;\n    };\n    ActivityTrackingData.prototype.getIsAggregate = function () {\n        return this.isAggregate;\n    };\n    return ActivityTrackingData;\n}());\nexports.ActivityTrackingData = ActivityTrackingData;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FjdGl2aXR5VHJhY2tpbmdEYXRhLnRzP2Q5M2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSDtJQUtDLDhCQUFtQixRQUFnQixFQUFFLEtBQWEsRUFBRSxXQUFvQjtRQUN2RSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNoQyxDQUFDO0lBRU0sMENBQVcsR0FBbEI7UUFDQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdEIsQ0FBQztJQUVNLHVDQUFRLEdBQWY7UUFDQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDbkIsQ0FBQztJQUVNLHVDQUFRLEdBQWYsVUFBZ0IsS0FBYTtRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRU0sNkNBQWMsR0FBckI7UUFDQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDekIsQ0FBQztJQUNGLDJCQUFDO0FBQUQsQ0FBQztBQTFCWSxvREFBb0IiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9BY3Rpdml0eVRyYWNraW5nRGF0YS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBCYXNpYyBzdHJ1Y3R1cmUgdXNlZCB0byBjb25maWd1cmUgYW4gQWN0aXZpdHlUcmFja2VyXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQWN0aXZpdHlUcmFja2luZ0RhdGEge1xyXG5cdHByaXZhdGUgYWN0aXZpdHk6IHN0cmluZztcclxuXHRwcml2YXRlIGNvdW50OiBudW1iZXI7XHJcblx0cHJpdmF0ZSBpc0FnZ3JlZ2F0ZTogYm9vbGVhbjtcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKGFjdGl2aXR5OiBzdHJpbmcsIGNvdW50OiBudW1iZXIsIGlzQWdncmVnYXRlOiBib29sZWFuKSB7XHJcblx0XHR0aGlzLmFjdGl2aXR5ID0gYWN0aXZpdHk7XHJcblx0XHR0aGlzLmNvdW50ID0gY291bnQ7XHJcblx0XHR0aGlzLmlzQWdncmVnYXRlID0gaXNBZ2dyZWdhdGU7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0QWN0aXZpdHkoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmFjdGl2aXR5O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENvdW50KCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb3VudDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRDb3VudChjb3VudDogbnVtYmVyKTogdm9pZCB7XHJcblx0XHR0aGlzLmNvdW50ID0gY291bnQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0SXNBZ2dyZWdhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5pc0FnZ3JlZ2F0ZTtcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/ActivityTrackingData.js\n')},"../FloodgateCore/dist/src/ActivityTrackingSet.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.ActivityTrackingSet = void 0;\nvar Utils_1 = __webpack_require__(/*! ./Utils */ "../FloodgateCore/dist/src/Utils.js");\n/**\n * Class to hold a collection of Activity Tracking Data\n */\nvar ActivityTrackingSet = /** @class */ (function () {\n    function ActivityTrackingSet(isOrdered, list) {\n        this.isOrdered = isOrdered;\n        this.list = list;\n    }\n    ActivityTrackingSet.prototype.getIsOrdered = function () {\n        return this.isOrdered;\n    };\n    ActivityTrackingSet.prototype.getList = function () {\n        return this.list;\n    };\n    // returns a stringified json with the list and isOrdered info.\n    ActivityTrackingSet.prototype.getActivityTrackingInfo = function (activityListener, surveyId) {\n        var activitiesInfoObject;\n        if (this.list.length === 0) {\n            activitiesInfoObject = {\n                Activities: [],\n                IsListOrdered: this.isOrdered,\n            };\n            return JSON.stringify(activitiesInfoObject);\n        }\n        for (var _i = 0, _a = this.list; _i < _a.length; _i++) {\n            var trackingData = _a[_i];\n            var actualCount = activityListener.getCount(trackingData.getActivity(), surveyId);\n            var tempActivities = {\n                Activity: trackingData.getActivity(),\n                ActualCount: actualCount,\n                Count: trackingData.getCount(),\n                IsAggregate: trackingData.getIsAggregate(),\n                IsDiscrete: actualCount % 1 === 0,\n            };\n            if (Utils_1.isNOU(activitiesInfoObject)) {\n                activitiesInfoObject = {\n                    Activities: [tempActivities],\n                    IsListOrdered: this.isOrdered,\n                };\n            }\n            else {\n                activitiesInfoObject.Activities.push(tempActivities);\n            }\n        }\n        return JSON.stringify(activitiesInfoObject);\n    };\n    return ActivityTrackingSet;\n}());\nexports.ActivityTrackingSet = ActivityTrackingSet;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FjdGl2aXR5VHJhY2tpbmdTZXQudHM/Y2YzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSx1RkFBZ0M7QUFFaEM7O0dBRUc7QUFDSDtJQUlDLDZCQUFtQixTQUFrQixFQUFFLElBQTRCO1FBQ2xFLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUM7SUFFTSwwQ0FBWSxHQUFuQjtRQUNDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN2QixDQUFDO0lBRU0scUNBQU8sR0FBZDtRQUNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNsQixDQUFDO0lBRUQsK0RBQStEO0lBQ3hELHFEQUF1QixHQUE5QixVQUErQixnQkFBd0MsRUFBRSxRQUFnQjtRQUV4RixJQUFJLG9CQUdILENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMzQixvQkFBb0IsR0FBRztnQkFDdEIsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzdCLENBQUM7WUFFRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUM1QztRQUVELEtBQTJCLFVBQVMsRUFBVCxTQUFJLENBQUMsSUFBSSxFQUFULGNBQVMsRUFBVCxJQUFTLEVBQUU7WUFBakMsSUFBTSxZQUFZO1lBRXRCLElBQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEYsSUFBTSxjQUFjLEdBQUc7Z0JBQ3BCLFFBQVEsRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFO2dCQUNwQyxXQUFXLEVBQUUsV0FBVztnQkFDeEIsS0FBSyxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUU7Z0JBQzlCLFdBQVcsRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFO2dCQUMxQyxVQUFVLEVBQUUsV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDO2FBQ2pDLENBQUM7WUFFSixJQUFJLGFBQUssQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO2dCQUNoQyxvQkFBb0IsR0FBRztvQkFDbkIsVUFBVSxFQUFFLENBQUMsY0FBYyxDQUFDO29CQUM1QixhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVM7aUJBQzdCLENBQUM7YUFDTDtpQkFBTTtnQkFDTixvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3JEO1NBQ0Q7UUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0YsMEJBQUM7QUFBRCxDQUFDO0FBekRZLGtEQUFtQiIsImZpbGUiOiIuLi9GbG9vZGdhdGVDb3JlL2Rpc3Qvc3JjL0FjdGl2aXR5VHJhY2tpbmdTZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpdml0eVRyYWNraW5nRGF0YSB9IGZyb20gXCIuL0FjdGl2aXR5VHJhY2tpbmdEYXRhXCI7XHJcbmltcG9ydCBTdXJ2ZXlBY3Rpdml0eUxpc3RlbmVyID0gcmVxdWlyZShcIi4vU3VydmV5QWN0aXZpdHlMaXN0ZW5lclwiKTtcclxuaW1wb3J0IHsgaXNOT1UgfSBmcm9tIFwiLi9VdGlsc1wiO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIHRvIGhvbGQgYSBjb2xsZWN0aW9uIG9mIEFjdGl2aXR5IFRyYWNraW5nIERhdGFcclxuICovXHJcbmV4cG9ydCBjbGFzcyBBY3Rpdml0eVRyYWNraW5nU2V0IHtcclxuXHRwcml2YXRlIGlzT3JkZXJlZDogYm9vbGVhbjtcclxuXHRwcml2YXRlIGxpc3Q6IEFjdGl2aXR5VHJhY2tpbmdEYXRhW107XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihpc09yZGVyZWQ6IGJvb2xlYW4sIGxpc3Q6IEFjdGl2aXR5VHJhY2tpbmdEYXRhW10pIHtcclxuXHRcdHRoaXMuaXNPcmRlcmVkID0gaXNPcmRlcmVkO1xyXG5cdFx0dGhpcy5saXN0ID0gbGlzdDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRJc09yZGVyZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5pc09yZGVyZWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0TGlzdCgpOiBBY3Rpdml0eVRyYWNraW5nRGF0YVtdIHtcclxuXHRcdHJldHVybiB0aGlzLmxpc3Q7XHJcblx0fVxyXG5cclxuXHQvLyByZXR1cm5zIGEgc3RyaW5naWZpZWQganNvbiB3aXRoIHRoZSBsaXN0IGFuZCBpc09yZGVyZWQgaW5mby5cclxuXHRwdWJsaWMgZ2V0QWN0aXZpdHlUcmFja2luZ0luZm8oYWN0aXZpdHlMaXN0ZW5lcjogU3VydmV5QWN0aXZpdHlMaXN0ZW5lciwgc3VydmV5SWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG5cdFx0bGV0IGFjdGl2aXRpZXNJbmZvT2JqZWN0OiB7XHJcblx0XHRcdEFjdGl2aXRpZXM6IEFycmF5PHsgQWN0aXZpdHk6IHN0cmluZywgQ291bnQ6IG51bWJlciwgSXNBZ2dyZWdhdGU6IGJvb2xlYW4gfT4sXHJcblx0XHRcdElzTGlzdE9yZGVyZWQ6IGJvb2xlYW4sXHJcblx0XHR9O1xyXG5cclxuXHRcdGlmICh0aGlzLmxpc3QubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdGFjdGl2aXRpZXNJbmZvT2JqZWN0ID0ge1xyXG5cdFx0XHRcdEFjdGl2aXRpZXM6IFtdLFxyXG5cdFx0XHRcdElzTGlzdE9yZGVyZWQ6IHRoaXMuaXNPcmRlcmVkLFxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGFjdGl2aXRpZXNJbmZvT2JqZWN0KTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IHRyYWNraW5nRGF0YSBvZiB0aGlzLmxpc3QpIHtcclxuXHJcblx0XHRcdGNvbnN0IGFjdHVhbENvdW50ID0gYWN0aXZpdHlMaXN0ZW5lci5nZXRDb3VudCh0cmFja2luZ0RhdGEuZ2V0QWN0aXZpdHkoKSwgc3VydmV5SWQpO1xyXG5cdFx0XHRjb25zdCB0ZW1wQWN0aXZpdGllcyA9IHtcclxuXHRcdFx0XHRcdFx0QWN0aXZpdHk6IHRyYWNraW5nRGF0YS5nZXRBY3Rpdml0eSgpLFxyXG5cdFx0XHRcdFx0XHRBY3R1YWxDb3VudDogYWN0dWFsQ291bnQsXHJcblx0XHRcdFx0XHRcdENvdW50OiB0cmFja2luZ0RhdGEuZ2V0Q291bnQoKSxcclxuXHRcdFx0XHRcdFx0SXNBZ2dyZWdhdGU6IHRyYWNraW5nRGF0YS5nZXRJc0FnZ3JlZ2F0ZSgpLFxyXG5cdFx0XHRcdFx0XHRJc0Rpc2NyZXRlOiBhY3R1YWxDb3VudCAlIDEgPT09IDAsXHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0aWYgKGlzTk9VKGFjdGl2aXRpZXNJbmZvT2JqZWN0KSkge1xyXG5cdFx0XHRcdGFjdGl2aXRpZXNJbmZvT2JqZWN0ID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0QWN0aXZpdGllczogW3RlbXBBY3Rpdml0aWVzXSxcclxuXHRcdFx0XHRcdFx0XHRcdElzTGlzdE9yZGVyZWQ6IHRoaXMuaXNPcmRlcmVkLFxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YWN0aXZpdGllc0luZm9PYmplY3QuQWN0aXZpdGllcy5wdXNoKHRlbXBBY3Rpdml0aWVzKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShhY3Rpdml0aWVzSW5mb09iamVjdCk7XHJcblx0fVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/ActivityTrackingSet.js\n')},"../FloodgateCore/dist/src/Api/Api.js":function(){"use strict";eval('\n/**\n * Parent module for all modules in Api/\n */\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.ISurveyInfo = exports.ISurveyComponent = exports.ISurvey = exports.IFloodgateSettingIdMap = exports.IFloodgateStorageProvider = exports.IActivityListener = void 0;\nvar ISurveyInfo = __webpack_require__(/*! ./../ISurveyInfo */ "../FloodgateCore/dist/src/ISurveyInfo.js");\nexports.ISurveyInfo = ISurveyInfo;\nvar IActivityListener = __webpack_require__(/*! ./IActivityListener */ "../FloodgateCore/dist/src/Api/IActivityListener.js");\nexports.IActivityListener = IActivityListener;\nvar IFloodgateSettingIdMap = __webpack_require__(/*! ./IFloodgateSettingIdMap */ "../FloodgateCore/dist/src/Api/IFloodgateSettingIdMap.js");\nexports.IFloodgateSettingIdMap = IFloodgateSettingIdMap;\nvar IFloodgateStorageProvider = __webpack_require__(/*! ./IFloodgateStorageProvider */ "../FloodgateCore/dist/src/Api/IFloodgateStorageProvider.js");\nexports.IFloodgateStorageProvider = IFloodgateStorageProvider;\nvar ISurvey = __webpack_require__(/*! ./ISurvey */ "../FloodgateCore/dist/src/Api/ISurvey.js");\nexports.ISurvey = ISurvey;\nvar ISurveyComponent = __webpack_require__(/*! ./ISurveyComponent */ "../FloodgateCore/dist/src/Api/ISurveyComponent.js");\nexports.ISurveyComponent = ISurveyComponent;\nvar CampaignDefinitionProvider_1 = __webpack_require__(/*! ../Campaign/CampaignDefinitionProvider */ "../FloodgateCore/dist/src/Campaign/CampaignDefinitionProvider.js");\nObject.defineProperty(exports, "CampaignDefinition", { enumerable: true, get: function () { return CampaignDefinitionProvider_1.CampaignDefinition; } });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FwaS9BcGkudHM/NTljMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQUVILDBHQUFnRDtBQXVDdkMsa0NBQVc7QUF0Q3BCLDZIQUF5RDtBQVFoRCw4Q0FBaUI7QUFQMUIsNElBQW1FO0FBcUIxRCx3REFBc0I7QUFwQi9CLHFKQUF5RTtBQWtCaEUsOERBQXlCO0FBaEJsQywrRkFBcUM7QUE2QjVCLDBCQUFPO0FBNUJoQiwwSEFBdUQ7QUE2QjlDLDRDQUFnQjtBQTNCekIseUtBQTRFO0FBQW5FLGtKQUFrQiIsImZpbGUiOiIuLi9GbG9vZGdhdGVDb3JlL2Rpc3Qvc3JjL0FwaS9BcGkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogUGFyZW50IG1vZHVsZSBmb3IgYWxsIG1vZHVsZXMgaW4gQXBpL1xyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIElTdXJ2ZXlJbmZvIGZyb20gXCIuLy4uL0lTdXJ2ZXlJbmZvXCI7XHJcbmltcG9ydCAqIGFzIElBY3Rpdml0eUxpc3RlbmVyIGZyb20gXCIuL0lBY3Rpdml0eUxpc3RlbmVyXCI7XHJcbmltcG9ydCAqIGFzIElGbG9vZGdhdGVTZXR0aW5nSWRNYXAgZnJvbSBcIi4vSUZsb29kZ2F0ZVNldHRpbmdJZE1hcFwiO1xyXG5pbXBvcnQgKiBhcyBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyIGZyb20gXCIuL0lGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXJcIjtcclxuaW1wb3J0ICogYXMgSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyIGZyb20gXCIuL0lGbG9vZGdhdGVTdHJpbmdQcm92aWRlclwiO1xyXG5pbXBvcnQgKiBhcyBJU3VydmV5IGZyb20gXCIuL0lTdXJ2ZXlcIjtcclxuaW1wb3J0ICogYXMgSVN1cnZleUNvbXBvbmVudCBmcm9tIFwiLi9JU3VydmV5Q29tcG9uZW50XCI7XHJcblxyXG5leHBvcnQgeyBDYW1wYWlnbkRlZmluaXRpb24gfSBmcm9tIFwiLi4vQ2FtcGFpZ24vQ2FtcGFpZ25EZWZpbml0aW9uUHJvdmlkZXJcIjtcclxuZXhwb3J0IHsgSUFjdGl2aXR5TGlzdGVuZXIgfTtcclxuZXhwb3J0IHsgSUFzc2V0c1Byb3ZpZGVyIH0gZnJvbSBcIi4vSUFzc2V0c1Byb3ZpZGVyXCI7XHJcbmV4cG9ydCB7IElBdWdMb29wQ2FsbGJhY2sgfSBmcm9tIFwiLi9JQXVnTG9vcENhbGxiYWNrXCI7XHJcbmV4cG9ydCB7IElCcHNTdXJ2ZXkgfSBmcm9tIFwiLi9JQnBzU3VydmV5XCI7XHJcbmV4cG9ydCB7IElDYW1wYWlnbkRlZmluaXRpb25Qcm92aWRlciB9IGZyb20gXCIuLi9DYW1wYWlnbi9DYW1wYWlnbkRlZmluaXRpb25Qcm92aWRlclwiO1xyXG5leHBvcnQgeyBJQ29tbWVudENvbXBvbmVudCB9IGZyb20gXCIuL0lDb21tZW50Q29tcG9uZW50XCI7XHJcbmV4cG9ydCB7IElDVlN1cnZleUNvbXBvbmVudCB9IGZyb20gXCIuL0lDVlN1cnZleUNvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBJRGF0YVByb3ZpZGVyIH0gZnJvbSBcIi4vSURhdGFQcm92aWRlclwiO1xyXG5leHBvcnQgeyBJRmVlZGJhY2tTdXJ2ZXkgfSBmcm9tIFwiLi9JRmVlZGJhY2tTdXJ2ZXlcIjtcclxuZXhwb3J0IHsgSUZsb29kZ2F0ZUF1dGhUb2tlbkNhbGxiYWNrIH0gZnJvbSBcIi4vSUZsb29kZ2F0ZUF1dGhUb2tlbkNhbGxiYWNrXCI7XHJcbmV4cG9ydCB7IElGbG9vZGdhdGVFbnZpcm9ubWVudFByb3ZpZGVyIH0gZnJvbSBcIi4vSUZsb29kZ2F0ZUVudmlyb25tZW50UHJvdmlkZXJcIjtcclxuZXhwb3J0IHsgSUZsb29kZ2F0ZVNldHRpbmdTdG9yYWdlQ2FsbGJhY2sgfSBmcm9tIFwiLi9JRmxvb2RnYXRlU2V0dGluZ1N0b3JhZ2VDYWxsYmFja1wiO1xyXG5leHBvcnQgeyBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyIH07XHJcbmV4cG9ydCB7IElGbG9vZGdhdGVTdHJpbmdQcm92aWRlciB9O1xyXG5leHBvcnQgeyBJRmxvb2RnYXRlU2V0dGluZ0lkTWFwIH07XHJcbmV4cG9ydCB7IElGbG9vZGdhdGVUZWxlbWV0cnlMb2dnZXIgfSBmcm9tIFwiLi9JRmxvb2RnYXRlVGVsZW1ldHJ5TG9nZ2VyXCI7XHJcbmV4cG9ydCB7IElGcHNTdXJ2ZXkgfSBmcm9tIFwiLi9JRnBzU3VydmV5XCI7XHJcbmV4cG9ydCB7IElOcHNTdXJ2ZXkgfSBmcm9tIFwiLi9JTnBzU3VydmV5XCI7XHJcbmV4cG9ydCB7IElJbnRlcmNlcHRTdXJ2ZXkgfSBmcm9tIFwiLi9JSW50ZXJjZXB0U3VydmV5XCI7XHJcbmV4cG9ydCB7IElPblN1cnZleUFjdGl2YXRlZENhbGxiYWNrIH0gZnJvbSBcIi4vSU9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2tcIjtcclxuZXhwb3J0IHsgSVByb21wdENvbXBvbmVudCB9IGZyb20gXCIuL0lQcm9tcHRDb21wb25lbnRcIjtcclxuZXhwb3J0IHsgSUludGVyY2VwdENvbXBvbmVudCB9IGZyb20gXCIuL0lJbnRlcmNlcHRDb21wb25lbnRcIjtcclxuZXhwb3J0IHsgSVBzYXRTdXJ2ZXkgfSBmcm9tIFwiLi9JUHNhdFN1cnZleVwiO1xyXG5leHBvcnQgeyBJUmF0aW5nQ29tcG9uZW50IH0gZnJvbSBcIi4vSVJhdGluZ0NvbXBvbmVudFwiO1xyXG5leHBvcnQgeyBJRmxvb2RnYXRlU2V0dGluZyB9IGZyb20gXCIuL0lGbG9vZGdhdGVTZXR0aW5nXCI7XHJcbmV4cG9ydCB7IElTdXJ2ZXkgfTtcclxuZXhwb3J0IHsgSVN1cnZleUNvbXBvbmVudCB9O1xyXG5leHBvcnQgeyBJU3VydmV5RG9tV3JpdGVyIH0gZnJvbSBcIi4vSVN1cnZleURvbVdyaXRlclwiO1xyXG5leHBvcnQgeyBJU3VydmV5Rm9ybSB9IGZyb20gXCIuL0lTdXJ2ZXlGb3JtXCI7XHJcbmV4cG9ydCB7IElTdXJ2ZXlKc29uV3JpdGVyIH0gZnJvbSBcIi4vSVN1cnZleUpzb25Xcml0ZXJcIjtcclxuZXhwb3J0IHsgSVN1cnZleUluZm8gfTtcclxuZXhwb3J0IHsgSVN1cnZleUxhdW5jaGVyIH0gZnJvbSBcIi4vSVN1cnZleUxhdW5jaGVyXCI7XHJcbmV4cG9ydCB7IElTdXJ2ZXlMYXVuY2hlckZhY3RvcnkgfSBmcm9tIFwiLi9JU3VydmV5TGF1bmNoZXJGYWN0b3J5XCI7XHJcbmV4cG9ydCB7IElUZWxlbWV0cnlQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vSVRlbGVtZXRyeVByb3BlcnRpZXNcIjtcclxuZXhwb3J0IHsgSVRyYW5zcG9ydGVyIH0gZnJvbSBcIi4vSVRyYW5zcG9ydGVyXCI7XHJcbmV4cG9ydCB7IElUcmFuc3BvcnRlckZhY3RvcnkgfSBmcm9tIFwiLi9JVHJhbnNwb3J0ZXJGYWN0b3J5XCI7XHJcbmV4cG9ydCB7IElVc2VyRmFjdCB9IGZyb20gXCIuLi9Vc2VyRmFjdC9JVXNlckZhY3RcIjtcclxuZXhwb3J0IHsgSVVzZXJGYWN0UHJvdmlkZXIgfSBmcm9tIFwiLi9JVXNlckZhY3RQcm92aWRlclwiO1xyXG5leHBvcnQgeyBJR292ZXJuYW5jZVNlcnZpY2VDbGllbnQgfSBmcm9tIFwiLi9JR292ZXJuYW5jZVNlcnZpY2VDbGllbnRcIjtcclxuZXhwb3J0IHsgSVBlcnNvbmFsaXplckNsaWVudCB9IGZyb20gXCIuL0lQZXJzb25hbGl6ZXJDbGllbnRcIjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Api/Api.js\n')},"../FloodgateCore/dist/src/Api/IActivityListener.js":function(){"use strict";eval('\nvar IActivityListener;\n(function (IActivityListener) {\n    var ActivityName = /** @class */ (function () {\n        function ActivityName() {\n        }\n        ActivityName.AppLaunch = "AppLaunch";\n        ActivityName.AppUsageTime = "AppUsageTime";\n        ActivityName.AppResume = "AppResume";\n        return ActivityName;\n    }());\n    IActivityListener.ActivityName = ActivityName;\n})(IActivityListener || (IActivityListener = {}));\nmodule.exports = IActivityListener;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FwaS9JQWN0aXZpdHlMaXN0ZW5lci50cz8yMzBmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUF3QkEsSUFBTyxpQkFBaUIsQ0FVdkI7QUFWRCxXQUFPLGlCQUFpQjtJQUt2QjtRQUFBO1FBSUEsQ0FBQztRQUh1QixzQkFBUyxHQUFHLFdBQVcsQ0FBQztRQUN4Qix5QkFBWSxHQUFHLGNBQWMsQ0FBQztRQUM5QixzQkFBUyxHQUFHLFdBQVcsQ0FBQztRQUNoRCxtQkFBQztLQUFBO0lBSlksOEJBQVksZUFJeEI7QUFDRixDQUFDLEVBVk0saUJBQWlCLEtBQWpCLGlCQUFpQixRQVV2QjtBQUVELGlCQUFTLGlCQUFpQixDQUFDIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvQXBpL0lBY3Rpdml0eUxpc3RlbmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFRoZSBtYWluIGludGVyZmFjZSB0byB1c2Ugd2hlbiBpbnN0cnVtZW50aW5nIHN1cnZleSBhY3Rpdml0aWVzIGluIGFwcCBjb2RlXHJcbiAqL1xyXG5pbnRlcmZhY2UgSUFjdGl2aXR5TGlzdGVuZXIge1xyXG5cdC8qKlxyXG5cdCAqIExvZyBhbiBhY3Rpdml0eSB0byBGbG9vZGdhdGUsIGluY3JlbWVudGluZyBpdHMgb2NjdXJyZW5jZSBjb3VudCBieSB0aGUgZ2l2ZW4gbnVtYmVyIGlmIHNwZWNpZmllZCxcclxuXHQgKiBvdGhlcndpc2UgaW5jcmVtZW50aW5nIGl0cyBvY2N1cnJlbmNlIGNvdW50IGJ5IG9uZSBhcyBkZWZhdWx0XHJcblx0ICovXHJcblx0bG9nQWN0aXZpdHkoYWN0aXZpdHlOYW1lOiBzdHJpbmcsIGluY3JlbWVudD86IG51bWJlciwgY29udGV4dD864oCvSUFjdGl2aXR5TGlzdGVuZXIuSUFjdGl2aXR5Q29udGV4dCk6IHZvaWQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0YXJ0IGFuIGFjdGl2aXR5IHRpbWVyIChvdmVyd3JpdGluZyBhbnkgcHJldmlvdXNseSB1bmNsb3NlZCBzdGFydCkuXHJcblx0ICogTk9URTogRG9lcyBub3QgaW5jcmVtZW50IHRoZSBhY3Rpdml0eSBjb3VudC5cclxuXHQgKi9cclxuXHRsb2dBY3Rpdml0eVN0YXJ0VGltZShhY3Rpdml0eU5hbWU6IHN0cmluZywgc3RhcnRUaW1lPzogRGF0ZSk6IHZvaWQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0b3AgYW4gYWN0aXZpdHkgdGltZXIgYW5kIGNsZWFycyB0aGUgcHJldmlvdXMgc3RhcnQgdGltZS5cclxuXHQgKiBBZGRzIHRoZSBlbGFwc2VkIHNlY29uZHMgYmV0d2VlbiB0aGlzIHN0b3AgYW5kIHRoZSBwcmV2aW91cyBzdGFydCBpbnRvIHRoZSBjb3VudCBmb3IgdGhpcyBhY3Rpdml0eVxyXG5cdCAqIFxcbm90ZSBJZiBubyBwcmV2aW91cyBzdGFydCB3YXMgbG9nZ2VkLCBvciBzdGFydCBpcyBzb21laG93IGluIHRoZSBmdXR1cmUsIHJlc3VsdHMgaW4gMCBjb3VudCBpbmNyZW1lbnRcclxuXHQgKi9cclxuXHRsb2dBY3Rpdml0eVN0b3BUaW1lKGFjdGl2aXR5TmFtZTogc3RyaW5nLCBzdG9wVGltZT86IERhdGUpOiB2b2lkO1xyXG59XHJcblxyXG5tb2R1bGUgSUFjdGl2aXR5TGlzdGVuZXIge1xyXG5cdGV4cG9ydOKAr2ludGVyZmFjZeKAr0lBY3Rpdml0eUNvbnRleHTigK97XHJcblx0XHRkYXRhPzrigK91bmtub3duO1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGNsYXNzIEFjdGl2aXR5TmFtZSB7XHJcblx0XHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFwcExhdW5jaCA9IFwiQXBwTGF1bmNoXCI7XHJcblx0XHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFwcFVzYWdlVGltZSA9IFwiQXBwVXNhZ2VUaW1lXCI7XHJcblx0XHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFwcFJlc3VtZSA9IFwiQXBwUmVzdW1lXCI7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgPSBJQWN0aXZpdHlMaXN0ZW5lcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Api/IActivityListener.js\n')},"../FloodgateCore/dist/src/Api/IFloodgateSettingIdMap.js":function(){"use strict";eval("\nvar IFloodgateSettingIdMap;\n(function (IFloodgateSettingIdMap) {\n    /**\n     * Collection of setting names and ids\n     */\n    IFloodgateSettingIdMap.RoamingSettingIdMap = {\n        CampaignStates: 1258,\n        GovernedChannelStates: 1257,\n        SurveyActivationStats: 1259,\n    };\n})(IFloodgateSettingIdMap || (IFloodgateSettingIdMap = {}));\nmodule.exports = IFloodgateSettingIdMap;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FwaS9JRmxvb2RnYXRlU2V0dGluZ0lkTWFwLnRzP2YzZTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQU9BLElBQU8sc0JBQXNCLENBUzVCO0FBVEQsV0FBTyxzQkFBc0I7SUFDNUI7O09BRUc7SUFDVSwwQ0FBbUIsR0FBRztRQUNsQyxjQUFjLEVBQUUsSUFBSTtRQUNwQixxQkFBcUIsRUFBRSxJQUFJO1FBQzNCLHFCQUFxQixFQUFFLElBQUk7S0FDM0IsQ0FBQztBQUNILENBQUMsRUFUTSxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBUzVCO0FBRUQsaUJBQVMsc0JBQXNCLENBQUMiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9BcGkvSUZsb29kZ2F0ZVNldHRpbmdJZE1hcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBJbnRlcmZhY2UgZm9yIGEgY29sbGVjdGlvbiBvZiBGbG9vZGdhdGUgc2V0dGluZyBuYW1lcyBhbmQgaWRzXHJcbiAqL1xyXG5pbnRlcmZhY2UgSUZsb29kZ2F0ZVNldHRpbmdJZE1hcCB7XHJcblx0cmVhZG9ubHkgW2tleTogc3RyaW5nXTogbnVtYmVyO1xyXG59XHJcblxyXG5tb2R1bGUgSUZsb29kZ2F0ZVNldHRpbmdJZE1hcCB7XHJcblx0LyoqXHJcblx0ICogQ29sbGVjdGlvbiBvZiBzZXR0aW5nIG5hbWVzIGFuZCBpZHNcclxuXHQgKi9cclxuXHRleHBvcnQgY29uc3QgUm9hbWluZ1NldHRpbmdJZE1hcCA9IHtcclxuXHRcdENhbXBhaWduU3RhdGVzOiAxMjU4LFxyXG5cdFx0R292ZXJuZWRDaGFubmVsU3RhdGVzOiAxMjU3LFxyXG5cdFx0U3VydmV5QWN0aXZhdGlvblN0YXRzOiAxMjU5LFxyXG5cdH07XHJcbn1cclxuXHJcbmV4cG9ydCA9IElGbG9vZGdhdGVTZXR0aW5nSWRNYXA7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Api/IFloodgateSettingIdMap.js\n")},"../FloodgateCore/dist/src/Api/IFloodgateStorageProvider.js":function(){"use strict";eval('\nvar IFloodgateStorageProvider;\n(function (IFloodgateStorageProvider) {\n    /**\n     * Enum for the files used by floodgate\n     */\n    var FileType;\n    (function (FileType) {\n        FileType[FileType["FloodgateSettings"] = 0] = "FloodgateSettings";\n        FileType[FileType["SurveyActivationStats"] = 1] = "SurveyActivationStats";\n        FileType[FileType["SurveyEventActivityStats"] = 2] = "SurveyEventActivityStats";\n        FileType[FileType["CampaignDefinitions"] = 3] = "CampaignDefinitions";\n        FileType[FileType["CampaignStates"] = 4] = "CampaignStates";\n        FileType[FileType["GovernedChannelStates"] = 5] = "GovernedChannelStates";\n        FileType[FileType["TmsCache_MessageMetadata"] = 6] = "TmsCache_MessageMetadata";\n        FileType[FileType["TmsCache_UserGovernance"] = 7] = "TmsCache_UserGovernance";\n        FileType[FileType["TmsCache_CampaignContent"] = 8] = "TmsCache_CampaignContent";\n        FileType[FileType["Tms_DynamicSettings"] = 9] = "Tms_DynamicSettings";\n        FileType[FileType["LogLevelSettings"] = 10] = "LogLevelSettings";\n        FileType[FileType["UserFacts"] = 11] = "UserFacts";\n        FileType[FileType["DebugOverrides"] = 12] = "DebugOverrides";\n    })(FileType = IFloodgateStorageProvider.FileType || (IFloodgateStorageProvider.FileType = {}));\n})(IFloodgateStorageProvider || (IFloodgateStorageProvider = {}));\nmodule.exports = IFloodgateStorageProvider;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FwaS9JRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyLnRzPzkzZDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQXlCQSxJQUFPLHlCQUF5QixDQW1CL0I7QUFuQkQsV0FBTyx5QkFBeUI7SUFDL0I7O09BRUc7SUFDSCxJQUFZLFFBY1g7SUFkRCxXQUFZLFFBQVE7UUFDbkIsaUVBQWlCO1FBQ2pCLHlFQUFxQjtRQUNyQiwrRUFBd0I7UUFDeEIscUVBQW1CO1FBQ25CLDJEQUFjO1FBQ2QseUVBQXFCO1FBQ3JCLCtFQUF3QjtRQUN4Qiw2RUFBdUI7UUFDdkIsK0VBQXdCO1FBQ3hCLHFFQUFtQjtRQUNuQixnRUFBZ0I7UUFDaEIsa0RBQVM7UUFDVCw0REFBYztJQUNmLENBQUMsRUFkVyxRQUFRLEdBQVIsa0NBQVEsS0FBUixrQ0FBUSxRQWNuQjtBQUNGLENBQUMsRUFuQk0seUJBQXlCLEtBQXpCLHlCQUF5QixRQW1CL0I7QUFFRCxpQkFBUyx5QkFBeUIsQ0FBQyIsImZpbGUiOiIuLi9GbG9vZGdhdGVDb3JlL2Rpc3Qvc3JjL0FwaS9JRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEludGVyZmFjZSBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBmbG9vZGdhdGUtc3BlY2lmaWMgZGF0YSBmcm9tIHN0b3JhZ2VcclxuICovXHJcbmludGVyZmFjZSBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyIHtcclxuXHQvKipcclxuXHQgKiBMb2NrIHRoZSBmaWxlIHRvIHByZXZlbnQgYWNjZXNzIGZyb20gYW5vdGhlciBwcm9jZXNzLlxyXG5cdCAqL1xyXG5cdGZpbGVMb2NrKGZpbGVUeXBlOiBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyLkZpbGVUeXBlKTogdm9pZDtcclxuXHJcblx0LyoqXHJcblx0ICogVW5sb2NrIHRoZSBmaWxlLlxyXG5cdCAqL1xyXG5cdGZpbGVVbmxvY2soZmlsZVR5cGU6IElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIuRmlsZVR5cGUpOiB2b2lkO1xyXG5cclxuXHQvKipcclxuXHQgKiBSZWFkIHRoZSBmaWxlXHJcblx0ICovXHJcblx0cmVhZChmaWxlVHlwZTogSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlci5GaWxlVHlwZSk6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogV3JpdGUgdG8gdGhlIGZpbGVcclxuXHQgKi9cclxuXHR3cml0ZShmaWxlVHlwZTogSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlci5GaWxlVHlwZSwgY29udGVudDogc3RyaW5nKTogdm9pZDtcclxufVxyXG5cclxubW9kdWxlIElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIge1xyXG5cdC8qKlxyXG5cdCAqIEVudW0gZm9yIHRoZSBmaWxlcyB1c2VkIGJ5IGZsb29kZ2F0ZVxyXG5cdCAqL1xyXG5cdGV4cG9ydCBlbnVtIEZpbGVUeXBlIHtcclxuXHRcdEZsb29kZ2F0ZVNldHRpbmdzLFxyXG5cdFx0U3VydmV5QWN0aXZhdGlvblN0YXRzLFxyXG5cdFx0U3VydmV5RXZlbnRBY3Rpdml0eVN0YXRzLFxyXG5cdFx0Q2FtcGFpZ25EZWZpbml0aW9ucyxcclxuXHRcdENhbXBhaWduU3RhdGVzLFxyXG5cdFx0R292ZXJuZWRDaGFubmVsU3RhdGVzLFxyXG5cdFx0VG1zQ2FjaGVfTWVzc2FnZU1ldGFkYXRhLFxyXG5cdFx0VG1zQ2FjaGVfVXNlckdvdmVybmFuY2UsXHJcblx0XHRUbXNDYWNoZV9DYW1wYWlnbkNvbnRlbnQsXHJcblx0XHRUbXNfRHluYW1pY1NldHRpbmdzLFxyXG5cdFx0TG9nTGV2ZWxTZXR0aW5ncyxcclxuXHRcdFVzZXJGYWN0cyxcclxuXHRcdERlYnVnT3ZlcnJpZGVzLFxyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0ID0gSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Api/IFloodgateStorageProvider.js\n')},"../FloodgateCore/dist/src/Api/IGovernanceServiceClient.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.GovernanceServiceClientState = exports.GovernanceServiceSurveyType = void 0;\n/**\n * The enum is matching with Governance Service\n * So the missing number is not supported\n */\nvar GovernanceServiceSurveyType;\n(function (GovernanceServiceSurveyType) {\n    GovernanceServiceSurveyType[GovernanceServiceSurveyType["Unknown"] = 0] = "Unknown";\n    GovernanceServiceSurveyType[GovernanceServiceSurveyType["Feedback"] = 1] = "Feedback";\n    GovernanceServiceSurveyType[GovernanceServiceSurveyType["Nps"] = 2] = "Nps";\n    GovernanceServiceSurveyType[GovernanceServiceSurveyType["Psat"] = 4] = "Psat";\n    GovernanceServiceSurveyType[GovernanceServiceSurveyType["Bps"] = 6] = "Bps";\n    GovernanceServiceSurveyType[GovernanceServiceSurveyType["Fps"] = 8] = "Fps";\n    GovernanceServiceSurveyType[GovernanceServiceSurveyType["Nlqs"] = 18] = "Nlqs";\n    GovernanceServiceSurveyType[GovernanceServiceSurveyType["GenericMessagingSurface"] = 22] = "GenericMessagingSurface";\n    GovernanceServiceSurveyType[GovernanceServiceSurveyType["Intercept"] = 24] = "Intercept";\n})(GovernanceServiceSurveyType = exports.GovernanceServiceSurveyType || (exports.GovernanceServiceSurveyType = {}));\nvar GovernanceServiceClientState;\n(function (GovernanceServiceClientState) {\n    GovernanceServiceClientState[GovernanceServiceClientState["Disabled"] = 0] = "Disabled";\n    GovernanceServiceClientState[GovernanceServiceClientState["InitializationFailed"] = 1] = "InitializationFailed";\n    GovernanceServiceClientState[GovernanceServiceClientState["Enabled"] = 2] = "Enabled";\n})(GovernanceServiceClientState = exports.GovernanceServiceClientState || (exports.GovernanceServiceClientState = {}));\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FwaS9JR292ZXJuYW5jZVNlcnZpY2VDbGllbnQudHM/OTlmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQTs7O0dBR0c7QUFDSCxJQUFZLDJCQVVYO0FBVkQsV0FBWSwyQkFBMkI7SUFDdEMsbUZBQVc7SUFDWCxxRkFBWTtJQUNaLDJFQUFPO0lBQ1AsNkVBQVE7SUFDUiwyRUFBTztJQUNQLDJFQUFPO0lBQ1AsOEVBQVM7SUFDVCxvSEFBNEI7SUFDNUIsd0ZBQWM7QUFDZixDQUFDLEVBVlcsMkJBQTJCLEdBQTNCLG1DQUEyQixLQUEzQixtQ0FBMkIsUUFVdEM7QUFFRCxJQUFZLDRCQUlYO0FBSkQsV0FBWSw0QkFBNEI7SUFDdkMsdUZBQVk7SUFDWiwrR0FBb0I7SUFDcEIscUZBQU87QUFDUixDQUFDLEVBSlcsNEJBQTRCLEdBQTVCLG9DQUE0QixLQUE1QixvQ0FBNEIsUUFJdkMiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9BcGkvSUdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR292ZXJuZWRDaGFubmVsVHlwZSB9IGZyb20gXCIuLi9Hb3Zlcm5lZENoYW5uZWxcIjtcclxuaW1wb3J0ICogYXMgSVN1cnZleSBmcm9tIFwiLi9JU3VydmV5XCI7XHJcblxyXG5leHBvcnQgY29uc3QgZW51bSBHb3Zlcm5hbmNlU2VydmljZVN1cnZleVBsYXRmb3JtIHtcclxuXHRGbG9vZGdhdGUgPSAxLFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZW51bSBHb3Zlcm5hbmNlU2VydmljZUhvc3RQbGF0Zm9ybSB7XHJcblx0V2ViID0gNixcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBlbnVtIGlzIG1hdGNoaW5nIHdpdGggR292ZXJuYW5jZSBTZXJ2aWNlXHJcbiAqIFNvIHRoZSBtaXNzaW5nIG51bWJlciBpcyBub3Qgc3VwcG9ydGVkXHJcbiAqL1xyXG5leHBvcnQgZW51bSBHb3Zlcm5hbmNlU2VydmljZVN1cnZleVR5cGUge1xyXG5cdFVua25vd24gPSAwLFxyXG5cdEZlZWRiYWNrID0gMSxcclxuXHROcHMgPSAyLFxyXG5cdFBzYXQgPSA0LFxyXG5cdEJwcyA9IDYsXHJcblx0RnBzID0gOCxcclxuXHRObHFzID0gMTgsXHJcblx0R2VuZXJpY01lc3NhZ2luZ1N1cmZhY2UgPSAyMixcclxuXHRJbnRlcmNlcHQgPSAyNCxcclxufVxyXG5cclxuZXhwb3J0IGVudW0gR292ZXJuYW5jZVNlcnZpY2VDbGllbnRTdGF0ZSB7XHJcblx0RGlzYWJsZWQgPSAwLFxyXG5cdEluaXRpYWxpemF0aW9uRmFpbGVkLFxyXG5cdEVuYWJsZWQsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdvdmVybmFuY2VTdXJ2ZXlJbmZvIHtcclxuXHRzdXJ2ZXlJZDogc3RyaW5nO1xyXG5cdHN1cnZleVRyaWdnZXJUaW1lOiBEYXRlO1xyXG5cdHN1cnZleVR5cGU6IG51bWJlcjtcclxuXHRzdXJ2ZXlMZXZlbENvb2xkb3duPzogbnVtYmVyO1xyXG5cdHN1cnZleUNoYW5uZWw/OiBudW1iZXI7XHJcblx0bG9jYWxPZmZzZXRUaW1lOiBudW1iZXI7XHJcblx0cGVyc29uYWxpemVyRW5hYmxlZDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR292ZXJuYW5jZUNsaWVudEluZm8ge1xyXG5cdGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcclxuXHRzZXNzaW9uSWQ6IHN0cmluZztcclxuXHR2ZXJzaW9uOiBzdHJpbmc7XHJcblx0c3VydmV5UGxhdGZvcm06IG51bWJlcjtcclxuXHRob3N0UGxhdGZvcm06IG51bWJlcjtcclxuXHRob3N0T1M/OiBzdHJpbmc7XHJcblx0dGVuYW50SWQ/OiBzdHJpbmc7XHJcblx0ZGV2aWNlSWQ/OiBzdHJpbmc7XHJcblx0YXVkaWVuY2U/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdvdmVybmFuY2VTdXJ2ZXlSZXF1ZXN0IHtcclxuXHR1c2VySWQ6IHN0cmluZztcclxuXHRzdXJ2ZXk6IElHb3Zlcm5hbmNlU3VydmV5SW5mbztcclxuXHRjbGllbnQ6IElHb3Zlcm5hbmNlQ2xpZW50SW5mbztcclxuXHR1c2VyTGV2ZWxDb29sZG93bj86IG51bWJlcjtcclxuXHRyZXF1ZXN0SWQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdvdmVybmFuY2VTdXJ2ZXlSZXNwb25zZSB7XHJcblx0dXNlcklkOiBzdHJpbmc7XHJcblx0bGFzdFRyaWdnZXJTdXJ2ZXlUaW1lOiBEYXRlO1xyXG5cdHRpbWVVbnRpbE5leHRTdXJ2ZXlBbGxvd2VkOiBudW1iZXI7XHJcblx0YWN0aW9uSWQ/OiBzdHJpbmc7IC8vIEZvciBwZXJzb25hbGl6ZXIgYWN0aW9uSWRcclxuXHRldmVudElkPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHb3Zlcm5hbmNlU2VydmljZVJlc3VsdCB7XHJcblx0bGFzdFRyaWdnZXJTdXJ2ZXk/OiBJR292ZXJuYW5jZVN1cnZleVJlc3BvbnNlO1xyXG5cdHBlcm1pc3Npb24/OiBib29sZWFuO1xyXG5cdGVycm9yPzogYm9vbGVhbjtcclxuXHRlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50IHtcclxuXHRjaGVja0dvdmVybmFuY2VQZXJtaXRBc3luYyhcclxuXHRcdHN1cnZleTogSVN1cnZleSxcclxuXHRcdHN1cnZleUxldmVsQ29vbGRvd246IG51bWJlcixcclxuXHRcdHVzZXJMZXZlbENvb2xkb3duOiBudW1iZXIsXHJcblx0XHRjaGFubmVsOiBHb3Zlcm5lZENoYW5uZWxUeXBlKTogUHJvbWlzZTxJR292ZXJuYW5jZVNlcnZpY2VSZXN1bHQ+O1xyXG5cdGlzRW5hYmxlZChnb3Zlcm5lZENoYW5uZWxUeXBlOiBHb3Zlcm5lZENoYW5uZWxUeXBlKTogYm9vbGVhbjtcclxuXHRzaG91bGRGb3JjZURpc3BsYXkoKTogYm9vbGVhbjtcclxuXHRnZXRDbGllbnRTdGF0ZSgpOiBHb3Zlcm5hbmNlU2VydmljZUNsaWVudFN0YXRlO1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Api/IGovernanceServiceClient.js\n')},"../FloodgateCore/dist/src/Api/ISurvey.js":function(){"use strict";eval('\nvar ISurvey;\n(function (ISurvey) {\n    var Type;\n    (function (Type) {\n        // A Feedback survey. Contains a single question with a free-form text response\n        Type[Type["Feedback"] = 0] = "Feedback";\n        // An NPS (net promoter score) survey. Asks user to rate "whether or not they would recommend this product to family/friends".\n        // Contains a prompt, question, and rating\n        Type[Type["Nps"] = 1] = "Nps";\n        // A PSAT (product satisfaction) survey. Asks user to rate "overall, based on their experience, how satisifed are they with this app"\n        // Contains a prompt, question, and rating\n        Type[Type["Psat"] = 2] = "Psat";\n        // A BPS (build promotion) survey. Asks user to choose between Yes and No options of promoting the current build to the next audience ring\n        // Contains a prompt, question, and rating (Yes/No)\n        Type[Type["Bps"] = 3] = "Bps";\n        // A FPS (feature promotion) survey. Asks user to rate a given app feature.\n        // Contains a prompt, question, and rating\n        Type[Type["Fps"] = 4] = "Fps";\n        // A NLQS (net language quality score) survey. Asks user to rate the language quality.\n        // Contains a prompt, question, and rating\n        Type[Type["Nlqs"] = 5] = "Nlqs";\n        // An intercept survey. Asks user if they want to talk to a Microsoft engineer to give feedback.\n        // User can dismiss it or click on it to go to the intercept website, where the experience continues.\n        Type[Type["Intercept"] = 6] = "Intercept";\n        // A Generic surface survey that uses content metadata to render a surface.\n        // As of 4th Feb 2019 there are 11 types defined in Mso hence giving a value of 12.\n        Type[Type["GenericMessagingSurface"] = 12] = "GenericMessagingSurface";\n    })(Type = ISurvey.Type || (ISurvey.Type = {}));\n    ISurvey.DOM_FEEDBACKSURVEY_TAGNAME = "FeedbackSurvey";\n    ISurvey.DOM_NPS_TAGNAME = "Nps";\n    ISurvey.DOM_PSAT_TAGNAME = "Psat";\n    ISurvey.DOM_BPS_TAGNAME = "Bps";\n    ISurvey.DOM_FPS_TAGNAME = "Fps";\n    ISurvey.DOM_NLQS_TAGNAME = "Nlqs";\n    ISurvey.DOM_INTERCEPT_TAGNAME = "Intercept";\n    // If the launcher type is null or undefined in campaign definition then this value will be used as default\n    ISurvey.LAUNCHER_TYPE_DEFAULT = "survey";\n})(ISurvey || (ISurvey = {}));\nmodule.exports = ISurvey;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FwaS9JU3VydmV5LnRzP2ZlZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQXNCQSxJQUFPLE9BQU8sQ0FxQ2I7QUFyQ0QsV0FBTyxPQUFPO0lBQ2IsSUFBWSxJQXdCWDtJQXhCRCxXQUFZLElBQUk7UUFDZiwrRUFBK0U7UUFDL0UsdUNBQVk7UUFDWiw4SEFBOEg7UUFDOUgsMENBQTBDO1FBQzFDLDZCQUFPO1FBQ1AscUlBQXFJO1FBQ3JJLDBDQUEwQztRQUMxQywrQkFBUTtRQUNSLDBJQUEwSTtRQUMxSSxtREFBbUQ7UUFDbkQsNkJBQU87UUFDUCwyRUFBMkU7UUFDM0UsMENBQTBDO1FBQzFDLDZCQUFPO1FBQ1Asc0ZBQXNGO1FBQ3RGLDBDQUEwQztRQUMxQywrQkFBUTtRQUNSLGdHQUFnRztRQUNoRyxxR0FBcUc7UUFDckcseUNBQWE7UUFDYiwyRUFBMkU7UUFDM0UsbUZBQW1GO1FBQ25GLHNFQUE0QjtJQUM3QixDQUFDLEVBeEJXLElBQUksR0FBSixZQUFJLEtBQUosWUFBSSxRQXdCZjtJQUVZLGtDQUEwQixHQUFHLGdCQUFnQixDQUFDO0lBQzlDLHVCQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLHdCQUFnQixHQUFHLE1BQU0sQ0FBQztJQUMxQix1QkFBZSxHQUFHLEtBQUssQ0FBQztJQUN4Qix1QkFBZSxHQUFHLEtBQUssQ0FBQztJQUN4Qix3QkFBZ0IsR0FBRyxNQUFNLENBQUM7SUFDMUIsNkJBQXFCLEdBQUcsV0FBVyxDQUFDO0lBRWpELDJHQUEyRztJQUM5Riw2QkFBcUIsR0FBRyxRQUFRLENBQUM7QUFDL0MsQ0FBQyxFQXJDTSxPQUFPLEtBQVAsT0FBTyxRQXFDYjtBQUVELGlCQUFTLE9BQU8sQ0FBQyIsImZpbGUiOiIuLi9GbG9vZGdhdGVDb3JlL2Rpc3Qvc3JjL0FwaS9JU3VydmV5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVN1cnZleUZvcm0gfSBmcm9tIFwiLi4vQXBpL0lTdXJ2ZXlGb3JtXCI7XHJcbmltcG9ydCAqIGFzIElTdXJ2ZXlJbmZvIGZyb20gXCIuLi9JU3VydmV5SW5mb1wiO1xyXG5pbXBvcnQgeyBJU3VydmV5RG9tV3JpdGVyIH0gZnJvbSBcIi4vSVN1cnZleURvbVdyaXRlclwiO1xyXG5pbXBvcnQgeyBJU3VydmV5SnNvbldyaXRlciB9IGZyb20gXCIuL0lTdXJ2ZXlKc29uV3JpdGVyXCI7XHJcblxyXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgYWxsIFN1cnZleXNcclxuICogQSBzdXJ2ZXkgaGFzIGEgdHlwZSwgYSBnbG9iYWxseSB1bmlxdWUgaWQgKG90aGVyd2lzZSBvcGFxdWUsIGJ1dCBzdWl0YWJsZSBmb3IgY29ycmVsYXRpb24gd2l0aCB0ZWxlbWV0cnkgYW5kIGZvciBzYXZpbmcgc3RhdHMgaW4gdGhlIHJlZ2lzdHJ5KSxcclxuICogYW4gZXhwaXJhdGlvbiB0aW1lIHRvIGFpZCBpbiBjYWNoZSBjbGVhbnVwLCBhbmQgYW4gYWN0aXZhdGlvbiBldmVudCB0byBjYXVzZSB0aGlzIHN1cnZleSB0byBiZSB0cmlnZ2VyZWRcclxuICovXHJcbmludGVyZmFjZSBJU3VydmV5IGV4dGVuZHMgSVN1cnZleUZvcm0sIElTdXJ2ZXlEb21Xcml0ZXIsIElTdXJ2ZXlKc29uV3JpdGVyIHtcclxuXHQvKipcclxuXHQgKiBHZXQgdGhlIHR5cGUgb2YgdGhpcyBzdXJ2ZXkuXHJcblx0ICovXHJcblx0Z2V0VHlwZSgpOiBJU3VydmV5LlR5cGU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCBiYXNpYyByb290LWxldmVsIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgc3VydmV5XHJcblx0ICovXHJcblx0Z2V0U3VydmV5SW5mbygpOiBJU3VydmV5SW5mbztcclxufVxyXG5cclxubW9kdWxlIElTdXJ2ZXkge1xyXG5cdGV4cG9ydCBlbnVtIFR5cGUge1xyXG5cdFx0Ly8gQSBGZWVkYmFjayBzdXJ2ZXkuIENvbnRhaW5zIGEgc2luZ2xlIHF1ZXN0aW9uIHdpdGggYSBmcmVlLWZvcm0gdGV4dCByZXNwb25zZVxyXG5cdFx0RmVlZGJhY2sgPSAwLFxyXG5cdFx0Ly8gQW4gTlBTIChuZXQgcHJvbW90ZXIgc2NvcmUpIHN1cnZleS4gQXNrcyB1c2VyIHRvIHJhdGUgXCJ3aGV0aGVyIG9yIG5vdCB0aGV5IHdvdWxkIHJlY29tbWVuZCB0aGlzIHByb2R1Y3QgdG8gZmFtaWx5L2ZyaWVuZHNcIi5cclxuXHRcdC8vIENvbnRhaW5zIGEgcHJvbXB0LCBxdWVzdGlvbiwgYW5kIHJhdGluZ1xyXG5cdFx0TnBzID0gMSxcclxuXHRcdC8vIEEgUFNBVCAocHJvZHVjdCBzYXRpc2ZhY3Rpb24pIHN1cnZleS4gQXNrcyB1c2VyIHRvIHJhdGUgXCJvdmVyYWxsLCBiYXNlZCBvbiB0aGVpciBleHBlcmllbmNlLCBob3cgc2F0aXNpZmVkIGFyZSB0aGV5IHdpdGggdGhpcyBhcHBcIlxyXG5cdFx0Ly8gQ29udGFpbnMgYSBwcm9tcHQsIHF1ZXN0aW9uLCBhbmQgcmF0aW5nXHJcblx0XHRQc2F0ID0gMixcclxuXHRcdC8vIEEgQlBTIChidWlsZCBwcm9tb3Rpb24pIHN1cnZleS4gQXNrcyB1c2VyIHRvIGNob29zZSBiZXR3ZWVuIFllcyBhbmQgTm8gb3B0aW9ucyBvZiBwcm9tb3RpbmcgdGhlIGN1cnJlbnQgYnVpbGQgdG8gdGhlIG5leHQgYXVkaWVuY2UgcmluZ1xyXG5cdFx0Ly8gQ29udGFpbnMgYSBwcm9tcHQsIHF1ZXN0aW9uLCBhbmQgcmF0aW5nIChZZXMvTm8pXHJcblx0XHRCcHMgPSAzLFxyXG5cdFx0Ly8gQSBGUFMgKGZlYXR1cmUgcHJvbW90aW9uKSBzdXJ2ZXkuIEFza3MgdXNlciB0byByYXRlIGEgZ2l2ZW4gYXBwIGZlYXR1cmUuXHJcblx0XHQvLyBDb250YWlucyBhIHByb21wdCwgcXVlc3Rpb24sIGFuZCByYXRpbmdcclxuXHRcdEZwcyA9IDQsXHJcblx0XHQvLyBBIE5MUVMgKG5ldCBsYW5ndWFnZSBxdWFsaXR5IHNjb3JlKSBzdXJ2ZXkuIEFza3MgdXNlciB0byByYXRlIHRoZSBsYW5ndWFnZSBxdWFsaXR5LlxyXG5cdFx0Ly8gQ29udGFpbnMgYSBwcm9tcHQsIHF1ZXN0aW9uLCBhbmQgcmF0aW5nXHJcblx0XHRObHFzID0gNSxcclxuXHRcdC8vIEFuIGludGVyY2VwdCBzdXJ2ZXkuIEFza3MgdXNlciBpZiB0aGV5IHdhbnQgdG8gdGFsayB0byBhIE1pY3Jvc29mdCBlbmdpbmVlciB0byBnaXZlIGZlZWRiYWNrLlxyXG5cdFx0Ly8gVXNlciBjYW4gZGlzbWlzcyBpdCBvciBjbGljayBvbiBpdCB0byBnbyB0byB0aGUgaW50ZXJjZXB0IHdlYnNpdGUsIHdoZXJlIHRoZSBleHBlcmllbmNlIGNvbnRpbnVlcy5cclxuXHRcdEludGVyY2VwdCA9IDYsXHJcblx0XHQvLyBBIEdlbmVyaWMgc3VyZmFjZSBzdXJ2ZXkgdGhhdCB1c2VzIGNvbnRlbnQgbWV0YWRhdGEgdG8gcmVuZGVyIGEgc3VyZmFjZS5cclxuXHRcdC8vIEFzIG9mIDR0aCBGZWIgMjAxOSB0aGVyZSBhcmUgMTEgdHlwZXMgZGVmaW5lZCBpbiBNc28gaGVuY2UgZ2l2aW5nIGEgdmFsdWUgb2YgMTIuXHJcblx0XHRHZW5lcmljTWVzc2FnaW5nU3VyZmFjZSA9IDEyLFxyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGNvbnN0IERPTV9GRUVEQkFDS1NVUlZFWV9UQUdOQU1FID0gXCJGZWVkYmFja1N1cnZleVwiO1xyXG5cdGV4cG9ydCBjb25zdCBET01fTlBTX1RBR05BTUUgPSBcIk5wc1wiO1xyXG5cdGV4cG9ydCBjb25zdCBET01fUFNBVF9UQUdOQU1FID0gXCJQc2F0XCI7XHJcblx0ZXhwb3J0IGNvbnN0IERPTV9CUFNfVEFHTkFNRSA9IFwiQnBzXCI7XHJcblx0ZXhwb3J0IGNvbnN0IERPTV9GUFNfVEFHTkFNRSA9IFwiRnBzXCI7XHJcblx0ZXhwb3J0IGNvbnN0IERPTV9OTFFTX1RBR05BTUUgPSBcIk5scXNcIjtcclxuXHRleHBvcnQgY29uc3QgRE9NX0lOVEVSQ0VQVF9UQUdOQU1FID0gXCJJbnRlcmNlcHRcIjtcclxuXHJcblx0Ly8gSWYgdGhlIGxhdW5jaGVyIHR5cGUgaXMgbnVsbCBvciB1bmRlZmluZWQgaW4gY2FtcGFpZ24gZGVmaW5pdGlvbiB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHRcclxuXHRleHBvcnQgY29uc3QgTEFVTkNIRVJfVFlQRV9ERUZBVUxUID0gXCJzdXJ2ZXlcIjtcclxufVxyXG5cclxuZXhwb3J0ID0gSVN1cnZleTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Api/ISurvey.js\n')},"../FloodgateCore/dist/src/Api/ISurveyComponent.js":function(){"use strict";eval('\nvar ISurveyComponent;\n(function (ISurveyComponent) {\n    ISurveyComponent.DOM_PROMPT_TAGNAME = "Prompt";\n    ISurveyComponent.DOM_COMMENT_TAGNAME = "Comment";\n    ISurveyComponent.DOM_RATING_TAGNAME = "Rating";\n    ISurveyComponent.DOM_CVSURVEY_TAGNAME = "CVSurvey";\n    ISurveyComponent.DOM_MULTIPLECHOICE_TAGNAME = "MultipleChoice";\n    ISurveyComponent.DOM_INTERCEPT_TAGNAME = "Intercept";\n    ISurveyComponent.JSON_INTERCEPT_KEYNAME = "intercept";\n    ISurveyComponent.JSON_INTERCEPTURL_KEYNAME = "url";\n    ISurveyComponent.JSON_PROMPT_KEYNAME = "prompt";\n    ISurveyComponent.JSON_PROMPTYESTEXT_KEYNAME = "yesButtonText";\n    ISurveyComponent.JSON_PROMPTNOTEXT_KEYNAME = "noButtonText";\n    ISurveyComponent.JSON_COMMENT_KEYNAME = "comment";\n    ISurveyComponent.JSON_RATING_KEYNAME = "rating";\n    ISurveyComponent.JSON_CVSURVEY_KEYNAME = "cvSurvey";\n    ISurveyComponent.JSON_CVSURVEYFORMID_KEYNAME = "formId";\n    ISurveyComponent.JSON_CVSURVEYTHEME_KEYNAME = "theme";\n    ISurveyComponent.JSON_RATINGOPTIONS_KEYNAME = "options";\n    ISurveyComponent.JSON_CVSURVEYPRODUCTNAME_KEYNAME = "productName";\n    ISurveyComponent.JSON_CVSURVEYUIHOST_KEYNAME = "uiHost";\n    ISurveyComponent.JSON_CVSURVEYPLATFORM_KEYNAME = "platform";\n    ISurveyComponent.JSON_TITLE_KEYNAME = "title";\n    ISurveyComponent.JSON_QUESTION_KEYNAME = "question";\n    ISurveyComponent.JSON_MULTIPLECHOICE_KEYNAME = "multipleChoice";\n    ISurveyComponent.JSON_APPLICATION_KEYNAME = "application";\n    ISurveyComponent.JSON_EXTENDEDMANIFESTDATA_KEYNAME = "extendedManifestData";\n    ISurveyComponent.JSON_SURVEYSTRINGS_KEYNAME = "surveyStrings";\n    ISurveyComponent.JSON_SURVEYSPECIFICDATA_KEYNAME = "surveySpecificData";\n})(ISurveyComponent || (ISurveyComponent = {}));\nmodule.exports = ISurveyComponent;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FwaS9JU3VydmV5Q29tcG9uZW50LnRzP2IzMzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQVFBLElBQU8sZ0JBQWdCLENBZ0R0QjtBQWhERCxXQUFPLGdCQUFnQjtJQXFCVCxtQ0FBa0IsR0FBRyxRQUFRLENBQUM7SUFDOUIsb0NBQW1CLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLG1DQUFrQixHQUFHLFFBQVEsQ0FBQztJQUM5QixxQ0FBb0IsR0FBRyxVQUFVLENBQUM7SUFDbEMsMkNBQTBCLEdBQUcsZ0JBQWdCLENBQUM7SUFDOUMsc0NBQXFCLEdBQUcsV0FBVyxDQUFDO0lBQ3BDLHVDQUFzQixHQUFHLFdBQVcsQ0FBQztJQUNyQywwQ0FBeUIsR0FBRyxLQUFLLENBQUM7SUFDbEMsb0NBQW1CLEdBQUcsUUFBUSxDQUFDO0lBQy9CLDJDQUEwQixHQUFHLGVBQWUsQ0FBQztJQUM3QywwQ0FBeUIsR0FBRyxjQUFjLENBQUM7SUFDM0MscUNBQW9CLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLG9DQUFtQixHQUFHLFFBQVEsQ0FBQztJQUMvQixzQ0FBcUIsR0FBRyxVQUFVLENBQUM7SUFDbkMsNENBQTJCLEdBQUcsUUFBUSxDQUFDO0lBQ3ZDLDJDQUEwQixHQUFHLE9BQU8sQ0FBQztJQUNyQywyQ0FBMEIsR0FBRyxTQUFTLENBQUM7SUFDdkMsaURBQWdDLEdBQUcsYUFBYSxDQUFDO0lBQ2pELDRDQUEyQixHQUFHLFFBQVEsQ0FBQztJQUN2Qyw4Q0FBNkIsR0FBRyxVQUFVLENBQUM7SUFDM0MsbUNBQWtCLEdBQUcsT0FBTyxDQUFDO0lBQzdCLHNDQUFxQixHQUFHLFVBQVUsQ0FBQztJQUNuQyw0Q0FBMkIsR0FBRyxnQkFBZ0IsQ0FBQztJQUMvQyx5Q0FBd0IsR0FBRyxhQUFhLENBQUM7SUFDekMsa0RBQWlDLEdBQUcsc0JBQXNCLENBQUM7SUFDM0QsMkNBQTBCLEdBQUcsZUFBZSxDQUFDO0lBQzdDLGdEQUErQixHQUFHLG9CQUFvQixDQUFDO0FBQ3JFLENBQUMsRUFoRE0sZ0JBQWdCLEtBQWhCLGdCQUFnQixRQWdEdEI7QUFFRCxpQkFBUyxnQkFBZ0IsQ0FBQyIsImZpbGUiOiIuLi9GbG9vZGdhdGVDb3JlL2Rpc3Qvc3JjL0FwaS9JU3VydmV5Q29tcG9uZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEJhc2UgaW50ZXJmYWNlIGZvciBhIFN1cnZleUNvbXBvbmVudCAoaS5lLiBhIHF1ZXN0aW9uL3dpZGdldCB0byBzaG93IHRoZSB1c2VyXHJcbiAqIGluIGEgc3VydmV5IGZvcm0sIGFuZCB0aGF0IHR5cGljYWxseSByZXF1aXJlcyBhIHJlc3BvbnNlIHZhbHVlIG9mIHNvbWUga2luZClcclxuICovXHJcbmludGVyZmFjZSBJU3VydmV5Q29tcG9uZW50IHtcclxuXHRnZXRUeXBlKCk6IElTdXJ2ZXlDb21wb25lbnQuVHlwZTtcclxufVxyXG5cclxubW9kdWxlIElTdXJ2ZXlDb21wb25lbnQge1xyXG5cdGV4cG9ydCBjb25zdCBlbnVtIFR5cGUge1xyXG5cdFx0Ly8gQSBxdWljayBwb3AtdXAgcmVxdWVzdGluZyBwYXJ0aWNpcGF0aW9uIGluIGEgc3VydmV5XHJcblx0XHRQcm9tcHQgPSBcIlByb21wdFwiLFxyXG5cclxuXHRcdC8vIEEgcXVlc3Rpb24gcGFpcmVkIHdpdGggYSBmcmVlLWZvcm0gdGV4dCByZXNwb25zZVxyXG5cdFx0Q29tbWVudCA9IFwiQ29tbWVudFwiLFxyXG5cclxuXHRcdC8vIEEgcXVlc3Rpb24gYXNraW5nIGZvciBhIHNlbGVjdGlvbiBmcm9tIGEgbGlzdCBvZiBhbGxvd2VkIHZhbHVlcyB3aXRoIG51bWVyaWMgbWVhbmluZ1xyXG5cdFx0UmF0aW5nID0gXCJSYXRpbmdcIixcclxuXHJcblx0XHQvLyBJbmZvcm1hdGlvbiBuZWVkZWQgdG8gcGFzcyBpbnRvIENWU3VydmV5XHJcblx0XHRDVlN1cnZleSA9IFwiQ1ZTdXJ2ZXlcIixcclxuXHJcblx0XHQvLyBBIHF1ZXN0aW9uIGFza2luZyBmb3Igb25lIG9yIG1vcmUgc2VsZWN0aW9ucyBmcm9tIGEgbGlzdCBvZiBhbGxvd2VkIHZhbHVlc1xyXG5cdFx0TXVsdGlwbGVDaG9pY2UgPSBcIk11bHRpcGxlQ2hvaWNlXCIsXHJcblxyXG5cdFx0Ly8gQSBwb3AtdXAgZGlhbG9nIHJlcXVlc3RpbmcgcGFydGljaXBhdGlvbiBpbiBhbiBJbnRlcmNlcHQgc2Vzc2lvblxyXG5cdFx0SW50ZXJjZXB0ID0gXCJJbnRlcmNlcHRcIixcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBjb25zdCBET01fUFJPTVBUX1RBR05BTUUgPSBcIlByb21wdFwiO1xyXG5cdGV4cG9ydCBjb25zdCBET01fQ09NTUVOVF9UQUdOQU1FID0gXCJDb21tZW50XCI7XHJcblx0ZXhwb3J0IGNvbnN0IERPTV9SQVRJTkdfVEFHTkFNRSA9IFwiUmF0aW5nXCI7XHJcblx0ZXhwb3J0IGNvbnN0IERPTV9DVlNVUlZFWV9UQUdOQU1FID0gXCJDVlN1cnZleVwiO1xyXG5cdGV4cG9ydCBjb25zdCBET01fTVVMVElQTEVDSE9JQ0VfVEFHTkFNRSA9IFwiTXVsdGlwbGVDaG9pY2VcIjtcclxuXHRleHBvcnQgY29uc3QgRE9NX0lOVEVSQ0VQVF9UQUdOQU1FID0gXCJJbnRlcmNlcHRcIjtcclxuXHRleHBvcnQgY29uc3QgSlNPTl9JTlRFUkNFUFRfS0VZTkFNRSA9IFwiaW50ZXJjZXB0XCI7XHJcblx0ZXhwb3J0IGNvbnN0IEpTT05fSU5URVJDRVBUVVJMX0tFWU5BTUUgPSBcInVybFwiO1xyXG5cdGV4cG9ydCBjb25zdCBKU09OX1BST01QVF9LRVlOQU1FID0gXCJwcm9tcHRcIjtcclxuXHRleHBvcnQgY29uc3QgSlNPTl9QUk9NUFRZRVNURVhUX0tFWU5BTUUgPSBcInllc0J1dHRvblRleHRcIjtcclxuXHRleHBvcnQgY29uc3QgSlNPTl9QUk9NUFROT1RFWFRfS0VZTkFNRSA9IFwibm9CdXR0b25UZXh0XCI7XHJcblx0ZXhwb3J0IGNvbnN0IEpTT05fQ09NTUVOVF9LRVlOQU1FID0gXCJjb21tZW50XCI7XHJcblx0ZXhwb3J0IGNvbnN0IEpTT05fUkFUSU5HX0tFWU5BTUUgPSBcInJhdGluZ1wiO1xyXG5cdGV4cG9ydCBjb25zdCBKU09OX0NWU1VSVkVZX0tFWU5BTUUgPSBcImN2U3VydmV5XCI7XHJcblx0ZXhwb3J0IGNvbnN0IEpTT05fQ1ZTVVJWRVlGT1JNSURfS0VZTkFNRSA9IFwiZm9ybUlkXCI7XHJcblx0ZXhwb3J0IGNvbnN0IEpTT05fQ1ZTVVJWRVlUSEVNRV9LRVlOQU1FID0gXCJ0aGVtZVwiO1xyXG5cdGV4cG9ydCBjb25zdCBKU09OX1JBVElOR09QVElPTlNfS0VZTkFNRSA9IFwib3B0aW9uc1wiO1xyXG5cdGV4cG9ydCBjb25zdCBKU09OX0NWU1VSVkVZUFJPRFVDVE5BTUVfS0VZTkFNRSA9IFwicHJvZHVjdE5hbWVcIjtcclxuXHRleHBvcnQgY29uc3QgSlNPTl9DVlNVUlZFWVVJSE9TVF9LRVlOQU1FID0gXCJ1aUhvc3RcIjtcclxuXHRleHBvcnQgY29uc3QgSlNPTl9DVlNVUlZFWVBMQVRGT1JNX0tFWU5BTUUgPSBcInBsYXRmb3JtXCI7XHJcblx0ZXhwb3J0IGNvbnN0IEpTT05fVElUTEVfS0VZTkFNRSA9IFwidGl0bGVcIjtcclxuXHRleHBvcnQgY29uc3QgSlNPTl9RVUVTVElPTl9LRVlOQU1FID0gXCJxdWVzdGlvblwiO1xyXG5cdGV4cG9ydCBjb25zdCBKU09OX01VTFRJUExFQ0hPSUNFX0tFWU5BTUUgPSBcIm11bHRpcGxlQ2hvaWNlXCI7XHJcblx0ZXhwb3J0IGNvbnN0IEpTT05fQVBQTElDQVRJT05fS0VZTkFNRSA9IFwiYXBwbGljYXRpb25cIjtcclxuXHRleHBvcnQgY29uc3QgSlNPTl9FWFRFTkRFRE1BTklGRVNUREFUQV9LRVlOQU1FID0gXCJleHRlbmRlZE1hbmlmZXN0RGF0YVwiO1xyXG5cdGV4cG9ydCBjb25zdCBKU09OX1NVUlZFWVNUUklOR1NfS0VZTkFNRSA9IFwic3VydmV5U3RyaW5nc1wiO1xyXG5cdGV4cG9ydCBjb25zdCBKU09OX1NVUlZFWVNQRUNJRklDREFUQV9LRVlOQU1FID0gXCJzdXJ2ZXlTcGVjaWZpY0RhdGFcIjtcclxufVxyXG5cclxuZXhwb3J0ID0gSVN1cnZleUNvbXBvbmVudDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Api/ISurveyComponent.js\n')},"../FloodgateCore/dist/src/Campaign/CampaignDefinitionProvider.js":function(){"use strict";eval('\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.FileSystemCampaignDefinitionProvider = exports.FilterValidCampaignDefinitions = exports.CampaignDefinition = exports.CampaignSurveyTemplateIntercept = exports.CampaignSurveyTemplateGenericMessagingSurface = exports.CampaignSurveyTemplateNps11PointStatic = exports.CampaignSurveyTemplateNps5PointStatic = exports.CampaignSurveyTemplateNps = exports.CampaignSurveyTemplateNlqs = exports.CampaignSurveyTemplateFps = exports.CampaignSurveyTemplate = exports.CampaignSurveyMetadata = exports.CampaignSurveyContentComment = exports.CampaignSurveyContentRating = exports.CampaignSurveyContentIntercept = exports.CampaignSurveyContentPrompt = exports.CampaignSurveyContentCVSurvey = exports.CampaignSurveyContentMultipleChoice = exports.CampaignSurveyContent = exports.CampaignSurveyEventCountedActivitySequence = exports.CampaignSurveyEventCountedActivity = exports.CampaignSurveyEvent = exports.CampaignNominationSchemeRatioPercentage = exports.CampaignNominationScheme = exports.CampaignDistributionRamp = exports.CampaignDistribution = exports.CampaignAdditionalDataRequested = exports.CampaignDurationSingleBuildChange = exports.CampaignDurationTimeInterval = exports.CampaignDuration = exports.CampaignScopeUserFactAll = exports.CampaignScopeUserFactAny = exports.CampaignScopeEnvironmentCrossProduct = exports.CampaignScopeAny = exports.CampaignScope = exports.CampaignLanguageRangeLanguageSubtag = exports.CampaignLanguageRange = void 0;\nvar IFloodgateStorageProvider = __webpack_require__(/*! ../Api/IFloodgateStorageProvider */ "../FloodgateCore/dist/src/Api/IFloodgateStorageProvider.js");\nvar Constants_1 = __webpack_require__(/*! ../Constants */ "../FloodgateCore/dist/src/Constants.js");\nvar FloodgateEngine_1 = __webpack_require__(/*! ../FloodgateEngine */ "../FloodgateCore/dist/src/FloodgateEngine.js");\nvar GovernedChannel_1 = __webpack_require__(/*! ../GovernedChannel */ "../FloodgateCore/dist/src/GovernedChannel.js");\nvar Utils = __webpack_require__(/*! ../Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar UserFactHelper_1 = __webpack_require__(/*! ../UserFact/UserFactHelper */ "../FloodgateCore/dist/src/UserFact/UserFactHelper.js");\nvar getDistantFuture = Utils.getDistantFuture, isBoolean = Utils.isBoolean, isNOU = Utils.isNOU, isNumber = Utils.isNumber, isString = Utils.isString, isUtcDatetimeString = Utils.isUtcDatetimeString, stringToDate = Utils.stringToDate;\n// region Language Range\n/**\n * Base class representing a language range in a campaign setting\n */\nvar CampaignLanguageRange = /** @class */ (function () {\n    function CampaignLanguageRange() {\n    }\n    CampaignLanguageRange.deserialize = function (input) {\n        var result;\n        if (input && input.Type === 0) {\n            result = CampaignLanguageRangeLanguageSubtag.deserialize(input);\n        }\n        if (result === undefined) {\n            return null;\n        }\n        return result;\n    };\n    CampaignLanguageRange.prototype.validate = function () {\n        return true;\n    };\n    return CampaignLanguageRange;\n}());\nexports.CampaignLanguageRange = CampaignLanguageRange;\n/**\n * Represents a range matching on the "language subtag" against fully specified language tags, according to RFC 5646\n */\nvar CampaignLanguageRangeLanguageSubtag = /** @class */ (function (_super) {\n    __extends(CampaignLanguageRangeLanguageSubtag, _super);\n    // public for UT only\n    function CampaignLanguageRangeLanguageSubtag() {\n        return _super.call(this) || this;\n    }\n    CampaignLanguageRangeLanguageSubtag.deserialize = function (input) {\n        var result = new CampaignLanguageRangeLanguageSubtag();\n        if (input) {\n            result.languageSubTag = input.Value;\n        }\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    // @Override\n    CampaignLanguageRangeLanguageSubtag.prototype.isInRange = function (language) {\n        if (isNOU(language)) {\n            return false;\n        }\n        var extractedLanguageSubTag = Utils.extractLanguageSubtag(language);\n        if (isNOU(extractedLanguageSubTag)) {\n            return false;\n        }\n        // compare strings ignoring case\n        return extractedLanguageSubTag.toLocaleUpperCase() === this.languageSubTag.toLocaleUpperCase();\n    };\n    // @Override\n    CampaignLanguageRangeLanguageSubtag.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this)) {\n            return false;\n        }\n        if (isNOU(this.languageSubTag) || !isString(this.languageSubTag)) {\n            return false;\n        }\n        // Reject any spec that isn\'t exactly a language subtag\n        if (!Utils.isValidLanguageSubTag(this.languageSubTag)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignLanguageRangeLanguageSubtag;\n}(CampaignLanguageRange));\nexports.CampaignLanguageRangeLanguageSubtag = CampaignLanguageRangeLanguageSubtag;\n// endregion\n// region Scope\nvar CampaignScope = /** @class */ (function () {\n    function CampaignScope() {\n    }\n    CampaignScope.deserialize = function (input) {\n        var result;\n        if (isNOU(input)) {\n            return null;\n        }\n        switch (input.Type) {\n            case 0 /* CampaignScopeAny */:\n                result = CampaignScopeAny.deserialize(input);\n                break;\n            case 1 /* CampaignScopeEnvironmentCrossProduct */:\n                result = CampaignScopeEnvironmentCrossProduct.deserialize(input);\n                break;\n            case 2 /* CampaignScopeUserFactAny */:\n                result = CampaignScopeUserFactAny.deserialize(input);\n                break;\n            case 3 /* CampaignScopeUserFactAll */:\n                result = CampaignScopeUserFactAll.deserialize(input);\n                break;\n        }\n        if (result === undefined) {\n            return null;\n        }\n        return result;\n    };\n    CampaignScope.prototype.validate = function () {\n        return true;\n    };\n    return CampaignScope;\n}());\nexports.CampaignScope = CampaignScope;\nvar CampaignScopeAny = /** @class */ (function (_super) {\n    __extends(CampaignScopeAny, _super);\n    // public for UT only\n    function CampaignScopeAny() {\n        return _super.call(this) || this;\n    }\n    CampaignScopeAny.deserialize = function (input) {\n        return new CampaignScopeAny();\n    };\n    // @Override\n    CampaignScopeAny.prototype.isInScope = function () {\n        return true;\n    };\n    // @Override\n    CampaignScopeAny.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignScopeAny;\n}(CampaignScope));\nexports.CampaignScopeAny = CampaignScopeAny;\nvar CampaignScopeEnvironmentCrossProduct = /** @class */ (function (_super) {\n    __extends(CampaignScopeEnvironmentCrossProduct, _super);\n    // public for UT only\n    function CampaignScopeEnvironmentCrossProduct() {\n        return _super.call(this) || this;\n    }\n    CampaignScopeEnvironmentCrossProduct.deserialize = function (input) {\n        var result = new CampaignScopeEnvironmentCrossProduct();\n        var languageRanges = [];\n        if (isNOU(input)) {\n            return null;\n        }\n        for (var key in input.Languages) {\n            if (input.Languages.hasOwnProperty(key)) {\n                var readRange = input.Languages[key];\n                if (readRange) {\n                    languageRanges.push(CampaignLanguageRange.deserialize(readRange));\n                }\n            }\n        }\n        if (languageRanges.length === 0) {\n            languageRanges = null;\n        }\n        result.languageRanges = languageRanges;\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignScopeEnvironmentCrossProduct.prototype.setEnvironmentProvider = function (environmentProvider) {\n        this.environmentProvider = environmentProvider;\n    };\n    // @Override\n    CampaignScopeEnvironmentCrossProduct.prototype.isInScope = function () {\n        if (isNOU(this.languageRanges)) {\n            return true;\n        }\n        if (isNOU(this.environmentProvider) || !this.environmentProvider.getLanguage()) {\n            return false;\n        }\n        var language = this.environmentProvider.getLanguage();\n        // If the environment matches a single pattern, then this is a yes\n        for (var key in this.languageRanges) {\n            if (this.languageRanges.hasOwnProperty(key)) {\n                var range = this.languageRanges[key];\n                if (range.isInRange(language)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    // @Override\n    CampaignScopeEnvironmentCrossProduct.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this)) {\n            return false;\n        }\n        // Null languageRanges is allowed, means will match with everything.\n        if (this.languageRanges) {\n            for (var key in this.languageRanges) {\n                if (this.languageRanges.hasOwnProperty(key) && !this.languageRanges[key]) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    };\n    return CampaignScopeEnvironmentCrossProduct;\n}(CampaignScope));\nexports.CampaignScopeEnvironmentCrossProduct = CampaignScopeEnvironmentCrossProduct;\nvar CampaignScopeUserFactAny = /** @class */ (function (_super) {\n    __extends(CampaignScopeUserFactAny, _super);\n    // public for UT only\n    function CampaignScopeUserFactAny() {\n        return _super.call(this) || this;\n    }\n    CampaignScopeUserFactAny.deserialize = function (input) {\n        var result = new CampaignScopeUserFactAny();\n        result.userFacts = UserFactHelper_1.deserializeUserFacts(input);\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignScopeUserFactAny.prototype.setUserFactsProvider = function (userFactsProvider) {\n        this.userFactsProvider = userFactsProvider;\n    };\n    // @Override\n    CampaignScopeUserFactAny.prototype.isInScope = function () {\n        var _this = this;\n        if (isNOU(this.userFacts)) {\n            return true;\n        }\n        if (!this.userFactsProvider) {\n            return false;\n        }\n        // If one of the user fact matches, then this is a yes\n        return this.userFacts.some(function (userFact) {\n            var rawUserFact = _this.userFactsProvider.getUserFact(userFact.getName());\n            return userFact.isAMatch(rawUserFact);\n        });\n    };\n    // @Override\n    CampaignScopeUserFactAny.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this)) {\n            return false;\n        }\n        return UserFactHelper_1.validateUserFacts(this.userFacts);\n    };\n    return CampaignScopeUserFactAny;\n}(CampaignScope));\nexports.CampaignScopeUserFactAny = CampaignScopeUserFactAny;\nvar CampaignScopeUserFactAll = /** @class */ (function (_super) {\n    __extends(CampaignScopeUserFactAll, _super);\n    // public for UT only\n    function CampaignScopeUserFactAll() {\n        return _super.call(this) || this;\n    }\n    CampaignScopeUserFactAll.deserialize = function (input) {\n        var result = new CampaignScopeUserFactAll();\n        result.userFacts = UserFactHelper_1.deserializeUserFacts(input);\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignScopeUserFactAll.prototype.setUserFactsProvider = function (userFactsProvider) {\n        this.userFactsProvider = userFactsProvider;\n    };\n    // @Override\n    CampaignScopeUserFactAll.prototype.isInScope = function () {\n        var _this = this;\n        if (isNOU(this.userFacts)) {\n            return true;\n        }\n        if (!this.userFactsProvider) {\n            return false;\n        }\n        // Get all of the mismatched user facts\n        var mismatchedFacts = this.userFacts.filter(function (userFact) {\n            var rawUserFact = _this.userFactsProvider.getUserFact(userFact.getName());\n            return !userFact.isAMatch(rawUserFact);\n        });\n        if (mismatchedFacts.length > 0) {\n            var mismatchedNames = mismatchedFacts.map(function (userFact) { return userFact.getName(); });\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecIsAMatch.Summary, {\n                Count: mismatchedFacts.length,\n                Message: mismatchedNames.toString(),\n            });\n            return false;\n        }\n        // If all of the user facts match, then this is a yes\n        return true;\n    };\n    // @Override\n    CampaignScopeUserFactAll.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this)) {\n            return false;\n        }\n        return UserFactHelper_1.validateUserFacts(this.userFacts);\n    };\n    return CampaignScopeUserFactAll;\n}(CampaignScope));\nexports.CampaignScopeUserFactAll = CampaignScopeUserFactAll;\n// endregion\n// region Durations\n/**\n * Base class representing a duration in a campaign setting\n */\nvar CampaignDuration = /** @class */ (function () {\n    function CampaignDuration() {\n    }\n    CampaignDuration.deserialize = function (input) {\n        var result;\n        if (isNOU(input)) {\n            return null;\n        }\n        switch (input.Type) {\n            case 0:\n                result = CampaignDurationTimeInterval.deserialize(input);\n                break;\n            case 1:\n                result = CampaignDurationSingleBuildChange.deserialize(input);\n                break;\n        }\n        if (result === undefined) {\n            return null;\n        }\n        return result;\n    };\n    CampaignDuration.prototype.validate = function () {\n        return true;\n    };\n    return CampaignDuration;\n}());\nexports.CampaignDuration = CampaignDuration;\n/**\n * A Duration expressed in seconds. UTC datetime comparisons are used to determine expiration.\n */\nvar CampaignDurationTimeInterval = /** @class */ (function (_super) {\n    __extends(CampaignDurationTimeInterval, _super);\n    // public for UT only\n    function CampaignDurationTimeInterval() {\n        return _super.call(this) || this;\n    }\n    CampaignDurationTimeInterval.deserialize = function (input) {\n        var result = new CampaignDurationTimeInterval();\n        if (input) {\n            result.intervalSeconds = input.IntervalSeconds;\n        }\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    // @Override\n    CampaignDurationTimeInterval.prototype.asTimeIntervalSeconds = function () {\n        return this.intervalSeconds;\n    };\n    // @Override\n    CampaignDurationTimeInterval.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this)) {\n            return false;\n        }\n        if (!isNumber(this.intervalSeconds)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignDurationTimeInterval;\n}(CampaignDuration));\nexports.CampaignDurationTimeInterval = CampaignDurationTimeInterval;\n/**\n * A Duration representing exactly 1 change in build number\n */\nvar CampaignDurationSingleBuildChange = /** @class */ (function (_super) {\n    __extends(CampaignDurationSingleBuildChange, _super);\n    // public for UT only\n    function CampaignDurationSingleBuildChange() {\n        return _super.call(this) || this;\n    }\n    CampaignDurationSingleBuildChange.deserialize = function (input) {\n        return new CampaignDurationSingleBuildChange();\n    };\n    // @Override\n    CampaignDurationSingleBuildChange.prototype.asTimeIntervalSeconds = function () {\n        return null;\n    };\n    return CampaignDurationSingleBuildChange;\n}(CampaignDuration));\nexports.CampaignDurationSingleBuildChange = CampaignDurationSingleBuildChange;\n/**\n * Class representing AdditionalDataRequested in CampaignDefinition\n */\nvar CampaignAdditionalDataRequested = /** @class */ (function () {\n    function CampaignAdditionalDataRequested() {\n    }\n    CampaignAdditionalDataRequested.deserialize = function (additionalDataRequested) {\n        var result = new CampaignAdditionalDataRequested();\n        if (!isNOU(additionalDataRequested)) {\n            // Convert from AdditionalDataRequested string to enum\n            result.additionalData = [];\n            for (var _i = 0, additionalDataRequested_1 = additionalDataRequested; _i < additionalDataRequested_1.length; _i++) {\n                var additionalData = additionalDataRequested_1[_i];\n                if (additionalData === "EmailAddress") {\n                    result.additionalData.push(0 /* EmailAddress */);\n                }\n            }\n        }\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignAdditionalDataRequested.prototype.validate = function () {\n        if (isNOU(this.additionalData)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignAdditionalDataRequested;\n}());\nexports.CampaignAdditionalDataRequested = CampaignAdditionalDataRequested;\n// endregion\n// region Distribution Schemes\nvar CampaignDistribution = /** @class */ (function () {\n    function CampaignDistribution() {\n    }\n    CampaignDistribution.deserialize = function (input) {\n        var result;\n        if (input && input.Type === 0) {\n            result = CampaignDistributionRamp.deserialize(input);\n        }\n        if (result === undefined) {\n            return null;\n        }\n        return result;\n    };\n    CampaignDistribution.prototype.validate = function () {\n        return true;\n    };\n    return CampaignDistribution;\n}());\nexports.CampaignDistribution = CampaignDistribution;\nvar CampaignDistributionRamp = /** @class */ (function (_super) {\n    __extends(CampaignDistributionRamp, _super);\n    function CampaignDistributionRamp() {\n        return _super.call(this) || this;\n    }\n    CampaignDistributionRamp.deserialize = function (input) {\n        var result = new CampaignDistributionRamp();\n        if (input) {\n            result.maxDelaySeconds = input.MaxDelaySeconds;\n            result.chunks = input.Chunks;\n        }\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    // @Override\n    CampaignDistributionRamp.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this)) {\n            return false;\n        }\n        if (!isNumber(this.maxDelaySeconds) || this.maxDelaySeconds < 0) {\n            return false;\n        }\n        if (!isNumber(this.chunks) || this.chunks < 0) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignDistributionRamp;\n}(CampaignDistribution));\nexports.CampaignDistributionRamp = CampaignDistributionRamp;\n// endregion\n// region Nomination Scheme\nvar CampaignNominationScheme = /** @class */ (function () {\n    function CampaignNominationScheme() {\n    }\n    CampaignNominationScheme.deserialize = function (input) {\n        var result;\n        if (input && input.Type === 0) {\n            result = CampaignNominationSchemeRatioPercentage.deserialize(input);\n        }\n        if (result === undefined) {\n            return null;\n        }\n        return result;\n    };\n    /**\n     * @return The amount of time the survey should be active, in seconds. Abstracts the difference between nominationPeriod and the fallback\n     */\n    CampaignNominationScheme.prototype.getActiveSurveyTimeIntervalSeconds = function () {\n        var nominationTimIntervalSeconds = this.nominationPeriod.asTimeIntervalSeconds();\n        if (isNumber(nominationTimIntervalSeconds)) {\n            return nominationTimIntervalSeconds;\n        }\n        return this.fallbackSurveyDurationSeconds;\n    };\n    /**\n     * @return The survey start time, possibly adjusted by an underlying DistributionModel.\n     */\n    CampaignNominationScheme.prototype.calculateSurveyStartTimeFromDate = function (soonestStartTime) {\n        // No adjustment in base class.  Derived classes can override and implement delays like a "ramp"\n        return soonestStartTime ? soonestStartTime : new Date();\n    };\n    /**\n     * @return The survey expiration time, based on the nomination periods and the survey\'s adjusted start time\n     */\n    CampaignNominationScheme.prototype.calculateSurveyExpirationTimeFromSurveyStartTime = function (surveyStartTime) {\n        surveyStartTime = surveyStartTime ? surveyStartTime : new Date();\n        return Utils.addSecondsWithoutOverflow(surveyStartTime, this.getActiveSurveyTimeIntervalSeconds());\n    };\n    /**\n     * @return The appropriate campaign cool down based on whether or not the user activated the survey\n     */\n    CampaignNominationScheme.prototype.getCampaignCooldown = function (didUserActivateSurvey) {\n        if (didUserActivateSurvey) {\n            return this.cooldownPeriod;\n        }\n        else {\n            return this.nominationPeriod;\n        }\n    };\n    CampaignNominationScheme.prototype.validate = function () {\n        if (isNOU(this.nominationPeriod)) {\n            return false;\n        }\n        if (isNOU(this.cooldownPeriod)) {\n            this.cooldownPeriod = this.nominationPeriod;\n        }\n        if (!isNumber(this.nominationPeriod.asTimeIntervalSeconds())) {\n            if (!isNumber(this.fallbackSurveyDurationSeconds) || this.fallbackSurveyDurationSeconds <= 0) {\n                return false;\n            }\n        }\n        return true;\n    };\n    return CampaignNominationScheme;\n}());\nexports.CampaignNominationScheme = CampaignNominationScheme;\n/**\n * Class representing a set of campaign nomination rules to evaluate for in-scope campaigns:\n * percentage\n * re-election durations\n * distribution model (for "nominated" candidates)\n */\nvar CampaignNominationSchemeRatioPercentage = /** @class */ (function (_super) {\n    __extends(CampaignNominationSchemeRatioPercentage, _super);\n    function CampaignNominationSchemeRatioPercentage() {\n        return _super.call(this) || this;\n    }\n    CampaignNominationSchemeRatioPercentage.deserialize = function (input) {\n        var result = new CampaignNominationSchemeRatioPercentage();\n        if (isNOU(input)) {\n            return null;\n        }\n        if (input.DistributionModel) {\n            result.distributionModel = CampaignDistribution.deserialize(input.DistributionModel);\n        }\n        if (input.CooldownPeriod) {\n            result.cooldownPeriod = CampaignDuration.deserialize(input.CooldownPeriod);\n        }\n        if (input.NominationPeriod) {\n            result.nominationPeriod = CampaignDuration.deserialize(input.NominationPeriod);\n        }\n        result.fallbackSurveyDurationSeconds = input.FallbackSurveyDurationSeconds;\n        result.percentageDenominator = input.PercentageDenominator;\n        result.percentageNumerator = input.PercentageNumerator;\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    // @Override\n    CampaignNominationSchemeRatioPercentage.prototype.evaluateNominationRules = function () {\n        var rand = Math.random();\n        // Creates a random number between [0 to (percentageDenominator - 1)]\n        // In range [0 to (percentageDenominator - 1)] exactly \'percentageNumerator\' values are < percentageNumerator\n        return Math.floor(rand * this.percentageDenominator) < this.percentageNumerator;\n    };\n    // @Override\n    CampaignNominationSchemeRatioPercentage.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this)) {\n            return false;\n        }\n        if (!isNumber(this.percentageDenominator) || !isNumber(this.percentageNumerator)) {\n            return false;\n        }\n        if (this.percentageDenominator <= 0 || this.percentageNumerator < 0) {\n            return false;\n        }\n        if (this.percentageNumerator > this.percentageDenominator) {\n            return false;\n        }\n        // distribution model may be null\n        return true;\n    };\n    return CampaignNominationSchemeRatioPercentage;\n}(CampaignNominationScheme));\nexports.CampaignNominationSchemeRatioPercentage = CampaignNominationSchemeRatioPercentage;\n// endregion\n// region Survey Event Definitions\nvar CampaignSurveyEvent = /** @class */ (function () {\n    function CampaignSurveyEvent() {\n    }\n    CampaignSurveyEvent.deserialize = function (input) {\n        var result;\n        if (isNOU(input)) {\n            return null;\n        }\n        switch (input.Type) {\n            case 0:\n                result = CampaignSurveyEventCountedActivity.deserialize(input);\n                break;\n            case 1:\n                result = CampaignSurveyEventCountedActivitySequence.deserialize(input);\n                break;\n        }\n        if (result === undefined) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyEvent.prototype.validate = function () {\n        return true;\n    };\n    return CampaignSurveyEvent;\n}());\nexports.CampaignSurveyEvent = CampaignSurveyEvent;\nvar CampaignSurveyEventCountedActivity = /** @class */ (function (_super) {\n    __extends(CampaignSurveyEventCountedActivity, _super);\n    // public for UT only\n    function CampaignSurveyEventCountedActivity() {\n        return _super.call(this) || this;\n    }\n    CampaignSurveyEventCountedActivity.deserialize = function (input) {\n        var result = new CampaignSurveyEventCountedActivity();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.activity = input.Activity;\n        result.count = input.Count;\n        result.isAggregate = input.IsAggregate;\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    // @Override\n    CampaignSurveyEventCountedActivity.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this)) {\n            return false;\n        }\n        if (isNOU(this.activity) || !isString(this.activity)) {\n            return false;\n        }\n        if (!isNumber(this.count) || this.count <= 0) {\n            return false;\n        }\n        if (!isBoolean(this.isAggregate)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyEventCountedActivity;\n}(CampaignSurveyEvent));\nexports.CampaignSurveyEventCountedActivity = CampaignSurveyEventCountedActivity;\nvar CampaignSurveyEventCountedActivitySequence = /** @class */ (function (_super) {\n    __extends(CampaignSurveyEventCountedActivitySequence, _super);\n    // public for UT only\n    function CampaignSurveyEventCountedActivitySequence() {\n        return _super.call(this) || this;\n    }\n    CampaignSurveyEventCountedActivitySequence.deserialize = function (input) {\n        var result = new CampaignSurveyEventCountedActivitySequence();\n        var sequence = [];\n        if (isNOU(input)) {\n            return null;\n        }\n        for (var key in input.Sequence) {\n            if (input.Sequence.hasOwnProperty(key)) {\n                var readActivity = input.Sequence[key];\n                if (readActivity) {\n                    sequence.push(CampaignSurveyEventCountedActivity.deserialize(readActivity));\n                }\n            }\n        }\n        if (sequence.length === 0) {\n            sequence = null;\n        }\n        result.sequence = sequence;\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    // @Override\n    CampaignSurveyEventCountedActivitySequence.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this)) {\n            return false;\n        }\n        if (isNOU(this.sequence)) {\n            return false;\n        }\n        for (var key in this.sequence) {\n            if (this.sequence.hasOwnProperty(key) && !this.sequence[key]) {\n                return false;\n            }\n        }\n        return true;\n    };\n    return CampaignSurveyEventCountedActivitySequence;\n}(CampaignSurveyEvent));\nexports.CampaignSurveyEventCountedActivitySequence = CampaignSurveyEventCountedActivitySequence;\n// endregion\n// region Survey Content Definitions\nvar CampaignSurveyContent = /** @class */ (function () {\n    function CampaignSurveyContent() {\n    }\n    CampaignSurveyContent.deserialize = function (input, optionalComponents) {\n        var result = new CampaignSurveyContent();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.prompt = CampaignSurveyContentPrompt.deserialize(input.Prompt);\n        result.rating = CampaignSurveyContentRating.deserialize(input.Rating);\n        result.comment = CampaignSurveyContentComment.deserialize(input.Question);\n        result.multipleChoice = CampaignSurveyContentMultipleChoice.deserialize(input.MultipleChoice);\n        result.intercept = CampaignSurveyContentIntercept.deserialize(input.Intercept);\n        result.cvSurvey = CampaignSurveyContentCVSurvey.deserialize(input.CVSurveyParams);\n        if (!result.validate(optionalComponents)) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyContent.prototype.validate = function (optionalComponents) {\n        if (!isNOU(this.intercept)) {\n            // An intercept survey only requires intercept.\n            return true;\n        }\n        if (isNOU(this.prompt)) {\n            return false;\n        }\n        if (optionalComponents) {\n            return !isNOU(this.rating) ||\n                !isNOU(this.multipleChoice) ||\n                !isNOU(this.comment);\n        }\n        return !isNOU(this.rating) && !isNOU(this.comment);\n    };\n    return CampaignSurveyContent;\n}());\nexports.CampaignSurveyContent = CampaignSurveyContent;\nvar CampaignSurveyContentMultipleChoice = /** @class */ (function () {\n    function CampaignSurveyContentMultipleChoice() {\n    }\n    CampaignSurveyContentMultipleChoice.deserialize = function (input) {\n        var result = new CampaignSurveyContentMultipleChoice();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.question = input.Question;\n        result.availableOptions = input.AvailableOptions;\n        result.minNumberOfSelectedOptions = input.MinNumberOfSelectedOptions;\n        result.maxNumberOfSelectedOptions = input.MaxNumberOfSelectedOptions;\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyContentMultipleChoice.prototype.validate = function () {\n        if (isNOU(this.question) || !isString(this.question) ||\n            isNOU(this.availableOptions) || !Array.isArray(this.availableOptions) || this.availableOptions.length < 2 ||\n            isNOU(this.minNumberOfSelectedOptions) || !isNumber(this.minNumberOfSelectedOptions) ||\n            isNOU(this.maxNumberOfSelectedOptions) || !isNumber(this.maxNumberOfSelectedOptions)) {\n            return false;\n        }\n        // expect all availableOptions values to be string\n        for (var key in this.availableOptions) {\n            if (this.availableOptions.hasOwnProperty(key)) {\n                if (!isString(this.availableOptions[key])) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    };\n    return CampaignSurveyContentMultipleChoice;\n}());\nexports.CampaignSurveyContentMultipleChoice = CampaignSurveyContentMultipleChoice;\nvar CampaignSurveyContentCVSurvey = /** @class */ (function () {\n    function CampaignSurveyContentCVSurvey() {\n    }\n    CampaignSurveyContentCVSurvey.deserialize = function (input) {\n        var result = new CampaignSurveyContentCVSurvey();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.customerVoiceFormId = input.CustomerVoiceFormId;\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyContentCVSurvey.prototype.validate = function () {\n        return (!isNOU(this.customerVoiceFormId) && isString(this.customerVoiceFormId));\n    };\n    return CampaignSurveyContentCVSurvey;\n}());\nexports.CampaignSurveyContentCVSurvey = CampaignSurveyContentCVSurvey;\nvar CampaignSurveyContentPrompt = /** @class */ (function () {\n    function CampaignSurveyContentPrompt() {\n    }\n    CampaignSurveyContentPrompt.deserialize = function (input) {\n        var result = new CampaignSurveyContentPrompt();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.title = input.Title;\n        result.question = input.Question;\n        result.yesLabel = input.YesLabel;\n        result.noLabel = input.NoLabel;\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyContentPrompt.prototype.validate = function () {\n        if (isNOU(this.title) || !isString(this.title) ||\n            isNOU(this.question) || !isString(this.question) ||\n            isNOU(this.yesLabel) || !isString(this.yesLabel) ||\n            isNOU(this.noLabel) || !isString(this.noLabel)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyContentPrompt;\n}());\nexports.CampaignSurveyContentPrompt = CampaignSurveyContentPrompt;\nvar CampaignSurveyContentIntercept = /** @class */ (function () {\n    function CampaignSurveyContentIntercept() {\n    }\n    CampaignSurveyContentIntercept.deserialize = function (input) {\n        var result = new CampaignSurveyContentIntercept();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.title = input.Title;\n        result.question = input.Question;\n        result.url = input.Url;\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyContentIntercept.prototype.validate = function () {\n        if (isNOU(this.title) || !isString(this.title) ||\n            isNOU(this.question) || !isString(this.question) ||\n            isNOU(this.url) || !isString(this.url)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyContentIntercept;\n}());\nexports.CampaignSurveyContentIntercept = CampaignSurveyContentIntercept;\nvar CampaignSurveyContentRating = /** @class */ (function () {\n    function CampaignSurveyContentRating() {\n    }\n    CampaignSurveyContentRating.deserialize = function (input) {\n        var result = new CampaignSurveyContentRating();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.isZeroBased = input.IsZeroBased;\n        result.question = input.Question;\n        result.ratingValuesAscending = input.RatingValuesAscending;\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyContentRating.prototype.validate = function () {\n        // expect ratingValuesAscending to contain between 2 to 11 values\n        if (isNOU(this.question) || !isString(this.question) ||\n            isNOU(this.ratingValuesAscending) || !Array.isArray(this.ratingValuesAscending) ||\n            this.ratingValuesAscending.length < 2 || this.ratingValuesAscending.length > 11) {\n            return false;\n        }\n        if (isNOU(this.isZeroBased)) {\n            // default to false if not provided\n            this.isZeroBased = false;\n        }\n        else if (!isBoolean(this.isZeroBased)) {\n            // fail validation if non boolean value is provided\n            return false;\n        }\n        // expect all ratingValuesAscending values to be string\n        for (var key in this.ratingValuesAscending) {\n            if (this.ratingValuesAscending.hasOwnProperty(key)) {\n                if (!isString(this.ratingValuesAscending[key])) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    };\n    return CampaignSurveyContentRating;\n}());\nexports.CampaignSurveyContentRating = CampaignSurveyContentRating;\nvar CampaignSurveyContentComment = /** @class */ (function () {\n    function CampaignSurveyContentComment() {\n    }\n    CampaignSurveyContentComment.deserialize = function (input) {\n        var result = new CampaignSurveyContentComment();\n        if (isNOU(input)) {\n            return null;\n        }\n        // @SerializedName("Question")\n        result.question = input.Question;\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyContentComment.prototype.validate = function () {\n        if (isNOU(this.question) || !isString(this.question)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyContentComment;\n}());\nexports.CampaignSurveyContentComment = CampaignSurveyContentComment;\n// endregion\n// region Survey Metadata Definitions\nvar CampaignSurveyMetadata = /** @class */ (function () {\n    function CampaignSurveyMetadata() {\n    }\n    CampaignSurveyMetadata.deserialize = function (input) {\n        if (isNOU(input)) {\n            return null;\n        }\n        var result = new CampaignSurveyMetadata();\n        result.contentMetadata = input.ContentMetadata;\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyMetadata.prototype.validate = function () {\n        if (isNOU(this.contentMetadata) || !Utils.isObject(this.contentMetadata)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyMetadata;\n}());\nexports.CampaignSurveyMetadata = CampaignSurveyMetadata;\n// endregion\n// region Survey Template definitions\nvar CampaignSurveyTemplate = /** @class */ (function () {\n    function CampaignSurveyTemplate() {\n    }\n    CampaignSurveyTemplate.deserialize = function (input) {\n        var result;\n        if (isNOU(input)) {\n            return null;\n        }\n        switch (input.Type) {\n            case 0 /* Nps5PointStatic */:\n                result = CampaignSurveyTemplateNps5PointStatic.deserialize(input);\n                break;\n            case 1 /* Nps11PointStatic */:\n                result = CampaignSurveyTemplateNps11PointStatic.deserialize(input);\n                break;\n            case 2 /* Fps */:\n                result = CampaignSurveyTemplateFps.deserialize(input);\n                break;\n            case 3 /* Nlqs */:\n                result = CampaignSurveyTemplateNlqs.deserialize(input);\n                break;\n            case 4 /* Nps */:\n                result = CampaignSurveyTemplateNps.deserialize(input);\n                break;\n            case 22 /* GenericMessagingSurface */:\n                result = CampaignSurveyTemplateGenericMessagingSurface.deserialize(input);\n                break;\n            case 5 /* Intercept */:\n                result = CampaignSurveyTemplateIntercept.deserialize(input);\n                break;\n        }\n        if (isNOU(result)) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyTemplate.prototype.validate = function () {\n        if (isNOU(this.activationEvent)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyTemplate;\n}());\nexports.CampaignSurveyTemplate = CampaignSurveyTemplate;\nvar CampaignSurveyTemplateFps = /** @class */ (function (_super) {\n    __extends(CampaignSurveyTemplateFps, _super);\n    // public for UT only\n    function CampaignSurveyTemplateFps() {\n        return _super.call(this) || this;\n    }\n    CampaignSurveyTemplateFps.deserialize = function (input) {\n        var result = new CampaignSurveyTemplateFps();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.activationEvent = CampaignSurveyEvent.deserialize(input.ActivationEvent);\n        result.content = CampaignSurveyContent.deserialize(input.Content, true /* optionalComponents */);\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyTemplateFps.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this) || isNOU(this.content)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyTemplateFps;\n}(CampaignSurveyTemplate));\nexports.CampaignSurveyTemplateFps = CampaignSurveyTemplateFps;\nvar CampaignSurveyTemplateNlqs = /** @class */ (function (_super) {\n    __extends(CampaignSurveyTemplateNlqs, _super);\n    // public for UT only\n    function CampaignSurveyTemplateNlqs() {\n        return _super.call(this) || this;\n    }\n    CampaignSurveyTemplateNlqs.deserialize = function (input) {\n        var result = new CampaignSurveyTemplateNlqs();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.activationEvent = CampaignSurveyEvent.deserialize(input.ActivationEvent);\n        result.content = CampaignSurveyContent.deserialize(input.Content);\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyTemplateNlqs.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this) || isNOU(this.content)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyTemplateNlqs;\n}(CampaignSurveyTemplate));\nexports.CampaignSurveyTemplateNlqs = CampaignSurveyTemplateNlqs;\nvar CampaignSurveyTemplateNps = /** @class */ (function (_super) {\n    __extends(CampaignSurveyTemplateNps, _super);\n    // public for UT only\n    function CampaignSurveyTemplateNps() {\n        return _super.call(this) || this;\n    }\n    CampaignSurveyTemplateNps.deserialize = function (input) {\n        var result = new CampaignSurveyTemplateNps();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.activationEvent = CampaignSurveyEvent.deserialize(input.ActivationEvent);\n        result.content = CampaignSurveyContent.deserialize(input.Content);\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyTemplateNps.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this) || isNOU(this.content)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyTemplateNps;\n}(CampaignSurveyTemplate));\nexports.CampaignSurveyTemplateNps = CampaignSurveyTemplateNps;\nvar CampaignSurveyTemplateNps5PointStatic = /** @class */ (function (_super) {\n    __extends(CampaignSurveyTemplateNps5PointStatic, _super);\n    // public for UT only\n    function CampaignSurveyTemplateNps5PointStatic() {\n        return _super.call(this) || this;\n    }\n    CampaignSurveyTemplateNps5PointStatic.deserialize = function (input) {\n        var result = new CampaignSurveyTemplateNps5PointStatic();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.activationEvent = CampaignSurveyEvent.deserialize(input.ActivationEvent);\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyTemplateNps5PointStatic.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyTemplateNps5PointStatic;\n}(CampaignSurveyTemplate));\nexports.CampaignSurveyTemplateNps5PointStatic = CampaignSurveyTemplateNps5PointStatic;\nvar CampaignSurveyTemplateNps11PointStatic = /** @class */ (function (_super) {\n    __extends(CampaignSurveyTemplateNps11PointStatic, _super);\n    function CampaignSurveyTemplateNps11PointStatic() {\n        return _super.call(this) || this;\n    }\n    CampaignSurveyTemplateNps11PointStatic.deserialize = function (input) {\n        var result = new CampaignSurveyTemplateNps11PointStatic();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.activationEvent = CampaignSurveyEvent.deserialize(input.ActivationEvent);\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyTemplateNps11PointStatic.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyTemplateNps11PointStatic;\n}(CampaignSurveyTemplate));\nexports.CampaignSurveyTemplateNps11PointStatic = CampaignSurveyTemplateNps11PointStatic;\nvar CampaignSurveyTemplateGenericMessagingSurface = /** @class */ (function (_super) {\n    __extends(CampaignSurveyTemplateGenericMessagingSurface, _super);\n    function CampaignSurveyTemplateGenericMessagingSurface() {\n        return _super.call(this) || this;\n    }\n    CampaignSurveyTemplateGenericMessagingSurface.deserialize = function (input) {\n        if (isNOU(input)) {\n            return null;\n        }\n        var result = new CampaignSurveyTemplateGenericMessagingSurface();\n        result.activationEvent = CampaignSurveyEvent.deserialize(input.ActivationEvent);\n        result.metadata = CampaignSurveyMetadata.deserialize(input.Metadata);\n        result.maxLaunches = input.MaxLaunches;\n        result.maxLaunchesPerSession = input.MaxLaunchesPerSession;\n        result.preferredLaunchType = input.PreferredLaunchType;\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyTemplateGenericMessagingSurface.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this) || isNOU(this.metadata)) {\n            return false;\n        }\n        if ((!isNOU(this.maxLaunches) && (!isNumber(this.maxLaunches) || this.maxLaunches <= 0)) ||\n            (!isNOU(this.maxLaunchesPerSession) && (!isNumber(this.maxLaunchesPerSession) || this.maxLaunchesPerSession <= 0))) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_LocalError("Invalid Multi Launch settings", this.maxLaunches, this.maxLaunchesPerSession);\n            return false;\n        }\n        // check for valid values\n        if (isNumber(this.maxLaunches) &&\n            isNumber(this.maxLaunchesPerSession) &&\n            this.maxLaunchesPerSession > this.maxLaunches) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_LocalError("Invalid Multi launch settings", this.maxLaunches, this.maxLaunchesPerSession);\n            return false;\n        }\n        if (!isNOU(this.preferredLaunchType) && !isString(this.preferredLaunchType)) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_LocalError("Invalid launcher type", this.preferredLaunchType);\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyTemplateGenericMessagingSurface;\n}(CampaignSurveyTemplate));\nexports.CampaignSurveyTemplateGenericMessagingSurface = CampaignSurveyTemplateGenericMessagingSurface;\nvar CampaignSurveyTemplateIntercept = /** @class */ (function (_super) {\n    __extends(CampaignSurveyTemplateIntercept, _super);\n    // public for UT only\n    function CampaignSurveyTemplateIntercept() {\n        return _super.call(this) || this;\n    }\n    CampaignSurveyTemplateIntercept.deserialize = function (input) {\n        var result = new CampaignSurveyTemplateIntercept();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.activationEvent = CampaignSurveyEvent.deserialize(input.ActivationEvent);\n        result.content = CampaignSurveyContent.deserialize(input.Content);\n        if (!result.validate()) {\n            return null;\n        }\n        return result;\n    };\n    CampaignSurveyTemplateIntercept.prototype.validate = function () {\n        if (!_super.prototype.validate.call(this) || isNOU(this.content)) {\n            return false;\n        }\n        return true;\n    };\n    return CampaignSurveyTemplateIntercept;\n}(CampaignSurveyTemplate));\nexports.CampaignSurveyTemplateIntercept = CampaignSurveyTemplateIntercept;\n// endregion\n// region Campaign Definition\nvar CampaignDefinition = /** @class */ (function () {\n    function CampaignDefinition() {\n    }\n    /**\n     * Method to deserialize a JSON object to class object\n     * @param input: JSON object\n     * Returns result of validation check\n     */\n    CampaignDefinition.deserialize = function (input) {\n        var result = new CampaignDefinition();\n        if (isNOU(input)) {\n            return null;\n        }\n        result.campaignId = input.CampaignId;\n        result.governedChannelType = input.GovernedChannelType;\n        result.startTime = input.StartTimeUtc;\n        result.endTime = input.EndTimeUtc;\n        result.launcherType = input.LauncherType;\n        result.primaryPriority = input.PrimaryPriority;\n        result.tags = input.Tags;\n        var additionalDataRequested = CampaignAdditionalDataRequested.deserialize(input.AdditionalDataRequested);\n        result.additionalDataRequested = additionalDataRequested ? additionalDataRequested.additionalData : [];\n        if (input.SurveyTemplate) {\n            result.surveyTemplate = CampaignSurveyTemplate.deserialize(input.SurveyTemplate);\n        }\n        if (input.NominationScheme) {\n            result.nominationScheme = CampaignNominationScheme.deserialize(input.NominationScheme);\n        }\n        if (input.Scope) {\n            result.scope = CampaignScope.deserialize(input.Scope);\n        }\n        if (!isNOU(input.BusinessLevel)) {\n            result.businessLevel = input.BusinessLevel;\n        }\n        if (!result.validate()) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_LocalError("Invalid definition", input);\n            return null;\n        }\n        return result;\n    };\n    CampaignDefinition.prototype.validate = function () {\n        var _a, _b;\n        if (isNOU(this.scope)) {\n            this.scope = new CampaignScopeAny();\n        }\n        if (isNOU(this.campaignId) || !isString(this.campaignId)) {\n            return false;\n        }\n        if (!isNumber(this.governedChannelType) || !Utils.isEnumValue(this.governedChannelType, GovernedChannel_1.GovernedChannelType)) {\n            return false;\n        }\n        if (isNOU(this.nominationScheme)) {\n            return false;\n        }\n        if (isNOU(this.surveyTemplate)) {\n            return false;\n        }\n        if (!isNOU(this.launcherType) && !isString(this.launcherType)) {\n            return false;\n        }\n        if (this.launcherType === "customervoice" && isNOU((_b = (_a = this.surveyTemplate.content) === null || _a === void 0 ? void 0 : _a.cvSurvey) === null || _b === void 0 ? void 0 : _b.customerVoiceFormId)) {\n            return false;\n        }\n        if (!isNOU(this.primaryPriority) && !isNumber(this.primaryPriority)) {\n            return false;\n        }\n        if (this.tags && !Array.isArray(this.tags)) {\n            return false;\n        }\n        // Campaigns with no start date are effectively disabled, in fact, this is the supported way to stage a definition but have it be turned off\n        if (isNOU(this.startTime)) {\n            this.startTime = getDistantFuture();\n        }\n        else if (isUtcDatetimeString(this.startTime)) {\n            this.startTime = stringToDate(this.startTime);\n        }\n        else {\n            return false;\n        }\n        // Campaigns with no end date are effectively on indefinitely\n        if (isNOU(this.endTime) ||\n            (typeof (this.endTime) === "string" && this.endTime === "")) {\n            this.endTime = getDistantFuture();\n        }\n        else if (isUtcDatetimeString(this.endTime)) {\n            this.endTime = stringToDate(this.endTime);\n        }\n        else {\n            return false;\n        }\n        return true;\n    };\n    return CampaignDefinition;\n}());\nexports.CampaignDefinition = CampaignDefinition;\n/**\n * Given an array of campaign definitions, returns the valid ones and errors if any are invalid.\n * @param input: JSON object\n * Returns the valid definitions and the error as string if any.\n */\nfunction FilterValidCampaignDefinitions(campaignDefinitions) {\n    var result = [];\n    if (isNOU(campaignDefinitions)) {\n        return { result: result, error: "Empty" };\n    }\n    if (!Array.isArray(campaignDefinitions)) {\n        return { result: result, error: "Not an array" };\n    }\n    var badIndexes = [];\n    for (var i = 0; i < campaignDefinitions.length; i++) {\n        var definition = campaignDefinitions[i];\n        if (definition) {\n            var newDefinition = CampaignDefinition.deserialize(definition);\n            newDefinition\n                ? result.push(newDefinition)\n                : badIndexes.push(i);\n        }\n        else {\n            badIndexes.push(i);\n        }\n    }\n    var error = badIndexes.length > 0 ? "Invalid campaign definitions at indexes: " + badIndexes.toString() : undefined;\n    return { result: result, error: error };\n}\nexports.FilterValidCampaignDefinitions = FilterValidCampaignDefinitions;\nvar FileSystemCampaignDefinitionProvider = /** @class */ (function () {\n    function FileSystemCampaignDefinitionProvider(storage) {\n        if (isNOU(storage)) {\n            throw new Error("storage must not be null");\n        }\n        this.storage = storage;\n    }\n    FileSystemCampaignDefinitionProvider.prototype.load = function () {\n        var definitionString = this.storage.read(IFloodgateStorageProvider.FileType.CampaignDefinitions);\n        if (isNOU(definitionString)) {\n            return [];\n        }\n        var readDefinitions;\n        try {\n            readDefinitions = JSON.parse(definitionString);\n        }\n        catch (e) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_CampaignLoad_Failed(e.toString());\n            return [];\n        }\n        // This ignores errors in validation for now.\n        return FilterValidCampaignDefinitions(readDefinitions).result;\n    };\n    FileSystemCampaignDefinitionProvider.prototype.loadAsync = function () {\n        var definitions = this.load();\n        return new Promise(function onFulfilled(resolve, reject) {\n            resolve(definitions);\n        });\n    };\n    return FileSystemCampaignDefinitionProvider;\n}());\nexports.FileSystemCampaignDefinitionProvider = FileSystemCampaignDefinitionProvider;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0NhbXBhaWduL0NhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyLnRzPzc3MmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDBKQUE4RTtBQUM5RSxvR0FBOEM7QUFDOUMsc0hBQXFEO0FBQ3JELHNIQUF5RDtBQUd6RCxzRkFBa0M7QUFJbEMscUlBQXFGO0FBRzdFLG9CQUFnQixHQUE4RSxLQUFLLGlCQUFuRixFQUFFLFNBQVMsR0FBbUUsS0FBSyxVQUF4RSxFQUFFLEtBQUssR0FBNEQsS0FBSyxNQUFqRSxFQUFFLFFBQVEsR0FBa0QsS0FBSyxTQUF2RCxFQUFFLFFBQVEsR0FBd0MsS0FBSyxTQUE3QyxFQUFFLG1CQUFtQixHQUFtQixLQUFLLG9CQUF4QixFQUFFLFlBQVksR0FBSyxLQUFLLGFBQVYsQ0FBVztBQUU1Ryx3QkFBd0I7QUFFeEI7O0dBRUc7QUFDSDtJQWVDO0lBQTBCLENBQUM7SUFkYixpQ0FBVyxHQUF6QixVQUEwQixLQUFVO1FBQ25DLElBQUksTUFBNkIsQ0FBQztRQUVsQyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUM5QixNQUFNLEdBQUcsbUNBQW1DLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFTUyx3Q0FBUSxHQUFsQjtRQUNDLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUNGLDRCQUFDO0FBQUQsQ0FBQztBQXpCcUIsc0RBQXFCO0FBMkIzQzs7R0FFRztBQUNIO0lBQXlELHVEQUFxQjtJQWtCN0UscUJBQXFCO0lBQ3JCO2VBQXVCLGlCQUFPO0lBQUUsQ0FBQztJQWxCbkIsK0NBQVcsR0FBekIsVUFBMEIsS0FBVTtRQUNuQyxJQUFNLE1BQU0sR0FBRyxJ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U0FDVjtRQUVELElBQUksZUFBb0IsQ0FBQztRQUV6QixJQUFJO1lBQ0gsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMvQztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1gsaUNBQWUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLE9BQU8sRUFBRSxDQUFDO1NBQ1Y7UUFFRCw2Q0FBNkM7UUFDN0MsT0FBTyw4QkFBOEIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0QsQ0FBQztJQUVNLHdEQUFTLEdBQWhCO1FBQ0MsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxPQUFPLENBQ2pCLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNO1lBQ25DLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQ0QsQ0FBQztJQUNILENBQUM7SUFDRiwyQ0FBQztBQUFELENBQUM7QUF0Q1ksb0ZBQW9DIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvQ2FtcGFpZ24vQ2FtcGFpZ25EZWZpbml0aW9uUHJvdmlkZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRmxvb2RnYXRlRW52aXJvbm1lbnRQcm92aWRlciB9IGZyb20gXCIuLi9BcGkvSUZsb29kZ2F0ZUVudmlyb25tZW50UHJvdmlkZXJcIjtcclxuaW1wb3J0ICogYXMgSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlciBmcm9tIFwiLi4vQXBpL0lGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXJcIjtcclxuaW1wb3J0IHsgVGVsZW1ldHJ5RXZlbnQgfSBmcm9tIFwiLi4vQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEZsb29kZ2F0ZUVuZ2luZSB9IGZyb20gXCIuLi9GbG9vZGdhdGVFbmdpbmVcIjtcclxuaW1wb3J0IHsgR292ZXJuZWRDaGFubmVsVHlwZSB9IGZyb20gXCIuLi9Hb3Zlcm5lZENoYW5uZWxcIjtcclxuaW1wb3J0ICogYXMgSVN1cnZleUluZm8gZnJvbSBcIi4uL0lTdXJ2ZXlJbmZvXCI7XHJcbmltcG9ydCB7IEJ1c2luZXNzTGV2ZWwgfSBmcm9tIFwiLi4vSVN1cnZleUluZm9cIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uL1V0aWxzXCI7XHJcblxyXG5pbXBvcnQgeyBJVXNlckZhY3RQcm92aWRlciB9IGZyb20gXCIuLi9BcGkvQXBpXCI7XHJcbmltcG9ydCB7IFVzZXJGYWN0IH0gZnJvbSBcIi4uL1VzZXJGYWN0L1VzZXJGYWN0XCI7XHJcbmltcG9ydCB7IGRlc2VyaWFsaXplVXNlckZhY3RzLCB2YWxpZGF0ZVVzZXJGYWN0cyB9IGZyb20gXCIuLi9Vc2VyRmFjdC9Vc2VyRmFjdEhlbHBlclwiO1xyXG5pbXBvcnQgeyBDYW1wYWlnblNjb3BlVHlwZSB9IGZyb20gXCIuL0NhbXBhaWduU2NvcGVUeXBlc1wiO1xyXG5cclxuY29uc3QgeyBnZXREaXN0YW50RnV0dXJlLCBpc0Jvb2xlYW4sIGlzTk9VLCBpc051bWJlciwgaXNTdHJpbmcsIGlzVXRjRGF0ZXRpbWVTdHJpbmcsIHN0cmluZ1RvRGF0ZSB9ID0gVXRpbHM7XHJcblxyXG4vLyByZWdpb24gTGFuZ3VhZ2UgUmFuZ2VcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIHJlcHJlc2VudGluZyBhIGxhbmd1YWdlIHJhbmdlIGluIGEgY2FtcGFpZ24gc2V0dGluZ1xyXG4gKi9cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhbXBhaWduTGFuZ3VhZ2VSYW5nZSB7XHJcblx0cHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogQ2FtcGFpZ25MYW5ndWFnZVJhbmdlIHtcclxuXHRcdGxldCByZXN1bHQ6IENhbXBhaWduTGFuZ3VhZ2VSYW5nZTtcclxuXHJcblx0XHRpZiAoaW5wdXQgJiYgaW5wdXQuVHlwZSA9PT0gMCkge1xyXG5cdFx0XHRyZXN1bHQgPSBDYW1wYWlnbkxhbmd1YWdlUmFuZ2VMYW5ndWFnZVN1YnRhZy5kZXNlcmlhbGl6ZShpbnB1dCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgdGFnIChmb3JtYXQgZnJvbSBSRkMgNTY0NikgaXMgaW4gdGhpcyBsYW5ndWFnZSByYW5nZSBzcGVjaWZpY2F0aW9uXHJcblx0ICovXHJcblx0cHVibGljIGFic3RyYWN0IGlzSW5SYW5nZShsYW5ndWFnZTogc3RyaW5nKTogYm9vbGVhbjtcclxuXHJcblx0cHJvdGVjdGVkIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyBhIHJhbmdlIG1hdGNoaW5nIG9uIHRoZSBcImxhbmd1YWdlIHN1YnRhZ1wiIGFnYWluc3QgZnVsbHkgc3BlY2lmaWVkIGxhbmd1YWdlIHRhZ3MsIGFjY29yZGluZyB0byBSRkMgNTY0NlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENhbXBhaWduTGFuZ3VhZ2VSYW5nZUxhbmd1YWdlU3VidGFnIGV4dGVuZHMgQ2FtcGFpZ25MYW5ndWFnZVJhbmdlIHtcclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBhbnkpOiBDYW1wYWlnbkxhbmd1YWdlUmFuZ2VMYW5ndWFnZVN1YnRhZyB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQ2FtcGFpZ25MYW5ndWFnZVJhbmdlTGFuZ3VhZ2VTdWJ0YWcoKTtcclxuXHJcblx0XHRpZiAoaW5wdXQpIHtcclxuXHRcdFx0cmVzdWx0Lmxhbmd1YWdlU3ViVGFnID0gaW5wdXQuVmFsdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFyZXN1bHQudmFsaWRhdGUoKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiVmFsdWVcIilcclxuXHRwdWJsaWMgbGFuZ3VhZ2VTdWJUYWc6IHN0cmluZztcclxuXHJcblx0Ly8gcHVibGljIGZvciBVVCBvbmx5XHJcblx0cHVibGljIGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBpc0luUmFuZ2UobGFuZ3VhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKGlzTk9VKGxhbmd1YWdlKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZXh0cmFjdGVkTGFuZ3VhZ2VTdWJUYWc6IHN0cmluZyA9IFV0aWxzLmV4dHJhY3RMYW5ndWFnZVN1YnRhZyhsYW5ndWFnZSk7XHJcblx0XHRpZiAoaXNOT1UoZXh0cmFjdGVkTGFuZ3VhZ2VTdWJUYWcpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBjb21wYXJlIHN0cmluZ3MgaWdub3JpbmcgY2FzZVxyXG5cdFx0cmV0dXJuIGV4dHJhY3RlZExhbmd1YWdlU3ViVGFnLnRvTG9jYWxlVXBwZXJDYXNlKCkgPT09IHRoaXMubGFuZ3VhZ2VTdWJUYWcudG9Mb2NhbGVVcHBlckNhc2UoKTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHByb3RlY3RlZCB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHRcdGlmICghc3VwZXIudmFsaWRhdGUoKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzTk9VKHRoaXMubGFuZ3VhZ2VTdWJUYWcpIHx8ICFpc1N0cmluZyh0aGlzLmxhbmd1YWdlU3ViVGFnKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHQvLyBSZWplY3QgYW55IHNwZWMgdGhhdCBpc24ndCBleGFjdGx5IGEgbGFuZ3VhZ2Ugc3VidGFnXHJcblx0XHRpZiAoIVV0aWxzLmlzVmFsaWRMYW5ndWFnZVN1YlRhZyh0aGlzLmxhbmd1YWdlU3ViVGFnKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59XHJcblxyXG4vLyBlbmRyZWdpb25cclxuXHJcbi8vIHJlZ2lvbiBTY29wZVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhbXBhaWduU2NvcGUge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduU2NvcGUge1xyXG5cdFx0bGV0IHJlc3VsdDogQ2FtcGFpZ25TY29wZTtcclxuXHJcblx0XHRpZiAoaXNOT1UoaW5wdXQpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN3aXRjaCAoaW5wdXQuVHlwZSkge1xyXG5cdFx0XHRjYXNlIENhbXBhaWduU2NvcGVUeXBlLkNhbXBhaWduU2NvcGVBbnk6XHJcblx0XHRcdFx0cmVzdWx0ID0gQ2FtcGFpZ25TY29wZUFueS5kZXNlcmlhbGl6ZShpbnB1dCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgQ2FtcGFpZ25TY29wZVR5cGUuQ2FtcGFpZ25TY29wZUVudmlyb25tZW50Q3Jvc3NQcm9kdWN0OlxyXG5cdFx0XHRcdHJlc3VsdCA9IENhbXBhaWduU2NvcGVFbnZpcm9ubWVudENyb3NzUHJvZHVjdC5kZXNlcmlhbGl6ZShpbnB1dCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgQ2FtcGFpZ25TY29wZVR5cGUuQ2FtcGFpZ25TY29wZVVzZXJGYWN0QW55OlxyXG5cdFx0XHRcdHJlc3VsdCA9IENhbXBhaWduU2NvcGVVc2VyRmFjdEFueS5kZXNlcmlhbGl6ZShpbnB1dCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgQ2FtcGFpZ25TY29wZVR5cGUuQ2FtcGFpZ25TY29wZVVzZXJGYWN0QWxsOlxyXG5cdFx0XHRcdHJlc3VsdCA9IENhbXBhaWduU2NvcGVVc2VyRmFjdEFsbC5kZXNlcmlhbGl6ZShpbnB1dCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcblx0cHVibGljIGFic3RyYWN0IGlzSW5TY29wZSgpOiBib29sZWFuO1xyXG5cclxuXHRwcm90ZWN0ZWQgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYW1wYWlnblNjb3BlQW55IGV4dGVuZHMgQ2FtcGFpZ25TY29wZSB7XHJcblx0cHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogQ2FtcGFpZ25TY29wZUFueSB7XHJcblx0XHRyZXR1cm4gbmV3IENhbXBhaWduU2NvcGVBbnkoKTtcclxuXHR9XHJcblxyXG5cdC8vIHB1YmxpYyBmb3IgVVQgb25seVxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgaXNJblNjb3BlKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwcm90ZWN0ZWQgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIXN1cGVyLnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENhbXBhaWduU2NvcGVFbnZpcm9ubWVudENyb3NzUHJvZHVjdCBleHRlbmRzIENhbXBhaWduU2NvcGUge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduU2NvcGVFbnZpcm9ubWVudENyb3NzUHJvZHVjdCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQ2FtcGFpZ25TY29wZUVudmlyb25tZW50Q3Jvc3NQcm9kdWN0KCk7XHJcblx0XHRsZXQgbGFuZ3VhZ2VSYW5nZXM6IENhbXBhaWduTGFuZ3VhZ2VSYW5nZVtdID0gW107XHJcblxyXG5cdFx0aWYgKGlzTk9VKGlucHV0KSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBpbnB1dC5MYW5ndWFnZXMpIHtcclxuXHRcdFx0aWYgKGlucHV0Lkxhbmd1YWdlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0Y29uc3QgcmVhZFJhbmdlOiBDYW1wYWlnbkxhbmd1YWdlUmFuZ2UgPSBpbnB1dC5MYW5ndWFnZXNba2V5XTtcclxuXHJcblx0XHRcdFx0aWYgKHJlYWRSYW5nZSkge1xyXG5cdFx0XHRcdFx0bGFuZ3VhZ2VSYW5nZXMucHVzaChDYW1wYWlnbkxhbmd1YWdlUmFuZ2UuZGVzZXJpYWxpemUocmVhZFJhbmdlKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGxhbmd1YWdlUmFuZ2VzLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRsYW5ndWFnZVJhbmdlcyA9IG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0Lmxhbmd1YWdlUmFuZ2VzID0gbGFuZ3VhZ2VSYW5nZXM7XHJcblxyXG5cdFx0aWYgKCFyZXN1bHQudmFsaWRhdGUoKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiTGFuZ3VhZ2VzXCIpXHJcblx0cHVibGljIGxhbmd1YWdlUmFuZ2VzOiBDYW1wYWlnbkxhbmd1YWdlUmFuZ2VbXTtcclxuXHJcblx0cHJpdmF0ZSBlbnZpcm9ubWVudFByb3ZpZGVyOiBJRmxvb2RnYXRlRW52aXJvbm1lbnRQcm92aWRlcjtcclxuXHJcblx0Ly8gcHVibGljIGZvciBVVCBvbmx5XHJcblx0cHVibGljIGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9XHJcblxyXG5cdHB1YmxpYyBzZXRFbnZpcm9ubWVudFByb3ZpZGVyKGVudmlyb25tZW50UHJvdmlkZXI6IElGbG9vZGdhdGVFbnZpcm9ubWVudFByb3ZpZGVyKSB7XHJcblx0XHR0aGlzLmVudmlyb25tZW50UHJvdmlkZXIgPSBlbnZpcm9ubWVudFByb3ZpZGVyO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGlzSW5TY29wZSgpOiBib29sZWFuIHtcclxuXHRcdGlmIChpc05PVSh0aGlzLmxhbmd1YWdlUmFuZ2VzKSkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNOT1UodGhpcy5lbnZpcm9ubWVudFByb3ZpZGVyKSB8fCAhdGhpcy5lbnZpcm9ubWVudFByb3ZpZGVyLmdldExhbmd1YWdlKCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGxhbmd1YWdlID0gdGhpcy5lbnZpcm9ubWVudFByb3ZpZGVyLmdldExhbmd1YWdlKCk7XHJcblx0XHQvLyBJZiB0aGUgZW52aXJvbm1lbnQgbWF0Y2hlcyBhIHNpbmdsZSBwYXR0ZXJuLCB0aGVuIHRoaXMgaXMgYSB5ZXNcclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMubGFuZ3VhZ2VSYW5nZXMpIHtcclxuXHRcdFx0aWYgKHRoaXMubGFuZ3VhZ2VSYW5nZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdGNvbnN0IHJhbmdlID0gdGhpcy5sYW5ndWFnZVJhbmdlc1trZXldO1xyXG5cclxuXHRcdFx0XHRpZiAocmFuZ2UuaXNJblJhbmdlKGxhbmd1YWdlKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHJvdGVjdGVkIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFzdXBlci52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBOdWxsIGxhbmd1YWdlUmFuZ2VzIGlzIGFsbG93ZWQsIG1lYW5zIHdpbGwgbWF0Y2ggd2l0aCBldmVyeXRoaW5nLlxyXG5cdFx0aWYgKHRoaXMubGFuZ3VhZ2VSYW5nZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gdGhpcy5sYW5ndWFnZVJhbmdlcykge1xyXG5cdFx0XHRcdGlmICh0aGlzLmxhbmd1YWdlUmFuZ2VzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXRoaXMubGFuZ3VhZ2VSYW5nZXNba2V5XSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENhbXBhaWduU2NvcGVVc2VyRmFjdEFueSBleHRlbmRzIENhbXBhaWduU2NvcGUge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduU2NvcGVVc2VyRmFjdEFueSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQ2FtcGFpZ25TY29wZVVzZXJGYWN0QW55KCk7XHJcblx0XHRyZXN1bHQudXNlckZhY3RzID0gZGVzZXJpYWxpemVVc2VyRmFjdHMoaW5wdXQpO1xyXG5cclxuXHRcdGlmICghcmVzdWx0LnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIlVzZXJGYWN0c1wiKVxyXG5cdHB1YmxpYyB1c2VyRmFjdHM6IFVzZXJGYWN0W107XHJcblxyXG5cdHByaXZhdGUgdXNlckZhY3RzUHJvdmlkZXI/OiBJVXNlckZhY3RQcm92aWRlcjtcclxuXHJcblx0Ly8gcHVibGljIGZvciBVVCBvbmx5XHJcblx0cHVibGljIGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9XHJcblxyXG5cdHB1YmxpYyBzZXRVc2VyRmFjdHNQcm92aWRlcih1c2VyRmFjdHNQcm92aWRlcj86IElVc2VyRmFjdFByb3ZpZGVyKSB7XHJcblx0XHR0aGlzLnVzZXJGYWN0c1Byb3ZpZGVyID0gdXNlckZhY3RzUHJvdmlkZXI7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgaXNJblNjb3BlKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKGlzTk9VKHRoaXMudXNlckZhY3RzKSkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXRoaXMudXNlckZhY3RzUHJvdmlkZXIpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIElmIG9uZSBvZiB0aGUgdXNlciBmYWN0IG1hdGNoZXMsIHRoZW4gdGhpcyBpcyBhIHllc1xyXG5cdFx0cmV0dXJuIHRoaXMudXNlckZhY3RzLnNvbWUoKHVzZXJGYWN0KSA9PiB7XHJcblx0XHRcdGNvbnN0IHJhd1VzZXJGYWN0ID0gdGhpcy51c2VyRmFjdHNQcm92aWRlci5nZXRVc2VyRmFjdCh1c2VyRmFjdC5nZXROYW1lKCkpO1xyXG5cdFx0XHRyZXR1cm4gdXNlckZhY3QuaXNBTWF0Y2gocmF3VXNlckZhY3QpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwcm90ZWN0ZWQgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIXN1cGVyLnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB2YWxpZGF0ZVVzZXJGYWN0cyh0aGlzLnVzZXJGYWN0cyk7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtcGFpZ25TY29wZVVzZXJGYWN0QWxsIGV4dGVuZHMgQ2FtcGFpZ25TY29wZSB7XHJcblx0cHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogQ2FtcGFpZ25TY29wZVVzZXJGYWN0QWxsIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBDYW1wYWlnblNjb3BlVXNlckZhY3RBbGwoKTtcclxuXHRcdHJlc3VsdC51c2VyRmFjdHMgPSBkZXNlcmlhbGl6ZVVzZXJGYWN0cyhpbnB1dCk7XHJcblxyXG5cdFx0aWYgKCFyZXN1bHQudmFsaWRhdGUoKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiVXNlckZhY3RzXCIpXHJcblx0cHVibGljIHVzZXJGYWN0czogVXNlckZhY3RbXTtcclxuXHJcblx0cHJpdmF0ZSB1c2VyRmFjdHNQcm92aWRlcj86IElVc2VyRmFjdFByb3ZpZGVyO1xyXG5cclxuXHQvLyBwdWJsaWMgZm9yIFVUIG9ubHlcclxuXHRwdWJsaWMgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH1cclxuXHJcblx0cHVibGljIHNldFVzZXJGYWN0c1Byb3ZpZGVyKHVzZXJGYWN0c1Byb3ZpZGVyPzogSVVzZXJGYWN0UHJvdmlkZXIpIHtcclxuXHRcdHRoaXMudXNlckZhY3RzUHJvdmlkZXIgPSB1c2VyRmFjdHNQcm92aWRlcjtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBpc0luU2NvcGUoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoaXNOT1UodGhpcy51c2VyRmFjdHMpKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghdGhpcy51c2VyRmFjdHNQcm92aWRlcikge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCBvZiB0aGUgbWlzbWF0Y2hlZCB1c2VyIGZhY3RzXHJcblx0XHRjb25zdCBtaXNtYXRjaGVkRmFjdHMgPSB0aGlzLnVzZXJGYWN0cy5maWx0ZXIoKHVzZXJGYWN0KSA9PiB7XHJcblx0XHRcdGNvbnN0IHJhd1VzZXJGYWN0ID0gdGhpcy51c2VyRmFjdHNQcm92aWRlci5nZXRVc2VyRmFjdCh1c2VyRmFjdC5nZXROYW1lKCkpO1xyXG5cdFx0XHRyZXR1cm4gIXVzZXJGYWN0LmlzQU1hdGNoKHJhd1VzZXJGYWN0KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGlmIChtaXNtYXRjaGVkRmFjdHMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRjb25zdCBtaXNtYXRjaGVkTmFtZXMgPSBtaXNtYXRjaGVkRmFjdHMubWFwKCh1c2VyRmFjdCkgPT4gdXNlckZhY3QuZ2V0TmFtZSgpKTtcclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FdmVudChcclxuXHRcdFx0XHRUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGUuVXNlckZhY3RzU3BlY0lzQU1hdGNoLlN1bW1hcnksIHtcclxuXHRcdFx0XHRcdENvdW50OiBtaXNtYXRjaGVkRmFjdHMubGVuZ3RoLFxyXG5cdFx0XHRcdFx0TWVzc2FnZTogbWlzbWF0Y2hlZE5hbWVzLnRvU3RyaW5nKCksXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJZiBhbGwgb2YgdGhlIHVzZXIgZmFjdHMgbWF0Y2gsIHRoZW4gdGhpcyBpcyBhIHllc1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwcm90ZWN0ZWQgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIXN1cGVyLnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB2YWxpZGF0ZVVzZXJGYWN0cyh0aGlzLnVzZXJGYWN0cyk7XHJcblx0fVxyXG59XHJcblxyXG4vLyBlbmRyZWdpb25cclxuXHJcbi8vIHJlZ2lvbiBEdXJhdGlvbnNcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIHJlcHJlc2VudGluZyBhIGR1cmF0aW9uIGluIGEgY2FtcGFpZ24gc2V0dGluZ1xyXG4gKi9cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhbXBhaWduRHVyYXRpb24ge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduRHVyYXRpb24ge1xyXG5cdFx0bGV0IHJlc3VsdDogQ2FtcGFpZ25EdXJhdGlvbjtcclxuXHJcblx0XHRpZiAoaXNOT1UoaW5wdXQpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHN3aXRjaCAoaW5wdXQuVHlwZSkge1xyXG5cdFx0XHRjYXNlIDA6XHJcblx0XHRcdFx0cmVzdWx0ID0gQ2FtcGFpZ25EdXJhdGlvblRpbWVJbnRlcnZhbC5kZXNlcmlhbGl6ZShpbnB1dCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgMTpcclxuXHRcdFx0XHRyZXN1bHQgPSBDYW1wYWlnbkR1cmF0aW9uU2luZ2xlQnVpbGRDaGFuZ2UuZGVzZXJpYWxpemUoaW5wdXQpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG5cdHB1YmxpYyBhYnN0cmFjdCBhc1RpbWVJbnRlcnZhbFNlY29uZHMoKTogbnVtYmVyO1xyXG5cclxuXHRwcm90ZWN0ZWQgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIER1cmF0aW9uIGV4cHJlc3NlZCBpbiBzZWNvbmRzLiBVVEMgZGF0ZXRpbWUgY29tcGFyaXNvbnMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGV4cGlyYXRpb24uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ2FtcGFpZ25EdXJhdGlvblRpbWVJbnRlcnZhbCBleHRlbmRzIENhbXBhaWduRHVyYXRpb24ge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduRHVyYXRpb25UaW1lSW50ZXJ2YWwge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduRHVyYXRpb25UaW1lSW50ZXJ2YWwoKTtcclxuXHJcblx0XHRpZiAoaW5wdXQpIHtcclxuXHRcdFx0cmVzdWx0LmludGVydmFsU2Vjb25kcyA9IGlucHV0LkludGVydmFsU2Vjb25kcztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXJlc3VsdC52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJJbnRlcnZhbFNlY29uZHNcIilcclxuXHRwdWJsaWMgaW50ZXJ2YWxTZWNvbmRzOiBudW1iZXI7XHJcblxyXG5cdC8vIHB1YmxpYyBmb3IgVVQgb25seVxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgYXNUaW1lSW50ZXJ2YWxTZWNvbmRzKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5pbnRlcnZhbFNlY29uZHM7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwcm90ZWN0ZWQgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIXN1cGVyLnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghaXNOdW1iZXIodGhpcy5pbnRlcnZhbFNlY29uZHMpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIER1cmF0aW9uIHJlcHJlc2VudGluZyBleGFjdGx5IDEgY2hhbmdlIGluIGJ1aWxkIG51bWJlclxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENhbXBhaWduRHVyYXRpb25TaW5nbGVCdWlsZENoYW5nZSBleHRlbmRzIENhbXBhaWduRHVyYXRpb24ge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduRHVyYXRpb25TaW5nbGVCdWlsZENoYW5nZSB7XHJcblx0XHRyZXR1cm4gbmV3IENhbXBhaWduRHVyYXRpb25TaW5nbGVCdWlsZENoYW5nZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gcHVibGljIGZvciBVVCBvbmx5XHJcblx0cHVibGljIGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBhc1RpbWVJbnRlcnZhbFNlY29uZHMoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENsYXNzIHJlcHJlc2VudGluZyBBZGRpdGlvbmFsRGF0YVJlcXVlc3RlZCBpbiBDYW1wYWlnbkRlZmluaXRpb25cclxuICovXHJcbmV4cG9ydCBjbGFzcyBDYW1wYWlnbkFkZGl0aW9uYWxEYXRhUmVxdWVzdGVkIHtcclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKGFkZGl0aW9uYWxEYXRhUmVxdWVzdGVkOiBzdHJpbmdbXSk6IENhbXBhaWduQWRkaXRpb25hbERhdGFSZXF1ZXN0ZWQge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduQWRkaXRpb25hbERhdGFSZXF1ZXN0ZWQoKTtcclxuXHJcblx0XHRpZiAoIWlzTk9VKGFkZGl0aW9uYWxEYXRhUmVxdWVzdGVkKSkge1xyXG5cdFx0XHQvLyBDb252ZXJ0IGZyb20gQWRkaXRpb25hbERhdGFSZXF1ZXN0ZWQgc3RyaW5nIHRvIGVudW1cclxuXHRcdFx0cmVzdWx0LmFkZGl0aW9uYWxEYXRhID0gW107XHJcblx0XHRcdGZvciAoY29uc3QgYWRkaXRpb25hbERhdGEgb2YgYWRkaXRpb25hbERhdGFSZXF1ZXN0ZWQpIHtcclxuXHRcdFx0XHRpZiAoYWRkaXRpb25hbERhdGEgPT09IFwiRW1haWxBZGRyZXNzXCIpIHtcclxuXHRcdFx0XHRcdHJlc3VsdC5hZGRpdGlvbmFsRGF0YS5wdXNoKElTdXJ2ZXlJbmZvLkFkZGl0aW9uYWxEYXRhVHlwZS5FbWFpbEFkZHJlc3MpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghcmVzdWx0LnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhZGRpdGlvbmFsRGF0YTogSVN1cnZleUluZm8uQWRkaXRpb25hbERhdGFUeXBlW107XHJcblxyXG5cdHByaXZhdGUgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoaXNOT1UodGhpcy5hZGRpdGlvbmFsRGF0YSkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG4vLyBlbmRyZWdpb25cclxuXHJcbi8vIHJlZ2lvbiBEaXN0cmlidXRpb24gU2NoZW1lc1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhbXBhaWduRGlzdHJpYnV0aW9uIHtcclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBhbnkpOiBDYW1wYWlnbkRpc3RyaWJ1dGlvbiB7XHJcblx0XHRsZXQgcmVzdWx0OiBDYW1wYWlnbkRpc3RyaWJ1dGlvbjtcclxuXHJcblx0XHRpZiAoaW5wdXQgJiYgaW5wdXQuVHlwZSA9PT0gMCkge1xyXG5cdFx0XHRyZXN1bHQgPSBDYW1wYWlnbkRpc3RyaWJ1dGlvblJhbXAuZGVzZXJpYWxpemUoaW5wdXQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG5cdHByb3RlY3RlZCB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENhbXBhaWduRGlzdHJpYnV0aW9uUmFtcCBleHRlbmRzIENhbXBhaWduRGlzdHJpYnV0aW9uIHtcclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBhbnkpOiBDYW1wYWlnbkRpc3RyaWJ1dGlvblJhbXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduRGlzdHJpYnV0aW9uUmFtcCgpO1xyXG5cclxuXHRcdGlmIChpbnB1dCkge1xyXG5cdFx0XHRyZXN1bHQubWF4RGVsYXlTZWNvbmRzID0gaW5wdXQuTWF4RGVsYXlTZWNvbmRzO1xyXG5cdFx0XHRyZXN1bHQuY2h1bmtzID0gaW5wdXQuQ2h1bmtzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghcmVzdWx0LnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIFRoZSB0aW1lIHdpbmRvdyBvdmVyIHdoaWNoIHRoZSByYW1wIHdpbGwgZGlzdHJpYnV0ZSBzdGFydCBkYXRlcy5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJNYXhEZWxheVNlY29uZHNcIilcclxuXHRwdWJsaWMgbWF4RGVsYXlTZWNvbmRzOiBudW1iZXI7XHJcblxyXG5cdC8vIFRoZSBudW1iZXIgb2YgZGlzY3JldGUgYnVja2V0cyB0byBkaXZpZGUgdGhlIHRpbWUgd2luZG93IChtYXhEZWxheVNlY29uZHMpIGludG9cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJDaHVua3NcIilcclxuXHRwdWJsaWMgY2h1bmtzOiBudW1iZXI7XHJcblxyXG5cdHByaXZhdGUgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHJvdGVjdGVkIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFzdXBlci52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWlzTnVtYmVyKHRoaXMubWF4RGVsYXlTZWNvbmRzKSB8fCB0aGlzLm1heERlbGF5U2Vjb25kcyA8IDApIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghaXNOdW1iZXIodGhpcy5jaHVua3MpIHx8IHRoaXMuY2h1bmtzIDwgMCkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59XHJcblxyXG4vLyBlbmRyZWdpb25cclxuXHJcbi8vIHJlZ2lvbiBOb21pbmF0aW9uIFNjaGVtZVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENhbXBhaWduTm9taW5hdGlvblNjaGVtZSB7XHJcblx0cHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogQ2FtcGFpZ25Ob21pbmF0aW9uU2NoZW1lIHtcclxuXHRcdGxldCByZXN1bHQ6IENhbXBhaWduTm9taW5hdGlvblNjaGVtZTtcclxuXHJcblx0XHRpZiAoaW5wdXQgJiYgaW5wdXQuVHlwZSA9PT0gMCkge1xyXG5cdFx0XHRyZXN1bHQgPSBDYW1wYWlnbk5vbWluYXRpb25TY2hlbWVSYXRpb1BlcmNlbnRhZ2UuZGVzZXJpYWxpemUoaW5wdXQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Ly8gVGhlIGFtb3VudCBvZiB0aW1lIChpbiBzZWNvbmRzKSBmb3Igd2hpY2ggdGhlIHN1cnZleSBpcyBhY3RpdmUsIGlmIHRoZSBub21pbmF0aW9uUGVyaW9kIGNhbid0IGJlIGludGVycHJldGVkIGFzIGEgdGltZSBpbnRlcnZhbFxyXG5cdC8vIG5vdGU6IFRoaXMgaXMgb25seSB1c2VkIHdoZW4gbm9taW5hdGlvblBlcmlvZCBpcyBub3Qgb2YgYSB0eXBlIHRoYXQgY2FuIGJlIGludGVycHJldGVkIGFzIGEgdGltZSBpbnRlcnZhbCwgb3RoZXJ3aXNlXHJcblx0Ly8gdGhhdCB2YWx1ZSBpcyB1c2VkIGluc3RlYWRcclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJGYWxsYmFja1N1cnZleUR1cmF0aW9uU2Vjb25kc1wiKVxyXG5cdHB1YmxpYyBmYWxsYmFja1N1cnZleUR1cmF0aW9uU2Vjb25kczogbnVtYmVyO1xyXG5cclxuXHQvLyBXaGVuIHRoZSB1c2VyIG5ldmVyIHNlZXMgdGhlIHN1cnZleSBkdXJpbmcgdGhlaXIgY2FuZGlkYWN5IChvciBhbnRpLWNhbmRpZGFjeSksIHRoaXMgaXMgdGhlIGR1cmF0aW9uIHRoYXQgbXVzdCBsYXBzZVxyXG5cdC8vIGJlZm9yZSByZS0gbm9taW5hdGluZ1xyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIk5vbWluYXRpb25QZXJpb2RcIilcclxuXHRwdWJsaWMgbm9taW5hdGlvblBlcmlvZDogQ2FtcGFpZ25EdXJhdGlvbjtcclxuXHJcblx0Ly8gV2hlbiB0aGUgdXNlciBkb2VzIHNlZXMgdGhlIHN1cnZleSBkdXJpbmcgdGhlaXIgY2FuZGlkYWN5LCB0aGlzIGlzIHRoZSBkdXJhdGlvbiB0aGF0IG11c3QgbGFwc2UgYmVmb3JlIHJlLWV2YWx1YXRpbmdcclxuXHQvLyBjYW5kaWRhY3kuIEdlbmVyYWxseSByZWNvbW1lbmRlZCB0aGF0IHRoaXMgYmUgZ3JlYXRlciB0aGFuIG5vbWluYXRpb25QZXJpb2RcclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJDb29sZG93blBlcmlvZFwiKVxyXG5cdHB1YmxpYyBjb29sZG93blBlcmlvZDogQ2FtcGFpZ25EdXJhdGlvbjtcclxuXHJcblx0cHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEByZXR1cm4gVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBzdXJ2ZXkgc2hvdWxkIGJlIGFjdGl2ZSwgaW4gc2Vjb25kcy4gQWJzdHJhY3RzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbm9taW5hdGlvblBlcmlvZCBhbmQgdGhlIGZhbGxiYWNrXHJcblx0ICovXHJcblx0cHVibGljIGdldEFjdGl2ZVN1cnZleVRpbWVJbnRlcnZhbFNlY29uZHMoKTogbnVtYmVyIHtcclxuXHRcdGNvbnN0IG5vbWluYXRpb25UaW1JbnRlcnZhbFNlY29uZHM6IG51bWJlciA9IHRoaXMubm9taW5hdGlvblBlcmlvZC5hc1RpbWVJbnRlcnZhbFNlY29uZHMoKTtcclxuXHJcblx0XHRpZiAoaXNOdW1iZXIobm9taW5hdGlvblRpbUludGVydmFsU2Vjb25kcykpIHtcclxuXHRcdFx0cmV0dXJuIG5vbWluYXRpb25UaW1JbnRlcnZhbFNlY29uZHM7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZmFsbGJhY2tTdXJ2ZXlEdXJhdGlvblNlY29uZHM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcmV0dXJuIFRoZSBzdXJ2ZXkgc3RhcnQgdGltZSwgcG9zc2libHkgYWRqdXN0ZWQgYnkgYW4gdW5kZXJseWluZyBEaXN0cmlidXRpb25Nb2RlbC5cclxuXHQgKi9cclxuXHRwdWJsaWMgY2FsY3VsYXRlU3VydmV5U3RhcnRUaW1lRnJvbURhdGUoc29vbmVzdFN0YXJ0VGltZTogRGF0ZSk6IERhdGUge1xyXG5cdFx0Ly8gTm8gYWRqdXN0bWVudCBpbiBiYXNlIGNsYXNzLiAgRGVyaXZlZCBjbGFzc2VzIGNhbiBvdmVycmlkZSBhbmQgaW1wbGVtZW50IGRlbGF5cyBsaWtlIGEgXCJyYW1wXCJcclxuXHRcdHJldHVybiBzb29uZXN0U3RhcnRUaW1lID8gc29vbmVzdFN0YXJ0VGltZSA6IG5ldyBEYXRlKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcmV0dXJuIFRoZSBzdXJ2ZXkgZXhwaXJhdGlvbiB0aW1lLCBiYXNlZCBvbiB0aGUgbm9taW5hdGlvbiBwZXJpb2RzIGFuZCB0aGUgc3VydmV5J3MgYWRqdXN0ZWQgc3RhcnQgdGltZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjYWxjdWxhdGVTdXJ2ZXlFeHBpcmF0aW9uVGltZUZyb21TdXJ2ZXlTdGFydFRpbWUoc3VydmV5U3RhcnRUaW1lOiBEYXRlKTogRGF0ZSB7XHJcblx0XHRzdXJ2ZXlTdGFydFRpbWUgPSBzdXJ2ZXlTdGFydFRpbWUgPyBzdXJ2ZXlTdGFydFRpbWUgOiBuZXcgRGF0ZSgpO1xyXG5cdFx0cmV0dXJuIFV0aWxzLmFkZFNlY29uZHNXaXRob3V0T3ZlcmZsb3coc3VydmV5U3RhcnRUaW1lLCB0aGlzLmdldEFjdGl2ZVN1cnZleVRpbWVJbnRlcnZhbFNlY29uZHMoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcmV0dXJuIFRoZSBhcHByb3ByaWF0ZSBjYW1wYWlnbiBjb29sIGRvd24gYmFzZWQgb24gd2hldGhlciBvciBub3QgdGhlIHVzZXIgYWN0aXZhdGVkIHRoZSBzdXJ2ZXlcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0Q2FtcGFpZ25Db29sZG93bihkaWRVc2VyQWN0aXZhdGVTdXJ2ZXk6IGJvb2xlYW4pOiBDYW1wYWlnbkR1cmF0aW9uIHtcclxuXHRcdGlmIChkaWRVc2VyQWN0aXZhdGVTdXJ2ZXkpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuY29vbGRvd25QZXJpb2Q7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5ub21pbmF0aW9uUGVyaW9kO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZhbHVhdGUgdGhpcyBydWxlIHNldCBiYXNlZCBvbiBhIHJhbmRvbSBudW1iZXJcclxuXHQgKlxyXG5cdCAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdXNlciBzaG91bGQgYmUgYSBjYW5kaWRhdGUsIGZhbHNlIGlmIHRoZXkgc2hvdWxkIGJlIGFuIGFudGktY2FuZGlkYXRlXHJcblx0ICovXHJcblx0cHVibGljIGFic3RyYWN0IGV2YWx1YXRlTm9taW5hdGlvblJ1bGVzKCk6IGJvb2xlYW47XHJcblxyXG5cdHByb3RlY3RlZCB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHRcdGlmIChpc05PVSh0aGlzLm5vbWluYXRpb25QZXJpb2QpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNOT1UodGhpcy5jb29sZG93blBlcmlvZCkpIHtcclxuXHRcdFx0dGhpcy5jb29sZG93blBlcmlvZCA9IHRoaXMubm9taW5hdGlvblBlcmlvZDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWlzTnVtYmVyKHRoaXMubm9taW5hdGlvblBlcmlvZC5hc1RpbWVJbnRlcnZhbFNlY29uZHMoKSkpIHtcclxuXHRcdFx0aWYgKCFpc051bWJlcih0aGlzLmZhbGxiYWNrU3VydmV5RHVyYXRpb25TZWNvbmRzKSB8fCB0aGlzLmZhbGxiYWNrU3VydmV5RHVyYXRpb25TZWNvbmRzIDw9IDApIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDbGFzcyByZXByZXNlbnRpbmcgYSBzZXQgb2YgY2FtcGFpZ24gbm9taW5hdGlvbiBydWxlcyB0byBldmFsdWF0ZSBmb3IgaW4tc2NvcGUgY2FtcGFpZ25zOlxyXG4gKiBwZXJjZW50YWdlXHJcbiAqIHJlLWVsZWN0aW9uIGR1cmF0aW9uc1xyXG4gKiBkaXN0cmlidXRpb24gbW9kZWwgKGZvciBcIm5vbWluYXRlZFwiIGNhbmRpZGF0ZXMpXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ2FtcGFpZ25Ob21pbmF0aW9uU2NoZW1lUmF0aW9QZXJjZW50YWdlIGV4dGVuZHMgQ2FtcGFpZ25Ob21pbmF0aW9uU2NoZW1lIHtcclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBhbnkpOiBDYW1wYWlnbk5vbWluYXRpb25TY2hlbWVSYXRpb1BlcmNlbnRhZ2Uge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduTm9taW5hdGlvblNjaGVtZVJhdGlvUGVyY2VudGFnZSgpO1xyXG5cclxuXHRcdGlmIChpc05PVShpbnB1dCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlucHV0LkRpc3RyaWJ1dGlvbk1vZGVsKSB7XHJcblx0XHRcdHJlc3VsdC5kaXN0cmlidXRpb25Nb2RlbCA9IENhbXBhaWduRGlzdHJpYnV0aW9uLmRlc2VyaWFsaXplKGlucHV0LkRpc3RyaWJ1dGlvbk1vZGVsKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5wdXQuQ29vbGRvd25QZXJpb2QpIHtcclxuXHRcdFx0cmVzdWx0LmNvb2xkb3duUGVyaW9kID0gQ2FtcGFpZ25EdXJhdGlvbi5kZXNlcmlhbGl6ZShpbnB1dC5Db29sZG93blBlcmlvZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlucHV0Lk5vbWluYXRpb25QZXJpb2QpIHtcclxuXHRcdFx0cmVzdWx0Lm5vbWluYXRpb25QZXJpb2QgPSBDYW1wYWlnbkR1cmF0aW9uLmRlc2VyaWFsaXplKGlucHV0Lk5vbWluYXRpb25QZXJpb2QpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC5mYWxsYmFja1N1cnZleUR1cmF0aW9uU2Vjb25kcyA9IGlucHV0LkZhbGxiYWNrU3VydmV5RHVyYXRpb25TZWNvbmRzO1xyXG5cdFx0cmVzdWx0LnBlcmNlbnRhZ2VEZW5vbWluYXRvciA9IGlucHV0LlBlcmNlbnRhZ2VEZW5vbWluYXRvcjtcclxuXHRcdHJlc3VsdC5wZXJjZW50YWdlTnVtZXJhdG9yID0gaW5wdXQuUGVyY2VudGFnZU51bWVyYXRvcjtcclxuXHJcblx0XHRpZiAoIXJlc3VsdC52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBUaGUgbnVtZXJhdG9yIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHBlcmNlbnRhZ2Ugb2YgdXNlcnMgdGhhdCBzaG91bGQgYmUgc2VsZWN0ZWQgYXMgY2FuZGlkYXRlcy4gIE11c3RcclxuXHQvLyBzYXRpc2Z5IDAgPD0gcGVyY2VudGFnZU51bWVyYXRvciA8PSBwZXJjZW50YWdlRGVub21pbmF0b3JcclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJQZXJjZW50YWdlTnVtZXJhdG9yXCIpXHJcblx0cHVibGljIHBlcmNlbnRhZ2VOdW1lcmF0b3I6IG51bWJlcjtcclxuXHJcblx0Ly8gVGhlIGRlbm9taW5hdG9yIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHBlcmNlbnRhZ2Ugb2YgdXNlcnMgdGhhdCBzaG91bGQgYmUgc2VsZWN0ZWQgYXMgY2FuZGlkYXRlcy4gIE11c3QgYmUgZ3JlYXRlciB0aGFuIDAuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiUGVyY2VudGFnZURlbm9taW5hdG9yXCIpXHJcblx0cHVibGljIHBlcmNlbnRhZ2VEZW5vbWluYXRvcjogbnVtYmVyO1xyXG5cclxuXHQvLyBOWUkgLSBGb3IgY2FuZGlkYXRlcywgYWxsb3dzIHRoZSBTdXJ2ZXkgc3RhcnQvZW5kIGRhdGVzIHRvIGJlIHNoaWZ0ZWQgZm9yd2FyZCBpbiB0aW1lLCB0byBoZWxwIGFjaGlldmUgYSBzbW9vdGhlciBzaWduYWxcclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJEaXN0cmlidXRpb25Nb2RlbFwiKVxyXG5cdHB1YmxpYyBkaXN0cmlidXRpb25Nb2RlbDogQ2FtcGFpZ25EaXN0cmlidXRpb247XHJcblxyXG5cdHByaXZhdGUgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGV2YWx1YXRlTm9taW5hdGlvblJ1bGVzKCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgcmFuZDogbnVtYmVyID0gTWF0aC5yYW5kb20oKTtcclxuXHRcdC8vIENyZWF0ZXMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gWzAgdG8gKHBlcmNlbnRhZ2VEZW5vbWluYXRvciAtIDEpXVxyXG5cdFx0Ly8gSW4gcmFuZ2UgWzAgdG8gKHBlcmNlbnRhZ2VEZW5vbWluYXRvciAtIDEpXSBleGFjdGx5ICdwZXJjZW50YWdlTnVtZXJhdG9yJyB2YWx1ZXMgYXJlIDwgcGVyY2VudGFnZU51bWVyYXRvclxyXG5cdFx0cmV0dXJuIE1hdGguZmxvb3IocmFuZCAqIHRoaXMucGVyY2VudGFnZURlbm9taW5hdG9yKSA8IHRoaXMucGVyY2VudGFnZU51bWVyYXRvcjtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHByb3RlY3RlZCB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHRcdGlmICghc3VwZXIudmFsaWRhdGUoKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFpc051bWJlcih0aGlzLnBlcmNlbnRhZ2VEZW5vbWluYXRvcikgfHwgIWlzTnVtYmVyKHRoaXMucGVyY2VudGFnZU51bWVyYXRvcikpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnBlcmNlbnRhZ2VEZW5vbWluYXRvciA8PSAwIHx8IHRoaXMucGVyY2VudGFnZU51bWVyYXRvciA8IDApIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnBlcmNlbnRhZ2VOdW1lcmF0b3IgPiB0aGlzLnBlcmNlbnRhZ2VEZW5vbWluYXRvcikge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gZGlzdHJpYnV0aW9uIG1vZGVsIG1heSBiZSBudWxsXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbi8vIGVuZHJlZ2lvblxyXG5cclxuLy8gcmVnaW9uIFN1cnZleSBFdmVudCBEZWZpbml0aW9uc1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2FtcGFpZ25TdXJ2ZXlFdmVudCB7XHJcblx0cHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogQ2FtcGFpZ25TdXJ2ZXlFdmVudCB7XHJcblx0XHRsZXQgcmVzdWx0OiBDYW1wYWlnblN1cnZleUV2ZW50O1xyXG5cclxuXHRcdGlmIChpc05PVShpbnB1dCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0c3dpdGNoIChpbnB1dC5UeXBlKSB7XHJcblx0XHRcdGNhc2UgMDpcclxuXHRcdFx0XHRyZXN1bHQgPSBDYW1wYWlnblN1cnZleUV2ZW50Q291bnRlZEFjdGl2aXR5LmRlc2VyaWFsaXplKGlucHV0KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAxOlxyXG5cdFx0XHRcdHJlc3VsdCA9IENhbXBhaWduU3VydmV5RXZlbnRDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZS5kZXNlcmlhbGl6ZShpbnB1dCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcblx0cHJvdGVjdGVkIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtcGFpZ25TdXJ2ZXlFdmVudENvdW50ZWRBY3Rpdml0eSBleHRlbmRzIENhbXBhaWduU3VydmV5RXZlbnQge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduU3VydmV5RXZlbnRDb3VudGVkQWN0aXZpdHkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduU3VydmV5RXZlbnRDb3VudGVkQWN0aXZpdHkoKTtcclxuXHJcblx0XHRpZiAoaXNOT1UoaW5wdXQpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC5hY3Rpdml0eSA9IGlucHV0LkFjdGl2aXR5O1xyXG5cdFx0cmVzdWx0LmNvdW50ID0gaW5wdXQuQ291bnQ7XHJcblx0XHRyZXN1bHQuaXNBZ2dyZWdhdGUgPSBpbnB1dC5Jc0FnZ3JlZ2F0ZTtcclxuXHJcblx0XHRpZiAoIXJlc3VsdC52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJBY3Rpdml0eVwiKVxyXG5cdHB1YmxpYyBhY3Rpdml0eTogc3RyaW5nO1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJDb3VudFwiKVxyXG5cdHB1YmxpYyBjb3VudDogbnVtYmVyO1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJJc0FnZ3JlZ2F0ZVwiKVxyXG5cdHB1YmxpYyBpc0FnZ3JlZ2F0ZTogYm9vbGVhbjtcclxuXHJcblx0Ly8gcHVibGljIGZvciBVVCBvbmx5XHJcblx0cHVibGljIGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHByb3RlY3RlZCB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHRcdGlmICghc3VwZXIudmFsaWRhdGUoKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzTk9VKHRoaXMuYWN0aXZpdHkpIHx8ICFpc1N0cmluZyh0aGlzLmFjdGl2aXR5KSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFpc051bWJlcih0aGlzLmNvdW50KSB8fCB0aGlzLmNvdW50IDw9IDApIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghaXNCb29sZWFuKHRoaXMuaXNBZ2dyZWdhdGUpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYW1wYWlnblN1cnZleUV2ZW50Q291bnRlZEFjdGl2aXR5U2VxdWVuY2UgZXh0ZW5kcyBDYW1wYWlnblN1cnZleUV2ZW50IHtcclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBhbnkpOiBDYW1wYWlnblN1cnZleUV2ZW50Q291bnRlZEFjdGl2aXR5U2VxdWVuY2Uge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduU3VydmV5RXZlbnRDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZSgpO1xyXG5cdFx0bGV0IHNlcXVlbmNlOiBDYW1wYWlnblN1cnZleUV2ZW50Q291bnRlZEFjdGl2aXR5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoaXNOT1UoaW5wdXQpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIGlucHV0LlNlcXVlbmNlKSB7XHJcblx0XHRcdGlmIChpbnB1dC5TZXF1ZW5jZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0Y29uc3QgcmVhZEFjdGl2aXR5OiBDYW1wYWlnblN1cnZleUV2ZW50Q291bnRlZEFjdGl2aXR5ID0gaW5wdXQuU2VxdWVuY2Vba2V5XTtcclxuXHJcblx0XHRcdFx0aWYgKHJlYWRBY3Rpdml0eSkge1xyXG5cdFx0XHRcdFx0c2VxdWVuY2UucHVzaChDYW1wYWlnblN1cnZleUV2ZW50Q291bnRlZEFjdGl2aXR5LmRlc2VyaWFsaXplKHJlYWRBY3Rpdml0eSkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChzZXF1ZW5jZS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0c2VxdWVuY2UgPSBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC5zZXF1ZW5jZSA9IHNlcXVlbmNlO1xyXG5cclxuXHRcdGlmICghcmVzdWx0LnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIlNlcXVlbmNlXCIpXHJcblx0cHVibGljIHNlcXVlbmNlOiBDYW1wYWlnblN1cnZleUV2ZW50Q291bnRlZEFjdGl2aXR5W107XHJcblxyXG5cdC8vIHB1YmxpYyBmb3IgVVQgb25seVxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwcm90ZWN0ZWQgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIXN1cGVyLnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpc05PVSh0aGlzLnNlcXVlbmNlKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdGhpcy5zZXF1ZW5jZSkge1xyXG5cdFx0XHRpZiAodGhpcy5zZXF1ZW5jZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF0aGlzLnNlcXVlbmNlW2tleV0pIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbi8vIGVuZHJlZ2lvblxyXG5cclxuLy8gcmVnaW9uIFN1cnZleSBDb250ZW50IERlZmluaXRpb25zXHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtcGFpZ25TdXJ2ZXlDb250ZW50IHtcclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBhbnksIG9wdGlvbmFsQ29tcG9uZW50cz86IGJvb2xlYW4pOiBDYW1wYWlnblN1cnZleUNvbnRlbnQge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduU3VydmV5Q29udGVudCgpO1xyXG5cclxuXHRcdGlmIChpc05PVShpbnB1dCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnByb21wdCA9IENhbXBhaWduU3VydmV5Q29udGVudFByb21wdC5kZXNlcmlhbGl6ZShpbnB1dC5Qcm9tcHQpO1xyXG5cdFx0cmVzdWx0LnJhdGluZyA9IENhbXBhaWduU3VydmV5Q29udGVudFJhdGluZy5kZXNlcmlhbGl6ZShpbnB1dC5SYXRpbmcpO1xyXG5cdFx0cmVzdWx0LmNvbW1lbnQgPSBDYW1wYWlnblN1cnZleUNvbnRlbnRDb21tZW50LmRlc2VyaWFsaXplKGlucHV0LlF1ZXN0aW9uKTtcclxuXHRcdHJlc3VsdC5tdWx0aXBsZUNob2ljZSA9IENhbXBhaWduU3VydmV5Q29udGVudE11bHRpcGxlQ2hvaWNlLmRlc2VyaWFsaXplKGlucHV0Lk11bHRpcGxlQ2hvaWNlKTtcclxuXHRcdHJlc3VsdC5pbnRlcmNlcHQgPSBDYW1wYWlnblN1cnZleUNvbnRlbnRJbnRlcmNlcHQuZGVzZXJpYWxpemUoaW5wdXQuSW50ZXJjZXB0KTtcclxuXHRcdHJlc3VsdC5jdlN1cnZleSA9IENhbXBhaWduU3VydmV5Q29udGVudENWU3VydmV5LmRlc2VyaWFsaXplKGlucHV0LkNWU3VydmV5UGFyYW1zKTtcclxuXHJcblx0XHRpZiAoIXJlc3VsdC52YWxpZGF0ZShvcHRpb25hbENvbXBvbmVudHMpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJDVlN1cnZleVwiKVxyXG5cdHB1YmxpYyBjdlN1cnZleTogQ2FtcGFpZ25TdXJ2ZXlDb250ZW50Q1ZTdXJ2ZXk7XHJcblxyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIlByb21wdFwiKVxyXG5cdHB1YmxpYyBwcm9tcHQ6IENhbXBhaWduU3VydmV5Q29udGVudFByb21wdDtcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiUmF0aW5nXCIpXHJcblx0cHVibGljIHJhdGluZzogQ2FtcGFpZ25TdXJ2ZXlDb250ZW50UmF0aW5nO1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJRdWVzdGlvblwiKVxyXG5cdHB1YmxpYyBjb21tZW50OiBDYW1wYWlnblN1cnZleUNvbnRlbnRDb21tZW50O1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJNdWx0aXBsZUNob2ljZVwiKVxyXG5cdHB1YmxpYyBtdWx0aXBsZUNob2ljZTogQ2FtcGFpZ25TdXJ2ZXlDb250ZW50TXVsdGlwbGVDaG9pY2U7XHJcblxyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIkludGVyY2VwdFwiKVxyXG5cdHB1YmxpYyBpbnRlcmNlcHQ6IENhbXBhaWduU3VydmV5Q29udGVudEludGVyY2VwdDtcclxuXHJcblx0cHVibGljIHZhbGlkYXRlKG9wdGlvbmFsQ29tcG9uZW50cz86IGJvb2xlYW4pOiBib29sZWFuIHtcclxuXHRcdGlmICghaXNOT1UodGhpcy5pbnRlcmNlcHQpKSB7XHJcblx0XHRcdC8vIEFuIGludGVyY2VwdCBzdXJ2ZXkgb25seSByZXF1aXJlcyBpbnRlcmNlcHQuXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpc05PVSh0aGlzLnByb21wdCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChvcHRpb25hbENvbXBvbmVudHMpIHtcclxuXHRcdFx0cmV0dXJuICFpc05PVSh0aGlzLnJhdGluZykgfHxcclxuXHRcdFx0XHQhaXNOT1UodGhpcy5tdWx0aXBsZUNob2ljZSkgfHxcclxuXHRcdFx0XHQhaXNOT1UodGhpcy5jb21tZW50KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gIWlzTk9VKHRoaXMucmF0aW5nKSAmJiAhaXNOT1UodGhpcy5jb21tZW50KTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYW1wYWlnblN1cnZleUNvbnRlbnRNdWx0aXBsZUNob2ljZSB7XHJcblx0cHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogQ2FtcGFpZ25TdXJ2ZXlDb250ZW50TXVsdGlwbGVDaG9pY2Uge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduU3VydmV5Q29udGVudE11bHRpcGxlQ2hvaWNlKCk7XHJcblxyXG5cdFx0aWYgKGlzTk9VKGlucHV0KSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQucXVlc3Rpb24gPSBpbnB1dC5RdWVzdGlvbjtcclxuXHRcdHJlc3VsdC5hdmFpbGFibGVPcHRpb25zID0gaW5wdXQuQXZhaWxhYmxlT3B0aW9ucztcclxuXHRcdHJlc3VsdC5taW5OdW1iZXJPZlNlbGVjdGVkT3B0aW9ucyA9IGlucHV0Lk1pbk51bWJlck9mU2VsZWN0ZWRPcHRpb25zO1xyXG5cdFx0cmVzdWx0Lm1heE51bWJlck9mU2VsZWN0ZWRPcHRpb25zID0gaW5wdXQuTWF4TnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnM7XHJcblxyXG5cdFx0aWYgKCFyZXN1bHQudmFsaWRhdGUoKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiUXVlc3Rpb25cIilcclxuXHRwdWJsaWMgcXVlc3Rpb246IHN0cmluZztcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiQXZhaWxhYmxlT3B0aW9uc1wiKVxyXG5cdHB1YmxpYyBhdmFpbGFibGVPcHRpb25zOiBzdHJpbmdbXTtcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiTWluTnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnNcIilcclxuXHRwdWJsaWMgbWluTnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnM6IG51bWJlcjtcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiTWF4TnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnNcIilcclxuXHRwdWJsaWMgbWF4TnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnM6IG51bWJlcjtcclxuXHJcblx0cHJpdmF0ZSB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHRcdGlmIChpc05PVSh0aGlzLnF1ZXN0aW9uKSB8fCAhaXNTdHJpbmcodGhpcy5xdWVzdGlvbikgfHxcclxuXHRcdFx0aXNOT1UodGhpcy5hdmFpbGFibGVPcHRpb25zKSB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLmF2YWlsYWJsZU9wdGlvbnMpIHx8IHRoaXMuYXZhaWxhYmxlT3B0aW9ucy5sZW5ndGggPCAyIHx8XHJcblx0XHRcdGlzTk9VKHRoaXMubWluTnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnMpIHx8ICFpc051bWJlcih0aGlzLm1pbk51bWJlck9mU2VsZWN0ZWRPcHRpb25zKSB8fFxyXG5cdFx0XHRpc05PVSh0aGlzLm1heE51bWJlck9mU2VsZWN0ZWRPcHRpb25zKSB8fCAhaXNOdW1iZXIodGhpcy5tYXhOdW1iZXJPZlNlbGVjdGVkT3B0aW9ucykpIHtcclxuXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBleHBlY3QgYWxsIGF2YWlsYWJsZU9wdGlvbnMgdmFsdWVzIHRvIGJlIHN0cmluZ1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdGhpcy5hdmFpbGFibGVPcHRpb25zKSB7XHJcblx0XHRcdGlmICh0aGlzLmF2YWlsYWJsZU9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdGlmICghaXNTdHJpbmcodGhpcy5hdmFpbGFibGVPcHRpb25zW2tleV0pKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYW1wYWlnblN1cnZleUNvbnRlbnRDVlN1cnZleSB7XHJcblx0cHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogQ2FtcGFpZ25TdXJ2ZXlDb250ZW50Q1ZTdXJ2ZXkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduU3VydmV5Q29udGVudENWU3VydmV5KCk7XHJcblxyXG5cdFx0aWYgKGlzTk9VKGlucHV0KSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQuY3VzdG9tZXJWb2ljZUZvcm1JZCA9IGlucHV0LkN1c3RvbWVyVm9pY2VGb3JtSWQ7XHJcblxyXG5cdFx0aWYgKCFyZXN1bHQudmFsaWRhdGUoKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiRm9ybUlkXCIpXHJcblx0cHVibGljIGN1c3RvbWVyVm9pY2VGb3JtSWQ6IHN0cmluZztcclxuXHJcblx0cHJpdmF0ZSB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHJcblx0XHRyZXR1cm4gKCFpc05PVSh0aGlzLmN1c3RvbWVyVm9pY2VGb3JtSWQpICYmIGlzU3RyaW5nKHRoaXMuY3VzdG9tZXJWb2ljZUZvcm1JZCkpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENhbXBhaWduU3VydmV5Q29udGVudFByb21wdCB7XHJcblx0cHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogQ2FtcGFpZ25TdXJ2ZXlDb250ZW50UHJvbXB0IHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBDYW1wYWlnblN1cnZleUNvbnRlbnRQcm9tcHQoKTtcclxuXHJcblx0XHRpZiAoaXNOT1UoaW5wdXQpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC50aXRsZSA9IGlucHV0LlRpdGxlO1xyXG5cdFx0cmVzdWx0LnF1ZXN0aW9uID0gaW5wdXQuUXVlc3Rpb247XHJcblx0XHRyZXN1bHQueWVzTGFiZWwgPSBpbnB1dC5ZZXNMYWJlbDtcclxuXHRcdHJlc3VsdC5ub0xhYmVsID0gaW5wdXQuTm9MYWJlbDtcclxuXHJcblx0XHRpZiAoIXJlc3VsdC52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJUaXRsZVwiKVxyXG5cdHB1YmxpYyB0aXRsZTogc3RyaW5nO1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJRdWVzdGlvblwiKVxyXG5cdHB1YmxpYyBxdWVzdGlvbjogc3RyaW5nO1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJZZXNMYWJlbFwiKVxyXG5cdHB1YmxpYyB5ZXNMYWJlbDogc3RyaW5nO1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJOb0xhYmVsXCIpXHJcblx0cHVibGljIG5vTGFiZWw6IHN0cmluZztcclxuXHJcblx0cHJpdmF0ZSB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHRcdGlmIChpc05PVSh0aGlzLnRpdGxlKSB8fCAhaXNTdHJpbmcodGhpcy50aXRsZSkgfHxcclxuXHRcdFx0aXNOT1UodGhpcy5xdWVzdGlvbikgfHwgIWlzU3RyaW5nKHRoaXMucXVlc3Rpb24pIHx8XHJcblx0XHRcdGlzTk9VKHRoaXMueWVzTGFiZWwpIHx8ICFpc1N0cmluZyh0aGlzLnllc0xhYmVsKSB8fFxyXG5cdFx0XHRpc05PVSh0aGlzLm5vTGFiZWwpIHx8ICFpc1N0cmluZyh0aGlzLm5vTGFiZWwpKSB7XHJcblxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtcGFpZ25TdXJ2ZXlDb250ZW50SW50ZXJjZXB0IHtcclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBhbnkpOiBDYW1wYWlnblN1cnZleUNvbnRlbnRJbnRlcmNlcHQge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduU3VydmV5Q29udGVudEludGVyY2VwdCgpO1xyXG5cclxuXHRcdGlmIChpc05PVShpbnB1dCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnRpdGxlID0gaW5wdXQuVGl0bGU7XHJcblx0XHRyZXN1bHQucXVlc3Rpb24gPSBpbnB1dC5RdWVzdGlvbjtcclxuXHRcdHJlc3VsdC51cmwgPSBpbnB1dC5Vcmw7XHJcblxyXG5cdFx0aWYgKCFyZXN1bHQudmFsaWRhdGUoKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiVGl0bGVcIilcclxuXHRwdWJsaWMgdGl0bGU6IHN0cmluZztcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiUXVlc3Rpb25cIilcclxuXHRwdWJsaWMgcXVlc3Rpb246IHN0cmluZztcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiVXJsXCIpXHJcblx0cHVibGljIHVybDogc3RyaW5nO1xyXG5cclxuXHRwcml2YXRlIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKGlzTk9VKHRoaXMudGl0bGUpIHx8ICFpc1N0cmluZyh0aGlzLnRpdGxlKSB8fFxyXG5cdFx0XHRpc05PVSh0aGlzLnF1ZXN0aW9uKSB8fCAhaXNTdHJpbmcodGhpcy5xdWVzdGlvbikgfHxcclxuXHRcdFx0aXNOT1UodGhpcy51cmwpIHx8ICFpc1N0cmluZyh0aGlzLnVybCkpIHtcclxuXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYW1wYWlnblN1cnZleUNvbnRlbnRSYXRpbmcge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduU3VydmV5Q29udGVudFJhdGluZyB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQ2FtcGFpZ25TdXJ2ZXlDb250ZW50UmF0aW5nKCk7XHJcblxyXG5cdFx0aWYgKGlzTk9VKGlucHV0KSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQuaXNaZXJvQmFzZWQgPSBpbnB1dC5Jc1plcm9CYXNlZDtcclxuXHRcdHJlc3VsdC5xdWVzdGlvbiA9IGlucHV0LlF1ZXN0aW9uO1xyXG5cdFx0cmVzdWx0LnJhdGluZ1ZhbHVlc0FzY2VuZGluZyA9IGlucHV0LlJhdGluZ1ZhbHVlc0FzY2VuZGluZztcclxuXHJcblx0XHRpZiAoIXJlc3VsdC52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJJc1plcm9CYXNlZFwiKVxyXG5cdHB1YmxpYyBpc1plcm9CYXNlZDogYm9vbGVhbjtcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiUXVlc3Rpb25cIilcclxuXHRwdWJsaWMgcXVlc3Rpb246IHN0cmluZztcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiUmF0aW5nVmFsdWVzQXNjZW5kaW5nXCIpXHJcblx0cHVibGljIHJhdGluZ1ZhbHVlc0FzY2VuZGluZzogc3RyaW5nW107XHJcblxyXG5cdHByaXZhdGUgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHQvLyBleHBlY3QgcmF0aW5nVmFsdWVzQXNjZW5kaW5nIHRvIGNvbnRhaW4gYmV0d2VlbiAyIHRvIDExIHZhbHVlc1xyXG5cdFx0aWYgKGlzTk9VKHRoaXMucXVlc3Rpb24pIHx8ICFpc1N0cmluZyh0aGlzLnF1ZXN0aW9uKSB8fFxyXG5cdFx0XHRpc05PVSh0aGlzLnJhdGluZ1ZhbHVlc0FzY2VuZGluZykgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5yYXRpbmdWYWx1ZXNBc2NlbmRpbmcpIHx8XHJcblx0XHRcdHRoaXMucmF0aW5nVmFsdWVzQXNjZW5kaW5nLmxlbmd0aCA8IDIgfHwgdGhpcy5yYXRpbmdWYWx1ZXNBc2NlbmRpbmcubGVuZ3RoID4gMTEpIHtcclxuXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNOT1UodGhpcy5pc1plcm9CYXNlZCkpIHtcclxuXHRcdFx0Ly8gZGVmYXVsdCB0byBmYWxzZSBpZiBub3QgcHJvdmlkZWRcclxuXHRcdFx0dGhpcy5pc1plcm9CYXNlZCA9IGZhbHNlO1xyXG5cdFx0fSBlbHNlIGlmICghaXNCb29sZWFuKHRoaXMuaXNaZXJvQmFzZWQpKSB7XHJcblx0XHRcdC8vIGZhaWwgdmFsaWRhdGlvbiBpZiBub24gYm9vbGVhbiB2YWx1ZSBpcyBwcm92aWRlZFxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gZXhwZWN0IGFsbCByYXRpbmdWYWx1ZXNBc2NlbmRpbmcgdmFsdWVzIHRvIGJlIHN0cmluZ1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdGhpcy5yYXRpbmdWYWx1ZXNBc2NlbmRpbmcpIHtcclxuXHRcdFx0aWYgKHRoaXMucmF0aW5nVmFsdWVzQXNjZW5kaW5nLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRpZiAoIWlzU3RyaW5nKHRoaXMucmF0aW5nVmFsdWVzQXNjZW5kaW5nW2tleV0pKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtcGFpZ25TdXJ2ZXlDb250ZW50Q29tbWVudCB7XHJcblx0cHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogQ2FtcGFpZ25TdXJ2ZXlDb250ZW50Q29tbWVudCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQ2FtcGFpZ25TdXJ2ZXlDb250ZW50Q29tbWVudCgpO1xyXG5cclxuXHRcdGlmIChpc05PVShpbnB1dCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiUXVlc3Rpb25cIilcclxuXHRcdHJlc3VsdC5xdWVzdGlvbiA9IGlucHV0LlF1ZXN0aW9uO1xyXG5cclxuXHRcdGlmICghcmVzdWx0LnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIlF1ZXN0aW9uXCIpXHJcblx0cHVibGljIHF1ZXN0aW9uOiBzdHJpbmc7XHJcblxyXG5cdHByaXZhdGUgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoaXNOT1UodGhpcy5xdWVzdGlvbikgfHwgIWlzU3RyaW5nKHRoaXMucXVlc3Rpb24pKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbi8vIGVuZHJlZ2lvblxyXG5cclxuLy8gcmVnaW9uIFN1cnZleSBNZXRhZGF0YSBEZWZpbml0aW9uc1xyXG5cclxuZXhwb3J0IGNsYXNzIENhbXBhaWduU3VydmV5TWV0YWRhdGEge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduU3VydmV5TWV0YWRhdGEge1xyXG5cdFx0aWYgKGlzTk9VKGlucHV0KSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQ2FtcGFpZ25TdXJ2ZXlNZXRhZGF0YSgpO1xyXG5cdFx0cmVzdWx0LmNvbnRlbnRNZXRhZGF0YSA9IGlucHV0LkNvbnRlbnRNZXRhZGF0YTtcclxuXHJcblx0XHRpZiAoIXJlc3VsdC52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJDb250ZW50TWV0YWRhdGFcIilcclxuXHRwdWJsaWMgY29udGVudE1ldGFkYXRhOiBvYmplY3Q7XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHRcdGlmIChpc05PVSh0aGlzLmNvbnRlbnRNZXRhZGF0YSkgfHwgIVV0aWxzLmlzT2JqZWN0KHRoaXMuY29udGVudE1ldGFkYXRhKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59XHJcblxyXG4vLyBlbmRyZWdpb25cclxuXHJcbi8vIHJlZ2lvbiBTdXJ2ZXkgVGVtcGxhdGUgZGVmaW5pdGlvbnNcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDYW1wYWlnblN1cnZleVRlbXBsYXRlIHtcclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBhbnkpOiBDYW1wYWlnblN1cnZleVRlbXBsYXRlIHtcclxuXHRcdGxldCByZXN1bHQ6IENhbXBhaWduU3VydmV5VGVtcGxhdGU7XHJcblxyXG5cdFx0aWYgKGlzTk9VKGlucHV0KSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRzd2l0Y2ggKGlucHV0LlR5cGUpIHtcclxuXHRcdFx0Y2FzZSBDYW1wYWlnblN1cnZleVRlbXBsYXRlLlR5cGUuTnBzNVBvaW50U3RhdGljOlxyXG5cdFx0XHRcdHJlc3VsdCA9IENhbXBhaWduU3VydmV5VGVtcGxhdGVOcHM1UG9pbnRTdGF0aWMuZGVzZXJpYWxpemUoaW5wdXQpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIENhbXBhaWduU3VydmV5VGVtcGxhdGUuVHlwZS5OcHMxMVBvaW50U3RhdGljOlxyXG5cdFx0XHRcdHJlc3VsdCA9IENhbXBhaWduU3VydmV5VGVtcGxhdGVOcHMxMVBvaW50U3RhdGljLmRlc2VyaWFsaXplKGlucHV0KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSBDYW1wYWlnblN1cnZleVRlbXBsYXRlLlR5cGUuRnBzOlxyXG5cdFx0XHRcdHJlc3VsdCA9IENhbXBhaWduU3VydmV5VGVtcGxhdGVGcHMuZGVzZXJpYWxpemUoaW5wdXQpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIENhbXBhaWduU3VydmV5VGVtcGxhdGUuVHlwZS5ObHFzOlxyXG5cdFx0XHRcdHJlc3VsdCA9IENhbXBhaWduU3VydmV5VGVtcGxhdGVObHFzLmRlc2VyaWFsaXplKGlucHV0KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSBDYW1wYWlnblN1cnZleVRlbXBsYXRlLlR5cGUuTnBzOlxyXG5cdFx0XHRcdHJlc3VsdCA9IENhbXBhaWduU3VydmV5VGVtcGxhdGVOcHMuZGVzZXJpYWxpemUoaW5wdXQpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIENhbXBhaWduU3VydmV5VGVtcGxhdGUuVHlwZS5HZW5lcmljTWVzc2FnaW5nU3VyZmFjZTpcclxuXHRcdFx0XHRyZXN1bHQgPSBDYW1wYWlnblN1cnZleVRlbXBsYXRlR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2UuZGVzZXJpYWxpemUoaW5wdXQpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIENhbXBhaWduU3VydmV5VGVtcGxhdGUuVHlwZS5JbnRlcmNlcHQ6XHJcblx0XHRcdFx0cmVzdWx0ID0gQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZUludGVyY2VwdC5kZXNlcmlhbGl6ZShpbnB1dCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzTk9VKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIkFjdGl2YXRpb25FdmVudFwiKVxyXG5cdHB1YmxpYyBhY3RpdmF0aW9uRXZlbnQ6IENhbXBhaWduU3VydmV5RXZlbnQ7XHJcblxyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIkNvbnRlbnRcIilcclxuXHRwdWJsaWMgY29udGVudDogQ2FtcGFpZ25TdXJ2ZXlDb250ZW50O1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJNZXRhZGF0YVwiKVxyXG5cdHB1YmxpYyBtZXRhZGF0YTogQ2FtcGFpZ25TdXJ2ZXlNZXRhZGF0YTtcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiTWF4TGF1bmNoZXNcIilcclxuXHRwdWJsaWMgbWF4TGF1bmNoZXM6IG51bWJlcjtcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiTWF4TGF1bmNoZXNQZXJTZXNzaW9uXCIpXHJcblx0cHVibGljIG1heExhdW5jaGVzUGVyU2Vzc2lvbjogbnVtYmVyO1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJQcmVmZXJyZWRMYXVuY2hUeXBlXCIpXHJcblx0cHVibGljIHByZWZlcnJlZExhdW5jaFR5cGU6IElTdXJ2ZXlJbmZvLkxhdW5jaFR5cGU7XHJcblxyXG5cdHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuXHRwcm90ZWN0ZWQgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoaXNOT1UodGhpcy5hY3RpdmF0aW9uRXZlbnQpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBtb2R1bGUgQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZSB7XHJcblx0ZXhwb3J0IGNvbnN0IGVudW0gVHlwZSB7XHJcblx0XHROcHM1UG9pbnRTdGF0aWMgPSAwLFxyXG5cdFx0TnBzMTFQb2ludFN0YXRpYyA9IDEsXHJcblx0XHRGcHMgPSAyLFxyXG5cdFx0TmxxcyA9IDMsXHJcblx0XHROcHMgPSA0LFxyXG5cdFx0SW50ZXJjZXB0ID0gNSxcclxuXHRcdC8vIEEgZ2VuZXJpYyBtZXNzYWdpYmcgc3VyZmFjZSB0ZW1wbGF0ZSB0eXBlLCB3aGljaCB3aWxsIG1ha2UgdXNlIG9mXHJcblx0XHQvLyBjb250ZW50IG1ldGFkYXRhIHRvIHJlbmRlciB1aS5cclxuXHRcdC8vIEFzIG9mIDR0aCBGZWIgMjAxOSB0aGVyZSBhcmUgMjAgdGVtcGxhdGUgdHlwZXMgZGVmaW5lZCBpbiBNc28sXHJcblx0XHQvLyBoZW5jZSBnaXZpbmcgMjIgYXMgdmFsdWUgZm9yIHRoaXMgdHlwZS5cclxuXHRcdEdlbmVyaWNNZXNzYWdpbmdTdXJmYWNlID0gMjIsXHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZUZwcyBleHRlbmRzIENhbXBhaWduU3VydmV5VGVtcGxhdGUge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduU3VydmV5VGVtcGxhdGVGcHMge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduU3VydmV5VGVtcGxhdGVGcHMoKTtcclxuXHJcblx0XHRpZiAoaXNOT1UoaW5wdXQpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC5hY3RpdmF0aW9uRXZlbnQgPSBDYW1wYWlnblN1cnZleUV2ZW50LmRlc2VyaWFsaXplKGlucHV0LkFjdGl2YXRpb25FdmVudCk7XHJcblx0XHRyZXN1bHQuY29udGVudCA9IENhbXBhaWduU3VydmV5Q29udGVudC5kZXNlcmlhbGl6ZShpbnB1dC5Db250ZW50LCB0cnVlIC8qIG9wdGlvbmFsQ29tcG9uZW50cyAqLyk7XHJcblxyXG5cdFx0aWYgKCFyZXN1bHQudmFsaWRhdGUoKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Ly8gcHVibGljIGZvciBVVCBvbmx5XHJcblx0cHVibGljIGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9XHJcblxyXG5cdHByb3RlY3RlZCB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHRcdGlmICghc3VwZXIudmFsaWRhdGUoKSB8fCBpc05PVSh0aGlzLmNvbnRlbnQpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYW1wYWlnblN1cnZleVRlbXBsYXRlTmxxcyBleHRlbmRzIENhbXBhaWduU3VydmV5VGVtcGxhdGUge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduU3VydmV5VGVtcGxhdGVObHFzIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBDYW1wYWlnblN1cnZleVRlbXBsYXRlTmxxcygpO1xyXG5cclxuXHRcdGlmIChpc05PVShpbnB1dCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LmFjdGl2YXRpb25FdmVudCA9IENhbXBhaWduU3VydmV5RXZlbnQuZGVzZXJpYWxpemUoaW5wdXQuQWN0aXZhdGlvbkV2ZW50KTtcclxuXHRcdHJlc3VsdC5jb250ZW50ID0gQ2FtcGFpZ25TdXJ2ZXlDb250ZW50LmRlc2VyaWFsaXplKGlucHV0LkNvbnRlbnQpO1xyXG5cclxuXHRcdGlmICghcmVzdWx0LnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIHB1YmxpYyBmb3IgVVQgb25seVxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfVxyXG5cclxuXHRwcm90ZWN0ZWQgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIXN1cGVyLnZhbGlkYXRlKCkgfHwgaXNOT1UodGhpcy5jb250ZW50KSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZU5wcyBleHRlbmRzIENhbXBhaWduU3VydmV5VGVtcGxhdGUge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduU3VydmV5VGVtcGxhdGVOcHMge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduU3VydmV5VGVtcGxhdGVOcHMoKTtcclxuXHJcblx0XHRpZiAoaXNOT1UoaW5wdXQpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC5hY3RpdmF0aW9uRXZlbnQgPSBDYW1wYWlnblN1cnZleUV2ZW50LmRlc2VyaWFsaXplKGlucHV0LkFjdGl2YXRpb25FdmVudCk7XHJcblx0XHRyZXN1bHQuY29udGVudCA9IENhbXBhaWduU3VydmV5Q29udGVudC5kZXNlcmlhbGl6ZShpbnB1dC5Db250ZW50KTtcclxuXHJcblx0XHRpZiAoIXJlc3VsdC52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBwdWJsaWMgZm9yIFVUIG9ubHlcclxuXHRwdWJsaWMgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH1cclxuXHJcblx0cHJvdGVjdGVkIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFzdXBlci52YWxpZGF0ZSgpIHx8IGlzTk9VKHRoaXMuY29udGVudCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENhbXBhaWduU3VydmV5VGVtcGxhdGVOcHM1UG9pbnRTdGF0aWMgZXh0ZW5kcyBDYW1wYWlnblN1cnZleVRlbXBsYXRlIHtcclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBhbnkpOiBDYW1wYWlnblN1cnZleVRlbXBsYXRlTnBzNVBvaW50U3RhdGljIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBDYW1wYWlnblN1cnZleVRlbXBsYXRlTnBzNVBvaW50U3RhdGljKCk7XHJcblxyXG5cdFx0aWYgKGlzTk9VKGlucHV0KSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQuYWN0aXZhdGlvbkV2ZW50ID0gQ2FtcGFpZ25TdXJ2ZXlFdmVudC5kZXNlcmlhbGl6ZShpbnB1dC5BY3RpdmF0aW9uRXZlbnQpO1xyXG5cclxuXHRcdGlmICghcmVzdWx0LnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIHB1YmxpYyBmb3IgVVQgb25seVxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfVxyXG5cclxuXHRwcm90ZWN0ZWQgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIXN1cGVyLnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENhbXBhaWduU3VydmV5VGVtcGxhdGVOcHMxMVBvaW50U3RhdGljIGV4dGVuZHMgQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZSB7XHJcblx0cHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZU5wczExUG9pbnRTdGF0aWMge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduU3VydmV5VGVtcGxhdGVOcHMxMVBvaW50U3RhdGljKCk7XHJcblxyXG5cdFx0aWYgKGlzTk9VKGlucHV0KSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQuYWN0aXZhdGlvbkV2ZW50ID0gQ2FtcGFpZ25TdXJ2ZXlFdmVudC5kZXNlcmlhbGl6ZShpbnB1dC5BY3RpdmF0aW9uRXZlbnQpO1xyXG5cclxuXHRcdGlmICghcmVzdWx0LnZhbGlkYXRlKCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH1cclxuXHJcblx0cHJvdGVjdGVkIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFzdXBlci52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYW1wYWlnblN1cnZleVRlbXBsYXRlR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2UgZXh0ZW5kcyBDYW1wYWlnblN1cnZleVRlbXBsYXRlIHtcclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBhbnkpOiBDYW1wYWlnblN1cnZleVRlbXBsYXRlR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2Uge1xyXG5cdFx0aWYgKGlzTk9VKGlucHV0KSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZUdlbmVyaWNNZXNzYWdpbmdTdXJmYWNlKCk7XHJcblx0XHRyZXN1bHQuYWN0aXZhdGlvbkV2ZW50ID0gQ2FtcGFpZ25TdXJ2ZXlFdmVudC5kZXNlcmlhbGl6ZShpbnB1dC5BY3RpdmF0aW9uRXZlbnQpO1xyXG5cdFx0cmVzdWx0Lm1ldGFkYXRhID0gQ2FtcGFpZ25TdXJ2ZXlNZXRhZGF0YS5kZXNlcmlhbGl6ZShpbnB1dC5NZXRhZGF0YSk7XHJcblx0XHRyZXN1bHQubWF4TGF1bmNoZXMgPSBpbnB1dC5NYXhMYXVuY2hlcztcclxuXHRcdHJlc3VsdC5tYXhMYXVuY2hlc1BlclNlc3Npb24gPSBpbnB1dC5NYXhMYXVuY2hlc1BlclNlc3Npb247XHJcblx0XHRyZXN1bHQucHJlZmVycmVkTGF1bmNoVHlwZSA9IGlucHV0LlByZWZlcnJlZExhdW5jaFR5cGU7XHJcblxyXG5cdFx0aWYgKCFyZXN1bHQudmFsaWRhdGUoKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKCkgeyBzdXBlcigpOyB9XHJcblxyXG5cdHByb3RlY3RlZCB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHRcdGlmICghc3VwZXIudmFsaWRhdGUoKSB8fCBpc05PVSh0aGlzLm1ldGFkYXRhKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCghaXNOT1UodGhpcy5tYXhMYXVuY2hlcykgJiYgKCFpc051bWJlcih0aGlzLm1heExhdW5jaGVzKSB8fCB0aGlzLm1heExhdW5jaGVzIDw9IDApKSB8fFxyXG5cdFx0XHQoIWlzTk9VKHRoaXMubWF4TGF1bmNoZXNQZXJTZXNzaW9uKSAmJiAoIWlzTnVtYmVyKHRoaXMubWF4TGF1bmNoZXNQZXJTZXNzaW9uKSB8fCB0aGlzLm1heExhdW5jaGVzUGVyU2Vzc2lvbiA8PSAwKSkpIHtcclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19Mb2NhbEVycm9yKFwiSW52YWxpZCBNdWx0aSBMYXVuY2ggc2V0dGluZ3NcIiwgdGhpcy5tYXhMYXVuY2hlcywgdGhpcy5tYXhMYXVuY2hlc1BlclNlc3Npb24pO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY2hlY2sgZm9yIHZhbGlkIHZhbHVlc1xyXG5cdFx0aWYgKGlzTnVtYmVyKHRoaXMubWF4TGF1bmNoZXMpICYmXHJcblx0XHRcdGlzTnVtYmVyKHRoaXMubWF4TGF1bmNoZXNQZXJTZXNzaW9uKSAmJlxyXG5cdFx0XHR0aGlzLm1heExhdW5jaGVzUGVyU2Vzc2lvbiA+IHRoaXMubWF4TGF1bmNoZXMpIHtcclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19Mb2NhbEVycm9yKFwiSW52YWxpZCBNdWx0aSBsYXVuY2ggc2V0dGluZ3NcIiwgdGhpcy5tYXhMYXVuY2hlcywgdGhpcy5tYXhMYXVuY2hlc1BlclNlc3Npb24pO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFpc05PVSh0aGlzLnByZWZlcnJlZExhdW5jaFR5cGUpICYmICFpc1N0cmluZyh0aGlzLnByZWZlcnJlZExhdW5jaFR5cGUpKSB7XHJcblx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfTG9jYWxFcnJvcihcIkludmFsaWQgbGF1bmNoZXIgdHlwZVwiLCB0aGlzLnByZWZlcnJlZExhdW5jaFR5cGUpO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZUludGVyY2VwdCBleHRlbmRzIENhbXBhaWduU3VydmV5VGVtcGxhdGUge1xyXG5cdHB1YmxpYyBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IGFueSk6IENhbXBhaWduU3VydmV5VGVtcGxhdGVJbnRlcmNlcHQge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IENhbXBhaWduU3VydmV5VGVtcGxhdGVJbnRlcmNlcHQoKTtcclxuXHJcblx0XHRpZiAoaXNOT1UoaW5wdXQpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC5hY3RpdmF0aW9uRXZlbnQgPSBDYW1wYWlnblN1cnZleUV2ZW50LmRlc2VyaWFsaXplKGlucHV0LkFjdGl2YXRpb25FdmVudCk7XHJcblx0XHRyZXN1bHQuY29udGVudCA9IENhbXBhaWduU3VydmV5Q29udGVudC5kZXNlcmlhbGl6ZShpbnB1dC5Db250ZW50KTtcclxuXHJcblx0XHRpZiAoIXJlc3VsdC52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBwdWJsaWMgZm9yIFVUIG9ubHlcclxuXHRwdWJsaWMgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH1cclxuXHJcblx0cHJvdGVjdGVkIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFzdXBlci52YWxpZGF0ZSgpIHx8IGlzTk9VKHRoaXMuY29udGVudCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5cclxuLy8gZW5kcmVnaW9uXHJcblxyXG4vLyByZWdpb24gQ2FtcGFpZ24gRGVmaW5pdGlvblxyXG5cclxuZXhwb3J0IGNsYXNzIENhbXBhaWduRGVmaW5pdGlvbiB7XHJcblx0LyoqXHJcblx0ICogTWV0aG9kIHRvIGRlc2VyaWFsaXplIGEgSlNPTiBvYmplY3QgdG8gY2xhc3Mgb2JqZWN0XHJcblx0ICogQHBhcmFtIGlucHV0OiBKU09OIG9iamVjdFxyXG5cdCAqIFJldHVybnMgcmVzdWx0IG9mIHZhbGlkYXRpb24gY2hlY2tcclxuXHQgKi9cclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKGlucHV0OiBhbnkpOiBDYW1wYWlnbkRlZmluaXRpb24ge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDYW1wYWlnbkRlZmluaXRpb24gPSBuZXcgQ2FtcGFpZ25EZWZpbml0aW9uKCk7XHJcblxyXG5cdFx0aWYgKGlzTk9VKGlucHV0KSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQuY2FtcGFpZ25JZCA9IGlucHV0LkNhbXBhaWduSWQ7XHJcblx0XHRyZXN1bHQuZ292ZXJuZWRDaGFubmVsVHlwZSA9IGlucHV0LkdvdmVybmVkQ2hhbm5lbFR5cGU7XHJcblx0XHRyZXN1bHQuc3RhcnRUaW1lID0gaW5wdXQuU3RhcnRUaW1lVXRjO1xyXG5cdFx0cmVzdWx0LmVuZFRpbWUgPSBpbnB1dC5FbmRUaW1lVXRjO1xyXG5cdFx0cmVzdWx0LmxhdW5jaGVyVHlwZSA9IGlucHV0LkxhdW5jaGVyVHlwZTtcclxuXHRcdHJlc3VsdC5wcmltYXJ5UHJpb3JpdHkgPSBpbnB1dC5QcmltYXJ5UHJpb3JpdHk7XHJcblx0XHRyZXN1bHQudGFncyA9IGlucHV0LlRhZ3M7XHJcblxyXG5cdFx0Y29uc3QgYWRkaXRpb25hbERhdGFSZXF1ZXN0ZWQ6IENhbXBhaWduQWRkaXRpb25hbERhdGFSZXF1ZXN0ZWQgPSBDYW1wYWlnbkFkZGl0aW9uYWxEYXRhUmVxdWVzdGVkLmRlc2VyaWFsaXplKFxyXG5cdFx0XHRpbnB1dC5BZGRpdGlvbmFsRGF0YVJlcXVlc3RlZCk7XHJcblx0XHRyZXN1bHQuYWRkaXRpb25hbERhdGFSZXF1ZXN0ZWQgPSBhZGRpdGlvbmFsRGF0YVJlcXVlc3RlZCA/IGFkZGl0aW9uYWxEYXRhUmVxdWVzdGVkLmFkZGl0aW9uYWxEYXRhIDogW107XHJcblxyXG5cdFx0aWYgKGlucHV0LlN1cnZleVRlbXBsYXRlKSB7XHJcblx0XHRcdHJlc3VsdC5zdXJ2ZXlUZW1wbGF0ZSA9IENhbXBhaWduU3VydmV5VGVtcGxhdGUuZGVzZXJpYWxpemUoaW5wdXQuU3VydmV5VGVtcGxhdGUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbnB1dC5Ob21pbmF0aW9uU2NoZW1lKSB7XHJcblx0XHRcdHJlc3VsdC5ub21pbmF0aW9uU2NoZW1lID0gQ2FtcGFpZ25Ob21pbmF0aW9uU2NoZW1lLmRlc2VyaWFsaXplKGlucHV0Lk5vbWluYXRpb25TY2hlbWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbnB1dC5TY29wZSkge1xyXG5cdFx0XHRyZXN1bHQuc2NvcGUgPSBDYW1wYWlnblNjb3BlLmRlc2VyaWFsaXplKGlucHV0LlNjb3BlKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWlzTk9VKGlucHV0LkJ1c2luZXNzTGV2ZWwpKSB7XHJcblx0XHRcdHJlc3VsdC5idXNpbmVzc0xldmVsID0gaW5wdXQuQnVzaW5lc3NMZXZlbDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXJlc3VsdC52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfTG9jYWxFcnJvcihcIkludmFsaWQgZGVmaW5pdGlvblwiLCBpbnB1dCk7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJDYW1wYWlnbklkXCIpXHJcblx0cHVibGljIGNhbXBhaWduSWQ6IHN0cmluZztcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiR292ZXJuZWRDaGFubmVsVHlwZVwiKVxyXG5cdHB1YmxpYyBnb3Zlcm5lZENoYW5uZWxUeXBlOiBHb3Zlcm5lZENoYW5uZWxUeXBlO1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJTY29wZVwiKVxyXG5cdHB1YmxpYyBzY29wZTogQ2FtcGFpZ25TY29wZTtcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiTm9taW5hdGlvblNjaGVtZVwiKVxyXG5cdHB1YmxpYyBub21pbmF0aW9uU2NoZW1lOiBDYW1wYWlnbk5vbWluYXRpb25TY2hlbWU7XHJcblxyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIlN1cnZleVRlbXBsYXRlXCIpXHJcblx0cHVibGljIHN1cnZleVRlbXBsYXRlOiBDYW1wYWlnblN1cnZleVRlbXBsYXRlO1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJTdGFydFRpbWVVdGNcIilcclxuXHRwdWJsaWMgc3RhcnRUaW1lOiBEYXRlO1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJFbmRUaW1lVXRjXCIpXHJcblx0cHVibGljIGVuZFRpbWU6IERhdGU7XHJcblxyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIkFkZGl0aW9uYWxEYXRhUmVxdWVzdGVkXCIpXHJcblx0cHVibGljIGFkZGl0aW9uYWxEYXRhUmVxdWVzdGVkOiBJU3VydmV5SW5mby5BZGRpdGlvbmFsRGF0YVR5cGVbXTtcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiTGF1bmNoZXJUeXBlXCIpXHJcblx0cHVibGljIGxhdW5jaGVyVHlwZTogc3RyaW5nO1xyXG5cclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJQcmlvcml0eVwiKVxyXG5cdHB1YmxpYyBwcmltYXJ5UHJpb3JpdHk6IG51bWJlcjtcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiVGFnc1wiKVxyXG5cdHB1YmxpYyB0YWdzOiBzdHJpbmdbXTtcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiQnVzaW5lc3NMZXZlbFwiKVxyXG5cdHB1YmxpYyBidXNpbmVzc0xldmVsOiBCdXNpbmVzc0xldmVsO1xyXG5cclxuXHRwdWJsaWMgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoaXNOT1UodGhpcy5zY29wZSkpIHtcclxuXHRcdFx0dGhpcy5zY29wZSA9IG5ldyBDYW1wYWlnblNjb3BlQW55KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzTk9VKHRoaXMuY2FtcGFpZ25JZCkgfHwgIWlzU3RyaW5nKHRoaXMuY2FtcGFpZ25JZCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghaXNOdW1iZXIodGhpcy5nb3Zlcm5lZENoYW5uZWxUeXBlKSB8fCAhVXRpbHMuaXNFbnVtVmFsdWUodGhpcy5nb3Zlcm5lZENoYW5uZWxUeXBlLCBHb3Zlcm5lZENoYW5uZWxUeXBlKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzTk9VKHRoaXMubm9taW5hdGlvblNjaGVtZSkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpc05PVSh0aGlzLnN1cnZleVRlbXBsYXRlKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFpc05PVSh0aGlzLmxhdW5jaGVyVHlwZSkgJiYgIWlzU3RyaW5nKHRoaXMubGF1bmNoZXJUeXBlKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMubGF1bmNoZXJUeXBlID09PSBcImN1c3RvbWVydm9pY2VcIiAmJiBpc05PVSh0aGlzLnN1cnZleVRlbXBsYXRlLmNvbnRlbnQ/LmN2U3VydmV5Py5jdXN0b21lclZvaWNlRm9ybUlkKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFpc05PVSh0aGlzLnByaW1hcnlQcmlvcml0eSkgJiYgIWlzTnVtYmVyKHRoaXMucHJpbWFyeVByaW9yaXR5KSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMudGFncyAmJiAhQXJyYXkuaXNBcnJheSh0aGlzLnRhZ3MpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDYW1wYWlnbnMgd2l0aCBubyBzdGFydCBkYXRlIGFyZSBlZmZlY3RpdmVseSBkaXNhYmxlZCwgaW4gZmFjdCwgdGhpcyBpcyB0aGUgc3VwcG9ydGVkIHdheSB0byBzdGFnZSBhIGRlZmluaXRpb24gYnV0IGhhdmUgaXQgYmUgdHVybmVkIG9mZlxyXG5cdFx0aWYgKGlzTk9VKHRoaXMuc3RhcnRUaW1lKSkge1xyXG5cdFx0XHR0aGlzLnN0YXJ0VGltZSA9IGdldERpc3RhbnRGdXR1cmUoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNVdGNEYXRldGltZVN0cmluZyh0aGlzLnN0YXJ0VGltZSkpIHtcclxuXHRcdFx0dGhpcy5zdGFydFRpbWUgPSBzdHJpbmdUb0RhdGUodGhpcy5zdGFydFRpbWUpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENhbXBhaWducyB3aXRoIG5vIGVuZCBkYXRlIGFyZSBlZmZlY3RpdmVseSBvbiBpbmRlZmluaXRlbHlcclxuXHRcdGlmIChpc05PVSh0aGlzLmVuZFRpbWUpIHx8XHJcblx0XHRcdCh0eXBlb2YodGhpcy5lbmRUaW1lKSA9PT0gXCJzdHJpbmdcIiAmJiB0aGlzLmVuZFRpbWUgPT09IFwiXCIpKSB7XHJcblx0XHRcdHRoaXMuZW5kVGltZSA9IGdldERpc3RhbnRGdXR1cmUoKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNVdGNEYXRldGltZVN0cmluZyh0aGlzLmVuZFRpbWUpKSB7XHJcblx0XHRcdHRoaXMuZW5kVGltZSA9IHN0cmluZ1RvRGF0ZSh0aGlzLmVuZFRpbWUpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdpdmVuIGFuIGFycmF5IG9mIGNhbXBhaWduIGRlZmluaXRpb25zLCByZXR1cm5zIHRoZSB2YWxpZCBvbmVzIGFuZCBlcnJvcnMgaWYgYW55IGFyZSBpbnZhbGlkLlxyXG4gKiBAcGFyYW0gaW5wdXQ6IEpTT04gb2JqZWN0XHJcbiAqIFJldHVybnMgdGhlIHZhbGlkIGRlZmluaXRpb25zIGFuZCB0aGUgZXJyb3IgYXMgc3RyaW5nIGlmIGFueS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBGaWx0ZXJWYWxpZENhbXBhaWduRGVmaW5pdGlvbnMoY2FtcGFpZ25EZWZpbml0aW9uczogYW55KTogeyByZXN1bHQ6IENhbXBhaWduRGVmaW5pdGlvbltdLCBlcnJvcjogc3RyaW5nIH0ge1xyXG5cdGNvbnN0IHJlc3VsdDogQ2FtcGFpZ25EZWZpbml0aW9uW10gPSBbXTtcclxuXHJcblx0aWYgKGlzTk9VKGNhbXBhaWduRGVmaW5pdGlvbnMpKSB7XHJcblx0XHRyZXR1cm4geyByZXN1bHQsIGVycm9yOiBcIkVtcHR5XCIgfTtcclxuXHR9XHJcblxyXG5cdGlmICghQXJyYXkuaXNBcnJheShjYW1wYWlnbkRlZmluaXRpb25zKSkge1xyXG5cdFx0cmV0dXJuIHsgcmVzdWx0LCBlcnJvcjogXCJOb3QgYW4gYXJyYXlcIiB9O1xyXG5cdH1cclxuXHJcblx0Y29uc3QgYmFkSW5kZXhlczogbnVtYmVyW10gPSBbXTtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNhbXBhaWduRGVmaW5pdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IGRlZmluaXRpb246IGFueSA9IGNhbXBhaWduRGVmaW5pdGlvbnNbaV07XHJcblxyXG5cdFx0aWYgKGRlZmluaXRpb24pIHtcclxuXHRcdFx0Y29uc3QgbmV3RGVmaW5pdGlvbjogQ2FtcGFpZ25EZWZpbml0aW9uID0gQ2FtcGFpZ25EZWZpbml0aW9uLmRlc2VyaWFsaXplKGRlZmluaXRpb24pO1xyXG5cclxuXHRcdFx0bmV3RGVmaW5pdGlvblxyXG5cdFx0XHRcdD8gcmVzdWx0LnB1c2gobmV3RGVmaW5pdGlvbilcclxuXHRcdFx0XHQ6IGJhZEluZGV4ZXMucHVzaChpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGJhZEluZGV4ZXMucHVzaChpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbnN0IGVycm9yOiBzdHJpbmcgPSBiYWRJbmRleGVzLmxlbmd0aCA+IDAgPyBcIkludmFsaWQgY2FtcGFpZ24gZGVmaW5pdGlvbnMgYXQgaW5kZXhlczogXCIgKyBiYWRJbmRleGVzLnRvU3RyaW5nKCkgOiB1bmRlZmluZWQ7XHJcblx0cmV0dXJuIHsgcmVzdWx0LCBlcnJvciB9O1xyXG59XHJcblxyXG4vLyBlbmRyZWdpb25cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyIHtcclxuXHRsb2FkKCk6IENhbXBhaWduRGVmaW5pdGlvbltdO1xyXG5cdGxvYWRBc3luYygpOiBQcm9taXNlPENhbXBhaWduRGVmaW5pdGlvbltdPjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEZpbGVTeXN0ZW1DYW1wYWlnbkRlZmluaXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIElDYW1wYWlnbkRlZmluaXRpb25Qcm92aWRlciB7XHJcblx0cHJpdmF0ZSBzdG9yYWdlOiBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3Ioc3RvcmFnZTogSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlcikge1xyXG5cdFx0aWYgKGlzTk9VKHN0b3JhZ2UpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInN0b3JhZ2UgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnN0b3JhZ2UgPSBzdG9yYWdlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGxvYWQoKTogQ2FtcGFpZ25EZWZpbml0aW9uW10ge1xyXG5cdFx0Y29uc3QgZGVmaW5pdGlvblN0cmluZzogc3RyaW5nID0gdGhpcy5zdG9yYWdlLnJlYWQoSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlci5GaWxlVHlwZS5DYW1wYWlnbkRlZmluaXRpb25zKTtcclxuXHRcdGlmIChpc05PVShkZWZpbml0aW9uU3RyaW5nKSkge1xyXG5cdFx0XHRyZXR1cm4gW107XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IHJlYWREZWZpbml0aW9uczogYW55O1xyXG5cclxuXHRcdHRyeSB7XHJcblx0XHRcdHJlYWREZWZpbml0aW9ucyA9IEpTT04ucGFyc2UoZGVmaW5pdGlvblN0cmluZyk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfQ2FtcGFpZ25Mb2FkX0ZhaWxlZChlLnRvU3RyaW5nKCkpO1xyXG5cdFx0XHRyZXR1cm4gW107XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gVGhpcyBpZ25vcmVzIGVycm9ycyBpbiB2YWxpZGF0aW9uIGZvciBub3cuXHJcblx0XHRyZXR1cm4gRmlsdGVyVmFsaWRDYW1wYWlnbkRlZmluaXRpb25zKHJlYWREZWZpbml0aW9ucykucmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGxvYWRBc3luYygpOiBQcm9taXNlPENhbXBhaWduRGVmaW5pdGlvbltdPiB7XHJcblx0XHRjb25zdCBkZWZpbml0aW9ucyA9IHRoaXMubG9hZCgpO1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKFxyXG5cdFx0XHRmdW5jdGlvbiBvbkZ1bGZpbGxlZChyZXNvbHZlLCByZWplY3QpIHtcclxuXHRcdFx0XHRyZXNvbHZlKGRlZmluaXRpb25zKTtcclxuXHRcdFx0fSxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Campaign/CampaignDefinitionProvider.js\n')},"../FloodgateCore/dist/src/Campaign/CampaignManager.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.CampaignManager = void 0;\nvar FloodgateEngine_1 = __webpack_require__(/*! ../FloodgateEngine */ "../FloodgateCore/dist/src/FloodgateEngine.js");\nvar GovernedChannel_1 = __webpack_require__(/*! ../GovernedChannel */ "../FloodgateCore/dist/src/GovernedChannel.js");\nvar Utils = __webpack_require__(/*! ../Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar CampaignDefinitionProvider_1 = __webpack_require__(/*! ./CampaignDefinitionProvider */ "../FloodgateCore/dist/src/Campaign/CampaignDefinitionProvider.js");\nvar CampaignStateProvider_1 = __webpack_require__(/*! ./CampaignStateProvider */ "../FloodgateCore/dist/src/Campaign/CampaignStateProvider.js");\nvar CampaignSurveyFactory_1 = __webpack_require__(/*! ./CampaignSurveyFactory */ "../FloodgateCore/dist/src/Campaign/CampaignSurveyFactory.js");\nvar Constants_1 = __webpack_require__(/*! ../Constants */ "../FloodgateCore/dist/src/Constants.js");\nvar ISurveyInfo_1 = __webpack_require__(/*! ../ISurveyInfo */ "../FloodgateCore/dist/src/ISurveyInfo.js");\nvar getDistantFuture = Utils.getDistantFuture, getDistantPast = Utils.getDistantPast, isArray = Utils.isArray, isNOU = Utils.isNOU;\n/**\n * The standard campaign manager implementation.\n */\nvar CampaignManager = /** @class */ (function () {\n    function CampaignManager(stateProvider, definitionProviders, stringProvider, environmentProvider, currentBuildNumber, currentDate, isPriorityEnabled, userFactsProvider) {\n        if (!stateProvider) {\n            throw new Error("stateProvider must not be null");\n        }\n        if (!isArray(definitionProviders)) {\n            throw new Error("definitionProviders is either null or not an array type");\n        }\n        if (!stringProvider) {\n            throw new Error("stringProvider must not be null");\n        }\n        if (isNOU(currentBuildNumber)) {\n            throw new Error("currentBuildNumber must not be null");\n        }\n        this.campaignStates = {};\n        this.campaignDefinitions = {};\n        this.userFacts = [];\n        this.stateProvider = stateProvider;\n        this.definitionProviders = definitionProviders;\n        this.stringProvider = stringProvider;\n        this.userFactsProvider = userFactsProvider;\n        this.environmentProvider = environmentProvider; // Can be null\n        this.currentBuildNumber = currentBuildNumber;\n        currentDate = currentDate ? currentDate : new Date();\n        this.isPriorityEnabled = isPriorityEnabled;\n    }\n    CampaignManager.isStateUpForNomination = function (state, definition, date, buildNumber) {\n        if (!state || !definition) {\n            return false;\n        }\n        date = date ? date : new Date();\n        // Check manual override\n        if (state.ForceCandidacy) {\n            return true;\n        }\n        // Figure out which duration we\'re using based on whether or not the user triggered the survey\n        var campaignCooldownDuration = definition.nominationScheme.getCampaignCooldown(state.IsCandidate && state.DidCandidateTriggerSurvey);\n        if (!campaignCooldownDuration) {\n            return false;\n        }\n        // First check for build-based rules. Eventually this could get more complex if we supported counting differently seen build numbers\n        if (CampaignManager.hasBuildChangeDurationElapsed(campaignCooldownDuration, state.LastNominationBuildNumber, buildNumber)) {\n            return true;\n        }\n        // Next check date rules\n        return CampaignManager.hasTimeIntervalDurationElapsed(campaignCooldownDuration, state.getCooldownStartDate(), date);\n    };\n    CampaignManager.isDateInRange = function (date, startDate, endDate) {\n        date = date ? date : new Date();\n        startDate = startDate ? startDate : getDistantPast();\n        endDate = endDate ? endDate : getDistantFuture();\n        // Check Start/Expire date range\n        if (startDate.getTime() <= date.getTime() && endDate.getTime() >= date.getTime()) {\n            return true;\n        }\n        return false;\n    };\n    CampaignManager.hasTimeIntervalDurationElapsed = function (duration, startDate, date) {\n        if (isNOU(duration) || !(duration instanceof CampaignDefinitionProvider_1.CampaignDurationTimeInterval)) {\n            return false;\n        }\n        if (!startDate || !date) {\n            return false;\n        }\n        var endDate = Utils.addSecondsWithoutOverflow(startDate, duration.intervalSeconds);\n        return date.getTime() >= endDate.getTime();\n    };\n    CampaignManager.hasBuildChangeDurationElapsed = function (duration, startBuild, build) {\n        if (isNOU(duration) || !(duration instanceof CampaignDefinitionProvider_1.CampaignDurationSingleBuildChange)) {\n            return false;\n        }\n        if (isNOU(startBuild) || isNOU(build)) {\n            return (startBuild === null) !== (build === null);\n        }\n        return !(startBuild === build);\n    };\n    CampaignManager.isCampaignInScope = function (definition, date, environmentProvider, userFactsProvider) {\n        if (!definition) {\n            return false;\n        }\n        date = date ? date : new Date();\n        // Check Start/Expire date range\n        if (!CampaignManager.isDateInRangeWithDefinition(date, definition)) {\n            return false;\n        }\n        if (definition.scope) {\n            if (definition.scope instanceof CampaignDefinitionProvider_1.CampaignScopeUserFactAny || definition.scope instanceof CampaignDefinitionProvider_1.CampaignScopeUserFactAll) {\n                definition.scope.setUserFactsProvider(userFactsProvider);\n            }\n            if (definition.scope instanceof CampaignDefinitionProvider_1.CampaignScopeEnvironmentCrossProduct) {\n                definition.scope.setEnvironmentProvider(environmentProvider);\n            }\n            if (!definition.scope.isInScope()) {\n                return false;\n            }\n        }\n        // If we get here, the definition is relevant\n        return true;\n    };\n    CampaignManager.isDateInRangeWithDefinition = function (date, definition) {\n        if (!definition) {\n            return false;\n        }\n        date = date ? date : new Date();\n        return CampaignManager.isDateInRange(date, \n        // null start dates should be impossible, but if set, should mean the campaign is disabled\n        definition.startTime ? definition.startTime : getDistantFuture(), definition.endTime);\n    };\n    // @Override\n    CampaignManager.prototype.getActiveSurveys = function () {\n        var surveys = {};\n        var prioritizedCampaigns = this.getPrioritizedCampaigns();\n        for (var key in this.campaignStates) {\n            if (this.campaignStates.hasOwnProperty(key)) {\n                var state = this.campaignStates[key];\n                if (!state.IsCandidate) {\n                    continue;\n                }\n                // This is a requirement because we keep some otherwise "stale" campaigns around for the save routine\n                var definition = prioritizedCampaigns[state.CampaignId];\n                if (!definition) {\n                    continue;\n                }\n                var survey = CampaignSurveyFactory_1.CampaignSurveyFactory.makeSurvey(state, definition, this.stringProvider);\n                if (!survey) {\n                    continue;\n                }\n                surveys[survey.getSurveyInfo().getId()] = survey;\n            }\n        }\n        return surveys;\n    };\n    // @Override\n    CampaignManager.prototype.onCampaignSurveyActivated = function (campaignId, takenDate, isSurveyComplete) {\n        var state = this.campaignStates[campaignId];\n        if (!state) {\n            return;\n        }\n        takenDate = takenDate ? takenDate : new Date();\n        var cooldownSeconds = this.campaignDefinitions[campaignId].nominationScheme.cooldownPeriod.asTimeIntervalSeconds();\n        state.markCurrentSurveyTakenOnDate(takenDate, cooldownSeconds, isSurveyComplete);\n        this.saveCurrentState();\n    };\n    CampaignManager.prototype.getCampaignStates = function () {\n        return this.campaignStates;\n    };\n    // @Override\n    CampaignManager.prototype.getCampaignDefinitions = function () {\n        return this.campaignDefinitions;\n    };\n    CampaignManager.prototype.getUserFacts = function () {\n        return this.userFacts;\n    };\n    // region ISurveyClient methods\n    // @Override\n    CampaignManager.prototype.onSurveyActivated = function (surveyInfo, isSurveyComplete) {\n        if (!surveyInfo) {\n            return;\n        }\n        this.onCampaignSurveyActivated(surveyInfo.getBackEndId(), new Date(), isSurveyComplete);\n    };\n    // @Override\n    CampaignManager.prototype.refreshSurveyDefinitions = function (channelTypes, date) {\n        this.refreshSurveyDefinitionsPrivate(channelTypes, (date ? date : new Date()));\n    };\n    // @Override\n    CampaignManager.prototype.refreshSurveyDefinitionsAsync = function (channelTypes, date) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            _this.refreshSurveyDefinitionsPrivateAsync(channelTypes, (date ? date : new Date())).then(function onFulfilled() {\n                resolve();\n            }).catch(function OnRejected(errReason) {\n                reject(errReason);\n            });\n        });\n    };\n    // @Override\n    CampaignManager.prototype.getAppSurveys = function () {\n        return this.getActiveSurveys();\n    };\n    // @Override\n    CampaignManager.prototype.saveCurrentState = function () {\n        // Sort by campaignId, ascending for uniformity\n        var states = Utils.makeArrayFromObjectValuesSortedByKeyString(this.campaignStates);\n        this.stateProvider.save(states);\n    };\n    // endregion\n    CampaignManager.prototype.refreshSurveyDefinitionsPrivate = function (channelTypes, date) {\n        if (this.needRefreshSurveyDefinitions()) {\n            this.lastCampaignRefreshTime = new Date();\n            this.campaignDefinitions = {};\n            this.userFacts = [];\n            this.loadFilterCampaigns(date, channelTypes);\n        }\n        else {\n            this.FilterCampaignsOnRestart(date, channelTypes);\n        }\n        this.campaignStates = {};\n        this.LoadFilterCampaignStates(date);\n        this.evaluateCampaigns(date);\n    };\n    CampaignManager.prototype.refreshSurveyDefinitionsPrivateAsync = function (channelTypes, date) {\n        var _a;\n        this.campaignStates = {};\n        this.campaignDefinitions = {};\n        this.userFacts = [];\n        this.lastCampaignRefreshTime = (_a = this.lastCampaignRefreshTime) !== null && _a !== void 0 ? _a : new Date();\n        var thisCampaignManager = this;\n        return new Promise(function (resolve, reject) {\n            thisCampaignManager.loadAndFilterCampaignDataAsync(date, channelTypes).then(function onFulfilled() {\n                thisCampaignManager.evaluateCampaigns(date);\n                resolve();\n            }).catch(function OnRejected(errReason) {\n                reject(errReason);\n            });\n        });\n    };\n    /**\n     * Load and filter the campaigns definitions and states\n     */\n    CampaignManager.prototype.loadAndFilterCampaignDataAsync = function (currentDate, channelTypes) {\n        currentDate = currentDate ? currentDate : new Date();\n        var loadedDefinitions = [];\n        var promises = [];\n        var userFactsPromise = this.userFactsProvider && this.userFactsProvider.loadAsync();\n        for (var _i = 0, _a = Object.keys(this.definitionProviders); _i < _a.length; _i++) {\n            var i = _a[_i];\n            var provider = this.definitionProviders[i];\n            var promise = provider && provider.loadAsync();\n            if (!isNOU(promise)) {\n                // Promise.all fails even if one promise fails.\n                // We want to ignore the promise that failed and continue with the ones\n                // those are succesful, hence overriding the catch to always resolve.\n                // responsibility of logging failures should be with the provider.\n                promise = promise.catch(function () {\n                    FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_CampaignLoad_Failed("Failed to load from campaign definition provider");\n                    Promise.resolve();\n                });\n                promises.push(promise);\n            }\n        }\n        var thisCampaignManager = this;\n        return new Promise(function (resolve, reject) {\n            Promise.all(promises).then(function onFulfilled(values) {\n                for (var _i = 0, _a = Object.keys(values); _i < _a.length; _i++) {\n                    var i = _a[_i];\n                    var campaignDefinitions = values[i];\n                    if (isArray(campaignDefinitions)) {\n                        // If there are campaign defintions with duplicate campaign Id\'s\n                        // Floodgate will load the last one it found. FilterCampaignData does this filteration\n                        loadedDefinitions = loadedDefinitions.concat(campaignDefinitions);\n                    }\n                }\n                var setUserFacts = function (userFacts) {\n                    thisCampaignManager.userFacts = userFacts || [];\n                    thisCampaignManager.FilterCampaignData(currentDate, channelTypes, loadedDefinitions);\n                    resolve();\n                };\n                // Before filtering and evaluating the campaign definitions,\n                // wait until the user facts are loaded as they will be used in evaluating campaign scopes\n                if (!isNOU(userFactsPromise)) {\n                    userFactsPromise.then(function (userFacts) {\n                        setUserFacts(userFacts);\n                    }).catch(function () {\n                        // this should never happen as user facts promise will always be resolved by the user facts provider\n                        FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsLoad.Failed, "Failed to load from user facts provider");\n                        setUserFacts();\n                    });\n                }\n                else {\n                    setUserFacts();\n                }\n            }).catch(function OnRejected(error) {\n                // this should never happen as Promise.all will always be resolved\n                // because of hack at the top of the function.\n                FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_CampaignLoad_Failed("Failed to load from campaign definition provider");\n            });\n        });\n    };\n    CampaignManager.prototype.loadFilterCampaigns = function (currentDate, channelTypes) {\n        currentDate = currentDate ? currentDate : new Date();\n        var loadedDefinitions = [];\n        for (var _i = 0, _a = Object.keys(this.definitionProviders); _i < _a.length; _i++) {\n            var index = _a[_i];\n            try {\n                var definitions = this.definitionProviders[index] && this.definitionProviders[index].load();\n                if (isArray(definitions)) {\n                    // If there are campaign defintions with duplicate campaign Id\'s\n                    // Floodgate will load the last one it found. FilterCampaignData does this filteration\n                    loadedDefinitions = loadedDefinitions.concat(definitions);\n                }\n            }\n            catch (error) {\n                // Log error, but continue with other providers\n                // It should be the responsibility of provider to log detailed errors\n                FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_CampaignLoad_Failed("Failed to load from campaign definition provider. " + error.toString());\n            }\n        }\n        // Load the user facts before all the campaign definitions are evaluated\n        try {\n            this.userFacts = (this.userFactsProvider && this.userFactsProvider.load()) || [];\n        }\n        catch (error) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsLoad.Failed, "Failed to load from user facts provider. " + error);\n        }\n        // Load filtered campaign definitions\n        for (var key in loadedDefinitions) {\n            if (loadedDefinitions.hasOwnProperty(key)) {\n                var definition = loadedDefinitions[key];\n                if (channelTypes &&\n                    (channelTypes.indexOf(definition.governedChannelType) < 0) &&\n                    (definition.businessLevel !== ISurveyInfo_1.BusinessLevel.Critical)) {\n                    continue;\n                }\n                // this needs to be done here before adding to campaignDefinitions in case there are multiple definitions with different language scopes\n                if (!CampaignManager.isCampaignInScope(definition, currentDate, this.environmentProvider, this.userFactsProvider)) {\n                    continue;\n                }\n                this.campaignDefinitions[definition.campaignId] = definition;\n            }\n        }\n    };\n    /**\n     * Load and filter the campaigns definitions and states\n     */\n    CampaignManager.prototype.FilterCampaignData = function (currentDate, channelTypes, loadedDefinitions) {\n        var loadedDefinitionsMap = {};\n        // Load filtered campaign definitions\n        for (var key in loadedDefinitions) {\n            if (loadedDefinitions.hasOwnProperty(key)) {\n                var definition = loadedDefinitions[key];\n                loadedDefinitionsMap[definition.campaignId] = definition;\n                if (channelTypes &&\n                    (channelTypes.indexOf(definition.governedChannelType) < 0) &&\n                    (definition.businessLevel !== ISurveyInfo_1.BusinessLevel.Critical)) {\n                    continue;\n                }\n                if (!CampaignManager.isCampaignInScope(definition, currentDate, this.environmentProvider, this.userFactsProvider)) {\n                    continue;\n                }\n                this.campaignDefinitions[definition.campaignId] = definition;\n            }\n        }\n        // Load campaign state, filtering out the expired definitions\n        var loadedStates = this.stateProvider.load();\n        var staleLoadedStates = [];\n        for (var key in loadedStates) {\n            if (loadedStates.hasOwnProperty(key)) {\n                var state = loadedStates[key];\n                if (!this.campaignDefinitions.hasOwnProperty(state.CampaignId)) {\n                    staleLoadedStates.push(state);\n                }\n                this.campaignStates[state.CampaignId] = state;\n            }\n        }\n        /*\n            * Stale State data cleanup\n            * State needs to be cleaned up when:\n            * 1) The campaign has expired\n            * 2) The campaign is no longer present in the definitions (think ECS or other outages or very old expirations)\n            *    In this case the state should still be cleaned up on it\'s reelection date\n            * 3) When the user is out of scope (for an otherwise active campaign) and is up for nomination\n\r\n            * This optimizes the user experience in case the campaign pops up or gets renewed when we would have preferred the user remain in cool down\n\r\n            * 2&3 are basically the same, and 1 is a special case optimization on top of 2&3 for earlier clean up\n\r\n            * To do 2 & 3, we just look at states with no matching definition (after filtering), and reject them if they are past their nomination period\n            * To do 1, we just need to keep a list/hash of the definitions that we filtered out this load cycle, specifically for expiration dates, and bypass\n            * the cool down "wait" for these specifically\n\r\n            * For now, allowing some "grace" for "missing"/"blippy" campaign definitions (in case they pop in and out of ECS) by deferring missing\n            * deletion by a delay-time specified by the original campaign.\n            */\n        for (var key in staleLoadedStates) {\n            if (staleLoadedStates.hasOwnProperty(key)) {\n                var state = staleLoadedStates[key];\n                if (!state) {\n                    continue;\n                }\n                var definition = loadedDefinitionsMap[state.CampaignId];\n                var shouldRemove = false;\n                if (!definition) {\n                    if (state.LastNominationTimeUtc.getTime() <= Utils.subtractSecondsWithoutOverflow(currentDate, state.DeleteAfterSecondsWhenStale).getTime()) {\n                        shouldRemove = true;\n                    }\n                }\n                else if (CampaignManager.isStateUpForNomination(state, definition, currentDate, this.currentBuildNumber)) {\n                    shouldRemove = true;\n                }\n                // The next time we write to storage, these will be removed\n                if (shouldRemove) {\n                    delete this.campaignStates[state.CampaignId];\n                }\n            }\n        }\n    };\n    // Filter lower priority campaigns that are on same channel and have a matching tag\n    CampaignManager.prototype.getPrioritizedCampaigns = function () {\n        var _this = this;\n        var prioritizedCampaigns = {};\n        // build <tagId_channel, campaign[]> map\n        var matchingTagCampaigns = {};\n        Object.keys(this.campaignDefinitions || []).forEach(function (key) {\n            var definition = _this.campaignDefinitions[key];\n            if (_this.campaignStates.hasOwnProperty(key)) {\n                var state = _this.campaignStates[key];\n                // only add the campaign if it\'s nominated\n                if (state.IsCandidate) {\n                    prioritizedCampaigns[key] = definition;\n                    // if tags are not defined, use empty tag to fallback to channel level aggregation\n                    var definitionTags = definition.tags && definition.tags.length > 0 ? definition.tags : [""];\n                    definitionTags.forEach(function (tagId) {\n                        var mapKey = tagId + "_" + definition.governedChannelType;\n                        matchingTagCampaigns[mapKey] = matchingTagCampaigns[mapKey] || [];\n                        matchingTagCampaigns[mapKey].push(definition);\n                    });\n                }\n            }\n        });\n        // remove lower priority campaigns\n        Object.keys(matchingTagCampaigns).forEach(function (key) {\n            var _a;\n            // Check if the priority filter is enabled for standard channel\n            if (!_this.isPriorityEnabled && key.endsWith("_" + GovernedChannel_1.GovernedChannelType.Standard)) {\n                return;\n            }\n            var definitions = matchingTagCampaigns[key];\n            if (definitions.length <= 1) {\n                return;\n            }\n            // Get definition that has max priority value (0/null/undefined has highest prioirty)\n            var _b = Utils.findHighestPriorityDefinition(definitions), maxPriorityDefinition = _b[0], hasLowerPriorityDefinitions = _b[1];\n            var maxPriority = (_a = maxPriorityDefinition.primaryPriority) !== null && _a !== void 0 ? _a : 0;\n            if (!hasLowerPriorityDefinitions) {\n                // nothing to filter because all priorities are the same\n                return;\n            }\n            // delete lower priority campaigns while preserving all the matching higher priority items\n            definitions.forEach(function (current) {\n                var currentPriority = current.primaryPriority;\n                // for mso compatability ignore campaigns without priority set so that they are always considered\n                if (!isNOU(current.primaryPriority) && currentPriority > maxPriority) {\n                    delete prioritizedCampaigns[current.campaignId];\n                }\n            });\n        });\n        return prioritizedCampaigns;\n    };\n    /**\n     * Given the loaded campaign definitions and states from previous sessions, run anything up for nomination\n     */\n    CampaignManager.prototype.evaluateCampaigns = function (currentDate) {\n        // Loop through campaigns definitions, and update their state if necessary\n        currentDate = currentDate ? currentDate : new Date();\n        for (var key in this.campaignDefinitions) {\n            if (this.campaignDefinitions.hasOwnProperty(key)) {\n                var definition = this.campaignDefinitions[key];\n                var state = this.campaignStates[definition.campaignId];\n                if (!state || CampaignManager.isStateUpForNomination(state, definition, currentDate, this.currentBuildNumber)) {\n                    var lastSurveyId = state ? state.LastSurveyId : "";\n                    var lastSurveyStartTime = state ? state.LastSurveyStartTimeUtc : getDistantPast();\n                    var lastSurveyExpirationTime = state ? state.LastSurveyExpirationTimeUtc : getDistantPast();\n                    var lastSurveyActivatedTime = state ? state.LastSurveyActivatedTimeUtc : getDistantPast();\n                    var lastCooldownEndTimeUtc = state ? state.LastCooldownEndTimeUtc : getDistantPast();\n                    // Run the nomination\n                    var isCandidate = (state && state.ForceCandidacy) || definition.nominationScheme.evaluateNominationRules();\n                    if (isCandidate) {\n                        // Make new survey properties for the next call to get the active surveys\n                        lastSurveyId = Utils.guid();\n                        lastSurveyStartTime = definition.nominationScheme.calculateSurveyStartTimeFromDate(currentDate);\n                        lastSurveyExpirationTime = definition.nominationScheme.calculateSurveyExpirationTimeFromSurveyStartTime(lastSurveyStartTime);\n                    }\n                    var newState = new CampaignStateProvider_1.CampaignState(definition.campaignId, currentDate, this.currentBuildNumber, definition.nominationScheme.getActiveSurveyTimeIntervalSeconds(), false, isCandidate, false, lastSurveyActivatedTime, lastSurveyId, lastSurveyStartTime, lastSurveyExpirationTime, lastCooldownEndTimeUtc);\n                    // Save the new state to our local cache\n                    this.campaignStates[newState.CampaignId] = newState;\n                }\n            }\n        }\n    };\n    CampaignManager.prototype.needRefreshSurveyDefinitions = function () {\n        if (!this.lastCampaignRefreshTime) {\n            return true;\n        }\n        return false;\n    };\n    CampaignManager.prototype.FilterCampaignsOnRestart = function (currentDate, channelTypes) {\n        for (var key in this.campaignDefinitions) {\n            if (this.campaignDefinitions.hasOwnProperty(key)) {\n                var definition = this.campaignDefinitions[key];\n                if (channelTypes &&\n                    (channelTypes.indexOf(definition.governedChannelType) < 0) &&\n                    (definition.businessLevel !== ISurveyInfo_1.BusinessLevel.Critical)) {\n                    delete this.campaignDefinitions[definition.campaignId];\n                    continue;\n                }\n                if (!CampaignManager.isCampaignInScope(definition, currentDate, this.environmentProvider, this.userFactsProvider)) {\n                    delete this.campaignDefinitions[definition.campaignId];\n                    continue;\n                }\n            }\n        }\n    };\n    /**\n     * Load and filter the campaigns definitions and states\n     */\n    CampaignManager.prototype.LoadFilterCampaignStates = function (currentDate) {\n        // Load campaign state, filtering out the expired definitions\n        var loadedStates = this.stateProvider.load();\n        var staleLoadedStates = [];\n        for (var key in loadedStates) {\n            if (loadedStates.hasOwnProperty(key)) {\n                var state = loadedStates[key];\n                if (!this.campaignDefinitions.hasOwnProperty(state.CampaignId)) {\n                    staleLoadedStates.push(state);\n                }\n                this.campaignStates[state.CampaignId] = state;\n            }\n        }\n        /*\n         * Stale State data cleanup\n         * State needs to be cleaned up when:\n         * 1) The campaign has expired\n         * 2) The campaign is no longer present in the definitions (think ECS or other outages or very old expirations)\n         *    In this case the state should still be cleaned up on it\'s reelection date\n         * 3) When the user is out of scope (for an otherwise active campaign) and is up for nomination\n\r\n         * This optimizes the user experience in case the campaign pops up or gets renewed when we would have preferred the user remain in cool down\n\r\n         * 2&3 are basically the same, and 1 is a special case optimization on top of 2&3 for earlier clean up\n\r\n         * To do 2 & 3, we just look at states with no matching definition (after filtering), and reject them if they are past their nomination period\n         * To do 1, we just need to keep a list/hash of the definitions that we filtered out this load cycle, specifically for expiration dates, and bypass\n         * the cool down "wait" for these specifically\n\r\n         * For now, allowing some "grace" for "missing"/"blippy" campaign definitions (in case they pop in and out of ECS) by deferring missing\n         * deletion by a delay-time specified by the original campaign.\n         */\n        for (var key in staleLoadedStates) {\n            if (staleLoadedStates.hasOwnProperty(key)) {\n                var state = staleLoadedStates[key];\n                if (!state) {\n                    continue;\n                }\n                var definition = this.campaignDefinitions[state.CampaignId];\n                var shouldRemove = false;\n                if (!definition) {\n                    if (state.LastNominationTimeUtc.getTime() <= Utils.subtractSecondsWithoutOverflow(currentDate, state.DeleteAfterSecondsWhenStale).getTime()) {\n                        shouldRemove = true;\n                    }\n                }\n                else if (CampaignManager.isStateUpForNomination(state, definition, currentDate, this.currentBuildNumber)) {\n                    shouldRemove = true;\n                }\n                // The next time we write to storage, these will be removed\n                if (shouldRemove) {\n                    delete this.campaignStates[state.CampaignId];\n                }\n            }\n        }\n    };\n    return CampaignManager;\n}());\nexports.CampaignManager = CampaignManager;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0NhbXBhaWduL0NhbXBhaWduTWFuYWdlci50cz85MDQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHNIQUFxRDtBQUNyRCxzSEFBeUQ7QUFHekQsc0ZBQWtDO0FBQ2xDLCtKQUdzQztBQUN0QyxnSkFBZ0Y7QUFDaEYsZ0pBQWdFO0FBR2hFLG9HQUE4QztBQUM5QywwR0FBK0M7QUFFdkMsb0JBQWdCLEdBQXFDLEtBQUssaUJBQTFDLEVBQUUsY0FBYyxHQUFxQixLQUFLLGVBQTFCLEVBQUUsT0FBTyxHQUFZLEtBQUssUUFBakIsRUFBRSxLQUFLLEdBQUssS0FBSyxNQUFWLENBQVc7QUFjbkU7O0dBRUc7QUFDSDtJQTBIQyx5QkFBbUIsYUFBcUMsRUFDdkQsbUJBQWtELEVBQ2xELGNBQXdDLEVBQ3hDLG1CQUFrRCxFQUNsRCxrQkFBMEIsRUFDMUIsV0FBaUIsRUFDakIsaUJBQTBCLEVBQzFCLGlCQUFxQztRQUVyQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNsRDtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFBRTtZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7U0FDM0U7UUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUNuRDtRQUVELElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsYUFBYSxH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YUFDRDtTQUNEO0lBQ0YsQ0FBQztJQUNGLHNCQUFDO0FBQUQsQ0FBQztBQXJzQlksMENBQWUiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9DYW1wYWlnbi9DYW1wYWlnbk1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRmxvb2RnYXRlRW52aXJvbm1lbnRQcm92aWRlciB9IGZyb20gXCIuLi9BcGkvSUZsb29kZ2F0ZUVudmlyb25tZW50UHJvdmlkZXJcIjtcclxuaW1wb3J0ICogYXMgSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyIGZyb20gXCIuLi9BcGkvSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyXCI7XHJcbmltcG9ydCAqIGFzIElTdXJ2ZXkgZnJvbSBcIi4uL0FwaS9JU3VydmV5XCI7XHJcbmltcG9ydCB7IElEaWN0aW9uYXJ5IH0gZnJvbSBcIi4uL0NvbW1vblwiO1xyXG5pbXBvcnQgeyBGbG9vZGdhdGVFbmdpbmUgfSBmcm9tIFwiLi4vRmxvb2RnYXRlRW5naW5lXCI7XHJcbmltcG9ydCB7IEdvdmVybmVkQ2hhbm5lbFR5cGUgfSBmcm9tIFwiLi4vR292ZXJuZWRDaGFubmVsXCI7XHJcbmltcG9ydCB7IElTdXJ2ZXlDbGllbnQgfSBmcm9tIFwiLi4vSVN1cnZleUNsaWVudFwiO1xyXG5pbXBvcnQgKiBhcyBJU3VydmV5SW5mbyBmcm9tIFwiLi4vSVN1cnZleUluZm9cIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uL1V0aWxzXCI7XHJcbmltcG9ydCB7XHJcblx0Q2FtcGFpZ25EZWZpbml0aW9uLCBDYW1wYWlnbkR1cmF0aW9uLCBDYW1wYWlnbkR1cmF0aW9uU2luZ2xlQnVpbGRDaGFuZ2UsXHJcblx0Q2FtcGFpZ25EdXJhdGlvblRpbWVJbnRlcnZhbCwgQ2FtcGFpZ25TY29wZUVudmlyb25tZW50Q3Jvc3NQcm9kdWN0LCBDYW1wYWlnblNjb3BlVXNlckZhY3RBbGwsIENhbXBhaWduU2NvcGVVc2VyRmFjdEFueSwgSUNhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyLFxyXG59IGZyb20gXCIuL0NhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyXCI7XHJcbmltcG9ydCB7IENhbXBhaWduU3RhdGUsIElDYW1wYWlnblN0YXRlUHJvdmlkZXIgfSBmcm9tIFwiLi9DYW1wYWlnblN0YXRlUHJvdmlkZXJcIjtcclxuaW1wb3J0IHsgQ2FtcGFpZ25TdXJ2ZXlGYWN0b3J5IH0gZnJvbSBcIi4vQ2FtcGFpZ25TdXJ2ZXlGYWN0b3J5XCI7XHJcblxyXG5pbXBvcnQgeyBJVXNlckZhY3QsIElVc2VyRmFjdFByb3ZpZGVyIH0gZnJvbSBcIi4uL0FwaS9BcGlcIjtcclxuaW1wb3J0IHsgVGVsZW1ldHJ5RXZlbnQgfSBmcm9tIFwiLi4vQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEJ1c2luZXNzTGV2ZWwgfSBmcm9tIFwiLi4vSVN1cnZleUluZm9cIjtcclxuXHJcbmNvbnN0IHsgZ2V0RGlzdGFudEZ1dHVyZSwgZ2V0RGlzdGFudFBhc3QsIGlzQXJyYXksIGlzTk9VIH0gPSBVdGlscztcclxuXHJcbi8qKlxyXG4gKiBUaGUgQ2FtcGFpZ25NYW5hZ2VyIGlzIHJlc3BvbnNpYmxlIGZvciBjb21iaW5pbmcgcmVhZC1vbmx5IGNhbXBhaWduIGRlZmluaXRpb25zIHdpdGggcHJldmlvdXNseSBzdG9yZWQgY2FtcGFpZ24gc3RhdGUsXHJcbiAqIHJ1bm5pbmcgcmUtbm9taW5hdGlvbiBlbGVjdGlvbnMsIGFuZCB1bHRpbWF0ZWx5IGdlbmVyYXRpbmcgc3VydmV5c1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQ2FtcGFpZ25NYW5hZ2VyIHtcclxuXHQvLyBHZXQgdGhlIGxpc3Qgb2YgYWN0aXZlIHN1cnZleXMgdGFyZ2V0aW5nIHRoaXMgdXNlclxyXG5cdGdldEFjdGl2ZVN1cnZleXMoKTogSURpY3Rpb25hcnk8SVN1cnZleT47XHJcblxyXG5cdC8vIFVwZGF0ZXMgdGhlIGNhbXBhaWduIHN0YXRlIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgdGhlIHVzZXIganVzdCB0b29rIHRoYXQgY2FtcGFpZ24ncyBzdXJ2ZXlcclxuXHRvbkNhbXBhaWduU3VydmV5QWN0aXZhdGVkKGNhbXBhaWduSWQ6IHN0cmluZywgZGF0ZTogRGF0ZSwgaXNTdXJ2ZXlDb21wbGV0ZTogYm9vbGVhbik6IHZvaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgc3RhbmRhcmQgY2FtcGFpZ24gbWFuYWdlciBpbXBsZW1lbnRhdGlvbi5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBDYW1wYWlnbk1hbmFnZXIgaW1wbGVtZW50cyBJQ2FtcGFpZ25NYW5hZ2VyLCBJU3VydmV5Q2xpZW50IHtcclxuXHRwdWJsaWMgc3RhdGljIGlzU3RhdGVVcEZvck5vbWluYXRpb24oc3RhdGU6IENhbXBhaWduU3RhdGUsIGRlZmluaXRpb246IENhbXBhaWduRGVmaW5pdGlvbiwgZGF0ZTogRGF0ZSwgYnVpbGROdW1iZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFzdGF0ZSB8fCAhZGVmaW5pdGlvbikge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGF0ZSA9IGRhdGUgPyBkYXRlIDogbmV3IERhdGUoKTtcclxuXHJcblx0XHQvLyBDaGVjayBtYW51YWwgb3ZlcnJpZGVcclxuXHRcdGlmIChzdGF0ZS5Gb3JjZUNhbmRpZGFjeSkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaWd1cmUgb3V0IHdoaWNoIGR1cmF0aW9uIHdlJ3JlIHVzaW5nIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIHRyaWdnZXJlZCB0aGUgc3VydmV5XHJcblx0XHRjb25zdCBjYW1wYWlnbkNvb2xkb3duRHVyYXRpb246IENhbXBhaWduRHVyYXRpb25cclxuXHRcdFx0PSBkZWZpbml0aW9uLm5vbWluYXRpb25TY2hlbWUuZ2V0Q2FtcGFpZ25Db29sZG93bihzdGF0ZS5Jc0NhbmRpZGF0ZSAmJiBzdGF0ZS5EaWRDYW5kaWRhdGVUcmlnZ2VyU3VydmV5KTtcclxuXHJcblx0XHRpZiAoIWNhbXBhaWduQ29vbGRvd25EdXJhdGlvbikge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHQvLyBGaXJzdCBjaGVjayBmb3IgYnVpbGQtYmFzZWQgcnVsZXMuIEV2ZW50dWFsbHkgdGhpcyBjb3VsZCBnZXQgbW9yZSBjb21wbGV4IGlmIHdlIHN1cHBvcnRlZCBjb3VudGluZyBkaWZmZXJlbnRseSBzZWVuIGJ1aWxkIG51bWJlcnNcclxuXHRcdGlmIChDYW1wYWlnbk1hbmFnZXIuaGFzQnVpbGRDaGFuZ2VEdXJhdGlvbkVsYXBzZWQoY2FtcGFpZ25Db29sZG93bkR1cmF0aW9uLCBzdGF0ZS5MYXN0Tm9taW5hdGlvbkJ1aWxkTnVtYmVyLCBidWlsZE51bWJlcikpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTmV4dCBjaGVjayBkYXRlIHJ1bGVzXHJcblx0XHRyZXR1cm4gQ2FtcGFpZ25NYW5hZ2VyLmhhc1RpbWVJbnRlcnZhbER1cmF0aW9uRWxhcHNlZChjYW1wYWlnbkNvb2xkb3duRHVyYXRpb24sIHN0YXRlLmdldENvb2xkb3duU3RhcnREYXRlKCksIGRhdGUpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHN0YXRpYyBpc0RhdGVJblJhbmdlKGRhdGU6IERhdGUsIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xyXG5cdFx0ZGF0ZSA9IGRhdGUgPyBkYXRlIDogbmV3IERhdGUoKTtcclxuXHRcdHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZSA/IHN0YXJ0RGF0ZSA6IGdldERpc3RhbnRQYXN0KCk7XHJcblx0XHRlbmREYXRlID0gZW5kRGF0ZSA/IGVuZERhdGUgOiBnZXREaXN0YW50RnV0dXJlKCk7XHJcblxyXG5cdFx0Ly8gQ2hlY2sgU3RhcnQvRXhwaXJlIGRhdGUgcmFuZ2VcclxuXHRcdGlmIChzdGFydERhdGUuZ2V0VGltZSgpIDw9IGRhdGUuZ2V0VGltZSgpICYmIGVuZERhdGUuZ2V0VGltZSgpID49IGRhdGUuZ2V0VGltZSgpKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgaGFzVGltZUludGVydmFsRHVyYXRpb25FbGFwc2VkKGR1cmF0aW9uOiBDYW1wYWlnbkR1cmF0aW9uLCBzdGFydERhdGU6IERhdGUsIGRhdGU6IERhdGUpOiBib29sZWFuIHtcclxuXHRcdGlmIChpc05PVShkdXJhdGlvbikgfHwgIShkdXJhdGlvbiBpbnN0YW5jZW9mIENhbXBhaWduRHVyYXRpb25UaW1lSW50ZXJ2YWwpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGlmICghc3RhcnREYXRlIHx8ICFkYXRlKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBlbmREYXRlOiBEYXRlID0gVXRpbHMuYWRkU2Vjb25kc1dpdGhvdXRPdmVyZmxvdyhzdGFydERhdGUsIGR1cmF0aW9uLmludGVydmFsU2Vjb25kcyk7XHJcblx0XHRyZXR1cm4gZGF0ZS5nZXRUaW1lKCkgPj0gZW5kRGF0ZS5nZXRUaW1lKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc3RhdGljIGhhc0J1aWxkQ2hhbmdlRHVyYXRpb25FbGFwc2VkKGR1cmF0aW9uOiBDYW1wYWlnbkR1cmF0aW9uLCBzdGFydEJ1aWxkOiBzdHJpbmcsIGJ1aWxkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdGlmIChpc05PVShkdXJhdGlvbikgfHwgIShkdXJhdGlvbiBpbnN0YW5jZW9mIENhbXBhaWduRHVyYXRpb25TaW5nbGVCdWlsZENoYW5nZSkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGlzTk9VKHN0YXJ0QnVpbGQpIHx8IGlzTk9VKGJ1aWxkKSkge1xyXG5cdFx0XHRyZXR1cm4gKHN0YXJ0QnVpbGQgPT09IG51bGwpICE9PSAoYnVpbGQgPT09IG51bGwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAhKHN0YXJ0QnVpbGQgPT09IGJ1aWxkKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIGlzQ2FtcGFpZ25JblNjb3BlKFxyXG5cdFx0ZGVmaW5pdGlvbjogQ2FtcGFpZ25EZWZpbml0aW9uLFxyXG5cdFx0ZGF0ZTogRGF0ZSxcclxuXHRcdGVudmlyb25tZW50UHJvdmlkZXI6IElGbG9vZGdhdGVFbnZpcm9ubWVudFByb3ZpZGVyLFxyXG5cdFx0dXNlckZhY3RzUHJvdmlkZXI6IElVc2VyRmFjdFByb3ZpZGVyKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRlZmluaXRpb24pIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRhdGUgPSBkYXRlID8gZGF0ZSA6IG5ldyBEYXRlKCk7XHJcblxyXG5cdFx0Ly8gQ2hlY2sgU3RhcnQvRXhwaXJlIGRhdGUgcmFuZ2VcclxuXHRcdGlmICghQ2FtcGFpZ25NYW5hZ2VyLmlzRGF0ZUluUmFuZ2VXaXRoRGVmaW5pdGlvbihkYXRlLCBkZWZpbml0aW9uKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGRlZmluaXRpb24uc2NvcGUpIHtcclxuXHRcdFx0aWYgKGRlZmluaXRpb24uc2NvcGUgaW5zdGFuY2VvZiBDYW1wYWlnblNjb3BlVXNlckZhY3RBbnkgfHwgZGVmaW5pdGlvbi5zY29wZSBpbnN0YW5jZW9mIENhbXBhaWduU2NvcGVVc2VyRmFjdEFsbCkge1xyXG5cdFx0XHRcdGRlZmluaXRpb24uc2NvcGUuc2V0VXNlckZhY3RzUHJvdmlkZXIodXNlckZhY3RzUHJvdmlkZXIpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChkZWZpbml0aW9uLnNjb3BlIGluc3RhbmNlb2YgQ2FtcGFpZ25TY29wZUVudmlyb25tZW50Q3Jvc3NQcm9kdWN0KSB7XHJcblx0XHRcdFx0ZGVmaW5pdGlvbi5zY29wZS5zZXRFbnZpcm9ubWVudFByb3ZpZGVyKGVudmlyb25tZW50UHJvdmlkZXIpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghZGVmaW5pdGlvbi5zY29wZS5pc0luU2NvcGUoKSkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIElmIHdlIGdldCBoZXJlLCB0aGUgZGVmaW5pdGlvbiBpcyByZWxldmFudFxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHN0YXRpYyBpc0RhdGVJblJhbmdlV2l0aERlZmluaXRpb24oZGF0ZTogRGF0ZSwgZGVmaW5pdGlvbjogQ2FtcGFpZ25EZWZpbml0aW9uKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRlZmluaXRpb24pIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRhdGUgPSBkYXRlID8gZGF0ZSA6IG5ldyBEYXRlKCk7XHJcblxyXG5cdFx0cmV0dXJuIENhbXBhaWduTWFuYWdlci5pc0RhdGVJblJhbmdlKGRhdGUsXHJcblx0XHRcdC8vIG51bGwgc3RhcnQgZGF0ZXMgc2hvdWxkIGJlIGltcG9zc2libGUsIGJ1dCBpZiBzZXQsIHNob3VsZCBtZWFuIHRoZSBjYW1wYWlnbiBpcyBkaXNhYmxlZFxyXG5cdFx0XHRkZWZpbml0aW9uLnN0YXJ0VGltZSA/IGRlZmluaXRpb24uc3RhcnRUaW1lIDogZ2V0RGlzdGFudEZ1dHVyZSgpLFxyXG5cdFx0XHRkZWZpbml0aW9uLmVuZFRpbWUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYW1wYWlnblN0YXRlczogSURpY3Rpb25hcnk8Q2FtcGFpZ25TdGF0ZT47XHJcblx0cHJpdmF0ZSBjYW1wYWlnbkRlZmluaXRpb25zOiBJRGljdGlvbmFyeTxDYW1wYWlnbkRlZmluaXRpb24+O1xyXG5cdHByaXZhdGUgdXNlckZhY3RzOiBJVXNlckZhY3RbXTtcclxuXHRwcml2YXRlIGN1cnJlbnRCdWlsZE51bWJlcjogc3RyaW5nO1xyXG5cdHByaXZhdGUgc3RhdGVQcm92aWRlcjogSUNhbXBhaWduU3RhdGVQcm92aWRlcjtcclxuXHRwcml2YXRlIGRlZmluaXRpb25Qcm92aWRlcnM6IElDYW1wYWlnbkRlZmluaXRpb25Qcm92aWRlcltdO1xyXG5cdHByaXZhdGUgc3RyaW5nUHJvdmlkZXI6IElGbG9vZGdhdGVTdHJpbmdQcm92aWRlcjtcclxuXHRwcml2YXRlIGVudmlyb25tZW50UHJvdmlkZXI6IElGbG9vZGdhdGVFbnZpcm9ubWVudFByb3ZpZGVyO1xyXG5cdHByaXZhdGUgdXNlckZhY3RzUHJvdmlkZXI6IElVc2VyRmFjdFByb3ZpZGVyO1xyXG5cdHByaXZhdGUgbGFzdENhbXBhaWduUmVmcmVzaFRpbWU6IERhdGU7XHJcblx0cHJpdmF0ZSBpc1ByaW9yaXR5RW5hYmxlZDogYm9vbGVhbjtcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKHN0YXRlUHJvdmlkZXI6IElDYW1wYWlnblN0YXRlUHJvdmlkZXIsXHJcblx0XHRkZWZpbml0aW9uUHJvdmlkZXJzOiBJQ2FtcGFpZ25EZWZpbml0aW9uUHJvdmlkZXJbXSxcclxuXHRcdHN0cmluZ1Byb3ZpZGVyOiBJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIsXHJcblx0XHRlbnZpcm9ubWVudFByb3ZpZGVyOiBJRmxvb2RnYXRlRW52aXJvbm1lbnRQcm92aWRlcixcclxuXHRcdGN1cnJlbnRCdWlsZE51bWJlcjogc3RyaW5nLFxyXG5cdFx0Y3VycmVudERhdGU6IERhdGUsXHJcblx0XHRpc1ByaW9yaXR5RW5hYmxlZDogYm9vbGVhbixcclxuXHRcdHVzZXJGYWN0c1Byb3ZpZGVyPzogSVVzZXJGYWN0UHJvdmlkZXIpIHtcclxuXHJcblx0XHRpZiAoIXN0YXRlUHJvdmlkZXIpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic3RhdGVQcm92aWRlciBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghaXNBcnJheShkZWZpbml0aW9uUHJvdmlkZXJzKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkZWZpbml0aW9uUHJvdmlkZXJzIGlzIGVpdGhlciBudWxsIG9yIG5vdCBhbiBhcnJheSB0eXBlXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghc3RyaW5nUHJvdmlkZXIpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic3RyaW5nUHJvdmlkZXIgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNOT1UoY3VycmVudEJ1aWxkTnVtYmVyKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjdXJyZW50QnVpbGROdW1iZXIgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmNhbXBhaWduU3RhdGVzID0ge307XHJcblx0XHR0aGlzLmNhbXBhaWduRGVmaW5pdGlvbnMgPSB7fTtcclxuXHRcdHRoaXMudXNlckZhY3RzID0gW107XHJcblx0XHR0aGlzLnN0YXRlUHJvdmlkZXIgPSBzdGF0ZVByb3ZpZGVyO1xyXG5cdFx0dGhpcy5kZWZpbml0aW9uUHJvdmlkZXJzID0gZGVmaW5pdGlvblByb3ZpZGVycztcclxuXHRcdHRoaXMuc3RyaW5nUHJvdmlkZXIgPSBzdHJpbmdQcm92aWRlcjtcclxuXHRcdHRoaXMudXNlckZhY3RzUHJvdmlkZXIgPSB1c2VyRmFjdHNQcm92aWRlcjtcclxuXHRcdHRoaXMuZW52aXJvbm1lbnRQcm92aWRlciA9IGVudmlyb25tZW50UHJvdmlkZXI7IC8vIENhbiBiZSBudWxsXHJcblx0XHR0aGlzLmN1cnJlbnRCdWlsZE51bWJlciA9IGN1cnJlbnRCdWlsZE51bWJlcjtcclxuXHJcblx0XHRjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlID8gY3VycmVudERhdGUgOiBuZXcgRGF0ZSgpO1xyXG5cdFx0dGhpcy5pc1ByaW9yaXR5RW5hYmxlZCA9IGlzUHJpb3JpdHlFbmFibGVkO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldEFjdGl2ZVN1cnZleXMoKTogSURpY3Rpb25hcnk8SVN1cnZleT4ge1xyXG5cdFx0Y29uc3Qgc3VydmV5czogSURpY3Rpb25hcnk8SVN1cnZleT4gPSB7fTtcclxuXHRcdGNvbnN0IHByaW9yaXRpemVkQ2FtcGFpZ25zID0gdGhpcy5nZXRQcmlvcml0aXplZENhbXBhaWducygpO1xyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMuY2FtcGFpZ25TdGF0ZXMpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FtcGFpZ25TdGF0ZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdGNvbnN0IHN0YXRlOiBDYW1wYWlnblN0YXRlID0gdGhpcy5jYW1wYWlnblN0YXRlc1trZXldO1xyXG5cdFx0XHRcdGlmICghc3RhdGUuSXNDYW5kaWRhdGUpIHtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gVGhpcyBpcyBhIHJlcXVpcmVtZW50IGJlY2F1c2Ugd2Uga2VlcCBzb21lIG90aGVyd2lzZSBcInN0YWxlXCIgY2FtcGFpZ25zIGFyb3VuZCBmb3IgdGhlIHNhdmUgcm91dGluZVxyXG5cdFx0XHRcdGNvbnN0IGRlZmluaXRpb246IENhbXBhaWduRGVmaW5pdGlvbiA9IHByaW9yaXRpemVkQ2FtcGFpZ25zW3N0YXRlLkNhbXBhaWduSWRdO1xyXG5cdFx0XHRcdGlmICghZGVmaW5pdGlvbikge1xyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBzdXJ2ZXk6IElTdXJ2ZXkgPSBDYW1wYWlnblN1cnZleUZhY3RvcnkubWFrZVN1cnZleShzdGF0ZSwgZGVmaW5pdGlvbiwgdGhpcy5zdHJpbmdQcm92aWRlcik7XHJcblx0XHRcdFx0aWYgKCFzdXJ2ZXkpIHtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0c3VydmV5c1tzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmdldElkKCldID0gc3VydmV5O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHN1cnZleXM7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgb25DYW1wYWlnblN1cnZleUFjdGl2YXRlZChjYW1wYWlnbklkOiBzdHJpbmcsIHRha2VuRGF0ZTogRGF0ZSwgaXNTdXJ2ZXlDb21wbGV0ZTogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0Y29uc3Qgc3RhdGU6IENhbXBhaWduU3RhdGUgPSB0aGlzLmNhbXBhaWduU3RhdGVzW2NhbXBhaWduSWRdO1xyXG5cdFx0aWYgKCFzdGF0ZSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dGFrZW5EYXRlID0gdGFrZW5EYXRlID8gdGFrZW5EYXRlIDogbmV3IERhdGUoKTtcclxuXHJcblx0XHRjb25zdCBjb29sZG93blNlY29uZHMgPSB0aGlzLmNhbXBhaWduRGVmaW5pdGlvbnNbY2FtcGFpZ25JZF0ubm9taW5hdGlvblNjaGVtZS5jb29sZG93blBlcmlvZC5hc1RpbWVJbnRlcnZhbFNlY29uZHMoKTtcclxuXHRcdHN0YXRlLm1hcmtDdXJyZW50U3VydmV5VGFrZW5PbkRhdGUodGFrZW5EYXRlLCBjb29sZG93blNlY29uZHMsIGlzU3VydmV5Q29tcGxldGUpO1xyXG5cclxuXHRcdHRoaXMuc2F2ZUN1cnJlbnRTdGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENhbXBhaWduU3RhdGVzKCk6IElEaWN0aW9uYXJ5PENhbXBhaWduU3RhdGU+IHtcclxuXHRcdHJldHVybiB0aGlzLmNhbXBhaWduU3RhdGVzO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldENhbXBhaWduRGVmaW5pdGlvbnMoKTogSURpY3Rpb25hcnk8Q2FtcGFpZ25EZWZpbml0aW9uPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYW1wYWlnbkRlZmluaXRpb25zO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFVzZXJGYWN0cygpOiBJVXNlckZhY3RbXSB7XHJcblx0XHRyZXR1cm4gdGhpcy51c2VyRmFjdHM7XHJcblx0fVxyXG5cclxuXHQvLyByZWdpb24gSVN1cnZleUNsaWVudCBtZXRob2RzXHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBvblN1cnZleUFjdGl2YXRlZChzdXJ2ZXlJbmZvOiBJU3VydmV5SW5mbywgaXNTdXJ2ZXlDb21wbGV0ZTogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0aWYgKCFzdXJ2ZXlJbmZvKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLm9uQ2FtcGFpZ25TdXJ2ZXlBY3RpdmF0ZWQoc3VydmV5SW5mby5nZXRCYWNrRW5kSWQoKSwgbmV3IERhdGUoKSwgaXNTdXJ2ZXlDb21wbGV0ZSk7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgcmVmcmVzaFN1cnZleURlZmluaXRpb25zKGNoYW5uZWxUeXBlcz86IEdvdmVybmVkQ2hhbm5lbFR5cGVbXSwgZGF0ZT86IERhdGUpOiB2b2lkIHtcclxuXHRcdHRoaXMucmVmcmVzaFN1cnZleURlZmluaXRpb25zUHJpdmF0ZShjaGFubmVsVHlwZXMsIChkYXRlID8gZGF0ZSA6IG5ldyBEYXRlKCkpKTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyByZWZyZXNoU3VydmV5RGVmaW5pdGlvbnNBc3luYyhjaGFubmVsVHlwZXM/OiBHb3Zlcm5lZENoYW5uZWxUeXBlW10sIGRhdGU/OiBEYXRlKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHR0aGlzLnJlZnJlc2hTdXJ2ZXlEZWZpbml0aW9uc1ByaXZhdGVBc3luYyhjaGFubmVsVHlwZXMsIChkYXRlID8gZGF0ZSA6IG5ldyBEYXRlKCkpKS50aGVuKFxyXG5cdFx0XHRcdGZ1bmN0aW9uIG9uRnVsZmlsbGVkKCkge1xyXG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdCkuY2F0Y2goXHJcblx0XHRcdFx0ZnVuY3Rpb24gT25SZWplY3RlZChlcnJSZWFzb24pIHtcclxuXHRcdFx0XHRcdHJlamVjdChlcnJSZWFzb24pO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRBcHBTdXJ2ZXlzKCk6IHsgW2lkOiBzdHJpbmddOiBJU3VydmV5IH0ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0QWN0aXZlU3VydmV5cygpO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIHNhdmVDdXJyZW50U3RhdGUoKTogdm9pZCB7XHJcblx0XHQvLyBTb3J0IGJ5IGNhbXBhaWduSWQsIGFzY2VuZGluZyBmb3IgdW5pZm9ybWl0eVxyXG5cdFx0Y29uc3Qgc3RhdGVzOiBDYW1wYWlnblN0YXRlW10gPSBVdGlscy5tYWtlQXJyYXlGcm9tT2JqZWN0VmFsdWVzU29ydGVkQnlLZXlTdHJpbmcodGhpcy5jYW1wYWlnblN0YXRlcyk7XHJcblxyXG5cdFx0dGhpcy5zdGF0ZVByb3ZpZGVyLnNhdmUoc3RhdGVzKTtcclxuXHR9XHJcblxyXG5cdC8vIGVuZHJlZ2lvblxyXG5cclxuXHRwcml2YXRlIHJlZnJlc2hTdXJ2ZXlEZWZpbml0aW9uc1ByaXZhdGUoY2hhbm5lbFR5cGVzOiBHb3Zlcm5lZENoYW5uZWxUeXBlW10sIGRhdGU6IERhdGUpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLm5lZWRSZWZyZXNoU3VydmV5RGVmaW5pdGlvbnMoKSkge1xyXG5cdFx0XHR0aGlzLmxhc3RDYW1wYWlnblJlZnJlc2hUaW1lID0gbmV3IERhdGUoKTtcclxuXHRcdFx0dGhpcy5jYW1wYWlnbkRlZmluaXRpb25zID0ge307XHJcblx0XHRcdHRoaXMudXNlckZhY3RzID0gW107XHJcblxyXG5cdFx0XHR0aGlzLmxvYWRGaWx0ZXJDYW1wYWlnbnMoZGF0ZSwgY2hhbm5lbFR5cGVzKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuRmlsdGVyQ2FtcGFpZ25zT25SZXN0YXJ0KGRhdGUsIGNoYW5uZWxUeXBlcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5jYW1wYWlnblN0YXRlcyA9IHt9O1xyXG5cdFx0dGhpcy5Mb2FkRmlsdGVyQ2FtcGFpZ25TdGF0ZXMoZGF0ZSk7XHJcblx0XHR0aGlzLmV2YWx1YXRlQ2FtcGFpZ25zKGRhdGUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZWZyZXNoU3VydmV5RGVmaW5pdGlvbnNQcml2YXRlQXN5bmMoY2hhbm5lbFR5cGVzOiBHb3Zlcm5lZENoYW5uZWxUeXBlW10sIGRhdGU6IERhdGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdHRoaXMuY2FtcGFpZ25TdGF0ZXMgPSB7fTtcclxuXHRcdHRoaXMuY2FtcGFpZ25EZWZpbml0aW9ucyA9IHt9O1xyXG5cdFx0dGhpcy51c2VyRmFjdHMgPSBbXTtcclxuXHRcdHRoaXMubGFzdENhbXBhaWduUmVmcmVzaFRpbWUgPSB0aGlzLmxhc3RDYW1wYWlnblJlZnJlc2hUaW1lID8/IG5ldyBEYXRlKCk7XHJcblxyXG5cdFx0Y29uc3QgdGhpc0NhbXBhaWduTWFuYWdlciA9IHRoaXM7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHR0aGlzQ2FtcGFpZ25NYW5hZ2VyLmxvYWRBbmRGaWx0ZXJDYW1wYWlnbkRhdGFBc3luYyhkYXRlLCBjaGFubmVsVHlwZXMpLnRoZW4oXHJcblx0XHRcdFx0ZnVuY3Rpb24gb25GdWxmaWxsZWQoKSB7XHJcblx0XHRcdFx0XHR0aGlzQ2FtcGFpZ25NYW5hZ2VyLmV2YWx1YXRlQ2FtcGFpZ25zKGRhdGUpO1xyXG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdCkuY2F0Y2goXHJcblx0XHRcdFx0ZnVuY3Rpb24gT25SZWplY3RlZChlcnJSZWFzb24pIHtcclxuXHRcdFx0XHRcdHJlamVjdChlcnJSZWFzb24pO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvYWQgYW5kIGZpbHRlciB0aGUgY2FtcGFpZ25zIGRlZmluaXRpb25zIGFuZCBzdGF0ZXNcclxuXHQgKi9cclxuXHRwcml2YXRlIGxvYWRBbmRGaWx0ZXJDYW1wYWlnbkRhdGFBc3luYyhjdXJyZW50RGF0ZTogRGF0ZSwgY2hhbm5lbFR5cGVzOiBHb3Zlcm5lZENoYW5uZWxUeXBlW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGN1cnJlbnREYXRlID0gY3VycmVudERhdGUgPyBjdXJyZW50RGF0ZSA6IG5ldyBEYXRlKCk7XHJcblx0XHRsZXQgbG9hZGVkRGVmaW5pdGlvbnM6IENhbXBhaWduRGVmaW5pdGlvbltdID0gW107XHJcblx0XHRjb25zdCBwcm9taXNlcyA9IFtdO1xyXG5cclxuXHRcdGNvbnN0IHVzZXJGYWN0c1Byb21pc2UgPSB0aGlzLnVzZXJGYWN0c1Byb3ZpZGVyICYmIHRoaXMudXNlckZhY3RzUHJvdmlkZXIubG9hZEFzeW5jKCkgYXMgUHJvbWlzZTxJVXNlckZhY3RbXT47XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpIG9mIE9iamVjdC5rZXlzKHRoaXMuZGVmaW5pdGlvblByb3ZpZGVycykpIHtcclxuXHRcdFx0Y29uc3QgcHJvdmlkZXIgPSB0aGlzLmRlZmluaXRpb25Qcm92aWRlcnNbaV07XHJcblx0XHRcdGxldCBwcm9taXNlOiBhbnkgPSBwcm92aWRlciAmJiBwcm92aWRlci5sb2FkQXN5bmMoKTtcclxuXHRcdFx0aWYgKCFpc05PVShwcm9taXNlKSkge1xyXG5cdFx0XHRcdC8vIFByb21pc2UuYWxsIGZhaWxzIGV2ZW4gaWYgb25lIHByb21pc2UgZmFpbHMuXHJcblx0XHRcdFx0Ly8gV2Ugd2FudCB0byBpZ25vcmUgdGhlIHByb21pc2UgdGhhdCBmYWlsZWQgYW5kIGNvbnRpbnVlIHdpdGggdGhlIG9uZXNcclxuXHRcdFx0XHQvLyB0aG9zZSBhcmUgc3VjY2VzZnVsLCBoZW5jZSBvdmVycmlkaW5nIHRoZSBjYXRjaCB0byBhbHdheXMgcmVzb2x2ZS5cclxuXHRcdFx0XHQvLyByZXNwb25zaWJpbGl0eSBvZiBsb2dnaW5nIGZhaWx1cmVzIHNob3VsZCBiZSB3aXRoIHRoZSBwcm92aWRlci5cclxuXHRcdFx0XHRwcm9taXNlID0gcHJvbWlzZS5jYXRjaCgoKSA9PiB7XHJcblx0XHRcdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0NhbXBhaWduTG9hZF9GYWlsZWQoXCJGYWlsZWQgdG8gbG9hZCBmcm9tIGNhbXBhaWduIGRlZmluaXRpb24gcHJvdmlkZXJcIik7XHJcblx0XHRcdFx0XHRQcm9taXNlLnJlc29sdmUoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRwcm9taXNlcy5wdXNoKHByb21pc2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgdGhpc0NhbXBhaWduTWFuYWdlciA9IHRoaXM7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihcclxuXHRcdFx0XHRmdW5jdGlvbiBvbkZ1bGZpbGxlZCh2YWx1ZXMpIHtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgaSBvZiBPYmplY3Qua2V5cyh2YWx1ZXMpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGNhbXBhaWduRGVmaW5pdGlvbnMgPSB2YWx1ZXNbaV07XHJcblx0XHRcdFx0XHRcdGlmIChpc0FycmF5KGNhbXBhaWduRGVmaW5pdGlvbnMpKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIGNhbXBhaWduIGRlZmludGlvbnMgd2l0aCBkdXBsaWNhdGUgY2FtcGFpZ24gSWQnc1xyXG5cdFx0XHRcdFx0XHRcdC8vIEZsb29kZ2F0ZSB3aWxsIGxvYWQgdGhlIGxhc3Qgb25lIGl0IGZvdW5kLiBGaWx0ZXJDYW1wYWlnbkRhdGEgZG9lcyB0aGlzIGZpbHRlcmF0aW9uXHJcblx0XHRcdFx0XHRcdFx0bG9hZGVkRGVmaW5pdGlvbnMgPSBsb2FkZWREZWZpbml0aW9ucy5jb25jYXQoY2FtcGFpZ25EZWZpbml0aW9ucyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjb25zdCBzZXRVc2VyRmFjdHMgPSAodXNlckZhY3RzPzogSVVzZXJGYWN0W10pID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpc0NhbXBhaWduTWFuYWdlci51c2VyRmFjdHMgPSB1c2VyRmFjdHMgfHwgW107XHJcblx0XHRcdFx0XHRcdHRoaXNDYW1wYWlnbk1hbmFnZXIuRmlsdGVyQ2FtcGFpZ25EYXRhKGN1cnJlbnREYXRlLCBjaGFubmVsVHlwZXMsIGxvYWRlZERlZmluaXRpb25zKTtcclxuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHQvLyBCZWZvcmUgZmlsdGVyaW5nIGFuZCBldmFsdWF0aW5nIHRoZSBjYW1wYWlnbiBkZWZpbml0aW9ucyxcclxuXHRcdFx0XHRcdC8vIHdhaXQgdW50aWwgdGhlIHVzZXIgZmFjdHMgYXJlIGxvYWRlZCBhcyB0aGV5IHdpbGwgYmUgdXNlZCBpbiBldmFsdWF0aW5nIGNhbXBhaWduIHNjb3Blc1xyXG5cdFx0XHRcdFx0aWYgKCFpc05PVSh1c2VyRmFjdHNQcm9taXNlKSkge1xyXG5cdFx0XHRcdFx0XHR1c2VyRmFjdHNQcm9taXNlLnRoZW4oKHVzZXJGYWN0czogSVVzZXJGYWN0W10pID0+IHtcclxuXHRcdFx0XHRcdFx0XHRzZXRVc2VyRmFjdHModXNlckZhY3RzKTtcclxuXHRcdFx0XHRcdFx0fSkuY2F0Y2goKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdC8vIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBhcyB1c2VyIGZhY3RzIHByb21pc2Ugd2lsbCBhbHdheXMgYmUgcmVzb2x2ZWQgYnkgdGhlIHVzZXIgZmFjdHMgcHJvdmlkZXJcclxuXHRcdFx0XHRcdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0Vycm9yKFRlbGVtZXRyeUV2ZW50LkZsb29kZ2F0ZS5Vc2VyRmFjdHNMb2FkLkZhaWxlZCwgXCJGYWlsZWQgdG8gbG9hZCBmcm9tIHVzZXIgZmFjdHMgcHJvdmlkZXJcIik7XHJcblx0XHRcdFx0XHRcdFx0c2V0VXNlckZhY3RzKCk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0c2V0VXNlckZhY3RzKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0KS5jYXRjaChcclxuXHRcdFx0XHRmdW5jdGlvbiBPblJlamVjdGVkKGVycm9yKSB7XHJcblx0XHRcdFx0XHQvLyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gYXMgUHJvbWlzZS5hbGwgd2lsbCBhbHdheXMgYmUgcmVzb2x2ZWRcclxuXHRcdFx0XHRcdC8vIGJlY2F1c2Ugb2YgaGFjayBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbi5cclxuXHRcdFx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfQ2FtcGFpZ25Mb2FkX0ZhaWxlZChcIkZhaWxlZCB0byBsb2FkIGZyb20gY2FtcGFpZ24gZGVmaW5pdGlvbiBwcm92aWRlclwiKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGxvYWRGaWx0ZXJDYW1wYWlnbnMoY3VycmVudERhdGU6IERhdGUsIGNoYW5uZWxUeXBlczogR292ZXJuZWRDaGFubmVsVHlwZVtdKTogdm9pZCB7XHJcblx0XHRjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlID8gY3VycmVudERhdGUgOiBuZXcgRGF0ZSgpO1xyXG5cdFx0bGV0IGxvYWRlZERlZmluaXRpb25zOiBDYW1wYWlnbkRlZmluaXRpb25bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaW5kZXggb2YgT2JqZWN0LmtleXModGhpcy5kZWZpbml0aW9uUHJvdmlkZXJzKSkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnN0IGRlZmluaXRpb25zID0gdGhpcy5kZWZpbml0aW9uUHJvdmlkZXJzW2luZGV4XSAmJiB0aGlzLmRlZmluaXRpb25Qcm92aWRlcnNbaW5kZXhdLmxvYWQoKTtcclxuXHRcdFx0XHRpZiAoaXNBcnJheShkZWZpbml0aW9ucykpIHtcclxuXHRcdFx0XHRcdC8vIElmIHRoZXJlIGFyZSBjYW1wYWlnbiBkZWZpbnRpb25zIHdpdGggZHVwbGljYXRlIGNhbXBhaWduIElkJ3NcclxuXHRcdFx0XHRcdC8vIEZsb29kZ2F0ZSB3aWxsIGxvYWQgdGhlIGxhc3Qgb25lIGl0IGZvdW5kLiBGaWx0ZXJDYW1wYWlnbkRhdGEgZG9lcyB0aGlzIGZpbHRlcmF0aW9uXHJcblx0XHRcdFx0XHRsb2FkZWREZWZpbml0aW9ucyA9IGxvYWRlZERlZmluaXRpb25zLmNvbmNhdChkZWZpbml0aW9ucyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRcdC8vIExvZyBlcnJvciwgYnV0IGNvbnRpbnVlIHdpdGggb3RoZXIgcHJvdmlkZXJzXHJcblx0XHRcdFx0Ly8gSXQgc2hvdWxkIGJlIHRoZSByZXNwb25zaWJpbGl0eSBvZiBwcm92aWRlciB0byBsb2cgZGV0YWlsZWQgZXJyb3JzXHJcblx0XHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19DYW1wYWlnbkxvYWRfRmFpbGVkKFwiRmFpbGVkIHRvIGxvYWQgZnJvbSBjYW1wYWlnbiBkZWZpbml0aW9uIHByb3ZpZGVyLiBcIiArIGVycm9yLnRvU3RyaW5nKCkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTG9hZCB0aGUgdXNlciBmYWN0cyBiZWZvcmUgYWxsIHRoZSBjYW1wYWlnbiBkZWZpbml0aW9ucyBhcmUgZXZhbHVhdGVkXHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLnVzZXJGYWN0cyA9ICh0aGlzLnVzZXJGYWN0c1Byb3ZpZGVyICYmIHRoaXMudXNlckZhY3RzUHJvdmlkZXIubG9hZCgpKSB8fCBbXTtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfRXJyb3IoXHJcblx0XHRcdFx0VGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlLlVzZXJGYWN0c0xvYWQuRmFpbGVkLCBcIkZhaWxlZCB0byBsb2FkIGZyb20gdXNlciBmYWN0cyBwcm92aWRlci4gXCIgKyBlcnJvcik7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTG9hZCBmaWx0ZXJlZCBjYW1wYWlnbiBkZWZpbml0aW9uc1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gbG9hZGVkRGVmaW5pdGlvbnMpIHtcclxuXHRcdFx0aWYgKGxvYWRlZERlZmluaXRpb25zLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRjb25zdCBkZWZpbml0aW9uOiBDYW1wYWlnbkRlZmluaXRpb24gPSBsb2FkZWREZWZpbml0aW9uc1trZXldO1xyXG5cclxuXHRcdFx0XHRpZiAoY2hhbm5lbFR5cGVzICYmXHJcblx0XHRcdFx0XHQoY2hhbm5lbFR5cGVzLmluZGV4T2YoZGVmaW5pdGlvbi5nb3Zlcm5lZENoYW5uZWxUeXBlKSA8IDApICYmXHJcblx0XHRcdFx0XHQoZGVmaW5pdGlvbi5idXNpbmVzc0xldmVsICE9PSBCdXNpbmVzc0xldmVsLkNyaXRpY2FsKSkge1xyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgaGVyZSBiZWZvcmUgYWRkaW5nIHRvIGNhbXBhaWduRGVmaW5pdGlvbnMgaW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgZGVmaW5pdGlvbnMgd2l0aCBkaWZmZXJlbnQgbGFuZ3VhZ2Ugc2NvcGVzXHJcblx0XHRcdFx0aWYgKCFDYW1wYWlnbk1hbmFnZXIuaXNDYW1wYWlnbkluU2NvcGUoZGVmaW5pdGlvbiwgY3VycmVudERhdGUsIHRoaXMuZW52aXJvbm1lbnRQcm92aWRlciwgdGhpcy51c2VyRmFjdHNQcm92aWRlcikpIHtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5jYW1wYWlnbkRlZmluaXRpb25zW2RlZmluaXRpb24uY2FtcGFpZ25JZF0gPSBkZWZpbml0aW9uO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkIGFuZCBmaWx0ZXIgdGhlIGNhbXBhaWducyBkZWZpbml0aW9ucyBhbmQgc3RhdGVzXHJcblx0ICovXHJcblx0cHJpdmF0ZSBGaWx0ZXJDYW1wYWlnbkRhdGEoY3VycmVudERhdGU6IERhdGUsIGNoYW5uZWxUeXBlczogR292ZXJuZWRDaGFubmVsVHlwZVtdLCBsb2FkZWREZWZpbml0aW9uczogQ2FtcGFpZ25EZWZpbml0aW9uW10pOiB2b2lkIHtcclxuXHRcdGNvbnN0IGxvYWRlZERlZmluaXRpb25zTWFwOiBJRGljdGlvbmFyeTxDYW1wYWlnbkRlZmluaXRpb24+ID0ge307XHJcblxyXG5cdFx0Ly8gTG9hZCBmaWx0ZXJlZCBjYW1wYWlnbiBkZWZpbml0aW9uc1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gbG9hZGVkRGVmaW5pdGlvbnMpIHtcclxuXHRcdFx0aWYgKGxvYWRlZERlZmluaXRpb25zLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRjb25zdCBkZWZpbml0aW9uOiBDYW1wYWlnbkRlZmluaXRpb24gPSBsb2FkZWREZWZpbml0aW9uc1trZXldO1xyXG5cclxuXHRcdFx0XHRsb2FkZWREZWZpbml0aW9uc01hcFtkZWZpbml0aW9uLmNhbXBhaWduSWRdID0gZGVmaW5pdGlvbjtcclxuXHJcblx0XHRcdFx0aWYgKGNoYW5uZWxUeXBlcyAmJlxyXG5cdFx0XHRcdFx0KGNoYW5uZWxUeXBlcy5pbmRleE9mKGRlZmluaXRpb24uZ292ZXJuZWRDaGFubmVsVHlwZSkgPCAwKSAmJlxyXG5cdFx0XHRcdFx0KGRlZmluaXRpb24uYnVzaW5lc3NMZXZlbCAhPT0gQnVzaW5lc3NMZXZlbC5Dcml0aWNhbCkpIHtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCFDYW1wYWlnbk1hbmFnZXIuaXNDYW1wYWlnbkluU2NvcGUoZGVmaW5pdGlvbiwgY3VycmVudERhdGUsIHRoaXMuZW52aXJvbm1lbnRQcm92aWRlciwgdGhpcy51c2VyRmFjdHNQcm92aWRlcikpIHtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5jYW1wYWlnbkRlZmluaXRpb25zW2RlZmluaXRpb24uY2FtcGFpZ25JZF0gPSBkZWZpbml0aW9uO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTG9hZCBjYW1wYWlnbiBzdGF0ZSwgZmlsdGVyaW5nIG91dCB0aGUgZXhwaXJlZCBkZWZpbml0aW9uc1xyXG5cdFx0Y29uc3QgbG9hZGVkU3RhdGVzOiBDYW1wYWlnblN0YXRlW10gPSB0aGlzLnN0YXRlUHJvdmlkZXIubG9hZCgpO1xyXG5cdFx0Y29uc3Qgc3RhbGVMb2FkZWRTdGF0ZXM6IENhbXBhaWduU3RhdGVbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIGxvYWRlZFN0YXRlcykge1xyXG5cdFx0XHRpZiAobG9hZGVkU3RhdGVzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRjb25zdCBzdGF0ZTogQ2FtcGFpZ25TdGF0ZSA9IGxvYWRlZFN0YXRlc1trZXldO1xyXG5cclxuXHRcdFx0XHRpZiAoIXRoaXMuY2FtcGFpZ25EZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShzdGF0ZS5DYW1wYWlnbklkKSkge1xyXG5cdFx0XHRcdFx0c3RhbGVMb2FkZWRTdGF0ZXMucHVzaChzdGF0ZSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aGlzLmNhbXBhaWduU3RhdGVzW3N0YXRlLkNhbXBhaWduSWRdID0gc3RhdGU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKlxyXG5cdFx0XHQqIFN0YWxlIFN0YXRlIGRhdGEgY2xlYW51cFxyXG5cdFx0XHQqIFN0YXRlIG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAgd2hlbjpcclxuXHRcdFx0KiAxKSBUaGUgY2FtcGFpZ24gaGFzIGV4cGlyZWRcclxuXHRcdFx0KiAyKSBUaGUgY2FtcGFpZ24gaXMgbm8gbG9uZ2VyIHByZXNlbnQgaW4gdGhlIGRlZmluaXRpb25zICh0aGluayBFQ1Mgb3Igb3RoZXIgb3V0YWdlcyBvciB2ZXJ5IG9sZCBleHBpcmF0aW9ucylcclxuXHRcdFx0KiAgICBJbiB0aGlzIGNhc2UgdGhlIHN0YXRlIHNob3VsZCBzdGlsbCBiZSBjbGVhbmVkIHVwIG9uIGl0J3MgcmVlbGVjdGlvbiBkYXRlXHJcblx0XHRcdCogMykgV2hlbiB0aGUgdXNlciBpcyBvdXQgb2Ygc2NvcGUgKGZvciBhbiBvdGhlcndpc2UgYWN0aXZlIGNhbXBhaWduKSBhbmQgaXMgdXAgZm9yIG5vbWluYXRpb25cclxuXHJcblx0XHRcdCogVGhpcyBvcHRpbWl6ZXMgdGhlIHVzZXIgZXhwZXJpZW5jZSBpbiBjYXNlIHRoZSBjYW1wYWlnbiBwb3BzIHVwIG9yIGdldHMgcmVuZXdlZCB3aGVuIHdlIHdvdWxkIGhhdmUgcHJlZmVycmVkIHRoZSB1c2VyIHJlbWFpbiBpbiBjb29sIGRvd25cclxuXHJcblx0XHRcdCogMiYzIGFyZSBiYXNpY2FsbHkgdGhlIHNhbWUsIGFuZCAxIGlzIGEgc3BlY2lhbCBjYXNlIG9wdGltaXphdGlvbiBvbiB0b3Agb2YgMiYzIGZvciBlYXJsaWVyIGNsZWFuIHVwXHJcblxyXG5cdFx0XHQqIFRvIGRvIDIgJiAzLCB3ZSBqdXN0IGxvb2sgYXQgc3RhdGVzIHdpdGggbm8gbWF0Y2hpbmcgZGVmaW5pdGlvbiAoYWZ0ZXIgZmlsdGVyaW5nKSwgYW5kIHJlamVjdCB0aGVtIGlmIHRoZXkgYXJlIHBhc3QgdGhlaXIgbm9taW5hdGlvbiBwZXJpb2RcclxuXHRcdFx0KiBUbyBkbyAxLCB3ZSBqdXN0IG5lZWQgdG8ga2VlcCBhIGxpc3QvaGFzaCBvZiB0aGUgZGVmaW5pdGlvbnMgdGhhdCB3ZSBmaWx0ZXJlZCBvdXQgdGhpcyBsb2FkIGN5Y2xlLCBzcGVjaWZpY2FsbHkgZm9yIGV4cGlyYXRpb24gZGF0ZXMsIGFuZCBieXBhc3NcclxuXHRcdFx0KiB0aGUgY29vbCBkb3duIFwid2FpdFwiIGZvciB0aGVzZSBzcGVjaWZpY2FsbHlcclxuXHJcblx0XHRcdCogRm9yIG5vdywgYWxsb3dpbmcgc29tZSBcImdyYWNlXCIgZm9yIFwibWlzc2luZ1wiL1wiYmxpcHB5XCIgY2FtcGFpZ24gZGVmaW5pdGlvbnMgKGluIGNhc2UgdGhleSBwb3AgaW4gYW5kIG91dCBvZiBFQ1MpIGJ5IGRlZmVycmluZyBtaXNzaW5nXHJcblx0XHRcdCogZGVsZXRpb24gYnkgYSBkZWxheS10aW1lIHNwZWNpZmllZCBieSB0aGUgb3JpZ2luYWwgY2FtcGFpZ24uXHJcblx0XHRcdCovXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBzdGFsZUxvYWRlZFN0YXRlcykge1xyXG5cdFx0XHRpZiAoc3RhbGVMb2FkZWRTdGF0ZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdGNvbnN0IHN0YXRlOiBDYW1wYWlnblN0YXRlID0gc3RhbGVMb2FkZWRTdGF0ZXNba2V5XTtcclxuXHRcdFx0XHRpZiAoIXN0YXRlKSB7XHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnN0IGRlZmluaXRpb246IENhbXBhaWduRGVmaW5pdGlvbiA9IGxvYWRlZERlZmluaXRpb25zTWFwW3N0YXRlLkNhbXBhaWduSWRdO1xyXG5cdFx0XHRcdGxldCBzaG91bGRSZW1vdmUgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0aWYgKCFkZWZpbml0aW9uKSB7XHJcblx0XHRcdFx0XHRpZiAoc3RhdGUuTGFzdE5vbWluYXRpb25UaW1lVXRjLmdldFRpbWUoKSA8PSBVdGlscy5zdWJ0cmFjdFNlY29uZHNXaXRob3V0T3ZlcmZsb3coY3VycmVudERhdGUsIHN0YXRlLkRlbGV0ZUFmdGVyU2Vjb25kc1doZW5TdGFsZSkuZ2V0VGltZSgpKSB7XHJcblx0XHRcdFx0XHRcdHNob3VsZFJlbW92ZSA9IHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIGlmIChDYW1wYWlnbk1hbmFnZXIuaXNTdGF0ZVVwRm9yTm9taW5hdGlvbihzdGF0ZSwgZGVmaW5pdGlvbiwgY3VycmVudERhdGUsIHRoaXMuY3VycmVudEJ1aWxkTnVtYmVyKSkge1xyXG5cdFx0XHRcdFx0c2hvdWxkUmVtb3ZlID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFRoZSBuZXh0IHRpbWUgd2Ugd3JpdGUgdG8gc3RvcmFnZSwgdGhlc2Ugd2lsbCBiZSByZW1vdmVkXHJcblx0XHRcdFx0aWYgKHNob3VsZFJlbW92ZSkge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuY2FtcGFpZ25TdGF0ZXNbc3RhdGUuQ2FtcGFpZ25JZF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBGaWx0ZXIgbG93ZXIgcHJpb3JpdHkgY2FtcGFpZ25zIHRoYXQgYXJlIG9uIHNhbWUgY2hhbm5lbCBhbmQgaGF2ZSBhIG1hdGNoaW5nIHRhZ1xyXG5cdHByaXZhdGUgZ2V0UHJpb3JpdGl6ZWRDYW1wYWlnbnMoKSB7XHJcblx0XHRjb25zdCBwcmlvcml0aXplZENhbXBhaWduczogSURpY3Rpb25hcnk8Q2FtcGFpZ25EZWZpbml0aW9uPiA9IHt9O1xyXG5cclxuXHRcdC8vIGJ1aWxkIDx0YWdJZF9jaGFubmVsLCBjYW1wYWlnbltdPiBtYXBcclxuXHRcdGNvbnN0IG1hdGNoaW5nVGFnQ2FtcGFpZ25zOiBJRGljdGlvbmFyeTxDYW1wYWlnbkRlZmluaXRpb25bXT4gPSB7fTtcclxuXHRcdE9iamVjdC5rZXlzKHRoaXMuY2FtcGFpZ25EZWZpbml0aW9ucyB8fCBbXSkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcblx0XHRcdGNvbnN0IGRlZmluaXRpb246IENhbXBhaWduRGVmaW5pdGlvbiA9IHRoaXMuY2FtcGFpZ25EZWZpbml0aW9uc1trZXldO1xyXG5cdFx0XHRpZiAodGhpcy5jYW1wYWlnblN0YXRlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0Y29uc3Qgc3RhdGU6IENhbXBhaWduU3RhdGUgPSB0aGlzLmNhbXBhaWduU3RhdGVzW2tleV07XHJcblx0XHRcdFx0Ly8gb25seSBhZGQgdGhlIGNhbXBhaWduIGlmIGl0J3Mgbm9taW5hdGVkXHJcblx0XHRcdFx0aWYgKHN0YXRlLklzQ2FuZGlkYXRlKSB7XHJcblx0XHRcdFx0XHRwcmlvcml0aXplZENhbXBhaWduc1trZXldID0gZGVmaW5pdGlvbjtcclxuXHJcblx0XHRcdFx0XHQvLyBpZiB0YWdzIGFyZSBub3QgZGVmaW5lZCwgdXNlIGVtcHR5IHRhZyB0byBmYWxsYmFjayB0byBjaGFubmVsIGxldmVsIGFnZ3JlZ2F0aW9uXHJcblx0XHRcdFx0XHRjb25zdCBkZWZpbml0aW9uVGFncyA9IGRlZmluaXRpb24udGFncyAmJiBkZWZpbml0aW9uLnRhZ3MubGVuZ3RoID4gMCA/IGRlZmluaXRpb24udGFncyA6IFtcIlwiXTtcclxuXHRcdFx0XHRcdGRlZmluaXRpb25UYWdzLmZvckVhY2goKHRhZ0lkKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IG1hcEtleSA9IGAke3RhZ0lkfV8ke2RlZmluaXRpb24uZ292ZXJuZWRDaGFubmVsVHlwZX1gO1xyXG5cdFx0XHRcdFx0XHRtYXRjaGluZ1RhZ0NhbXBhaWduc1ttYXBLZXldID0gbWF0Y2hpbmdUYWdDYW1wYWlnbnNbbWFwS2V5XSB8fCBbXTtcclxuXHRcdFx0XHRcdFx0bWF0Y2hpbmdUYWdDYW1wYWlnbnNbbWFwS2V5XS5wdXNoKGRlZmluaXRpb24pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyByZW1vdmUgbG93ZXIgcHJpb3JpdHkgY2FtcGFpZ25zXHJcblx0XHRPYmplY3Qua2V5cyhtYXRjaGluZ1RhZ0NhbXBhaWducykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBwcmlvcml0eSBmaWx0ZXIgaXMgZW5hYmxlZCBmb3Igc3RhbmRhcmQgY2hhbm5lbFxyXG5cdFx0XHRpZiAoIXRoaXMuaXNQcmlvcml0eUVuYWJsZWQgJiYga2V5LmVuZHNXaXRoKGBfJHtHb3Zlcm5lZENoYW5uZWxUeXBlLlN0YW5kYXJkfWApKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBkZWZpbml0aW9ucyA9IG1hdGNoaW5nVGFnQ2FtcGFpZ25zW2tleV07XHJcblx0XHRcdGlmIChkZWZpbml0aW9ucy5sZW5ndGggPD0gMSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gR2V0IGRlZmluaXRpb24gdGhhdCBoYXMgbWF4IHByaW9yaXR5IHZhbHVlICgwL251bGwvdW5kZWZpbmVkIGhhcyBoaWdoZXN0IHByaW9pcnR5KVxyXG5cdFx0XHRjb25zdCBbbWF4UHJpb3JpdHlEZWZpbml0aW9uLCBoYXNMb3dlclByaW9yaXR5RGVmaW5pdGlvbnNdID0gVXRpbHMuZmluZEhpZ2hlc3RQcmlvcml0eURlZmluaXRpb24oZGVmaW5pdGlvbnMpO1xyXG5cclxuXHRcdFx0Y29uc3QgbWF4UHJpb3JpdHkgPSBtYXhQcmlvcml0eURlZmluaXRpb24ucHJpbWFyeVByaW9yaXR5ID8/IDA7XHJcblx0XHRcdGlmICghaGFzTG93ZXJQcmlvcml0eURlZmluaXRpb25zKSB7XHJcblx0XHRcdFx0Ly8gbm90aGluZyB0byBmaWx0ZXIgYmVjYXVzZSBhbGwgcHJpb3JpdGllcyBhcmUgdGhlIHNhbWVcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGRlbGV0ZSBsb3dlciBwcmlvcml0eSBjYW1wYWlnbnMgd2hpbGUgcHJlc2VydmluZyBhbGwgdGhlIG1hdGNoaW5nIGhpZ2hlciBwcmlvcml0eSBpdGVtc1xyXG5cdFx0XHRkZWZpbml0aW9ucy5mb3JFYWNoKChjdXJyZW50KSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY3VycmVudFByaW9yaXR5ID0gY3VycmVudC5wcmltYXJ5UHJpb3JpdHk7XHJcblxyXG5cdFx0XHRcdC8vIGZvciBtc28gY29tcGF0YWJpbGl0eSBpZ25vcmUgY2FtcGFpZ25zIHdpdGhvdXQgcHJpb3JpdHkgc2V0IHNvIHRoYXQgdGhleSBhcmUgYWx3YXlzIGNvbnNpZGVyZWRcclxuXHRcdFx0XHRpZiAoIWlzTk9VKGN1cnJlbnQucHJpbWFyeVByaW9yaXR5KSAmJiBjdXJyZW50UHJpb3JpdHkgPiBtYXhQcmlvcml0eSkge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIHByaW9yaXRpemVkQ2FtcGFpZ25zW2N1cnJlbnQuY2FtcGFpZ25JZF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBwcmlvcml0aXplZENhbXBhaWducztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdpdmVuIHRoZSBsb2FkZWQgY2FtcGFpZ24gZGVmaW5pdGlvbnMgYW5kIHN0YXRlcyBmcm9tIHByZXZpb3VzIHNlc3Npb25zLCBydW4gYW55dGhpbmcgdXAgZm9yIG5vbWluYXRpb25cclxuXHQgKi9cclxuXHRwcml2YXRlIGV2YWx1YXRlQ2FtcGFpZ25zKGN1cnJlbnREYXRlOiBEYXRlKTogdm9pZCB7XHJcblx0XHQvLyBMb29wIHRocm91Z2ggY2FtcGFpZ25zIGRlZmluaXRpb25zLCBhbmQgdXBkYXRlIHRoZWlyIHN0YXRlIGlmIG5lY2Vzc2FyeVxyXG5cdFx0Y3VycmVudERhdGUgPSBjdXJyZW50RGF0ZSA/IGN1cnJlbnREYXRlIDogbmV3IERhdGUoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNhbXBhaWduRGVmaW5pdGlvbnMpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FtcGFpZ25EZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0Y29uc3QgZGVmaW5pdGlvbjogQ2FtcGFpZ25EZWZpbml0aW9uID0gdGhpcy5jYW1wYWlnbkRlZmluaXRpb25zW2tleV07XHJcblx0XHRcdFx0Y29uc3Qgc3RhdGU6IENhbXBhaWduU3RhdGUgPSB0aGlzLmNhbXBhaWduU3RhdGVzW2RlZmluaXRpb24uY2FtcGFpZ25JZF07XHJcblxyXG5cdFx0XHRcdGlmICghc3RhdGUgfHwgQ2FtcGFpZ25NYW5hZ2VyLmlzU3RhdGVVcEZvck5vbWluYXRpb24oc3RhdGUsIGRlZmluaXRpb24sIGN1cnJlbnREYXRlLCB0aGlzLmN1cnJlbnRCdWlsZE51bWJlcikpIHtcclxuXHRcdFx0XHRcdGxldCBsYXN0U3VydmV5SWQ6IHN0cmluZyA9IHN0YXRlID8gc3RhdGUuTGFzdFN1cnZleUlkIDogXCJcIjtcclxuXHRcdFx0XHRcdGxldCBsYXN0U3VydmV5U3RhcnRUaW1lOiBEYXRlID0gc3RhdGUgPyBzdGF0ZS5MYXN0U3VydmV5U3RhcnRUaW1lVXRjIDogZ2V0RGlzdGFudFBhc3QoKTtcclxuXHRcdFx0XHRcdGxldCBsYXN0U3VydmV5RXhwaXJhdGlvblRpbWU6IERhdGUgPSBzdGF0ZSA/IHN0YXRlLkxhc3RTdXJ2ZXlFeHBpcmF0aW9uVGltZVV0YyA6IGdldERpc3RhbnRQYXN0KCk7XHJcblx0XHRcdFx0XHRjb25zdCBsYXN0U3VydmV5QWN0aXZhdGVkVGltZTogRGF0ZSA9IHN0YXRlID8gc3RhdGUuTGFzdFN1cnZleUFjdGl2YXRlZFRpbWVVdGMgOiBnZXREaXN0YW50UGFzdCgpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFzdENvb2xkb3duRW5kVGltZVV0YzogRGF0ZSA9IHN0YXRlID8gc3RhdGUuTGFzdENvb2xkb3duRW5kVGltZVV0YyA6IGdldERpc3RhbnRQYXN0KCk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gUnVuIHRoZSBub21pbmF0aW9uXHJcblx0XHRcdFx0XHRjb25zdCBpc0NhbmRpZGF0ZTogYm9vbGVhbiA9IChzdGF0ZSAmJiBzdGF0ZS5Gb3JjZUNhbmRpZGFjeSkgfHwgZGVmaW5pdGlvbi5ub21pbmF0aW9uU2NoZW1lLmV2YWx1YXRlTm9taW5hdGlvblJ1bGVzKCk7XHJcblx0XHRcdFx0XHRpZiAoaXNDYW5kaWRhdGUpIHtcclxuXHRcdFx0XHRcdFx0Ly8gTWFrZSBuZXcgc3VydmV5IHByb3BlcnRpZXMgZm9yIHRoZSBuZXh0IGNhbGwgdG8gZ2V0IHRoZSBhY3RpdmUgc3VydmV5c1xyXG5cdFx0XHRcdFx0XHRsYXN0U3VydmV5SWQgPSBVdGlscy5ndWlkKCk7XHJcblx0XHRcdFx0XHRcdGxhc3RTdXJ2ZXlTdGFydFRpbWUgPSBkZWZpbml0aW9uLm5vbWluYXRpb25TY2hlbWUuY2FsY3VsYXRlU3VydmV5U3RhcnRUaW1lRnJvbURhdGUoY3VycmVudERhdGUpO1xyXG5cdFx0XHRcdFx0XHRsYXN0U3VydmV5RXhwaXJhdGlvblRpbWUgPSBkZWZpbml0aW9uLm5vbWluYXRpb25TY2hlbWUuY2FsY3VsYXRlU3VydmV5RXhwaXJhdGlvblRpbWVGcm9tU3VydmV5U3RhcnRUaW1lKGxhc3RTdXJ2ZXlTdGFydFRpbWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGNvbnN0IG5ld1N0YXRlOiBDYW1wYWlnblN0YXRlID0gbmV3IENhbXBhaWduU3RhdGUoXHJcblx0XHRcdFx0XHRcdGRlZmluaXRpb24uY2FtcGFpZ25JZCxcclxuXHRcdFx0XHRcdFx0Y3VycmVudERhdGUsXHJcblx0XHRcdFx0XHRcdHRoaXMuY3VycmVudEJ1aWxkTnVtYmVyLFxyXG5cdFx0XHRcdFx0XHRkZWZpbml0aW9uLm5vbWluYXRpb25TY2hlbWUuZ2V0QWN0aXZlU3VydmV5VGltZUludGVydmFsU2Vjb25kcygpLFxyXG5cdFx0XHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRcdFx0aXNDYW5kaWRhdGUsXHJcblx0XHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRsYXN0U3VydmV5QWN0aXZhdGVkVGltZSxcclxuXHRcdFx0XHRcdFx0bGFzdFN1cnZleUlkLFxyXG5cdFx0XHRcdFx0XHRsYXN0U3VydmV5U3RhcnRUaW1lLFxyXG5cdFx0XHRcdFx0XHRsYXN0U3VydmV5RXhwaXJhdGlvblRpbWUsXHJcblx0XHRcdFx0XHRcdGxhc3RDb29sZG93bkVuZFRpbWVVdGMsXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdC8vIFNhdmUgdGhlIG5ldyBzdGF0ZSB0byBvdXIgbG9jYWwgY2FjaGVcclxuXHRcdFx0XHRcdHRoaXMuY2FtcGFpZ25TdGF0ZXNbbmV3U3RhdGUuQ2FtcGFpZ25JZF0gPSBuZXdTdGF0ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbmVlZFJlZnJlc2hTdXJ2ZXlEZWZpbml0aW9ucygpOiBib29sZWFuIHtcclxuXHRcdGlmICghdGhpcy5sYXN0Q2FtcGFpZ25SZWZyZXNoVGltZSkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIEZpbHRlckNhbXBhaWduc09uUmVzdGFydChjdXJyZW50RGF0ZTogRGF0ZSwgY2hhbm5lbFR5cGVzOiBHb3Zlcm5lZENoYW5uZWxUeXBlW10pOiB2b2lkIHtcclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMuY2FtcGFpZ25EZWZpbml0aW9ucykge1xyXG5cdFx0XHRpZiAodGhpcy5jYW1wYWlnbkRlZmluaXRpb25zLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRjb25zdCBkZWZpbml0aW9uOiBDYW1wYWlnbkRlZmluaXRpb24gPSB0aGlzLmNhbXBhaWduRGVmaW5pdGlvbnNba2V5XTtcclxuXHJcblx0XHRcdFx0aWYgKGNoYW5uZWxUeXBlcyAmJlxyXG5cdFx0XHRcdFx0KGNoYW5uZWxUeXBlcy5pbmRleE9mKGRlZmluaXRpb24uZ292ZXJuZWRDaGFubmVsVHlwZSkgPCAwKSAmJlxyXG5cdFx0XHRcdFx0KGRlZmluaXRpb24uYnVzaW5lc3NMZXZlbCAhPT0gQnVzaW5lc3NMZXZlbC5Dcml0aWNhbCkpIHtcclxuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLmNhbXBhaWduRGVmaW5pdGlvbnNbZGVmaW5pdGlvbi5jYW1wYWlnbklkXTtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKCFDYW1wYWlnbk1hbmFnZXIuaXNDYW1wYWlnbkluU2NvcGUoZGVmaW5pdGlvbiwgY3VycmVudERhdGUsIHRoaXMuZW52aXJvbm1lbnRQcm92aWRlciwgdGhpcy51c2VyRmFjdHNQcm92aWRlcikpIHtcclxuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLmNhbXBhaWduRGVmaW5pdGlvbnNbZGVmaW5pdGlvbi5jYW1wYWlnbklkXTtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9hZCBhbmQgZmlsdGVyIHRoZSBjYW1wYWlnbnMgZGVmaW5pdGlvbnMgYW5kIHN0YXRlc1xyXG5cdCAqL1xyXG5cdHByaXZhdGUgTG9hZEZpbHRlckNhbXBhaWduU3RhdGVzKGN1cnJlbnREYXRlOiBEYXRlKTogdm9pZCB7XHJcblx0XHQvLyBMb2FkIGNhbXBhaWduIHN0YXRlLCBmaWx0ZXJpbmcgb3V0IHRoZSBleHBpcmVkIGRlZmluaXRpb25zXHJcblx0XHRjb25zdCBsb2FkZWRTdGF0ZXM6IENhbXBhaWduU3RhdGVbXSA9IHRoaXMuc3RhdGVQcm92aWRlci5sb2FkKCk7XHJcblx0XHRjb25zdCBzdGFsZUxvYWRlZFN0YXRlczogQ2FtcGFpZ25TdGF0ZVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gbG9hZGVkU3RhdGVzKSB7XHJcblx0XHRcdGlmIChsb2FkZWRTdGF0ZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdGNvbnN0IHN0YXRlOiBDYW1wYWlnblN0YXRlID0gbG9hZGVkU3RhdGVzW2tleV07XHJcblxyXG5cdFx0XHRcdGlmICghdGhpcy5jYW1wYWlnbkRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHN0YXRlLkNhbXBhaWduSWQpKSB7XHJcblx0XHRcdFx0XHRzdGFsZUxvYWRlZFN0YXRlcy5wdXNoKHN0YXRlKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHRoaXMuY2FtcGFpZ25TdGF0ZXNbc3RhdGUuQ2FtcGFpZ25JZF0gPSBzdGF0ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8qXHJcblx0XHQgKiBTdGFsZSBTdGF0ZSBkYXRhIGNsZWFudXBcclxuXHRcdCAqIFN0YXRlIG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAgd2hlbjpcclxuXHRcdCAqIDEpIFRoZSBjYW1wYWlnbiBoYXMgZXhwaXJlZFxyXG5cdFx0ICogMikgVGhlIGNhbXBhaWduIGlzIG5vIGxvbmdlciBwcmVzZW50IGluIHRoZSBkZWZpbml0aW9ucyAodGhpbmsgRUNTIG9yIG90aGVyIG91dGFnZXMgb3IgdmVyeSBvbGQgZXhwaXJhdGlvbnMpXHJcblx0XHQgKiAgICBJbiB0aGlzIGNhc2UgdGhlIHN0YXRlIHNob3VsZCBzdGlsbCBiZSBjbGVhbmVkIHVwIG9uIGl0J3MgcmVlbGVjdGlvbiBkYXRlXHJcblx0XHQgKiAzKSBXaGVuIHRoZSB1c2VyIGlzIG91dCBvZiBzY29wZSAoZm9yIGFuIG90aGVyd2lzZSBhY3RpdmUgY2FtcGFpZ24pIGFuZCBpcyB1cCBmb3Igbm9taW5hdGlvblxyXG5cclxuXHRcdCAqIFRoaXMgb3B0aW1pemVzIHRoZSB1c2VyIGV4cGVyaWVuY2UgaW4gY2FzZSB0aGUgY2FtcGFpZ24gcG9wcyB1cCBvciBnZXRzIHJlbmV3ZWQgd2hlbiB3ZSB3b3VsZCBoYXZlIHByZWZlcnJlZCB0aGUgdXNlciByZW1haW4gaW4gY29vbCBkb3duXHJcblxyXG5cdFx0ICogMiYzIGFyZSBiYXNpY2FsbHkgdGhlIHNhbWUsIGFuZCAxIGlzIGEgc3BlY2lhbCBjYXNlIG9wdGltaXphdGlvbiBvbiB0b3Agb2YgMiYzIGZvciBlYXJsaWVyIGNsZWFuIHVwXHJcblxyXG5cdFx0ICogVG8gZG8gMiAmIDMsIHdlIGp1c3QgbG9vayBhdCBzdGF0ZXMgd2l0aCBubyBtYXRjaGluZyBkZWZpbml0aW9uIChhZnRlciBmaWx0ZXJpbmcpLCBhbmQgcmVqZWN0IHRoZW0gaWYgdGhleSBhcmUgcGFzdCB0aGVpciBub21pbmF0aW9uIHBlcmlvZFxyXG5cdFx0ICogVG8gZG8gMSwgd2UganVzdCBuZWVkIHRvIGtlZXAgYSBsaXN0L2hhc2ggb2YgdGhlIGRlZmluaXRpb25zIHRoYXQgd2UgZmlsdGVyZWQgb3V0IHRoaXMgbG9hZCBjeWNsZSwgc3BlY2lmaWNhbGx5IGZvciBleHBpcmF0aW9uIGRhdGVzLCBhbmQgYnlwYXNzXHJcblx0XHQgKiB0aGUgY29vbCBkb3duIFwid2FpdFwiIGZvciB0aGVzZSBzcGVjaWZpY2FsbHlcclxuXHJcblx0XHQgKiBGb3Igbm93LCBhbGxvd2luZyBzb21lIFwiZ3JhY2VcIiBmb3IgXCJtaXNzaW5nXCIvXCJibGlwcHlcIiBjYW1wYWlnbiBkZWZpbml0aW9ucyAoaW4gY2FzZSB0aGV5IHBvcCBpbiBhbmQgb3V0IG9mIEVDUykgYnkgZGVmZXJyaW5nIG1pc3NpbmdcclxuXHRcdCAqIGRlbGV0aW9uIGJ5IGEgZGVsYXktdGltZSBzcGVjaWZpZWQgYnkgdGhlIG9yaWdpbmFsIGNhbXBhaWduLlxyXG5cdFx0ICovXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBzdGFsZUxvYWRlZFN0YXRlcykge1xyXG5cdFx0XHRpZiAoc3RhbGVMb2FkZWRTdGF0ZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdGNvbnN0IHN0YXRlOiBDYW1wYWlnblN0YXRlID0gc3RhbGVMb2FkZWRTdGF0ZXNba2V5XTtcclxuXHRcdFx0XHRpZiAoIXN0YXRlKSB7XHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnN0IGRlZmluaXRpb246IENhbXBhaWduRGVmaW5pdGlvbiA9IHRoaXMuY2FtcGFpZ25EZWZpbml0aW9uc1tzdGF0ZS5DYW1wYWlnbklkXTtcclxuXHRcdFx0XHRsZXQgc2hvdWxkUmVtb3ZlID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdGlmICghZGVmaW5pdGlvbikge1xyXG5cdFx0XHRcdFx0aWYgKHN0YXRlLkxhc3ROb21pbmF0aW9uVGltZVV0Yy5nZXRUaW1lKCkgPD0gVXRpbHMuc3VidHJhY3RTZWNvbmRzV2l0aG91dE92ZXJmbG93KGN1cnJlbnREYXRlLCBzdGF0ZS5EZWxldGVBZnRlclNlY29uZHNXaGVuU3RhbGUpLmdldFRpbWUoKSkge1xyXG5cdFx0XHRcdFx0XHRzaG91bGRSZW1vdmUgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSBpZiAoQ2FtcGFpZ25NYW5hZ2VyLmlzU3RhdGVVcEZvck5vbWluYXRpb24oc3RhdGUsIGRlZmluaXRpb24sIGN1cnJlbnREYXRlLCB0aGlzLmN1cnJlbnRCdWlsZE51bWJlcikpIHtcclxuXHRcdFx0XHRcdHNob3VsZFJlbW92ZSA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBUaGUgbmV4dCB0aW1lIHdlIHdyaXRlIHRvIHN0b3JhZ2UsIHRoZXNlIHdpbGwgYmUgcmVtb3ZlZFxyXG5cdFx0XHRcdGlmIChzaG91bGRSZW1vdmUpIHtcclxuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLmNhbXBhaWduU3RhdGVzW3N0YXRlLkNhbXBhaWduSWRdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Campaign/CampaignManager.js\n')},"../FloodgateCore/dist/src/Campaign/CampaignStateProvider.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.FileBasedCampaignStateProvider = exports.HostBasedCampaignStateProvider = exports.CampaignStateProviderFactory = exports.CampaignState = void 0;\nvar IFloodgateStorageProvider = __webpack_require__(/*! ../Api/IFloodgateStorageProvider */ "../FloodgateCore/dist/src/Api/IFloodgateStorageProvider.js");\nvar Constants_1 = __webpack_require__(/*! ../Constants */ "../FloodgateCore/dist/src/Constants.js");\nvar FloodgateEngine_1 = __webpack_require__(/*! ../FloodgateEngine */ "../FloodgateCore/dist/src/FloodgateEngine.js");\nvar StateProviderHelpers = __webpack_require__(/*! ../StateProviderHelpers */ "../FloodgateCore/dist/src/StateProviderHelpers.js");\nvar Utils = __webpack_require__(/*! ../Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar FileType = IFloodgateStorageProvider.FileType;\nvar getDistantPast = Utils.getDistantPast, isBoolean = Utils.isBoolean, isDate = Utils.isDate, isNOU = Utils.isNOU, isString = Utils.isString, isUtcDatetimeString = Utils.isUtcDatetimeString, stringToDate = Utils.stringToDate;\nvar CampaignState = /** @class */ (function () {\n    function CampaignState(campaignId, lastNominationTime, lastNominationBuildNumber, deleteAfterSecondsWhenStale, ForceCandidacy, isCandidate, didCandidateTriggerSurvey, lastSurveyActivatedTime, lastSurveyId, lastSurveyStartTime, lastSurveyExpirationTime, lastCooldownEndTimeUtc) {\n        this.CampaignId = campaignId;\n        this.LastNominationTimeUtc = lastNominationTime;\n        this.LastNominationBuildNumber = lastNominationBuildNumber;\n        this.DeleteAfterSecondsWhenStale = deleteAfterSecondsWhenStale;\n        this.ForceCandidacy = ForceCandidacy;\n        this.IsCandidate = isCandidate;\n        this.DidCandidateTriggerSurvey = didCandidateTriggerSurvey;\n        this.LastSurveyActivatedTimeUtc = lastSurveyActivatedTime;\n        this.LastSurveyId = lastSurveyId;\n        this.LastSurveyStartTimeUtc = lastSurveyStartTime;\n        this.LastSurveyExpirationTimeUtc = lastSurveyExpirationTime;\n        this.LastCooldownEndTimeUtc = lastCooldownEndTimeUtc;\n        if (!this.validate()) {\n            throw new Error("Constructor arguments are not valid");\n        }\n    }\n    /**\n     * Method to deserialize a JSON object to class object\n     * @param input: JSON object\n     * Returns class object\n     */\n    CampaignState.deserialize = function (input) {\n        var result;\n        if (!input) {\n            return null;\n        }\n        try {\n            result = new CampaignState(input.CampaignId, input.LastNominationTimeUtc, input.LastNominationBuildNumber, input.DeleteAfterSecondsWhenStale, false, // ForceCandidacy\n            input.IsCandidate, input.DidCandidateTriggerSurvey, input.LastSurveyActivatedTimeUtc, input.LastSurveyId, input.LastSurveyStartTimeUtc, input.LastSurveyExpirationTimeUtc, input.LastCooldownEndTimeUtc);\n        }\n        catch (e) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.CampaignState.Deserialize.Failed, { ErrorMessage: e.toString() });\n            return null;\n        }\n        return result;\n    };\n    CampaignState.prototype.validate = function () {\n        if (!this.CampaignId || !isString(this.CampaignId)) {\n            return false;\n        }\n        if (isNOU(this.LastNominationBuildNumber)\n            || !isString(this.LastNominationBuildNumber)) {\n            return false;\n        }\n        if (!Utils.isNumber(this.DeleteAfterSecondsWhenStale) || this.DeleteAfterSecondsWhenStale < 0) {\n            return false;\n        }\n        if (!isBoolean(this.IsCandidate) || !isBoolean(this.DidCandidateTriggerSurvey)) {\n            return false;\n        }\n        if (this.IsCandidate) {\n            // Disallow the following null\'s if isCandidate == true\n            if (isNOU(this.LastSurveyStartTimeUtc) || isNOU(this.LastSurveyExpirationTimeUtc)) {\n                return false;\n            }\n            // LastSurveyId could be ""\n            if (!isString(this.LastSurveyId)) {\n                return false;\n            }\n        }\n        if (this.DidCandidateTriggerSurvey) {\n            // Disallow the following null\'s if didCandidateTriggerSurvey == true\n            if (isNOU(this.LastSurveyActivatedTimeUtc)) {\n                return false;\n            }\n        }\n        if (isNOU(this.LastSurveyId)) {\n            this.LastSurveyId = "";\n        }\n        else if (!isString(this.LastSurveyId)) {\n            return false;\n        }\n        // LastNominationTime does not allow null\n        if (isUtcDatetimeString(this.LastNominationTimeUtc)) {\n            this.LastNominationTimeUtc = stringToDate(this.LastNominationTimeUtc);\n            // invalidate if it\'s not a Date object\n        }\n        else if (!isDate(this.LastNominationTimeUtc)) {\n            return false;\n        }\n        // Set value to distance past if value not provided\n        if (isNOU(this.LastSurveyActivatedTimeUtc)) {\n            this.LastSurveyActivatedTimeUtc = getDistantPast();\n            // check if it\'s UTC date time string, possibly coming from deserialize method\n        }\n        else if (isUtcDatetimeString(this.LastSurveyActivatedTimeUtc)) {\n            this.LastSurveyActivatedTimeUtc = stringToDate(this.LastSurveyActivatedTimeUtc);\n            // invalidate if it\'s not a Date object\n        }\n        else if (!isDate(this.LastSurveyActivatedTimeUtc)) {\n            return false;\n        }\n        // Set value to distance past if value not provided\n        if (isNOU(this.LastSurveyStartTimeUtc)) {\n            this.LastSurveyStartTimeUtc = getDistantPast();\n            // check if it\'s string, possibly coming from deserialize method\n        }\n        else if (isUtcDatetimeString(this.LastSurveyStartTimeUtc)) {\n            this.LastSurveyStartTimeUtc = stringToDate(this.LastSurveyStartTimeUtc);\n            // invalidate if it\'s not a Date object\n        }\n        else if (!isDate(this.LastSurveyStartTimeUtc)) {\n            return false;\n        }\n        // Set value to distance past if value not provided\n        if (isNOU(this.LastSurveyExpirationTimeUtc)) {\n            this.LastSurveyExpirationTimeUtc = getDistantPast();\n            // check if it\'s string, possibly coming from deserialize method\n        }\n        else if (isUtcDatetimeString(this.LastSurveyExpirationTimeUtc)) {\n            this.LastSurveyExpirationTimeUtc = stringToDate(this.LastSurveyExpirationTimeUtc);\n        }\n        else if (!isDate(this.LastSurveyExpirationTimeUtc)) {\n            return false;\n        }\n        // Set value to distance past if value not provided\n        if (isNOU(this.LastCooldownEndTimeUtc)) {\n            this.LastCooldownEndTimeUtc = getDistantPast();\n            // check if it\'s string, possibly coming from deserialize method\n        }\n        else if (isUtcDatetimeString(this.LastCooldownEndTimeUtc)) {\n            this.LastCooldownEndTimeUtc = stringToDate(this.LastCooldownEndTimeUtc);\n        }\n        else if (!isDate(this.LastCooldownEndTimeUtc)) {\n            return false;\n        }\n        return true;\n    };\n    /**\n     * Record that the current survey was taken on this date\n     *\n     * @param date date\n     * @param cooldownSeconds number\n     */\n    CampaignState.prototype.markCurrentSurveyTakenOnDate = function (date, cooldownSeconds, isSurveyComplete) {\n        this.DidCandidateTriggerSurvey = isSurveyComplete;\n        this.LastSurveyActivatedTimeUtc = date != null ? date : new Date();\n        this.LastCooldownEndTimeUtc = Utils.addSecondsWithoutOverflow(this.LastSurveyActivatedTimeUtc, cooldownSeconds);\n    };\n    CampaignState.prototype.getCooldownStartDate = function () {\n        if (!this.IsCandidate) {\n            return this.LastNominationTimeUtc;\n        }\n        if (this.DidCandidateTriggerSurvey) {\n            return this.LastSurveyActivatedTimeUtc;\n        }\n        // In practice this wil be equal to lastNominationTime, but\n        // distribution models like a ramp effectively cause us to\n        // shift our "effective nomination date" forward with the survey start date\n        return this.LastSurveyStartTimeUtc;\n    };\n    return CampaignState;\n}());\nexports.CampaignState = CampaignState;\nvar CampaignStateProviderFactory = /** @class */ (function () {\n    function CampaignStateProviderFactory() {\n    }\n    CampaignStateProviderFactory.make = function (fileBasedStorage, hostBasedStorage) {\n        if (hostBasedStorage) {\n            return new HostBasedCampaignStateProvider(fileBasedStorage, hostBasedStorage);\n        }\n        return new FileBasedCampaignStateProvider(fileBasedStorage);\n    };\n    return CampaignStateProviderFactory;\n}());\nexports.CampaignStateProviderFactory = CampaignStateProviderFactory;\n/**\n * Class representing what is stored in the file.\n */\nvar FileData = /** @class */ (function () {\n    function FileData() {\n    }\n    return FileData;\n}());\nvar HostBasedCampaignStateProvider = /** @class */ (function () {\n    function HostBasedCampaignStateProvider(fileBasedStorage, hostBasedStorage) {\n        if (!hostBasedStorage) {\n            throw new Error("host-based storage must not be null");\n        }\n        this.hostBasedStorage = hostBasedStorage;\n        // file-based provider is optional\n        if (fileBasedStorage) {\n            this.fileBasedStateProvider = new FileBasedCampaignStateProvider(fileBasedStorage);\n        }\n    }\n    // @Override\n    HostBasedCampaignStateProvider.prototype.load = function () {\n        var statesFromHost = this.getStatesFromHost();\n        var statesFromFile;\n        if (this.fileBasedStateProvider) {\n            statesFromFile = this.fileBasedStateProvider.load();\n        }\n        var StateCollections = StateProviderHelpers.MergeAndUpdateCampaignStates(statesFromFile, statesFromHost);\n        return StateCollections.find(0 /* Merged */);\n    };\n    // @Override\n    HostBasedCampaignStateProvider.prototype.save = function (campaignStates) {\n        var _this = this;\n        if (!campaignStates) {\n            return;\n        }\n        var statesFromHost = this.getStatesFromHost();\n        var StateCollections = StateProviderHelpers.MergeAndUpdateCampaignStates(campaignStates, statesFromHost);\n        var toBeUpdatedStates = StateCollections.find(1 /* ToBeUpdated */);\n        var mergedStates = StateCollections.find(0 /* Merged */);\n        // write delta_data to host\n        if (toBeUpdatedStates) {\n            toBeUpdatedStates.forEach(function (state) {\n                var stateValue = StateProviderHelpers.makeSettingItemValue(JSON.stringify(state));\n                _this.hostBasedStorage.upsertSettingItem(FileType[FileType.CampaignStates], state.CampaignId, stateValue);\n            });\n        }\n        // Write merged data to File\n        if (this.fileBasedStateProvider) {\n            this.fileBasedStateProvider.save(mergedStates);\n        }\n    };\n    HostBasedCampaignStateProvider.prototype.getStatesFromHost = function () {\n        var states = [];\n        var settings = this.hostBasedStorage.readSettingList(FileType[FileType.CampaignStates]);\n        for (var key in settings) {\n            if (!settings.hasOwnProperty(key)) {\n                continue;\n            }\n            var value = settings[key];\n            var dataString = StateProviderHelpers.extractSettingItemValueSubString(value);\n            var itemObject = {};\n            try {\n                itemObject = JSON.parse(dataString);\n                var newState = CampaignState.deserialize(itemObject);\n                if (newState) {\n                    states.push(newState);\n                }\n            }\n            catch (e) {\n                FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.HostBasedCampaignStateProvider.GetStatesFromHost.Failed, { ErrorMessage: "Json parsing/deserializing failed. " + e.toString() + ".  Input:" + dataString });\n            }\n        }\n        return states;\n    };\n    return HostBasedCampaignStateProvider;\n}());\nexports.HostBasedCampaignStateProvider = HostBasedCampaignStateProvider;\nvar FileBasedCampaignStateProvider = /** @class */ (function () {\n    function FileBasedCampaignStateProvider(storage) {\n        if (!storage) {\n            throw new Error("storage must not be null");\n        }\n        this.storage = storage;\n    }\n    // @Override\n    FileBasedCampaignStateProvider.prototype.load = function () {\n        var readString = this.storage.read(FileType.CampaignStates);\n        if (!readString) {\n            return [];\n        }\n        var fileData;\n        try {\n            fileData = JSON.parse(readString);\n            var result_1 = [];\n            if (fileData && fileData.CampaignStates) {\n                fileData.CampaignStates.forEach(function (state) {\n                    var newState = CampaignState.deserialize(state);\n                    if (newState) {\n                        result_1.push(newState);\n                    }\n                });\n            }\n            return result_1;\n        }\n        catch (e) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FileBasedCampaignStateProvider.Load.Failed, { ErrorMessage: "Json parsing/deserializing failed. " + e.toString() + ".  Input:" + readString });\n            return [];\n        }\n    };\n    // @Override\n    FileBasedCampaignStateProvider.prototype.save = function (campaignStates) {\n        if (!campaignStates) {\n            return;\n        }\n        var fileData = new FileData();\n        fileData.CampaignStates = campaignStates;\n        var writeString = JSON.stringify(fileData);\n        this.storage.write(FileType.CampaignStates, writeString);\n    };\n    return FileBasedCampaignStateProvider;\n}());\nexports.FileBasedCampaignStateProvider = FileBasedCampaignStateProvider;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0NhbXBhaWduL0NhbXBhaWduU3RhdGVQcm92aWRlci50cz9iZTAxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLDBKQUE4RTtBQUM5RSxvR0FBOEM7QUFDOUMsc0hBQXFEO0FBQ3JELG1JQUFnRTtBQUNoRSxzRkFBa0M7QUFDbEMsSUFBTyxRQUFRLEdBQUcseUJBQXlCLENBQUMsUUFBUSxDQUFDO0FBRzdDLGtCQUFjLEdBQTRFLEtBQUssZUFBakYsRUFBRSxTQUFTLEdBQWlFLEtBQUssVUFBdEUsRUFBRSxNQUFNLEdBQXlELEtBQUssT0FBOUQsRUFBRSxLQUFLLEdBQWtELEtBQUssTUFBdkQsRUFBRSxRQUFRLEdBQXdDLEtBQUssU0FBN0MsRUFBRSxtQkFBbUIsR0FBbUIsS0FBSyxvQkFBeEIsRUFBRSxZQUFZLEdBQUssS0FBSyxhQUFWLENBQVc7QUFFeEc7SUE0RkMsdUJBQW1CLFVBQWtCLEVBQUUsa0JBQXdCLEVBQUUseUJBQWlDLEVBQUUsMkJBQW1DLEVBQ3RJLGNBQXVCLEVBQUUsV0FBb0IsRUFBRSx5QkFBa0MsRUFBRSx1QkFBNkIsRUFDaEgsWUFBb0IsRUFBRSxtQkFBeUIsRUFBRSx3QkFBOEIsRUFBRSxzQkFBNEI7UUFDN0csSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGtCQUFrQixDQUFDO1FBQ2hELElBQUksQ0FBQyx5QkFBeUIsR0FBRyx5QkFBeUIsQ0FBQztRQUMzRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsMkJBQTJCLENBQUM7UUFDL0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO1FBQzNELElBQUksQ0FBQywwQkFBMEIsR0FBRyx1QkFBdUIsQ0FBQztRQUMxRCxJQUFJLENBQUMsWUFBWSxHQUFH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QUFTLENBQzdDLDBCQUFjLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDekQsRUFBRSxZQUFZLEVBQUUscUNBQXFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLFdBQVcsR0FBRyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3BHLE9BQU8sRUFBRSxDQUFDO1NBQ1Y7SUFDRixDQUFDO0lBRUQsWUFBWTtJQUNMLDZDQUFJLEdBQVgsVUFBWSxjQUErQjtRQUMxQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3BCLE9BQU87U0FDUDtRQUVELElBQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDaEMsUUFBUSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDekMsSUFBTSxXQUFXLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRixxQ0FBQztBQUFELENBQUM7QUFyRFksd0VBQThCIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvQ2FtcGFpZ24vQ2FtcGFpZ25TdGF0ZVByb3ZpZGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUZsb29kZ2F0ZVNldHRpbmcgfSBmcm9tIFwiLi4vQXBpL0lGbG9vZGdhdGVTZXR0aW5nXCI7XHJcbmltcG9ydCB7IElGbG9vZGdhdGVTZXR0aW5nU3RvcmFnZUNhbGxiYWNrIH0gZnJvbSBcIi4uL0FwaS9JRmxvb2RnYXRlU2V0dGluZ1N0b3JhZ2VDYWxsYmFja1wiO1xyXG5pbXBvcnQgKiBhcyBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyIGZyb20gXCIuLi9BcGkvSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlclwiO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlFdmVudCB9IGZyb20gXCIuLi9Db25zdGFudHNcIjtcclxuaW1wb3J0IHsgRmxvb2RnYXRlRW5naW5lIH0gZnJvbSBcIi4uL0Zsb29kZ2F0ZUVuZ2luZVwiO1xyXG5pbXBvcnQgKiBhcyBTdGF0ZVByb3ZpZGVySGVscGVycyBmcm9tIFwiLi4vU3RhdGVQcm92aWRlckhlbHBlcnNcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uL1V0aWxzXCI7XHJcbmltcG9ydCBGaWxlVHlwZSA9IElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIuRmlsZVR5cGU7XHJcbmltcG9ydCBTdGF0ZUxpc3RUeXBlID0gU3RhdGVQcm92aWRlckhlbHBlcnMuU3RhdGVMaXN0VHlwZTtcclxuXHJcbmNvbnN0IHsgZ2V0RGlzdGFudFBhc3QsIGlzQm9vbGVhbiwgaXNEYXRlLCBpc05PVSwgaXNTdHJpbmcsIGlzVXRjRGF0ZXRpbWVTdHJpbmcsIHN0cmluZ1RvRGF0ZSB9ID0gVXRpbHM7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtcGFpZ25TdGF0ZSB7XHJcblx0LyoqXHJcblx0ICogTWV0aG9kIHRvIGRlc2VyaWFsaXplIGEgSlNPTiBvYmplY3QgdG8gY2xhc3Mgb2JqZWN0XHJcblx0ICogQHBhcmFtIGlucHV0OiBKU09OIG9iamVjdFxyXG5cdCAqIFJldHVybnMgY2xhc3Mgb2JqZWN0XHJcblx0ICovXHJcblx0cHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogQ2FtcGFpZ25TdGF0ZSB7XHJcblx0XHRsZXQgcmVzdWx0OiBDYW1wYWlnblN0YXRlO1xyXG5cclxuXHRcdGlmICghaW5wdXQpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0cmVzdWx0ID0gbmV3IENhbXBhaWduU3RhdGUoXHJcblx0XHRcdFx0aW5wdXQuQ2FtcGFpZ25JZCxcclxuXHRcdFx0XHRpbnB1dC5MYXN0Tm9taW5hdGlvblRpbWVVdGMsXHJcblx0XHRcdFx0aW5wdXQuTGFzdE5vbWluYXRpb25CdWlsZE51bWJlcixcclxuXHRcdFx0XHRpbnB1dC5EZWxldGVBZnRlclNlY29uZHNXaGVuU3RhbGUsXHJcblx0XHRcdFx0ZmFsc2UsIC8vIEZvcmNlQ2FuZGlkYWN5XHJcblx0XHRcdFx0aW5wdXQuSXNDYW5kaWRhdGUsXHJcblx0XHRcdFx0aW5wdXQuRGlkQ2FuZGlkYXRlVHJpZ2dlclN1cnZleSxcclxuXHRcdFx0XHRpbnB1dC5MYXN0U3VydmV5QWN0aXZhdGVkVGltZVV0YyxcclxuXHRcdFx0XHRpbnB1dC5MYXN0U3VydmV5SWQsXHJcblx0XHRcdFx0aW5wdXQuTGFzdFN1cnZleVN0YXJ0VGltZVV0YyxcclxuXHRcdFx0XHRpbnB1dC5MYXN0U3VydmV5RXhwaXJhdGlvblRpbWVVdGMsXHJcblx0XHRcdFx0aW5wdXQuTGFzdENvb2xkb3duRW5kVGltZVV0YyxcclxuXHRcdFx0KTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FdmVudChUZWxlbWV0cnlFdmVudC5DYW1wYWlnblN0YXRlLkRlc2VyaWFsaXplLkZhaWxlZCwgeyBFcnJvck1lc3NhZ2U6IGUudG9TdHJpbmcoKSB9KTtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIFRoZSBDYW1wYWlnbiB0byB3aGljaCB0aGlzIHN0YXRlIGNvcnJlc3BvbmRzXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiQ2FtcGFpZ25JZFwiKVxyXG5cdHB1YmxpYyBDYW1wYWlnbklkOiBzdHJpbmc7XHJcblxyXG5cdC8vIFRoZSBsYXN0IHRpbWUgdGhlIGNhbmRpZGFjeSB3YXMgZXZhbHVhdGVkXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiTGFzdE5vbWluYXRpb25UaW1lVXRjXCIpXHJcblx0cHVibGljIExhc3ROb21pbmF0aW9uVGltZVV0YzogRGF0ZTtcclxuXHJcblx0Ly8gVGhlIGJ1aWxkIG51bWJlciBmcm9tIHRoZSBsYXN0IHRpbWUgdGhlIGNhbmRpZGFjeSB3YXMgZXZhbHVhdGVkXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiTGFzdE5vbWluYXRpb25CdWlsZE51bWJlclwiKVxyXG5cdHB1YmxpYyBMYXN0Tm9taW5hdGlvbkJ1aWxkTnVtYmVyOiBzdHJpbmc7XHJcblxyXG5cdC8vIEFtb3VudCBvZiB0aW1lIHRvIGRlbGF5IGNsZWFudXAgb2YgdGhpcyBzdGF0ZSBmcm9tIHN0b3JhZ2UsIHdoZW4gaXQncyBjYW1wYWlnbiBkZWZpbml0aW9uIGlzIG5vIGxvbmdlciBwcmVzZW50XHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiRGVsZXRlQWZ0ZXJTZWNvbmRzV2hlblN0YWxlXCIpXHJcblx0cHVibGljIERlbGV0ZUFmdGVyU2Vjb25kc1doZW5TdGFsZTogbnVtYmVyO1xyXG5cclxuXHQvLyBNYW51YWwgc2V0dGluZyB0aGF0IGNhbiBiZSB1c2VkIHRvIGZvcmNlIHRoaXMgY2xpZW50IHRvIGJlIGEgY2FuZGlkYXRlIGZvciB0aGlzIGNhbXBhaWduLiBOb3QgcGVyc2lzdGVkIHRvIHRoZSBmaWxlLlxyXG5cdHB1YmxpYyBGb3JjZUNhbmRpZGFjeTogYm9vbGVhbjtcclxuXHJcblx0Ly8gV2hldGhlciBvciBub3QgdGhlIHVzZXIgaXMgY3VycmVudGx5IGEgY2FuZGlkYXRlIG9yIGFudGktY2FuZGlkYXRlXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiSXNDYW5kaWRhdGVcIilcclxuXHRwdWJsaWMgSXNDYW5kaWRhdGU6IGJvb2xlYW47XHJcblxyXG5cdC8vIFdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIHRyaWdnZXJlZCBhIHN1cnZleSB3aGVuIHRoZXkgYXJlIGEgQ2FuZGlkYXRlLlxyXG5cdC8vIElmIGlzQ2FuZGlkYXRlIGlzIGZhbHNlLCB0aGVuIHRoaXMgdmFsdWUgaXMgbWVhbmluZ2xlc3MuXHJcblx0Ly8gSWYgaXNDYW5kaWRhdGUgaXMgdHJ1ZSwgdGhlbiB0aGlzIGlzIHVzZWQgdG8gcGljayBhIGRpZmZlcmVudCBjYW1wYWlnbiBjb29sZG93biB0aW1lXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiRGlkQ2FuZGlkYXRlVHJpZ2dlclN1cnZleVwiKVxyXG5cdHB1YmxpYyBEaWRDYW5kaWRhdGVUcmlnZ2VyU3VydmV5OiBib29sZWFuO1xyXG5cclxuXHQvLyBUaGUgZGF0ZSB0aGUgbGFzdCBzdXJ2ZXkgd2FzIGFjdGl2YXRlZFxyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIkxhc3RTdXJ2ZXlBY3RpdmF0ZWRUaW1lVXRjXCIpXHJcblx0cHVibGljIExhc3RTdXJ2ZXlBY3RpdmF0ZWRUaW1lVXRjOiBEYXRlO1xyXG5cclxuXHQvLyByZWdpb24gUHJvcGVydGllcyBvZiB0aGUgbW9zdCByZWNlbnRseSBnZW5lcmF0ZWQgc3VydmV5Llx1MDAxMFxyXG5cclxuXHQvLyBXaGVuIGlzQ2FuZGlkYXRlID09IHRydWUgZm9yIHRoZSBjdXJyZW50IGVsZWN0aW9uIHRpbWUsIHRoaXMgaXMgdXNlZCB0byByZWdlbmVyYXRlIHRoZSBzYW1lIFN1cnZleSBkZWZpbml0aW9uXHJcblx0Ly8gZWFjaCB0aW1lIHdlIGFyZSBpbnZva2VkXHJcblx0Ly8gQ29uc2lkZXI6IFB1dHRpbmcgdGhpcyBpbiBpdHMgb3duIHN1YmNsYXNzXHJcblxyXG5cdC8vIFRoZSBzdXJ2ZXlJZCBmb3IgdGhlIG1vc3QgcmVjZW50bHkgZ2VuZXJhdGVkIHN1cnZleSBpbiB0aGlzIGNhbXBhaWduIChjYW4gZGlmZmVyIGZyb20gY2FtcGFpZ25JZCwgYW5kIGlzXHJcblx0Ly8gdXNlZCB0byBndWFyYW50ZWUgYSBnaXZlbiBzdXJ2ZXkgaXMgc2hvd24gb25jZSlcclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJMYXN0U3VydmV5SWRcIilcclxuXHRwdWJsaWMgTGFzdFN1cnZleUlkOiBzdHJpbmc7XHJcblxyXG5cdC8vIFRoZSBzdGFydCB0aW1lIG9mIHRoZSBtb3N0IHJlY2VudGx5IGdlbmVyYXRlZCBzdXJ2ZXlcclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJMYXN0U3VydmV5U3RhcnRUaW1lVXRjXCIpXHJcblx0cHVibGljIExhc3RTdXJ2ZXlTdGFydFRpbWVVdGM6IERhdGU7XHJcblxyXG5cdC8vIFRoZSBleHBpcmF0aW9uIHRpbWUgb2YgdGhlIG1vc3QgcmVjZW50bHkgZ2VuZXJhdGVkIHN1cnZleVxyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIkxhc3RTdXJ2ZXlFeHBpcmF0aW9uVGltZVV0Y1wiKVxyXG5cdHB1YmxpYyBMYXN0U3VydmV5RXhwaXJhdGlvblRpbWVVdGM6IERhdGU7XHJcblxyXG5cdC8vIFRoZSBjb29sZG93biBlbmQgdGltZSBvZiB0aGUgbW9zdCByZWNlbnRseSBnZW5lcmF0ZWQgc3VydmV5XHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiTGFzdENvb2xkb3duRW5kVGltZVV0Y1wiKVxyXG5cdHB1YmxpYyBMYXN0Q29vbGRvd25FbmRUaW1lVXRjOiBEYXRlO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3IoY2FtcGFpZ25JZDogc3RyaW5nLCBsYXN0Tm9taW5hdGlvblRpbWU6IERhdGUsIGxhc3ROb21pbmF0aW9uQnVpbGROdW1iZXI6IHN0cmluZywgZGVsZXRlQWZ0ZXJTZWNvbmRzV2hlblN0YWxlOiBudW1iZXIsXHJcblx0XHRGb3JjZUNhbmRpZGFjeTogYm9vbGVhbiwgaXNDYW5kaWRhdGU6IGJvb2xlYW4sIGRpZENhbmRpZGF0ZVRyaWdnZXJTdXJ2ZXk6IGJvb2xlYW4sIGxhc3RTdXJ2ZXlBY3RpdmF0ZWRUaW1lOiBEYXRlLFxyXG5cdFx0bGFzdFN1cnZleUlkOiBzdHJpbmcsIGxhc3RTdXJ2ZXlTdGFydFRpbWU6IERhdGUsIGxhc3RTdXJ2ZXlFeHBpcmF0aW9uVGltZTogRGF0ZSwgbGFzdENvb2xkb3duRW5kVGltZVV0YzogRGF0ZSkge1xyXG5cdFx0dGhpcy5DYW1wYWlnbklkID0gY2FtcGFpZ25JZDtcclxuXHRcdHRoaXMuTGFzdE5vbWluYXRpb25UaW1lVXRjID0gbGFzdE5vbWluYXRpb25UaW1lO1xyXG5cdFx0dGhpcy5MYXN0Tm9taW5hdGlvbkJ1aWxkTnVtYmVyID0gbGFzdE5vbWluYXRpb25CdWlsZE51bWJlcjtcclxuXHRcdHRoaXMuRGVsZXRlQWZ0ZXJTZWNvbmRzV2hlblN0YWxlID0gZGVsZXRlQWZ0ZXJTZWNvbmRzV2hlblN0YWxlO1xyXG5cdFx0dGhpcy5Gb3JjZUNhbmRpZGFjeSA9IEZvcmNlQ2FuZGlkYWN5O1xyXG5cdFx0dGhpcy5Jc0NhbmRpZGF0ZSA9IGlzQ2FuZGlkYXRlO1xyXG5cdFx0dGhpcy5EaWRDYW5kaWRhdGVUcmlnZ2VyU3VydmV5ID0gZGlkQ2FuZGlkYXRlVHJpZ2dlclN1cnZleTtcclxuXHRcdHRoaXMuTGFzdFN1cnZleUFjdGl2YXRlZFRpbWVVdGMgPSBsYXN0U3VydmV5QWN0aXZhdGVkVGltZTtcclxuXHRcdHRoaXMuTGFzdFN1cnZleUlkID0gbGFzdFN1cnZleUlkO1xyXG5cdFx0dGhpcy5MYXN0U3VydmV5U3RhcnRUaW1lVXRjID0gbGFzdFN1cnZleVN0YXJ0VGltZTtcclxuXHRcdHRoaXMuTGFzdFN1cnZleUV4cGlyYXRpb25UaW1lVXRjID0gbGFzdFN1cnZleUV4cGlyYXRpb25UaW1lO1xyXG5cdFx0dGhpcy5MYXN0Q29vbGRvd25FbmRUaW1lVXRjID0gbGFzdENvb2xkb3duRW5kVGltZVV0YztcclxuXHJcblx0XHRpZiAoIXRoaXMudmFsaWRhdGUoKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb25zdHJ1Y3RvciBhcmd1bWVudHMgYXJlIG5vdCB2YWxpZFwiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHRcdGlmICghdGhpcy5DYW1wYWlnbklkIHx8ICFpc1N0cmluZyh0aGlzLkNhbXBhaWduSWQpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNOT1UodGhpcy5MYXN0Tm9taW5hdGlvbkJ1aWxkTnVtYmVyKVxyXG5cdFx0XHR8fCAhaXNTdHJpbmcodGhpcy5MYXN0Tm9taW5hdGlvbkJ1aWxkTnVtYmVyKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFVdGlscy5pc051bWJlcih0aGlzLkRlbGV0ZUFmdGVyU2Vjb25kc1doZW5TdGFsZSkgfHwgdGhpcy5EZWxldGVBZnRlclNlY29uZHNXaGVuU3RhbGUgPCAwKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWlzQm9vbGVhbih0aGlzLklzQ2FuZGlkYXRlKSB8fCAhaXNCb29sZWFuKHRoaXMuRGlkQ2FuZGlkYXRlVHJpZ2dlclN1cnZleSkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLklzQ2FuZGlkYXRlKSB7XHJcblx0XHRcdC8vIERpc2FsbG93IHRoZSBmb2xsb3dpbmcgbnVsbCdzIGlmIGlzQ2FuZGlkYXRlID09IHRydWVcclxuXHRcdFx0aWYgKGlzTk9VKHRoaXMuTGFzdFN1cnZleVN0YXJ0VGltZVV0YykgfHwgaXNOT1UodGhpcy5MYXN0U3VydmV5RXhwaXJhdGlvblRpbWVVdGMpKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBMYXN0U3VydmV5SWQgY291bGQgYmUgXCJcIlxyXG5cdFx0XHRpZiAoIWlzU3RyaW5nKHRoaXMuTGFzdFN1cnZleUlkKSkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLkRpZENhbmRpZGF0ZVRyaWdnZXJTdXJ2ZXkpIHtcclxuXHRcdFx0Ly8gRGlzYWxsb3cgdGhlIGZvbGxvd2luZyBudWxsJ3MgaWYgZGlkQ2FuZGlkYXRlVHJpZ2dlclN1cnZleSA9PSB0cnVlXHJcblx0XHRcdGlmIChpc05PVSh0aGlzLkxhc3RTdXJ2ZXlBY3RpdmF0ZWRUaW1lVXRjKSkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpc05PVSh0aGlzLkxhc3RTdXJ2ZXlJZCkpIHtcclxuXHRcdFx0dGhpcy5MYXN0U3VydmV5SWQgPSBcIlwiO1xyXG5cdFx0fSBlbHNlIGlmICghaXNTdHJpbmcodGhpcy5MYXN0U3VydmV5SWQpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBMYXN0Tm9taW5hdGlvblRpbWUgZG9lcyBub3QgYWxsb3cgbnVsbFxyXG5cdFx0aWYgKGlzVXRjRGF0ZXRpbWVTdHJpbmcodGhpcy5MYXN0Tm9taW5hdGlvblRpbWVVdGMpKSB7XHJcblx0XHRcdHRoaXMuTGFzdE5vbWluYXRpb25UaW1lVXRjID0gc3RyaW5nVG9EYXRlKHRoaXMuTGFzdE5vbWluYXRpb25UaW1lVXRjKTtcclxuXHRcdC8vIGludmFsaWRhdGUgaWYgaXQncyBub3QgYSBEYXRlIG9iamVjdFxyXG5cdFx0fSBlbHNlIGlmICghaXNEYXRlKHRoaXMuTGFzdE5vbWluYXRpb25UaW1lVXRjKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU2V0IHZhbHVlIHRvIGRpc3RhbmNlIHBhc3QgaWYgdmFsdWUgbm90IHByb3ZpZGVkXHJcblx0XHRpZiAoaXNOT1UodGhpcy5MYXN0U3VydmV5QWN0aXZhdGVkVGltZVV0YykpIHtcclxuXHRcdFx0dGhpcy5MYXN0U3VydmV5QWN0aXZhdGVkVGltZVV0YyA9IGdldERpc3RhbnRQYXN0KCk7XHJcblx0XHQvLyBjaGVjayBpZiBpdCdzIFVUQyBkYXRlIHRpbWUgc3RyaW5nLCBwb3NzaWJseSBjb21pbmcgZnJvbSBkZXNlcmlhbGl6ZSBtZXRob2RcclxuXHRcdH0gZWxzZSBpZiAoaXNVdGNEYXRldGltZVN0cmluZyh0aGlzLkxhc3RTdXJ2ZXlBY3RpdmF0ZWRUaW1lVXRjKSkge1xyXG5cdFx0XHR0aGlzLkxhc3RTdXJ2ZXlBY3RpdmF0ZWRUaW1lVXRjID0gc3RyaW5nVG9EYXRlKHRoaXMuTGFzdFN1cnZleUFjdGl2YXRlZFRpbWVVdGMpO1xyXG5cdFx0Ly8gaW52YWxpZGF0ZSBpZiBpdCdzIG5vdCBhIERhdGUgb2JqZWN0XHJcblx0XHR9IGVsc2UgaWYgKCFpc0RhdGUodGhpcy5MYXN0U3VydmV5QWN0aXZhdGVkVGltZVV0YykpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNldCB2YWx1ZSB0byBkaXN0YW5jZSBwYXN0IGlmIHZhbHVlIG5vdCBwcm92aWRlZFxyXG5cdFx0aWYgKGlzTk9VKHRoaXMuTGFzdFN1cnZleVN0YXJ0VGltZVV0YykpIHtcclxuXHRcdFx0dGhpcy5MYXN0U3VydmV5U3RhcnRUaW1lVXRjID0gZ2V0RGlzdGFudFBhc3QoKTtcclxuXHRcdC8vIGNoZWNrIGlmIGl0J3Mgc3RyaW5nLCBwb3NzaWJseSBjb21pbmcgZnJvbSBkZXNlcmlhbGl6ZSBtZXRob2RcclxuXHRcdH0gZWxzZSBpZiAoaXNVdGNEYXRldGltZVN0cmluZyh0aGlzLkxhc3RTdXJ2ZXlTdGFydFRpbWVVdGMpKSB7XHJcblx0XHRcdHRoaXMuTGFzdFN1cnZleVN0YXJ0VGltZVV0YyA9IHN0cmluZ1RvRGF0ZSh0aGlzLkxhc3RTdXJ2ZXlTdGFydFRpbWVVdGMpO1xyXG5cdFx0Ly8gaW52YWxpZGF0ZSBpZiBpdCdzIG5vdCBhIERhdGUgb2JqZWN0XHJcblx0XHR9IGVsc2UgaWYgKCFpc0RhdGUodGhpcy5MYXN0U3VydmV5U3RhcnRUaW1lVXRjKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU2V0IHZhbHVlIHRvIGRpc3RhbmNlIHBhc3QgaWYgdmFsdWUgbm90IHByb3ZpZGVkXHJcblx0XHRpZiAoaXNOT1UodGhpcy5MYXN0U3VydmV5RXhwaXJhdGlvblRpbWVVdGMpKSB7XHJcblx0XHRcdHRoaXMuTGFzdFN1cnZleUV4cGlyYXRpb25UaW1lVXRjID0gZ2V0RGlzdGFudFBhc3QoKTtcclxuXHRcdC8vIGNoZWNrIGlmIGl0J3Mgc3RyaW5nLCBwb3NzaWJseSBjb21pbmcgZnJvbSBkZXNlcmlhbGl6ZSBtZXRob2RcclxuXHRcdH0gZWxzZSBpZiAoaXNVdGNEYXRldGltZVN0cmluZyh0aGlzLkxhc3RTdXJ2ZXlFeHBpcmF0aW9uVGltZVV0YykpIHtcclxuXHRcdFx0dGhpcy5MYXN0U3VydmV5RXhwaXJhdGlvblRpbWVVdGMgPSBzdHJpbmdUb0RhdGUodGhpcy5MYXN0U3VydmV5RXhwaXJhdGlvblRpbWVVdGMpO1xyXG5cdFx0fSBlbHNlIGlmICghaXNEYXRlKHRoaXMuTGFzdFN1cnZleUV4cGlyYXRpb25UaW1lVXRjKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU2V0IHZhbHVlIHRvIGRpc3RhbmNlIHBhc3QgaWYgdmFsdWUgbm90IHByb3ZpZGVkXHJcblx0XHRpZiAoaXNOT1UodGhpcy5MYXN0Q29vbGRvd25FbmRUaW1lVXRjKSkge1xyXG5cdFx0XHR0aGlzLkxhc3RDb29sZG93bkVuZFRpbWVVdGMgPSBnZXREaXN0YW50UGFzdCgpO1xyXG5cdFx0Ly8gY2hlY2sgaWYgaXQncyBzdHJpbmcsIHBvc3NpYmx5IGNvbWluZyBmcm9tIGRlc2VyaWFsaXplIG1ldGhvZFxyXG5cdFx0fSBlbHNlIGlmIChpc1V0Y0RhdGV0aW1lU3RyaW5nKHRoaXMuTGFzdENvb2xkb3duRW5kVGltZVV0YykpIHtcclxuXHRcdFx0dGhpcy5MYXN0Q29vbGRvd25FbmRUaW1lVXRjID0gc3RyaW5nVG9EYXRlKHRoaXMuTGFzdENvb2xkb3duRW5kVGltZVV0Yyk7XHJcblx0XHR9IGVsc2UgaWYgKCFpc0RhdGUodGhpcy5MYXN0Q29vbGRvd25FbmRUaW1lVXRjKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWNvcmQgdGhhdCB0aGUgY3VycmVudCBzdXJ2ZXkgd2FzIHRha2VuIG9uIHRoaXMgZGF0ZVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGRhdGUgZGF0ZVxyXG5cdCAqIEBwYXJhbSBjb29sZG93blNlY29uZHMgbnVtYmVyXHJcblx0ICovXHJcblx0cHVibGljIG1hcmtDdXJyZW50U3VydmV5VGFrZW5PbkRhdGUoZGF0ZTogRGF0ZSwgY29vbGRvd25TZWNvbmRzOiBudW1iZXIsIGlzU3VydmV5Q29tcGxldGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuXHRcdHRoaXMuRGlkQ2FuZGlkYXRlVHJpZ2dlclN1cnZleSA9IGlzU3VydmV5Q29tcGxldGU7XHJcblx0XHR0aGlzLkxhc3RTdXJ2ZXlBY3RpdmF0ZWRUaW1lVXRjID0gZGF0ZSAhPSBudWxsID8gZGF0ZSA6IG5ldyBEYXRlKCk7XHJcblx0XHR0aGlzLkxhc3RDb29sZG93bkVuZFRpbWVVdGMgPSBVdGlscy5hZGRTZWNvbmRzV2l0aG91dE92ZXJmbG93KHRoaXMuTGFzdFN1cnZleUFjdGl2YXRlZFRpbWVVdGMsIGNvb2xkb3duU2Vjb25kcyk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0Q29vbGRvd25TdGFydERhdGUoKTogRGF0ZSB7XHJcblx0XHRpZiAoIXRoaXMuSXNDYW5kaWRhdGUpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuTGFzdE5vbWluYXRpb25UaW1lVXRjO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLkRpZENhbmRpZGF0ZVRyaWdnZXJTdXJ2ZXkpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuTGFzdFN1cnZleUFjdGl2YXRlZFRpbWVVdGM7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSW4gcHJhY3RpY2UgdGhpcyB3aWwgYmUgZXF1YWwgdG8gbGFzdE5vbWluYXRpb25UaW1lLCBidXRcclxuXHRcdC8vIGRpc3RyaWJ1dGlvbiBtb2RlbHMgbGlrZSBhIHJhbXAgZWZmZWN0aXZlbHkgY2F1c2UgdXMgdG9cclxuXHRcdC8vIHNoaWZ0IG91ciBcImVmZmVjdGl2ZSBub21pbmF0aW9uIGRhdGVcIiBmb3J3YXJkIHdpdGggdGhlIHN1cnZleSBzdGFydCBkYXRlXHJcblx0XHRyZXR1cm4gdGhpcy5MYXN0U3VydmV5U3RhcnRUaW1lVXRjO1xyXG5cdH1cclxuXHJcblx0Ly8gZW5kcmVnaW9uXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNhbXBhaWduU3RhdGVQcm92aWRlciB7XHJcblx0bG9hZCgpOiBDYW1wYWlnblN0YXRlW107XHJcblxyXG5cdHNhdmUoY2FtcGFpZ25TdGF0ZXM6IENhbXBhaWduU3RhdGVbXSk6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYW1wYWlnblN0YXRlUHJvdmlkZXJGYWN0b3J5IHtcclxuXHRwdWJsaWMgc3RhdGljIG1ha2UoZmlsZUJhc2VkU3RvcmFnZTogSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlcixcclxuXHRcdGhvc3RCYXNlZFN0b3JhZ2U6IElGbG9vZGdhdGVTZXR0aW5nU3RvcmFnZUNhbGxiYWNrKTogSUNhbXBhaWduU3RhdGVQcm92aWRlciB7XHJcblx0XHRpZiAoaG9zdEJhc2VkU3RvcmFnZSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IEhvc3RCYXNlZENhbXBhaWduU3RhdGVQcm92aWRlcihmaWxlQmFzZWRTdG9yYWdlLCBob3N0QmFzZWRTdG9yYWdlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbmV3IEZpbGVCYXNlZENhbXBhaWduU3RhdGVQcm92aWRlcihmaWxlQmFzZWRTdG9yYWdlKTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDbGFzcyByZXByZXNlbnRpbmcgd2hhdCBpcyBzdG9yZWQgaW4gdGhlIGZpbGUuXHJcbiAqL1xyXG5jbGFzcyBGaWxlRGF0YSB7XHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiQ2FtcGFpZ25TdGF0ZXNcIilcclxuXHRwdWJsaWMgQ2FtcGFpZ25TdGF0ZXM6IENhbXBhaWduU3RhdGVbXTtcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBIb3N0QmFzZWRDYW1wYWlnblN0YXRlUHJvdmlkZXIgaW1wbGVtZW50cyBJQ2FtcGFpZ25TdGF0ZVByb3ZpZGVyIHtcclxuXHRwcml2YXRlIGZpbGVCYXNlZFN0YXRlUHJvdmlkZXI6IElDYW1wYWlnblN0YXRlUHJvdmlkZXI7XHJcblx0cHJpdmF0ZSBob3N0QmFzZWRTdG9yYWdlOiBJRmxvb2RnYXRlU2V0dGluZ1N0b3JhZ2VDYWxsYmFjaztcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKGZpbGVCYXNlZFN0b3JhZ2U6IElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIsIGhvc3RCYXNlZFN0b3JhZ2U6IElGbG9vZGdhdGVTZXR0aW5nU3RvcmFnZUNhbGxiYWNrKSB7XHJcblx0XHRpZiAoIWhvc3RCYXNlZFN0b3JhZ2UpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaG9zdC1iYXNlZCBzdG9yYWdlIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5ob3N0QmFzZWRTdG9yYWdlID0gaG9zdEJhc2VkU3RvcmFnZTtcclxuXHJcblx0XHQvLyBmaWxlLWJhc2VkIHByb3ZpZGVyIGlzIG9wdGlvbmFsXHJcblx0XHRpZiAoZmlsZUJhc2VkU3RvcmFnZSkge1xyXG5cdFx0XHR0aGlzLmZpbGVCYXNlZFN0YXRlUHJvdmlkZXIgPSBuZXcgRmlsZUJhc2VkQ2FtcGFpZ25TdGF0ZVByb3ZpZGVyKGZpbGVCYXNlZFN0b3JhZ2UpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGxvYWQoKTogQ2FtcGFpZ25TdGF0ZVtdIHtcclxuXHRcdGNvbnN0IHN0YXRlc0Zyb21Ib3N0OiBDYW1wYWlnblN0YXRlW10gPSB0aGlzLmdldFN0YXRlc0Zyb21Ib3N0KCk7XHJcblxyXG5cdFx0bGV0IHN0YXRlc0Zyb21GaWxlOiBDYW1wYWlnblN0YXRlW107XHJcblx0XHRpZiAodGhpcy5maWxlQmFzZWRTdGF0ZVByb3ZpZGVyKSB7XHJcblx0XHRcdHN0YXRlc0Zyb21GaWxlID0gdGhpcy5maWxlQmFzZWRTdGF0ZVByb3ZpZGVyLmxvYWQoKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBTdGF0ZUNvbGxlY3Rpb25zID0gU3RhdGVQcm92aWRlckhlbHBlcnMuTWVyZ2VBbmRVcGRhdGVDYW1wYWlnblN0YXRlcyhzdGF0ZXNGcm9tRmlsZSwgc3RhdGVzRnJvbUhvc3QpO1xyXG5cdFx0cmV0dXJuIFN0YXRlQ29sbGVjdGlvbnMuZmluZChTdGF0ZUxpc3RUeXBlLk1lcmdlZCk7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgc2F2ZShjYW1wYWlnblN0YXRlczogQ2FtcGFpZ25TdGF0ZVtdKTogdm9pZCB7XHJcblx0XHRpZiAoIWNhbXBhaWduU3RhdGVzKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBzdGF0ZXNGcm9tSG9zdDogQ2FtcGFpZ25TdGF0ZVtdID0gdGhpcy5nZXRTdGF0ZXNGcm9tSG9zdCgpO1xyXG5cdFx0Y29uc3QgU3RhdGVDb2xsZWN0aW9ucyA9IFN0YXRlUHJvdmlkZXJIZWxwZXJzLk1lcmdlQW5kVXBkYXRlQ2FtcGFpZ25TdGF0ZXMoY2FtcGFpZ25TdGF0ZXMsIHN0YXRlc0Zyb21Ib3N0KTtcclxuXHRcdGNvbnN0IHRvQmVVcGRhdGVkU3RhdGVzOiBDYW1wYWlnblN0YXRlW10gPSBTdGF0ZUNvbGxlY3Rpb25zLmZpbmQoU3RhdGVMaXN0VHlwZS5Ub0JlVXBkYXRlZCk7XHJcblx0XHRjb25zdCBtZXJnZWRTdGF0ZXM6IENhbXBhaWduU3RhdGVbXSA9IFN0YXRlQ29sbGVjdGlvbnMuZmluZChTdGF0ZUxpc3RUeXBlLk1lcmdlZCk7XHJcblxyXG5cdFx0Ly8gd3JpdGUgZGVsdGFfZGF0YSB0byBob3N0XHJcblx0XHRpZiAodG9CZVVwZGF0ZWRTdGF0ZXMpIHtcclxuXHRcdFx0dG9CZVVwZGF0ZWRTdGF0ZXMuZm9yRWFjaCgoc3RhdGUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzdGF0ZVZhbHVlOiBzdHJpbmcgPSBTdGF0ZVByb3ZpZGVySGVscGVycy5tYWtlU2V0dGluZ0l0ZW1WYWx1ZShKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xyXG5cdFx0XHRcdHRoaXMuaG9zdEJhc2VkU3RvcmFnZS51cHNlcnRTZXR0aW5nSXRlbShGaWxlVHlwZVtGaWxlVHlwZS5DYW1wYWlnblN0YXRlc10sIHN0YXRlLkNhbXBhaWduSWQsIHN0YXRlVmFsdWUpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBXcml0ZSBtZXJnZWQgZGF0YSB0byBGaWxlXHJcblx0XHRpZiAodGhpcy5maWxlQmFzZWRTdGF0ZVByb3ZpZGVyKSB7XHJcblx0XHRcdHRoaXMuZmlsZUJhc2VkU3RhdGVQcm92aWRlci5zYXZlKG1lcmdlZFN0YXRlcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFN0YXRlc0Zyb21Ib3N0KCk6IENhbXBhaWduU3RhdGVbXSB7XHJcblx0XHRjb25zdCBzdGF0ZXM6IENhbXBhaWduU3RhdGVbXSA9IFtdO1xyXG5cdFx0Y29uc3Qgc2V0dGluZ3M6IElGbG9vZGdhdGVTZXR0aW5nID0gdGhpcy5ob3N0QmFzZWRTdG9yYWdlLnJlYWRTZXR0aW5nTGlzdChGaWxlVHlwZVtGaWxlVHlwZS5DYW1wYWlnblN0YXRlc10pO1xyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHNldHRpbmdzKSB7XHJcblx0XHRcdGlmICghc2V0dGluZ3MuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCB2YWx1ZSA9IHNldHRpbmdzW2tleV07XHJcblx0XHRcdGNvbnN0IGRhdGFTdHJpbmc6IHN0cmluZyA9IFN0YXRlUHJvdmlkZXJIZWxwZXJzLmV4dHJhY3RTZXR0aW5nSXRlbVZhbHVlU3ViU3RyaW5nKHZhbHVlKTtcclxuXHJcblx0XHRcdGxldCBpdGVtT2JqZWN0OiBhbnkgPSB7fTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRpdGVtT2JqZWN0ID0gSlNPTi5wYXJzZShkYXRhU3RyaW5nKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgbmV3U3RhdGU6IENhbXBhaWduU3RhdGUgPSBDYW1wYWlnblN0YXRlLmRlc2VyaWFsaXplKGl0ZW1PYmplY3QpO1xyXG5cdFx0XHRcdGlmIChuZXdTdGF0ZSkge1xyXG5cdFx0XHRcdFx0c3RhdGVzLnB1c2gobmV3U3RhdGUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfRXZlbnQoXHJcblx0XHRcdFx0XHRUZWxlbWV0cnlFdmVudC5Ib3N0QmFzZWRDYW1wYWlnblN0YXRlUHJvdmlkZXIuR2V0U3RhdGVzRnJvbUhvc3QuRmFpbGVkLFxyXG5cdFx0XHRcdFx0eyBFcnJvck1lc3NhZ2U6IFwiSnNvbiBwYXJzaW5nL2Rlc2VyaWFsaXppbmcgZmFpbGVkLiBcIiArIGUudG9TdHJpbmcoKSArIFwiLiAgSW5wdXQ6XCIgKyBkYXRhU3RyaW5nIH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHN0YXRlcztcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlQmFzZWRDYW1wYWlnblN0YXRlUHJvdmlkZXIgaW1wbGVtZW50cyBJQ2FtcGFpZ25TdGF0ZVByb3ZpZGVyIHtcclxuXHRwcml2YXRlIHN0b3JhZ2U6IElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXI7XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihzdG9yYWdlOiBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyKSB7XHJcblx0XHRpZiAoIXN0b3JhZ2UpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic3RvcmFnZSBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc3RvcmFnZSA9IHN0b3JhZ2U7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgbG9hZCgpOiBDYW1wYWlnblN0YXRlW10ge1xyXG5cdFx0Y29uc3QgcmVhZFN0cmluZzogc3RyaW5nID0gdGhpcy5zdG9yYWdlLnJlYWQoRmlsZVR5cGUuQ2FtcGFpZ25TdGF0ZXMpO1xyXG5cdFx0aWYgKCFyZWFkU3RyaW5nKSB7XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZmlsZURhdGE6IEZpbGVEYXRhO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0ZmlsZURhdGEgPSBKU09OLnBhcnNlKHJlYWRTdHJpbmcpO1xyXG5cclxuXHRcdFx0Y29uc3QgcmVzdWx0OiBDYW1wYWlnblN0YXRlW10gPSBbXTtcclxuXHRcdFx0aWYgKGZpbGVEYXRhICYmIGZpbGVEYXRhLkNhbXBhaWduU3RhdGVzKSB7XHJcblx0XHRcdFx0ZmlsZURhdGEuQ2FtcGFpZ25TdGF0ZXMuZm9yRWFjaCgoc3RhdGUpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IG5ld1N0YXRlOiBDYW1wYWlnblN0YXRlID0gQ2FtcGFpZ25TdGF0ZS5kZXNlcmlhbGl6ZShzdGF0ZSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKG5ld1N0YXRlKSB7XHJcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKG5ld1N0YXRlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FdmVudChcclxuXHRcdFx0XHRUZWxlbWV0cnlFdmVudC5GaWxlQmFzZWRDYW1wYWlnblN0YXRlUHJvdmlkZXIuTG9hZC5GYWlsZWQsXHJcblx0XHRcdFx0eyBFcnJvck1lc3NhZ2U6IFwiSnNvbiBwYXJzaW5nL2Rlc2VyaWFsaXppbmcgZmFpbGVkLiBcIiArIGUudG9TdHJpbmcoKSArIFwiLiAgSW5wdXQ6XCIgKyByZWFkU3RyaW5nIH0pO1xyXG5cdFx0XHRyZXR1cm4gW107XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgc2F2ZShjYW1wYWlnblN0YXRlczogQ2FtcGFpZ25TdGF0ZVtdKTogdm9pZCB7XHJcblx0XHRpZiAoIWNhbXBhaWduU3RhdGVzKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBmaWxlRGF0YSA9IG5ldyBGaWxlRGF0YSgpO1xyXG5cdFx0ZmlsZURhdGEuQ2FtcGFpZ25TdGF0ZXMgPSBjYW1wYWlnblN0YXRlcztcclxuXHRcdGNvbnN0IHdyaXRlU3RyaW5nOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShmaWxlRGF0YSk7XHJcblx0XHR0aGlzLnN0b3JhZ2Uud3JpdGUoRmlsZVR5cGUuQ2FtcGFpZ25TdGF0ZXMsIHdyaXRlU3RyaW5nKTtcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Campaign/CampaignStateProvider.js\n')},"../FloodgateCore/dist/src/Campaign/CampaignSurveyFactory.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.CampaignSurveyFactory = void 0;\nvar ISurvey = __webpack_require__(/*! ../Api/ISurvey */ "../FloodgateCore/dist/src/Api/ISurvey.js");\nvar SurveyEvents_1 = __webpack_require__(/*! ../SurveyEvents */ "../FloodgateCore/dist/src/SurveyEvents.js");\nvar SurveyMetadata_1 = __webpack_require__(/*! ../SurveyMetadata */ "../FloodgateCore/dist/src/SurveyMetadata.js");\nvar FpsSurvey = __webpack_require__(/*! ../Surveys/FpsSurvey */ "../FloodgateCore/dist/src/Surveys/FpsSurvey.js");\nvar GenericMessagingSurfaceSurvey = __webpack_require__(/*! ../Surveys/GenericMessagingSurfaceSurvey */ "../FloodgateCore/dist/src/Surveys/GenericMessagingSurfaceSurvey.js");\nvar InterceptSurvey = __webpack_require__(/*! ../Surveys/InterceptSurvey */ "../FloodgateCore/dist/src/Surveys/InterceptSurvey.js");\nvar NlqsSurvey = __webpack_require__(/*! ../Surveys/NlqsSurvey */ "../FloodgateCore/dist/src/Surveys/NlqsSurvey.js");\nvar NpsSurvey = __webpack_require__(/*! ../Surveys/NpsSurvey */ "../FloodgateCore/dist/src/Surveys/NpsSurvey.js");\nvar SurveyDataSource = __webpack_require__(/*! ../Surveys/SurveyDataSource */ "../FloodgateCore/dist/src/Surveys/SurveyDataSource.js");\nvar Utils = __webpack_require__(/*! ../Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar CampaignDefinitionProvider_1 = __webpack_require__(/*! ./CampaignDefinitionProvider */ "../FloodgateCore/dist/src/Campaign/CampaignDefinitionProvider.js");\nvar dateToShortUtcString = Utils.dateToShortUtcString, isNOU = Utils.isNOU;\n/**\n * Contains methods to take a campaign definition + state and generate an ISurvey\n */\nvar CampaignSurveyFactory = /** @class */ (function () {\n    function CampaignSurveyFactory() {\n    }\n    CampaignSurveyFactory.makeSurvey = function (state, definition, stringProvider) {\n        if (!state || !definition || !definition.surveyTemplate || !stringProvider) {\n            return null;\n        }\n        var surveyDataSource = CampaignSurveyFactory.makeSurveyDataSourceData(state, definition);\n        var surveyModel = definition.surveyTemplate;\n        if (surveyModel instanceof CampaignDefinitionProvider_1.CampaignSurveyTemplateNps5PointStatic) {\n            return NpsSurvey.make5Point(surveyDataSource, stringProvider);\n        }\n        else if (surveyModel instanceof CampaignDefinitionProvider_1.CampaignSurveyTemplateNps11PointStatic) {\n            return NpsSurvey.make11Point(surveyDataSource, stringProvider);\n        }\n        else if (surveyModel instanceof CampaignDefinitionProvider_1.CampaignSurveyTemplateFps) {\n            return FpsSurvey.makeFps(surveyDataSource, stringProvider, surveyModel);\n        }\n        else if (surveyModel instanceof CampaignDefinitionProvider_1.CampaignSurveyTemplateNlqs) {\n            return NlqsSurvey.makeNlqs(surveyDataSource, stringProvider, surveyModel);\n        }\n        else if (surveyModel instanceof CampaignDefinitionProvider_1.CampaignSurveyTemplateNps) {\n            return NpsSurvey.makeCustom(surveyDataSource, stringProvider, surveyModel);\n        }\n        else if (surveyModel instanceof CampaignDefinitionProvider_1.CampaignSurveyTemplateGenericMessagingSurface) {\n            return GenericMessagingSurfaceSurvey.makeCustom(surveyDataSource);\n        }\n        else if (surveyModel instanceof CampaignDefinitionProvider_1.CampaignSurveyTemplateIntercept) {\n            return InterceptSurvey.makeIntercept(surveyDataSource, stringProvider, surveyModel);\n        }\n        else {\n            return null;\n        }\n    };\n    CampaignSurveyFactory.makeSurveyDataSourceData = function (state, definition) {\n        if (!state || !definition || !definition.surveyTemplate) {\n            return null;\n        }\n        var surveyModel = definition.surveyTemplate;\n        var surveyData = new SurveyDataSource.SurveyDataSourceData();\n        surveyData.activationEvent = CampaignSurveyFactory.makeEvent(state, surveyModel.activationEvent);\n        surveyData.metadata = CampaignSurveyFactory.makeMetadata(surveyModel.metadata);\n        surveyData.id = state.LastSurveyId;\n        surveyData.backEndIdentifier = state.CampaignId;\n        surveyData.expirationTimeUtc = dateToShortUtcString(state.LastSurveyExpirationTimeUtc);\n        surveyData.governedChannelType = definition.governedChannelType;\n        surveyData.startTimeUtc = dateToShortUtcString(state.LastSurveyStartTimeUtc);\n        surveyData.additionalDataRequested = definition.additionalDataRequested || [];\n        surveyData.launcherType = definition.launcherType || ISurvey.LAUNCHER_TYPE_DEFAULT;\n        surveyData.preferredLaunchType = definition.surveyTemplate.preferredLaunchType || "Default" /* Default */;\n        surveyData.businessLevel = definition.businessLevel;\n        if (!isNOU(surveyModel.maxLaunches)) {\n            surveyData.maxLaunches = surveyModel.maxLaunches;\n        }\n        if (!isNOU(surveyModel.maxLaunchesPerSession)) {\n            surveyData.maxLaunchesPerSession = surveyModel.maxLaunchesPerSession;\n        }\n        return surveyData;\n    };\n    CampaignSurveyFactory.makeCountedActivityEventData = function (eventModel) {\n        if (!eventModel) {\n            return null;\n        }\n        var eventData = new SurveyEvents_1.CountedActivityEventData();\n        eventData.activity = eventModel.activity;\n        eventData.count = eventModel.count;\n        eventData.isAggregate = eventModel.isAggregate;\n        return eventData;\n    };\n    CampaignSurveyFactory.makeCountedActivityEvent = function (state, eventModel) {\n        if (!state || !eventModel) {\n            return null;\n        }\n        var eventData = CampaignSurveyFactory.makeCountedActivityEventData(eventModel);\n        if (!eventData) {\n            return null;\n        }\n        return new SurveyEvents_1.CountedActivityEvent(eventData);\n    };\n    CampaignSurveyFactory.makeCountedActivitySequenceEvent = function (state, eventModel) {\n        if (!state || !eventModel) {\n            return null;\n        }\n        var sequenceEventData = new SurveyEvents_1.CountedActivitySequenceEventData();\n        sequenceEventData.sequence = [];\n        for (var _i = 0, _a = eventModel.sequence; _i < _a.length; _i++) {\n            var event_1 = _a[_i];\n            var eventData = CampaignSurveyFactory.makeCountedActivityEventData(event_1);\n            if (!eventData) {\n                return null;\n            }\n            sequenceEventData.sequence.push(eventData);\n        }\n        return new SurveyEvents_1.CountedActivitySequenceEvent(sequenceEventData);\n    };\n    CampaignSurveyFactory.makeEvent = function (state, eventModel) {\n        if (eventModel instanceof CampaignDefinitionProvider_1.CampaignSurveyEventCountedActivity) {\n            return CampaignSurveyFactory.makeCountedActivityEvent(state, eventModel);\n        }\n        else if (eventModel instanceof CampaignDefinitionProvider_1.CampaignSurveyEventCountedActivitySequence) {\n            return CampaignSurveyFactory.makeCountedActivitySequenceEvent(state, eventModel);\n        }\n        else {\n            return null;\n        }\n    };\n    CampaignSurveyFactory.makeMetadata = function (metadataModel) {\n        if (isNOU(metadataModel) || isNOU(metadataModel.contentMetadata)) {\n            return null;\n        }\n        var metadata = new SurveyMetadata_1.Metadata();\n        metadata.contentMetadata = metadataModel.contentMetadata;\n        return new SurveyMetadata_1.SurveyMetadata(metadata);\n    };\n    return CampaignSurveyFactory;\n}());\nexports.CampaignSurveyFactory = CampaignSurveyFactory;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0NhbXBhaWduL0NhbXBhaWduU3VydmV5RmFjdG9yeS50cz8xZGQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG9HQUEwQztBQUsxQyw2R0FHeUI7QUFDekIsbUhBQTZEO0FBQzdELGtIQUFrRDtBQUNsRCw4S0FBMEY7QUFDMUYsb0lBQThEO0FBQzlELHFIQUFvRDtBQUNwRCxrSEFBa0Q7QUFDbEQsdUlBQWdFO0FBQ2hFLHNGQUFrQztBQUNsQywrSkFLc0M7QUFHOUIsd0JBQW9CLEdBQVksS0FBSyxxQkFBakIsRUFBRSxLQUFLLEdBQUssS0FBSyxNQUFWLENBQVc7QUFFOUM7O0dBRUc7QUFDSDtJQUFBO0lBNkhBLENBQUM7SUE1SGMsZ0NBQVUsR0FBeEIsVUFBeUIsS0FBb0IsRUFBRSxVQUE4QixFQUFFLGNBQXdDO1FBQ3RILElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzNFLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFFRCxJQUFNLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRixJQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDO1FBQzlDLElBQUksV0FBVyxZQUFZLGtFQUFxQyxFQUFFO1lBQ2pFLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUM5RDthQUFNLElBQUksV0FBVyxZQUFZLG1FQUFzQyxFQUFFO1lBQ3pFLE9BQU8sU0FBUyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUMvRDthQUFNLElBQUksV0FBVyxZQUFZLHNEQUF5QixFQUFFO1lBQzVELE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsV0FBVyxDQUFD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LFVBQStCO1FBQzdFLElBQUksVUFBVSxZQUFZLCtEQUFrQyxFQUFFO1lBQzdELE9BQU8scUJBQXFCLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLFVBQWdELENBQUMsQ0FBQztTQUMvRzthQUFNLElBQUksVUFBVSxZQUFZLHVFQUEwQyxFQUFFO1lBQzVFLE9BQU8scUJBQXFCLENBQUMsZ0NBQWdDLENBQUMsS0FBSyxFQUFFLFVBQXdELENBQUMsQ0FBQztTQUMvSDthQUFNO1lBQ04sT0FBTyxJQUFJLENBQUM7U0FDWjtJQUNGLENBQUM7SUFFYyxrQ0FBWSxHQUEzQixVQUE0QixhQUFxQztRQUNoRSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ2pFLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFFRCxJQUFNLFFBQVEsR0FBRyxJQUFJLHlCQUFRLEVBQUUsQ0FBQztRQUNoQyxRQUFRLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQyxlQUFlLENBQUM7UUFFekQsT0FBTyxJQUFJLCtCQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNGLDRCQUFDO0FBQUQsQ0FBQztBQTdIWSxzREFBcUIiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9DYW1wYWlnbi9DYW1wYWlnblN1cnZleUZhY3RvcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIgZnJvbSBcIi4uL0FwaS9JRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXJcIjtcclxuaW1wb3J0ICogYXMgSVN1cnZleSBmcm9tIFwiLi4vQXBpL0lTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgR292ZXJuZWRDaGFubmVsVHlwZSB9IGZyb20gXCIuLi9Hb3Zlcm5lZENoYW5uZWxcIjtcclxuaW1wb3J0ICogYXMgSVN1cnZleUV2ZW50IGZyb20gXCIuLi9JU3VydmV5RXZlbnRcIjtcclxuaW1wb3J0ICogYXMgSVN1cnZleUluZm8gZnJvbSBcIi4uL0lTdXJ2ZXlJbmZvXCI7XHJcbmltcG9ydCB7IElTdXJ2ZXlNZXRhZGF0YSB9IGZyb20gXCIuLi9JU3VydmV5TWV0YWRhdGFcIjtcclxuaW1wb3J0IHtcclxuXHRDb3VudGVkQWN0aXZpdHlFdmVudCwgQ291bnRlZEFjdGl2aXR5RXZlbnREYXRhLCBDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZUV2ZW50LCBDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZUV2ZW50RGF0YSxcclxuXHRJQ291bnRlZEFjdGl2aXR5RXZlbnQsIElDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZUV2ZW50LFxyXG59IGZyb20gXCIuLi9TdXJ2ZXlFdmVudHNcIjtcclxuaW1wb3J0IHsgTWV0YWRhdGEsIFN1cnZleU1ldGFkYXRhIH0gZnJvbSBcIi4uL1N1cnZleU1ldGFkYXRhXCI7XHJcbmltcG9ydCAqIGFzIEZwc1N1cnZleSBmcm9tIFwiLi4vU3VydmV5cy9GcHNTdXJ2ZXlcIjtcclxuaW1wb3J0ICogYXMgR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2VTdXJ2ZXkgZnJvbSBcIi4uL1N1cnZleXMvR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2VTdXJ2ZXlcIjtcclxuaW1wb3J0ICogYXMgSW50ZXJjZXB0U3VydmV5IGZyb20gXCIuLi9TdXJ2ZXlzL0ludGVyY2VwdFN1cnZleVwiO1xyXG5pbXBvcnQgKiBhcyBObHFzU3VydmV5IGZyb20gXCIuLi9TdXJ2ZXlzL05scXNTdXJ2ZXlcIjtcclxuaW1wb3J0ICogYXMgTnBzU3VydmV5IGZyb20gXCIuLi9TdXJ2ZXlzL05wc1N1cnZleVwiO1xyXG5pbXBvcnQgKiBhcyBTdXJ2ZXlEYXRhU291cmNlIGZyb20gXCIuLi9TdXJ2ZXlzL1N1cnZleURhdGFTb3VyY2VcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uL1V0aWxzXCI7XHJcbmltcG9ydCB7XHJcblx0Q2FtcGFpZ25EZWZpbml0aW9uLFxyXG5cdENhbXBhaWduU3VydmV5RXZlbnQsIENhbXBhaWduU3VydmV5RXZlbnRDb3VudGVkQWN0aXZpdHksIENhbXBhaWduU3VydmV5RXZlbnRDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZSwgQ2FtcGFpZ25TdXJ2ZXlNZXRhZGF0YSxcclxuXHRDYW1wYWlnblN1cnZleVRlbXBsYXRlLCBDYW1wYWlnblN1cnZleVRlbXBsYXRlRnBzLCBDYW1wYWlnblN1cnZleVRlbXBsYXRlR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2UsIENhbXBhaWduU3VydmV5VGVtcGxhdGVJbnRlcmNlcHQsXHJcblx0Q2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZU5scXMsIENhbXBhaWduU3VydmV5VGVtcGxhdGVOcHMsIENhbXBhaWduU3VydmV5VGVtcGxhdGVOcHMxMVBvaW50U3RhdGljLCBDYW1wYWlnblN1cnZleVRlbXBsYXRlTnBzNVBvaW50U3RhdGljLFxyXG59IGZyb20gXCIuL0NhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyXCI7XHJcbmltcG9ydCB7IENhbXBhaWduU3RhdGUgfSBmcm9tIFwiLi9DYW1wYWlnblN0YXRlUHJvdmlkZXJcIjtcclxuXHJcbmNvbnN0IHsgZGF0ZVRvU2hvcnRVdGNTdHJpbmcsIGlzTk9VIH0gPSBVdGlscztcclxuXHJcbi8qKlxyXG4gKiBDb250YWlucyBtZXRob2RzIHRvIHRha2UgYSBjYW1wYWlnbiBkZWZpbml0aW9uICsgc3RhdGUgYW5kIGdlbmVyYXRlIGFuIElTdXJ2ZXlcclxuICovXHJcbmV4cG9ydCBjbGFzcyBDYW1wYWlnblN1cnZleUZhY3Rvcnkge1xyXG5cdHB1YmxpYyBzdGF0aWMgbWFrZVN1cnZleShzdGF0ZTogQ2FtcGFpZ25TdGF0ZSwgZGVmaW5pdGlvbjogQ2FtcGFpZ25EZWZpbml0aW9uLCBzdHJpbmdQcm92aWRlcjogSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyKTogSVN1cnZleSB7XHJcblx0XHRpZiAoIXN0YXRlIHx8ICFkZWZpbml0aW9uIHx8ICFkZWZpbml0aW9uLnN1cnZleVRlbXBsYXRlIHx8ICFzdHJpbmdQcm92aWRlcikge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBzdXJ2ZXlEYXRhU291cmNlID0gQ2FtcGFpZ25TdXJ2ZXlGYWN0b3J5Lm1ha2VTdXJ2ZXlEYXRhU291cmNlRGF0YShzdGF0ZSwgZGVmaW5pdGlvbik7XHJcblx0XHRjb25zdCBzdXJ2ZXlNb2RlbCA9IGRlZmluaXRpb24uc3VydmV5VGVtcGxhdGU7XHJcblx0XHRpZiAoc3VydmV5TW9kZWwgaW5zdGFuY2VvZiBDYW1wYWlnblN1cnZleVRlbXBsYXRlTnBzNVBvaW50U3RhdGljKSB7XHJcblx0XHRcdHJldHVybiBOcHNTdXJ2ZXkubWFrZTVQb2ludChzdXJ2ZXlEYXRhU291cmNlLCBzdHJpbmdQcm92aWRlcik7XHJcblx0XHR9IGVsc2UgaWYgKHN1cnZleU1vZGVsIGluc3RhbmNlb2YgQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZU5wczExUG9pbnRTdGF0aWMpIHtcclxuXHRcdFx0cmV0dXJuIE5wc1N1cnZleS5tYWtlMTFQb2ludChzdXJ2ZXlEYXRhU291cmNlLCBzdHJpbmdQcm92aWRlcik7XHJcblx0XHR9IGVsc2UgaWYgKHN1cnZleU1vZGVsIGluc3RhbmNlb2YgQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZUZwcykge1xyXG5cdFx0XHRyZXR1cm4gRnBzU3VydmV5Lm1ha2VGcHMoc3VydmV5RGF0YVNvdXJjZSwgc3RyaW5nUHJvdmlkZXIsIHN1cnZleU1vZGVsKTtcclxuXHRcdH0gZWxzZSBpZiAoc3VydmV5TW9kZWwgaW5zdGFuY2VvZiBDYW1wYWlnblN1cnZleVRlbXBsYXRlTmxxcykge1xyXG5cdFx0XHRyZXR1cm4gTmxxc1N1cnZleS5tYWtlTmxxcyhzdXJ2ZXlEYXRhU291cmNlLCBzdHJpbmdQcm92aWRlciwgc3VydmV5TW9kZWwpO1xyXG5cdFx0fSBlbHNlIGlmIChzdXJ2ZXlNb2RlbCBpbnN0YW5jZW9mIENhbXBhaWduU3VydmV5VGVtcGxhdGVOcHMpIHtcclxuXHRcdFx0cmV0dXJuIE5wc1N1cnZleS5tYWtlQ3VzdG9tKHN1cnZleURhdGFTb3VyY2UsIHN0cmluZ1Byb3ZpZGVyLCBzdXJ2ZXlNb2RlbCk7XHJcblx0XHR9IGVsc2UgaWYgKHN1cnZleU1vZGVsIGluc3RhbmNlb2YgQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZUdlbmVyaWNNZXNzYWdpbmdTdXJmYWNlKSB7XHJcblx0XHRcdHJldHVybiBHZW5lcmljTWVzc2FnaW5nU3VyZmFjZVN1cnZleS5tYWtlQ3VzdG9tKHN1cnZleURhdGFTb3VyY2UpO1xyXG5cdFx0fSBlbHNlIGlmIChzdXJ2ZXlNb2RlbCBpbnN0YW5jZW9mIENhbXBhaWduU3VydmV5VGVtcGxhdGVJbnRlcmNlcHQpIHtcclxuXHRcdFx0cmV0dXJuIEludGVyY2VwdFN1cnZleS5tYWtlSW50ZXJjZXB0KHN1cnZleURhdGFTb3VyY2UsIHN0cmluZ1Byb3ZpZGVyLCBzdXJ2ZXlNb2RlbCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIG1ha2VTdXJ2ZXlEYXRhU291cmNlRGF0YShzdGF0ZTogQ2FtcGFpZ25TdGF0ZSwgZGVmaW5pdGlvbjogQ2FtcGFpZ25EZWZpbml0aW9uKTogU3VydmV5RGF0YVNvdXJjZS5TdXJ2ZXlEYXRhU291cmNlRGF0YSB7XHJcblx0XHRpZiAoIXN0YXRlIHx8ICFkZWZpbml0aW9uIHx8ICFkZWZpbml0aW9uLnN1cnZleVRlbXBsYXRlKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHN1cnZleU1vZGVsID0gZGVmaW5pdGlvbi5zdXJ2ZXlUZW1wbGF0ZTtcclxuXHRcdGNvbnN0IHN1cnZleURhdGEgPSBuZXcgU3VydmV5RGF0YVNvdXJjZS5TdXJ2ZXlEYXRhU291cmNlRGF0YSgpO1xyXG5cdFx0c3VydmV5RGF0YS5hY3RpdmF0aW9uRXZlbnQgPSBDYW1wYWlnblN1cnZleUZhY3RvcnkubWFrZUV2ZW50KHN0YXRlLCBzdXJ2ZXlNb2RlbC5hY3RpdmF0aW9uRXZlbnQpO1xyXG5cdFx0c3VydmV5RGF0YS5tZXRhZGF0YSA9IENhbXBhaWduU3VydmV5RmFjdG9yeS5tYWtlTWV0YWRhdGEoc3VydmV5TW9kZWwubWV0YWRhdGEpO1xyXG5cdFx0c3VydmV5RGF0YS5pZCA9IHN0YXRlLkxhc3RTdXJ2ZXlJZDtcclxuXHRcdHN1cnZleURhdGEuYmFja0VuZElkZW50aWZpZXIgPSBzdGF0ZS5DYW1wYWlnbklkO1xyXG5cdFx0c3VydmV5RGF0YS5leHBpcmF0aW9uVGltZVV0YyA9IGRhdGVUb1Nob3J0VXRjU3RyaW5nKHN0YXRlLkxhc3RTdXJ2ZXlFeHBpcmF0aW9uVGltZVV0Yyk7XHJcblx0XHRzdXJ2ZXlEYXRhLmdvdmVybmVkQ2hhbm5lbFR5cGUgPSBkZWZpbml0aW9uLmdvdmVybmVkQ2hhbm5lbFR5cGU7XHJcblx0XHRzdXJ2ZXlEYXRhLnN0YXJ0VGltZVV0YyA9IGRhdGVUb1Nob3J0VXRjU3RyaW5nKHN0YXRlLkxhc3RTdXJ2ZXlTdGFydFRpbWVVdGMpO1xyXG5cdFx0c3VydmV5RGF0YS5hZGRpdGlvbmFsRGF0YVJlcXVlc3RlZCA9IGRlZmluaXRpb24uYWRkaXRpb25hbERhdGFSZXF1ZXN0ZWQgIHx8IFtdO1xyXG5cdFx0c3VydmV5RGF0YS5sYXVuY2hlclR5cGUgPSBkZWZpbml0aW9uLmxhdW5jaGVyVHlwZSB8fCBJU3VydmV5LkxBVU5DSEVSX1RZUEVfREVGQVVMVDtcclxuXHRcdHN1cnZleURhdGEucHJlZmVycmVkTGF1bmNoVHlwZSA9IGRlZmluaXRpb24uc3VydmV5VGVtcGxhdGUucHJlZmVycmVkTGF1bmNoVHlwZSB8fCBJU3VydmV5SW5mby5MYXVuY2hUeXBlLkRlZmF1bHQ7XHJcblx0XHRzdXJ2ZXlEYXRhLmJ1c2luZXNzTGV2ZWwgPSBkZWZpbml0aW9uLmJ1c2luZXNzTGV2ZWw7XHJcblxyXG5cdFx0aWYgKCFpc05PVShzdXJ2ZXlNb2RlbC5tYXhMYXVuY2hlcykpIHtcclxuXHRcdFx0c3VydmV5RGF0YS5tYXhMYXVuY2hlcyA9IHN1cnZleU1vZGVsLm1heExhdW5jaGVzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghaXNOT1Uoc3VydmV5TW9kZWwubWF4TGF1bmNoZXNQZXJTZXNzaW9uKSkge1xyXG5cdFx0XHRzdXJ2ZXlEYXRhLm1heExhdW5jaGVzUGVyU2Vzc2lvbiA9IHN1cnZleU1vZGVsLm1heExhdW5jaGVzUGVyU2Vzc2lvbjtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gc3VydmV5RGF0YTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIG1ha2VDb3VudGVkQWN0aXZpdHlFdmVudERhdGEoZXZlbnRNb2RlbDogQ2FtcGFpZ25TdXJ2ZXlFdmVudENvdW50ZWRBY3Rpdml0eSk6IENvdW50ZWRBY3Rpdml0eUV2ZW50RGF0YSB7XHJcblx0XHRpZiAoIWV2ZW50TW9kZWwpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZXZlbnREYXRhID0gbmV3IENvdW50ZWRBY3Rpdml0eUV2ZW50RGF0YSgpO1xyXG5cdFx0ZXZlbnREYXRhLmFjdGl2aXR5ID0gZXZlbnRNb2RlbC5hY3Rpdml0eTtcclxuXHRcdGV2ZW50RGF0YS5jb3VudCA9IGV2ZW50TW9kZWwuY291bnQ7XHJcblx0XHRldmVudERhdGEuaXNBZ2dyZWdhdGUgPSBldmVudE1vZGVsLmlzQWdncmVnYXRlO1xyXG5cclxuXHRcdHJldHVybiBldmVudERhdGE7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHN0YXRpYyBtYWtlQ291bnRlZEFjdGl2aXR5RXZlbnQoc3RhdGU6IENhbXBhaWduU3RhdGUsIGV2ZW50TW9kZWw6IENhbXBhaWduU3VydmV5RXZlbnRDb3VudGVkQWN0aXZpdHkpOiBJQ291bnRlZEFjdGl2aXR5RXZlbnQge1xyXG5cdFx0aWYgKCFzdGF0ZSB8fCAhZXZlbnRNb2RlbCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBldmVudERhdGE6IENvdW50ZWRBY3Rpdml0eUV2ZW50RGF0YSA9IENhbXBhaWduU3VydmV5RmFjdG9yeS5tYWtlQ291bnRlZEFjdGl2aXR5RXZlbnREYXRhKGV2ZW50TW9kZWwpO1xyXG5cdFx0aWYgKCFldmVudERhdGEpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG5ldyBDb3VudGVkQWN0aXZpdHlFdmVudChldmVudERhdGEpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgbWFrZUNvdW50ZWRBY3Rpdml0eVNlcXVlbmNlRXZlbnQoc3RhdGU6IENhbXBhaWduU3RhdGUsXHJcblx0XHRldmVudE1vZGVsOiBDYW1wYWlnblN1cnZleUV2ZW50Q291bnRlZEFjdGl2aXR5U2VxdWVuY2UpOiBJQ291bnRlZEFjdGl2aXR5U2VxdWVuY2VFdmVudCB7XHJcblxyXG5cdFx0aWYgKCFzdGF0ZSB8fCAhZXZlbnRNb2RlbCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBzZXF1ZW5jZUV2ZW50RGF0YSA9IG5ldyBDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZUV2ZW50RGF0YSgpO1xyXG5cdFx0c2VxdWVuY2VFdmVudERhdGEuc2VxdWVuY2UgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50TW9kZWwuc2VxdWVuY2UpIHtcclxuXHRcdFx0Y29uc3QgZXZlbnREYXRhOiBDb3VudGVkQWN0aXZpdHlFdmVudERhdGEgPSBDYW1wYWlnblN1cnZleUZhY3RvcnkubWFrZUNvdW50ZWRBY3Rpdml0eUV2ZW50RGF0YShldmVudCk7XHJcblx0XHRcdGlmICghZXZlbnREYXRhKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHNlcXVlbmNlRXZlbnREYXRhLnNlcXVlbmNlLnB1c2goZXZlbnREYXRhKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbmV3IENvdW50ZWRBY3Rpdml0eVNlcXVlbmNlRXZlbnQoc2VxdWVuY2VFdmVudERhdGEpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgbWFrZUV2ZW50KHN0YXRlOiBDYW1wYWlnblN0YXRlLCBldmVudE1vZGVsOiBDYW1wYWlnblN1cnZleUV2ZW50KTogSVN1cnZleUV2ZW50IHtcclxuXHRcdGlmIChldmVudE1vZGVsIGluc3RhbmNlb2YgQ2FtcGFpZ25TdXJ2ZXlFdmVudENvdW50ZWRBY3Rpdml0eSkge1xyXG5cdFx0XHRyZXR1cm4gQ2FtcGFpZ25TdXJ2ZXlGYWN0b3J5Lm1ha2VDb3VudGVkQWN0aXZpdHlFdmVudChzdGF0ZSwgZXZlbnRNb2RlbCBhcyBDYW1wYWlnblN1cnZleUV2ZW50Q291bnRlZEFjdGl2aXR5KTtcclxuXHRcdH0gZWxzZSBpZiAoZXZlbnRNb2RlbCBpbnN0YW5jZW9mIENhbXBhaWduU3VydmV5RXZlbnRDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZSkge1xyXG5cdFx0XHRyZXR1cm4gQ2FtcGFpZ25TdXJ2ZXlGYWN0b3J5Lm1ha2VDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZUV2ZW50KHN0YXRlLCBldmVudE1vZGVsIGFzIENhbXBhaWduU3VydmV5RXZlbnRDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIG1ha2VNZXRhZGF0YShtZXRhZGF0YU1vZGVsOiBDYW1wYWlnblN1cnZleU1ldGFkYXRhKTogSVN1cnZleU1ldGFkYXRhIHtcclxuXHRcdGlmIChpc05PVShtZXRhZGF0YU1vZGVsKSB8fCBpc05PVShtZXRhZGF0YU1vZGVsLmNvbnRlbnRNZXRhZGF0YSkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBuZXcgTWV0YWRhdGEoKTtcclxuXHRcdG1ldGFkYXRhLmNvbnRlbnRNZXRhZGF0YSA9IG1ldGFkYXRhTW9kZWwuY29udGVudE1ldGFkYXRhO1xyXG5cclxuXHRcdHJldHVybiBuZXcgU3VydmV5TWV0YWRhdGEobWV0YWRhdGEpO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Campaign/CampaignSurveyFactory.js\n')},"../FloodgateCore/dist/src/Constants.js":function(){"use strict";eval('\n/**\n * Constants.ts\n *\n * A module for all the constants.\n */\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.TelemetryEvent = void 0;\n/**\n * Telemetry events\n */\nvar TelemetryEvent = /** @class */ (function () {\n    function TelemetryEvent() {\n    }\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12;\n    TelemetryEvent.CampaignState = (_a = /** @class */ (function () {\n            function class_1() {\n            }\n            return class_1;\n        }()),\n        _a.Deserialize = (_b = /** @class */ (function () {\n                function class_2() {\n                }\n                return class_2;\n            }()),\n            _b.Failed = "FloodgateCore_CampaignState_Deserialize_Failed",\n            _b),\n        _a);\n    TelemetryEvent.FileBasedCampaignStateProvider = (_c = /** @class */ (function () {\n            function class_3() {\n            }\n            return class_3;\n        }()),\n        _c.Load = (_d = /** @class */ (function () {\n                function class_4() {\n                }\n                return class_4;\n            }()),\n            _d.Failed = "FloodgateCore_FileBasedCampaignStateProvider_Load_Failed",\n            _d),\n        _c);\n    TelemetryEvent.HostBasedCampaignStateProvider = (_e = /** @class */ (function () {\n            function class_5() {\n            }\n            return class_5;\n        }()),\n        _e.GetStatesFromHost = (_f = /** @class */ (function () {\n                function class_6() {\n                }\n                return class_6;\n            }()),\n            _f.Failed = "FloodgateCore_HostBasedCampaignStateProvider_GetStatesFromHost_Failed",\n            _f),\n        _e);\n    TelemetryEvent.Floodgate = (_g = /** @class */ (function () {\n            function class_7() {\n            }\n            return class_7;\n        }()),\n        _g.Initialize = (_h = /** @class */ (function () {\n                function class_8() {\n                }\n                return class_8;\n            }()),\n            _h.Failed = "FloodgateCore_Floodgate_Initialize_Failed",\n            _h),\n        _g.Start = (_j = /** @class */ (function () {\n                function class_9() {\n                }\n                return class_9;\n            }()),\n            _j.Failed = "FloodgateCore_Floodgate_Start_Failed",\n            _j.Warning = "FloodgateCore_Floodgate_Start_Warning",\n            _j.SurveysDisabled = "FloodgateCore_Floodgate_Start_SurveysDisabled",\n            _j),\n        _g.UserFactsLoad = (_k = /** @class */ (function () {\n                function class_10() {\n                }\n                return class_10;\n            }()),\n            _k.Failed = "FloodgateCore_Floodgate_UserFactsLoad_Failed",\n            _k),\n        _g.UserFactsSpecDeserialization = (_l = /** @class */ (function () {\n                function class_11() {\n                }\n                return class_11;\n            }()),\n            _l.Failed = "FloodgateCore_Floodgate_UserFactsSpecDeserialization_Failed",\n            _l),\n        _g.UserFactsSpecIsAMatch = (_m = /** @class */ (function () {\n                function class_12() {\n                }\n                return class_12;\n            }()),\n            _m.Failed = "FloodgateCore_Floodgate_UserFactsSpecIsAMatch_Failed",\n            _m.Mismatch = "FloodgateCore_Floodgate_UserFactsSpecIsAMatch_Mismatch",\n            _m.Summary = "FloodgateCore_Floodgate_UserFactsSpecIsAMatch_Summary",\n            _m),\n        _g.RenderSurvey = (_o = /** @class */ (function () {\n                function class_13() {\n                }\n                return class_13;\n            }()),\n            _o.Unsupported = "FloodgateCore_Floodgate_RenderSurvey_Unsupported",\n            _o),\n        _g);\n    TelemetryEvent.FloodgateEngine = (_p = /** @class */ (function () {\n            function class_14() {\n            }\n            return class_14;\n        }()),\n        _p.Make = (_q = /** @class */ (function () {\n                function class_15() {\n                }\n                return class_15;\n            }()),\n            _q.Failed = "FloodgateCore_FloodgateEngine_Make_Failed",\n            _q),\n        _p.Common = (_r = /** @class */ (function () {\n                function class_16() {\n                }\n                return class_16;\n            }()),\n            _r.Error = "FloodgateCore_FloodgateEngine_Common_Error",\n            _r),\n        _p.Start = (_s = /** @class */ (function () {\n                function class_17() {\n                }\n                return class_17;\n            }()),\n            _s.Failed = "FloodgateCore_FloodgateEngine_Start_Failed",\n            _s),\n        _p.StartAsync = (_t = /** @class */ (function () {\n                function class_18() {\n                }\n                return class_18;\n            }()),\n            _t.Failed = "FloodgateCore_FloodgateEngine_StartAsync_Failed",\n            _t.Stopped = "FloodgateCore_FloodgateEngine_StartAsync_Stopped",\n            _t),\n        _p.OnSurveyActivated = (_u = /** @class */ (function () {\n                function class_19() {\n                }\n                return class_19;\n            }()),\n            _u.ActivationStatsSuppressedSurvey = "FloodgateCore_FloodgateEngine_OnSurveyActivated_ActivationStatsSuppressedSurvey",\n            _u.ClosedChannelType = "FloodgateCore_FloodgateEngine_OnSurveyActivated_ClosedChannelType",\n            _u.SurveyNotDefined = "FloodgateCore_FloodgateEngine_OnSurveyActivated_SurveyNotDefined",\n            _u.SessionSuppressedSurvey = "FloodgateCore_FloodgateEngine_OnSurveyActivated_SessionSuppressedSurvey",\n            _u.ActivationExpiredSurvey = "FloodgateCore_FloodgateEngine_OnSurveyActivated_ActivationExpiredSurvey",\n            _u.ActivationIrrelevantSurvey = "FloodgateCore_FloodgateEngine_OnSurveyActivated_ActivationIrrelevantSurvey",\n            _u.Error = "FloodgateCore_FloodgateEngine_OnSurveyActivated_Error",\n            _u),\n        _p.CheckGovernanceServiceAndActivateSurvey = (_v = /** @class */ (function () {\n                function class_20() {\n                }\n                return class_20;\n            }()),\n            _v.GovernanceServiceForceToDisplay = "FloodgateCore_FloodgateEngine_GovernanceService_GovernanceServiceForceToDisplay",\n            _v.GovernanceServiceClientCompleted = "FloodgateCore_FloodgateEngine_GovernanceService_GovernanceServiceClientCompleted",\n            _v),\n        _p);\n    TelemetryEvent.GovernedChannelState = (_w = /** @class */ (function () {\n            function class_21() {\n            }\n            return class_21;\n        }()),\n        _w.Deserialize = (_x = /** @class */ (function () {\n                function class_22() {\n                }\n                return class_22;\n            }()),\n            _x.Failed = "FloodgateCore_GovernedChannelState_Deserialize_Failed",\n            _x),\n        _w);\n    TelemetryEvent.FileBasedGovernedChannelStateProvider = (_y = /** @class */ (function () {\n            function class_23() {\n            }\n            return class_23;\n        }()),\n        _y.Load = (_z = /** @class */ (function () {\n                function class_24() {\n                }\n                return class_24;\n            }()),\n            _z.Failed = "FloodgateCore_FileBasedGovernedChannelStateProvider_Load_Failed",\n            _z),\n        _y);\n    TelemetryEvent.HostBasedGovernedChannelStateProvider = (_0 = /** @class */ (function () {\n            function class_25() {\n            }\n            return class_25;\n        }()),\n        _0.GetStatesFromHost = (_1 = /** @class */ (function () {\n                function class_26() {\n                }\n                return class_26;\n            }()),\n            _1.Failed = "FloodgateCore_HostBasedGovernedChannelStateProvider_GetStatesFromHost_Failed",\n            _1),\n        _0);\n    TelemetryEvent.SurveyStatCollectionActivation = (_2 = /** @class */ (function () {\n            function class_27() {\n            }\n            return class_27;\n        }()),\n        _2.FromJson = (_3 = /** @class */ (function () {\n                function class_28() {\n                }\n                return class_28;\n            }()),\n            _3.Failed = "FloodgateCore_SurveyStatCollectionActivation_FromJson_Failed",\n            _3),\n        _2.ToJson = (_4 = /** @class */ (function () {\n                function class_29() {\n                }\n                return class_29;\n            }()),\n            _4.Failed = "FloodgateCore_SurveyStatCollectionActivation_ToJson_Failed",\n            _4),\n        _2);\n    TelemetryEvent.HostBasedSurveyActivationStatsProvider = (_5 = /** @class */ (function () {\n            function class_30() {\n            }\n            return class_30;\n        }()),\n        _5.GetSurveyStatsFromHost = (_6 = /** @class */ (function () {\n                function class_31() {\n                }\n                return class_31;\n            }()),\n            _6.Failed = "FloodgateCore_HostBasedSurveyActivationStatsProvider_GetSurveyStatsFromHost_Failed",\n            _6),\n        _5);\n    TelemetryEvent.SurveyStatCollectionEventActivity = (_7 = /** @class */ (function () {\n            function class_32() {\n            }\n            return class_32;\n        }()),\n        _7.FromJson = (_8 = /** @class */ (function () {\n                function class_33() {\n                }\n                return class_33;\n            }()),\n            _8.Failed = "FloodgateCore_SurveyStatCollectionEventActivity_FromJson_Failed",\n            _8),\n        _7.ToJson = (_9 = /** @class */ (function () {\n                function class_34() {\n                }\n                return class_34;\n            }()),\n            _9.Failed = "FloodgateCore_SurveyStatCollectionEventActivity_ToJson_Failed",\n            _9),\n        _7);\n    TelemetryEvent.SurveyActivity = (_10 = /** @class */ (function () {\n            function class_35() {\n            }\n            return class_35;\n        }()),\n        _10.LogActivity = (_11 = /** @class */ (function () {\n                function class_36() {\n                }\n                return class_36;\n            }()),\n            _11.EventsReprocessed = "FloodgateCore_SurveyActivity_LogActivity_EventsReprocessed",\n            _11.SurveysReprocessed = "FloodgateCore_SurveyActivity_LogActivity_SurveysReprocessed",\n            _11),\n        _10.SetActivityTrackingContracts = (_12 = /** @class */ (function () {\n                function class_37() {\n                }\n                return class_37;\n            }()),\n            _12.DuplicateSurveyID = "FloodgateCore_SurveyActivity_SetActivityTrackingContracts_DuplicateSurveyID",\n            _12),\n        _10);\n    return TelemetryEvent;\n}());\nexports.TelemetryEvent = TelemetryEvent;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0NvbnN0YW50cy50cz8wNjEwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUFFSDs7R0FFRztBQUNIO0lBQUE7SUF5SUEsQ0FBQzs7SUF4SWMsNEJBQWE7WUFBRztZQUk5QixDQUFDO1lBQUQsY0FBQztRQUFELENBQUM7UUFIYyxjQUFXO2dCQUFHO2dCQUU1QixDQUFDO2dCQUFELGNBQUM7WUFBRCxDQUFDO1lBRGMsU0FBTSxHQUFXLGdEQUFpRDtlQUMvRTtZQUNEO0lBRVksNkNBQThCO1lBQUc7WUFJL0MsQ0FBQztZQUFELGNBQUM7UUFBRCxDQUFDO1FBSGMsT0FBSTtnQkFBRztnQkFFckIsQ0FBQztnQkFBRCxjQUFDO1lBQUQsQ0FBQztZQURjLFNBQU0sR0FBVywwREFBMkQ7ZUFDekY7WUFDRDtJQUVZLDZDQUE4QjtZQUFHO1lBSS9DLENBQUM7WUFBRCxjQUFDO1FBQUQsQ0FBQztRQUhjLG9CQUFpQjtnQkFBRztnQkFFbEMsQ0FBQztnQkFBRCxjQUFDO1lBQUQsQ0FBQztZQURjLFNBQU0sR0FBVyx1RUFBd0U7ZUFDdEc7WUFDRDtJQUVZLHdCQUFTO1lBQUc7WUE0QjFCLENBQUM7WUFBRCxjQUFDO1FBQUQsQ0FBQztRQTNCYyxhQUFVO2dCQUFHO2dCQUUzQixDQUFDO2dCQUFELGNBQUM7WUFBRCxDQUFDO1lBRGMsU0FBTSxHQUFXLDJDQUE0QztlQUMxRTtRQUVZLFFBQUs7Z0JBQUc7Z0JBSXRCLENBQUM7Z0JBQUQsY0FBQztZQUFELENBQUM7WUFIYyxTQUFNLEdBQVcsc0NBQXVDO1lBQ3hELFVBQU8sR0FBVyx1Q0FBd0M7WUFDMUQsa0JBQWUsR0FBVywrQ0FBZ0Q7ZUFDdkY7UUFFWSxnQkFBYTtnQkFBRztnQkFFOUIsQ0FBQztnQkFBRCxlQUFDO1lBQUQsQ0FBQztZQURjLFNBQU0sR0FBVyw4Q0FBK0M7ZUFDN0U7UUFFWSwrQkFBNEI7Z0JBQUc7Z0JBRTdDLENBQUM7Z0JBQUQsZUFBQztZQUFELENB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LGlFQUFrRTtlQUNoRztRQUVZLFNBQU07Z0JBQUc7Z0JBRXZCLENBQUM7Z0JBQUQsZUFBQztZQUFELENBQUM7WUFEYyxTQUFNLEdBQVcsK0RBQWdFO2VBQzlGO1lBQ0Q7SUFFWSw2QkFBYztZQUFHO1lBUy9CLENBQUM7WUFBRCxlQUFDO1FBQUQsQ0FBQztRQVJjLGVBQVc7Z0JBQUc7Z0JBRzVCLENBQUM7Z0JBQUQsZUFBQztZQUFELENBQUM7WUFGYyxxQkFBaUIsR0FBVyw0REFBNkQ7WUFDekYsc0JBQWtCLEdBQVcsNkRBQThEO2dCQUN4RztRQUVZLGdDQUE0QjtnQkFBRztnQkFFN0MsQ0FBQztnQkFBRCxlQUFDO1lBQUQsQ0FBQztZQURjLHFCQUFpQixHQUFXLDZFQUE4RTtnQkFDdkg7YUFDRDtJQUNILHFCQUFDO0NBQUE7QUF6SVksd0NBQWMiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9Db25zdGFudHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29uc3RhbnRzLnRzXHJcbiAqXHJcbiAqIEEgbW9kdWxlIGZvciBhbGwgdGhlIGNvbnN0YW50cy5cclxuICovXHJcblxyXG4vKipcclxuICogVGVsZW1ldHJ5IGV2ZW50c1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRlbGVtZXRyeUV2ZW50IHtcclxuXHRwdWJsaWMgc3RhdGljIENhbXBhaWduU3RhdGUgPSBjbGFzcyB7XHJcblx0XHRwdWJsaWMgc3RhdGljIERlc2VyaWFsaXplID0gY2xhc3Mge1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIEZhaWxlZDogc3RyaW5nID0gXCJGbG9vZGdhdGVDb3JlX0NhbXBhaWduU3RhdGVfRGVzZXJpYWxpemVfRmFpbGVkXCI7XHJcblx0XHR9O1xyXG5cdH07XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRmlsZUJhc2VkQ2FtcGFpZ25TdGF0ZVByb3ZpZGVyID0gY2xhc3Mge1xyXG5cdFx0cHVibGljIHN0YXRpYyBMb2FkID0gY2xhc3Mge1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIEZhaWxlZDogc3RyaW5nID0gXCJGbG9vZGdhdGVDb3JlX0ZpbGVCYXNlZENhbXBhaWduU3RhdGVQcm92aWRlcl9Mb2FkX0ZhaWxlZFwiO1xyXG5cdFx0fTtcclxuXHR9O1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEhvc3RCYXNlZENhbXBhaWduU3RhdGVQcm92aWRlciA9IGNsYXNzIHtcclxuXHRcdHB1YmxpYyBzdGF0aWMgR2V0U3RhdGVzRnJvbUhvc3QgPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRmFpbGVkOiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfSG9zdEJhc2VkQ2FtcGFpZ25TdGF0ZVByb3ZpZGVyX0dldFN0YXRlc0Zyb21Ib3N0X0ZhaWxlZFwiO1xyXG5cdFx0fTtcclxuXHR9O1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEZsb29kZ2F0ZSA9IGNsYXNzIHtcclxuXHRcdHB1YmxpYyBzdGF0aWMgSW5pdGlhbGl6ZSA9IGNsYXNzIHtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBGYWlsZWQ6IHN0cmluZyA9IFwiRmxvb2RnYXRlQ29yZV9GbG9vZGdhdGVfSW5pdGlhbGl6ZV9GYWlsZWRcIjtcclxuXHRcdH07XHJcblxyXG5cdFx0cHVibGljIHN0YXRpYyBTdGFydCA9IGNsYXNzIHtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBGYWlsZWQ6IHN0cmluZyA9IFwiRmxvb2RnYXRlQ29yZV9GbG9vZGdhdGVfU3RhcnRfRmFpbGVkXCI7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgV2FybmluZzogc3RyaW5nID0gXCJGbG9vZGdhdGVDb3JlX0Zsb29kZ2F0ZV9TdGFydF9XYXJuaW5nXCI7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgU3VydmV5c0Rpc2FibGVkOiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfRmxvb2RnYXRlX1N0YXJ0X1N1cnZleXNEaXNhYmxlZFwiO1xyXG5cdFx0fTtcclxuXHJcblx0XHRwdWJsaWMgc3RhdGljIFVzZXJGYWN0c0xvYWQgPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRmFpbGVkOiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfRmxvb2RnYXRlX1VzZXJGYWN0c0xvYWRfRmFpbGVkXCI7XHJcblx0XHR9O1xyXG5cclxuXHRcdHB1YmxpYyBzdGF0aWMgVXNlckZhY3RzU3BlY0Rlc2VyaWFsaXphdGlvbiA9IGNsYXNzIHtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBGYWlsZWQ6IHN0cmluZyA9IFwiRmxvb2RnYXRlQ29yZV9GbG9vZGdhdGVfVXNlckZhY3RzU3BlY0Rlc2VyaWFsaXphdGlvbl9GYWlsZWRcIjtcclxuXHRcdH07XHJcblxyXG5cdFx0cHVibGljIHN0YXRpYyBVc2VyRmFjdHNTcGVjSXNBTWF0Y2ggPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRmFpbGVkOiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfRmxvb2RnYXRlX1VzZXJGYWN0c1NwZWNJc0FNYXRjaF9GYWlsZWRcIjtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBNaXNtYXRjaDogc3RyaW5nID0gXCJGbG9vZGdhdGVDb3JlX0Zsb29kZ2F0ZV9Vc2VyRmFjdHNTcGVjSXNBTWF0Y2hfTWlzbWF0Y2hcIjtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBTdW1tYXJ5OiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfRmxvb2RnYXRlX1VzZXJGYWN0c1NwZWNJc0FNYXRjaF9TdW1tYXJ5XCI7XHJcblx0XHR9O1xyXG5cclxuXHRcdHB1YmxpYyBzdGF0aWMgUmVuZGVyU3VydmV5ID0gY2xhc3Mge1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIFVuc3VwcG9ydGVkOiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfRmxvb2RnYXRlX1JlbmRlclN1cnZleV9VbnN1cHBvcnRlZFwiO1xyXG5cdFx0fTtcclxuXHR9O1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEZsb29kZ2F0ZUVuZ2luZSA9IGNsYXNzIHtcclxuXHRcdHB1YmxpYyBzdGF0aWMgTWFrZSA9IGNsYXNzIHtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBGYWlsZWQ6IHN0cmluZyA9IFwiRmxvb2RnYXRlQ29yZV9GbG9vZGdhdGVFbmdpbmVfTWFrZV9GYWlsZWRcIjtcclxuXHRcdH07XHJcblxyXG5cdFx0cHVibGljIHN0YXRpYyBDb21tb24gPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRXJyb3I6IHN0cmluZyA9IFwiRmxvb2RnYXRlQ29yZV9GbG9vZGdhdGVFbmdpbmVfQ29tbW9uX0Vycm9yXCI7XHJcblx0XHR9O1xyXG5cclxuXHRcdHB1YmxpYyBzdGF0aWMgU3RhcnQgPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRmFpbGVkOiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfRmxvb2RnYXRlRW5naW5lX1N0YXJ0X0ZhaWxlZFwiO1xyXG5cdFx0fTtcclxuXHJcblx0XHRwdWJsaWMgc3RhdGljIFN0YXJ0QXN5bmMgPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRmFpbGVkOiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfRmxvb2RnYXRlRW5naW5lX1N0YXJ0QXN5bmNfRmFpbGVkXCI7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgU3RvcHBlZDogc3RyaW5nID0gXCJGbG9vZGdhdGVDb3JlX0Zsb29kZ2F0ZUVuZ2luZV9TdGFydEFzeW5jX1N0b3BwZWRcIjtcclxuXHRcdH07XHJcblxyXG5cdFx0cHVibGljIHN0YXRpYyBPblN1cnZleUFjdGl2YXRlZCA9IGNsYXNzIHtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBBY3RpdmF0aW9uU3RhdHNTdXBwcmVzc2VkU3VydmV5OiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfRmxvb2RnYXRlRW5naW5lX09uU3VydmV5QWN0aXZhdGVkX0FjdGl2YXRpb25TdGF0c1N1cHByZXNzZWRTdXJ2ZXlcIjtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBDbG9zZWRDaGFubmVsVHlwZTogc3RyaW5nID0gXCJGbG9vZGdhdGVDb3JlX0Zsb29kZ2F0ZUVuZ2luZV9PblN1cnZleUFjdGl2YXRlZF9DbG9zZWRDaGFubmVsVHlwZVwiO1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIFN1cnZleU5vdERlZmluZWQ6IHN0cmluZyA9IFwiRmxvb2RnYXRlQ29yZV9GbG9vZGdhdGVFbmdpbmVfT25TdXJ2ZXlBY3RpdmF0ZWRfU3VydmV5Tm90RGVmaW5lZFwiO1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIFNlc3Npb25TdXBwcmVzc2VkU3VydmV5OiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfRmxvb2RnYXRlRW5naW5lX09uU3VydmV5QWN0aXZhdGVkX1Nlc3Npb25TdXBwcmVzc2VkU3VydmV5XCI7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgQWN0aXZhdGlvbkV4cGlyZWRTdXJ2ZXk6IHN0cmluZyA9IFwiRmxvb2RnYXRlQ29yZV9GbG9vZGdhdGVFbmdpbmVfT25TdXJ2ZXlBY3RpdmF0ZWRfQWN0aXZhdGlvbkV4cGlyZWRTdXJ2ZXlcIjtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBBY3RpdmF0aW9uSXJyZWxldmFudFN1cnZleTogc3RyaW5nID0gXCJGbG9vZGdhdGVDb3JlX0Zsb29kZ2F0ZUVuZ2luZV9PblN1cnZleUFjdGl2YXRlZF9BY3RpdmF0aW9uSXJyZWxldmFudFN1cnZleVwiO1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIEVycm9yOiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfRmxvb2RnYXRlRW5naW5lX09uU3VydmV5QWN0aXZhdGVkX0Vycm9yXCI7XHJcblx0XHR9O1xyXG5cclxuXHRcdHB1YmxpYyBzdGF0aWMgQ2hlY2tHb3Zlcm5hbmNlU2VydmljZUFuZEFjdGl2YXRlU3VydmV5ID0gY2xhc3Mge1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIEdvdmVybmFuY2VTZXJ2aWNlRm9yY2VUb0Rpc3BsYXk6IHN0cmluZyA9IFwiRmxvb2RnYXRlQ29yZV9GbG9vZGdhdGVFbmdpbmVfR292ZXJuYW5jZVNlcnZpY2VfR292ZXJuYW5jZVNlcnZpY2VGb3JjZVRvRGlzcGxheVwiO1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIEdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50Q29tcGxldGVkOiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfRmxvb2RnYXRlRW5naW5lX0dvdmVybmFuY2VTZXJ2aWNlX0dvdmVybmFuY2VTZXJ2aWNlQ2xpZW50Q29tcGxldGVkXCI7XHJcblx0XHR9O1xyXG5cdH07XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgR292ZXJuZWRDaGFubmVsU3RhdGUgPSBjbGFzcyB7XHJcblx0XHRwdWJsaWMgc3RhdGljIERlc2VyaWFsaXplID0gY2xhc3Mge1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIEZhaWxlZDogc3RyaW5nID0gXCJGbG9vZGdhdGVDb3JlX0dvdmVybmVkQ2hhbm5lbFN0YXRlX0Rlc2VyaWFsaXplX0ZhaWxlZFwiO1xyXG5cdFx0fTtcclxuXHR9O1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEZpbGVCYXNlZEdvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXIgPSBjbGFzcyB7XHJcblx0XHRwdWJsaWMgc3RhdGljIExvYWQgPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRmFpbGVkOiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfRmlsZUJhc2VkR292ZXJuZWRDaGFubmVsU3RhdGVQcm92aWRlcl9Mb2FkX0ZhaWxlZFwiO1xyXG5cdFx0fTtcclxuXHR9O1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEhvc3RCYXNlZEdvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXIgPSBjbGFzcyB7XHJcblx0XHRwdWJsaWMgc3RhdGljIEdldFN0YXRlc0Zyb21Ib3N0ID0gY2xhc3Mge1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIEZhaWxlZDogc3RyaW5nID0gXCJGbG9vZGdhdGVDb3JlX0hvc3RCYXNlZEdvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXJfR2V0U3RhdGVzRnJvbUhvc3RfRmFpbGVkXCI7XHJcblx0XHR9O1xyXG5cdH07XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uID0gY2xhc3Mge1xyXG5cdFx0cHVibGljIHN0YXRpYyBGcm9tSnNvbiA9IGNsYXNzIHtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBGYWlsZWQ6IHN0cmluZyA9IFwiRmxvb2RnYXRlQ29yZV9TdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb25fRnJvbUpzb25fRmFpbGVkXCI7XHJcblx0XHR9O1xyXG5cclxuXHRcdHB1YmxpYyBzdGF0aWMgVG9Kc29uID0gY2xhc3Mge1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIEZhaWxlZDogc3RyaW5nID0gXCJGbG9vZGdhdGVDb3JlX1N1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbl9Ub0pzb25fRmFpbGVkXCI7XHJcblx0XHR9O1xyXG5cdH07XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgSG9zdEJhc2VkU3VydmV5QWN0aXZhdGlvblN0YXRzUHJvdmlkZXIgPSBjbGFzcyB7XHJcblx0XHRwdWJsaWMgc3RhdGljIEdldFN1cnZleVN0YXRzRnJvbUhvc3QgPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRmFpbGVkOiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfSG9zdEJhc2VkU3VydmV5QWN0aXZhdGlvblN0YXRzUHJvdmlkZXJfR2V0U3VydmV5U3RhdHNGcm9tSG9zdF9GYWlsZWRcIjtcclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkV2ZW50QWN0aXZpdHkgPSBjbGFzcyB7XHJcblx0XHRwdWJsaWMgc3RhdGljIEZyb21Kc29uID0gY2xhc3Mge1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIEZhaWxlZDogc3RyaW5nID0gXCJGbG9vZGdhdGVDb3JlX1N1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eV9Gcm9tSnNvbl9GYWlsZWRcIjtcclxuXHRcdH07XHJcblxyXG5cdFx0cHVibGljIHN0YXRpYyBUb0pzb24gPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRmFpbGVkOiBzdHJpbmcgPSBcIkZsb29kZ2F0ZUNvcmVfU3VydmV5U3RhdENvbGxlY3Rpb25FdmVudEFjdGl2aXR5X1RvSnNvbl9GYWlsZWRcIjtcclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBTdXJ2ZXlBY3Rpdml0eSA9IGNsYXNzIHtcclxuXHRcdHB1YmxpYyBzdGF0aWMgTG9nQWN0aXZpdHkgPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRXZlbnRzUmVwcm9jZXNzZWQ6IHN0cmluZyA9IFwiRmxvb2RnYXRlQ29yZV9TdXJ2ZXlBY3Rpdml0eV9Mb2dBY3Rpdml0eV9FdmVudHNSZXByb2Nlc3NlZFwiO1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIFN1cnZleXNSZXByb2Nlc3NlZDogc3RyaW5nID0gXCJGbG9vZGdhdGVDb3JlX1N1cnZleUFjdGl2aXR5X0xvZ0FjdGl2aXR5X1N1cnZleXNSZXByb2Nlc3NlZFwiO1xyXG5cdFx0fTtcclxuXHJcblx0XHRwdWJsaWMgc3RhdGljIFNldEFjdGl2aXR5VHJhY2tpbmdDb250cmFjdHMgPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRHVwbGljYXRlU3VydmV5SUQ6IHN0cmluZyA9IFwiRmxvb2RnYXRlQ29yZV9TdXJ2ZXlBY3Rpdml0eV9TZXRBY3Rpdml0eVRyYWNraW5nQ29udHJhY3RzX0R1cGxpY2F0ZVN1cnZleUlEXCI7XHJcblx0XHR9O1xyXG5cdH07XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Constants.js\n')},"../FloodgateCore/dist/src/FloodgateEngine.js":function(){"use strict";eval('\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError("Generator is already executing.");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.FloodgateEngine = void 0;\nvar IFloodgateStorageProvider = __webpack_require__(/*! ./Api/IFloodgateStorageProvider */ "../FloodgateCore/dist/src/Api/IFloodgateStorageProvider.js");\nvar CampaignDefinitionProvider_1 = __webpack_require__(/*! ./Campaign/CampaignDefinitionProvider */ "../FloodgateCore/dist/src/Campaign/CampaignDefinitionProvider.js");\nvar CampaignManager_1 = __webpack_require__(/*! ./Campaign/CampaignManager */ "../FloodgateCore/dist/src/Campaign/CampaignManager.js");\nvar CampaignStateProvider_1 = __webpack_require__(/*! ./Campaign/CampaignStateProvider */ "../FloodgateCore/dist/src/Campaign/CampaignStateProvider.js");\nvar Constants_1 = __webpack_require__(/*! ./Constants */ "../FloodgateCore/dist/src/Constants.js");\nvar FloodgateSettings_1 = __webpack_require__(/*! ./FloodgateSettings */ "../FloodgateCore/dist/src/FloodgateSettings.js");\nvar GovernedChannel_1 = __webpack_require__(/*! ./GovernedChannel */ "../FloodgateCore/dist/src/GovernedChannel.js");\nvar GovernedChannelStateProvider_1 = __webpack_require__(/*! ./GovernedChannelStateProvider */ "../FloodgateCore/dist/src/GovernedChannelStateProvider.js");\nvar Governor_1 = __webpack_require__(/*! ./Governor */ "../FloodgateCore/dist/src/Governor.js");\nvar SurveyActivityListener = __webpack_require__(/*! ./SurveyActivityListener */ "../FloodgateCore/dist/src/SurveyActivityListener.js");\nvar SurveyStatCollectionActivation_1 = __webpack_require__(/*! ./SurveyStatCollectionActivation */ "../FloodgateCore/dist/src/SurveyStatCollectionActivation.js");\nvar SurveyStatCollectionEventActivity_1 = __webpack_require__(/*! ./SurveyStatCollectionEventActivity */ "../FloodgateCore/dist/src/SurveyStatCollectionEventActivity.js");\nvar FileType = IFloodgateStorageProvider.FileType;\nvar ActivityTrackingContract_1 = __webpack_require__(/*! ./ActivityTrackingContract */ "../FloodgateCore/dist/src/ActivityTrackingContract.js");\nvar GovernanceUtils_1 = __webpack_require__(/*! ./GovernanceUtils */ "../FloodgateCore/dist/src/GovernanceUtils.js");\nvar Utils_1 = __webpack_require__(/*! ./Utils */ "../FloodgateCore/dist/src/Utils.js");\n// Telemetry logger with no-op logger\nvar DefaultFloodgateTelemetryLogger = /** @class */ (function () {\n    function DefaultFloodgateTelemetryLogger() {\n    }\n    // @Override\n    DefaultFloodgateTelemetryLogger.prototype.log_TriggerMet = function (campaignId, surveyId, surveyType, surveyActivityInfo, additionalSurveyInfo) { };\n    // @Override\n    DefaultFloodgateTelemetryLogger.prototype.log_UserSelected = function (campaignId, surveyId, surveyType, additionalSurveyInfo) { };\n    // @Override\n    DefaultFloodgateTelemetryLogger.prototype.log_CampaignLoad_Failed = function (errorMessage) { };\n    // @Override\n    DefaultFloodgateTelemetryLogger.prototype.log_Error = function (eventId, errorMessage) { };\n    // @Override\n    DefaultFloodgateTelemetryLogger.prototype.log_Event = function (eventId, properties) { };\n    // @Override\n    DefaultFloodgateTelemetryLogger.prototype.log_LocalError = function (message) {\n        var data = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            data[_i - 1] = arguments[_i];\n        }\n    };\n    return DefaultFloodgateTelemetryLogger;\n}());\nvar defaultSurveyActivityListener = {\n    run: function (survey) {\n    },\n    shouldAcceptActivity: function (activityName) {\n        return true;\n    },\n};\nvar globalSessionSurveyActivationCounts = {};\n/**\n * Floodgate Engine class.  The main wiring hub and the brains responsible for\n * linking together the survey definitions, governance, activity tracking, and\n * survey launchers.  Only one-instance-at-a-time of these should be created\n * per app session.\n */\nvar FloodgateEngine = /** @class */ (function () {\n    function FloodgateEngine(surveyClient, activityListener, launcherFactory, onSurveyActivatedCallback, storage, governor, surveyActivationStatsProvider, transporterFactory, governanceServiceClient) {\n        this.initializationStatus = 0 /* None */;\n        this.candidateSurveys = {};\n        this.launchedSurveys = {};\n        this.launchedLaunchers = [];\n        this.surveyEventSent = [];\n        this.staleTriggeredSurveysQueue = [];\n        if (!surveyClient) {\n            throw new Error("surveyClient must not be null");\n        }\n        if (!activityListener) {\n            throw new Error("activityListener must not be null");\n        }\n        if (!launcherFactory) {\n            throw new Error("launcherFactory must not be null");\n        }\n        if (!onSurveyActivatedCallback) {\n            throw new Error("onSurveyActivatedCallback must not be null");\n        }\n        if (!storage) {\n            throw new Error("storage must not be null");\n        }\n        if (!governor) {\n            throw new Error("governor must not be null");\n        }\n        if (!transporterFactory) {\n            throw new Error("transporterFactory must not be null");\n        }\n        this.surveyClient = surveyClient;\n        this.activityListener = activityListener;\n        this.launcherFactory = launcherFactory;\n        this.onSurveyActivatedCallback = onSurveyActivatedCallback;\n        this.storage = storage;\n        this.governor = governor;\n        this.surveyActivationStatsProvider = surveyActivationStatsProvider;\n        this.governanceServiceClient = governanceServiceClient;\n        FloodgateEngine.transporterFactory = transporterFactory;\n        this.loggedFirstStart = false;\n        // Initialize our list to a valid, empty collection\n        this.setPendingSurveys(null);\n        // If the listener was pre-configured with survey for some reason, clear it now\n        this.activityListener.clearSurveys();\n        // Link ourselves with the listener\n        var thisObj = this; // Save current object in a variable to allow access from callback.\n        this.activityListener.setCallback({\n            run: function (surveyId, contextInfo) {\n                thisObj.onSurveyActivated(surveyId, contextInfo);\n            },\n            shouldAcceptActivity: function (activityName) {\n                return thisObj.shouldAcceptActivity(activityName);\n            },\n        });\n    }\n    FloodgateEngine.setTelemetryLogger = function (telemetryLogger) {\n        if (!telemetryLogger) {\n            throw new Error("telemetryLogger must not be null");\n        }\n        FloodgateEngine.telemetryLogger = telemetryLogger;\n    };\n    FloodgateEngine.getTelemetryLogger = function () {\n        return FloodgateEngine.telemetryLogger;\n    };\n    FloodgateEngine.getTransportFactory = function () {\n        return FloodgateEngine.transporterFactory;\n    };\n    FloodgateEngine.make = function (buildVersion, launcherFactory, onSurveyActivatedCallback, fileBasedStorageProvider, hostBasedStorageProvider, stringProvider, environmentProvider, transporterFactory, campaignDefinitionProviders, userFactsProvider, governanceServiceClient, isPriorityEnabled, surveyClient) {\n        try {\n            var governedChannelStateProvider = GovernedChannelStateProvider_1.GovernedChannelStateProviderFactory.make(fileBasedStorageProvider, hostBasedStorageProvider);\n            var surveyActivationStatsProvider = SurveyStatCollectionActivation_1.SurveyActivationStatsProviderFactory.make(fileBasedStorageProvider, hostBasedStorageProvider);\n            var campaignStateProvider = CampaignStateProvider_1.CampaignStateProviderFactory.make(fileBasedStorageProvider, hostBasedStorageProvider);\n            campaignDefinitionProviders.push(new CampaignDefinitionProvider_1.FileSystemCampaignDefinitionProvider(fileBasedStorageProvider));\n            var client = surveyClient || new CampaignManager_1.CampaignManager(campaignStateProvider, campaignDefinitionProviders, stringProvider, environmentProvider, buildVersion, new Date(), isPriorityEnabled, userFactsProvider);\n            return new FloodgateEngine(client, new SurveyActivityListener(defaultSurveyActivityListener, this.getTelemetryLogger), launcherFactory, onSurveyActivatedCallback, fileBasedStorageProvider, new Governor_1.Governor(governedChannelStateProvider), surveyActivationStatsProvider, transporterFactory, governanceServiceClient);\n        }\n        catch (e) {\n            this.telemetryLogger.log_Event(Constants_1.TelemetryEvent.FloodgateEngine.Make.Failed, { ErrorMessage: e && e.toString(), ErrorDetails: e && e.stack });\n        }\n    };\n    FloodgateEngine.prototype.getSurveyClient = function () {\n        return this.surveyClient;\n    };\n    /**\n     * Save all internal stats and floodgateSettings (merging with existing file contents), without stopping the engine.\n     */\n    FloodgateEngine.prototype.mergeAndSave = function () {\n        this.saveSettings();\n        this.saveSurveyActivationHistory();\n        this.saveSurveyEventActivityHistory();\n        // Inform surveyClient to save its state\n        this.surveyClient.saveCurrentState();\n        // Save governed channel states\n        this.governor.saveChannelStates();\n    };\n    /**\n     * Start the engine.  Checks feature enable state, causes survey definitions to be read, and tracked activities to be set on the listener.\n     */\n    FloodgateEngine.prototype.start = function () {\n        if (this.initializationStatus === 2 /* Initializing */ ||\n            this.initializationStatus === 3 /* Started */) {\n            return;\n        }\n        try {\n            this.setInitializationStatus(2 /* Initializing */);\n            this.loadSettingsAndPriorEventCounts();\n            var channelTypes = this.getAvailableChannelTypes();\n            this.surveyClient.refreshSurveyDefinitions(channelTypes);\n            this.setPendingSurveysAndStartFloodgate();\n            this.setInitializationStatus(3 /* Started */);\n        }\n        catch (e) {\n            this.setInitializationStatus(1 /* Error */);\n            FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FloodgateEngine.Start.Failed, { ErrorMessage: e && e.toString(), ErrorDetails: e && e.stack });\n        }\n    };\n    /**\n     * Start the engine.  Checks feature enable state, causes survey definitions to be read, and tracked activities to be set on the listener.\n     */\n    FloodgateEngine.prototype.startAsync = function () {\n        if (this.initializationStatus === 2 /* Initializing */ ||\n            this.initializationStatus === 3 /* Started */) {\n            return Promise.resolve();\n        }\n        try {\n            this.setInitializationStatus(2 /* Initializing */);\n            this.loadSettingsAndPriorEventCounts();\n            var channelTypes_1 = this.getAvailableChannelTypes();\n            var thisFloodgateEngine_1 = this;\n            return new Promise(function (resolve, reject) {\n                thisFloodgateEngine_1.surveyClient.refreshSurveyDefinitionsAsync(channelTypes_1).then(function onFulfilled() {\n                    // Handle any stop() calls that happened while initializing\n                    if (thisFloodgateEngine_1.initializationStatus === 4 /* Stopped */) {\n                        thisFloodgateEngine_1.setInitializationStatus(3 /* Started */);\n                        thisFloodgateEngine_1.stop();\n                        FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FloodgateEngine.StartAsync.Stopped, { ErrorMessage: "Stopped because of a pending stop() call" });\n                    }\n                    else {\n                        thisFloodgateEngine_1.setPendingSurveysAndStartFloodgate();\n                    }\n                    resolve();\n                }).catch(function OnRejected(error) {\n                    thisFloodgateEngine_1.setInitializationStatus(1 /* Error */);\n                    FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FloodgateEngine.StartAsync.Failed, { ErrorMessage: "Survey refresh error " + (error && error.message) });\n                    reject(error);\n                });\n            });\n        }\n        catch (e) {\n            this.setInitializationStatus(1 /* Error */);\n            FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FloodgateEngine.StartAsync.Failed, { ErrorMessage: e && e.toString(), ErrorDetails: e && e.stack });\n            return Promise.resolve();\n        }\n    };\n    /**\n     * Stop the engine.  Causes tracked activities to be cleared and any in-progress counters not otherwise saved to be thrown out.\n     */\n    FloodgateEngine.prototype.stop = function () {\n        if (this.initializationStatus === 3 /* Started */) {\n            this.mergeAndSave();\n            // Clear our Survey list, and push that through to the listener\n            this.setPendingSurveys(null);\n            this.updateActivityListenerWithCurrentSurveyDefinitions();\n        }\n        this.setInitializationStatus(4 /* Stopped */);\n    };\n    /**\n     * Gets the IActivityListener logging interface for callers that want to log directly rather than through telemetry\n     */\n    FloodgateEngine.prototype.getActivityListener = function () {\n        return this.activityListener;\n    };\n    FloodgateEngine.prototype.setInitializationStatus = function (status) {\n        this.initializationStatus = status;\n    };\n    FloodgateEngine.prototype.saveSettings = function () {\n        this.storage.fileLock(FileType.FloodgateSettings);\n        try {\n            this.writeString(FileType.FloodgateSettings, FloodgateSettings_1.FloodgateSettings.toJson(this.floodgateSettings));\n        }\n        finally {\n            this.storage.fileUnlock(FileType.FloodgateSettings);\n        }\n    };\n    FloodgateEngine.prototype.loadSettingsAndPriorEventCounts = function () {\n        try {\n            // Load up the prior survey history and prior event counts\n            this.previousSurveyActivationStats = this.surveyActivationStatsProvider.load();\n            this.previousSurveyEventActivityStats =\n                SurveyStatCollectionEventActivity_1.SurveyStatCollectionEventActivity.fromJson(this.readString(FileType.SurveyEventActivityStats));\n            // get the list of survey Id - all the survey should have event sent already\n            var stats = this.previousSurveyEventActivityStats.getStats();\n            for (var key in stats) {\n                if (stats.hasOwnProperty(key)) {\n                    this.surveyEventSent.push(key);\n                }\n            }\n            // Load up the general floodgateSettings\n            this.floodgateSettings = FloodgateSettings_1.FloodgateSettings.fromJson(this.readString(FileType.FloodgateSettings));\n        }\n        catch (e) {\n            FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FloodgateEngine.Common.Error, { ErrorMessage: "Error loading prior settings/events " + (e && e.toString()) });\n        }\n    };\n    FloodgateEngine.prototype.getAvailableChannelTypes = function () {\n        // Make sure we\'ve loaded the current survey definitions\n        var channels = this.governor.getAvailableChannelData();\n        var channelTypes = [];\n        channels.forEach(function (channel) {\n            if (channel) {\n                channelTypes.push(channel.getType());\n            }\n        });\n        return channelTypes;\n    };\n    FloodgateEngine.prototype.setPendingSurveysAndStartFloodgate = function () {\n        // Update our survey list, and push that through to the listener\n        this.setPendingSurveys(this.surveyClient.getAppSurveys());\n        this.updateActivityListenerWithCurrentSurveyDefinitions();\n        // Mark us as started\n        this.setInitializationStatus(3 /* Started */);\n        // Log our first start (aka floodgate boot) event\n        if (!this.loggedFirstStart) {\n            this.loggedFirstStart = true;\n            this.getActivityListener().logActivity(SurveyActivityListener.FloodgateStartActivityName);\n        }\n    };\n    FloodgateEngine.prototype.updateSurveyActivationStats = function (survey) {\n        var surveyInfo = survey.getSurveyInfo();\n        var surveyId = surveyInfo.getId();\n        var stats = this.previousSurveyActivationStats.getStats()[surveyId] || new SurveyStatCollectionActivation_1.SurveyActivationStats();\n        stats.Type = survey.getType();\n        stats.ExpirationTimeUtc = surveyInfo.getExpirationTimeUtc();\n        stats.ActivationTimeUtc = new Date();\n        stats.SurveyLaunchCount++;\n        this.previousSurveyActivationStats.addStats(surveyId, stats);\n        // Save the SurveyLaunchCountPerSession into global memory but not local storage\n        // so it won\'t be overwritten in local storage by another app instance\n        if (!globalSessionSurveyActivationCounts.hasOwnProperty(surveyId)) {\n            globalSessionSurveyActivationCounts[surveyId] = 0;\n        }\n        globalSessionSurveyActivationCounts[surveyId]++;\n    };\n    FloodgateEngine.prototype.saveSurveyActivationHistory = function () {\n        this.storage.fileLock(FileType.SurveyActivationStats);\n        try {\n            var statCollection = this.surveyActivationStatsProvider.load();\n            var previousStats = this.previousSurveyActivationStats.getStats();\n            // Build the update collection\n            var updateCollection = new SurveyStatCollectionActivation_1.SurveyStatCollectionActivation();\n            for (var key in this.launchedSurveys) {\n                if (this.launchedSurveys.hasOwnProperty(key)) {\n                    var survey = this.launchedSurveys[key];\n                    var surveyId = survey.getSurveyInfo().getId();\n                    // Make this part of the update list\n                    var stats = previousStats[surveyId];\n                    updateCollection.addStats(surveyId, stats);\n                }\n            }\n            // Actually merge our updates into the full collection\n            statCollection.accumulate(updateCollection);\n            this.surveyActivationStatsProvider.save(statCollection);\n            // Make sure to keep our internal collection consistent with what we just wrote\n            this.previousSurveyActivationStats = statCollection;\n        }\n        finally {\n            this.storage.fileUnlock(FileType.SurveyActivationStats);\n        }\n    };\n    FloodgateEngine.prototype.saveSurveyEventActivityHistory = function () {\n        this.storage.fileLock(FileType.SurveyEventActivityStats);\n        try {\n            var statCollection = SurveyStatCollectionEventActivity_1.SurveyStatCollectionEventActivity.fromJson(this.readString(FileType.SurveyEventActivityStats));\n            var now = new Date();\n            // Fill out our list of updates\n            var updateCollection = new SurveyStatCollectionEventActivity_1.SurveyStatCollectionEventActivity();\n            var _loop_1 = function (key) {\n                if (this_1.candidateSurveys.hasOwnProperty(key)) {\n                    var stats = new SurveyStatCollectionEventActivity_1.SurveyEventActivityStats();\n                    var survey = this_1.candidateSurveys[key];\n                    if (!survey.getSurveyInfo().isActiveForDate(now)) {\n                        return "continue";\n                    }\n                    stats.ExpirationTimeUtc = survey.getSurveyInfo().getExpirationTimeUtc();\n                    // Get the activities which are aggregated, if there aren\'t any continue\n                    var allActivities = survey.getSurveyInfo().getActivationEvent().getTrackingSet();\n                    var aggregateActivities_1 = [];\n                    var nonAggregateActivities_2 = [];\n                    allActivities.getList().forEach(function (data) {\n                        if (data) {\n                            if (data.getIsAggregate()) {\n                                aggregateActivities_1.push(data.getActivity());\n                            }\n                            else {\n                                nonAggregateActivities_2.push(data.getActivity());\n                            }\n                        }\n                    });\n                    stats.Counts = new Array(aggregateActivities_1.length);\n                    // Save off the counts we\'ve added for this session\n                    for (var i = 0; i < aggregateActivities_1.length; i++) {\n                        stats.Counts[i] = this_1.activityListener.moveSessionCountIntoBaseCount(aggregateActivities_1[i], survey.getSurveyInfo().getId());\n                    }\n                    for (var _i = 0, nonAggregateActivities_1 = nonAggregateActivities_2; _i < nonAggregateActivities_1.length; _i++) {\n                        var activity = nonAggregateActivities_1[_i];\n                        this_1.activityListener.saveSessionTrackingActivity(activity);\n                    }\n                    // Make this part of the update list\n                    updateCollection.addStats(survey.getSurveyInfo().getId(), stats);\n                }\n            };\n            var this_1 = this;\n            for (var key in this.candidateSurveys) {\n                _loop_1(key);\n            }\n            // Actually merge our updates into the full collection\n            statCollection.accumulate(updateCollection);\n            this.writeString(FileType.SurveyEventActivityStats, SurveyStatCollectionEventActivity_1.SurveyStatCollectionEventActivity.toJson(statCollection));\n            // Make sure to keep our internal collection consistent with what we just wrote\n            this.previousSurveyEventActivityStats = statCollection;\n        }\n        finally {\n            this.storage.fileUnlock(FileType.SurveyEventActivityStats);\n        }\n    };\n    FloodgateEngine.prototype.setPendingSurveys = function (pendingSurveys) {\n        this.candidateSurveys = {};\n        if (pendingSurveys) {\n            for (var key in pendingSurveys) {\n                if (pendingSurveys.hasOwnProperty(key)) {\n                    var survey = pendingSurveys[key];\n                    if (this.launcherFactory.AcceptsSurvey(survey)) {\n                        this.candidateSurveys[key] = survey;\n                    }\n                }\n            }\n        }\n    };\n    FloodgateEngine.prototype.getCurrentSurveyDefinitions = function () {\n        var _this = this;\n        // Get a vector of Surveys from our id-based map\n        var surveyList = new Array();\n        var allCampaignDefinitionIDs = this.getAllCampaignDefinitionIDs();\n        var allCandidateCampaignDefinitionIDs = this.getAllCandidateCampaignDefinitionIDs();\n        // Get all the campaign definitions. We need info from these for telemetry.\n        var allCampaignDefinitions = this.surveyClient.getCampaignDefinitions();\n        var isSurveyAllowed = function (surveyInfo) {\n            // always allow business critical and approved campaigns\n            if (GovernanceUtils_1.isBusinessCriticalSurvey(surveyInfo)) {\n                return true;\n            }\n            var surveyActivationStats = _this.previousSurveyActivationStats.getBySurveyId(surveyInfo.getId());\n            if (GovernanceUtils_1.isMultiLaunchSurvey(surveyInfo) &&\n                !GovernanceUtils_1.hasSurveyReachedMaxLaunches(surveyInfo, surveyActivationStats) &&\n                !GovernanceUtils_1.hasSurveyReachedMaxLaunchesPerSession(surveyInfo, globalSessionSurveyActivationCounts)) {\n                return true;\n            }\n            // Skip over any candidate surveys that have been previously completed or not active anymore\n            if (surveyActivationStats || !surveyInfo.isActiveForDate(new Date())) {\n                return false;\n            }\n            return true;\n        };\n        for (var key in this.candidateSurveys) {\n            if (this.candidateSurveys.hasOwnProperty(key)) {\n                var survey = this.candidateSurveys[key];\n                var surveyInfo = survey.getSurveyInfo();\n                var campaignDefinition = allCampaignDefinitions[surveyInfo === null || surveyInfo === void 0 ? void 0 : surveyInfo.getBackEndId()];\n                if (!campaignDefinition || !isSurveyAllowed(surveyInfo)) {\n                    continue;\n                }\n                // send the UserSelected event if it is not sent before\n                if (this.surveyEventSent.indexOf(key) < 0) {\n                    this.surveyEventSent.push(key);\n                    var additionalSurveyInfo = this.getAdditionalSurveyInfoForTelemetry(survey, null /* contextInfo */, allCampaignDefinitionIDs, allCandidateCampaignDefinitionIDs);\n                    FloodgateEngine.telemetryLogger.log_UserSelected(surveyInfo.getBackEndId(), surveyInfo.getId(), survey.getType(), JSON.stringify(additionalSurveyInfo));\n                }\n                surveyList.push(survey);\n            }\n        }\n        return surveyList;\n    };\n    FloodgateEngine.prototype.getAdditionalSurveyInfoForTelemetry = function (survey, contextInfo, allCampaignDefinitionIDs, allCandidateCampaignDefinitionIDs) {\n        // Get all the campaign definitions. We need info from these for telemetry.\n        var allCampaignDefinitions = this.surveyClient.getCampaignDefinitions();\n        // Get the corresponding campaign definition to the survey in question.\n        var correspondingCampaignDefinition = allCampaignDefinitions[survey.getCampaignId()];\n        // Survey properties to get from its corresponding CampaignDefinition:\n        var percentageNumerator;\n        var percentageDenominator;\n        var nominationPeriodNumber;\n        var cooldownPeriodNumber;\n        percentageNumerator = correspondingCampaignDefinition.nominationScheme.percentageNumerator;\n        percentageDenominator = correspondingCampaignDefinition.nominationScheme.percentageDenominator;\n        nominationPeriodNumber = correspondingCampaignDefinition.nominationScheme.nominationPeriod.asTimeIntervalSeconds();\n        nominationPeriodNumber = Utils_1.isNOU(nominationPeriodNumber) ? -1 : nominationPeriodNumber; // Setting to -1 if null or undefined\n        cooldownPeriodNumber = correspondingCampaignDefinition.nominationScheme.cooldownPeriod.asTimeIntervalSeconds();\n        cooldownPeriodNumber = Utils_1.isNOU(cooldownPeriodNumber) ? -1 : cooldownPeriodNumber; // Setting to -1 if null or undefined\n        var surveyInfo = survey.getSurveyInfo();\n        return {\n            allCampaignDefinitionIDs: allCampaignDefinitionIDs,\n            allCandidateCampaignDefinitionIDs: allCandidateCampaignDefinitionIDs,\n            channelType: surveyInfo.getGovernedChannelType(),\n            contextCount: contextInfo ? contextInfo.length : undefined,\n            cooldownPeriodNumber: cooldownPeriodNumber,\n            nominationPeriodNumber: nominationPeriodNumber,\n            percentageDenominator: percentageDenominator,\n            percentageNumerator: percentageNumerator,\n            surveyLauncherType: survey.getLauncherType(),\n            businessLevel: surveyInfo.getBusinessLevel(),\n            maxLaunches: surveyInfo.getMaxLaunches(),\n            maxLaunchesPerSession: surveyInfo.getMaxLaunchesPerSession(),\n        };\n    };\n    FloodgateEngine.prototype.getAllCandidateCampaignDefinitionIDs = function () {\n        var allCandidateCampaignDefinitionIDs = [];\n        // Get all the candidate surveys\' campaign definition IDs\n        for (var key in this.candidateSurveys) {\n            if (this.candidateSurveys.hasOwnProperty(key)) {\n                var candidateSurvey = this.candidateSurveys[key];\n                allCandidateCampaignDefinitionIDs.push(candidateSurvey.getSurveyInfo().getBackEndId());\n            }\n        }\n        return allCandidateCampaignDefinitionIDs;\n    };\n    FloodgateEngine.prototype.getAllCampaignDefinitionIDs = function () {\n        var allCampaignDefinitions = this.surveyClient.getCampaignDefinitions();\n        var allCampaignDefinitionIDs = [];\n        for (var definitionsKey in allCampaignDefinitions) {\n            if (Object.prototype.hasOwnProperty.call(allCampaignDefinitions, definitionsKey)) {\n                var definition = allCampaignDefinitions[definitionsKey];\n                allCampaignDefinitionIDs.push(definition.campaignId);\n            }\n        }\n        return allCampaignDefinitionIDs;\n    };\n    FloodgateEngine.prototype.updateActivityListenerWithCurrentSurveyDefinitions = function () {\n        var surveyList = this.getCurrentSurveyDefinitions();\n        var trackingContractList = [];\n        for (var _i = 0, surveyList_1 = surveyList; _i < surveyList_1.length; _i++) {\n            var survey = surveyList_1[_i];\n            var surveyInfo = survey.getSurveyInfo();\n            var trackingContract = new ActivityTrackingContract_1.ActivityTrackingContract(surveyInfo.getId(), surveyInfo.getActivationEvent().getTrackingSet());\n            trackingContractList.push(trackingContract);\n        }\n        this.activityListener.SetActivityTrackingContracts(trackingContractList, this.previousSurveyEventActivityStats);\n    };\n    FloodgateEngine.prototype.setCriticalPendingSurveysAndUpdateActivityListener = function () {\n        var activeSurveys = {};\n        // Get all the candidate surveys\' campaign definition IDs\n        for (var key in this.candidateSurveys) {\n            if (this.candidateSurveys.hasOwnProperty(key)) {\n                var candidateSurvey = this.candidateSurveys[key];\n                if (GovernanceUtils_1.isCriticalSurvey(candidateSurvey.getSurveyInfo())) {\n                    activeSurveys[key] = candidateSurvey;\n                }\n            }\n        }\n        if (Object.keys(activeSurveys).length > 0) {\n            this.setPendingSurveys(activeSurveys);\n            this.updateActivityListenerWithCurrentSurveyDefinitions();\n        }\n    };\n    FloodgateEngine.prototype.shouldAcceptActivity = function (activityName) {\n        return this.initializationStatus === 3 /* Started */ ||\n            activityName === SurveyActivityListener.FloodgateStartActivityName;\n    };\n    FloodgateEngine.prototype.onSurveyActivated = function (surveyId, contextInfo) {\n        // Find the survey object that corresponds to the surveyId passed\n        var surveys = this.getCurrentSurveyDefinitions();\n        var survey;\n        for (var _i = 0, surveys_1 = surveys; _i < surveys_1.length; _i++) {\n            var tempSurvey = surveys_1[_i];\n            if (tempSurvey.getSurveyInfo().getId() === surveyId) {\n                survey = tempSurvey;\n                break;\n            }\n        }\n        if (Utils_1.isNOU(survey)) {\n            FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.FloodgateEngine.OnSurveyActivated.SurveyNotDefined, "Survey is not defined in the current survey definitions.");\n            return;\n        }\n        try {\n            var governedChannelType = survey.getSurveyInfo().getGovernedChannelType();\n            // If the governance service is in use, launch survey asynchronously\n            if (this.governanceServiceClient.isEnabled(governedChannelType)) {\n                // record the stale surveys, so we can clear its tracker if Engine is stopped\n                this.staleTriggeredSurveysQueue.push(survey);\n                // If there is no survey in stale before, launch the survey right away\n                if (this.staleTriggeredSurveysQueue.length === 1) {\n                    // Launch the survey asynchronously\n                    this.checkGovernanceServiceAndActivateSurvey(survey, governedChannelType, contextInfo);\n                }\n            }\n            else {\n                this.activateSurvey(survey, governedChannelType, contextInfo);\n            }\n        }\n        catch (e) {\n            FloodgateEngine.telemetryLogger.log_Event(Constants_1.TelemetryEvent.FloodgateEngine.OnSurveyActivated.Error, { ErrorMessage: "Error activating survey " + (e && e.toString()), ErrorDetails: e && e.stack });\n        }\n    };\n    FloodgateEngine.prototype.activateSurvey = function (survey, governedChannelType, contextInfo) {\n        var launchSurvey = false;\n        // Figure out if the activated survey is still relevant\n        if (!this.candidateSurveys[survey.getSurveyInfo().getId()]) {\n            // Survey is no longer relevant but was activated. Suppress it.\n            FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FloodgateEngine.OnSurveyActivated.ActivationIrrelevantSurvey, {\n                CampaignId: survey.getSurveyInfo().getBackEndId(),\n                SurveyId: survey.getSurveyInfo().getId(),\n            });\n        }\n        else if (!survey.getSurveyInfo().isActiveForDate(new Date())) {\n            // Survey is no longer active (e.g. it was when we registered it but it has now expired)\n            FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FloodgateEngine.OnSurveyActivated.ActivationExpiredSurvey, {\n                CampaignId: survey.getSurveyInfo().getBackEndId(),\n                SurveyId: survey.getSurveyInfo().getId(),\n            });\n        }\n        else {\n            // Refresh channels\n            this.governor.refreshChannelData();\n            if (GovernanceUtils_1.isCriticalSurvey(survey.getSurveyInfo())) {\n                launchSurvey = true;\n            }\n            else if (!this.governor.isChannelOpen(governedChannelType)) {\n                // Channel has closed and maxLaunches is not set, suppress the survey\n                FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FloodgateEngine.OnSurveyActivated.ClosedChannelType, { ClosedChannelType: GovernedChannel_1.GovernedChannelType[governedChannelType] });\n            }\n            else {\n                // Get latest survey states from provider\n                var refreshedSurveyActivationStats = this.surveyActivationStatsProvider.load();\n                if (refreshedSurveyActivationStats.getBySurveyId(survey.getSurveyInfo().getId())) {\n                    // Survey stats exists already, don\'t launch\n                    FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FloodgateEngine.OnSurveyActivated.ActivationStatsSuppressedSurvey, {\n                        CampaignId: survey.getSurveyInfo().getBackEndId(),\n                        SurveyId: survey.getSurveyInfo().getId(),\n                    });\n                }\n                else if (Object.keys(this.launchedSurveys).length === 0) {\n                    // for now we only support launching one survey per session unless it is multi-launch campaign\n                    // Track this survey activation for the launch history tracker\n                    launchSurvey = true;\n                }\n                else {\n                    var triggeredSurvey = Object.values(this.launchedSurveys)[0];\n                    if (!Utils_1.isNOU(triggeredSurvey)) {\n                        FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FloodgateEngine.OnSurveyActivated.SessionSuppressedSurvey, {\n                            CampaignId: triggeredSurvey.getSurveyInfo().getBackEndId(),\n                            SurveyId: triggeredSurvey.getSurveyInfo().getId(),\n                        });\n                    }\n                }\n            }\n            if (launchSurvey) {\n                this.launchedSurveys[survey.getSurveyInfo().getId()] = survey;\n            }\n        }\n        // At this point, regardless of whether or not the survey is still relevant, we should flush out the stats\n        this.updateSurveyActivationStats(survey);\n        this.mergeAndSave();\n        // shut off further survey launches\n        this.activityListener.clearSurveys();\n        // Clear the survey from stale list\n        this.staleTriggeredSurveysQueue = [];\n        // Actually launch the survey if possible\n        if (launchSurvey) {\n            // Get the stringified json with activity names, counts and isAggregate info for TriggetMet telemetry.\n            var activityTrackingString = survey.getSurveyInfo().getActivationEvent().getTrackingSet()\n                .getActivityTrackingInfo(this.activityListener, survey.getSurveyInfo().getId());\n            var additionalSurveyInfo = this.getAdditionalSurveyInfoForTelemetry(survey, contextInfo, this.getAllCampaignDefinitionIDs(), this.getAllCandidateCampaignDefinitionIDs());\n            // Only adding the governance service client state at TriggerMet event\n            additionalSurveyInfo.governanceServiceClientState = this.governanceServiceClient.getClientState();\n            FloodgateEngine.telemetryLogger.log_TriggerMet(survey.getSurveyInfo().getBackEndId(), survey.getSurveyInfo().getId(), survey.getType(), activityTrackingString, JSON.stringify(additionalSurveyInfo));\n            // Set govern channel\n            this.governor.startChannelCooldown(governedChannelType);\n            var surveyInfo = survey.getSurveyInfo();\n            var isSurveyComplete = true;\n            if (GovernanceUtils_1.isBusinessCriticalSurvey(surveyInfo)) {\n                // critical campaigns are not tracked\n                isSurveyComplete = false;\n            }\n            else if (GovernanceUtils_1.isMultiLaunchSurvey(surveyInfo)) {\n                var surveyActivationStats = this.previousSurveyActivationStats.getBySurveyId(surveyInfo.getId());\n                isSurveyComplete = GovernanceUtils_1.hasSurveyReachedMaxLaunches(surveyInfo, surveyActivationStats);\n            }\n            // Set campaign states\n            this.surveyClient.onSurveyActivated(surveyInfo, isSurveyComplete);\n            // Show the survey\n            this.launchLauncher(survey, contextInfo);\n            // check if there are any critical campaigns and start tracking again\n            this.setCriticalPendingSurveysAndUpdateActivityListener();\n        }\n    };\n    FloodgateEngine.prototype.checkGovernanceServiceAndActivateSurvey = function (survey, governedChannelType, contextInfo) {\n        return __awaiter(this, void 0, void 0, function () {\n            var campaignDefinition, campaignCooldown, channelCooldown, serviceResult, launchSurvey, lastSurveyTriggerInfo;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        campaignDefinition = this.surveyClient.getCampaignDefinitions()[survey.getCampaignId()];\n                        campaignCooldown = campaignDefinition.nominationScheme.cooldownPeriod.asTimeIntervalSeconds();\n                        channelCooldown = Governor_1.Governor.GetChannelCoolDown(governedChannelType);\n                        return [4 /*yield*/, this.governanceServiceClient\n                                .checkGovernancePermitAsync(survey, campaignCooldown, channelCooldown, governedChannelType)];\n                    case 1:\n                        serviceResult = _a.sent();\n                        launchSurvey = false;\n                        // Log the stale\n                        FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FloodgateEngine.CheckGovernanceServiceAndActivateSurvey.GovernanceServiceClientCompleted, {\n                            Message: JSON.stringify(this.createGorvernanceResponseTelemetry(serviceResult)),\n                        });\n                        // Check if engine is still running\n                        if (this.initializationStatus !== 3 /* Started */) {\n                            return [2 /*return*/];\n                        }\n                        if (!serviceResult.error) {\n                            // Check result is permitted\n                            if (serviceResult.permission) { // the Governance Service is permitting, continue to trigger\n                                launchSurvey = true;\n                            }\n                            else {\n                                lastSurveyTriggerInfo = serviceResult.lastTriggerSurvey;\n                                // For now, we only know the channel is in cooldown but not the specific survey\n                                // So only set governed channel to new cooldown\n                                this.governor.startChannelCooldown(governedChannelType, lastSurveyTriggerInfo.lastTriggerSurveyTime);\n                                // Clear the survey relating to channel\n                                this.clearSurveyWithChannel(governedChannelType);\n                            }\n                        }\n                        else {\n                            // If force to display with error, continue to trigger the survey\n                            if (this.governanceServiceClient.shouldForceDisplay()) {\n                                launchSurvey = true;\n                                // Log the force to display event\n                                FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FloodgateEngine.CheckGovernanceServiceAndActivateSurvey.GovernanceServiceForceToDisplay, {\n                                    ErrorMessage: serviceResult.errorMessage,\n                                });\n                            }\n                        }\n                        if (launchSurvey) {\n                            // Launch the survey\n                            this.activateSurvey(survey, governedChannelType, contextInfo);\n                            return [2 /*return*/];\n                        }\n                        // If there is only one survey, which is the current one in process, clear queue and return\n                        if (this.staleTriggeredSurveysQueue.length <= 1) {\n                            this.staleTriggeredSurveysQueue = [];\n                            return [2 /*return*/];\n                        }\n                        // Remove the first activated survey from the list which is the current one in process\n                        this.staleTriggeredSurveysQueue.shift();\n                        // Playback the next activated survey in waiting\n                        this.checkGovernanceServiceAndActivateSurvey(this.staleTriggeredSurveysQueue[0], governedChannelType, contextInfo);\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    FloodgateEngine.prototype.readString = function (fileType) {\n        return this.storage.read(fileType);\n    };\n    FloodgateEngine.prototype.writeString = function (fileType, str) {\n        this.storage.write(fileType, str);\n    };\n    FloodgateEngine.prototype.launchLauncher = function (survey, contextInfo) {\n        var launcher = this.launcherFactory.makeSurveyLauncher(survey);\n        if (launcher) {\n            this.launchedLaunchers.push(launcher);\n            this.onSurveyActivatedCallback.onSurveyActivated(launcher, survey, { contextInfo: contextInfo });\n        }\n    };\n    FloodgateEngine.prototype.clearSurveyWithChannel = function (governedChannelType) {\n        var activeSurveys = {};\n        // Get all the candidate surveys\' campaign definition IDs\n        for (var key in this.candidateSurveys) {\n            if (this.candidateSurveys.hasOwnProperty(key)) {\n                var candidateSurvey = this.candidateSurveys[key];\n                if (candidateSurvey.getSurveyInfo().getGovernedChannelType() !== governedChannelType) {\n                    activeSurveys[key] = candidateSurvey;\n                }\n            }\n        }\n        this.candidateSurveys = activeSurveys;\n        this.activityListener.UpdateActivityTrackingContracts(this.candidateSurveys);\n    };\n    FloodgateEngine.prototype.createGorvernanceResponseTelemetry = function (serviceResult) {\n        return {\n            FloodgateEngineStatus: this.initializationStatus.toString(),\n            GovernanceServiceResult: serviceResult,\n            StaleTriggeredSurveysQueueCount: this.staleTriggeredSurveysQueue.length - 1,\n        };\n    };\n    // Initialize telemetry logger with no-op logger\n    FloodgateEngine.telemetryLogger = new DefaultFloodgateTelemetryLogger();\n    return FloodgateEngine;\n}());\nexports.FloodgateEngine = FloodgateEngine;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0Zsb29kZ2F0ZUVuZ2luZS50cz80YWM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUtBLHlKQUE2RTtBQVU3RSx3S0FHNkU7QUFDN0UsdUlBQTZEO0FBQzdELHlKQUF3RztBQUV4RyxtR0FBNkM7QUFDN0MsMkhBQXdEO0FBQ3hELHFIQUE4RTtBQUM5RSw0SkFBb0g7QUFDcEgsZ0dBQWlEO0FBRWpELHdJQUFtRTtBQUNuRSxrS0FDMEU7QUFDMUUsMktBQWtIO0FBRWxILElBQU8sUUFBUSxHQUFHLHlCQUF5QixDQUFDLFFBQVEsQ0FBQztBQUNyRCxnSkFBc0U7QUFDdEUscUhBQXdLO0FBQ3hLLHVGQUFnQztBQUVoQyxxQ0FBcUM7QUFDckM7SUFBQTtJQW9CQSxDQUFDO0lBbkJBLFlBQVk7SUFDTCx3REFBYyxHQUFyQixVQUFzQixVQUFrQixFQUFFLFFBQWdCLEVBQUUsVUFBd0IsRUFBRSxrQkFBMEIsRUFDL0csb0JBQTRCLElBQVMsQ0FBQztJQUV2QyxZQUFZO0lBQ0wsMERBQWdCLEdBQXZCLFVBQXdCLFVBQWtCLEVBQUUsUUFBZ0IsRUFBRSxVQUF3QixFQUNyRixvQkFBNEIsSUFBUyxDQUFDO0lBRXZDLFlBQVk7SUFDTCxpRUFBdUIsR0FBOUIsVUFBK0IsWUFBb0IsSUFBUyxDQUFDO0lBRTdELFlBQVk7SUFDTCxtREFBUyxHQUFoQixVQUFpQixPQUFlLEVBQUUsWUFBb0IsSUFBUyxDQUFDO0lBRWhFLFlBQVk7SUFDTCxtREFBUyxHQUFoQixVQUFpQixPQUFlLEVBQUUsVUFBZ0MsSUFBUyxDQUFDO0lBRTVFLFlBQVk7SUFDTCx3REFBYyxHQUFyQixVQUFzQixPQUFlO1FBQUUsY0FBYzthQUFkLFVBQWMsRUFBZCxxQkFBYyxFQUFkLElBQWM7WUFBZCw2QkFBYzs7SUFBUyxDQUFDO0lBQ2hFLHNDQUFDO0FBQUQsQ0FBQztBQVVELElBQU0sNkJBQTZCLEdBQXFE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QXgwQkQsZ0RBQWdEO0lBQ2pDLCtCQUFlLEdBQThCLElBQUksK0JBQStCLEVBQUUsQ0FBQztJQXcwQm5HLHNCQUFDO0NBQUE7QUF0NUJZLDBDQUFlIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvRmxvb2RnYXRlRW5naW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZpdHlUcmFja2luZ1NldCB9IGZyb20gXCIuL0FjdGl2aXR5VHJhY2tpbmdTZXRcIjtcclxuaW1wb3J0IHsgSVN1cnZleUluZm8sIElVc2VyRmFjdFByb3ZpZGVyIH0gZnJvbSBcIi4vQXBpL0FwaVwiO1xyXG5pbXBvcnQgKiBhcyBJQWN0aXZpdHlMaXN0ZW5lciBmcm9tIFwiLi9BcGkvSUFjdGl2aXR5TGlzdGVuZXJcIjtcclxuaW1wb3J0IHsgSUZsb29kZ2F0ZUVudmlyb25tZW50UHJvdmlkZXIgfSBmcm9tIFwiLi9BcGkvSUZsb29kZ2F0ZUVudmlyb25tZW50UHJvdmlkZXJcIjtcclxuaW1wb3J0IHsgSUZsb29kZ2F0ZVNldHRpbmdTdG9yYWdlQ2FsbGJhY2sgfSBmcm9tIFwiLi9BcGkvSUZsb29kZ2F0ZVNldHRpbmdTdG9yYWdlQ2FsbGJhY2tcIjtcclxuaW1wb3J0ICogYXMgSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlciBmcm9tIFwiLi9BcGkvSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlclwiO1xyXG5pbXBvcnQgKiBhcyBJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIgZnJvbSBcIi4vQXBpL0lGbG9vZGdhdGVTdHJpbmdQcm92aWRlclwiO1xyXG5pbXBvcnQgeyBJRmxvb2RnYXRlVGVsZW1ldHJ5TG9nZ2VyIH0gZnJvbSBcIi4vQXBpL0lGbG9vZGdhdGVUZWxlbWV0cnlMb2dnZXJcIjtcclxuaW1wb3J0IHsgR292ZXJuYW5jZVNlcnZpY2VDbGllbnRTdGF0ZSwgSUdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50LCBJR292ZXJuYW5jZVNlcnZpY2VSZXN1bHQsIElHb3Zlcm5hbmNlU3VydmV5SW5mbywgSUdvdmVybmFuY2VTdXJ2ZXlSZXNwb25zZSB9IGZyb20gXCIuL0FwaS9JR292ZXJuYW5jZVNlcnZpY2VDbGllbnRcIjtcclxuaW1wb3J0IHsgSUNvbnRleHREYXRhLCBJT25TdXJ2ZXlBY3RpdmF0ZWRDYWxsYmFjayB9IGZyb20gXCIuL0FwaS9JT25TdXJ2ZXlBY3RpdmF0ZWRDYWxsYmFja1wiO1xyXG5pbXBvcnQgKiBhcyBJU3VydmV5IGZyb20gXCIuL0FwaS9JU3VydmV5XCI7XHJcbmltcG9ydCB7IElTdXJ2ZXlMYXVuY2hlciB9IGZyb20gXCIuL0FwaS9JU3VydmV5TGF1bmNoZXJcIjtcclxuaW1wb3J0IHsgSVN1cnZleUxhdW5jaGVyRmFjdG9yeSB9IGZyb20gXCIuL0FwaS9JU3VydmV5TGF1bmNoZXJGYWN0b3J5XCI7XHJcbmltcG9ydCB7IElUZWxlbWV0cnlQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vQXBpL0lUZWxlbWV0cnlQcm9wZXJ0aWVzXCI7XHJcbmltcG9ydCB7IElUcmFuc3BvcnRlckZhY3RvcnkgfSBmcm9tIFwiLi9BcGkvSVRyYW5zcG9ydGVyRmFjdG9yeVwiO1xyXG5pbXBvcnQgeyBDYW1wYWlnbkRlZmluaXRpb24sXHJcblx0XHRDYW1wYWlnbk5vbWluYXRpb25TY2hlbWVSYXRpb1BlcmNlbnRhZ2UsXHJcblx0XHRGaWxlU3lzdGVtQ2FtcGFpZ25EZWZpbml0aW9uUHJvdmlkZXIsXHJcblx0XHRJQ2FtcGFpZ25EZWZpbml0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi9DYW1wYWlnbi9DYW1wYWlnbkRlZmluaXRpb25Qcm92aWRlclwiO1xyXG5pbXBvcnQgeyBDYW1wYWlnbk1hbmFnZXIgfSBmcm9tIFwiLi9DYW1wYWlnbi9DYW1wYWlnbk1hbmFnZXJcIjtcclxuaW1wb3J0IHsgQ2FtcGFpZ25TdGF0ZVByb3ZpZGVyRmFjdG9yeSwgSUNhbXBhaWduU3RhdGVQcm92aWRlciB9IGZyb20gXCIuL0NhbXBhaWduL0NhbXBhaWduU3RhdGVQcm92aWRlclwiO1xyXG5pbXBvcnQgeyBJRGljdGlvbmFyeSB9IGZyb20gXCIuL0NvbW1vblwiO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlFdmVudCB9IGZyb20gXCIuL0NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBGbG9vZGdhdGVTZXR0aW5ncyB9IGZyb20gXCIuL0Zsb29kZ2F0ZVNldHRpbmdzXCI7XHJcbmltcG9ydCB7IEdvdmVybmVkQ2hhbm5lbFR5cGUsIElHb3Zlcm5lZENoYW5uZWxEYXRhIH0gZnJvbSBcIi4vR292ZXJuZWRDaGFubmVsXCI7XHJcbmltcG9ydCB7IEdvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXJGYWN0b3J5LCBJR292ZXJuZWRDaGFubmVsU3RhdGVQcm92aWRlciB9IGZyb20gXCIuL0dvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXJcIjtcclxuaW1wb3J0IHsgR292ZXJub3IsIElHb3Zlcm5vciB9IGZyb20gXCIuL0dvdmVybm9yXCI7XHJcbmltcG9ydCB7IElTdXJ2ZXlDbGllbnQgfSBmcm9tIFwiLi9JU3VydmV5Q2xpZW50XCI7XHJcbmltcG9ydCAqIGFzIFN1cnZleUFjdGl2aXR5TGlzdGVuZXIgZnJvbSBcIi4vU3VydmV5QWN0aXZpdHlMaXN0ZW5lclwiO1xyXG5pbXBvcnQgeyBJU3VydmV5QWN0aXZhdGlvblN0YXRzUHJvdmlkZXIsIFN1cnZleUFjdGl2YXRpb25TdGF0cywgU3VydmV5QWN0aXZhdGlvblN0YXRzUHJvdmlkZXJGYWN0b3J5LFxyXG5cdFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbiB9IGZyb20gXCIuL1N1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvblwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHMsIFN1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eSB9IGZyb20gXCIuL1N1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eVwiO1xyXG5cclxuaW1wb3J0IEZpbGVUeXBlID0gSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlci5GaWxlVHlwZTtcclxuaW1wb3J0IHsgQWN0aXZpdHlUcmFja2luZ0NvbnRyYWN0IH0gZnJvbSBcIi4vQWN0aXZpdHlUcmFja2luZ0NvbnRyYWN0XCI7XHJcbmltcG9ydCB7IGhhc1N1cnZleVJlYWNoZWRNYXhMYXVuY2hlcywgaGFzU3VydmV5UmVhY2hlZE1heExhdW5jaGVzUGVyU2Vzc2lvbiwgaXNCdXNpbmVzc0NyaXRpY2FsU3VydmV5LCBpc0NyaXRpY2FsU3VydmV5LCBpc011bHRpTGF1bmNoU3VydmV5IH0gZnJvbSBcIi4vR292ZXJuYW5jZVV0aWxzXCI7XHJcbmltcG9ydCB7IGlzTk9VIH0gZnJvbSBcIi4vVXRpbHNcIjtcclxuXHJcbi8vIFRlbGVtZXRyeSBsb2dnZXIgd2l0aCBuby1vcCBsb2dnZXJcclxuY2xhc3MgRGVmYXVsdEZsb29kZ2F0ZVRlbGVtZXRyeUxvZ2dlciBpbXBsZW1lbnRzIElGbG9vZGdhdGVUZWxlbWV0cnlMb2dnZXIge1xyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBsb2dfVHJpZ2dlck1ldChjYW1wYWlnbklkOiBzdHJpbmcsIHN1cnZleUlkOiBzdHJpbmcsIHN1cnZleVR5cGU6IElTdXJ2ZXkuVHlwZSwgc3VydmV5QWN0aXZpdHlJbmZvOiBzdHJpbmcsXHJcblx0XHRhZGRpdGlvbmFsU3VydmV5SW5mbzogc3RyaW5nKTogdm9pZCB7fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgbG9nX1VzZXJTZWxlY3RlZChjYW1wYWlnbklkOiBzdHJpbmcsIHN1cnZleUlkOiBzdHJpbmcsIHN1cnZleVR5cGU6IElTdXJ2ZXkuVHlwZSxcclxuXHRcdGFkZGl0aW9uYWxTdXJ2ZXlJbmZvOiBzdHJpbmcpOiB2b2lkIHt9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBsb2dfQ2FtcGFpZ25Mb2FkX0ZhaWxlZChlcnJvck1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge31cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGxvZ19FcnJvcihldmVudElkOiBzdHJpbmcsIGVycm9yTWVzc2FnZTogc3RyaW5nKTogdm9pZCB7fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgbG9nX0V2ZW50KGV2ZW50SWQ6IHN0cmluZywgcHJvcGVydGllczogSVRlbGVtZXRyeVByb3BlcnRpZXMpOiB2b2lkIHt9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBsb2dfTG9jYWxFcnJvcihtZXNzYWdlOiBzdHJpbmcsIC4uLmRhdGE6IGFueVtdKTogdm9pZCB7fVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZW51bSBJbml0aWFsaXphdGlvblN0YXR1cyB7XHJcblx0Tm9uZSA9IDAsXHJcblx0RXJyb3IsXHJcblx0SW5pdGlhbGl6aW5nLFxyXG5cdFN0YXJ0ZWQsXHJcblx0U3RvcHBlZCxcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFN1cnZleUFjdGl2aXR5TGlzdGVuZXI6IFN1cnZleUFjdGl2aXR5TGlzdGVuZXIuSUFjdGl2aXR5TGlzdGVuZXJDYWxsYmFjayA9IHtcclxuXHRydW4oc3VydmV5KSB7XHJcblx0fSxcclxuXHRzaG91bGRBY2NlcHRBY3Rpdml0eShhY3Rpdml0eU5hbWUpIHtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH0sXHJcbn07XHJcblxyXG5jb25zdCBnbG9iYWxTZXNzaW9uU3VydmV5QWN0aXZhdGlvbkNvdW50czogSURpY3Rpb25hcnk8bnVtYmVyPiA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIEZsb29kZ2F0ZSBFbmdpbmUgY2xhc3MuICBUaGUgbWFpbiB3aXJpbmcgaHViIGFuZCB0aGUgYnJhaW5zIHJlc3BvbnNpYmxlIGZvclxyXG4gKiBsaW5raW5nIHRvZ2V0aGVyIHRoZSBzdXJ2ZXkgZGVmaW5pdGlvbnMsIGdvdmVybmFuY2UsIGFjdGl2aXR5IHRyYWNraW5nLCBhbmRcclxuICogc3VydmV5IGxhdW5jaGVycy4gIE9ubHkgb25lLWluc3RhbmNlLWF0LWEtdGltZSBvZiB0aGVzZSBzaG91bGQgYmUgY3JlYXRlZFxyXG4gKiBwZXIgYXBwIHNlc3Npb24uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRmxvb2RnYXRlRW5naW5lIHtcclxuXHRwdWJsaWMgc3RhdGljIHNldFRlbGVtZXRyeUxvZ2dlcih0ZWxlbWV0cnlMb2dnZXI6IElGbG9vZGdhdGVUZWxlbWV0cnlMb2dnZXIpOiB2b2lkIHtcclxuXHRcdGlmICghdGVsZW1ldHJ5TG9nZ2VyKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRlbGVtZXRyeUxvZ2dlciBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdEZsb29kZ2F0ZUVuZ2luZS50ZWxlbWV0cnlMb2dnZXIgPSB0ZWxlbWV0cnlMb2dnZXI7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc3RhdGljIGdldFRlbGVtZXRyeUxvZ2dlcigpOiBJRmxvb2RnYXRlVGVsZW1ldHJ5TG9nZ2VyIHtcclxuXHRcdHJldHVybiBGbG9vZGdhdGVFbmdpbmUudGVsZW1ldHJ5TG9nZ2VyO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHN0YXRpYyBnZXRUcmFuc3BvcnRGYWN0b3J5KCk6IElUcmFuc3BvcnRlckZhY3Rvcnkge1xyXG5cdFx0cmV0dXJuIEZsb29kZ2F0ZUVuZ2luZS50cmFuc3BvcnRlckZhY3Rvcnk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc3RhdGljIG1ha2UoXHJcblx0XHRidWlsZFZlcnNpb246IHN0cmluZyxcclxuXHRcdGxhdW5jaGVyRmFjdG9yeTogSVN1cnZleUxhdW5jaGVyRmFjdG9yeSxcclxuXHRcdG9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2s6IElPblN1cnZleUFjdGl2YXRlZENhbGxiYWNrLFxyXG5cdFx0ZmlsZUJhc2VkU3RvcmFnZVByb3ZpZGVyOiBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyLFxyXG5cdFx0aG9zdEJhc2VkU3RvcmFnZVByb3ZpZGVyOiBJRmxvb2RnYXRlU2V0dGluZ1N0b3JhZ2VDYWxsYmFjayxcclxuXHRcdHN0cmluZ1Byb3ZpZGVyOiBJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIsXHJcblx0XHRlbnZpcm9ubWVudFByb3ZpZGVyOiBJRmxvb2RnYXRlRW52aXJvbm1lbnRQcm92aWRlcixcclxuXHRcdHRyYW5zcG9ydGVyRmFjdG9yeTogSVRyYW5zcG9ydGVyRmFjdG9yeSxcclxuXHRcdGNhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyczogSUNhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyW10sXHJcblx0XHR1c2VyRmFjdHNQcm92aWRlcjogSVVzZXJGYWN0UHJvdmlkZXIsXHJcblx0XHRnb3Zlcm5hbmNlU2VydmljZUNsaWVudDogSUdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50LFxyXG5cdFx0aXNQcmlvcml0eUVuYWJsZWQ6IGJvb2xlYW4sXHJcblx0XHRzdXJ2ZXlDbGllbnQ/OiBJU3VydmV5Q2xpZW50KTogRmxvb2RnYXRlRW5naW5lIHtcclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBnb3Zlcm5lZENoYW5uZWxTdGF0ZVByb3ZpZGVyOiBJR292ZXJuZWRDaGFubmVsU3RhdGVQcm92aWRlclxyXG5cdFx0XHRcdD0gR292ZXJuZWRDaGFubmVsU3RhdGVQcm92aWRlckZhY3RvcnkubWFrZShmaWxlQmFzZWRTdG9yYWdlUHJvdmlkZXIsIGhvc3RCYXNlZFN0b3JhZ2VQcm92aWRlcik7XHJcblxyXG5cdFx0XHRjb25zdCBzdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlcjogSVN1cnZleUFjdGl2YXRpb25TdGF0c1Byb3ZpZGVyXHJcblx0XHRcdFx0PSBTdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlckZhY3RvcnkubWFrZShmaWxlQmFzZWRTdG9yYWdlUHJvdmlkZXIsIGhvc3RCYXNlZFN0b3JhZ2VQcm92aWRlcik7XHJcblxyXG5cdFx0XHRjb25zdCBjYW1wYWlnblN0YXRlUHJvdmlkZXI6IElDYW1wYWlnblN0YXRlUHJvdmlkZXJcclxuXHRcdFx0XHQ9IENhbXBhaWduU3RhdGVQcm92aWRlckZhY3RvcnkubWFrZShmaWxlQmFzZWRTdG9yYWdlUHJvdmlkZXIsIGhvc3RCYXNlZFN0b3JhZ2VQcm92aWRlcik7XHJcblxyXG5cdFx0XHRjYW1wYWlnbkRlZmluaXRpb25Qcm92aWRlcnMucHVzaChuZXcgRmlsZVN5c3RlbUNhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyKGZpbGVCYXNlZFN0b3JhZ2VQcm92aWRlcikpO1xyXG5cclxuXHRcdFx0Y29uc3QgY2xpZW50ID0gc3VydmV5Q2xpZW50IHx8IG5ldyBDYW1wYWlnbk1hbmFnZXIoXHJcblx0XHRcdFx0Y2FtcGFpZ25TdGF0ZVByb3ZpZGVyLFxyXG5cdFx0XHRcdGNhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVycyxcclxuXHRcdFx0XHRzdHJpbmdQcm92aWRlcixcclxuXHRcdFx0XHRlbnZpcm9ubWVudFByb3ZpZGVyLFxyXG5cdFx0XHRcdGJ1aWxkVmVyc2lvbixcclxuXHRcdFx0XHRuZXcgRGF0ZSgpLFxyXG5cdFx0XHRcdGlzUHJpb3JpdHlFbmFibGVkLFxyXG5cdFx0XHRcdHVzZXJGYWN0c1Byb3ZpZGVyLFxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0cmV0dXJuIG5ldyBGbG9vZGdhdGVFbmdpbmUoXHJcblx0XHRcdFx0Y2xpZW50LFxyXG5cdFx0XHRcdG5ldyBTdXJ2ZXlBY3Rpdml0eUxpc3RlbmVyKFxyXG5cdFx0XHRcdFx0ZGVmYXVsdFN1cnZleUFjdGl2aXR5TGlzdGVuZXIsXHJcblx0XHRcdFx0XHR0aGlzLmdldFRlbGVtZXRyeUxvZ2dlcixcclxuXHRcdFx0XHQpLFxyXG5cdFx0XHRcdGxhdW5jaGVyRmFjdG9yeSxcclxuXHRcdFx0XHRvblN1cnZleUFjdGl2YXRlZENhbGxiYWNrLFxyXG5cdFx0XHRcdGZpbGVCYXNlZFN0b3JhZ2VQcm92aWRlcixcclxuXHRcdFx0XHRuZXcgR292ZXJub3IoXHJcblx0XHRcdFx0XHRnb3Zlcm5lZENoYW5uZWxTdGF0ZVByb3ZpZGVyLFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdFx0c3VydmV5QWN0aXZhdGlvblN0YXRzUHJvdmlkZXIsXHJcblx0XHRcdFx0dHJhbnNwb3J0ZXJGYWN0b3J5LFxyXG5cdFx0XHRcdGdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50LFxyXG5cdFx0XHQpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHR0aGlzLnRlbGVtZXRyeUxvZ2dlci5sb2dfRXZlbnQoVGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlRW5naW5lLk1ha2UuRmFpbGVkLFxyXG5cdFx0XHRcdHsgRXJyb3JNZXNzYWdlOiBlICYmIGUudG9TdHJpbmcoKSwgRXJyb3JEZXRhaWxzOiBlICYmIGUuc3RhY2sgfSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBJbml0aWFsaXplIHRlbGVtZXRyeSBsb2dnZXIgd2l0aCBuby1vcCBsb2dnZXJcclxuXHRwcml2YXRlIHN0YXRpYyB0ZWxlbWV0cnlMb2dnZXI6IElGbG9vZGdhdGVUZWxlbWV0cnlMb2dnZXIgPSBuZXcgRGVmYXVsdEZsb29kZ2F0ZVRlbGVtZXRyeUxvZ2dlcigpO1xyXG5cdHByaXZhdGUgc3RhdGljIHRyYW5zcG9ydGVyRmFjdG9yeTogSVRyYW5zcG9ydGVyRmFjdG9yeTtcclxuXHJcblx0cHJpdmF0ZSBzdXJ2ZXlDbGllbnQ6IElTdXJ2ZXlDbGllbnQ7XHJcblx0cHJpdmF0ZSBhY3Rpdml0eUxpc3RlbmVyOiBTdXJ2ZXlBY3Rpdml0eUxpc3RlbmVyO1xyXG5cdHByaXZhdGUgb25TdXJ2ZXlBY3RpdmF0ZWRDYWxsYmFjazogSU9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2s7XHJcblx0cHJpdmF0ZSBsYXVuY2hlckZhY3Rvcnk6IElTdXJ2ZXlMYXVuY2hlckZhY3Rvcnk7XHJcblx0cHJpdmF0ZSBzdG9yYWdlOiBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyO1xyXG5cdHByaXZhdGUgZ292ZXJub3I6IElHb3Zlcm5vcjtcclxuXHRwcml2YXRlIGluaXRpYWxpemF0aW9uU3RhdHVzOiBJbml0aWFsaXphdGlvblN0YXR1cyA9IEluaXRpYWxpemF0aW9uU3RhdHVzLk5vbmU7XHJcblx0cHJpdmF0ZSBsb2dnZWRGaXJzdFN0YXJ0OiBib29sZWFuO1xyXG5cclxuXHRwcml2YXRlIGZsb29kZ2F0ZVNldHRpbmdzOiBGbG9vZGdhdGVTZXR0aW5ncztcclxuXHRwcml2YXRlIHByZXZpb3VzU3VydmV5QWN0aXZhdGlvblN0YXRzOiBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb247XHJcblx0cHJpdmF0ZSBwcmV2aW91c1N1cnZleUV2ZW50QWN0aXZpdHlTdGF0czogU3VydmV5U3RhdENvbGxlY3Rpb25FdmVudEFjdGl2aXR5O1xyXG5cclxuXHRwcml2YXRlIGNhbmRpZGF0ZVN1cnZleXM6IElEaWN0aW9uYXJ5PElTdXJ2ZXk+ID0ge307XHJcblx0cHJpdmF0ZSBsYXVuY2hlZFN1cnZleXM6IElEaWN0aW9uYXJ5PElTdXJ2ZXk+ID0ge307XHJcblx0cHJpdmF0ZSBsYXVuY2hlZExhdW5jaGVyczogSVN1cnZleUxhdW5jaGVyW10gPSBbXTtcclxuXHRwcml2YXRlIHN1cnZleUV2ZW50U2VudDogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0cHJpdmF0ZSBzdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlcjogSVN1cnZleUFjdGl2YXRpb25TdGF0c1Byb3ZpZGVyO1xyXG5cclxuXHRwcml2YXRlIGdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50OiBJR292ZXJuYW5jZVNlcnZpY2VDbGllbnQ7XHJcblx0cHJpdmF0ZSBzdGFsZVRyaWdnZXJlZFN1cnZleXNRdWV1ZTogSVN1cnZleVtdID0gW107XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihzdXJ2ZXlDbGllbnQ6IElTdXJ2ZXlDbGllbnQsIGFjdGl2aXR5TGlzdGVuZXI6IFN1cnZleUFjdGl2aXR5TGlzdGVuZXIsIGxhdW5jaGVyRmFjdG9yeTogSVN1cnZleUxhdW5jaGVyRmFjdG9yeSxcclxuXHRcdG9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2s6IElPblN1cnZleUFjdGl2YXRlZENhbGxiYWNrLCBzdG9yYWdlOiBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyLCBnb3Zlcm5vcjogSUdvdmVybm9yLFxyXG5cdFx0c3VydmV5QWN0aXZhdGlvblN0YXRzUHJvdmlkZXI6IElTdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlciwgdHJhbnNwb3J0ZXJGYWN0b3J5OiBJVHJhbnNwb3J0ZXJGYWN0b3J5LFxyXG5cdFx0Z292ZXJuYW5jZVNlcnZpY2VDbGllbnQ6IElHb3Zlcm5hbmNlU2VydmljZUNsaWVudCkge1xyXG5cclxuXHRcdGlmICghc3VydmV5Q2xpZW50KSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInN1cnZleUNsaWVudCBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFhY3Rpdml0eUxpc3RlbmVyKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImFjdGl2aXR5TGlzdGVuZXIgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghbGF1bmNoZXJGYWN0b3J5KSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImxhdW5jaGVyRmFjdG9yeSBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFvblN1cnZleUFjdGl2YXRlZENhbGxiYWNrKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2sgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghc3RvcmFnZSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdG9yYWdlIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWdvdmVybm9yKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImdvdmVybm9yIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIXRyYW5zcG9ydGVyRmFjdG9yeSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0cmFuc3BvcnRlckZhY3RvcnkgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnN1cnZleUNsaWVudCA9IHN1cnZleUNsaWVudDtcclxuXHRcdHRoaXMuYWN0aXZpdHlMaXN0ZW5lciA9IGFjdGl2aXR5TGlzdGVuZXI7XHJcblx0XHR0aGlzLmxhdW5jaGVyRmFjdG9yeSA9IGxhdW5jaGVyRmFjdG9yeTtcclxuXHRcdHRoaXMub25TdXJ2ZXlBY3RpdmF0ZWRDYWxsYmFjayA9IG9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2s7XHJcblx0XHR0aGlzLnN0b3JhZ2UgPSBzdG9yYWdlO1xyXG5cdFx0dGhpcy5nb3Zlcm5vciA9IGdvdmVybm9yO1xyXG5cdFx0dGhpcy5zdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlciA9IHN1cnZleUFjdGl2YXRpb25TdGF0c1Byb3ZpZGVyO1xyXG5cdFx0dGhpcy5nb3Zlcm5hbmNlU2VydmljZUNsaWVudCA9IGdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50O1xyXG5cdFx0Rmxvb2RnYXRlRW5naW5lLnRyYW5zcG9ydGVyRmFjdG9yeSA9IHRyYW5zcG9ydGVyRmFjdG9yeTtcclxuXHJcblx0XHR0aGlzLmxvZ2dlZEZpcnN0U3RhcnQgPSBmYWxzZTtcclxuXHJcblx0XHQvLyBJbml0aWFsaXplIG91ciBsaXN0IHRvIGEgdmFsaWQsIGVtcHR5IGNvbGxlY3Rpb25cclxuXHRcdHRoaXMuc2V0UGVuZGluZ1N1cnZleXMobnVsbCk7XHJcblxyXG5cdFx0Ly8gSWYgdGhlIGxpc3RlbmVyIHdhcyBwcmUtY29uZmlndXJlZCB3aXRoIHN1cnZleSBmb3Igc29tZSByZWFzb24sIGNsZWFyIGl0IG5vd1xyXG5cdFx0dGhpcy5hY3Rpdml0eUxpc3RlbmVyLmNsZWFyU3VydmV5cygpO1xyXG5cclxuXHRcdC8vIExpbmsgb3Vyc2VsdmVzIHdpdGggdGhlIGxpc3RlbmVyXHJcblx0XHRjb25zdCB0aGlzT2JqID0gdGhpczsgLy8gU2F2ZSBjdXJyZW50IG9iamVjdCBpbiBhIHZhcmlhYmxlIHRvIGFsbG93IGFjY2VzcyBmcm9tIGNhbGxiYWNrLlxyXG5cdFx0dGhpcy5hY3Rpdml0eUxpc3RlbmVyLnNldENhbGxiYWNrKHtcclxuXHRcdFx0cnVuKHN1cnZleUlkOiBzdHJpbmcsIGNvbnRleHRJbmZvOiBJQ29udGV4dERhdGFbXSkge1xyXG5cdFx0XHRcdHRoaXNPYmoub25TdXJ2ZXlBY3RpdmF0ZWQoc3VydmV5SWQsIGNvbnRleHRJbmZvKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0c2hvdWxkQWNjZXB0QWN0aXZpdHkoYWN0aXZpdHlOYW1lOiBzdHJpbmcpIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpc09iai5zaG91bGRBY2NlcHRBY3Rpdml0eShhY3Rpdml0eU5hbWUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0U3VydmV5Q2xpZW50KCk6IGFueSB7XHJcblx0XHRyZXR1cm4gdGhpcy5zdXJ2ZXlDbGllbnQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTYXZlIGFsbCBpbnRlcm5hbCBzdGF0cyBhbmQgZmxvb2RnYXRlU2V0dGluZ3MgKG1lcmdpbmcgd2l0aCBleGlzdGluZyBmaWxlIGNvbnRlbnRzKSwgd2l0aG91dCBzdG9wcGluZyB0aGUgZW5naW5lLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBtZXJnZUFuZFNhdmUoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG5cdFx0dGhpcy5zYXZlU3VydmV5QWN0aXZhdGlvbkhpc3RvcnkoKTtcclxuXHRcdHRoaXMuc2F2ZVN1cnZleUV2ZW50QWN0aXZpdHlIaXN0b3J5KCk7XHJcblxyXG5cdFx0Ly8gSW5mb3JtIHN1cnZleUNsaWVudCB0byBzYXZlIGl0cyBzdGF0ZVxyXG5cdFx0dGhpcy5zdXJ2ZXlDbGllbnQuc2F2ZUN1cnJlbnRTdGF0ZSgpO1xyXG5cclxuXHRcdC8vIFNhdmUgZ292ZXJuZWQgY2hhbm5lbCBzdGF0ZXNcclxuXHRcdHRoaXMuZ292ZXJub3Iuc2F2ZUNoYW5uZWxTdGF0ZXMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0YXJ0IHRoZSBlbmdpbmUuICBDaGVja3MgZmVhdHVyZSBlbmFibGUgc3RhdGUsIGNhdXNlcyBzdXJ2ZXkgZGVmaW5pdGlvbnMgdG8gYmUgcmVhZCwgYW5kIHRyYWNrZWQgYWN0aXZpdGllcyB0byBiZSBzZXQgb24gdGhlIGxpc3RlbmVyLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdGFydCgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmluaXRpYWxpemF0aW9uU3RhdHVzID09PSBJbml0aWFsaXphdGlvblN0YXR1cy5Jbml0aWFsaXppbmcgfHxcclxuXHRcdFx0dGhpcy5pbml0aWFsaXphdGlvblN0YXR1cyA9PT0gSW5pdGlhbGl6YXRpb25TdGF0dXMuU3RhcnRlZCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy5zZXRJbml0aWFsaXphdGlvblN0YXR1cyhJbml0aWFsaXphdGlvblN0YXR1cy5Jbml0aWFsaXppbmcpO1xyXG5cdFx0XHR0aGlzLmxvYWRTZXR0aW5nc0FuZFByaW9yRXZlbnRDb3VudHMoKTtcclxuXHJcblx0XHRcdGNvbnN0IGNoYW5uZWxUeXBlczogR292ZXJuZWRDaGFubmVsVHlwZVtdID0gdGhpcy5nZXRBdmFpbGFibGVDaGFubmVsVHlwZXMoKTtcclxuXHJcblx0XHRcdHRoaXMuc3VydmV5Q2xpZW50LnJlZnJlc2hTdXJ2ZXlEZWZpbml0aW9ucyhjaGFubmVsVHlwZXMpO1xyXG5cclxuXHRcdFx0dGhpcy5zZXRQZW5kaW5nU3VydmV5c0FuZFN0YXJ0Rmxvb2RnYXRlKCk7XHJcblx0XHRcdHRoaXMuc2V0SW5pdGlhbGl6YXRpb25TdGF0dXMoSW5pdGlhbGl6YXRpb25TdGF0dXMuU3RhcnRlZCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdHRoaXMuc2V0SW5pdGlhbGl6YXRpb25TdGF0dXMoSW5pdGlhbGl6YXRpb25TdGF0dXMuRXJyb3IpO1xyXG5cdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0V2ZW50KFRlbGVtZXRyeUV2ZW50LkZsb29kZ2F0ZUVuZ2luZS5TdGFydC5GYWlsZWQsXHJcblx0XHRcdFx0eyBFcnJvck1lc3NhZ2U6IGUgJiYgZS50b1N0cmluZygpLCBFcnJvckRldGFpbHM6IGUgJiYgZS5zdGFjayB9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0YXJ0IHRoZSBlbmdpbmUuICBDaGVja3MgZmVhdHVyZSBlbmFibGUgc3RhdGUsIGNhdXNlcyBzdXJ2ZXkgZGVmaW5pdGlvbnMgdG8gYmUgcmVhZCwgYW5kIHRyYWNrZWQgYWN0aXZpdGllcyB0byBiZSBzZXQgb24gdGhlIGxpc3RlbmVyLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdGFydEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0aWYgKHRoaXMuaW5pdGlhbGl6YXRpb25TdGF0dXMgPT09IEluaXRpYWxpemF0aW9uU3RhdHVzLkluaXRpYWxpemluZyB8fFxyXG5cdFx0XHR0aGlzLmluaXRpYWxpemF0aW9uU3RhdHVzID09PSBJbml0aWFsaXphdGlvblN0YXR1cy5TdGFydGVkKSB7XHJcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuXHRcdH1cclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLnNldEluaXRpYWxpemF0aW9uU3RhdHVzKEluaXRpYWxpemF0aW9uU3RhdHVzLkluaXRpYWxpemluZyk7XHJcblx0XHRcdHRoaXMubG9hZFNldHRpbmdzQW5kUHJpb3JFdmVudENvdW50cygpO1xyXG5cclxuXHRcdFx0Y29uc3QgY2hhbm5lbFR5cGVzOiBHb3Zlcm5lZENoYW5uZWxUeXBlW10gPSB0aGlzLmdldEF2YWlsYWJsZUNoYW5uZWxUeXBlcygpO1xyXG5cclxuXHRcdFx0Y29uc3QgdGhpc0Zsb29kZ2F0ZUVuZ2luZSA9IHRoaXM7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0dGhpc0Zsb29kZ2F0ZUVuZ2luZS5zdXJ2ZXlDbGllbnQucmVmcmVzaFN1cnZleURlZmluaXRpb25zQXN5bmMoY2hhbm5lbFR5cGVzKS50aGVuKFxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gb25GdWxmaWxsZWQoKSB7XHJcblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbnkgc3RvcCgpIGNhbGxzIHRoYXQgaGFwcGVuZWQgd2hpbGUgaW5pdGlhbGl6aW5nXHJcblx0XHRcdFx0XHRcdGlmICh0aGlzRmxvb2RnYXRlRW5naW5lLmluaXRpYWxpemF0aW9uU3RhdHVzID09PSBJbml0aWFsaXphdGlvblN0YXR1cy5TdG9wcGVkKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpc0Zsb29kZ2F0ZUVuZ2luZS5zZXRJbml0aWFsaXphdGlvblN0YXR1cyhJbml0aWFsaXphdGlvblN0YXR1cy5TdGFydGVkKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzRmxvb2RnYXRlRW5naW5lLnN0b3AoKTtcclxuXHRcdFx0XHRcdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0V2ZW50KFRlbGVtZXRyeUV2ZW50LkZsb29kZ2F0ZUVuZ2luZS5TdGFydEFzeW5jLlN0b3BwZWQsXHJcblx0XHRcdFx0XHRcdFx0XHR7IEVycm9yTWVzc2FnZTogXCJTdG9wcGVkIGJlY2F1c2Ugb2YgYSBwZW5kaW5nIHN0b3AoKSBjYWxsXCIgfSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpc0Zsb29kZ2F0ZUVuZ2luZS5zZXRQZW5kaW5nU3VydmV5c0FuZFN0YXJ0Rmxvb2RnYXRlKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0KS5jYXRjaChcclxuXHRcdFx0XHRcdGZ1bmN0aW9uIE9uUmVqZWN0ZWQoZXJyb3I6IEVycm9yKSB7XHJcblx0XHRcdFx0XHRcdHRoaXNGbG9vZGdhdGVFbmdpbmUuc2V0SW5pdGlhbGl6YXRpb25TdGF0dXMoSW5pdGlhbGl6YXRpb25TdGF0dXMuRXJyb3IpO1xyXG5cdFx0XHRcdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0V2ZW50KFRlbGVtZXRyeUV2ZW50LkZsb29kZ2F0ZUVuZ2luZS5TdGFydEFzeW5jLkZhaWxlZCxcclxuXHRcdFx0XHRcdFx0XHR7IEVycm9yTWVzc2FnZTogXCJTdXJ2ZXkgcmVmcmVzaCBlcnJvciBcIiArIChlcnJvciAmJiBlcnJvci5tZXNzYWdlKSB9KTtcclxuXHJcblx0XHRcdFx0XHRcdHJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHR0aGlzLnNldEluaXRpYWxpemF0aW9uU3RhdHVzKEluaXRpYWxpemF0aW9uU3RhdHVzLkVycm9yKTtcclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FdmVudChUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGVFbmdpbmUuU3RhcnRBc3luYy5GYWlsZWQsXHJcblx0XHRcdFx0eyBFcnJvck1lc3NhZ2U6IGUgJiYgZS50b1N0cmluZygpLCBFcnJvckRldGFpbHM6IGUgJiYgZS5zdGFjayB9KTtcclxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU3RvcCB0aGUgZW5naW5lLiAgQ2F1c2VzIHRyYWNrZWQgYWN0aXZpdGllcyB0byBiZSBjbGVhcmVkIGFuZCBhbnkgaW4tcHJvZ3Jlc3MgY291bnRlcnMgbm90IG90aGVyd2lzZSBzYXZlZCB0byBiZSB0aHJvd24gb3V0LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdG9wKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuaW5pdGlhbGl6YXRpb25TdGF0dXMgPT09IEluaXRpYWxpemF0aW9uU3RhdHVzLlN0YXJ0ZWQpIHtcclxuXHRcdFx0dGhpcy5tZXJnZUFuZFNhdmUoKTtcclxuXHJcblx0XHRcdC8vIENsZWFyIG91ciBTdXJ2ZXkgbGlzdCwgYW5kIHB1c2ggdGhhdCB0aHJvdWdoIHRvIHRoZSBsaXN0ZW5lclxyXG5cdFx0XHR0aGlzLnNldFBlbmRpbmdTdXJ2ZXlzKG51bGwpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZUFjdGl2aXR5TGlzdGVuZXJXaXRoQ3VycmVudFN1cnZleURlZmluaXRpb25zKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zZXRJbml0aWFsaXphdGlvblN0YXR1cyhJbml0aWFsaXphdGlvblN0YXR1cy5TdG9wcGVkKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIElBY3Rpdml0eUxpc3RlbmVyIGxvZ2dpbmcgaW50ZXJmYWNlIGZvciBjYWxsZXJzIHRoYXQgd2FudCB0byBsb2cgZGlyZWN0bHkgcmF0aGVyIHRoYW4gdGhyb3VnaCB0ZWxlbWV0cnlcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0QWN0aXZpdHlMaXN0ZW5lcigpOiBJQWN0aXZpdHlMaXN0ZW5lciB7XHJcblx0XHRyZXR1cm4gdGhpcy5hY3Rpdml0eUxpc3RlbmVyO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRJbml0aWFsaXphdGlvblN0YXR1cyhzdGF0dXM6IEluaXRpYWxpemF0aW9uU3RhdHVzKTogdm9pZCB7XHJcblx0XHR0aGlzLmluaXRpYWxpemF0aW9uU3RhdHVzID0gc3RhdHVzO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzYXZlU2V0dGluZ3MoKTogdm9pZCB7XHJcblx0XHR0aGlzLnN0b3JhZ2UuZmlsZUxvY2soRmlsZVR5cGUuRmxvb2RnYXRlU2V0dGluZ3MpO1xyXG5cclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMud3JpdGVTdHJpbmcoRmlsZVR5cGUuRmxvb2RnYXRlU2V0dGluZ3MsIEZsb29kZ2F0ZVNldHRpbmdzLnRvSnNvbih0aGlzLmZsb29kZ2F0ZVNldHRpbmdzKSk7XHJcblx0XHR9IGZpbmFsbHkge1xyXG5cdFx0XHR0aGlzLnN0b3JhZ2UuZmlsZVVubG9jayhGaWxlVHlwZS5GbG9vZGdhdGVTZXR0aW5ncyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGxvYWRTZXR0aW5nc0FuZFByaW9yRXZlbnRDb3VudHMoKTogdm9pZCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHQvLyBMb2FkIHVwIHRoZSBwcmlvciBzdXJ2ZXkgaGlzdG9yeSBhbmQgcHJpb3IgZXZlbnQgY291bnRzXHJcblx0XHRcdHRoaXMucHJldmlvdXNTdXJ2ZXlBY3RpdmF0aW9uU3RhdHMgPSB0aGlzLnN1cnZleUFjdGl2YXRpb25TdGF0c1Byb3ZpZGVyLmxvYWQoKTtcclxuXHJcblx0XHRcdHRoaXMucHJldmlvdXNTdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHMgPVxyXG5cdFx0XHRcdFN1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eS5mcm9tSnNvbih0aGlzLnJlYWRTdHJpbmcoRmlsZVR5cGUuU3VydmV5RXZlbnRBY3Rpdml0eVN0YXRzKSk7XHJcblxyXG5cdFx0XHQvLyBnZXQgdGhlIGxpc3Qgb2Ygc3VydmV5IElkIC0gYWxsIHRoZSBzdXJ2ZXkgc2hvdWxkIGhhdmUgZXZlbnQgc2VudCBhbHJlYWR5XHJcblx0XHRcdGNvbnN0IHN0YXRzOiBJRGljdGlvbmFyeTxTdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHM+ID0gdGhpcy5wcmV2aW91c1N1cnZleUV2ZW50QWN0aXZpdHlTdGF0cy5nZXRTdGF0cygpO1xyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBzdGF0cykge1xyXG5cdFx0XHRcdGlmIChzdGF0cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0XHR0aGlzLnN1cnZleUV2ZW50U2VudC5wdXNoKGtleSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBMb2FkIHVwIHRoZSBnZW5lcmFsIGZsb29kZ2F0ZVNldHRpbmdzXHJcblx0XHRcdHRoaXMuZmxvb2RnYXRlU2V0dGluZ3MgPSBGbG9vZGdhdGVTZXR0aW5ncy5mcm9tSnNvbih0aGlzLnJlYWRTdHJpbmcoRmlsZVR5cGUuRmxvb2RnYXRlU2V0dGluZ3MpKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FdmVudChUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGVFbmdpbmUuQ29tbW9uLkVycm9yLFxyXG5cdFx0XHRcdHsgRXJyb3JNZXNzYWdlOiBcIkVycm9yIGxvYWRpbmcgcHJpb3Igc2V0dGluZ3MvZXZlbnRzIFwiICsgKGUgJiYgZS50b1N0cmluZygpKSB9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0QXZhaWxhYmxlQ2hhbm5lbFR5cGVzKCk6IEdvdmVybmVkQ2hhbm5lbFR5cGVbXSB7XHJcblx0XHQvLyBNYWtlIHN1cmUgd2UndmUgbG9hZGVkIHRoZSBjdXJyZW50IHN1cnZleSBkZWZpbml0aW9uc1xyXG5cdFx0Y29uc3QgY2hhbm5lbHM6IElHb3Zlcm5lZENoYW5uZWxEYXRhW10gPSB0aGlzLmdvdmVybm9yLmdldEF2YWlsYWJsZUNoYW5uZWxEYXRhKCk7XHJcblx0XHRjb25zdCBjaGFubmVsVHlwZXM6IEdvdmVybmVkQ2hhbm5lbFR5cGVbXSA9IFtdO1xyXG5cclxuXHRcdGNoYW5uZWxzLmZvckVhY2goKGNoYW5uZWwpID0+IHtcclxuXHRcdFx0aWYgKGNoYW5uZWwpIHtcclxuXHRcdFx0XHRjaGFubmVsVHlwZXMucHVzaChjaGFubmVsLmdldFR5cGUoKSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBjaGFubmVsVHlwZXM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldFBlbmRpbmdTdXJ2ZXlzQW5kU3RhcnRGbG9vZGdhdGUoKTogdm9pZCB7XHJcblx0XHQvLyBVcGRhdGUgb3VyIHN1cnZleSBsaXN0LCBhbmQgcHVzaCB0aGF0IHRocm91Z2ggdG8gdGhlIGxpc3RlbmVyXHJcblx0XHR0aGlzLnNldFBlbmRpbmdTdXJ2ZXlzKHRoaXMuc3VydmV5Q2xpZW50LmdldEFwcFN1cnZleXMoKSk7XHJcblx0XHR0aGlzLnVwZGF0ZUFjdGl2aXR5TGlzdGVuZXJXaXRoQ3VycmVudFN1cnZleURlZmluaXRpb25zKCk7XHJcblxyXG5cdFx0Ly8gTWFyayB1cyBhcyBzdGFydGVkXHJcblx0XHR0aGlzLnNldEluaXRpYWxpemF0aW9uU3RhdHVzKEluaXRpYWxpemF0aW9uU3RhdHVzLlN0YXJ0ZWQpO1xyXG5cclxuXHRcdC8vIExvZyBvdXIgZmlyc3Qgc3RhcnQgKGFrYSBmbG9vZGdhdGUgYm9vdCkgZXZlbnRcclxuXHRcdGlmICghdGhpcy5sb2dnZWRGaXJzdFN0YXJ0KSB7XHJcblx0XHRcdHRoaXMubG9nZ2VkRmlyc3RTdGFydCA9IHRydWU7XHJcblx0XHRcdHRoaXMuZ2V0QWN0aXZpdHlMaXN0ZW5lcigpLmxvZ0FjdGl2aXR5KFN1cnZleUFjdGl2aXR5TGlzdGVuZXIuRmxvb2RnYXRlU3RhcnRBY3Rpdml0eU5hbWUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVTdXJ2ZXlBY3RpdmF0aW9uU3RhdHMoc3VydmV5OiBJU3VydmV5KSB7XHJcblx0XHRjb25zdCBzdXJ2ZXlJbmZvID0gc3VydmV5LmdldFN1cnZleUluZm8oKTtcclxuXHRcdGNvbnN0IHN1cnZleUlkID0gc3VydmV5SW5mby5nZXRJZCgpO1xyXG5cdFx0Y29uc3Qgc3RhdHMgPSB0aGlzLnByZXZpb3VzU3VydmV5QWN0aXZhdGlvblN0YXRzLmdldFN0YXRzKClbc3VydmV5SWRdIHx8IG5ldyBTdXJ2ZXlBY3RpdmF0aW9uU3RhdHMoKTtcclxuXHRcdHN0YXRzLlR5cGUgPSBzdXJ2ZXkuZ2V0VHlwZSgpO1xyXG5cdFx0c3RhdHMuRXhwaXJhdGlvblRpbWVVdGMgPSBzdXJ2ZXlJbmZvLmdldEV4cGlyYXRpb25UaW1lVXRjKCk7XHJcblx0XHRzdGF0cy5BY3RpdmF0aW9uVGltZVV0YyA9IG5ldyBEYXRlKCk7XHJcblx0XHRzdGF0cy5TdXJ2ZXlMYXVuY2hDb3VudCsrO1xyXG5cclxuXHRcdHRoaXMucHJldmlvdXNTdXJ2ZXlBY3RpdmF0aW9uU3RhdHMuYWRkU3RhdHMoc3VydmV5SWQsIHN0YXRzKTtcclxuXHJcblx0XHQvLyBTYXZlIHRoZSBTdXJ2ZXlMYXVuY2hDb3VudFBlclNlc3Npb24gaW50byBnbG9iYWwgbWVtb3J5IGJ1dCBub3QgbG9jYWwgc3RvcmFnZVxyXG5cdFx0Ly8gc28gaXQgd29uJ3QgYmUgb3ZlcndyaXR0ZW4gaW4gbG9jYWwgc3RvcmFnZSBieSBhbm90aGVyIGFwcCBpbnN0YW5jZVxyXG5cdFx0aWYgKCFnbG9iYWxTZXNzaW9uU3VydmV5QWN0aXZhdGlvbkNvdW50cy5oYXNPd25Qcm9wZXJ0eShzdXJ2ZXlJZCkpIHtcclxuXHRcdFx0Z2xvYmFsU2Vzc2lvblN1cnZleUFjdGl2YXRpb25Db3VudHNbc3VydmV5SWRdID0gMDtcclxuXHRcdH1cclxuXHRcdGdsb2JhbFNlc3Npb25TdXJ2ZXlBY3RpdmF0aW9uQ291bnRzW3N1cnZleUlkXSsrO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzYXZlU3VydmV5QWN0aXZhdGlvbkhpc3RvcnkoKTogdm9pZCB7XHJcblx0XHR0aGlzLnN0b3JhZ2UuZmlsZUxvY2soRmlsZVR5cGUuU3VydmV5QWN0aXZhdGlvblN0YXRzKTtcclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBzdGF0Q29sbGVjdGlvbjogU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uID0gdGhpcy5zdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlci5sb2FkKCk7XHJcblxyXG5cdFx0XHRjb25zdCBwcmV2aW91c1N0YXRzID0gdGhpcy5wcmV2aW91c1N1cnZleUFjdGl2YXRpb25TdGF0cy5nZXRTdGF0cygpO1xyXG5cclxuXHRcdFx0Ly8gQnVpbGQgdGhlIHVwZGF0ZSBjb2xsZWN0aW9uXHJcblx0XHRcdGNvbnN0IHVwZGF0ZUNvbGxlY3Rpb24gPSBuZXcgU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uKCk7XHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMubGF1bmNoZWRTdXJ2ZXlzKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMubGF1bmNoZWRTdXJ2ZXlzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRcdGNvbnN0IHN1cnZleTogSVN1cnZleSA9IHRoaXMubGF1bmNoZWRTdXJ2ZXlzW2tleV07XHJcblx0XHRcdFx0XHRjb25zdCBzdXJ2ZXlJZCA9IHN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0SWQoKTtcclxuXHJcblx0XHRcdFx0XHQvLyBNYWtlIHRoaXMgcGFydCBvZiB0aGUgdXBkYXRlIGxpc3RcclxuXHRcdFx0XHRcdGNvbnN0IHN0YXRzID0gcHJldmlvdXNTdGF0c1tzdXJ2ZXlJZF07XHJcblx0XHRcdFx0XHR1cGRhdGVDb2xsZWN0aW9uLmFkZFN0YXRzKHN1cnZleUlkLCBzdGF0cyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBY3R1YWxseSBtZXJnZSBvdXIgdXBkYXRlcyBpbnRvIHRoZSBmdWxsIGNvbGxlY3Rpb25cclxuXHRcdFx0c3RhdENvbGxlY3Rpb24uYWNjdW11bGF0ZSh1cGRhdGVDb2xsZWN0aW9uKTtcclxuXHRcdFx0dGhpcy5zdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlci5zYXZlKHN0YXRDb2xsZWN0aW9uKTtcclxuXHJcblx0XHRcdC8vIE1ha2Ugc3VyZSB0byBrZWVwIG91ciBpbnRlcm5hbCBjb2xsZWN0aW9uIGNvbnNpc3RlbnQgd2l0aCB3aGF0IHdlIGp1c3Qgd3JvdGVcclxuXHRcdFx0dGhpcy5wcmV2aW91c1N1cnZleUFjdGl2YXRpb25TdGF0cyA9IHN0YXRDb2xsZWN0aW9uO1xyXG5cdFx0fSBmaW5hbGx5IHtcclxuXHRcdFx0dGhpcy5zdG9yYWdlLmZpbGVVbmxvY2soRmlsZVR5cGUuU3VydmV5QWN0aXZhdGlvblN0YXRzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2F2ZVN1cnZleUV2ZW50QWN0aXZpdHlIaXN0b3J5KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdG9yYWdlLmZpbGVMb2NrKEZpbGVUeXBlLlN1cnZleUV2ZW50QWN0aXZpdHlTdGF0cyk7XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3Qgc3RhdENvbGxlY3Rpb246IFN1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eSA9XHJcblx0XHRcdFx0U3VydmV5U3RhdENvbGxlY3Rpb25FdmVudEFjdGl2aXR5LmZyb21Kc29uKHRoaXMucmVhZFN0cmluZyhGaWxlVHlwZS5TdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHMpKTtcclxuXHJcblx0XHRcdGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcblx0XHRcdC8vIEZpbGwgb3V0IG91ciBsaXN0IG9mIHVwZGF0ZXNcclxuXHRcdFx0Y29uc3QgdXBkYXRlQ29sbGVjdGlvbiA9IG5ldyBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkV2ZW50QWN0aXZpdHkoKTtcclxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gdGhpcy5jYW5kaWRhdGVTdXJ2ZXlzKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuY2FuZGlkYXRlU3VydmV5cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0XHRjb25zdCBzdGF0czogU3VydmV5RXZlbnRBY3Rpdml0eVN0YXRzID0gbmV3IFN1cnZleUV2ZW50QWN0aXZpdHlTdGF0cygpO1xyXG5cdFx0XHRcdFx0Y29uc3Qgc3VydmV5OiBJU3VydmV5ID0gdGhpcy5jYW5kaWRhdGVTdXJ2ZXlzW2tleV07XHJcblxyXG5cdFx0XHRcdFx0aWYgKCFzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmlzQWN0aXZlRm9yRGF0ZShub3cpKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0c3RhdHMuRXhwaXJhdGlvblRpbWVVdGMgPSBzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmdldEV4cGlyYXRpb25UaW1lVXRjKCk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBhY3Rpdml0aWVzIHdoaWNoIGFyZSBhZ2dyZWdhdGVkLCBpZiB0aGVyZSBhcmVuJ3QgYW55IGNvbnRpbnVlXHJcblx0XHRcdFx0XHRjb25zdCBhbGxBY3Rpdml0aWVzOiBBY3Rpdml0eVRyYWNraW5nU2V0ID0gc3VydmV5LmdldFN1cnZleUluZm8oKS5nZXRBY3RpdmF0aW9uRXZlbnQoKS5nZXRUcmFja2luZ1NldCgpO1xyXG5cdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRlQWN0aXZpdGllczogc3RyaW5nW10gPSBbXTtcclxuXHRcdFx0XHRcdGNvbnN0IG5vbkFnZ3JlZ2F0ZUFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdFx0XHRcdFx0YWxsQWN0aXZpdGllcy5nZXRMaXN0KCkuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAoZGF0YSkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhLmdldElzQWdncmVnYXRlKCkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFnZ3JlZ2F0ZUFjdGl2aXRpZXMucHVzaChkYXRhLmdldEFjdGl2aXR5KCkpO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRub25BZ2dyZWdhdGVBY3Rpdml0aWVzLnB1c2goZGF0YS5nZXRBY3Rpdml0eSgpKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdHN0YXRzLkNvdW50cyA9IG5ldyBBcnJheShhZ2dyZWdhdGVBY3Rpdml0aWVzLmxlbmd0aCk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gU2F2ZSBvZmYgdGhlIGNvdW50cyB3ZSd2ZSBhZGRlZCBmb3IgdGhpcyBzZXNzaW9uXHJcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFnZ3JlZ2F0ZUFjdGl2aXRpZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0c3RhdHMuQ291bnRzW2ldID0gdGhpcy5hY3Rpdml0eUxpc3RlbmVyLm1vdmVTZXNzaW9uQ291bnRJbnRvQmFzZUNvdW50KGFnZ3JlZ2F0ZUFjdGl2aXRpZXNbaV0sIHN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0SWQoKSk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBhY3Rpdml0eSBvZiBub25BZ2dyZWdhdGVBY3Rpdml0aWVzKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuYWN0aXZpdHlMaXN0ZW5lci5zYXZlU2Vzc2lvblRyYWNraW5nQWN0aXZpdHkoYWN0aXZpdHkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIE1ha2UgdGhpcyBwYXJ0IG9mIHRoZSB1cGRhdGUgbGlzdFxyXG5cdFx0XHRcdFx0dXBkYXRlQ29sbGVjdGlvbi5hZGRTdGF0cyhzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmdldElkKCksIHN0YXRzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEFjdHVhbGx5IG1lcmdlIG91ciB1cGRhdGVzIGludG8gdGhlIGZ1bGwgY29sbGVjdGlvblxyXG5cdFx0XHRzdGF0Q29sbGVjdGlvbi5hY2N1bXVsYXRlKHVwZGF0ZUNvbGxlY3Rpb24pO1xyXG5cclxuXHRcdFx0dGhpcy53cml0ZVN0cmluZyhGaWxlVHlwZS5TdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHMsIFN1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eS50b0pzb24oc3RhdENvbGxlY3Rpb24pKTtcclxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRvIGtlZXAgb3VyIGludGVybmFsIGNvbGxlY3Rpb24gY29uc2lzdGVudCB3aXRoIHdoYXQgd2UganVzdCB3cm90ZVxyXG5cdFx0XHR0aGlzLnByZXZpb3VzU3VydmV5RXZlbnRBY3Rpdml0eVN0YXRzID0gc3RhdENvbGxlY3Rpb247XHJcblx0XHR9IGZpbmFsbHkge1xyXG5cdFx0XHR0aGlzLnN0b3JhZ2UuZmlsZVVubG9jayhGaWxlVHlwZS5TdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRQZW5kaW5nU3VydmV5cyhwZW5kaW5nU3VydmV5czogSURpY3Rpb25hcnk8SVN1cnZleT4pOiB2b2lkIHtcclxuXHRcdHRoaXMuY2FuZGlkYXRlU3VydmV5cyA9IHt9O1xyXG5cdFx0aWYgKHBlbmRpbmdTdXJ2ZXlzKSB7XHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIHBlbmRpbmdTdXJ2ZXlzKSB7XHJcblx0XHRcdFx0aWYgKHBlbmRpbmdTdXJ2ZXlzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRcdGNvbnN0IHN1cnZleTogSVN1cnZleSA9IHBlbmRpbmdTdXJ2ZXlzW2tleV07XHJcblx0XHRcdFx0XHRpZiAodGhpcy5sYXVuY2hlckZhY3RvcnkuQWNjZXB0c1N1cnZleShzdXJ2ZXkpKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY2FuZGlkYXRlU3VydmV5c1trZXldID0gc3VydmV5O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDdXJyZW50U3VydmV5RGVmaW5pdGlvbnMoKTogSVN1cnZleVtdIHtcclxuXHRcdC8vIEdldCBhIHZlY3RvciBvZiBTdXJ2ZXlzIGZyb20gb3VyIGlkLWJhc2VkIG1hcFxyXG5cdFx0Y29uc3Qgc3VydmV5TGlzdDogSVN1cnZleVtdID0gbmV3IEFycmF5PElTdXJ2ZXk+KCk7XHJcblxyXG5cdFx0Y29uc3QgYWxsQ2FtcGFpZ25EZWZpbml0aW9uSURzID0gdGhpcy5nZXRBbGxDYW1wYWlnbkRlZmluaXRpb25JRHMoKTtcclxuXHRcdGNvbnN0IGFsbENhbmRpZGF0ZUNhbXBhaWduRGVmaW5pdGlvbklEcyA9IHRoaXMuZ2V0QWxsQ2FuZGlkYXRlQ2FtcGFpZ25EZWZpbml0aW9uSURzKCk7XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCB0aGUgY2FtcGFpZ24gZGVmaW5pdGlvbnMuIFdlIG5lZWQgaW5mbyBmcm9tIHRoZXNlIGZvciB0ZWxlbWV0cnkuXHJcblx0XHRjb25zdCBhbGxDYW1wYWlnbkRlZmluaXRpb25zID0gKHRoaXMuc3VydmV5Q2xpZW50IGFzIENhbXBhaWduTWFuYWdlcikuZ2V0Q2FtcGFpZ25EZWZpbml0aW9ucygpO1xyXG5cclxuXHRcdGNvbnN0IGlzU3VydmV5QWxsb3dlZCA9IChzdXJ2ZXlJbmZvOiBJU3VydmV5SW5mbykgPT4ge1xyXG5cdFx0XHQvLyBhbHdheXMgYWxsb3cgYnVzaW5lc3MgY3JpdGljYWwgYW5kIGFwcHJvdmVkIGNhbXBhaWduc1xyXG5cdFx0XHRpZiAoaXNCdXNpbmVzc0NyaXRpY2FsU3VydmV5KHN1cnZleUluZm8pKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHN1cnZleUFjdGl2YXRpb25TdGF0cyA9IHRoaXMucHJldmlvdXNTdXJ2ZXlBY3RpdmF0aW9uU3RhdHMuZ2V0QnlTdXJ2ZXlJZChzdXJ2ZXlJbmZvLmdldElkKCkpO1xyXG5cdFx0XHRpZiAoaXNNdWx0aUxhdW5jaFN1cnZleShzdXJ2ZXlJbmZvKSAmJlxyXG5cdFx0XHRcdCFoYXNTdXJ2ZXlSZWFjaGVkTWF4TGF1bmNoZXMoc3VydmV5SW5mbywgc3VydmV5QWN0aXZhdGlvblN0YXRzKSAmJlxyXG5cdFx0XHRcdCFoYXNTdXJ2ZXlSZWFjaGVkTWF4TGF1bmNoZXNQZXJTZXNzaW9uKHN1cnZleUluZm8sIGdsb2JhbFNlc3Npb25TdXJ2ZXlBY3RpdmF0aW9uQ291bnRzKSkge1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTa2lwIG92ZXIgYW55IGNhbmRpZGF0ZSBzdXJ2ZXlzIHRoYXQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY29tcGxldGVkIG9yIG5vdCBhY3RpdmUgYW55bW9yZVxyXG5cdFx0XHRpZiAoc3VydmV5QWN0aXZhdGlvblN0YXRzIHx8ICFzdXJ2ZXlJbmZvLmlzQWN0aXZlRm9yRGF0ZShuZXcgRGF0ZSgpKSkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9O1xyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMuY2FuZGlkYXRlU3VydmV5cykge1xyXG5cdFx0XHRpZiAodGhpcy5jYW5kaWRhdGVTdXJ2ZXlzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRjb25zdCBzdXJ2ZXk6IElTdXJ2ZXkgPSB0aGlzLmNhbmRpZGF0ZVN1cnZleXNba2V5XTtcclxuXHRcdFx0XHRjb25zdCBzdXJ2ZXlJbmZvID0gc3VydmV5LmdldFN1cnZleUluZm8oKTtcclxuXHRcdFx0XHRjb25zdCBjYW1wYWlnbkRlZmluaXRpb246IENhbXBhaWduRGVmaW5pdGlvbiA9IGFsbENhbXBhaWduRGVmaW5pdGlvbnNbc3VydmV5SW5mbz8uZ2V0QmFja0VuZElkKCldO1xyXG5cdFx0XHRcdGlmICghY2FtcGFpZ25EZWZpbml0aW9uIHx8ICFpc1N1cnZleUFsbG93ZWQoc3VydmV5SW5mbykpIHtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gc2VuZCB0aGUgVXNlclNlbGVjdGVkIGV2ZW50IGlmIGl0IGlzIG5vdCBzZW50IGJlZm9yZVxyXG5cdFx0XHRcdGlmICh0aGlzLnN1cnZleUV2ZW50U2VudC5pbmRleE9mKGtleSkgPCAwKSB7XHJcblx0XHRcdFx0XHR0aGlzLnN1cnZleUV2ZW50U2VudC5wdXNoKGtleSk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgYWRkaXRpb25hbFN1cnZleUluZm8gPSB0aGlzLmdldEFkZGl0aW9uYWxTdXJ2ZXlJbmZvRm9yVGVsZW1ldHJ5KHN1cnZleSxcclxuXHRcdFx0XHRcdFx0bnVsbCAvKiBjb250ZXh0SW5mbyAqLyxcclxuXHRcdFx0XHRcdFx0YWxsQ2FtcGFpZ25EZWZpbml0aW9uSURzLFxyXG5cdFx0XHRcdFx0XHRhbGxDYW5kaWRhdGVDYW1wYWlnbkRlZmluaXRpb25JRHMpO1xyXG5cclxuXHRcdFx0XHRcdEZsb29kZ2F0ZUVuZ2luZS50ZWxlbWV0cnlMb2dnZXIubG9nX1VzZXJTZWxlY3RlZChzdXJ2ZXlJbmZvLmdldEJhY2tFbmRJZCgpLFxyXG5cdFx0XHRcdFx0XHRzdXJ2ZXlJbmZvLmdldElkKCksXHJcblx0XHRcdFx0XHRcdHN1cnZleS5nZXRUeXBlKCksXHJcblx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KGFkZGl0aW9uYWxTdXJ2ZXlJbmZvKSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRzdXJ2ZXlMaXN0LnB1c2goc3VydmV5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBzdXJ2ZXlMaXN0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRBZGRpdGlvbmFsU3VydmV5SW5mb0ZvclRlbGVtZXRyeShzdXJ2ZXk6IElTdXJ2ZXksXHJcblx0XHRjb250ZXh0SW5mbzogSUNvbnRleHREYXRhW10sIGFsbENhbXBhaWduRGVmaW5pdGlvbklEczogc3RyaW5nW10sIGFsbENhbmRpZGF0ZUNhbXBhaWduRGVmaW5pdGlvbklEczogc3RyaW5nW10pOiB7XHJcblx0XHRhbGxDYW5kaWRhdGVDYW1wYWlnbkRlZmluaXRpb25JRHM6IHN0cmluZ1tdLFxyXG5cdFx0YWxsQ2FtcGFpZ25EZWZpbml0aW9uSURzOiBzdHJpbmdbXSxcclxuXHRcdGNvbnRleHRDb3VudD86IG51bWJlcixcclxuXHRcdHN1cnZleUxhdW5jaGVyVHlwZTogc3RyaW5nLFxyXG5cdFx0Y2hhbm5lbFR5cGU6IEdvdmVybmVkQ2hhbm5lbFR5cGUsXHJcblx0XHRwZXJjZW50YWdlTnVtZXJhdG9yOiBudW1iZXIsXHJcblx0XHRwZXJjZW50YWdlRGVub21pbmF0b3I6IG51bWJlcixcclxuXHRcdG5vbWluYXRpb25QZXJpb2ROdW1iZXI6IG51bWJlcixcclxuXHRcdGNvb2xkb3duUGVyaW9kTnVtYmVyOiBudW1iZXIsXHJcblx0XHRidXNpbmVzc0xldmVsOiBudW1iZXIsXHJcblx0XHRtYXhMYXVuY2hlczogbnVtYmVyLFxyXG5cdFx0bWF4TGF1bmNoZXNQZXJTZXNzaW9uOiBudW1iZXIsXHJcblx0XHRnb3Zlcm5hbmNlU2VydmljZUNsaWVudFN0YXRlPzogR292ZXJuYW5jZVNlcnZpY2VDbGllbnRTdGF0ZSxcclxuXHR9IHtcclxuXHRcdC8vIEdldCBhbGwgdGhlIGNhbXBhaWduIGRlZmluaXRpb25zLiBXZSBuZWVkIGluZm8gZnJvbSB0aGVzZSBmb3IgdGVsZW1ldHJ5LlxyXG5cdFx0Y29uc3QgYWxsQ2FtcGFpZ25EZWZpbml0aW9ucyA9ICh0aGlzLnN1cnZleUNsaWVudCBhcyBDYW1wYWlnbk1hbmFnZXIpLmdldENhbXBhaWduRGVmaW5pdGlvbnMoKTtcclxuXHJcblx0XHQvLyBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgY2FtcGFpZ24gZGVmaW5pdGlvbiB0byB0aGUgc3VydmV5IGluIHF1ZXN0aW9uLlxyXG5cdFx0Y29uc3QgY29ycmVzcG9uZGluZ0NhbXBhaWduRGVmaW5pdGlvbiA9IGFsbENhbXBhaWduRGVmaW5pdGlvbnNbc3VydmV5LmdldENhbXBhaWduSWQoKV07XHJcblxyXG5cdFx0Ly8gU3VydmV5IHByb3BlcnRpZXMgdG8gZ2V0IGZyb20gaXRzIGNvcnJlc3BvbmRpbmcgQ2FtcGFpZ25EZWZpbml0aW9uOlxyXG5cdFx0bGV0IHBlcmNlbnRhZ2VOdW1lcmF0b3I6IG51bWJlcjtcclxuXHRcdGxldCBwZXJjZW50YWdlRGVub21pbmF0b3I6IG51bWJlcjtcclxuXHRcdGxldCBub21pbmF0aW9uUGVyaW9kTnVtYmVyOiBudW1iZXI7XHJcblx0XHRsZXQgY29vbGRvd25QZXJpb2ROdW1iZXI6IG51bWJlcjtcclxuXHJcblx0XHRwZXJjZW50YWdlTnVtZXJhdG9yID0gKGNvcnJlc3BvbmRpbmdDYW1wYWlnbkRlZmluaXRpb24ubm9taW5hdGlvblNjaGVtZSBhcyBDYW1wYWlnbk5vbWluYXRpb25TY2hlbWVSYXRpb1BlcmNlbnRhZ2UpLnBlcmNlbnRhZ2VOdW1lcmF0b3I7XHJcblx0XHRwZXJjZW50YWdlRGVub21pbmF0b3IgPSAoY29ycmVzcG9uZGluZ0NhbXBhaWduRGVmaW5pdGlvbi5ub21pbmF0aW9uU2NoZW1lIGFzIENhbXBhaWduTm9taW5hdGlvblNjaGVtZVJhdGlvUGVyY2VudGFnZSkucGVyY2VudGFnZURlbm9taW5hdG9yO1xyXG5cclxuXHRcdG5vbWluYXRpb25QZXJpb2ROdW1iZXIgPSBjb3JyZXNwb25kaW5nQ2FtcGFpZ25EZWZpbml0aW9uLm5vbWluYXRpb25TY2hlbWUubm9taW5hdGlvblBlcmlvZC5hc1RpbWVJbnRlcnZhbFNlY29uZHMoKTtcclxuXHRcdG5vbWluYXRpb25QZXJpb2ROdW1iZXIgPSBpc05PVShub21pbmF0aW9uUGVyaW9kTnVtYmVyKSA/IC0xIDogbm9taW5hdGlvblBlcmlvZE51bWJlcjsgLy8gU2V0dGluZyB0byAtMSBpZiBudWxsIG9yIHVuZGVmaW5lZFxyXG5cclxuXHRcdGNvb2xkb3duUGVyaW9kTnVtYmVyID0gY29ycmVzcG9uZGluZ0NhbXBhaWduRGVmaW5pdGlvbi5ub21pbmF0aW9uU2NoZW1lLmNvb2xkb3duUGVyaW9kLmFzVGltZUludGVydmFsU2Vjb25kcygpO1xyXG5cdFx0Y29vbGRvd25QZXJpb2ROdW1iZXIgPSBpc05PVShjb29sZG93blBlcmlvZE51bWJlcikgPyAtMSA6IGNvb2xkb3duUGVyaW9kTnVtYmVyOyAgLy8gU2V0dGluZyB0byAtMSBpZiBudWxsIG9yIHVuZGVmaW5lZFxyXG5cclxuXHRcdGNvbnN0IHN1cnZleUluZm8gPSBzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0YWxsQ2FtcGFpZ25EZWZpbml0aW9uSURzLFxyXG5cdFx0XHRhbGxDYW5kaWRhdGVDYW1wYWlnbkRlZmluaXRpb25JRHMsXHJcblx0XHRcdGNoYW5uZWxUeXBlOiBzdXJ2ZXlJbmZvLmdldEdvdmVybmVkQ2hhbm5lbFR5cGUoKSxcclxuXHRcdFx0Y29udGV4dENvdW50OiBjb250ZXh0SW5mbyA/IGNvbnRleHRJbmZvLmxlbmd0aCA6IHVuZGVmaW5lZCxcclxuXHRcdFx0Y29vbGRvd25QZXJpb2ROdW1iZXIsXHJcblx0XHRcdG5vbWluYXRpb25QZXJpb2ROdW1iZXIsXHJcblx0XHRcdHBlcmNlbnRhZ2VEZW5vbWluYXRvcixcclxuXHRcdFx0cGVyY2VudGFnZU51bWVyYXRvcixcclxuXHRcdFx0c3VydmV5TGF1bmNoZXJUeXBlOiBzdXJ2ZXkuZ2V0TGF1bmNoZXJUeXBlKCksXHJcblxyXG5cdFx0XHRidXNpbmVzc0xldmVsOiBzdXJ2ZXlJbmZvLmdldEJ1c2luZXNzTGV2ZWwoKSxcclxuXHRcdFx0bWF4TGF1bmNoZXM6IHN1cnZleUluZm8uZ2V0TWF4TGF1bmNoZXMoKSxcclxuXHRcdFx0bWF4TGF1bmNoZXNQZXJTZXNzaW9uOiBzdXJ2ZXlJbmZvLmdldE1heExhdW5jaGVzUGVyU2Vzc2lvbigpLFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0QWxsQ2FuZGlkYXRlQ2FtcGFpZ25EZWZpbml0aW9uSURzKCk6IHN0cmluZ1tdIHtcclxuXHJcblx0XHRjb25zdCBhbGxDYW5kaWRhdGVDYW1wYWlnbkRlZmluaXRpb25JRHM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCB0aGUgY2FuZGlkYXRlIHN1cnZleXMnIGNhbXBhaWduIGRlZmluaXRpb24gSURzXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNhbmRpZGF0ZVN1cnZleXMpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FuZGlkYXRlU3VydmV5cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0Y29uc3QgY2FuZGlkYXRlU3VydmV5OiBJU3VydmV5ID0gdGhpcy5jYW5kaWRhdGVTdXJ2ZXlzW2tleV07XHJcblx0XHRcdFx0YWxsQ2FuZGlkYXRlQ2FtcGFpZ25EZWZpbml0aW9uSURzLnB1c2goY2FuZGlkYXRlU3VydmV5LmdldFN1cnZleUluZm8oKS5nZXRCYWNrRW5kSWQoKSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBhbGxDYW5kaWRhdGVDYW1wYWlnbkRlZmluaXRpb25JRHM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEFsbENhbXBhaWduRGVmaW5pdGlvbklEcygpOiBzdHJpbmdbXSB7XHJcblxyXG5cdFx0Y29uc3QgYWxsQ2FtcGFpZ25EZWZpbml0aW9ucyA9ICh0aGlzLnN1cnZleUNsaWVudCBhcyBDYW1wYWlnbk1hbmFnZXIpLmdldENhbXBhaWduRGVmaW5pdGlvbnMoKTtcclxuXHRcdGNvbnN0IGFsbENhbXBhaWduRGVmaW5pdGlvbklEczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGRlZmluaXRpb25zS2V5IGluIGFsbENhbXBhaWduRGVmaW5pdGlvbnMpIHtcclxuXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhbGxDYW1wYWlnbkRlZmluaXRpb25zLCBkZWZpbml0aW9uc0tleSkpIHtcclxuXHRcdFx0XHRjb25zdCBkZWZpbml0aW9uOiBDYW1wYWlnbkRlZmluaXRpb24gPSBhbGxDYW1wYWlnbkRlZmluaXRpb25zW2RlZmluaXRpb25zS2V5XTtcclxuXHRcdFx0XHRhbGxDYW1wYWlnbkRlZmluaXRpb25JRHMucHVzaChkZWZpbml0aW9uLmNhbXBhaWduSWQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gYWxsQ2FtcGFpZ25EZWZpbml0aW9uSURzO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVBY3Rpdml0eUxpc3RlbmVyV2l0aEN1cnJlbnRTdXJ2ZXlEZWZpbml0aW9ucygpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHN1cnZleUxpc3Q6IElTdXJ2ZXlbXSA9IHRoaXMuZ2V0Q3VycmVudFN1cnZleURlZmluaXRpb25zKCk7XHJcblx0XHRjb25zdCB0cmFja2luZ0NvbnRyYWN0TGlzdDogQWN0aXZpdHlUcmFja2luZ0NvbnRyYWN0W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHN1cnZleSBvZiBzdXJ2ZXlMaXN0KSB7XHJcblx0XHRcdGNvbnN0IHN1cnZleUluZm8gPSBzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpO1xyXG5cdFx0XHRjb25zdCB0cmFja2luZ0NvbnRyYWN0ID0gbmV3IEFjdGl2aXR5VHJhY2tpbmdDb250cmFjdChzdXJ2ZXlJbmZvLmdldElkKCksIHN1cnZleUluZm8uZ2V0QWN0aXZhdGlvbkV2ZW50KCkuZ2V0VHJhY2tpbmdTZXQoKSk7XHJcblx0XHRcdHRyYWNraW5nQ29udHJhY3RMaXN0LnB1c2godHJhY2tpbmdDb250cmFjdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5hY3Rpdml0eUxpc3RlbmVyLlNldEFjdGl2aXR5VHJhY2tpbmdDb250cmFjdHModHJhY2tpbmdDb250cmFjdExpc3QsIHRoaXMucHJldmlvdXNTdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHMpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRDcml0aWNhbFBlbmRpbmdTdXJ2ZXlzQW5kVXBkYXRlQWN0aXZpdHlMaXN0ZW5lcigpIHtcclxuXHRcdGNvbnN0IGFjdGl2ZVN1cnZleXM6IElEaWN0aW9uYXJ5PElTdXJ2ZXk+ID0ge307XHJcblxyXG5cdFx0Ly8gR2V0IGFsbCB0aGUgY2FuZGlkYXRlIHN1cnZleXMnIGNhbXBhaWduIGRlZmluaXRpb24gSURzXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNhbmRpZGF0ZVN1cnZleXMpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2FuZGlkYXRlU3VydmV5cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0Y29uc3QgY2FuZGlkYXRlU3VydmV5OiBJU3VydmV5ID0gdGhpcy5jYW5kaWRhdGVTdXJ2ZXlzW2tleV07XHJcblx0XHRcdFx0aWYgKGlzQ3JpdGljYWxTdXJ2ZXkoY2FuZGlkYXRlU3VydmV5LmdldFN1cnZleUluZm8oKSkpIHtcclxuXHRcdFx0XHRcdGFjdGl2ZVN1cnZleXNba2V5XSA9IGNhbmRpZGF0ZVN1cnZleTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoT2JqZWN0LmtleXMoYWN0aXZlU3VydmV5cykubGVuZ3RoID4gMCkge1xyXG5cdFx0XHR0aGlzLnNldFBlbmRpbmdTdXJ2ZXlzKGFjdGl2ZVN1cnZleXMpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZUFjdGl2aXR5TGlzdGVuZXJXaXRoQ3VycmVudFN1cnZleURlZmluaXRpb25zKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNob3VsZEFjY2VwdEFjdGl2aXR5KGFjdGl2aXR5TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsaXphdGlvblN0YXR1cyA9PT0gSW5pdGlhbGl6YXRpb25TdGF0dXMuU3RhcnRlZCB8fFxyXG5cdFx0XHRhY3Rpdml0eU5hbWUgPT09IFN1cnZleUFjdGl2aXR5TGlzdGVuZXIuRmxvb2RnYXRlU3RhcnRBY3Rpdml0eU5hbWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG9uU3VydmV5QWN0aXZhdGVkKHN1cnZleUlkOiBzdHJpbmcsIGNvbnRleHRJbmZvOiBJQ29udGV4dERhdGFbXSk6IHZvaWQge1xyXG5cdFx0Ly8gRmluZCB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzdXJ2ZXlJZCBwYXNzZWRcclxuXHRcdGNvbnN0IHN1cnZleXM6IElTdXJ2ZXlbXSA9IHRoaXMuZ2V0Q3VycmVudFN1cnZleURlZmluaXRpb25zKCk7XHJcblx0XHRsZXQgc3VydmV5OiBJU3VydmV5O1xyXG5cclxuXHRcdGZvciAoY29uc3QgdGVtcFN1cnZleSBvZiBzdXJ2ZXlzKSB7XHJcblx0XHRcdGlmICh0ZW1wU3VydmV5LmdldFN1cnZleUluZm8oKS5nZXRJZCgpID09PSBzdXJ2ZXlJZCkge1xyXG5cdFx0XHRcdHN1cnZleSA9IHRlbXBTdXJ2ZXk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNOT1Uoc3VydmV5KSkge1xyXG5cdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0Vycm9yKFxyXG5cdFx0XHRcdFRlbGVtZXRyeUV2ZW50LkZsb29kZ2F0ZUVuZ2luZS5PblN1cnZleUFjdGl2YXRlZC5TdXJ2ZXlOb3REZWZpbmVkLFxyXG5cdFx0XHRcdFwiU3VydmV5IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBjdXJyZW50IHN1cnZleSBkZWZpbml0aW9ucy5cIixcclxuXHRcdFx0KTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IGdvdmVybmVkQ2hhbm5lbFR5cGU6IEdvdmVybmVkQ2hhbm5lbFR5cGUgPSBzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmdldEdvdmVybmVkQ2hhbm5lbFR5cGUoKTtcclxuXHJcblx0XHRcdC8vIElmIHRoZSBnb3Zlcm5hbmNlIHNlcnZpY2UgaXMgaW4gdXNlLCBsYXVuY2ggc3VydmV5IGFzeW5jaHJvbm91c2x5XHJcblx0XHRcdGlmICh0aGlzLmdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50LmlzRW5hYmxlZChnb3Zlcm5lZENoYW5uZWxUeXBlKSkge1xyXG5cdFx0XHRcdC8vIHJlY29yZCB0aGUgc3RhbGUgc3VydmV5cywgc28gd2UgY2FuIGNsZWFyIGl0cyB0cmFja2VyIGlmIEVuZ2luZSBpcyBzdG9wcGVkXHJcblx0XHRcdFx0dGhpcy5zdGFsZVRyaWdnZXJlZFN1cnZleXNRdWV1ZS5wdXNoKHN1cnZleSk7XHJcblxyXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIG5vIHN1cnZleSBpbiBzdGFsZSBiZWZvcmUsIGxhdW5jaCB0aGUgc3VydmV5IHJpZ2h0IGF3YXlcclxuXHRcdFx0XHRpZiAodGhpcy5zdGFsZVRyaWdnZXJlZFN1cnZleXNRdWV1ZS5sZW5ndGggPT09IDEpIHtcclxuXHRcdFx0XHRcdC8vIExhdW5jaCB0aGUgc3VydmV5IGFzeW5jaHJvbm91c2x5XHJcblx0XHRcdFx0XHR0aGlzLmNoZWNrR292ZXJuYW5jZVNlcnZpY2VBbmRBY3RpdmF0ZVN1cnZleShzdXJ2ZXksIGdvdmVybmVkQ2hhbm5lbFR5cGUsIGNvbnRleHRJbmZvKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5hY3RpdmF0ZVN1cnZleShzdXJ2ZXksIGdvdmVybmVkQ2hhbm5lbFR5cGUsIGNvbnRleHRJbmZvKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRGbG9vZGdhdGVFbmdpbmUudGVsZW1ldHJ5TG9nZ2VyLmxvZ19FdmVudChUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGVFbmdpbmUuT25TdXJ2ZXlBY3RpdmF0ZWQuRXJyb3IsXHJcblx0XHRcdFx0eyBFcnJvck1lc3NhZ2U6IGBFcnJvciBhY3RpdmF0aW5nIHN1cnZleSAke2UgJiYgZS50b1N0cmluZygpfWAsIEVycm9yRGV0YWlsczogZSAmJiBlLnN0YWNrIH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhY3RpdmF0ZVN1cnZleShzdXJ2ZXk6IElTdXJ2ZXksIGdvdmVybmVkQ2hhbm5lbFR5cGU6IEdvdmVybmVkQ2hhbm5lbFR5cGUsIGNvbnRleHRJbmZvOiBJQ29udGV4dERhdGFbXSkge1xyXG5cdFx0bGV0IGxhdW5jaFN1cnZleTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0Ly8gRmlndXJlIG91dCBpZiB0aGUgYWN0aXZhdGVkIHN1cnZleSBpcyBzdGlsbCByZWxldmFudFxyXG5cdFx0aWYgKCF0aGlzLmNhbmRpZGF0ZVN1cnZleXNbc3VydmV5LmdldFN1cnZleUluZm8oKS5nZXRJZCgpXSkge1xyXG5cdFx0XHQvLyBTdXJ2ZXkgaXMgbm8gbG9uZ2VyIHJlbGV2YW50IGJ1dCB3YXMgYWN0aXZhdGVkLiBTdXBwcmVzcyBpdC5cclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FdmVudChcclxuXHRcdFx0XHRUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGVFbmdpbmUuT25TdXJ2ZXlBY3RpdmF0ZWQuQWN0aXZhdGlvbklycmVsZXZhbnRTdXJ2ZXksXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0Q2FtcGFpZ25JZDogc3VydmV5LmdldFN1cnZleUluZm8oKS5nZXRCYWNrRW5kSWQoKSxcclxuXHRcdFx0XHRcdFN1cnZleUlkOiBzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmdldElkKCksXHJcblx0XHRcdFx0fSk7XHJcblx0XHR9IGVsc2UgaWYgKCFzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmlzQWN0aXZlRm9yRGF0ZShuZXcgRGF0ZSgpKSkge1xyXG5cdFx0XHQvLyBTdXJ2ZXkgaXMgbm8gbG9uZ2VyIGFjdGl2ZSAoZS5nLiBpdCB3YXMgd2hlbiB3ZSByZWdpc3RlcmVkIGl0IGJ1dCBpdCBoYXMgbm93IGV4cGlyZWQpXHJcblx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfRXZlbnQoXHJcblx0XHRcdFx0VGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlRW5naW5lLk9uU3VydmV5QWN0aXZhdGVkLkFjdGl2YXRpb25FeHBpcmVkU3VydmV5LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdENhbXBhaWduSWQ6IHN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0QmFja0VuZElkKCksXHJcblx0XHRcdFx0XHRTdXJ2ZXlJZDogc3VydmV5LmdldFN1cnZleUluZm8oKS5nZXRJZCgpLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gUmVmcmVzaCBjaGFubmVsc1xyXG5cdFx0XHR0aGlzLmdvdmVybm9yLnJlZnJlc2hDaGFubmVsRGF0YSgpO1xyXG5cclxuXHRcdFx0aWYgKGlzQ3JpdGljYWxTdXJ2ZXkoc3VydmV5LmdldFN1cnZleUluZm8oKSkpIHtcclxuXHRcdFx0XHRsYXVuY2hTdXJ2ZXkgPSB0cnVlO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLmdvdmVybm9yLmlzQ2hhbm5lbE9wZW4oZ292ZXJuZWRDaGFubmVsVHlwZSkpIHtcclxuXHRcdFx0XHQvLyBDaGFubmVsIGhhcyBjbG9zZWQgYW5kIG1heExhdW5jaGVzIGlzIG5vdCBzZXQsIHN1cHByZXNzIHRoZSBzdXJ2ZXlcclxuXHRcdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0V2ZW50KFxyXG5cdFx0XHRcdFx0VGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlRW5naW5lLk9uU3VydmV5QWN0aXZhdGVkLkNsb3NlZENoYW5uZWxUeXBlLFxyXG5cdFx0XHRcdFx0eyBDbG9zZWRDaGFubmVsVHlwZTogR292ZXJuZWRDaGFubmVsVHlwZVtnb3Zlcm5lZENoYW5uZWxUeXBlXSB9KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBHZXQgbGF0ZXN0IHN1cnZleSBzdGF0ZXMgZnJvbSBwcm92aWRlclxyXG5cdFx0XHRcdGNvbnN0IHJlZnJlc2hlZFN1cnZleUFjdGl2YXRpb25TdGF0cyA9IHRoaXMuc3VydmV5QWN0aXZhdGlvblN0YXRzUHJvdmlkZXIubG9hZCgpO1xyXG5cdFx0XHRcdGlmIChyZWZyZXNoZWRTdXJ2ZXlBY3RpdmF0aW9uU3RhdHMuZ2V0QnlTdXJ2ZXlJZChzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmdldElkKCkpKSB7XHJcblx0XHRcdFx0XHQvLyBTdXJ2ZXkgc3RhdHMgZXhpc3RzIGFscmVhZHksIGRvbid0IGxhdW5jaFxyXG5cdFx0XHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FdmVudChcclxuXHRcdFx0XHRcdFx0VGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlRW5naW5lLk9uU3VydmV5QWN0aXZhdGVkLkFjdGl2YXRpb25TdGF0c1N1cHByZXNzZWRTdXJ2ZXksXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRDYW1wYWlnbklkOiBzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmdldEJhY2tFbmRJZCgpLFxyXG5cdFx0XHRcdFx0XHRcdFN1cnZleUlkOiBzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmdldElkKCksXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoT2JqZWN0LmtleXModGhpcy5sYXVuY2hlZFN1cnZleXMpLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0Ly8gZm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgbGF1bmNoaW5nIG9uZSBzdXJ2ZXkgcGVyIHNlc3Npb24gdW5sZXNzIGl0IGlzIG11bHRpLWxhdW5jaCBjYW1wYWlnblxyXG5cdFx0XHRcdFx0Ly8gVHJhY2sgdGhpcyBzdXJ2ZXkgYWN0aXZhdGlvbiBmb3IgdGhlIGxhdW5jaCBoaXN0b3J5IHRyYWNrZXJcclxuXHRcdFx0XHRcdGxhdW5jaFN1cnZleSA9IHRydWU7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnN0IHRyaWdnZXJlZFN1cnZleSA9IE9iamVjdC52YWx1ZXModGhpcy5sYXVuY2hlZFN1cnZleXMpWzBdO1xyXG5cdFx0XHRcdFx0aWYgKCFpc05PVSh0cmlnZ2VyZWRTdXJ2ZXkpKSB7XHJcblx0XHRcdFx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfRXZlbnQoXHJcblx0XHRcdFx0XHRcdFx0VGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlRW5naW5lLk9uU3VydmV5QWN0aXZhdGVkLlNlc3Npb25TdXBwcmVzc2VkU3VydmV5LFxyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdENhbXBhaWduSWQ6IHRyaWdnZXJlZFN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0QmFja0VuZElkKCksXHJcblx0XHRcdFx0XHRcdFx0XHRTdXJ2ZXlJZDogdHJpZ2dlcmVkU3VydmV5LmdldFN1cnZleUluZm8oKS5nZXRJZCgpLFxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGxhdW5jaFN1cnZleSkge1xyXG5cdFx0XHRcdHRoaXMubGF1bmNoZWRTdXJ2ZXlzW3N1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0SWQoKV0gPSBzdXJ2ZXk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBBdCB0aGlzIHBvaW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZSBzdXJ2ZXkgaXMgc3RpbGwgcmVsZXZhbnQsIHdlIHNob3VsZCBmbHVzaCBvdXQgdGhlIHN0YXRzXHJcblx0XHR0aGlzLnVwZGF0ZVN1cnZleUFjdGl2YXRpb25TdGF0cyhzdXJ2ZXkpO1xyXG5cdFx0dGhpcy5tZXJnZUFuZFNhdmUoKTtcclxuXHRcdC8vIHNodXQgb2ZmIGZ1cnRoZXIgc3VydmV5IGxhdW5jaGVzXHJcblx0XHR0aGlzLmFjdGl2aXR5TGlzdGVuZXIuY2xlYXJTdXJ2ZXlzKCk7XHJcblxyXG5cdFx0Ly8gQ2xlYXIgdGhlIHN1cnZleSBmcm9tIHN0YWxlIGxpc3RcclxuXHRcdHRoaXMuc3RhbGVUcmlnZ2VyZWRTdXJ2ZXlzUXVldWUgPSBbXTtcclxuXHJcblx0XHQvLyBBY3R1YWxseSBsYXVuY2ggdGhlIHN1cnZleSBpZiBwb3NzaWJsZVxyXG5cdFx0aWYgKGxhdW5jaFN1cnZleSkge1xyXG5cdFx0XHQvLyBHZXQgdGhlIHN0cmluZ2lmaWVkIGpzb24gd2l0aCBhY3Rpdml0eSBuYW1lcywgY291bnRzIGFuZCBpc0FnZ3JlZ2F0ZSBpbmZvIGZvciBUcmlnZ2V0TWV0IHRlbGVtZXRyeS5cclxuXHRcdFx0Y29uc3QgYWN0aXZpdHlUcmFja2luZ1N0cmluZyA9IHN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0QWN0aXZhdGlvbkV2ZW50KCkuZ2V0VHJhY2tpbmdTZXQoKVxyXG5cdFx0XHQuZ2V0QWN0aXZpdHlUcmFja2luZ0luZm8odGhpcy5hY3Rpdml0eUxpc3RlbmVyLCBzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmdldElkKCkpO1xyXG5cclxuXHRcdFx0Y29uc3QgYWRkaXRpb25hbFN1cnZleUluZm8gPSB0aGlzLmdldEFkZGl0aW9uYWxTdXJ2ZXlJbmZvRm9yVGVsZW1ldHJ5KHN1cnZleSwgY29udGV4dEluZm8sIHRoaXMuZ2V0QWxsQ2FtcGFpZ25EZWZpbml0aW9uSURzKCksXHJcblx0XHRcdFx0dGhpcy5nZXRBbGxDYW5kaWRhdGVDYW1wYWlnbkRlZmluaXRpb25JRHMoKSk7XHJcblxyXG5cdFx0XHQvLyBPbmx5IGFkZGluZyB0aGUgZ292ZXJuYW5jZSBzZXJ2aWNlIGNsaWVudCBzdGF0ZSBhdCBUcmlnZ2VyTWV0IGV2ZW50XHJcblx0XHRcdGFkZGl0aW9uYWxTdXJ2ZXlJbmZvLmdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50U3RhdGUgPSB0aGlzLmdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50LmdldENsaWVudFN0YXRlKCk7XHJcblxyXG5cdFx0XHRGbG9vZGdhdGVFbmdpbmUudGVsZW1ldHJ5TG9nZ2VyLmxvZ19UcmlnZ2VyTWV0KHN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0QmFja0VuZElkKCksIHN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0SWQoKSxcclxuXHRcdFx0XHRzdXJ2ZXkuZ2V0VHlwZSgpLCBhY3Rpdml0eVRyYWNraW5nU3RyaW5nLCBKU09OLnN0cmluZ2lmeShhZGRpdGlvbmFsU3VydmV5SW5mbykpO1xyXG5cclxuXHRcdFx0Ly8gU2V0IGdvdmVybiBjaGFubmVsXHJcblx0XHRcdHRoaXMuZ292ZXJub3Iuc3RhcnRDaGFubmVsQ29vbGRvd24oZ292ZXJuZWRDaGFubmVsVHlwZSk7XHJcblxyXG5cdFx0XHRjb25zdCBzdXJ2ZXlJbmZvID0gc3VydmV5LmdldFN1cnZleUluZm8oKTtcclxuXHRcdFx0bGV0IGlzU3VydmV5Q29tcGxldGUgPSB0cnVlO1xyXG5cdFx0XHRpZiAoaXNCdXNpbmVzc0NyaXRpY2FsU3VydmV5KHN1cnZleUluZm8pKSB7XHJcblx0XHRcdFx0Ly8gY3JpdGljYWwgY2FtcGFpZ25zIGFyZSBub3QgdHJhY2tlZFxyXG5cdFx0XHRcdGlzU3VydmV5Q29tcGxldGUgPSBmYWxzZTtcclxuXHRcdFx0fSBlbHNlIGlmIChpc011bHRpTGF1bmNoU3VydmV5KHN1cnZleUluZm8pKSB7XHJcblx0XHRcdFx0Y29uc3Qgc3VydmV5QWN0aXZhdGlvblN0YXRzID0gdGhpcy5wcmV2aW91c1N1cnZleUFjdGl2YXRpb25TdGF0cy5nZXRCeVN1cnZleUlkKHN1cnZleUluZm8uZ2V0SWQoKSk7XHJcblx0XHRcdFx0aXNTdXJ2ZXlDb21wbGV0ZSA9IGhhc1N1cnZleVJlYWNoZWRNYXhMYXVuY2hlcyhzdXJ2ZXlJbmZvLCBzdXJ2ZXlBY3RpdmF0aW9uU3RhdHMpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTZXQgY2FtcGFpZ24gc3RhdGVzXHJcblx0XHRcdHRoaXMuc3VydmV5Q2xpZW50Lm9uU3VydmV5QWN0aXZhdGVkKHN1cnZleUluZm8sIGlzU3VydmV5Q29tcGxldGUpO1xyXG5cclxuXHRcdFx0Ly8gU2hvdyB0aGUgc3VydmV5XHJcblx0XHRcdHRoaXMubGF1bmNoTGF1bmNoZXIoc3VydmV5LCBjb250ZXh0SW5mbyk7XHJcblxyXG5cdFx0XHQvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNyaXRpY2FsIGNhbXBhaWducyBhbmQgc3RhcnQgdHJhY2tpbmcgYWdhaW5cclxuXHRcdFx0dGhpcy5zZXRDcml0aWNhbFBlbmRpbmdTdXJ2ZXlzQW5kVXBkYXRlQWN0aXZpdHlMaXN0ZW5lcigpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBjaGVja0dvdmVybmFuY2VTZXJ2aWNlQW5kQWN0aXZhdGVTdXJ2ZXkoc3VydmV5OiBJU3VydmV5LFxyXG5cdFx0Z292ZXJuZWRDaGFubmVsVHlwZTogR292ZXJuZWRDaGFubmVsVHlwZSxcclxuXHRcdGNvbnRleHRJbmZvOiBJQ29udGV4dERhdGFbXSk6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0Ly8gR2V0IHRoZSBjb29sZG93biBzZXR0aW5nXHJcblx0XHRjb25zdCBjYW1wYWlnbkRlZmluaXRpb24gPSB0aGlzLnN1cnZleUNsaWVudC5nZXRDYW1wYWlnbkRlZmluaXRpb25zKClbc3VydmV5LmdldENhbXBhaWduSWQoKV07XHJcblx0XHRjb25zdCBjYW1wYWlnbkNvb2xkb3duID0gY2FtcGFpZ25EZWZpbml0aW9uLm5vbWluYXRpb25TY2hlbWUuY29vbGRvd25QZXJpb2QuYXNUaW1lSW50ZXJ2YWxTZWNvbmRzKCk7XHJcblx0XHRjb25zdCBjaGFubmVsQ29vbGRvd24gPSBHb3Zlcm5vci5HZXRDaGFubmVsQ29vbERvd24oZ292ZXJuZWRDaGFubmVsVHlwZSk7XHJcblxyXG5cdFx0Ly8gQ2FsbCB0aGUgR292ZXJuYW5jZSBTZXJ2aWNlXHJcblx0XHRjb25zdCBzZXJ2aWNlUmVzdWx0OiBJR292ZXJuYW5jZVNlcnZpY2VSZXN1bHQgPSBhd2FpdCB0aGlzLmdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50XHJcblx0XHRcdC5jaGVja0dvdmVybmFuY2VQZXJtaXRBc3luYyhzdXJ2ZXksIGNhbXBhaWduQ29vbGRvd24sIGNoYW5uZWxDb29sZG93biwgZ292ZXJuZWRDaGFubmVsVHlwZSk7XHJcblx0XHRsZXQgbGF1bmNoU3VydmV5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdFx0Ly8gTG9nIHRoZSBzdGFsZVxyXG5cdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FdmVudChcclxuXHRcdFx0VGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlRW5naW5lLkNoZWNrR292ZXJuYW5jZVNlcnZpY2VBbmRBY3RpdmF0ZVN1cnZleS5Hb3Zlcm5hbmNlU2VydmljZUNsaWVudENvbXBsZXRlZCxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdE1lc3NhZ2U6IEpTT04uc3RyaW5naWZ5KHRoaXMuY3JlYXRlR29ydmVybmFuY2VSZXNwb25zZVRlbGVtZXRyeShzZXJ2aWNlUmVzdWx0KSksXHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdC8vIENoZWNrIGlmIGVuZ2luZSBpcyBzdGlsbCBydW5uaW5nXHJcblx0XHRpZiAodGhpcy5pbml0aWFsaXphdGlvblN0YXR1cyAhPT0gSW5pdGlhbGl6YXRpb25TdGF0dXMuU3RhcnRlZCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFzZXJ2aWNlUmVzdWx0LmVycm9yKSB7XHJcblx0XHRcdC8vIENoZWNrIHJlc3VsdCBpcyBwZXJtaXR0ZWRcclxuXHRcdFx0aWYgKHNlcnZpY2VSZXN1bHQucGVybWlzc2lvbikgeyAvLyB0aGUgR292ZXJuYW5jZSBTZXJ2aWNlIGlzIHBlcm1pdHRpbmcsIGNvbnRpbnVlIHRvIHRyaWdnZXJcclxuXHRcdFx0XHRsYXVuY2hTdXJ2ZXkgPSB0cnVlO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnN0IGxhc3RTdXJ2ZXlUcmlnZ2VySW5mbzogSUdvdmVybmFuY2VTdXJ2ZXlSZXNwb25zZSA9IHNlcnZpY2VSZXN1bHQubGFzdFRyaWdnZXJTdXJ2ZXk7XHJcblx0XHRcdFx0Ly8gRm9yIG5vdywgd2Ugb25seSBrbm93IHRoZSBjaGFubmVsIGlzIGluIGNvb2xkb3duIGJ1dCBub3QgdGhlIHNwZWNpZmljIHN1cnZleVxyXG5cdFx0XHRcdC8vIFNvIG9ubHkgc2V0IGdvdmVybmVkIGNoYW5uZWwgdG8gbmV3IGNvb2xkb3duXHJcblx0XHRcdFx0dGhpcy5nb3Zlcm5vci5zdGFydENoYW5uZWxDb29sZG93bihnb3Zlcm5lZENoYW5uZWxUeXBlLCBsYXN0U3VydmV5VHJpZ2dlckluZm8ubGFzdFRyaWdnZXJTdXJ2ZXlUaW1lKTtcclxuXHJcblx0XHRcdFx0Ly8gQ2xlYXIgdGhlIHN1cnZleSByZWxhdGluZyB0byBjaGFubmVsXHJcblx0XHRcdFx0dGhpcy5jbGVhclN1cnZleVdpdGhDaGFubmVsKGdvdmVybmVkQ2hhbm5lbFR5cGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBJZiBmb3JjZSB0byBkaXNwbGF5IHdpdGggZXJyb3IsIGNvbnRpbnVlIHRvIHRyaWdnZXIgdGhlIHN1cnZleVxyXG5cdFx0XHRpZiAodGhpcy5nb3Zlcm5hbmNlU2VydmljZUNsaWVudC5zaG91bGRGb3JjZURpc3BsYXkoKSkge1xyXG5cdFx0XHRcdGxhdW5jaFN1cnZleSA9IHRydWU7XHJcblxyXG5cdFx0XHRcdC8vIExvZyB0aGUgZm9yY2UgdG8gZGlzcGxheSBldmVudFxyXG5cdFx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfRXZlbnQoXHJcblx0XHRcdFx0XHRUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGVFbmdpbmUuQ2hlY2tHb3Zlcm5hbmNlU2VydmljZUFuZEFjdGl2YXRlU3VydmV5LkdvdmVybmFuY2VTZXJ2aWNlRm9yY2VUb0Rpc3BsYXksXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdEVycm9yTWVzc2FnZTogc2VydmljZVJlc3VsdC5lcnJvck1lc3NhZ2UsXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChsYXVuY2hTdXJ2ZXkpIHtcclxuXHRcdFx0Ly8gTGF1bmNoIHRoZSBzdXJ2ZXlcclxuXHRcdFx0dGhpcy5hY3RpdmF0ZVN1cnZleShzdXJ2ZXksIGdvdmVybmVkQ2hhbm5lbFR5cGUsIGNvbnRleHRJbmZvKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIHN1cnZleSwgd2hpY2ggaXMgdGhlIGN1cnJlbnQgb25lIGluIHByb2Nlc3MsIGNsZWFyIHF1ZXVlIGFuZCByZXR1cm5cclxuXHRcdGlmICh0aGlzLnN0YWxlVHJpZ2dlcmVkU3VydmV5c1F1ZXVlLmxlbmd0aCA8PSAxKSB7XHJcblx0XHRcdHRoaXMuc3RhbGVUcmlnZ2VyZWRTdXJ2ZXlzUXVldWUgPSBbXTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFJlbW92ZSB0aGUgZmlyc3QgYWN0aXZhdGVkIHN1cnZleSBmcm9tIHRoZSBsaXN0IHdoaWNoIGlzIHRoZSBjdXJyZW50IG9uZSBpbiBwcm9jZXNzXHJcblx0XHR0aGlzLnN0YWxlVHJpZ2dlcmVkU3VydmV5c1F1ZXVlLnNoaWZ0KCk7XHJcblxyXG5cdFx0Ly8gUGxheWJhY2sgdGhlIG5leHQgYWN0aXZhdGVkIHN1cnZleSBpbiB3YWl0aW5nXHJcblx0XHR0aGlzLmNoZWNrR292ZXJuYW5jZVNlcnZpY2VBbmRBY3RpdmF0ZVN1cnZleSh0aGlzLnN0YWxlVHJpZ2dlcmVkU3VydmV5c1F1ZXVlWzBdLCBnb3Zlcm5lZENoYW5uZWxUeXBlLCBjb250ZXh0SW5mbyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJlYWRTdHJpbmcoZmlsZVR5cGU6IEZpbGVUeXBlKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnN0b3JhZ2UucmVhZChmaWxlVHlwZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHdyaXRlU3RyaW5nKGZpbGVUeXBlOiBGaWxlVHlwZSwgc3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3RvcmFnZS53cml0ZShmaWxlVHlwZSwgc3RyKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbGF1bmNoTGF1bmNoZXIoc3VydmV5OiBJU3VydmV5LCBjb250ZXh0SW5mbzogSUNvbnRleHREYXRhW10pOiB2b2lkIHtcclxuXHRcdGNvbnN0IGxhdW5jaGVyOiBJU3VydmV5TGF1bmNoZXIgPSB0aGlzLmxhdW5jaGVyRmFjdG9yeS5tYWtlU3VydmV5TGF1bmNoZXIoc3VydmV5KTtcclxuXHRcdGlmIChsYXVuY2hlcikge1xyXG5cdFx0XHR0aGlzLmxhdW5jaGVkTGF1bmNoZXJzLnB1c2gobGF1bmNoZXIpO1xyXG5cdFx0XHR0aGlzLm9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2sub25TdXJ2ZXlBY3RpdmF0ZWQobGF1bmNoZXIsIHN1cnZleSwgeyBjb250ZXh0SW5mbyB9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2xlYXJTdXJ2ZXlXaXRoQ2hhbm5lbChnb3Zlcm5lZENoYW5uZWxUeXBlOiBHb3Zlcm5lZENoYW5uZWxUeXBlKSB7XHJcblx0XHRjb25zdCBhY3RpdmVTdXJ2ZXlzOiBJRGljdGlvbmFyeTxJU3VydmV5PiA9IHt9O1xyXG5cclxuXHRcdC8vIEdldCBhbGwgdGhlIGNhbmRpZGF0ZSBzdXJ2ZXlzJyBjYW1wYWlnbiBkZWZpbml0aW9uIElEc1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdGhpcy5jYW5kaWRhdGVTdXJ2ZXlzKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhbmRpZGF0ZVN1cnZleXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdGNvbnN0IGNhbmRpZGF0ZVN1cnZleTogSVN1cnZleSA9IHRoaXMuY2FuZGlkYXRlU3VydmV5c1trZXldO1xyXG5cdFx0XHRcdGlmIChjYW5kaWRhdGVTdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmdldEdvdmVybmVkQ2hhbm5lbFR5cGUoKSAhPT0gZ292ZXJuZWRDaGFubmVsVHlwZSkge1xyXG5cdFx0XHRcdFx0YWN0aXZlU3VydmV5c1trZXldID0gY2FuZGlkYXRlU3VydmV5O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuY2FuZGlkYXRlU3VydmV5cyA9IGFjdGl2ZVN1cnZleXM7XHJcblx0XHR0aGlzLmFjdGl2aXR5TGlzdGVuZXIuVXBkYXRlQWN0aXZpdHlUcmFja2luZ0NvbnRyYWN0cyh0aGlzLmNhbmRpZGF0ZVN1cnZleXMpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVHb3J2ZXJuYW5jZVJlc3BvbnNlVGVsZW1ldHJ5KHNlcnZpY2VSZXN1bHQ6IElHb3Zlcm5hbmNlU2VydmljZVJlc3VsdCApIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdEZsb29kZ2F0ZUVuZ2luZVN0YXR1czogdGhpcy5pbml0aWFsaXphdGlvblN0YXR1cy50b1N0cmluZygpLFxyXG5cdFx0XHRHb3Zlcm5hbmNlU2VydmljZVJlc3VsdDogc2VydmljZVJlc3VsdCxcclxuXHRcdFx0U3RhbGVUcmlnZ2VyZWRTdXJ2ZXlzUXVldWVDb3VudDogdGhpcy5zdGFsZVRyaWdnZXJlZFN1cnZleXNRdWV1ZS5sZW5ndGggLSAxLFxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/FloodgateEngine.js\n')},"../FloodgateCore/dist/src/FloodgateSettings.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.FloodgateSettings = void 0;\n/**\n * General floodgate settings\n */\nvar FloodgateSettings = /** @class */ (function () {\n    function FloodgateSettings() {\n    }\n    /**\n     * Convert to Json\n     */\n    FloodgateSettings.toJson = function (object) {\n        return JSON.stringify(object);\n    };\n    /**\n     * Load from Json\n     */\n    FloodgateSettings.fromJson = function (json) {\n        return JSON.parse(json);\n    };\n    return FloodgateSettings;\n}());\nexports.FloodgateSettings = FloodgateSettings;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0Zsb29kZ2F0ZVNldHRpbmdzLnRzPzRmMjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSDtJQUFBO0lBY0EsQ0FBQztJQWJBOztPQUVHO0lBQ1csd0JBQU0sR0FBcEIsVUFBcUIsTUFBeUI7UUFDN0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNXLDBCQUFRLEdBQXRCLFVBQXVCLElBQVk7UUFDbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRix3QkFBQztBQUFELENBQUM7QUFkWSw4Q0FBaUIiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9GbG9vZGdhdGVTZXR0aW5ncy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBHZW5lcmFsIGZsb29kZ2F0ZSBzZXR0aW5nc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEZsb29kZ2F0ZVNldHRpbmdzIHtcclxuXHQvKipcclxuXHQgKiBDb252ZXJ0IHRvIEpzb25cclxuXHQgKi9cclxuXHRwdWJsaWMgc3RhdGljIHRvSnNvbihvYmplY3Q6IEZsb29kZ2F0ZVNldHRpbmdzKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvYmplY3QpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9hZCBmcm9tIEpzb25cclxuXHQgKi9cclxuXHRwdWJsaWMgc3RhdGljIGZyb21Kc29uKGpzb246IHN0cmluZyk6IEZsb29kZ2F0ZVNldHRpbmdzIHtcclxuXHRcdHJldHVybiBKU09OLnBhcnNlKGpzb24pO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/FloodgateSettings.js\n')},"../FloodgateCore/dist/src/GovernanceUtils.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.hasSurveyReachedMaxLaunches = exports.hasSurveyReachedMaxLaunchesPerSession = exports.isCriticalSurvey = exports.isBusinessCriticalSurvey = exports.isMultiLaunchSurvey = void 0;\nvar Api_1 = __webpack_require__(/*! ./Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\nvar Utils_1 = __webpack_require__(/*! ./Utils */ "../FloodgateCore/dist/src/Utils.js");\nfunction isMultiLaunchSurvey(surveyInfo) {\n    var maxLaunches = surveyInfo === null || surveyInfo === void 0 ? void 0 : surveyInfo.getMaxLaunches();\n    return Utils_1.isNumber(maxLaunches) && maxLaunches > 1;\n}\nexports.isMultiLaunchSurvey = isMultiLaunchSurvey;\nfunction isBusinessCriticalSurvey(surveyInfo) {\n    var businessLevel = surveyInfo === null || surveyInfo === void 0 ? void 0 : surveyInfo.getBusinessLevel();\n    return !Utils_1.isNOU(businessLevel) && businessLevel === Api_1.ISurveyInfo.BusinessLevel.Critical;\n}\nexports.isBusinessCriticalSurvey = isBusinessCriticalSurvey;\nfunction isCriticalSurvey(surveyInfo) {\n    return isMultiLaunchSurvey(surveyInfo) || isBusinessCriticalSurvey(surveyInfo);\n}\nexports.isCriticalSurvey = isCriticalSurvey;\nfunction hasSurveyReachedMaxLaunchesPerSession(surveyInfo, surveyActivationStats) {\n    var _a;\n    if (isMultiLaunchSurvey(surveyInfo) && Utils_1.isNumber(surveyInfo.getMaxLaunchesPerSession())) {\n        var surveyLaunchCountInSession = (_a = surveyActivationStats[surveyInfo.getId()]) !== null && _a !== void 0 ? _a : 0;\n        var maxLaunchesPerSession = surveyInfo.getMaxLaunchesPerSession();\n        return surveyLaunchCountInSession >= maxLaunchesPerSession;\n    }\n    return true;\n}\nexports.hasSurveyReachedMaxLaunchesPerSession = hasSurveyReachedMaxLaunchesPerSession;\nfunction hasSurveyReachedMaxLaunches(surveyInfo, surveyActivationStats) {\n    if (isMultiLaunchSurvey(surveyInfo)) {\n        var surveyLaunchCount = (surveyActivationStats === null || surveyActivationStats === void 0 ? void 0 : surveyActivationStats.SurveyLaunchCount) || 0;\n        return surveyLaunchCount >= surveyInfo.getMaxLaunches();\n    }\n    return true;\n}\nexports.hasSurveyReachedMaxLaunches = hasSurveyReachedMaxLaunches;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0dvdmVybmFuY2VVdGlscy50cz9kYjNkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlGQUF3QztBQUd4Qyx1RkFBMEM7QUFFMUMsU0FBZ0IsbUJBQW1CLENBQUMsVUFBdUI7SUFDMUQsSUFBTSxXQUFXLEdBQUcsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ2pELE9BQU8sZ0JBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFIRCxrREFHQztBQUVELFNBQWdCLHdCQUF3QixDQUFDLFVBQXVCO0lBQy9ELElBQU0sYUFBYSxHQUFHLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3JELE9BQU8sQ0FBQyxhQUFLLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxLQUFLLGlCQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztBQUN0RixDQUFDO0FBSEQsNERBR0M7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxVQUF1QjtJQUN2RCxPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hGLENBQUM7QUFGRCw0Q0FFQztBQUVELFNBQWdCLHFDQUFxQyxDQUFDLFVBQXVCLEVBQUUscUJBQTBDOztJQUN4SCxJQUFJLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLGdCQUFRLENBQUMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLENBQUMsRUFBRTtRQUN2RixJQUFNLDBCQUEwQixTQUFHLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxtQ0FBSSxDQUFDLENBQUM7UUFDbEYsSUFBTSxxQkFBcUIsR0FBRyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNwRSxPQUFPLDBCQUEwQixJQUFJLHFCQUFxQixDQUFDO0tBQzNEO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDYixDQUFDO0FBUkQsc0ZBUUM7QUFFRCxTQUFnQiwyQkFBMkIsQ0FBQyxVQUF1QixFQUFFLHFCQUE0QztJQUNoSCxJQUFJLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ3BDLElBQU0saUJBQWlCLEdBQUcsc0JBQXFCLGFBQXJCLHFCQUFxQix1QkFBckIscUJBQXFCLENBQUUsaUJBQWlCLEtBQUksQ0FBQyxDQUFDO1FBQ3hFLE9BQU8saUJBQWlCLElBQUksVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO0tBQ3hEO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDYixDQUFDO0FBUEQsa0VBT0MiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9Hb3Zlcm5hbmNlVXRpbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJU3VydmV5SW5mbyB9IGZyb20gXCIuL0FwaS9BcGlcIjtcclxuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tIFwiLi9Db21tb25cIjtcclxuaW1wb3J0IHsgU3VydmV5QWN0aXZhdGlvblN0YXRzIH0gZnJvbSBcIi4vU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uXCI7XHJcbmltcG9ydCB7IGlzTk9VLCBpc051bWJlciB9IGZyb20gXCIuL1V0aWxzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNNdWx0aUxhdW5jaFN1cnZleShzdXJ2ZXlJbmZvOiBJU3VydmV5SW5mbyk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IG1heExhdW5jaGVzID0gc3VydmV5SW5mbz8uZ2V0TWF4TGF1bmNoZXMoKTtcclxuXHRyZXR1cm4gaXNOdW1iZXIobWF4TGF1bmNoZXMpICYmIG1heExhdW5jaGVzID4gMTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQnVzaW5lc3NDcml0aWNhbFN1cnZleShzdXJ2ZXlJbmZvOiBJU3VydmV5SW5mbyk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGJ1c2luZXNzTGV2ZWwgPSBzdXJ2ZXlJbmZvPy5nZXRCdXNpbmVzc0xldmVsKCk7XHJcblx0cmV0dXJuICFpc05PVShidXNpbmVzc0xldmVsKSAmJiBidXNpbmVzc0xldmVsID09PSBJU3VydmV5SW5mby5CdXNpbmVzc0xldmVsLkNyaXRpY2FsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNDcml0aWNhbFN1cnZleShzdXJ2ZXlJbmZvOiBJU3VydmV5SW5mbyk6IGJvb2xlYW4ge1xyXG5cdHJldHVybiBpc011bHRpTGF1bmNoU3VydmV5KHN1cnZleUluZm8pIHx8IGlzQnVzaW5lc3NDcml0aWNhbFN1cnZleShzdXJ2ZXlJbmZvKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGhhc1N1cnZleVJlYWNoZWRNYXhMYXVuY2hlc1BlclNlc3Npb24oc3VydmV5SW5mbzogSVN1cnZleUluZm8sIHN1cnZleUFjdGl2YXRpb25TdGF0czogSURpY3Rpb25hcnk8bnVtYmVyPik6IGJvb2xlYW4ge1xyXG5cdGlmIChpc011bHRpTGF1bmNoU3VydmV5KHN1cnZleUluZm8pICYmIGlzTnVtYmVyKHN1cnZleUluZm8uZ2V0TWF4TGF1bmNoZXNQZXJTZXNzaW9uKCkpKSB7XHJcblx0XHRjb25zdCBzdXJ2ZXlMYXVuY2hDb3VudEluU2Vzc2lvbiA9IHN1cnZleUFjdGl2YXRpb25TdGF0c1tzdXJ2ZXlJbmZvLmdldElkKCldID8/IDA7XHJcblx0XHRjb25zdCBtYXhMYXVuY2hlc1BlclNlc3Npb24gPSBzdXJ2ZXlJbmZvLmdldE1heExhdW5jaGVzUGVyU2Vzc2lvbigpO1xyXG5cdFx0cmV0dXJuIHN1cnZleUxhdW5jaENvdW50SW5TZXNzaW9uID49IG1heExhdW5jaGVzUGVyU2Vzc2lvbjtcclxuXHR9XHJcblxyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFzU3VydmV5UmVhY2hlZE1heExhdW5jaGVzKHN1cnZleUluZm86IElTdXJ2ZXlJbmZvLCBzdXJ2ZXlBY3RpdmF0aW9uU3RhdHM6IFN1cnZleUFjdGl2YXRpb25TdGF0cyk6IGJvb2xlYW4ge1xyXG5cdGlmIChpc011bHRpTGF1bmNoU3VydmV5KHN1cnZleUluZm8pKSB7XHJcblx0XHRjb25zdCBzdXJ2ZXlMYXVuY2hDb3VudCA9IHN1cnZleUFjdGl2YXRpb25TdGF0cz8uU3VydmV5TGF1bmNoQ291bnQgfHwgMDtcclxuXHRcdHJldHVybiBzdXJ2ZXlMYXVuY2hDb3VudCA+PSBzdXJ2ZXlJbmZvLmdldE1heExhdW5jaGVzKCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/GovernanceUtils.js\n')},"../FloodgateCore/dist/src/GovernedChannel.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.GovernedChannel = exports.GovernedChannelType = void 0;\nvar Utils = __webpack_require__(/*! ./Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar GovernedChannelType;\n(function (GovernedChannelType) {\n    GovernedChannelType[GovernedChannelType["Standard"] = 0] = "Standard";\n    GovernedChannelType[GovernedChannelType["Urgent"] = 1] = "Urgent";\n    GovernedChannelType[GovernedChannelType["Banner"] = 2] = "Banner";\n    GovernedChannelType[GovernedChannelType["TeachingMessage"] = 3] = "TeachingMessage";\n})(GovernedChannelType = exports.GovernedChannelType || (exports.GovernedChannelType = {}));\n(function (GovernedChannelType) {\n    function getDefault() { return GovernedChannelType.Standard; }\n    GovernedChannelType.getDefault = getDefault;\n})(GovernedChannelType = exports.GovernedChannelType || (exports.GovernedChannelType = {}));\nvar GovernedChannel = /** @class */ (function () {\n    function GovernedChannel(type, name, cooldownSeconds, cooldownStartTime) {\n        if (!Utils.isEnumValue(type, GovernedChannelType)) {\n            throw new Error("type is not a valid GovernedChannelType");\n        }\n        if (!name) {\n            throw new Error("name must not be null or empty");\n        }\n        if (cooldownSeconds < 0) {\n            throw new Error("cooldownSeconds must not be negative");\n        }\n        this.type = type;\n        this.name = name;\n        this.cooldownSeconds = cooldownSeconds;\n        this.setCooldownStartTime(cooldownStartTime);\n    }\n    GovernedChannel.prototype.setCooldownStartTime = function (cooldownStartTime) {\n        // Set the start time\n        this.cooldownStartTime = cooldownStartTime;\n        if (Utils.isNOU(this.cooldownStartTime)) {\n            // Null cooldownStartTime means cool down has never been initiated, so set the cooldownEndTime to distant past\n            this.cooldownEndTime = Utils.getDistantPast();\n            return;\n        }\n        // Calculate the end time, but don\'t overflow past max.\n        this.cooldownEndTime = Utils.addSecondsWithoutOverflow(this.cooldownStartTime, this.cooldownSeconds);\n    };\n    // @Override\n    GovernedChannel.prototype.isOpen = function () {\n        return this.isOpenAtDate(new Date());\n    };\n    // @Override\n    GovernedChannel.prototype.isOpenAtDate = function (date) {\n        if (!date) {\n            return false;\n        }\n        return (date > this.cooldownEndTime);\n    };\n    // @Override\n    GovernedChannel.prototype.getType = function () {\n        return this.type;\n    };\n    // @Override\n    GovernedChannel.prototype.getName = function () {\n        return this.name;\n    };\n    // @Override\n    GovernedChannel.prototype.getCooldownSeconds = function () {\n        return this.cooldownSeconds;\n    };\n    // @Override\n    GovernedChannel.prototype.getCooldownStartTime = function () {\n        return this.cooldownStartTime;\n    };\n    // @Override\n    GovernedChannel.prototype.getCooldownEndTime = function () {\n        return this.cooldownEndTime;\n    };\n    return GovernedChannel;\n}());\nexports.GovernedChannel = GovernedChannel;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0dvdmVybmVkQ2hhbm5lbC50cz8zMDU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFGQUFpQztBQUVqQyxJQUFZLG1CQUtYO0FBTEQsV0FBWSxtQkFBbUI7SUFDOUIscUVBQVE7SUFDUixpRUFBTTtJQUNOLGlFQUFNO0lBQ04sbUZBQWU7QUFDaEIsQ0FBQyxFQUxXLG1CQUFtQixHQUFuQiwyQkFBbUIsS0FBbkIsMkJBQW1CLFFBSzlCO0FBRUQsV0FBaUIsbUJBQW1CO0lBQ25DLFNBQWdCLFVBQVUsS0FBMEIsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQTFFLDhCQUFVLGFBQWdFO0FBQzNGLENBQUMsRUFGZ0IsbUJBQW1CLEdBQW5CLDJCQUFtQixLQUFuQiwyQkFBbUIsUUFFbkM7QUF5Q0Q7SUFPQyx5QkFBbUIsSUFBeUIsRUFBRSxJQUFZLEVBQUUsZUFBdUIsRUFBRSxpQkFBdUI7UUFDM0csSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLEVBQUU7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzNEO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNsRDtRQUVELElBQUksZUFBZSxHQUFHLENBQUMsRUFBRTtZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7U0FDeEQ7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sOENBQW9CLEdBQTNCLFVBQTRCLGlCQUF1QjtRQUNsRCxxQkFBcUI7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBRTNDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUN4Qyw4R0FBOEc7WUFDOUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDOUMsT0FBTztTQUNQO1FBRUQsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELFlBQVk7SUFDTCxnQ0FBTSxHQUFiO1FBQ0MsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsWUFBWTtJQUNMLHNDQUFZLEdBQW5CLFVBQW9CLElBQVU7UUFDN0IsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNWLE9BQU8sS0FBSyxDQUFDO1NBQ2I7UUFFRCxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsWUFBWTtJQUNMLGlDQUFPLEdBQWQ7UUFDQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVk7SUFDTCxpQ0FBTyxHQUFkO1FBQ0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxZQUFZO0lBQ0wsNENBQWtCLEdBQXpCO1FBQ0MsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZO0lBQ0wsOENBQW9CLEdBQTNCO1FBQ0MsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVk7SUFDTCw0Q0FBa0IsR0FBekI7UUFDQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDN0IsQ0FBQztJQUNGLHNCQUFDO0FBQUQsQ0FBQztBQTlFWSwwQ0FBZSIsImZpbGUiOiIuLi9GbG9vZGdhdGVDb3JlL2Rpc3Qvc3JjL0dvdmVybmVkQ2hhbm5lbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFV0aWxzIGZyb20gXCIuL1V0aWxzXCI7XHJcblxyXG5leHBvcnQgZW51bSBHb3Zlcm5lZENoYW5uZWxUeXBlIHtcclxuXHRTdGFuZGFyZCwgLy8gMFxyXG5cdFVyZ2VudCwgLy8gMVxyXG5cdEJhbm5lciwgLy8gMlxyXG5cdFRlYWNoaW5nTWVzc2FnZSwgLy8gM1xyXG59XHJcblxyXG5leHBvcnQgbmFtZXNwYWNlIEdvdmVybmVkQ2hhbm5lbFR5cGUge1xyXG5cdGV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0KCk6IEdvdmVybmVkQ2hhbm5lbFR5cGUgeyByZXR1cm4gR292ZXJuZWRDaGFubmVsVHlwZS5TdGFuZGFyZDsgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHb3Zlcm5lZENoYW5uZWxEYXRhIHtcclxuXHQvKipcclxuXHQgKiBHZXRzIHRoZSB0eXBlIG9mIEdvdmVybmVkQ2hhbm5lbCB0aGlzIG9iamVjdCByZXByZXNlbnRzXHJcblx0ICovXHJcblx0Z2V0VHlwZSgpOiBHb3Zlcm5lZENoYW5uZWxUeXBlO1xyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoaXMgR292ZXJuZWRDaGFubmVsXHJcblx0ICovXHJcblx0Z2V0TmFtZSgpOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIGFtb3VudCBvZiB0aW1lIGR1cmluZyB3aGljaCB0aGlzIGNoYW5uZWwgd2lsbCByZWZ1c2UgbmV3IHN1cnZleXMgYWZ0ZXIgYSBzdWNjZXNzZnVsIHByb21wdFxyXG5cdCAqL1xyXG5cdGdldENvb2xkb3duU2Vjb25kcygpOiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIGxhc3QgdGltZSB0aGlzIGNoYW5uZWwgc3RhcnRlZCBhIGNvb2wgZG93biAoYWthIHRoZSBsYXN0IHRpbWUgYSBzdXJ2ZXkgd2FzIHN1Y2Nlc3NmdWxseSBzaG93bikuXHJcblx0ICogTnVsbCBpZiBjb29sIGRvd24gaGFzIG5ldmVyIGJlZW4gaW5pdGlhdGVkXHJcblx0ICovXHJcblx0Z2V0Q29vbGRvd25TdGFydFRpbWUoKTogRGF0ZTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgaW4gY29vbCBkb3duLCByZXR1cm5zIHRoZSB0aW1lIGluIHdoaWNoIHRoaXMgY2hhbm5lbCB3aWxsIG5leHQgYmUgXCJPcGVuXCIuXHJcblx0ICogRWxzZSByZXR1cm5zIHRoZSBsYXN0IHRpbWUgdGhpcyBjaGFubmVsIGJlY2FtZSBcIk9wZW5cIi5cclxuXHQgKi9cclxuXHRnZXRDb29sZG93bkVuZFRpbWUoKTogRGF0ZTtcclxuXHJcblx0LyoqXHJcblx0ICogV2hldGhlciBvciBub3QgdGhpcyBjaGFubmVsIGlzIG9wZW4gdG8gbmV3IHN1cnZleXMgYXQgdGhpcyBjdXJyZW50IHBvaW50IGluIHRpbWUgKGFrYSBOb3cpXHJcblx0ICovXHJcblx0aXNPcGVuKCk6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdoZXRoZXIgb3Igbm90IHRoaXMgY2hhbm5lbCBpcyBvcGVuIHRvIG5ldyBzdXJ2ZXlzIGF0IHRoZSBzcGVjaWZpZWQgcG9pbnQgaW4gdGltZVxyXG5cdCAqL1xyXG5cdGlzT3BlbkF0RGF0ZShkYXRlOiBEYXRlKTogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdvdmVybmVkQ2hhbm5lbCBpbXBsZW1lbnRzIElHb3Zlcm5lZENoYW5uZWxEYXRhIHtcclxuXHRwcml2YXRlIHR5cGU6IEdvdmVybmVkQ2hhbm5lbFR5cGU7XHJcblx0cHJpdmF0ZSBuYW1lOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBjb29sZG93blNlY29uZHM6IG51bWJlcjtcclxuXHRwcml2YXRlIGNvb2xkb3duU3RhcnRUaW1lOiBEYXRlO1xyXG5cdHByaXZhdGUgY29vbGRvd25FbmRUaW1lOiBEYXRlO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3IodHlwZTogR292ZXJuZWRDaGFubmVsVHlwZSwgbmFtZTogc3RyaW5nLCBjb29sZG93blNlY29uZHM6IG51bWJlciwgY29vbGRvd25TdGFydFRpbWU6IERhdGUpIHtcclxuXHRcdGlmICghVXRpbHMuaXNFbnVtVmFsdWUodHlwZSwgR292ZXJuZWRDaGFubmVsVHlwZSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBpcyBub3QgYSB2YWxpZCBHb3Zlcm5lZENoYW5uZWxUeXBlXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghbmFtZSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIG11c3Qgbm90IGJlIG51bGwgb3IgZW1wdHlcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNvb2xkb3duU2Vjb25kcyA8IDApIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiY29vbGRvd25TZWNvbmRzIG11c3Qgbm90IGJlIG5lZ2F0aXZlXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudHlwZSA9IHR5cGU7XHJcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xyXG5cdFx0dGhpcy5jb29sZG93blNlY29uZHMgPSBjb29sZG93blNlY29uZHM7XHJcblx0XHR0aGlzLnNldENvb2xkb3duU3RhcnRUaW1lKGNvb2xkb3duU3RhcnRUaW1lKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRDb29sZG93blN0YXJ0VGltZShjb29sZG93blN0YXJ0VGltZTogRGF0ZSk6IHZvaWQge1xyXG5cdFx0Ly8gU2V0IHRoZSBzdGFydCB0aW1lXHJcblx0XHR0aGlzLmNvb2xkb3duU3RhcnRUaW1lID0gY29vbGRvd25TdGFydFRpbWU7XHJcblxyXG5cdFx0aWYgKFV0aWxzLmlzTk9VKHRoaXMuY29vbGRvd25TdGFydFRpbWUpKSB7XHJcblx0XHRcdC8vIE51bGwgY29vbGRvd25TdGFydFRpbWUgbWVhbnMgY29vbCBkb3duIGhhcyBuZXZlciBiZWVuIGluaXRpYXRlZCwgc28gc2V0IHRoZSBjb29sZG93bkVuZFRpbWUgdG8gZGlzdGFudCBwYXN0XHJcblx0XHRcdHRoaXMuY29vbGRvd25FbmRUaW1lID0gVXRpbHMuZ2V0RGlzdGFudFBhc3QoKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENhbGN1bGF0ZSB0aGUgZW5kIHRpbWUsIGJ1dCBkb24ndCBvdmVyZmxvdyBwYXN0IG1heC5cclxuXHRcdHRoaXMuY29vbGRvd25FbmRUaW1lID0gVXRpbHMuYWRkU2Vjb25kc1dpdGhvdXRPdmVyZmxvdyh0aGlzLmNvb2xkb3duU3RhcnRUaW1lLCB0aGlzLmNvb2xkb3duU2Vjb25kcyk7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgaXNPcGVuKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXNPcGVuQXREYXRlKG5ldyBEYXRlKCkpO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGlzT3BlbkF0RGF0ZShkYXRlOiBEYXRlKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRhdGUpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAoZGF0ZSA+IHRoaXMuY29vbGRvd25FbmRUaW1lKTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRUeXBlKCk6IEdvdmVybmVkQ2hhbm5lbFR5cGUge1xyXG5cdFx0cmV0dXJuIHRoaXMudHlwZTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5uYW1lO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldENvb2xkb3duU2Vjb25kcygpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29vbGRvd25TZWNvbmRzO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldENvb2xkb3duU3RhcnRUaW1lKCk6IERhdGUge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29vbGRvd25TdGFydFRpbWU7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0Q29vbGRvd25FbmRUaW1lKCk6IERhdGUge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29vbGRvd25FbmRUaW1lO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/GovernedChannel.js\n')},"../FloodgateCore/dist/src/GovernedChannelStateProvider.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.FileBasedGovernedChannelStateProvider = exports.HostBasedGovernedChannelStateProvider = exports.GovernedChannelStateProviderFactory = exports.GovernedChannelState = void 0;\nvar IFloodgateStorageProvider = __webpack_require__(/*! ./Api/IFloodgateStorageProvider */ "../FloodgateCore/dist/src/Api/IFloodgateStorageProvider.js");\nvar Constants_1 = __webpack_require__(/*! ./Constants */ "../FloodgateCore/dist/src/Constants.js");\nvar FloodgateEngine_1 = __webpack_require__(/*! ./FloodgateEngine */ "../FloodgateCore/dist/src/FloodgateEngine.js");\nvar GovernedChannel_1 = __webpack_require__(/*! ./GovernedChannel */ "../FloodgateCore/dist/src/GovernedChannel.js");\nvar StateProviderHelpers = __webpack_require__(/*! ./StateProviderHelpers */ "../FloodgateCore/dist/src/StateProviderHelpers.js");\nvar Utils = __webpack_require__(/*! ./Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar FileType = IFloodgateStorageProvider.FileType;\nvar GovernedChannelState = /** @class */ (function () {\n    function GovernedChannelState(type, cooldownStartTime) {\n        this.ChannelType = type;\n        this.CooldownStartTimeUtc = cooldownStartTime;\n        if (!this.validate()) {\n            throw new Error("Constructor arguments are not valid");\n        }\n    }\n    /**\n     * Method to deserialize a JSON object to class object\n     * @param input: JSON object\n     * Returns class object\n     */\n    GovernedChannelState.deserialize = function (input) {\n        var result;\n        if (!input) {\n            return null;\n        }\n        // Validation is handled by GovernedChannelState\'s constructor\n        try {\n            result = new GovernedChannelState(input.ChannelType, input.CooldownStartTimeUtc);\n        }\n        catch (e) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.GovernedChannelState.Deserialize.Failed, { ErrorMessage: e.toString() });\n            return null;\n        }\n        return result;\n    };\n    GovernedChannelState.prototype.validate = function () {\n        if (!Utils.isEnumValue(this.ChannelType, GovernedChannel_1.GovernedChannelType)) {\n            return false;\n        }\n        // make it a date object if it\'s a valid UTC date time value\n        if (Utils.isUtcDatetimeString(this.CooldownStartTimeUtc)) {\n            this.CooldownStartTimeUtc = Utils.stringToDate(this.CooldownStartTimeUtc);\n            // Allow null and bad cooldownStartTime\n        }\n        else if (Utils.isNOU(this.CooldownStartTimeUtc) || !Utils.isDate(this.CooldownStartTimeUtc)) {\n            this.CooldownStartTimeUtc = Utils.getDistantPast();\n        }\n        return true;\n    };\n    GovernedChannelState.prototype.getType = function () {\n        return this.ChannelType;\n    };\n    GovernedChannelState.prototype.getCooldownStartTime = function () {\n        return this.CooldownStartTimeUtc;\n    };\n    return GovernedChannelState;\n}());\nexports.GovernedChannelState = GovernedChannelState;\nvar GovernedChannelStateProviderFactory = /** @class */ (function () {\n    function GovernedChannelStateProviderFactory() {\n    }\n    GovernedChannelStateProviderFactory.make = function (fileBasedStorage, hostBasedStorage) {\n        if (hostBasedStorage) {\n            return new HostBasedGovernedChannelStateProvider(fileBasedStorage, hostBasedStorage);\n        }\n        return new FileBasedGovernedChannelStateProvider(fileBasedStorage);\n    };\n    return GovernedChannelStateProviderFactory;\n}());\nexports.GovernedChannelStateProviderFactory = GovernedChannelStateProviderFactory;\n/**\n * Class representing what is stored in the file.\n */\nvar FileData = /** @class */ (function () {\n    function FileData() {\n    }\n    return FileData;\n}());\nvar HostBasedGovernedChannelStateProvider = /** @class */ (function () {\n    function HostBasedGovernedChannelStateProvider(fileBasedStorage, hostBasedStorage) {\n        if (!hostBasedStorage) {\n            throw new Error("host-based storage must not be null");\n        }\n        this.hostBasedStorage = hostBasedStorage;\n        // file-based provider is optional\n        if (fileBasedStorage) {\n            this.fileBasedStateProvider = new FileBasedGovernedChannelStateProvider(fileBasedStorage);\n        }\n    }\n    // @Override\n    HostBasedGovernedChannelStateProvider.prototype.load = function () {\n        var statesFromHost = this.getStatesFromHost();\n        var statesFromFile;\n        if (this.fileBasedStateProvider) {\n            statesFromFile = this.fileBasedStateProvider.load();\n        }\n        var StateCollections = StateProviderHelpers.MergeAndUpdateGovernedChannelStates(statesFromFile, statesFromHost);\n        return StateCollections.find(0 /* Merged */);\n    };\n    // @Override\n    HostBasedGovernedChannelStateProvider.prototype.save = function (states) {\n        var _this = this;\n        if (!states) {\n            return;\n        }\n        var statesFromHost = this.getStatesFromHost();\n        var StateCollections = StateProviderHelpers.MergeAndUpdateGovernedChannelStates(states, statesFromHost);\n        var toBeUpdatedStates = StateCollections.find(1 /* ToBeUpdated */);\n        var mergedStates = StateCollections.find(0 /* Merged */);\n        // write delta_data to Host\n        if (toBeUpdatedStates) {\n            toBeUpdatedStates.forEach(function (state) {\n                var stateValue = StateProviderHelpers.makeSettingItemValue(JSON.stringify(state));\n                _this.hostBasedStorage.upsertSettingItem(FileType[FileType.GovernedChannelStates], String(state.getType()), stateValue);\n            });\n        }\n        // Write merged data to File\n        if (this.fileBasedStateProvider) {\n            this.fileBasedStateProvider.save(mergedStates);\n        }\n    };\n    HostBasedGovernedChannelStateProvider.prototype.getStatesFromHost = function () {\n        var states = [];\n        var settings = this.hostBasedStorage.readSettingList(FileType[FileType.GovernedChannelStates]);\n        for (var key in settings) {\n            if (!settings.hasOwnProperty(key)) {\n                continue;\n            }\n            var value = settings[key];\n            var dataString = StateProviderHelpers.extractSettingItemValueSubString(value);\n            var itemObject = {};\n            try {\n                itemObject = JSON.parse(dataString);\n                var newState = GovernedChannelState.deserialize(itemObject);\n                if (newState) {\n                    states.push(newState);\n                }\n            }\n            catch (e) {\n                FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.HostBasedGovernedChannelStateProvider.GetStatesFromHost.Failed, { ErrorMessage: "Json parsing/deserializing failed. " + e.toString() + ".  Input:" + dataString });\n            }\n        }\n        return states;\n    };\n    return HostBasedGovernedChannelStateProvider;\n}());\nexports.HostBasedGovernedChannelStateProvider = HostBasedGovernedChannelStateProvider;\nvar FileBasedGovernedChannelStateProvider = /** @class */ (function () {\n    function FileBasedGovernedChannelStateProvider(storage) {\n        if (!storage) {\n            throw new Error("storage must not be null");\n        }\n        this.storage = storage;\n    }\n    // @Override\n    FileBasedGovernedChannelStateProvider.prototype.load = function () {\n        // Load channel state from file using _storageProvider (get back string)\n        var readString = this.storage.read(FileType.GovernedChannelStates);\n        if (!readString) {\n            return [];\n        }\n        var fileData;\n        try {\n            fileData = JSON.parse(readString);\n            var result_1 = [];\n            if (fileData && fileData.ChannelStates) {\n                fileData.ChannelStates.forEach(function (state) {\n                    var newState = GovernedChannelState.deserialize(state);\n                    if (newState) {\n                        result_1.push(newState);\n                    }\n                });\n            }\n            return result_1;\n        }\n        catch (e) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.FileBasedGovernedChannelStateProvider.Load.Failed, { ErrorMessage: "Json parsing/deserializing failed. " + e.toString() + ".  Input:" + readString });\n            return [];\n        }\n    };\n    // @Override\n    FileBasedGovernedChannelStateProvider.prototype.save = function (states) {\n        if (!states) {\n            return;\n        }\n        var fileData = new FileData();\n        fileData.ChannelStates = states;\n        var writeString = JSON.stringify(fileData);\n        this.storage.write(FileType.GovernedChannelStates, writeString);\n    };\n    return FileBasedGovernedChannelStateProvider;\n}());\nexports.FileBasedGovernedChannelStateProvider = FileBasedGovernedChannelStateProvider;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0dvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXIudHM/ZjBmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSx5SkFBNkU7QUFDN0UsbUdBQTZDO0FBQzdDLHFIQUFvRDtBQUNwRCxxSEFBd0Q7QUFDeEQsa0lBQStEO0FBQy9ELHFGQUFpQztBQUNqQyxJQUFPLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQyxRQUFRLENBQUM7QUFHckQ7SUFrQ0MsOEJBQW1CLElBQXlCLEVBQUUsaUJBQXVCO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQztRQUU5QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztTQUN2RDtJQUNGLENBQUM7SUF4Q0Q7Ozs7T0FJRztJQUNXLGdDQUFXLEdBQXpCLFVBQTBCLEtBQVU7UUFDbkMsSUFBSSxNQUE0QixDQUFDO1FBRWpDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztTQUNaO1FBRUQsOERBQThEO1FBQzlELElBQUk7WUFDSCxNQUFNLEdBQUcsSUFBSSxvQkFBb0IsQ0FDaEMsS0FBSyxDQUFDLFdBQVcsRUFDakIsS0FBSyxDQUFDLG9CQUFvQixDQUMxQixDQUFDO1NBQ0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNYLGlDQUFlLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQzdDLDBCQUFjLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pGLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFpQk0sdUNBQVEsR0FBZjtRQUNDLElB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QUFRLEdBQXlCLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFFL0UsSUFBSSxRQUFRLEVBQUU7d0JBQ2IsUUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDdEI7Z0JBQ0YsQ0FBQyxDQUFDLENBQUM7YUFDSDtZQUVELE9BQU8sUUFBTSxDQUFDO1NBQ2Q7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNYLGlDQUFlLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQzdDLDBCQUFjLENBQUMscUNBQXFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDaEUsRUFBRSxZQUFZLEVBQUUscUNBQXFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLFdBQVcsR0FBRyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3BHLE9BQU8sRUFBRSxDQUFDO1NBQ1Y7SUFDRixDQUFDO0lBRUQsWUFBWTtJQUNMLG9EQUFJLEdBQVgsVUFBWSxNQUE4QjtRQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1osT0FBTztTQUNQO1FBRUQsSUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxRQUFRLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztRQUNoQyxJQUFNLFdBQVcsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0YsNENBQUM7QUFBRCxDQUFDO0FBeERZLHNGQUFxQyIsImZpbGUiOiIuLi9GbG9vZGdhdGVDb3JlL2Rpc3Qvc3JjL0dvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRmxvb2RnYXRlU2V0dGluZyB9IGZyb20gXCIuL0FwaS9JRmxvb2RnYXRlU2V0dGluZ1wiO1xyXG5pbXBvcnQgeyBJRmxvb2RnYXRlU2V0dGluZ1N0b3JhZ2VDYWxsYmFjayB9IGZyb20gXCIuL0FwaS9JRmxvb2RnYXRlU2V0dGluZ1N0b3JhZ2VDYWxsYmFja1wiO1xyXG5pbXBvcnQgKiBhcyBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyIGZyb20gXCIuL0FwaS9JRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyXCI7XHJcbmltcG9ydCB7IFRlbGVtZXRyeUV2ZW50IH0gZnJvbSBcIi4vQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEZsb29kZ2F0ZUVuZ2luZSB9IGZyb20gXCIuL0Zsb29kZ2F0ZUVuZ2luZVwiO1xyXG5pbXBvcnQgeyBHb3Zlcm5lZENoYW5uZWxUeXBlIH0gZnJvbSBcIi4vR292ZXJuZWRDaGFubmVsXCI7XHJcbmltcG9ydCAqIGFzIFN0YXRlUHJvdmlkZXJIZWxwZXJzIGZyb20gXCIuL1N0YXRlUHJvdmlkZXJIZWxwZXJzXCI7XHJcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gXCIuL1V0aWxzXCI7XHJcbmltcG9ydCBGaWxlVHlwZSA9IElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIuRmlsZVR5cGU7XHJcbmltcG9ydCBTdGF0ZUxpc3RUeXBlID0gU3RhdGVQcm92aWRlckhlbHBlcnMuU3RhdGVMaXN0VHlwZTtcclxuXHJcbmV4cG9ydCBjbGFzcyBHb3Zlcm5lZENoYW5uZWxTdGF0ZSB7XHJcblx0LyoqXHJcblx0ICogTWV0aG9kIHRvIGRlc2VyaWFsaXplIGEgSlNPTiBvYmplY3QgdG8gY2xhc3Mgb2JqZWN0XHJcblx0ICogQHBhcmFtIGlucHV0OiBKU09OIG9iamVjdFxyXG5cdCAqIFJldHVybnMgY2xhc3Mgb2JqZWN0XHJcblx0ICovXHJcblx0cHVibGljIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogR292ZXJuZWRDaGFubmVsU3RhdGUge1xyXG5cdFx0bGV0IHJlc3VsdDogR292ZXJuZWRDaGFubmVsU3RhdGU7XHJcblxyXG5cdFx0aWYgKCFpbnB1dCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBWYWxpZGF0aW9uIGlzIGhhbmRsZWQgYnkgR292ZXJuZWRDaGFubmVsU3RhdGUncyBjb25zdHJ1Y3RvclxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0cmVzdWx0ID0gbmV3IEdvdmVybmVkQ2hhbm5lbFN0YXRlKFxyXG5cdFx0XHRcdGlucHV0LkNoYW5uZWxUeXBlLFxyXG5cdFx0XHRcdGlucHV0LkNvb2xkb3duU3RhcnRUaW1lVXRjLFxyXG5cdFx0XHQpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0V2ZW50KFxyXG5cdFx0XHRcdFRlbGVtZXRyeUV2ZW50LkdvdmVybmVkQ2hhbm5lbFN0YXRlLkRlc2VyaWFsaXplLkZhaWxlZCwgeyBFcnJvck1lc3NhZ2U6IGUudG9TdHJpbmcoKSB9KTtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIEBTZXJpYWxpemVkTmFtZShcIkNoYW5uZWxUeXBlXCIpXHJcblx0cHJpdmF0ZSBDaGFubmVsVHlwZTogR292ZXJuZWRDaGFubmVsVHlwZTtcclxuXHJcblx0Ly8gQFNlcmlhbGl6ZWROYW1lKFwiQ29vbGRvd25TdGFydFRpbWVVdGNcIilcclxuXHRwcml2YXRlIENvb2xkb3duU3RhcnRUaW1lVXRjOiBEYXRlO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3IodHlwZTogR292ZXJuZWRDaGFubmVsVHlwZSwgY29vbGRvd25TdGFydFRpbWU6IERhdGUpIHtcclxuXHRcdHRoaXMuQ2hhbm5lbFR5cGUgPSB0eXBlO1xyXG5cdFx0dGhpcy5Db29sZG93blN0YXJ0VGltZVV0YyA9IGNvb2xkb3duU3RhcnRUaW1lO1xyXG5cclxuXHRcdGlmICghdGhpcy52YWxpZGF0ZSgpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNvbnN0cnVjdG9yIGFyZ3VtZW50cyBhcmUgbm90IHZhbGlkXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFVdGlscy5pc0VudW1WYWx1ZSh0aGlzLkNoYW5uZWxUeXBlLCBHb3Zlcm5lZENoYW5uZWxUeXBlKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gbWFrZSBpdCBhIGRhdGUgb2JqZWN0IGlmIGl0J3MgYSB2YWxpZCBVVEMgZGF0ZSB0aW1lIHZhbHVlXHJcblx0XHRpZiAoVXRpbHMuaXNVdGNEYXRldGltZVN0cmluZyh0aGlzLkNvb2xkb3duU3RhcnRUaW1lVXRjKSkge1xyXG5cdFx0XHR0aGlzLkNvb2xkb3duU3RhcnRUaW1lVXRjID0gVXRpbHMuc3RyaW5nVG9EYXRlKHRoaXMuQ29vbGRvd25TdGFydFRpbWVVdGMpO1xyXG5cdFx0Ly8gQWxsb3cgbnVsbCBhbmQgYmFkIGNvb2xkb3duU3RhcnRUaW1lXHJcblx0XHR9IGVsc2UgaWYgKFV0aWxzLmlzTk9VKHRoaXMuQ29vbGRvd25TdGFydFRpbWVVdGMpIHx8ICFVdGlscy5pc0RhdGUodGhpcy5Db29sZG93blN0YXJ0VGltZVV0YykpIHtcclxuXHRcdFx0dGhpcy5Db29sZG93blN0YXJ0VGltZVV0YyA9IFV0aWxzLmdldERpc3RhbnRQYXN0KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0VHlwZSgpOiBHb3Zlcm5lZENoYW5uZWxUeXBlIHtcclxuXHRcdHJldHVybiB0aGlzLkNoYW5uZWxUeXBlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENvb2xkb3duU3RhcnRUaW1lKCk6IERhdGUge1xyXG5cdFx0cmV0dXJuIHRoaXMuQ29vbGRvd25TdGFydFRpbWVVdGM7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHb3Zlcm5lZENoYW5uZWxTdGF0ZVByb3ZpZGVyIHtcclxuXHRsb2FkKCk6IEdvdmVybmVkQ2hhbm5lbFN0YXRlW107XHJcblxyXG5cdHNhdmUoY2hhbm5lbHM6IEdvdmVybmVkQ2hhbm5lbFN0YXRlW10pOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR292ZXJuZWRDaGFubmVsU3RhdGVQcm92aWRlckZhY3Rvcnkge1xyXG5cdHB1YmxpYyBzdGF0aWMgbWFrZShmaWxlQmFzZWRTdG9yYWdlOiBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyLFxyXG5cdFx0aG9zdEJhc2VkU3RvcmFnZTogSUZsb29kZ2F0ZVNldHRpbmdTdG9yYWdlQ2FsbGJhY2spOiBJR292ZXJuZWRDaGFubmVsU3RhdGVQcm92aWRlciB7XHJcblx0XHRpZiAoaG9zdEJhc2VkU3RvcmFnZSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IEhvc3RCYXNlZEdvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXIoZmlsZUJhc2VkU3RvcmFnZSwgaG9zdEJhc2VkU3RvcmFnZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG5ldyBGaWxlQmFzZWRHb3Zlcm5lZENoYW5uZWxTdGF0ZVByb3ZpZGVyKGZpbGVCYXNlZFN0b3JhZ2UpO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENsYXNzIHJlcHJlc2VudGluZyB3aGF0IGlzIHN0b3JlZCBpbiB0aGUgZmlsZS5cclxuICovXHJcbmNsYXNzIEZpbGVEYXRhIHtcclxuXHQvLyBAU2VyaWFsaXplZE5hbWUoXCJDaGFubmVsU3RhdGVzXCIpXHJcblx0cHVibGljIENoYW5uZWxTdGF0ZXM6IEdvdmVybmVkQ2hhbm5lbFN0YXRlW107XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBIb3N0QmFzZWRHb3Zlcm5lZENoYW5uZWxTdGF0ZVByb3ZpZGVyIGltcGxlbWVudHMgSUdvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXIge1xyXG5cdHByaXZhdGUgZmlsZUJhc2VkU3RhdGVQcm92aWRlcjogSUdvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXI7XHJcblx0cHJpdmF0ZSBob3N0QmFzZWRTdG9yYWdlOiBJRmxvb2RnYXRlU2V0dGluZ1N0b3JhZ2VDYWxsYmFjaztcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKGZpbGVCYXNlZFN0b3JhZ2U6IElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIsIGhvc3RCYXNlZFN0b3JhZ2U6IElGbG9vZGdhdGVTZXR0aW5nU3RvcmFnZUNhbGxiYWNrKSB7XHJcblx0XHRpZiAoIWhvc3RCYXNlZFN0b3JhZ2UpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaG9zdC1iYXNlZCBzdG9yYWdlIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5ob3N0QmFzZWRTdG9yYWdlID0gaG9zdEJhc2VkU3RvcmFnZTtcclxuXHJcblx0XHQvLyBmaWxlLWJhc2VkIHByb3ZpZGVyIGlzIG9wdGlvbmFsXHJcblx0XHRpZiAoZmlsZUJhc2VkU3RvcmFnZSkge1xyXG5cdFx0XHR0aGlzLmZpbGVCYXNlZFN0YXRlUHJvdmlkZXIgPSBuZXcgRmlsZUJhc2VkR292ZXJuZWRDaGFubmVsU3RhdGVQcm92aWRlcihmaWxlQmFzZWRTdG9yYWdlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBsb2FkKCk6IEdvdmVybmVkQ2hhbm5lbFN0YXRlW10ge1xyXG5cdFx0Y29uc3Qgc3RhdGVzRnJvbUhvc3Q6IEdvdmVybmVkQ2hhbm5lbFN0YXRlW10gPSB0aGlzLmdldFN0YXRlc0Zyb21Ib3N0KCk7XHJcblxyXG5cdFx0bGV0IHN0YXRlc0Zyb21GaWxlOiBHb3Zlcm5lZENoYW5uZWxTdGF0ZVtdO1xyXG5cdFx0aWYgKHRoaXMuZmlsZUJhc2VkU3RhdGVQcm92aWRlcikge1xyXG5cdFx0XHRzdGF0ZXNGcm9tRmlsZSA9IHRoaXMuZmlsZUJhc2VkU3RhdGVQcm92aWRlci5sb2FkKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgU3RhdGVDb2xsZWN0aW9ucyA9IFN0YXRlUHJvdmlkZXJIZWxwZXJzLk1lcmdlQW5kVXBkYXRlR292ZXJuZWRDaGFubmVsU3RhdGVzKHN0YXRlc0Zyb21GaWxlLCBzdGF0ZXNGcm9tSG9zdCk7XHJcblx0XHRyZXR1cm4gU3RhdGVDb2xsZWN0aW9ucy5maW5kKFN0YXRlTGlzdFR5cGUuTWVyZ2VkKTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBzYXZlKHN0YXRlczogR292ZXJuZWRDaGFubmVsU3RhdGVbXSk6IHZvaWQge1xyXG5cdFx0aWYgKCFzdGF0ZXMpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHN0YXRlc0Zyb21Ib3N0OiBHb3Zlcm5lZENoYW5uZWxTdGF0ZVtdID0gdGhpcy5nZXRTdGF0ZXNGcm9tSG9zdCgpO1xyXG5cdFx0Y29uc3QgU3RhdGVDb2xsZWN0aW9ucyA9IFN0YXRlUHJvdmlkZXJIZWxwZXJzLk1lcmdlQW5kVXBkYXRlR292ZXJuZWRDaGFubmVsU3RhdGVzKHN0YXRlcywgc3RhdGVzRnJvbUhvc3QpO1xyXG5cdFx0Y29uc3QgdG9CZVVwZGF0ZWRTdGF0ZXM6IEdvdmVybmVkQ2hhbm5lbFN0YXRlW10gPSBTdGF0ZUNvbGxlY3Rpb25zLmZpbmQoU3RhdGVMaXN0VHlwZS5Ub0JlVXBkYXRlZCk7XHJcblx0XHRjb25zdCBtZXJnZWRTdGF0ZXM6IEdvdmVybmVkQ2hhbm5lbFN0YXRlW10gPSBTdGF0ZUNvbGxlY3Rpb25zLmZpbmQoU3RhdGVMaXN0VHlwZS5NZXJnZWQpO1xyXG5cclxuXHRcdC8vIHdyaXRlIGRlbHRhX2RhdGEgdG8gSG9zdFxyXG5cdFx0aWYgKHRvQmVVcGRhdGVkU3RhdGVzKSB7XHJcblx0XHRcdHRvQmVVcGRhdGVkU3RhdGVzLmZvckVhY2goKHN0YXRlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc3RhdGVWYWx1ZTogc3RyaW5nID0gU3RhdGVQcm92aWRlckhlbHBlcnMubWFrZVNldHRpbmdJdGVtVmFsdWUoSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcclxuXHRcdFx0XHR0aGlzLmhvc3RCYXNlZFN0b3JhZ2UudXBzZXJ0U2V0dGluZ0l0ZW0oRmlsZVR5cGVbRmlsZVR5cGUuR292ZXJuZWRDaGFubmVsU3RhdGVzXSwgU3RyaW5nKHN0YXRlLmdldFR5cGUoKSksIHN0YXRlVmFsdWUpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBXcml0ZSBtZXJnZWQgZGF0YSB0byBGaWxlXHJcblx0XHRpZiAodGhpcy5maWxlQmFzZWRTdGF0ZVByb3ZpZGVyKSB7XHJcblx0XHRcdHRoaXMuZmlsZUJhc2VkU3RhdGVQcm92aWRlci5zYXZlKG1lcmdlZFN0YXRlcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFN0YXRlc0Zyb21Ib3N0KCk6IEdvdmVybmVkQ2hhbm5lbFN0YXRlW10ge1xyXG5cdFx0Y29uc3Qgc3RhdGVzOiBHb3Zlcm5lZENoYW5uZWxTdGF0ZVtdID0gW107XHJcblx0XHRjb25zdCBzZXR0aW5nczogSUZsb29kZ2F0ZVNldHRpbmcgPSB0aGlzLmhvc3RCYXNlZFN0b3JhZ2UucmVhZFNldHRpbmdMaXN0KEZpbGVUeXBlW0ZpbGVUeXBlLkdvdmVybmVkQ2hhbm5lbFN0YXRlc10pO1xyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHNldHRpbmdzKSB7XHJcblx0XHRcdGlmICghc2V0dGluZ3MuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCB2YWx1ZSA9IHNldHRpbmdzW2tleV07XHJcblx0XHRcdGNvbnN0IGRhdGFTdHJpbmc6IHN0cmluZyA9IFN0YXRlUHJvdmlkZXJIZWxwZXJzLmV4dHJhY3RTZXR0aW5nSXRlbVZhbHVlU3ViU3RyaW5nKHZhbHVlKTtcclxuXHJcblx0XHRcdGxldCBpdGVtT2JqZWN0OiBhbnkgPSB7fTtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRpdGVtT2JqZWN0ID0gSlNPTi5wYXJzZShkYXRhU3RyaW5nKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgbmV3U3RhdGU6IEdvdmVybmVkQ2hhbm5lbFN0YXRlID0gR292ZXJuZWRDaGFubmVsU3RhdGUuZGVzZXJpYWxpemUoaXRlbU9iamVjdCk7XHJcblx0XHRcdFx0aWYgKG5ld1N0YXRlKSB7XHJcblx0XHRcdFx0XHRzdGF0ZXMucHVzaChuZXdTdGF0ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FdmVudChcclxuXHRcdFx0XHRcdFRlbGVtZXRyeUV2ZW50Lkhvc3RCYXNlZEdvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXIuR2V0U3RhdGVzRnJvbUhvc3QuRmFpbGVkLFxyXG5cdFx0XHRcdFx0eyBFcnJvck1lc3NhZ2U6IFwiSnNvbiBwYXJzaW5nL2Rlc2VyaWFsaXppbmcgZmFpbGVkLiBcIiArIGUudG9TdHJpbmcoKSArIFwiLiAgSW5wdXQ6XCIgKyBkYXRhU3RyaW5nIH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHN0YXRlcztcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlQmFzZWRHb3Zlcm5lZENoYW5uZWxTdGF0ZVByb3ZpZGVyIGltcGxlbWVudHMgSUdvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXIge1xyXG5cdHByaXZhdGUgc3RvcmFnZTogSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlcjtcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKHN0b3JhZ2U6IElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIpIHtcclxuXHRcdGlmICghc3RvcmFnZSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdG9yYWdlIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zdG9yYWdlID0gc3RvcmFnZTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBsb2FkKCk6IEdvdmVybmVkQ2hhbm5lbFN0YXRlW10ge1xyXG5cdFx0Ly8gTG9hZCBjaGFubmVsIHN0YXRlIGZyb20gZmlsZSB1c2luZyBfc3RvcmFnZVByb3ZpZGVyIChnZXQgYmFjayBzdHJpbmcpXHJcblx0XHRjb25zdCByZWFkU3RyaW5nOiBzdHJpbmcgPSB0aGlzLnN0b3JhZ2UucmVhZChGaWxlVHlwZS5Hb3Zlcm5lZENoYW5uZWxTdGF0ZXMpO1xyXG5cdFx0aWYgKCFyZWFkU3RyaW5nKSB7XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZmlsZURhdGE6IEZpbGVEYXRhO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0ZmlsZURhdGEgPSBKU09OLnBhcnNlKHJlYWRTdHJpbmcpO1xyXG5cclxuXHRcdFx0Y29uc3QgcmVzdWx0OiBHb3Zlcm5lZENoYW5uZWxTdGF0ZVtdID0gW107XHJcblxyXG5cdFx0XHRpZiAoZmlsZURhdGEgJiYgZmlsZURhdGEuQ2hhbm5lbFN0YXRlcykge1xyXG5cdFx0XHRcdGZpbGVEYXRhLkNoYW5uZWxTdGF0ZXMuZm9yRWFjaCgoc3RhdGUpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IG5ld1N0YXRlOiBHb3Zlcm5lZENoYW5uZWxTdGF0ZSA9IEdvdmVybmVkQ2hhbm5lbFN0YXRlLmRlc2VyaWFsaXplKHN0YXRlKTtcclxuXHJcblx0XHRcdFx0XHRpZiAobmV3U3RhdGUpIHtcclxuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2gobmV3U3RhdGUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0V2ZW50KFxyXG5cdFx0XHRcdFRlbGVtZXRyeUV2ZW50LkZpbGVCYXNlZEdvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXIuTG9hZC5GYWlsZWQsXHJcblx0XHRcdFx0eyBFcnJvck1lc3NhZ2U6IFwiSnNvbiBwYXJzaW5nL2Rlc2VyaWFsaXppbmcgZmFpbGVkLiBcIiArIGUudG9TdHJpbmcoKSArIFwiLiAgSW5wdXQ6XCIgKyByZWFkU3RyaW5nIH0pO1xyXG5cdFx0XHRyZXR1cm4gW107XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgc2F2ZShzdGF0ZXM6IEdvdmVybmVkQ2hhbm5lbFN0YXRlW10pOiB2b2lkIHtcclxuXHRcdGlmICghc3RhdGVzKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBmaWxlRGF0YSA9IG5ldyBGaWxlRGF0YSgpO1xyXG5cdFx0ZmlsZURhdGEuQ2hhbm5lbFN0YXRlcyA9IHN0YXRlcztcclxuXHRcdGNvbnN0IHdyaXRlU3RyaW5nOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShmaWxlRGF0YSk7XHJcblxyXG5cdFx0dGhpcy5zdG9yYWdlLndyaXRlKEZpbGVUeXBlLkdvdmVybmVkQ2hhbm5lbFN0YXRlcywgd3JpdGVTdHJpbmcpO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/GovernedChannelStateProvider.js\n')},"../FloodgateCore/dist/src/Governor.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.Governor = exports.DEFAULT_TEACHING_MESSAGE_COOLDOWN = void 0;\nvar GovernedChannel_1 = __webpack_require__(/*! ./GovernedChannel */ "../FloodgateCore/dist/src/GovernedChannel.js");\nvar GovernedChannelStateProvider_1 = __webpack_require__(/*! ./GovernedChannelStateProvider */ "../FloodgateCore/dist/src/GovernedChannelStateProvider.js");\nvar Utils = __webpack_require__(/*! ./Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar isNOU = Utils.isNOU;\nexports.DEFAULT_TEACHING_MESSAGE_COOLDOWN = 15;\nvar DefaultChannelData = /** @class */ (function () {\n    function DefaultChannelData(name, cooldownSeconds) {\n        this.name = name;\n        this.cooldownSeconds = cooldownSeconds;\n    }\n    return DefaultChannelData;\n}());\nvar Governor = /** @class */ (function () {\n    function Governor(channelStateProvider) {\n        this.channels = [];\n        if (!channelStateProvider) {\n            throw new Error("channelStateProvider must not be null");\n        }\n        this.channelStateProvider = channelStateProvider;\n        this.loadChannels();\n    }\n    Governor.GetChannelCoolDown = function (channelType) {\n        var channelData = Governor.defaultChannelData[channelType];\n        return channelData ? channelData.cooldownSeconds : 0;\n    };\n    Governor.SetDefaultChannelCoolDown = function (channelType, cooldownSeconds) {\n        var channelData = Governor.defaultChannelData[channelType];\n        if (channelData) {\n            channelData.cooldownSeconds = cooldownSeconds;\n        }\n    };\n    // @Override\n    Governor.prototype.refreshChannelData = function () {\n        this.loadChannels();\n    };\n    // @Override\n    Governor.prototype.getAvailableChannelData = function () {\n        var channelData = [];\n        for (var key in this.channels) {\n            if (this.channels.hasOwnProperty(key)) {\n                var channel = this.channels[key];\n                if (channel.isOpen()) {\n                    channelData.push(channel);\n                }\n            }\n        }\n        return channelData;\n    };\n    // @Override\n    Governor.prototype.isChannelOpen = function (type) {\n        if (isNOU(type)) {\n            throw new Error("type must not be null");\n        }\n        return this.channels[type].isOpen();\n    };\n    // @Override\n    Governor.prototype.startChannelCooldown = function (type, date) {\n        if (isNOU(type)) {\n            throw new Error("type must not be null");\n        }\n        date = date ? date : new Date();\n        // Start the cool down\n        this.channels[type].setCooldownStartTime(date);\n        // Save the new channel state for future sessions\n        this.saveChannelStates();\n    };\n    Governor.prototype.saveChannelStates = function () {\n        // Build up the list of channel states\n        var channelStates = [];\n        for (var key in this.channels) {\n            if (this.channels.hasOwnProperty(key)) {\n                var channel = this.channels[key];\n                var channelState = new GovernedChannelStateProvider_1.GovernedChannelState(channel.getType(), channel.getCooldownStartTime());\n                channelStates.push(channelState);\n            }\n        }\n        this.channelStateProvider.save(channelStates);\n    };\n    Governor.prototype.loadChannels = function () {\n        // Load up state from previous sessions\n        this.loadChannelStatesFromProvider();\n        // For any missing channels, init them from scratch\n        // There\'s no straightforward way to iterate enums, we need to iterate through the enum array\n        //    filtering out just the numeric enum values (excluding enum names).\n        for (var item in GovernedChannel_1.GovernedChannelType) {\n            if (GovernedChannel_1.GovernedChannelType.hasOwnProperty(item)) {\n                var key = Number(item);\n                // skip if key is not numeric enum value, or if already exists\n                if (isNaN(key) || this.channels[key]) {\n                    continue;\n                }\n                var defaultData = Governor.defaultChannelData[key];\n                var newChannel = new GovernedChannel_1.GovernedChannel(key, defaultData.name, defaultData.cooldownSeconds, null);\n                this.channels[key] = newChannel;\n            }\n        }\n    };\n    Governor.prototype.loadChannelStatesFromProvider = function () {\n        this.channels = [];\n        var channelStates = this.channelStateProvider.load();\n        for (var key in channelStates) {\n            if (channelStates.hasOwnProperty(key)) {\n                var channelState = channelStates[key];\n                var type = channelState.getType();\n                var defaultData = Governor.defaultChannelData[type];\n                var newChannel = new GovernedChannel_1.GovernedChannel(type, defaultData.name, defaultData.cooldownSeconds, channelState.getCooldownStartTime());\n                this.channels[newChannel.getType()] = newChannel;\n            }\n        }\n    };\n    Governor.minute = 60;\n    Governor.hour = 60 * Governor.minute;\n    Governor.day = 24 * Governor.hour;\n    // Array of default values for each channel type. Indexed by the GovernedChannelType enum name.\n    Governor.defaultChannelData = [\n        new DefaultChannelData(GovernedChannel_1.GovernedChannelType[GovernedChannel_1.GovernedChannelType.Standard], 14 * Governor.day),\n        new DefaultChannelData(GovernedChannel_1.GovernedChannelType[GovernedChannel_1.GovernedChannelType.Urgent], 0),\n        new DefaultChannelData(GovernedChannel_1.GovernedChannelType[GovernedChannel_1.GovernedChannelType.Banner], 15 * Governor.day),\n        new DefaultChannelData(GovernedChannel_1.GovernedChannelType[GovernedChannel_1.GovernedChannelType.TeachingMessage], exports.DEFAULT_TEACHING_MESSAGE_COOLDOWN * Governor.day),\n    ];\n    return Governor;\n}());\nexports.Governor = Governor;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0dvdmVybm9yLnRzPzI5YzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUhBQStGO0FBQy9GLDRKQUFxRztBQUNyRyxxRkFBaUM7QUFFekIsU0FBSyxHQUFLLEtBQUssTUFBVixDQUFXO0FBRVgseUNBQWlDLEdBQUcsRUFBRSxDQUFDO0FBY3BEO0lBSUMsNEJBQW1CLElBQVksRUFBRSxlQUF1QjtRQUN2RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN4QyxDQUFDO0lBQ0YseUJBQUM7QUFBRCxDQUFDO0FBRUQ7SUE0QkMsa0JBQW1CLG9CQUFtRDtRQUY5RCxhQUFRLEdBQXNCLEVBQUUsQ0FBQztRQUd4QyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1NBQ3pEO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO1FBQ2pELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBbENhLDJCQUFrQixHQUFoQyxVQUFpQyxXQUFnQztRQUNoRSxJQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0QsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRWEsa0NBQXlCLEdBQXZDLFVBQXdDLFdBQWdDLEVBQUUsZUFBdUI7UUFDaEcsSUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdELElBQUksV0FBVyxFQUFFO1lBQ2hCLFdBQVcsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1NBQzlDO0lBQ0YsQ0FBQztJQTBCRCxZQUFZO0lBQ0wscUNBQWtCLEdBQXpC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QUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDNUYsSUFBSSxrQkFBa0IsQ0FBQyxxQ0FBbUIsQ0FBQyxxQ0FBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUUsSUFBSSxrQkFBa0IsQ0FBQyxxQ0FBbUIsQ0FBQyxxQ0FBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUMxRixJQUFJLGtCQUFrQixDQUFDLHFDQUFtQixDQUFDLHFDQUFtQixDQUFDLGVBQWUsQ0FBQyxFQUFFLHlDQUFpQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7S0FDbEksQ0FBQztJQXVISCxlQUFDO0NBQUE7QUE5SVksNEJBQVEiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9Hb3Zlcm5vci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdvdmVybmVkQ2hhbm5lbCwgR292ZXJuZWRDaGFubmVsVHlwZSwgSUdvdmVybmVkQ2hhbm5lbERhdGEgfSBmcm9tIFwiLi9Hb3Zlcm5lZENoYW5uZWxcIjtcclxuaW1wb3J0IHsgR292ZXJuZWRDaGFubmVsU3RhdGUsIElHb3Zlcm5lZENoYW5uZWxTdGF0ZVByb3ZpZGVyIH0gZnJvbSBcIi4vR292ZXJuZWRDaGFubmVsU3RhdGVQcm92aWRlclwiO1xyXG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tIFwiLi9VdGlsc1wiO1xyXG5cclxuY29uc3QgeyBpc05PVSB9ID0gVXRpbHM7XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9URUFDSElOR19NRVNTQUdFX0NPT0xET1dOID0gMTU7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHb3Zlcm5vciB7XHJcblx0Z2V0QXZhaWxhYmxlQ2hhbm5lbERhdGEoKTogSUdvdmVybmVkQ2hhbm5lbERhdGFbXTtcclxuXHJcblx0aXNDaGFubmVsT3Blbih0eXBlOiBHb3Zlcm5lZENoYW5uZWxUeXBlKTogYm9vbGVhbjtcclxuXHJcblx0c3RhcnRDaGFubmVsQ29vbGRvd24odHlwZTogR292ZXJuZWRDaGFubmVsVHlwZSwgZGF0ZT86IERhdGUpOiB2b2lkO1xyXG5cclxuXHRyZWZyZXNoQ2hhbm5lbERhdGEoKTogdm9pZDtcclxuXHJcblx0c2F2ZUNoYW5uZWxTdGF0ZXMoKTogdm9pZDtcclxufVxyXG5cclxuY2xhc3MgRGVmYXVsdENoYW5uZWxEYXRhIHtcclxuXHRwdWJsaWMgY29vbGRvd25TZWNvbmRzOiBudW1iZXI7XHJcblx0cHVibGljIG5hbWU6IHN0cmluZztcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgY29vbGRvd25TZWNvbmRzOiBudW1iZXIpIHtcclxuXHRcdHRoaXMubmFtZSA9IG5hbWU7XHJcblx0XHR0aGlzLmNvb2xkb3duU2Vjb25kcyA9IGNvb2xkb3duU2Vjb25kcztcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBHb3Zlcm5vciBpbXBsZW1lbnRzIElHb3Zlcm5vciB7XHJcblx0cHVibGljIHN0YXRpYyBHZXRDaGFubmVsQ29vbERvd24oY2hhbm5lbFR5cGU6IEdvdmVybmVkQ2hhbm5lbFR5cGUpIHtcclxuXHRcdGNvbnN0IGNoYW5uZWxEYXRhID0gR292ZXJub3IuZGVmYXVsdENoYW5uZWxEYXRhW2NoYW5uZWxUeXBlXTtcclxuXHRcdHJldHVybiBjaGFubmVsRGF0YSA/IGNoYW5uZWxEYXRhLmNvb2xkb3duU2Vjb25kcyA6IDA7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc3RhdGljIFNldERlZmF1bHRDaGFubmVsQ29vbERvd24oY2hhbm5lbFR5cGU6IEdvdmVybmVkQ2hhbm5lbFR5cGUsIGNvb2xkb3duU2Vjb25kczogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBjaGFubmVsRGF0YSA9IEdvdmVybm9yLmRlZmF1bHRDaGFubmVsRGF0YVtjaGFubmVsVHlwZV07XHJcblx0XHRpZiAoY2hhbm5lbERhdGEpIHtcclxuXHRcdFx0Y2hhbm5lbERhdGEuY29vbGRvd25TZWNvbmRzID0gY29vbGRvd25TZWNvbmRzO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgbWludXRlOiBudW1iZXIgPSA2MDtcclxuXHRwcml2YXRlIHN0YXRpYyBob3VyOiBudW1iZXIgPSA2MCAqIEdvdmVybm9yLm1pbnV0ZTtcclxuXHRwcml2YXRlIHN0YXRpYyBkYXk6IG51bWJlciA9IDI0ICogR292ZXJub3IuaG91cjtcclxuXHJcblx0Ly8gQXJyYXkgb2YgZGVmYXVsdCB2YWx1ZXMgZm9yIGVhY2ggY2hhbm5lbCB0eXBlLiBJbmRleGVkIGJ5IHRoZSBHb3Zlcm5lZENoYW5uZWxUeXBlIGVudW0gbmFtZS5cclxuXHRwcml2YXRlIHN0YXRpYyBkZWZhdWx0Q2hhbm5lbERhdGE6IERlZmF1bHRDaGFubmVsRGF0YVtdID0gW1xyXG5cdFx0bmV3IERlZmF1bHRDaGFubmVsRGF0YShHb3Zlcm5lZENoYW5uZWxUeXBlW0dvdmVybmVkQ2hhbm5lbFR5cGUuU3RhbmRhcmRdLCAxNCAqIEdvdmVybm9yLmRheSksXHJcblx0XHRuZXcgRGVmYXVsdENoYW5uZWxEYXRhKEdvdmVybmVkQ2hhbm5lbFR5cGVbR292ZXJuZWRDaGFubmVsVHlwZS5VcmdlbnRdLCAwKSxcclxuXHRcdG5ldyBEZWZhdWx0Q2hhbm5lbERhdGEoR292ZXJuZWRDaGFubmVsVHlwZVtHb3Zlcm5lZENoYW5uZWxUeXBlLkJhbm5lcl0sIDE1ICogR292ZXJub3IuZGF5KSxcclxuXHRcdG5ldyBEZWZhdWx0Q2hhbm5lbERhdGEoR292ZXJuZWRDaGFubmVsVHlwZVtHb3Zlcm5lZENoYW5uZWxUeXBlLlRlYWNoaW5nTWVzc2FnZV0sIERFRkFVTFRfVEVBQ0hJTkdfTUVTU0FHRV9DT09MRE9XTiAqIEdvdmVybm9yLmRheSksXHJcblx0XTtcclxuXHJcblx0cHJpdmF0ZSBjaGFubmVsU3RhdGVQcm92aWRlcjogSUdvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXI7XHJcblx0cHJpdmF0ZSBjaGFubmVsczogR292ZXJuZWRDaGFubmVsW10gPSBbXTtcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKGNoYW5uZWxTdGF0ZVByb3ZpZGVyOiBJR292ZXJuZWRDaGFubmVsU3RhdGVQcm92aWRlcikge1xyXG5cdFx0aWYgKCFjaGFubmVsU3RhdGVQcm92aWRlcikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjaGFubmVsU3RhdGVQcm92aWRlciBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuY2hhbm5lbFN0YXRlUHJvdmlkZXIgPSBjaGFubmVsU3RhdGVQcm92aWRlcjtcclxuXHRcdHRoaXMubG9hZENoYW5uZWxzKCk7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgcmVmcmVzaENoYW5uZWxEYXRhKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5sb2FkQ2hhbm5lbHMoKTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRBdmFpbGFibGVDaGFubmVsRGF0YSgpOiBJR292ZXJuZWRDaGFubmVsRGF0YVtdIHtcclxuXHRcdGNvbnN0IGNoYW5uZWxEYXRhOiBJR292ZXJuZWRDaGFubmVsRGF0YVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdGhpcy5jaGFubmVscykge1xyXG5cdFx0XHRpZiAodGhpcy5jaGFubmVscy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0Y29uc3QgY2hhbm5lbDogR292ZXJuZWRDaGFubmVsID0gdGhpcy5jaGFubmVsc1trZXldO1xyXG5cclxuXHRcdFx0XHRpZiAoY2hhbm5lbC5pc09wZW4oKSkge1xyXG5cdFx0XHRcdFx0Y2hhbm5lbERhdGEucHVzaChjaGFubmVsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY2hhbm5lbERhdGE7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgaXNDaGFubmVsT3Blbih0eXBlOiBHb3Zlcm5lZENoYW5uZWxUeXBlKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoaXNOT1UodHlwZSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmNoYW5uZWxzW3R5cGVdLmlzT3BlbigpO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIHN0YXJ0Q2hhbm5lbENvb2xkb3duKHR5cGU6IEdvdmVybmVkQ2hhbm5lbFR5cGUsIGRhdGU/OiBEYXRlKTogdm9pZCB7XHJcblx0XHRpZiAoaXNOT1UodHlwZSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRhdGUgPSBkYXRlID8gZGF0ZSA6IG5ldyBEYXRlKCk7XHJcblxyXG5cdFx0Ly8gU3RhcnQgdGhlIGNvb2wgZG93blxyXG5cdFx0dGhpcy5jaGFubmVsc1t0eXBlXS5zZXRDb29sZG93blN0YXJ0VGltZShkYXRlKTtcclxuXHJcblx0XHQvLyBTYXZlIHRoZSBuZXcgY2hhbm5lbCBzdGF0ZSBmb3IgZnV0dXJlIHNlc3Npb25zXHJcblx0XHR0aGlzLnNhdmVDaGFubmVsU3RhdGVzKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc2F2ZUNoYW5uZWxTdGF0ZXMoKTogdm9pZCB7XHJcblx0XHQvLyBCdWlsZCB1cCB0aGUgbGlzdCBvZiBjaGFubmVsIHN0YXRlc1xyXG5cdFx0Y29uc3QgY2hhbm5lbFN0YXRlczogR292ZXJuZWRDaGFubmVsU3RhdGVbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMuY2hhbm5lbHMpIHtcclxuXHRcdFx0aWYgKHRoaXMuY2hhbm5lbHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdGNvbnN0IGNoYW5uZWw6IEdvdmVybmVkQ2hhbm5lbCA9IHRoaXMuY2hhbm5lbHNba2V5XTtcclxuXHRcdFx0XHRjb25zdCBjaGFubmVsU3RhdGU6IEdvdmVybmVkQ2hhbm5lbFN0YXRlID1cclxuXHRcdFx0XHRcdG5ldyBHb3Zlcm5lZENoYW5uZWxTdGF0ZShjaGFubmVsLmdldFR5cGUoKSwgY2hhbm5lbC5nZXRDb29sZG93blN0YXJ0VGltZSgpKTtcclxuXHJcblx0XHRcdFx0Y2hhbm5lbFN0YXRlcy5wdXNoKGNoYW5uZWxTdGF0ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmNoYW5uZWxTdGF0ZVByb3ZpZGVyLnNhdmUoY2hhbm5lbFN0YXRlcyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGxvYWRDaGFubmVscygpOiB2b2lkIHtcclxuXHRcdC8vIExvYWQgdXAgc3RhdGUgZnJvbSBwcmV2aW91cyBzZXNzaW9uc1xyXG5cdFx0dGhpcy5sb2FkQ2hhbm5lbFN0YXRlc0Zyb21Qcm92aWRlcigpO1xyXG5cclxuXHRcdC8vIEZvciBhbnkgbWlzc2luZyBjaGFubmVscywgaW5pdCB0aGVtIGZyb20gc2NyYXRjaFxyXG5cdFx0Ly8gVGhlcmUncyBubyBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGl0ZXJhdGUgZW51bXMsIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBlbnVtIGFycmF5XHJcblx0XHQvLyAgICBmaWx0ZXJpbmcgb3V0IGp1c3QgdGhlIG51bWVyaWMgZW51bSB2YWx1ZXMgKGV4Y2x1ZGluZyBlbnVtIG5hbWVzKS5cclxuXHRcdGZvciAoY29uc3QgaXRlbSBpbiBHb3Zlcm5lZENoYW5uZWxUeXBlKSB7XHJcblx0XHRcdGlmIChHb3Zlcm5lZENoYW5uZWxUeXBlLmhhc093blByb3BlcnR5KGl0ZW0pKSB7XHJcblx0XHRcdFx0Y29uc3Qga2V5OiBudW1iZXIgPSBOdW1iZXIoaXRlbSk7XHJcblxyXG5cdFx0XHRcdC8vIHNraXAgaWYga2V5IGlzIG5vdCBudW1lcmljIGVudW0gdmFsdWUsIG9yIGlmIGFscmVhZHkgZXhpc3RzXHJcblx0XHRcdFx0aWYgKGlzTmFOKGtleSkgfHwgdGhpcy5jaGFubmVsc1trZXldKSB7XHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnN0IGRlZmF1bHREYXRhOiBEZWZhdWx0Q2hhbm5lbERhdGEgPSBHb3Zlcm5vci5kZWZhdWx0Q2hhbm5lbERhdGFba2V5XTtcclxuXHRcdFx0XHRjb25zdCBuZXdDaGFubmVsOiBHb3Zlcm5lZENoYW5uZWwgPVxyXG5cdFx0XHRcdFx0bmV3IEdvdmVybmVkQ2hhbm5lbChrZXksIGRlZmF1bHREYXRhLm5hbWUsIGRlZmF1bHREYXRhLmNvb2xkb3duU2Vjb25kcywgbnVsbCk7XHJcblx0XHRcdFx0dGhpcy5jaGFubmVsc1trZXldID0gbmV3Q2hhbm5lbDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBsb2FkQ2hhbm5lbFN0YXRlc0Zyb21Qcm92aWRlcigpOiB2b2lkIHtcclxuXHRcdHRoaXMuY2hhbm5lbHMgPSBbXTtcclxuXHJcblx0XHRjb25zdCBjaGFubmVsU3RhdGVzOiBHb3Zlcm5lZENoYW5uZWxTdGF0ZVtdID0gdGhpcy5jaGFubmVsU3RhdGVQcm92aWRlci5sb2FkKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gY2hhbm5lbFN0YXRlcykge1xyXG5cdFx0XHRpZiAoY2hhbm5lbFN0YXRlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0Y29uc3QgY2hhbm5lbFN0YXRlOiBHb3Zlcm5lZENoYW5uZWxTdGF0ZSA9IGNoYW5uZWxTdGF0ZXNba2V5XTtcclxuXHJcblx0XHRcdFx0Y29uc3QgdHlwZTogR292ZXJuZWRDaGFubmVsVHlwZSA9IGNoYW5uZWxTdGF0ZS5nZXRUeXBlKCk7XHJcblx0XHRcdFx0Y29uc3QgZGVmYXVsdERhdGE6IERlZmF1bHRDaGFubmVsRGF0YSA9IEdvdmVybm9yLmRlZmF1bHRDaGFubmVsRGF0YVt0eXBlXTtcclxuXHRcdFx0XHRjb25zdCBuZXdDaGFubmVsOiBHb3Zlcm5lZENoYW5uZWwgPVxyXG5cdFx0XHRcdFx0bmV3IEdvdmVybmVkQ2hhbm5lbCh0eXBlLCBkZWZhdWx0RGF0YS5uYW1lLCBkZWZhdWx0RGF0YS5jb29sZG93blNlY29uZHMsIGNoYW5uZWxTdGF0ZS5nZXRDb29sZG93blN0YXJ0VGltZSgpKTtcclxuXHJcblx0XHRcdFx0dGhpcy5jaGFubmVsc1tuZXdDaGFubmVsLmdldFR5cGUoKV0gPSBuZXdDaGFubmVsO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Governor.js\n')},"../FloodgateCore/dist/src/ISurveyInfo.js":function(){"use strict";eval('\nvar ISurveyInfo;\n(function (ISurveyInfo) {\n    var BusinessLevel;\n    (function (BusinessLevel) {\n        BusinessLevel[BusinessLevel["None"] = 0] = "None";\n        BusinessLevel[BusinessLevel["Critical"] = 1] = "Critical";\n    })(BusinessLevel = ISurveyInfo.BusinessLevel || (ISurveyInfo.BusinessLevel = {}));\n    ISurveyInfo.DOM_TYPE_TAGNAME = "Type";\n    ISurveyInfo.DOM_TYPE_VALUE = "Survey";\n    ISurveyInfo.DOM_ID_TAGNAME = "SurveyID";\n    ISurveyInfo.JSON_SURVEY_KEYNAME = "survey";\n    ISurveyInfo.JSON_ID_KEYNAME = "surveyId";\n})(ISurveyInfo || (ISurveyInfo = {}));\nmodule.exports = ISurveyInfo;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0lTdXJ2ZXlJbmZvLnRzP2ZmYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQXlHQSxJQUFPLFdBQVcsQ0F5QmpCO0FBekJELFdBQU8sV0FBVztJQVVqQixJQUFZLGFBR1g7SUFIRCxXQUFZLGFBQWE7UUFDeEIsaURBQVE7UUFDUix5REFBUTtJQUNULENBQUMsRUFIVyxhQUFhLEdBQWIseUJBQWEsS0FBYix5QkFBYSxRQUd4QjtJQU9ZLDRCQUFnQixHQUFHLE1BQU0sQ0FBQztJQUMxQiwwQkFBYyxHQUFHLFFBQVEsQ0FBQztJQUMxQiwwQkFBYyxHQUFHLFVBQVUsQ0FBQztJQUM1QiwrQkFBbUIsR0FBRyxRQUFRLENBQUM7SUFDL0IsMkJBQWUsR0FBRyxVQUFVLENBQUM7QUFDM0MsQ0FBQyxFQXpCTSxXQUFXLEtBQVgsV0FBVyxRQXlCakI7QUFFRCxpQkFBUyxXQUFXLENBQUMiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9JU3VydmV5SW5mby5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElTdXJ2ZXlEb21Xcml0ZXIgfSBmcm9tIFwiLi9BcGkvSVN1cnZleURvbVdyaXRlclwiO1xyXG5pbXBvcnQgeyBJU3VydmV5SnNvbldyaXRlciB9IGZyb20gXCIuL0FwaS9JU3VydmV5SnNvbldyaXRlclwiO1xyXG5pbXBvcnQgeyBHb3Zlcm5lZENoYW5uZWxUeXBlIH0gZnJvbSBcIi4vR292ZXJuZWRDaGFubmVsXCI7XHJcbmltcG9ydCAqIGFzIElTdXJ2ZXlFdmVudCBmcm9tIFwiLi9JU3VydmV5RXZlbnRcIjtcclxuaW1wb3J0IHsgSVN1cnZleU1ldGFkYXRhIH0gZnJvbSBcIi4vSVN1cnZleU1ldGFkYXRhXCI7XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBiYXNpY3Mgb2YgYSBTdXJ2ZXlcclxuICovXHJcbmludGVyZmFjZSBJU3VydmV5SW5mbyBleHRlbmRzIElTdXJ2ZXlEb21Xcml0ZXIsIElTdXJ2ZXlKc29uV3JpdGVyIHtcclxuXHQvKipcclxuXHQgKiBBIGdsb2JhbGx5IHVuaXF1ZSwgYnV0IG90aGVyd2lzZSBvcGFxdWUsIGlkZW50aXR5IGZvciB0aGlzIHBhcnRpY3VsYXIgc3VydmV5XHJcblx0ICovXHJcblx0Z2V0SWQoKTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIGdsb2JhbGx5IHVuaXF1ZSwgYnV0IG90aGVyd2lzZSBvcGFxdWUsIGlkZW50aXR5IGZvciB0aGlzIHBhcnRpY3VsYXIgc3VydmV5IG9uIHRoZSBPQ1YgYmFja2VuZFxyXG5cdCAqIE1heSBiZSB0aGUgc2FtZSwgb3IgZGlmZmVyZW50IHRoYW4gZ2V0SWRcclxuXHQgKi9cclxuXHRnZXRCYWNrRW5kSWQoKTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgZ292ZXJlbmQgY2hhbm5lbCB0aGF0IHRoaXMgc3VydmV5IHdpbGwgYmUgZGVsaXZlcmVkL2ZpbHRlcmVkIHRocm91Z2hcclxuXHQgKi9cclxuXHRnZXRHb3Zlcm5lZENoYW5uZWxUeXBlKCk6IEdvdmVybmVkQ2hhbm5lbFR5cGU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSByYXcgc3RyaW5nIHByb3ZpZGVkIGFzIHRoZSBzdXJ2ZXkncyBzdGFydCBkYXRlLCB3aXRoIG5vIGVycm9yIGNoZWNraW5nXHJcblx0ICovXHJcblx0Z2V0UmF3U3RhcnRUaW1lVXRjKCk6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIHN0YXJ0IHRpbWUsIGluIFVUQywgb2YgdGhpcyBTdXJ2ZXkuICBCZWZvcmUgdGhlIGNsaWVudCBoYXMgcGFzc2VkIHRoaXMgZGF0ZVxyXG5cdCAqIHRoZSBzdXJ2ZXkgd2lsbCB3b24ndCBiZSBsb2FkZWQgaW50byB0aGUgc3VydmV5IGFjdGl2aXR5IGxpc3RlbmVyLlxyXG5cdCAqIElmIG5vIHN0YXJ0IGRhdGUgaXMgZ2l2ZW4sIHJldHVybnMgZGlzdGFudFBhc3QuXHJcblx0ICogSWYgYmFkIHN0YXJ0IGRhdGUgZ2l2ZW4sIHJldHVybnMgZGlzdGFudEZ1dHVyZVxyXG5cdCAqIE90aGVyd2lzZSwgcmV0dXJucyBkYXRlXHJcblx0ICovXHJcblx0Z2V0U3RhcnRUaW1lVXRjKCk6IERhdGU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBleHBpcmF0aW9uIHRpbWUsIGluIFVUQywgb2YgdGhpcyBTdXJ2ZXkuIE9uY2UgdGhlIGNsaWVudCBoYXMgcGFzc2VkIHRoaXMgZGF0ZSwgaXQgc2hvdWxkIGNsZWFuIGFueVxyXG5cdCAqIGNhY2hlZCBkYXRhLCBhbmQgc2hvdWxkIHJlamVjdCBhbnkgaW5jb21pbmcgc3VydmV5cyB0aGF0IGhhdmUgb3RoZXJ3aXNlIGV4cGlyZWQgYnV0IGFyZSBzdGlsbCBhY3RpdmVcclxuXHQgKiBpbiB0aGUgZmxpZ2h0aW5nIHN5c3RlbVxyXG5cdCAqIElmIG5vL2JhZCBleHBpcmF0aW9uIGRhdGUgZ2l2ZW4sIHJldHVybnMgZGlzdGFudFBhc3QgdG8gbWFrZSBzdXJlIHRoaXMgc3VydmV5IGlzIGFsd2F5cyBleHBpcmVkLlxyXG5cdCAqL1xyXG5cdGdldEV4cGlyYXRpb25UaW1lVXRjKCk6IERhdGU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBleHBpcmF0aW9uIHRpbWUsIGluIFVUQywgb2YgdGhpcyBTdXJ2ZXkuICBPbmNlIHRoZSBjbGllbnQgaGFzIHBhc3NlZCB0aGlzIGRhdGUsIGl0IHNob3VsZCBjbGVhbiBhbnlcclxuXHQgKiBjYWNoZWQgZGF0YSwgYW5kIHNob3VsZCByZWplY3QgYW55IGluY29taW5nIHN1cnZleXMgdGhhdCBoYXZlIG90aGVyd2lzZSBleHBpcmVkIGJ1dCBhcmUgc3RpbGwgYWN0aXZlXHJcblx0ICogaW4gdGhlIGZsaWdodGluZyBzeXN0ZW1cclxuXHQgKi9cclxuXHRnZXRSYXdFeHBpcmF0aW9uVGltZVV0YygpOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlICdkYXRlJyBpcyBiZXR3ZWVuIHRoZSBzdGFydC9leHBpcmF0aW9uIGRhdGVzIGZvciB0aGlzIHN1cnZleS5cclxuXHQgKi9cclxuXHRpc0FjdGl2ZUZvckRhdGUoZGF0ZTogRGF0ZSk6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIGFjdGl2YXRpb24gZXZlbnQgdGhhdCBzaG91bGQgYmUgcGx1bWJlZCB0aHJvdWdoIHRvIHRoZSBGbG9vZGdhdGVFbmdpbmUvU3VydmV5QWN0aXZpeXRMaXN0ZW5lci5cclxuXHQgKiBXaGVuIGFjdGl2YXRlZCwgdGhpcyBzdXJ2ZXkgc2hvdWxkIGJlIHNob3duIHRvIHRoZSB1c2VyLlxyXG5cdCAqL1xyXG5cdGdldEFjdGl2YXRpb25FdmVudCgpOiBJU3VydmV5RXZlbnQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIHByZWZlcnJlZCBsYXVuY2ggbWVjaGFuaXNtIGJhc2VkIG9uIHRoaXMgc3VydmV5J3MgZGF0YSBwYXlsb2FkLiAgVGhpcyBtYXkgb3IgbWF5IG5vdCBiZVxyXG5cdCAqIHJlc3BlY3RlZCBieSB0aGUgTGF1bmNoZXJGYWN0b3J5IGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gYW5kIGltcGxlbWVudGF0aW9uLCBhbmQgaXMgc3RyaWN0bHkgY29uc2lkZXJlZFxyXG5cdCAqIGEgYmVoYXZpb3JhbCBoaW50XHJcblx0ICovXHJcblx0Z2V0UHJlZmVycmVkTGF1bmNoVHlwZSgpOiBJU3VydmV5SW5mby5MYXVuY2hUeXBlO1xyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm4gYWRkaXRpb25hbERhdGFSZXF1ZXN0ZWQgYXJyYXlcclxuXHQgKi9cclxuXHRpc0FkZGl0aW9uYWxEYXRhUmVxdWVzdGVkKGFkZGl0aW9uYWxEYXRhOiBJU3VydmV5SW5mby5BZGRpdGlvbmFsRGF0YVR5cGUpOiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm4gdGhlIGxhdW5jaGVyIHR5cGUgc3RyaW5nXHJcblx0ICovXHJcblx0Z2V0TGF1bmNoZXJUeXBlKCk6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyB0aGUgbWV0YWRhdGEgb2YgdGhlIHN1cnZleSwgdGhpcyBpcyBvcHRpb25hbCBidXQgaWYgYXZhaWxhYmxlIGl0IGNhbiBiZSB1c2VkIGJ5IGxhdW5jaGVyIHRvXHJcblx0ICogbWFrZSBhcHByb3ByaWF0ZSBkZWNpc2lvbnMgd2hpbGUgbGF1bmNoaW5nIGEgc3VyZmFjZS5cclxuXHQgKi9cclxuXHRnZXRNZXRhZGF0YSgpOiBJU3VydmV5TWV0YWRhdGE7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgYnVzaW5lc3NMZXZlbFxyXG5cdCAqL1xyXG5cdGdldEJ1c2luZXNzTGV2ZWwoKTogSVN1cnZleUluZm8uQnVzaW5lc3NMZXZlbDtcclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyBtYXhMYXVuY2hlc1xyXG5cdCAqL1xyXG5cdGdldE1heExhdW5jaGVzKCk6IG51bWJlcjtcclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyBtYXhMYXVuY2hlcyBQZXIgc2Vzc2lvblxyXG5cdCAqL1xyXG5cdGdldE1heExhdW5jaGVzUGVyU2Vzc2lvbigpOiBudW1iZXI7XHJcbn1cclxuXHJcbm1vZHVsZSBJU3VydmV5SW5mbyB7XHJcblx0ZXhwb3J0IGNvbnN0IGVudW0gTGF1bmNoVHlwZSB7XHJcblx0XHQvLyBObyBsYXVuY2ggdHlwZSBzcGVjaWZpZWQsIGRlZmVyIHRvIHRoZSBsYXVuY2hlciBmYWN0b3J5IGNvZGVcclxuXHRcdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcclxuXHRcdC8vIFByZWZlciBhIG5vdGlmaWNhdGlvbi1iYXNlZCBsYXVuY2hlciAobGlrZSB0aGUgd2luZG93cyB0b2FzdCBsYXVuY2hlciB3aGVuIHByZXNlbnQpXHJcblx0XHROb3RpZmljYXRpb24gPSBcIk5vdGlmaWNhdGlvblwiLFxyXG5cdFx0Ly8gUHJlZmVyIGEgbW9kYWwtZGlhbG9nIGJhc2VkIGxhdW5jaGVyXHJcblx0XHRNb2RhbCA9IFwiTW9kYWxcIixcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBlbnVtIEJ1c2luZXNzTGV2ZWwge1xyXG5cdFx0Tm9uZSA9IDAsXHJcblx0XHRDcml0aWNhbCxcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBjb25zdCBlbnVtIEFkZGl0aW9uYWxEYXRhVHlwZSB7XHJcblx0XHQvLyBSZXF1ZXN0IGVtYWlsIGFkZHJlc3NcclxuXHRcdEVtYWlsQWRkcmVzcyxcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBjb25zdCBET01fVFlQRV9UQUdOQU1FID0gXCJUeXBlXCI7XHJcblx0ZXhwb3J0IGNvbnN0IERPTV9UWVBFX1ZBTFVFID0gXCJTdXJ2ZXlcIjtcclxuXHRleHBvcnQgY29uc3QgRE9NX0lEX1RBR05BTUUgPSBcIlN1cnZleUlEXCI7XHJcblx0ZXhwb3J0IGNvbnN0IEpTT05fU1VSVkVZX0tFWU5BTUUgPSBcInN1cnZleVwiO1xyXG5cdGV4cG9ydCBjb25zdCBKU09OX0lEX0tFWU5BTUUgPSBcInN1cnZleUlkXCI7XHJcbn1cclxuXHJcbmV4cG9ydCA9IElTdXJ2ZXlJbmZvO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/ISurveyInfo.js\n')},"../FloodgateCore/dist/src/IndexedTracker.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.IndexedTracker = void 0;\nvar IndexedTracker = /** @class */ (function () {\n    function IndexedTracker() {\n    }\n    return IndexedTracker;\n}());\nexports.IndexedTracker = IndexedTracker;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0luZGV4ZWRUcmFja2VyLnRzPzE5ZmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0E7SUFBQTtJQUlBLENBQUM7SUFBRCxxQkFBQztBQUFELENBQUM7QUFKWSx3Q0FBYyIsImZpbGUiOiIuLi9GbG9vZGdhdGVDb3JlL2Rpc3Qvc3JjL0luZGV4ZWRUcmFja2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFjdGl2aXR5VHJhY2tlciA9IHJlcXVpcmUoXCIuL0FjdGl2aXR5VHJhY2tlclwiKTtcclxuaW1wb3J0IElTdXJ2ZXkgPSByZXF1aXJlKFwiLi9BcGkvSVN1cnZleVwiKTtcclxuXHJcbmV4cG9ydCBjbGFzcyBJbmRleGVkVHJhY2tlciB7XHJcblx0cHVibGljIGluZGV4OiBudW1iZXI7XHJcblx0cHVibGljIHN1cnZleUlkOiBzdHJpbmc7XHJcblx0cHVibGljIHRyYWNrZXI6IEFjdGl2aXR5VHJhY2tlcjtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/IndexedTracker.js\n')},"../FloodgateCore/dist/src/StateProviderHelpers.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.MergeAndUpdateSurveyActivationStats = exports.MergeAndUpdateCampaignStates = exports.MergeAndUpdateGovernedChannelStates = exports.makeSettingItemValue = exports.extractSettingItemValueSubString = exports.ItemCollection = void 0;\nvar SurveyStatCollectionActivation_1 = __webpack_require__(/*! ../src/SurveyStatCollectionActivation */ "../FloodgateCore/dist/src/SurveyStatCollectionActivation.js");\nvar ItemCollection = /** @class */ (function () {\n    function ItemCollection() {\n        this.items = {};\n        this.itemCount = 0;\n    }\n    ItemCollection.prototype.add = function (key, value) {\n        if (!this.items[key]) {\n            this.itemCount++;\n        }\n        this.items[key] = value;\n    };\n    ItemCollection.prototype.find = function (key) {\n        return this.items[key];\n    };\n    ItemCollection.prototype.remove = function (key) {\n        var item = this.items[key];\n        if (item) {\n            delete this.items[key];\n            this.itemCount--;\n        }\n        return item;\n    };\n    ItemCollection.prototype.count = function () {\n        return this.itemCount;\n    };\n    return ItemCollection;\n}());\nexports.ItemCollection = ItemCollection;\nfunction extractSettingItemValueSubString(itemValue) {\n    if (!itemValue) {\n        return itemValue;\n    }\n    var beginPos = itemValue.indexOf(SETTING_DATA_OPEN_TAG) + SETTING_DATA_OPEN_TAG.length;\n    var endPos = itemValue.indexOf(SETTING_DATA_CLOSE_TAG);\n    if (beginPos < 0 || endPos < 0) {\n        return itemValue;\n    }\n    return itemValue.substring(beginPos, endPos);\n}\nexports.extractSettingItemValueSubString = extractSettingItemValueSubString;\nfunction makeSettingItemValue(value) {\n    if (!value) {\n        return SETTING_DATA_OPEN_TAG + SETTING_DATA_CLOSE_TAG;\n    }\n    return SETTING_DATA_OPEN_TAG + value + SETTING_DATA_CLOSE_TAG;\n}\nexports.makeSettingItemValue = makeSettingItemValue;\nfunction MergeAndUpdateGovernedChannelStates(previousStates, currentStates) {\n    var stateCollections = new ItemCollection();\n    // Todo: move the following into a generic method to be shared\n    if (!previousStates && !currentStates) {\n        return stateCollections;\n    }\n    if (!previousStates) {\n        stateCollections.add(0 /* Merged */, currentStates);\n        return stateCollections;\n    }\n    if (!currentStates) {\n        stateCollections.add(0 /* Merged */, previousStates);\n        stateCollections.add(1 /* ToBeUpdated */, previousStates);\n        return stateCollections;\n    }\n    var mergedStates = [];\n    var toBeUpdatedStates = [];\n    if (previousStates) {\n        previousStates.forEach(function (previousState) {\n            // find matching in current states\n            var pos = -1;\n            var currentState;\n            for (var i = 0; i < currentStates.length; i++) {\n                currentState = currentStates[i];\n                if (currentState.getType() === previousState.getType()) {\n                    pos = i;\n                    break;\n                }\n            }\n            // if previous state is not in current states\n            if (pos === -1) {\n                // add previous state to merged\n                mergedStates.push(previousState);\n                // add previous state to toUpdated\n                toBeUpdatedStates.push(previousState);\n                return;\n            }\n            // if ActivationTimeUtc of previous is greater than current\n            if (previousState.getCooldownStartTime() > currentState.getCooldownStartTime()) {\n                // add previous state to merged\n                mergedStates.push(previousState);\n                // add previous state to toUpdated\n                toBeUpdatedStates.push(previousState);\n            }\n            else {\n                // add current state to merged\n                mergedStates.push(currentState);\n            }\n            // remove state from current states\n            currentStates.splice(pos, 1);\n        });\n    }\n    // for the remaining current states\n    if (currentStates) {\n        currentStates.forEach(function (currentState) {\n            // add current state to merged\n            mergedStates.push(currentState);\n        });\n    }\n    stateCollections.add(0 /* Merged */, mergedStates);\n    if (toBeUpdatedStates.length > 0) {\n        stateCollections.add(1 /* ToBeUpdated */, toBeUpdatedStates);\n    }\n    return stateCollections;\n}\nexports.MergeAndUpdateGovernedChannelStates = MergeAndUpdateGovernedChannelStates;\nfunction MergeAndUpdateCampaignStates(previousStates, currentStates) {\n    var stateCollections = new ItemCollection();\n    if (!previousStates && !currentStates) {\n        return stateCollections;\n    }\n    if (!previousStates) {\n        stateCollections.add(0 /* Merged */, currentStates);\n        return stateCollections;\n    }\n    if (!currentStates) {\n        stateCollections.add(0 /* Merged */, previousStates);\n        stateCollections.add(1 /* ToBeUpdated */, previousStates);\n        return stateCollections;\n    }\n    var mergedStates = [];\n    var toBeUpdatedStates = [];\n    if (previousStates) {\n        previousStates.forEach(function (previousState) {\n            var current = new Date();\n            // find matching in current states\n            var pos = -1;\n            var currentState;\n            for (var i = 0; i < currentStates.length; i++) {\n                currentState = currentStates[i];\n                if (currentState.CampaignId === previousState.CampaignId) {\n                    pos = i;\n                    break;\n                }\n            }\n            // if previous state is not in current states\n            if (pos === -1) {\n                // add previous state to merged\n                mergedStates.push(previousState);\n                // add previous state to toUpdated\n                toBeUpdatedStates.push(previousState);\n                return;\n            }\n            // if current state is in cooldown, add to merged list\n            if (currentState.LastCooldownEndTimeUtc > current) {\n                // add previous state to merged list\n                mergedStates.push(currentState);\n                // emove state from current states\n                currentStates.splice(pos, 1);\n                return;\n            }\n            // if previous state is in cooldown, add to merged and toUpdated lists\n            if (previousState.LastCooldownEndTimeUtc > current) {\n                // add previous state to merged list\n                mergedStates.push(previousState);\n                // add previous state to to-be-updated list\n                toBeUpdatedStates.push(previousState);\n                // emove state from current states\n                currentStates.splice(pos, 1);\n                return;\n            }\n            // add previous state to toUpdated and merged for the following two conditions:\n            //  1. previous cooldown time wins, or\n            //  2. cooldown times are the same and previous nomination wins\n            if (previousState.getCooldownStartDate() > currentState.getCooldownStartDate()\n                || (previousState.getCooldownStartDate() === currentState.getCooldownStartDate()\n                    && previousState.LastNominationTimeUtc > currentState.LastNominationTimeUtc)) {\n                mergedStates.push(previousState);\n                toBeUpdatedStates.push(previousState);\n            }\n            else {\n                // add current state to merged\n                mergedStates.push(currentState);\n            }\n            // remove state from current states\n            currentStates.splice(pos, 1);\n        });\n    }\n    // for the remaining current states\n    if (currentStates) {\n        currentStates.forEach(function (current) {\n            // add current state to merged\n            mergedStates.push(current);\n        });\n    }\n    stateCollections.add(0 /* Merged */, mergedStates);\n    if (toBeUpdatedStates.length > 0) {\n        stateCollections.add(1 /* ToBeUpdated */, toBeUpdatedStates);\n    }\n    return stateCollections;\n}\nexports.MergeAndUpdateCampaignStates = MergeAndUpdateCampaignStates;\nfunction MergeAndUpdateSurveyActivationStats(previousStats, currentStats) {\n    var statsCollections = new ItemCollection();\n    // Handle previousStats and/or currentStats equal to null\n    if (!previousStats && !currentStats) {\n        return statsCollections;\n    }\n    if (!previousStats) {\n        statsCollections.add(0 /* Merged */, currentStats);\n        return statsCollections;\n    }\n    if (!currentStats) {\n        statsCollections.add(0 /* Merged */, previousStats);\n        statsCollections.add(1 /* ToBeUpdated */, previousStats);\n        return statsCollections;\n    }\n    // Enumerate preivous stats\n    var mergedStats = new SurveyStatCollectionActivation_1.SurveyStatCollectionActivation();\n    var toBeUpdatedStats = new SurveyStatCollectionActivation_1.SurveyStatCollectionActivation();\n    var previousStatsDictionary = previousStats.getStats();\n    var currentStatsDictionary = currentStats.getStats();\n    for (var surveyId in previousStatsDictionary) {\n        if (previousStatsDictionary.hasOwnProperty(surveyId)) {\n            // if an updated stat is not found\n            var currentActivationStats = currentStatsDictionary[surveyId];\n            if (!currentActivationStats) {\n                // add to merged collection\n                mergedStats.addStats(surveyId, previousStatsDictionary[surveyId]);\n                // add to-be-updated collection\n                toBeUpdatedStats.addStats(surveyId, previousStatsDictionary[surveyId]);\n                continue;\n            }\n            // if previous stat has higher activation time\n            var previousActivationStats = previousStatsDictionary[surveyId];\n            if (previousActivationStats.ActivationTimeUtc > currentActivationStats.ActivationTimeUtc) {\n                // add to merged collection\n                mergedStats.addStats(surveyId, previousStatsDictionary[surveyId]);\n                // add to-be-updated collection\n                toBeUpdatedStats.addStats(surveyId, previousStatsDictionary[surveyId]);\n            }\n            else {\n                // add to current stat merged collection\n                mergedStats.addStats(surveyId, currentStatsDictionary[surveyId]);\n            }\n            // delete from stats\n            delete currentStatsDictionary[surveyId];\n        }\n    }\n    // merge any remaining stats\n    for (var surveyId in currentStatsDictionary) {\n        if (currentStatsDictionary.hasOwnProperty(surveyId)) {\n            mergedStats.addStats(surveyId, currentStatsDictionary[surveyId]);\n        }\n    }\n    // always return merged list\n    statsCollections.add(0 /* Merged */, mergedStats);\n    // since dictionaries don\'t have an empty check, enumerate the  first entry to check for non-empty\n    var toBeUpdatedStatsDictionary = toBeUpdatedStats.getStats();\n    for (var toBeUpdated in toBeUpdatedStatsDictionary) {\n        if (toBeUpdatedStatsDictionary.hasOwnProperty(toBeUpdated)) {\n            // not empty, return to-be-updated\n            statsCollections.add(1 /* ToBeUpdated */, toBeUpdatedStats);\n            break;\n        }\n    }\n    return statsCollections;\n}\nexports.MergeAndUpdateSurveyActivationStats = MergeAndUpdateSurveyActivationStats;\nvar SETTING_DATA_OPEN_TAG = "<data>";\nvar SETTING_DATA_CLOSE_TAG = "<\/data>";\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N0YXRlUHJvdmlkZXJIZWxwZXJzLnRzPzQwYmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUtBQThHO0FBb0I5RztJQUFBO1FBQ1MsVUFBSyxHQUF5QixFQUFFLENBQUM7UUFDakMsY0FBUyxHQUFXLENBQUMsQ0FBQztJQTJCL0IsQ0FBQztJQXpCTyw0QkFBRyxHQUFWLFVBQVcsR0FBVyxFQUFFLEtBQVE7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVNLDZCQUFJLEdBQVgsVUFBWSxHQUFXO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRU0sK0JBQU0sR0FBYixVQUFjLEdBQVc7UUFDeEIsSUFBTSxJQUFJLEdBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVoQyxJQUFJLElBQUksRUFBRTtZQUNULE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDakI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFTSw4QkFBSyxHQUFaO1FBQ0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3ZCLENBQUM7SUFDRixxQkFBQztBQUFELENBQUM7QUE3Qlksd0NBQWM7QUErQjNCLFNBQWdCLGdDQUFnQyxDQUFDLFNBQWlCO0lBQ2pFLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDZixPQUFPLFNBQVMsQ0FBQztLQUNqQjtJQUVELElBQU0sUUFBUSxHQUFXLFNBQVMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7SUFDakcsSUFBTSxNQUFNLEdBQVcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRWpFLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQy9CLE9BQU8sU0FBUyxDQUFDO0tBQ2pCO0lBRUQsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBYkQsNEVBYUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxLQUFhO0lBQ2pELElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDWCxPQUFPLHFCQUFxQixHQUFHLHNCQUFzQixDQUFDO0tBQ3REO0lBRUQsT0FBTyxxQkFBcUIsR0FBRyxLQUFLLEdBQUcsc0JBQXNCLENBQUM7QUFDL0QsQ0FBQztBQU5ELG9EQU1DO0FBRUQsU0FBZ0IsbUNBQW1DLENBQUMsY0FBc0MsRUFDekYsYUFBcUM7SUFDckMsSUFBTSxnQkFBZ0IsR0FBNkMsSUFBSSxjQUFjLEVBQTBCLENBQUM7SUFFaEgsOERBQThEO0lBQzlELElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDdEMsT0FBTyxnQkFBZ0IsQ0FBQztLQUN4QjtJQUVELElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDcEIsZ0JBQWdCLENBQUMsR0FBRyxpQkFBdUIsYUFBYSxDQUFDLENBQUM7UUFDMUQsT0FBTyxnQkFBZ0IsQ0FBQztLQUN4QjtJQUVELElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDbkIsZ0JBQWdCLENBQUMsR0FBRyxpQkFBdUIsY0FBYyxDQUFDLENBQUM7UUFDM0QsZ0JBQWdCLENBQUMsR0FBRyxzQkFBNEIsY0FBYyxDQUFDLENBQUM7UUFDaEUsT0FBTyxnQkFBZ0IsQ0FBQztLQUN4QjtJQUVELElBQU0sWUFBWSxHQUEyQixFQUFFLENBQUM7SUFDaEQsSUFBTSxpQkFBaUIsR0FBMkIsRUFBRSxDQUFDO0lBRXJELElBQUksY0FBYyxFQUFFO1FBQ25CLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBQyxhQUFhO1lBQ3BDLGtDQUFrQztZQUNsQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNiLElBQUksWUFBa0MsQ0FBQztZQUN2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDOUMsWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssYUFBYSxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUN2RCxHQUFHLEdBQUcsQ0FBQyxDQUFDO29CQUNSLE1BQU07aUJBQ047YUFDRDtZQUVELDZDQUE2QztZQUM3QyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDZiwrQkFBK0I7Z0JBQy9CLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRWpDLGtDQUFrQztnQkFDbEMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUV0QyxPQUFPO2FBQ1A7WUFFRCwyREFBMkQ7WUFDM0QsSUFBSSxhQUFhLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtnQkFDL0UsK0JBQStCO2dCQUMvQixZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUVqQyxrQ0FBa0M7Z0JBQ2xDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUN0QztpQkFBTTtnQkFDTiw4QkFBOEI7Z0JBQzlCLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDaEM7WUFFRCxtQ0FBbUM7WUFDbkMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7S0FDSDtJQUVELG1DQUFtQztJQUNuQyxJQUFJLGFBQWEsRUFBRTtRQUNsQixhQUFhLENBQUMsT0FBTyxDQUFDLFVBQUMsWUFBWTtZQUNsQyw4QkFBOEI7WUFDOUIsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztLQUNIO0lBRUQsZ0JBQWdCLENBQUMsR0FBRyxpQkFBdUIsWUFBWSxDQUFDLENBQUM7SUFFekQsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2pDLGdCQUFnQixDQUFDLEdBQUcsc0JBQTRCLGlCQUFpQixDQUFDLENBQUM7S0FDbkU7SUFFRCxPQUFPLGdCQUFnQixDQUFDO0FBQ3pCLENBQUM7QUEvRUQsa0ZBK0VDO0FBRUQsU0FBZ0IsNEJBQTRCLENBQUMsY0FBK0IsRUFDM0UsYUFBOEI7SUFDOUIsSUFBTSxnQkFBZ0IsR0FBc0MsSUFBSSxjQUFjLEVBQW1CLENBQUM7SUFFbEcsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUN0QyxPQUFPLGdCQUFnQixDQUFDO0tBQ3hCO0lBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUNwQixnQkFBZ0IsQ0FBQyxHQUFHLGlCQUF1QixhQUFhLENBQUMsQ0FBQztRQUMxRCxPQUFPLGdCQUFnQixDQUFDO0tBQ3hCO0lBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUNuQixnQkFBZ0IsQ0FBQyxHQUFHLGlCQUF1QixjQUFjLENBQUMsQ0FBQztRQUMzRCxnQkFBZ0IsQ0FBQyxHQUFHLHNCQUE0QixjQUFjLENBQUMsQ0FBQztRQUNoRSxPQUFPLGdCQUFnQixDQUFDO0tBQ3hCO0lBRUQsSUFBTSxZQUFZLEdBQW9CLEVBQUUsQ0FBQztJQUN6QyxJQUFNLGlCQUFpQixHQUFvQixFQUFFLENBQUM7SUFFOUMsSUFBSSxjQUFjLEVBQUU7UUFDbkIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFDLGFBQWE7WUFDcEMsSUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUUzQixrQ0FBa0M7WUFDbEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDYixJQUFJLFlBQTJCLENBQUM7WUFDaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlDLFlBQVksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksWUFBWSxDQUFDLFVBQVUsS0FBSyxhQUFhLENBQUMsVUFBVSxFQUFFO29CQUN6RCxHQUFHLEdBQUcsQ0FBQyxDQUFDO29CQUNSLE1BQU07aUJBQ047YUFDRDtZQUVELDZDQUE2QztZQUM3QyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDZiwrQkFBK0I7Z0JBQy9CLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRWpDLGtDQUFrQztnQkFDbEMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUV0QyxPQUFPO2FBQ1A7WUFFRCxzREFBc0Q7WUFDdEQsSUFBSSxZQUFZLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxFQUFFO2dCQUNsRCxvQ0FBb0M7Z0JBQ3BDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRWhDLGtDQUFrQztnQkFDbEMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRTdCLE9BQU87YUFDUDtZQUVELHNFQUFzRTtZQUN0RSxJQUFJLGFBQWEsQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLEVBQUU7Z0JBQ25ELG9DQUFvQztnQkFDcEMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFakMsMkNBQTJDO2dCQUMzQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRXRDLGtDQUFrQztnQkFDbEMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLE9BQU87YUFDUDtZQUVELCtFQUErRTtZQUMvRSxzQ0FBc0M7WUFDdEMsK0RBQStEO1lBQy9ELElBQUksYUFBYSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsWUFBWSxDQUFDLG9CQUFvQixFQUFFO21CQUMxRSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLFlBQVksQ0FBQyxvQkFBb0IsRUFBRTt1QkFDNUUsYUFBYSxDQUFDLHFCQUFxQixHQUFHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxFQUM1RTtnQkFDRCxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUVqQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDdEM7aUJBQU07Z0JBQ04sOEJBQThCO2dCQUM5QixZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2hDO1lBRUQsbUNBQW1DO1lBQ25DLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0tBQ0g7SUFFRCxtQ0FBbUM7SUFDbkMsSUFBSSxhQUFhLEVBQUU7UUFDbEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFDLE9BQU87WUFDN0IsOEJBQThCO1lBQzlCLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7S0FDSDtJQUVELGdCQUFnQixDQUFDLEdBQUcsaUJBQXVCLFlBQVksQ0FBQyxDQUFDO0lBRXpELElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNqQyxnQkFBZ0IsQ0FBQyxHQUFHLHNCQUE0QixpQkFBaUIsQ0FBQyxDQUFDO0tBQ25FO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQztBQUN6QixDQUFDO0FBM0dELG9FQTJHQztBQUVELFNBQWdCLG1DQUFtQyxDQUFDLGFBQTZDLEVBQ2hHLFlBQTRDO0lBRTVDLElBQU0sZ0JBQWdCLEdBQXFELElBQUksY0FBYyxFQUFrQyxDQUFDO0lBRWhJLHlEQUF5RDtJQUN6RCxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ3BDLE9BQU8sZ0JBQWdCLENBQUM7S0FDeEI7SUFFRCxJQUFJLENBQUMsYUFBYSxFQUFFO1FBQ25CLGdCQUFnQixDQUFDLEdBQUcsaUJBQXVCLFlBQVksQ0FBQyxDQUFDO1FBQ3pELE9BQU8sZ0JBQWdCLENBQUM7S0FDeEI7SUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2xCLGdCQUFnQixDQUFDLEdBQUcsaUJBQXVCLGFBQWEsQ0FBQyxDQUFDO1FBQzFELGdCQUFnQixDQUFDLEdBQUcsc0JBQTRCLGFBQWEsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sZ0JBQWdCLENBQUM7S0FDeEI7SUFFRCwyQkFBMkI7SUFDM0IsSUFBTSxXQUFXLEdBQW1DLElBQUksK0RBQThCLEVBQUUsQ0FBQztJQUN6RixJQUFNLGdCQUFnQixHQUFtQyxJQUFJLCtEQUE4QixFQUFFLENBQUM7SUFFOUYsSUFBTSx1QkFBdUIsR0FBdUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdGLElBQU0sc0JBQXNCLEdBQXVDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUUzRixLQUFLLElBQU0sUUFBUSxJQUFJLHVCQUF1QixFQUFFO1FBQy9DLElBQUksdUJBQXVCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3JELGtDQUFrQztZQUNsQyxJQUFNLHNCQUFzQixHQUEwQixzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RixJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQzVCLDJCQUEyQjtnQkFDM0IsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDbEUsK0JBQStCO2dCQUMvQixnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLFNBQVM7YUFDVDtZQUNELDhDQUE4QztZQUM5QyxJQUFNLHVCQUF1QixHQUEwQix1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RixJQUFJLHVCQUF1QixDQUFDLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDLGlCQUFpQixFQUFFO2dCQUN6RiwyQkFBMkI7Z0JBQzNCLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLCtCQUErQjtnQkFDL0IsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ3ZFO2lCQUFNO2dCQUNOLHdDQUF3QztnQkFDeEMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUNqRTtZQUVELG9CQUFvQjtZQUNwQixPQUFPLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3hDO0tBQ0Q7SUFFRCw0QkFBNEI7SUFDNUIsS0FBSyxJQUFNLFFBQVEsSUFBSSxzQkFBc0IsRUFBRTtRQUM5QyxJQUFJLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNwRCxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO0tBQ0Q7SUFFRCw0QkFBNEI7SUFDNUIsZ0JBQWdCLENBQUMsR0FBRyxpQkFBdUIsV0FBVyxDQUFDLENBQUM7SUFFeEQsa0dBQWtHO0lBQ2xHLElBQU0sMEJBQTBCLEdBQXVDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25HLEtBQUssSUFBTSxXQUFXLElBQUksMEJBQTBCLEVBQUU7UUFDckQsSUFBSSwwQkFBMEIsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDM0Qsa0NBQWtDO1lBQ2xDLGdCQUFnQixDQUFDLEdBQUcsc0JBQTRCLGdCQUFnQixDQUFDLENBQUM7WUFDbEUsTUFBTTtTQUNOO0tBQ0Q7SUFFRCxPQUFPLGdCQUFnQixDQUFDO0FBQ3pCLENBQUM7QUE3RUQsa0ZBNkVDO0FBRUQsSUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUM7QUFDdkMsSUFBTSxzQkFBc0IsR0FBRyxTQUFTLENBQUMiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9TdGF0ZVByb3ZpZGVySGVscGVycy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1cnZleUFjdGl2YXRpb25TdGF0cywgU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uIH0gZnJvbSBcIi4uL3NyYy9TdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb25cIjtcclxuaW1wb3J0IHsgQ2FtcGFpZ25TdGF0ZSB9IGZyb20gXCIuL0NhbXBhaWduL0NhbXBhaWduU3RhdGVQcm92aWRlclwiO1xyXG5pbXBvcnQgeyBJRGljdGlvbmFyeSB9IGZyb20gXCIuL0NvbW1vblwiO1xyXG5pbXBvcnQgeyBHb3Zlcm5lZENoYW5uZWxTdGF0ZSB9IGZyb20gXCIuL0dvdmVybmVkQ2hhbm5lbFN0YXRlUHJvdmlkZXJcIjtcclxuXHJcbi8qKlxyXG4gKiBWYWx1ZXMgZm9yIHRoZSBzdGF0ZSBsaXN0IHR5cGVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZW51bSBTdGF0ZUxpc3RUeXBlIHtcclxuXHRNZXJnZWQsXHJcblx0VG9CZVVwZGF0ZWQsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUtleWVkQ29sbGVjdGlvbjxUPiB7XHJcblx0YWRkKGtleTogbnVtYmVyLCB2YWx1ZTogVCk7XHJcblx0ZmluZChrZXk6IG51bWJlcik6IFQ7XHJcblx0cmVtb3ZlKGtleTogbnVtYmVyKTtcclxuXHRjb3VudCgpOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtQ29sbGVjdGlvbjxUPiBpbXBsZW1lbnRzIElLZXllZENvbGxlY3Rpb248VD4ge1xyXG5cdHByaXZhdGUgaXRlbXM6IHsgW2tleTogbnVtYmVyXTogVCB9ID0ge307XHJcblx0cHJpdmF0ZSBpdGVtQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG5cdHB1YmxpYyBhZGQoa2V5OiBudW1iZXIsIHZhbHVlOiBUKSB7XHJcblx0XHRpZiAoIXRoaXMuaXRlbXNba2V5XSkge1xyXG5cdFx0XHR0aGlzLml0ZW1Db3VudCsrO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5pdGVtc1trZXldID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZmluZChrZXk6IG51bWJlcik6IFQge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbXNba2V5XTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyByZW1vdmUoa2V5OiBudW1iZXIpOiBUIHtcclxuXHRcdGNvbnN0IGl0ZW06IFQgPSB0aGlzLml0ZW1zW2tleV07XHJcblxyXG5cdFx0aWYgKGl0ZW0pIHtcclxuXHRcdFx0ZGVsZXRlIHRoaXMuaXRlbXNba2V5XTtcclxuXHRcdFx0dGhpcy5pdGVtQ291bnQtLTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gaXRlbTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBjb3VudCgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUNvdW50O1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTZXR0aW5nSXRlbVZhbHVlU3ViU3RyaW5nKGl0ZW1WYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuXHRpZiAoIWl0ZW1WYWx1ZSkge1xyXG5cdFx0cmV0dXJuIGl0ZW1WYWx1ZTtcclxuXHR9XHJcblxyXG5cdGNvbnN0IGJlZ2luUG9zOiBudW1iZXIgPSBpdGVtVmFsdWUuaW5kZXhPZihTRVRUSU5HX0RBVEFfT1BFTl9UQUcpICsgU0VUVElOR19EQVRBX09QRU5fVEFHLmxlbmd0aDtcclxuXHRjb25zdCBlbmRQb3M6IG51bWJlciA9IGl0ZW1WYWx1ZS5pbmRleE9mKFNFVFRJTkdfREFUQV9DTE9TRV9UQUcpO1xyXG5cclxuXHRpZiAoYmVnaW5Qb3MgPCAwIHx8IGVuZFBvcyA8IDApIHtcclxuXHRcdHJldHVybiBpdGVtVmFsdWU7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gaXRlbVZhbHVlLnN1YnN0cmluZyhiZWdpblBvcywgZW5kUG9zKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VTZXR0aW5nSXRlbVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdGlmICghdmFsdWUpIHtcclxuXHRcdHJldHVybiBTRVRUSU5HX0RBVEFfT1BFTl9UQUcgKyBTRVRUSU5HX0RBVEFfQ0xPU0VfVEFHO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIFNFVFRJTkdfREFUQV9PUEVOX1RBRyArIHZhbHVlICsgU0VUVElOR19EQVRBX0NMT1NFX1RBRztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE1lcmdlQW5kVXBkYXRlR292ZXJuZWRDaGFubmVsU3RhdGVzKHByZXZpb3VzU3RhdGVzOiBHb3Zlcm5lZENoYW5uZWxTdGF0ZVtdLFxyXG5cdGN1cnJlbnRTdGF0ZXM6IEdvdmVybmVkQ2hhbm5lbFN0YXRlW10pOiBJS2V5ZWRDb2xsZWN0aW9uPEdvdmVybmVkQ2hhbm5lbFN0YXRlW10+IHtcclxuXHRjb25zdCBzdGF0ZUNvbGxlY3Rpb25zOiBJS2V5ZWRDb2xsZWN0aW9uPEdvdmVybmVkQ2hhbm5lbFN0YXRlW10+ID0gbmV3IEl0ZW1Db2xsZWN0aW9uPEdvdmVybmVkQ2hhbm5lbFN0YXRlW10+KCk7XHJcblxyXG5cdC8vIFRvZG86IG1vdmUgdGhlIGZvbGxvd2luZyBpbnRvIGEgZ2VuZXJpYyBtZXRob2QgdG8gYmUgc2hhcmVkXHJcblx0aWYgKCFwcmV2aW91c1N0YXRlcyAmJiAhY3VycmVudFN0YXRlcykge1xyXG5cdFx0cmV0dXJuIHN0YXRlQ29sbGVjdGlvbnM7XHJcblx0fVxyXG5cclxuXHRpZiAoIXByZXZpb3VzU3RhdGVzKSB7XHJcblx0XHRzdGF0ZUNvbGxlY3Rpb25zLmFkZChTdGF0ZUxpc3RUeXBlLk1lcmdlZCwgY3VycmVudFN0YXRlcyk7XHJcblx0XHRyZXR1cm4gc3RhdGVDb2xsZWN0aW9ucztcclxuXHR9XHJcblxyXG5cdGlmICghY3VycmVudFN0YXRlcykge1xyXG5cdFx0c3RhdGVDb2xsZWN0aW9ucy5hZGQoU3RhdGVMaXN0VHlwZS5NZXJnZWQsIHByZXZpb3VzU3RhdGVzKTtcclxuXHRcdHN0YXRlQ29sbGVjdGlvbnMuYWRkKFN0YXRlTGlzdFR5cGUuVG9CZVVwZGF0ZWQsIHByZXZpb3VzU3RhdGVzKTtcclxuXHRcdHJldHVybiBzdGF0ZUNvbGxlY3Rpb25zO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgbWVyZ2VkU3RhdGVzOiBHb3Zlcm5lZENoYW5uZWxTdGF0ZVtdID0gW107XHJcblx0Y29uc3QgdG9CZVVwZGF0ZWRTdGF0ZXM6IEdvdmVybmVkQ2hhbm5lbFN0YXRlW10gPSBbXTtcclxuXHJcblx0aWYgKHByZXZpb3VzU3RhdGVzKSB7XHJcblx0XHRwcmV2aW91c1N0YXRlcy5mb3JFYWNoKChwcmV2aW91c1N0YXRlKSA9PiB7XHJcblx0XHRcdC8vIGZpbmQgbWF0Y2hpbmcgaW4gY3VycmVudCBzdGF0ZXNcclxuXHRcdFx0bGV0IHBvcyA9IC0xO1xyXG5cdFx0XHRsZXQgY3VycmVudFN0YXRlOiBHb3Zlcm5lZENoYW5uZWxTdGF0ZTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50U3RhdGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y3VycmVudFN0YXRlID0gY3VycmVudFN0YXRlc1tpXTtcclxuXHRcdFx0XHRpZiAoY3VycmVudFN0YXRlLmdldFR5cGUoKSA9PT0gcHJldmlvdXNTdGF0ZS5nZXRUeXBlKCkpIHtcclxuXHRcdFx0XHRcdHBvcyA9IGk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGlmIHByZXZpb3VzIHN0YXRlIGlzIG5vdCBpbiBjdXJyZW50IHN0YXRlc1xyXG5cdFx0XHRpZiAocG9zID09PSAtMSkge1xyXG5cdFx0XHRcdC8vIGFkZCBwcmV2aW91cyBzdGF0ZSB0byBtZXJnZWRcclxuXHRcdFx0XHRtZXJnZWRTdGF0ZXMucHVzaChwcmV2aW91c1N0YXRlKTtcclxuXHJcblx0XHRcdFx0Ly8gYWRkIHByZXZpb3VzIHN0YXRlIHRvIHRvVXBkYXRlZFxyXG5cdFx0XHRcdHRvQmVVcGRhdGVkU3RhdGVzLnB1c2gocHJldmlvdXNTdGF0ZSk7XHJcblxyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gaWYgQWN0aXZhdGlvblRpbWVVdGMgb2YgcHJldmlvdXMgaXMgZ3JlYXRlciB0aGFuIGN1cnJlbnRcclxuXHRcdFx0aWYgKHByZXZpb3VzU3RhdGUuZ2V0Q29vbGRvd25TdGFydFRpbWUoKSA+IGN1cnJlbnRTdGF0ZS5nZXRDb29sZG93blN0YXJ0VGltZSgpKSB7XHJcblx0XHRcdFx0Ly8gYWRkIHByZXZpb3VzIHN0YXRlIHRvIG1lcmdlZFxyXG5cdFx0XHRcdG1lcmdlZFN0YXRlcy5wdXNoKHByZXZpb3VzU3RhdGUpO1xyXG5cclxuXHRcdFx0XHQvLyBhZGQgcHJldmlvdXMgc3RhdGUgdG8gdG9VcGRhdGVkXHJcblx0XHRcdFx0dG9CZVVwZGF0ZWRTdGF0ZXMucHVzaChwcmV2aW91c1N0YXRlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBhZGQgY3VycmVudCBzdGF0ZSB0byBtZXJnZWRcclxuXHRcdFx0XHRtZXJnZWRTdGF0ZXMucHVzaChjdXJyZW50U3RhdGUpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyByZW1vdmUgc3RhdGUgZnJvbSBjdXJyZW50IHN0YXRlc1xyXG5cdFx0XHRjdXJyZW50U3RhdGVzLnNwbGljZShwb3MsIDEpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvLyBmb3IgdGhlIHJlbWFpbmluZyBjdXJyZW50IHN0YXRlc1xyXG5cdGlmIChjdXJyZW50U3RhdGVzKSB7XHJcblx0XHRjdXJyZW50U3RhdGVzLmZvckVhY2goKGN1cnJlbnRTdGF0ZSkgPT4ge1xyXG5cdFx0XHQvLyBhZGQgY3VycmVudCBzdGF0ZSB0byBtZXJnZWRcclxuXHRcdFx0bWVyZ2VkU3RhdGVzLnB1c2goY3VycmVudFN0YXRlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0c3RhdGVDb2xsZWN0aW9ucy5hZGQoU3RhdGVMaXN0VHlwZS5NZXJnZWQsIG1lcmdlZFN0YXRlcyk7XHJcblxyXG5cdGlmICh0b0JlVXBkYXRlZFN0YXRlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRzdGF0ZUNvbGxlY3Rpb25zLmFkZChTdGF0ZUxpc3RUeXBlLlRvQmVVcGRhdGVkLCB0b0JlVXBkYXRlZFN0YXRlcyk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gc3RhdGVDb2xsZWN0aW9ucztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE1lcmdlQW5kVXBkYXRlQ2FtcGFpZ25TdGF0ZXMocHJldmlvdXNTdGF0ZXM6IENhbXBhaWduU3RhdGVbXSxcclxuXHRjdXJyZW50U3RhdGVzOiBDYW1wYWlnblN0YXRlW10pOiBJS2V5ZWRDb2xsZWN0aW9uPENhbXBhaWduU3RhdGVbXT4ge1xyXG5cdGNvbnN0IHN0YXRlQ29sbGVjdGlvbnM6IElLZXllZENvbGxlY3Rpb248Q2FtcGFpZ25TdGF0ZVtdPiA9IG5ldyBJdGVtQ29sbGVjdGlvbjxDYW1wYWlnblN0YXRlW10+KCk7XHJcblxyXG5cdGlmICghcHJldmlvdXNTdGF0ZXMgJiYgIWN1cnJlbnRTdGF0ZXMpIHtcclxuXHRcdHJldHVybiBzdGF0ZUNvbGxlY3Rpb25zO1xyXG5cdH1cclxuXHJcblx0aWYgKCFwcmV2aW91c1N0YXRlcykge1xyXG5cdFx0c3RhdGVDb2xsZWN0aW9ucy5hZGQoU3RhdGVMaXN0VHlwZS5NZXJnZWQsIGN1cnJlbnRTdGF0ZXMpO1xyXG5cdFx0cmV0dXJuIHN0YXRlQ29sbGVjdGlvbnM7XHJcblx0fVxyXG5cclxuXHRpZiAoIWN1cnJlbnRTdGF0ZXMpIHtcclxuXHRcdHN0YXRlQ29sbGVjdGlvbnMuYWRkKFN0YXRlTGlzdFR5cGUuTWVyZ2VkLCBwcmV2aW91c1N0YXRlcyk7XHJcblx0XHRzdGF0ZUNvbGxlY3Rpb25zLmFkZChTdGF0ZUxpc3RUeXBlLlRvQmVVcGRhdGVkLCBwcmV2aW91c1N0YXRlcyk7XHJcblx0XHRyZXR1cm4gc3RhdGVDb2xsZWN0aW9ucztcclxuXHR9XHJcblxyXG5cdGNvbnN0IG1lcmdlZFN0YXRlczogQ2FtcGFpZ25TdGF0ZVtdID0gW107XHJcblx0Y29uc3QgdG9CZVVwZGF0ZWRTdGF0ZXM6IENhbXBhaWduU3RhdGVbXSA9IFtdO1xyXG5cclxuXHRpZiAocHJldmlvdXNTdGF0ZXMpIHtcclxuXHRcdHByZXZpb3VzU3RhdGVzLmZvckVhY2goKHByZXZpb3VzU3RhdGUpID0+IHtcclxuXHRcdFx0Y29uc3QgY3VycmVudCA9IG5ldyBEYXRlKCk7XHJcblxyXG5cdFx0XHQvLyBmaW5kIG1hdGNoaW5nIGluIGN1cnJlbnQgc3RhdGVzXHJcblx0XHRcdGxldCBwb3MgPSAtMTtcclxuXHRcdFx0bGV0IGN1cnJlbnRTdGF0ZTogQ2FtcGFpZ25TdGF0ZTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50U3RhdGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y3VycmVudFN0YXRlID0gY3VycmVudFN0YXRlc1tpXTtcclxuXHRcdFx0XHRpZiAoY3VycmVudFN0YXRlLkNhbXBhaWduSWQgPT09IHByZXZpb3VzU3RhdGUuQ2FtcGFpZ25JZCkge1xyXG5cdFx0XHRcdFx0cG9zID0gaTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gaWYgcHJldmlvdXMgc3RhdGUgaXMgbm90IGluIGN1cnJlbnQgc3RhdGVzXHJcblx0XHRcdGlmIChwb3MgPT09IC0xKSB7XHJcblx0XHRcdFx0Ly8gYWRkIHByZXZpb3VzIHN0YXRlIHRvIG1lcmdlZFxyXG5cdFx0XHRcdG1lcmdlZFN0YXRlcy5wdXNoKHByZXZpb3VzU3RhdGUpO1xyXG5cclxuXHRcdFx0XHQvLyBhZGQgcHJldmlvdXMgc3RhdGUgdG8gdG9VcGRhdGVkXHJcblx0XHRcdFx0dG9CZVVwZGF0ZWRTdGF0ZXMucHVzaChwcmV2aW91c1N0YXRlKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBpZiBjdXJyZW50IHN0YXRlIGlzIGluIGNvb2xkb3duLCBhZGQgdG8gbWVyZ2VkIGxpc3RcclxuXHRcdFx0aWYgKGN1cnJlbnRTdGF0ZS5MYXN0Q29vbGRvd25FbmRUaW1lVXRjID4gY3VycmVudCkge1xyXG5cdFx0XHRcdC8vIGFkZCBwcmV2aW91cyBzdGF0ZSB0byBtZXJnZWQgbGlzdFxyXG5cdFx0XHRcdG1lcmdlZFN0YXRlcy5wdXNoKGN1cnJlbnRTdGF0ZSk7XHJcblxyXG5cdFx0XHRcdC8vIGVtb3ZlIHN0YXRlIGZyb20gY3VycmVudCBzdGF0ZXNcclxuXHRcdFx0XHRjdXJyZW50U3RhdGVzLnNwbGljZShwb3MsIDEpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGlmIHByZXZpb3VzIHN0YXRlIGlzIGluIGNvb2xkb3duLCBhZGQgdG8gbWVyZ2VkIGFuZCB0b1VwZGF0ZWQgbGlzdHNcclxuXHRcdFx0aWYgKHByZXZpb3VzU3RhdGUuTGFzdENvb2xkb3duRW5kVGltZVV0YyA+IGN1cnJlbnQpIHtcclxuXHRcdFx0XHQvLyBhZGQgcHJldmlvdXMgc3RhdGUgdG8gbWVyZ2VkIGxpc3RcclxuXHRcdFx0XHRtZXJnZWRTdGF0ZXMucHVzaChwcmV2aW91c1N0YXRlKTtcclxuXHJcblx0XHRcdFx0Ly8gYWRkIHByZXZpb3VzIHN0YXRlIHRvIHRvLWJlLXVwZGF0ZWQgbGlzdFxyXG5cdFx0XHRcdHRvQmVVcGRhdGVkU3RhdGVzLnB1c2gocHJldmlvdXNTdGF0ZSk7XHJcblxyXG5cdFx0XHRcdC8vIGVtb3ZlIHN0YXRlIGZyb20gY3VycmVudCBzdGF0ZXNcclxuXHRcdFx0XHRjdXJyZW50U3RhdGVzLnNwbGljZShwb3MsIDEpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gYWRkIHByZXZpb3VzIHN0YXRlIHRvIHRvVXBkYXRlZCBhbmQgbWVyZ2VkIGZvciB0aGUgZm9sbG93aW5nIHR3byBjb25kaXRpb25zOlxyXG5cdFx0XHQvLyAgMS4gcHJldmlvdXMgY29vbGRvd24gdGltZSB3aW5zLCBvclxyXG5cdFx0XHQvLyAgMi4gY29vbGRvd24gdGltZXMgYXJlIHRoZSBzYW1lIGFuZCBwcmV2aW91cyBub21pbmF0aW9uIHdpbnNcclxuXHRcdFx0aWYgKHByZXZpb3VzU3RhdGUuZ2V0Q29vbGRvd25TdGFydERhdGUoKSA+IGN1cnJlbnRTdGF0ZS5nZXRDb29sZG93blN0YXJ0RGF0ZSgpXHJcblx0XHRcdFx0fHwgKHByZXZpb3VzU3RhdGUuZ2V0Q29vbGRvd25TdGFydERhdGUoKSA9PT0gY3VycmVudFN0YXRlLmdldENvb2xkb3duU3RhcnREYXRlKClcclxuXHRcdFx0XHRcdCYmIHByZXZpb3VzU3RhdGUuTGFzdE5vbWluYXRpb25UaW1lVXRjID4gY3VycmVudFN0YXRlLkxhc3ROb21pbmF0aW9uVGltZVV0YylcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0bWVyZ2VkU3RhdGVzLnB1c2gocHJldmlvdXNTdGF0ZSk7XHJcblxyXG5cdFx0XHRcdHRvQmVVcGRhdGVkU3RhdGVzLnB1c2gocHJldmlvdXNTdGF0ZSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gYWRkIGN1cnJlbnQgc3RhdGUgdG8gbWVyZ2VkXHJcblx0XHRcdFx0bWVyZ2VkU3RhdGVzLnB1c2goY3VycmVudFN0YXRlKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gcmVtb3ZlIHN0YXRlIGZyb20gY3VycmVudCBzdGF0ZXNcclxuXHRcdFx0Y3VycmVudFN0YXRlcy5zcGxpY2UocG9zLCAxKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Ly8gZm9yIHRoZSByZW1haW5pbmcgY3VycmVudCBzdGF0ZXNcclxuXHRpZiAoY3VycmVudFN0YXRlcykge1xyXG5cdFx0Y3VycmVudFN0YXRlcy5mb3JFYWNoKChjdXJyZW50KSA9PiB7XHJcblx0XHRcdC8vIGFkZCBjdXJyZW50IHN0YXRlIHRvIG1lcmdlZFxyXG5cdFx0XHRtZXJnZWRTdGF0ZXMucHVzaChjdXJyZW50KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0c3RhdGVDb2xsZWN0aW9ucy5hZGQoU3RhdGVMaXN0VHlwZS5NZXJnZWQsIG1lcmdlZFN0YXRlcyk7XHJcblxyXG5cdGlmICh0b0JlVXBkYXRlZFN0YXRlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRzdGF0ZUNvbGxlY3Rpb25zLmFkZChTdGF0ZUxpc3RUeXBlLlRvQmVVcGRhdGVkLCB0b0JlVXBkYXRlZFN0YXRlcyk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gc3RhdGVDb2xsZWN0aW9ucztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE1lcmdlQW5kVXBkYXRlU3VydmV5QWN0aXZhdGlvblN0YXRzKHByZXZpb3VzU3RhdHM6IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbixcclxuXHRjdXJyZW50U3RhdHM6IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbik6IElLZXllZENvbGxlY3Rpb248U3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uPiB7XHJcblxyXG5cdGNvbnN0IHN0YXRzQ29sbGVjdGlvbnM6IElLZXllZENvbGxlY3Rpb248U3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uPiA9IG5ldyBJdGVtQ29sbGVjdGlvbjxTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb24+KCk7XHJcblxyXG5cdC8vIEhhbmRsZSBwcmV2aW91c1N0YXRzIGFuZC9vciBjdXJyZW50U3RhdHMgZXF1YWwgdG8gbnVsbFxyXG5cdGlmICghcHJldmlvdXNTdGF0cyAmJiAhY3VycmVudFN0YXRzKSB7XHJcblx0XHRyZXR1cm4gc3RhdHNDb2xsZWN0aW9ucztcclxuXHR9XHJcblxyXG5cdGlmICghcHJldmlvdXNTdGF0cykge1xyXG5cdFx0c3RhdHNDb2xsZWN0aW9ucy5hZGQoU3RhdGVMaXN0VHlwZS5NZXJnZWQsIGN1cnJlbnRTdGF0cyk7XHJcblx0XHRyZXR1cm4gc3RhdHNDb2xsZWN0aW9ucztcclxuXHR9XHJcblxyXG5cdGlmICghY3VycmVudFN0YXRzKSB7XHJcblx0XHRzdGF0c0NvbGxlY3Rpb25zLmFkZChTdGF0ZUxpc3RUeXBlLk1lcmdlZCwgcHJldmlvdXNTdGF0cyk7XHJcblx0XHRzdGF0c0NvbGxlY3Rpb25zLmFkZChTdGF0ZUxpc3RUeXBlLlRvQmVVcGRhdGVkLCBwcmV2aW91c1N0YXRzKTtcclxuXHRcdHJldHVybiBzdGF0c0NvbGxlY3Rpb25zO1xyXG5cdH1cclxuXHJcblx0Ly8gRW51bWVyYXRlIHByZWl2b3VzIHN0YXRzXHJcblx0Y29uc3QgbWVyZ2VkU3RhdHM6IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbiA9IG5ldyBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb24oKTtcclxuXHRjb25zdCB0b0JlVXBkYXRlZFN0YXRzOiBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb24gPSBuZXcgU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uKCk7XHJcblxyXG5cdGNvbnN0IHByZXZpb3VzU3RhdHNEaWN0aW9uYXJ5OiBJRGljdGlvbmFyeTxTdXJ2ZXlBY3RpdmF0aW9uU3RhdHM+ID0gcHJldmlvdXNTdGF0cy5nZXRTdGF0cygpO1xyXG5cdGNvbnN0IGN1cnJlbnRTdGF0c0RpY3Rpb25hcnk6IElEaWN0aW9uYXJ5PFN1cnZleUFjdGl2YXRpb25TdGF0cz4gPSBjdXJyZW50U3RhdHMuZ2V0U3RhdHMoKTtcclxuXHJcblx0Zm9yIChjb25zdCBzdXJ2ZXlJZCBpbiBwcmV2aW91c1N0YXRzRGljdGlvbmFyeSkge1xyXG5cdFx0aWYgKHByZXZpb3VzU3RhdHNEaWN0aW9uYXJ5Lmhhc093blByb3BlcnR5KHN1cnZleUlkKSkge1xyXG5cdFx0XHQvLyBpZiBhbiB1cGRhdGVkIHN0YXQgaXMgbm90IGZvdW5kXHJcblx0XHRcdGNvbnN0IGN1cnJlbnRBY3RpdmF0aW9uU3RhdHM6IFN1cnZleUFjdGl2YXRpb25TdGF0cyA9IGN1cnJlbnRTdGF0c0RpY3Rpb25hcnlbc3VydmV5SWRdO1xyXG5cdFx0XHRpZiAoIWN1cnJlbnRBY3RpdmF0aW9uU3RhdHMpIHtcclxuXHRcdFx0XHQvLyBhZGQgdG8gbWVyZ2VkIGNvbGxlY3Rpb25cclxuXHRcdFx0XHRtZXJnZWRTdGF0cy5hZGRTdGF0cyhzdXJ2ZXlJZCwgcHJldmlvdXNTdGF0c0RpY3Rpb25hcnlbc3VydmV5SWRdKTtcclxuXHRcdFx0XHQvLyBhZGQgdG8tYmUtdXBkYXRlZCBjb2xsZWN0aW9uXHJcblx0XHRcdFx0dG9CZVVwZGF0ZWRTdGF0cy5hZGRTdGF0cyhzdXJ2ZXlJZCwgcHJldmlvdXNTdGF0c0RpY3Rpb25hcnlbc3VydmV5SWRdKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBpZiBwcmV2aW91cyBzdGF0IGhhcyBoaWdoZXIgYWN0aXZhdGlvbiB0aW1lXHJcblx0XHRcdGNvbnN0IHByZXZpb3VzQWN0aXZhdGlvblN0YXRzOiBTdXJ2ZXlBY3RpdmF0aW9uU3RhdHMgPSBwcmV2aW91c1N0YXRzRGljdGlvbmFyeVtzdXJ2ZXlJZF07XHJcblx0XHRcdGlmIChwcmV2aW91c0FjdGl2YXRpb25TdGF0cy5BY3RpdmF0aW9uVGltZVV0YyA+IGN1cnJlbnRBY3RpdmF0aW9uU3RhdHMuQWN0aXZhdGlvblRpbWVVdGMpIHtcclxuXHRcdFx0XHQvLyBhZGQgdG8gbWVyZ2VkIGNvbGxlY3Rpb25cclxuXHRcdFx0XHRtZXJnZWRTdGF0cy5hZGRTdGF0cyhzdXJ2ZXlJZCwgcHJldmlvdXNTdGF0c0RpY3Rpb25hcnlbc3VydmV5SWRdKTtcclxuXHRcdFx0XHQvLyBhZGQgdG8tYmUtdXBkYXRlZCBjb2xsZWN0aW9uXHJcblx0XHRcdFx0dG9CZVVwZGF0ZWRTdGF0cy5hZGRTdGF0cyhzdXJ2ZXlJZCwgcHJldmlvdXNTdGF0c0RpY3Rpb25hcnlbc3VydmV5SWRdKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBhZGQgdG8gY3VycmVudCBzdGF0IG1lcmdlZCBjb2xsZWN0aW9uXHJcblx0XHRcdFx0bWVyZ2VkU3RhdHMuYWRkU3RhdHMoc3VydmV5SWQsIGN1cnJlbnRTdGF0c0RpY3Rpb25hcnlbc3VydmV5SWRdKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gZGVsZXRlIGZyb20gc3RhdHNcclxuXHRcdFx0ZGVsZXRlIGN1cnJlbnRTdGF0c0RpY3Rpb25hcnlbc3VydmV5SWRdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gbWVyZ2UgYW55IHJlbWFpbmluZyBzdGF0c1xyXG5cdGZvciAoY29uc3Qgc3VydmV5SWQgaW4gY3VycmVudFN0YXRzRGljdGlvbmFyeSkge1xyXG5cdFx0aWYgKGN1cnJlbnRTdGF0c0RpY3Rpb25hcnkuaGFzT3duUHJvcGVydHkoc3VydmV5SWQpKSB7XHJcblx0XHRcdG1lcmdlZFN0YXRzLmFkZFN0YXRzKHN1cnZleUlkLCBjdXJyZW50U3RhdHNEaWN0aW9uYXJ5W3N1cnZleUlkXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBhbHdheXMgcmV0dXJuIG1lcmdlZCBsaXN0XHJcblx0c3RhdHNDb2xsZWN0aW9ucy5hZGQoU3RhdGVMaXN0VHlwZS5NZXJnZWQsIG1lcmdlZFN0YXRzKTtcclxuXHJcblx0Ly8gc2luY2UgZGljdGlvbmFyaWVzIGRvbid0IGhhdmUgYW4gZW1wdHkgY2hlY2ssIGVudW1lcmF0ZSB0aGUgIGZpcnN0IGVudHJ5IHRvIGNoZWNrIGZvciBub24tZW1wdHlcclxuXHRjb25zdCB0b0JlVXBkYXRlZFN0YXRzRGljdGlvbmFyeTogSURpY3Rpb25hcnk8U3VydmV5QWN0aXZhdGlvblN0YXRzPiA9IHRvQmVVcGRhdGVkU3RhdHMuZ2V0U3RhdHMoKTtcclxuXHRmb3IgKGNvbnN0IHRvQmVVcGRhdGVkIGluIHRvQmVVcGRhdGVkU3RhdHNEaWN0aW9uYXJ5KSB7XHJcblx0XHRpZiAodG9CZVVwZGF0ZWRTdGF0c0RpY3Rpb25hcnkuaGFzT3duUHJvcGVydHkodG9CZVVwZGF0ZWQpKSB7XHJcblx0XHRcdC8vIG5vdCBlbXB0eSwgcmV0dXJuIHRvLWJlLXVwZGF0ZWRcclxuXHRcdFx0c3RhdHNDb2xsZWN0aW9ucy5hZGQoU3RhdGVMaXN0VHlwZS5Ub0JlVXBkYXRlZCwgdG9CZVVwZGF0ZWRTdGF0cyk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHN0YXRzQ29sbGVjdGlvbnM7XHJcbn1cclxuXHJcbmNvbnN0IFNFVFRJTkdfREFUQV9PUEVOX1RBRyA9IFwiPGRhdGE+XCI7XHJcbmNvbnN0IFNFVFRJTkdfREFUQV9DTE9TRV9UQUcgPSBcIjwvZGF0YT5cIjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/StateProviderHelpers.js\n')},"../FloodgateCore/dist/src/SurveyActivityListener.js":function(){"use strict";eval('\nvar ActivityTracker = __webpack_require__(/*! ./ActivityTracker */ "../FloodgateCore/dist/src/ActivityTracker.js");\nvar Constants_1 = __webpack_require__(/*! ./Constants */ "../FloodgateCore/dist/src/Constants.js");\nvar IndexedTracker_1 = __webpack_require__(/*! ./IndexedTracker */ "../FloodgateCore/dist/src/IndexedTracker.js");\nvar SurveyStatCollectionEventActivity_1 = __webpack_require__(/*! ./SurveyStatCollectionEventActivity */ "../FloodgateCore/dist/src/SurveyStatCollectionEventActivity.js");\nvar Utils_1 = __webpack_require__(/*! ./Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar queuedActivities = [];\nvar pendingActivityCount = 0;\nvar previousTrackedActivityMap = {};\n/**\n * This class tracks log calls against named activity strings (matched on strict case-sensitive equality)\n * and calls the provided callback when all activity thresholds for a given survey have been crossed\n */\nvar SurveyActivityListener = /** @class */ (function () {\n    function SurveyActivityListener(callback, loggerCallback) {\n        // Save incoming activity context data in a dictionary with SurveyID as key, activity data array as value\n        this.activityContext = {};\n        if (!callback) {\n            throw new Error("callback must not be null");\n        }\n        this.trackedActivityMap = {};\n        this.callback = callback;\n        this.loggerCallback = loggerCallback;\n    }\n    SurveyActivityListener.resetSessionActivity = function () {\n        previousTrackedActivityMap = {};\n    };\n    SurveyActivityListener.prototype.logActivity = function (activityName, increment, context) {\n        if (increment === void 0) { increment = 1; }\n        this.logActivity_private(activityName, 0 /* Increment */, increment, null, context);\n    };\n    SurveyActivityListener.prototype.logActivityStartTime = function (activityName, startTime) {\n        this.logActivity_private(activityName, 1 /* StartTime */, 0, startTime, null);\n    };\n    SurveyActivityListener.prototype.logActivityStopTime = function (activityName, stopTime) {\n        this.logActivity_private(activityName, 2 /* StopTime */, 0, stopTime, null);\n    };\n    SurveyActivityListener.prototype.SetActivityTrackingContracts = function (activityTrackingContracts, baseline) {\n        if (baseline === void 0) { baseline = new SurveyStatCollectionEventActivity_1.SurveyStatCollectionEventActivity(); }\n        var duplicateCounter = 0;\n        if (!activityTrackingContracts || activityTrackingContracts.length === 0 || !baseline) {\n            return;\n        }\n        // Populate a new map based on the passed in surveys, but propagating and tracking activity counts\n        // we may have seen against those events\n        // NOTE: We will lose activity counts for survey events that are no longer relevant.\n        var newMap = {};\n        var trackedSurveyIds = [];\n        for (var _i = 0, activityTrackingContracts_1 = activityTrackingContracts; _i < activityTrackingContracts_1.length; _i++) {\n            var activityTrackingContract = activityTrackingContracts_1[_i];\n            var trackingSet = activityTrackingContract.trackingSet;\n            // Added to the new set to make sure they are not duplicated. Based on MSO.\n            if (trackedSurveyIds.indexOf(activityTrackingContract.surveyId) === -1) {\n                trackedSurveyIds.push(activityTrackingContract.surveyId);\n            }\n            else {\n                // Duplicate surveyId being added, count it for the log.\n                duplicateCounter++;\n                continue;\n            }\n            // At this point, the survey\'s activities are safe to add.\n            // Set up the structures we need to transfer baseline counts (from previous sessions) or current counts (from previous trackers)\n            // Both vectors must be sorted in the same order as the trackingSet.List items\n            var baselineStats = baseline.getBySurveyId(activityTrackingContract.surveyId);\n            var baselineCounts = [trackingSet.getList().length];\n            var currentIndexedTrackers = new Array(trackingSet.getList().length);\n            var currentBaselineIndex = 0;\n            var currentIndex = 0;\n            for (var _a = 0, _b = trackingSet.getList(); _a < _b.length; _a++) {\n                var trackingData = _b[_a];\n                // Baseline stats count is 0 for events with "IsAggregate = false"\n                baselineCounts[currentIndex] = 0;\n                if (trackingData.getIsAggregate() && baselineStats && currentBaselineIndex < baselineStats.Counts.length) {\n                    baselineCounts[currentIndex] = baselineStats.Counts[currentBaselineIndex++];\n                }\n                // Session stats may be available in the previous trackedActivityMap\n                // Transfer the old "current session" count to the new tracker\n                // Is set to null if not available\n                if (previousTrackedActivityMap[trackingData.getActivity()]) {\n                    for (var _c = 0, _d = previousTrackedActivityMap[trackingData.getActivity()]; _c < _d.length; _c++) {\n                        var tracker = _d[_c];\n                        if (tracker.surveyId === activityTrackingContract.surveyId) {\n                            currentIndexedTrackers[currentIndex] = tracker;\n                            break;\n                        }\n                    }\n                }\n                currentIndex++;\n            }\n            // Make a new tracker and init the counts appropriately.\n            var newTracker = new ActivityTracker(trackingSet);\n            // If in a future change we start keeping trackers registered past activation, this will change\n            newTracker.initCounts(baselineCounts, currentIndexedTrackers, false /*wasActivatedThisSession*/);\n            // Setup the indexed trackers\n            for (var _e = 0, _f = newTracker.generateActivityIndexList(); _e < _f.length; _e++) {\n                var activityIndex = _f[_e];\n                var indexedTracker = new IndexedTracker_1.IndexedTracker();\n                indexedTracker.index = activityIndex.index;\n                indexedTracker.surveyId = activityTrackingContract.surveyId;\n                indexedTracker.tracker = newTracker;\n                if (!newMap[activityIndex.activity]) {\n                    newMap[activityIndex.activity] = [];\n                }\n                // Register the new tracker in our new map\n                newMap[activityIndex.activity].push(indexedTracker);\n            }\n        }\n        if (duplicateCounter > 0) {\n            var telemetryLogger = this.loggerCallback && this.loggerCallback();\n            if (telemetryLogger) {\n                telemetryLogger.log_Error(Constants_1.TelemetryEvent.SurveyActivity.SetActivityTrackingContracts.DuplicateSurveyID, "Duplicate surveyId passed in activityTrackingContracts. Duplicate count: " + duplicateCounter);\n            }\n        }\n        // Set the new map in place of the old\n        this.copyObject(this.trackedActivityMap, newMap);\n    };\n    SurveyActivityListener.prototype.clearSurveys = function () {\n        var _this = this;\n        Object.getOwnPropertyNames(this.trackedActivityMap).forEach(function (key) {\n            delete _this.trackedActivityMap[key];\n        });\n    };\n    SurveyActivityListener.prototype.saveSessionTrackingActivity = function (activity) {\n        // Set the new activity in place of the old\n        previousTrackedActivityMap[activity] = this.trackedActivityMap[activity];\n    };\n    // Get the indexedTracker that corresponds to the SurveyID and return that count. otherwise return 0.\n    SurveyActivityListener.prototype.getCount = function (activity, surveyId) {\n        var indexedTracker = this.getIndexedTracker(activity, surveyId);\n        if (!indexedTracker) {\n            return 0;\n        }\n        return indexedTracker.tracker.getCount(indexedTracker.index);\n    };\n    SurveyActivityListener.prototype.getSessionCount = function (activity, surveyId) {\n        var indexedTracker = this.getIndexedTracker(activity, surveyId);\n        if (!indexedTracker) {\n            return 0;\n        }\n        return indexedTracker.tracker.getSessionCount(indexedTracker.index);\n    };\n    /**\n     * An atomic get-and-set method.  Returns the current SessionCount, resetting it to zero and adding it into the established baseline\n     */\n    SurveyActivityListener.prototype.moveSessionCountIntoBaseCount = function (activity, surveyId) {\n        var indexedTracker = this.getIndexedTracker(activity, surveyId);\n        if (!indexedTracker) {\n            return 0;\n        }\n        return indexedTracker.tracker.moveSessionCountIntoBaseCount(indexedTracker.index);\n    };\n    SurveyActivityListener.prototype.getSurveyIds = function (activity) {\n        if (Utils_1.isNOU(activity)) {\n            return undefined;\n        }\n        var indexedTrackers = this.trackedActivityMap[activity];\n        if (!indexedTrackers) {\n            return undefined;\n        }\n        var surveyIds = indexedTrackers.map(function (indexedTracker) { return indexedTracker.surveyId; });\n        return surveyIds;\n    };\n    SurveyActivityListener.prototype.setCallback = function (callback) {\n        this.callback = callback;\n    };\n    SurveyActivityListener.prototype.UpdateActivityTrackingContracts = function (surveyList) {\n        if (Utils_1.isNOU(surveyList) || Object.keys(surveyList).length === 0) {\n            this.clearSurveys();\n            return;\n        }\n        for (var key in this.trackedActivityMap) {\n            if (this.trackedActivityMap.hasOwnProperty(key)) {\n                var tracker = this.trackedActivityMap[key];\n                // loop through tracker and remove the ones not associate with given surveys\n                for (var i = tracker.length - 1; i >= 0; --i) {\n                    if (surveyList.hasOwnProperty(tracker[i].surveyId)) {\n                        continue;\n                    }\n                    tracker.splice(i, 1);\n                }\n            }\n        }\n    };\n    SurveyActivityListener.prototype.getIndexedTracker = function (activity, surveyId) {\n        var indexedTrackers = this.trackedActivityMap[activity];\n        if (!indexedTrackers) {\n            return undefined;\n        }\n        var indexedTracker;\n        for (var _i = 0, indexedTrackers_1 = indexedTrackers; _i < indexedTrackers_1.length; _i++) {\n            var tracker = indexedTrackers_1[_i];\n            if (tracker.surveyId === surveyId) {\n                indexedTracker = tracker;\n                break;\n            }\n        }\n        return indexedTracker;\n    };\n    SurveyActivityListener.prototype.resetQueuedActivities = function () {\n        queuedActivities = [];\n    };\n    SurveyActivityListener.prototype.logActivity_private = function (activityName, logType, increment, timestamp, context) {\n        var _this = this;\n        if (this.callback && !this.callback.shouldAcceptActivity(activityName)) {\n            pendingActivityCount++;\n            if (queuedActivities.length < SurveyActivityListener.MaxPendingActivitiesQueueSize) {\n                queuedActivities.push({ activityName: activityName, logType: logType, increment: increment, timestamp: timestamp });\n            }\n        }\n        // Count any activities that are posted before \'FloodgateFirstStart\' activity happens\n        if (activityName === SurveyActivityListener.FloodgateStartActivityName) {\n            if (pendingActivityCount > 0) {\n                // Get the activity names of the queued activities for telemetry, send only first 25.\n                var activityNames = queuedActivities.slice(0, 25).map(function (queuedActivity) { return queuedActivity.activityName; });\n                var telemetryLogger = this.loggerCallback && this.loggerCallback();\n                if (telemetryLogger) {\n                    // Sampling this telemetry event to 5%\n                    telemetryLogger.log_Event(Constants_1.TelemetryEvent.SurveyActivity.LogActivity.EventsReprocessed, {\n                        ActivityNames: JSON.stringify(activityNames),\n                        Count: queuedActivities.length,\n                        Dropped: pendingActivityCount - queuedActivities.length,\n                    }, 0.05);\n                }\n                // replay all the queued activities one by one as the floodgate engine has started now\n                queuedActivities.map(function (queuedActivity) { return _this.logActivity_core(queuedActivity.activityName, queuedActivity.logType, queuedActivity.increment, queuedActivity.timestamp, context); });\n            }\n            pendingActivityCount = 0;\n            this.resetQueuedActivities();\n        }\n        this.logActivity_core(activityName, logType, increment, timestamp, context);\n    };\n    SurveyActivityListener.prototype.logActivity_core = function (activityName, logType, increment, timestamp, context) {\n        var indexedTrackers = this.trackedActivityMap[activityName];\n        if (!indexedTrackers || indexedTrackers.length === 0) {\n            return;\n        }\n        var indices = [];\n        // If we have more than one tracker shuffle trackers to randomize which is evaluated first\n        if (indexedTrackers.length > 1) {\n            indices = new Array(indexedTrackers.length);\n            for (var i = 0; i < indices.length; i++) {\n                indices[i] = i;\n            }\n            indices = Utils_1.fyShuffle(indices); // shuffle and reassign\n        }\n        else {\n            indices.push(0); // just have a zero. Shuffling is not needed.\n        }\n        // Loop through trackers in shuffled order\n        for (var _i = 0, indices_1 = indices; _i < indices_1.length; _i++) {\n            var index = indices_1[_i];\n            var tracker = indexedTrackers[index];\n            switch (logType) {\n                case 1 /* StartTime */: {\n                    tracker.tracker.startTime(tracker.index, timestamp);\n                    continue; // Look at the next tracker. Increment not needed.\n                }\n                case 2 /* StopTime */: {\n                    increment = tracker.tracker.stopTime(tracker.index, timestamp);\n                    // fall through to increment the activity as well.\n                }\n                case 0 /* Increment */: {\n                    break;\n                }\n                default: {\n                    continue;\n                }\n            }\n            if (context) {\n                var trackerSurveyId = tracker.surveyId;\n                this.activityContext[trackerSurveyId] = this.activityContext[trackerSurveyId] || [];\n                this.activityContext[trackerSurveyId].push({ activityName: activityName, context: context });\n            }\n            var result = tracker.tracker.incrementActivity(tracker.index, increment);\n            if (result === 2 /* AllActivitiesActivated */) {\n                // Check the activated surveys list to ensure whether any previous survey is still in process\n                // If not, the length should be 1 and call to execute this survey right away\n                // This should only happen if calling to Governance Service, due to the call is asynchronous\n                this.executeCallback(tracker.surveyId);\n                break;\n                /* Breaking here to let one and only one callback to be made from a logActivity call.\n                This ensures only one survey can fully \'trigger\' for a logActivity call. Others that would also\n                have triggered must wait until the next call to trigger (without there being a cooldown, of course).\n                */\n            }\n        }\n    };\n    SurveyActivityListener.prototype.executeCallback = function (surveyId) {\n        this.callback.run(surveyId, this.activityContext[surveyId]);\n    };\n    SurveyActivityListener.prototype.copyObject = function (target, source) {\n        Object.keys(source).forEach(function (key) {\n            target[key] = source[key];\n        });\n    };\n    SurveyActivityListener.FloodgateStartActivityName = "FloodgateFirstStart";\n    // The size of the dropped activities is set to 100 due to the following two reasons.\n    // 1) To prevent the array growing too big and causing memory issues.\n    // 2) Based on the telemetry analysis of number of dropped activities, the count is very small and much lesser than 100.\n    SurveyActivityListener.MaxPendingActivitiesQueueSize = 100;\n    return SurveyActivityListener;\n}());\nmodule.exports = SurveyActivityListener;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleUFjdGl2aXR5TGlzdGVuZXIudHM/MWNiZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsbUhBQXFEO0FBUXJELG1HQUE2QztBQUM3QyxrSEFBa0Q7QUFDbEQsMktBQWtIO0FBQ2xILHVGQUEyQztBQUUzQyxJQUFJLGdCQUFnQixHQUFtRCxFQUFFLENBQUM7QUFDMUUsSUFBSSxvQkFBb0IsR0FBVyxDQUFDLENBQUM7QUFDckMsSUFBSSwwQkFBMEIsR0FBdUMsRUFBRSxDQUFDO0FBRXhFOzs7R0FHRztBQUNIO0lBa0JDLGdDQUFtQixRQUEwRCxFQUFFLGNBQWdEO1FBUC9ILHlHQUF5RztRQUNqRyxvQkFBZSxHQUFtQyxFQUFFLENBQUM7UUFPNUQsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM3QztRQUVELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDdEMsQ0FBQztJQW5CYSwyQ0FBb0IsR0FBbEM7UUFDQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQW1CTSw0Q0FBVyxHQUFsQixVQUFtQixZQUFvQixFQUFFLFNBQXFCLEVBQUUsT0FBNEM7UUFBbkUseUNBQXFCO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLHFCQUFrRCxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFTSxxREFBb0IsR0FBM0IsVUFBNEIsWUFBb0IsRUFBRSxTQUFnQjtRQUNqRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxxQkFBa0QsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRU0sb0RBQW1CLEdBQTFCLFVB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Q0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVPLDJDQUFVLEdBQWxCLFVBQW1CLE1BQVUsRUFBRSxNQUFVO1FBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsR0FBRztZQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQTVWYSxpREFBMEIsR0FBRyxxQkFBcUIsQ0FBQztJQUNqRSxxRkFBcUY7SUFDckYscUVBQXFFO0lBQ3JFLHdIQUF3SDtJQUMxRyxvREFBNkIsR0FBRyxHQUFHLENBQUM7SUF5Vm5ELDZCQUFDO0NBQUE7QUFzQkQsaUJBQVMsc0JBQXNCLENBQUMiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9TdXJ2ZXlBY3Rpdml0eUxpc3RlbmVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQWN0aXZpdHlUcmFja2VyIGZyb20gXCIuL0FjdGl2aXR5VHJhY2tlclwiO1xyXG5pbXBvcnQgeyBBY3Rpdml0eVRyYWNraW5nQ29udHJhY3QgfSBmcm9tIFwiLi9BY3Rpdml0eVRyYWNraW5nQ29udHJhY3RcIjtcclxuaW1wb3J0IHsgQWN0aXZpdHlUcmFja2luZ1NldCB9IGZyb20gXCIuL0FjdGl2aXR5VHJhY2tpbmdTZXRcIjtcclxuaW1wb3J0ICogYXMgSUFjdGl2aXR5TGlzdGVuZXIgZnJvbSBcIi4vQXBpL0lBY3Rpdml0eUxpc3RlbmVyXCI7XHJcbmltcG9ydCB7IElGbG9vZGdhdGVUZWxlbWV0cnlMb2dnZXIgfSBmcm9tIFwiLi9BcGkvSUZsb29kZ2F0ZVRlbGVtZXRyeUxvZ2dlclwiO1xyXG5pbXBvcnQgeyBJQ29udGV4dERhdGEgfSBmcm9tIFwiLi9BcGkvSU9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2tcIjtcclxuaW1wb3J0IElTdXJ2ZXkgPSByZXF1aXJlKFwiLi9BcGkvSVN1cnZleVwiKTtcclxuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tIFwiLi9Db21tb25cIjtcclxuaW1wb3J0IHsgVGVsZW1ldHJ5RXZlbnQgfSBmcm9tIFwiLi9Db25zdGFudHNcIjtcclxuaW1wb3J0IHsgSW5kZXhlZFRyYWNrZXIgfSBmcm9tIFwiLi9JbmRleGVkVHJhY2tlclwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHMsIFN1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eSB9IGZyb20gXCIuL1N1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eVwiO1xyXG5pbXBvcnQgeyBmeVNodWZmbGUsIGlzTk9VIH0gZnJvbSBcIi4vVXRpbHNcIjtcclxuXHJcbmxldCBxdWV1ZWRBY3Rpdml0aWVzOiBTdXJ2ZXlBY3Rpdml0eUxpc3RlbmVyLklRdWV1ZWRBY3Rpdml0eVBhcmFtc1tdID0gW107XHJcbmxldCBwZW5kaW5nQWN0aXZpdHlDb3VudDogbnVtYmVyID0gMDtcclxubGV0IHByZXZpb3VzVHJhY2tlZEFjdGl2aXR5TWFwOiB7IFtpZDogc3RyaW5nXTogSW5kZXhlZFRyYWNrZXJbXSB9ID0ge307XHJcblxyXG4vKipcclxuICogVGhpcyBjbGFzcyB0cmFja3MgbG9nIGNhbGxzIGFnYWluc3QgbmFtZWQgYWN0aXZpdHkgc3RyaW5ncyAobWF0Y2hlZCBvbiBzdHJpY3QgY2FzZS1zZW5zaXRpdmUgZXF1YWxpdHkpXHJcbiAqIGFuZCBjYWxscyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgd2hlbiBhbGwgYWN0aXZpdHkgdGhyZXNob2xkcyBmb3IgYSBnaXZlbiBzdXJ2ZXkgaGF2ZSBiZWVuIGNyb3NzZWRcclxuICovXHJcbmNsYXNzIFN1cnZleUFjdGl2aXR5TGlzdGVuZXIgaW1wbGVtZW50cyBJQWN0aXZpdHlMaXN0ZW5lciB7XHJcblx0cHVibGljIHN0YXRpYyBGbG9vZGdhdGVTdGFydEFjdGl2aXR5TmFtZSA9IFwiRmxvb2RnYXRlRmlyc3RTdGFydFwiO1xyXG5cdC8vIFRoZSBzaXplIG9mIHRoZSBkcm9wcGVkIGFjdGl2aXRpZXMgaXMgc2V0IHRvIDEwMCBkdWUgdG8gdGhlIGZvbGxvd2luZyB0d28gcmVhc29ucy5cclxuXHQvLyAxKSBUbyBwcmV2ZW50IHRoZSBhcnJheSBncm93aW5nIHRvbyBiaWcgYW5kIGNhdXNpbmcgbWVtb3J5IGlzc3Vlcy5cclxuXHQvLyAyKSBCYXNlZCBvbiB0aGUgdGVsZW1ldHJ5IGFuYWx5c2lzIG9mIG51bWJlciBvZiBkcm9wcGVkIGFjdGl2aXRpZXMsIHRoZSBjb3VudCBpcyB2ZXJ5IHNtYWxsIGFuZCBtdWNoIGxlc3NlciB0aGFuIDEwMC5cclxuXHRwdWJsaWMgc3RhdGljIE1heFBlbmRpbmdBY3Rpdml0aWVzUXVldWVTaXplID0gMTAwO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIHJlc2V0U2Vzc2lvbkFjdGl2aXR5KCk6IHZvaWQge1xyXG5cdFx0cHJldmlvdXNUcmFja2VkQWN0aXZpdHlNYXAgPSB7fTtcclxuXHR9XHJcblxyXG5cdC8vIFNhdmXigK9pbmNvbWluZ+KAr2FjdGl2aXR5IGNvbnRleHTigK9kYXRh4oCvaW7igK9h4oCvZGljdGlvbmFyeeKAr3dpdGjigK9TdXJ2ZXlJRCBhc+KAr2tleSzigK9hY3Rpdml0eeKAr2RhdGHigK9hcnJheeKAr2Fz4oCvdmFsdWVcclxuXHRwcml2YXRlIGFjdGl2aXR5Q29udGV4dDogUmVjb3JkPHN0cmluZyzigK9JQ29udGV4dERhdGFbXT4gPSB7fTtcclxuXHJcblx0cHJpdmF0ZSB0cmFja2VkQWN0aXZpdHlNYXA6IHsgW2lkOiBzdHJpbmddOiBJbmRleGVkVHJhY2tlcltdIH07XHJcblx0cHJpdmF0ZSBjYWxsYmFjazogU3VydmV5QWN0aXZpdHlMaXN0ZW5lci5JQWN0aXZpdHlMaXN0ZW5lckNhbGxiYWNrO1xyXG5cdHByaXZhdGUgbG9nZ2VyQ2FsbGJhY2s6ICgpID0+IElGbG9vZGdhdGVUZWxlbWV0cnlMb2dnZXI7XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihjYWxsYmFjazogU3VydmV5QWN0aXZpdHlMaXN0ZW5lci5JQWN0aXZpdHlMaXN0ZW5lckNhbGxiYWNrLCBsb2dnZXJDYWxsYmFjaz86ICgpID0+IElGbG9vZGdhdGVUZWxlbWV0cnlMb2dnZXIpIHtcclxuXHRcdGlmICghY2FsbGJhY2spIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiY2FsbGJhY2sgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnRyYWNrZWRBY3Rpdml0eU1hcCA9IHt9O1xyXG5cdFx0dGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG5cdFx0dGhpcy5sb2dnZXJDYWxsYmFjayA9IGxvZ2dlckNhbGxiYWNrO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGxvZ0FjdGl2aXR5KGFjdGl2aXR5TmFtZTogc3RyaW5nLCBpbmNyZW1lbnQ6IG51bWJlciA9IDEsIGNvbnRleHQ/OuKAr0lBY3Rpdml0eUxpc3RlbmVyLklBY3Rpdml0eUNvbnRleHQpOiB2b2lkIHtcclxuXHRcdHRoaXMubG9nQWN0aXZpdHlfcHJpdmF0ZShhY3Rpdml0eU5hbWUsIFN1cnZleUFjdGl2aXR5TGlzdGVuZXIuTG9nQWN0aW9uVHlwZS5JbmNyZW1lbnQsIGluY3JlbWVudCwgbnVsbCwgY29udGV4dCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgbG9nQWN0aXZpdHlTdGFydFRpbWUoYWN0aXZpdHlOYW1lOiBzdHJpbmcsIHN0YXJ0VGltZT86IERhdGUpOiB2b2lkIHtcclxuXHRcdHRoaXMubG9nQWN0aXZpdHlfcHJpdmF0ZShhY3Rpdml0eU5hbWUsIFN1cnZleUFjdGl2aXR5TGlzdGVuZXIuTG9nQWN0aW9uVHlwZS5TdGFydFRpbWUsIDAsIHN0YXJ0VGltZSwgbnVsbCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgbG9nQWN0aXZpdHlTdG9wVGltZShhY3Rpdml0eU5hbWU6IHN0cmluZywgc3RvcFRpbWU/OiBEYXRlKTogdm9pZCB7XHJcblx0XHR0aGlzLmxvZ0FjdGl2aXR5X3ByaXZhdGUoYWN0aXZpdHlOYW1lLCBTdXJ2ZXlBY3Rpdml0eUxpc3RlbmVyLkxvZ0FjdGlvblR5cGUuU3RvcFRpbWUsIDAsIHN0b3BUaW1lLCBudWxsKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBTZXRBY3Rpdml0eVRyYWNraW5nQ29udHJhY3RzKGFjdGl2aXR5VHJhY2tpbmdDb250cmFjdHM6IEFjdGl2aXR5VHJhY2tpbmdDb250cmFjdFtdLFxyXG5cdFx0YmFzZWxpbmUgPSBuZXcgU3VydmV5U3RhdENvbGxlY3Rpb25FdmVudEFjdGl2aXR5KCkpOiB2b2lkIHtcclxuXHJcblx0XHRsZXQgZHVwbGljYXRlQ291bnRlciA9IDA7XHJcblxyXG5cdFx0aWYgKCFhY3Rpdml0eVRyYWNraW5nQ29udHJhY3RzIHx8IGFjdGl2aXR5VHJhY2tpbmdDb250cmFjdHMubGVuZ3RoID09PSAwIHx8ICFiYXNlbGluZSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUG9wdWxhdGUgYSBuZXcgbWFwIGJhc2VkIG9uIHRoZSBwYXNzZWQgaW4gc3VydmV5cywgYnV0IHByb3BhZ2F0aW5nIGFuZCB0cmFja2luZyBhY3Rpdml0eSBjb3VudHNcclxuXHRcdC8vIHdlIG1heSBoYXZlIHNlZW4gYWdhaW5zdCB0aG9zZSBldmVudHNcclxuXHRcdC8vIE5PVEU6IFdlIHdpbGwgbG9zZSBhY3Rpdml0eSBjb3VudHMgZm9yIHN1cnZleSBldmVudHMgdGhhdCBhcmUgbm8gbG9uZ2VyIHJlbGV2YW50LlxyXG5cdFx0Y29uc3QgbmV3TWFwOiB7IFtpZDogc3RyaW5nXTogSW5kZXhlZFRyYWNrZXJbXSB9ID0ge307XHJcblx0XHRjb25zdCB0cmFja2VkU3VydmV5SWRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgYWN0aXZpdHlUcmFja2luZ0NvbnRyYWN0IG9mIGFjdGl2aXR5VHJhY2tpbmdDb250cmFjdHMpIHtcclxuXHRcdFx0Y29uc3QgdHJhY2tpbmdTZXQ6IEFjdGl2aXR5VHJhY2tpbmdTZXQgPSBhY3Rpdml0eVRyYWNraW5nQ29udHJhY3QudHJhY2tpbmdTZXQ7XHJcblxyXG5cdFx0XHQvLyBBZGRlZCB0byB0aGUgbmV3IHNldCB0byBtYWtlIHN1cmUgdGhleSBhcmUgbm90IGR1cGxpY2F0ZWQuIEJhc2VkIG9uIE1TTy5cclxuXHRcdFx0aWYgKHRyYWNrZWRTdXJ2ZXlJZHMuaW5kZXhPZihhY3Rpdml0eVRyYWNraW5nQ29udHJhY3Quc3VydmV5SWQpID09PSAtMSkge1xyXG5cdFx0XHRcdHRyYWNrZWRTdXJ2ZXlJZHMucHVzaChhY3Rpdml0eVRyYWNraW5nQ29udHJhY3Quc3VydmV5SWQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIER1cGxpY2F0ZSBzdXJ2ZXlJZCBiZWluZyBhZGRlZCwgY291bnQgaXQgZm9yIHRoZSBsb2cuXHJcblx0XHRcdFx0ZHVwbGljYXRlQ291bnRlcisrO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCB0aGUgc3VydmV5J3MgYWN0aXZpdGllcyBhcmUgc2FmZSB0byBhZGQuXHJcblx0XHRcdC8vIFNldCB1cCB0aGUgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIHRyYW5zZmVyIGJhc2VsaW5lIGNvdW50cyAoZnJvbSBwcmV2aW91cyBzZXNzaW9ucykgb3IgY3VycmVudCBjb3VudHMgKGZyb20gcHJldmlvdXMgdHJhY2tlcnMpXHJcblx0XHRcdC8vIEJvdGggdmVjdG9ycyBtdXN0IGJlIHNvcnRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdHJhY2tpbmdTZXQuTGlzdCBpdGVtc1xyXG5cdFx0XHRjb25zdCBiYXNlbGluZVN0YXRzOiBTdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHMgPSBiYXNlbGluZS5nZXRCeVN1cnZleUlkKGFjdGl2aXR5VHJhY2tpbmdDb250cmFjdC5zdXJ2ZXlJZCk7XHJcblx0XHRcdGNvbnN0IGJhc2VsaW5lQ291bnRzOiBudW1iZXJbXSA9IFt0cmFja2luZ1NldC5nZXRMaXN0KCkubGVuZ3RoXTtcclxuXHRcdFx0Y29uc3QgY3VycmVudEluZGV4ZWRUcmFja2VyczogSW5kZXhlZFRyYWNrZXJbXSA9IG5ldyBBcnJheTxJbmRleGVkVHJhY2tlcj4odHJhY2tpbmdTZXQuZ2V0TGlzdCgpLmxlbmd0aCk7XHJcblxyXG5cdFx0XHRsZXQgY3VycmVudEJhc2VsaW5lSW5kZXggPSAwO1xyXG5cdFx0XHRsZXQgY3VycmVudEluZGV4ID0gMDtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgdHJhY2tpbmdEYXRhIG9mIHRyYWNraW5nU2V0LmdldExpc3QoKSkge1xyXG5cdFx0XHRcdC8vIEJhc2VsaW5lIHN0YXRzIGNvdW50IGlzIDAgZm9yIGV2ZW50cyB3aXRoIFwiSXNBZ2dyZWdhdGUgPSBmYWxzZVwiXHJcblx0XHRcdFx0YmFzZWxpbmVDb3VudHNbY3VycmVudEluZGV4XSA9IDA7XHJcblx0XHRcdFx0aWYgKHRyYWNraW5nRGF0YS5nZXRJc0FnZ3JlZ2F0ZSgpICYmIGJhc2VsaW5lU3RhdHMgJiYgY3VycmVudEJhc2VsaW5lSW5kZXggPCBiYXNlbGluZVN0YXRzLkNvdW50cy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGJhc2VsaW5lQ291bnRzW2N1cnJlbnRJbmRleF0gPSBiYXNlbGluZVN0YXRzLkNvdW50c1tjdXJyZW50QmFzZWxpbmVJbmRleCsrXTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFNlc3Npb24gc3RhdHMgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgcHJldmlvdXMgdHJhY2tlZEFjdGl2aXR5TWFwXHJcblx0XHRcdFx0Ly8gVHJhbnNmZXIgdGhlIG9sZCBcImN1cnJlbnQgc2Vzc2lvblwiIGNvdW50IHRvIHRoZSBuZXcgdHJhY2tlclxyXG5cdFx0XHRcdC8vIElzIHNldCB0byBudWxsIGlmIG5vdCBhdmFpbGFibGVcclxuXHRcdFx0XHRpZiAocHJldmlvdXNUcmFja2VkQWN0aXZpdHlNYXBbdHJhY2tpbmdEYXRhLmdldEFjdGl2aXR5KCldKSB7XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHRyYWNrZXIgb2YgcHJldmlvdXNUcmFja2VkQWN0aXZpdHlNYXBbdHJhY2tpbmdEYXRhLmdldEFjdGl2aXR5KCldKSB7XHJcblx0XHRcdFx0XHRcdGlmICh0cmFja2VyLnN1cnZleUlkID09PSBhY3Rpdml0eVRyYWNraW5nQ29udHJhY3Quc3VydmV5SWQpIHtcclxuXHRcdFx0XHRcdFx0XHRjdXJyZW50SW5kZXhlZFRyYWNrZXJzW2N1cnJlbnRJbmRleF0gPSB0cmFja2VyO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjdXJyZW50SW5kZXgrKztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTWFrZSBhIG5ldyB0cmFja2VyIGFuZCBpbml0IHRoZSBjb3VudHMgYXBwcm9wcmlhdGVseS5cclxuXHRcdFx0Y29uc3QgbmV3VHJhY2tlciA9IG5ldyBBY3Rpdml0eVRyYWNrZXIodHJhY2tpbmdTZXQpO1xyXG5cdFx0XHQvLyBJZiBpbiBhIGZ1dHVyZSBjaGFuZ2Ugd2Ugc3RhcnQga2VlcGluZyB0cmFja2VycyByZWdpc3RlcmVkIHBhc3QgYWN0aXZhdGlvbiwgdGhpcyB3aWxsIGNoYW5nZVxyXG5cdFx0XHRuZXdUcmFja2VyLmluaXRDb3VudHMoYmFzZWxpbmVDb3VudHMsIGN1cnJlbnRJbmRleGVkVHJhY2tlcnMsIGZhbHNlIC8qd2FzQWN0aXZhdGVkVGhpc1Nlc3Npb24qLyk7XHJcblxyXG5cdFx0XHQvLyBTZXR1cCB0aGUgaW5kZXhlZCB0cmFja2Vyc1xyXG5cdFx0XHRmb3IgKGNvbnN0IGFjdGl2aXR5SW5kZXggb2YgbmV3VHJhY2tlci5nZW5lcmF0ZUFjdGl2aXR5SW5kZXhMaXN0KCkpIHtcclxuXHRcdFx0XHRjb25zdCBpbmRleGVkVHJhY2tlciA9IG5ldyBJbmRleGVkVHJhY2tlcigpO1xyXG5cdFx0XHRcdGluZGV4ZWRUcmFja2VyLmluZGV4ID0gYWN0aXZpdHlJbmRleC5pbmRleDtcclxuXHRcdFx0XHRpbmRleGVkVHJhY2tlci5zdXJ2ZXlJZCA9IGFjdGl2aXR5VHJhY2tpbmdDb250cmFjdC5zdXJ2ZXlJZDtcclxuXHRcdFx0XHRpbmRleGVkVHJhY2tlci50cmFja2VyID0gbmV3VHJhY2tlcjtcclxuXHJcblx0XHRcdFx0aWYgKCFuZXdNYXBbYWN0aXZpdHlJbmRleC5hY3Rpdml0eV0pIHtcclxuXHRcdFx0XHRcdG5ld01hcFthY3Rpdml0eUluZGV4LmFjdGl2aXR5XSA9IFtdO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUmVnaXN0ZXIgdGhlIG5ldyB0cmFja2VyIGluIG91ciBuZXcgbWFwXHJcblx0XHRcdFx0bmV3TWFwW2FjdGl2aXR5SW5kZXguYWN0aXZpdHldLnB1c2goaW5kZXhlZFRyYWNrZXIpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGR1cGxpY2F0ZUNvdW50ZXIgPiAwKSB7XHJcblx0XHRcdGNvbnN0IHRlbGVtZXRyeUxvZ2dlciA9IHRoaXMubG9nZ2VyQ2FsbGJhY2sgJiYgdGhpcy5sb2dnZXJDYWxsYmFjaygpO1xyXG5cdFx0XHRpZiAodGVsZW1ldHJ5TG9nZ2VyKSB7XHJcblx0XHRcdFx0dGVsZW1ldHJ5TG9nZ2VyLmxvZ19FcnJvcihUZWxlbWV0cnlFdmVudC5TdXJ2ZXlBY3Rpdml0eS5TZXRBY3Rpdml0eVRyYWNraW5nQ29udHJhY3RzLkR1cGxpY2F0ZVN1cnZleUlELFxyXG5cdFx0XHRcdFx0XCJEdXBsaWNhdGUgc3VydmV5SWQgcGFzc2VkIGluIGFjdGl2aXR5VHJhY2tpbmdDb250cmFjdHMuIER1cGxpY2F0ZSBjb3VudDogXCIgKyBkdXBsaWNhdGVDb3VudGVyKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNldCB0aGUgbmV3IG1hcCBpbiBwbGFjZSBvZiB0aGUgb2xkXHJcblx0XHR0aGlzLmNvcHlPYmplY3QodGhpcy50cmFja2VkQWN0aXZpdHlNYXAsIG5ld01hcCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgY2xlYXJTdXJ2ZXlzKCk6IHZvaWQge1xyXG5cdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy50cmFja2VkQWN0aXZpdHlNYXApLmZvckVhY2goKGtleSkgPT4ge1xyXG5cdFx0XHRkZWxldGUgdGhpcy50cmFja2VkQWN0aXZpdHlNYXBba2V5XTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNhdmVTZXNzaW9uVHJhY2tpbmdBY3Rpdml0eShhY3Rpdml0eTogc3RyaW5nKTogdm9pZCB7XHJcblx0XHQvLyBTZXQgdGhlIG5ldyBhY3Rpdml0eSBpbiBwbGFjZSBvZiB0aGUgb2xkXHJcblx0XHRwcmV2aW91c1RyYWNrZWRBY3Rpdml0eU1hcFthY3Rpdml0eV0gPSB0aGlzLnRyYWNrZWRBY3Rpdml0eU1hcFthY3Rpdml0eV07XHJcblx0fVxyXG5cclxuXHQvLyBHZXQgdGhlIGluZGV4ZWRUcmFja2VyIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIFN1cnZleUlEIGFuZCByZXR1cm4gdGhhdCBjb3VudC4gb3RoZXJ3aXNlIHJldHVybiAwLlxyXG5cdHB1YmxpYyBnZXRDb3VudChhY3Rpdml0eTogc3RyaW5nLCBzdXJ2ZXlJZDogc3RyaW5nKTogbnVtYmVyIHtcclxuXHRcdGNvbnN0IGluZGV4ZWRUcmFja2VyID0gdGhpcy5nZXRJbmRleGVkVHJhY2tlcihhY3Rpdml0eSwgc3VydmV5SWQpO1xyXG5cdFx0aWYgKCFpbmRleGVkVHJhY2tlcikge1xyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gaW5kZXhlZFRyYWNrZXIudHJhY2tlci5nZXRDb3VudChpbmRleGVkVHJhY2tlci5pbmRleCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0U2Vzc2lvbkNvdW50KGFjdGl2aXR5OiBzdHJpbmcsIHN1cnZleUlkOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdFx0Y29uc3QgaW5kZXhlZFRyYWNrZXIgPSB0aGlzLmdldEluZGV4ZWRUcmFja2VyKGFjdGl2aXR5LCBzdXJ2ZXlJZCk7XHJcblx0XHRpZiAoIWluZGV4ZWRUcmFja2VyKSB7XHJcblx0XHRcdHJldHVybiAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpbmRleGVkVHJhY2tlci50cmFja2VyLmdldFNlc3Npb25Db3VudChpbmRleGVkVHJhY2tlci5pbmRleCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBbiBhdG9taWMgZ2V0LWFuZC1zZXQgbWV0aG9kLiAgUmV0dXJucyB0aGUgY3VycmVudCBTZXNzaW9uQ291bnQsIHJlc2V0dGluZyBpdCB0byB6ZXJvIGFuZCBhZGRpbmcgaXQgaW50byB0aGUgZXN0YWJsaXNoZWQgYmFzZWxpbmVcclxuXHQgKi9cclxuXHRwdWJsaWMgbW92ZVNlc3Npb25Db3VudEludG9CYXNlQ291bnQoYWN0aXZpdHk6IHN0cmluZywgc3VydmV5SWQ6IHN0cmluZyk6IG51bWJlciB7XHJcblx0XHRjb25zdCBpbmRleGVkVHJhY2tlciA9IHRoaXMuZ2V0SW5kZXhlZFRyYWNrZXIoYWN0aXZpdHksIHN1cnZleUlkKTtcclxuXHRcdGlmICghaW5kZXhlZFRyYWNrZXIpIHtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGluZGV4ZWRUcmFja2VyLnRyYWNrZXIubW92ZVNlc3Npb25Db3VudEludG9CYXNlQ291bnQoaW5kZXhlZFRyYWNrZXIuaW5kZXgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFN1cnZleUlkcyhhY3Rpdml0eTogc3RyaW5nKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xyXG5cdFx0aWYgKGlzTk9VKGFjdGl2aXR5KSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGluZGV4ZWRUcmFja2VycyA9IHRoaXMudHJhY2tlZEFjdGl2aXR5TWFwW2FjdGl2aXR5XTtcclxuXHRcdGlmICghaW5kZXhlZFRyYWNrZXJzKSB7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc3VydmV5SWRzID0gaW5kZXhlZFRyYWNrZXJzLm1hcCgoaW5kZXhlZFRyYWNrZXIpID0+IGluZGV4ZWRUcmFja2VyLnN1cnZleUlkKTtcclxuXHRcdHJldHVybiBzdXJ2ZXlJZHM7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc2V0Q2FsbGJhY2soY2FsbGJhY2s6IFN1cnZleUFjdGl2aXR5TGlzdGVuZXIuSUFjdGl2aXR5TGlzdGVuZXJDYWxsYmFjayk6IHZvaWQge1xyXG5cdFx0dGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG5cdH1cclxuXHJcblx0cHVibGljIFVwZGF0ZUFjdGl2aXR5VHJhY2tpbmdDb250cmFjdHMoc3VydmV5TGlzdDogSURpY3Rpb25hcnk8SVN1cnZleT4pOiB2b2lkIHtcclxuXHRcdGlmIChpc05PVShzdXJ2ZXlMaXN0KSB8fCBPYmplY3Qua2V5cyhzdXJ2ZXlMaXN0KS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0dGhpcy5jbGVhclN1cnZleXMoKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMudHJhY2tlZEFjdGl2aXR5TWFwKSB7XHJcblx0XHRcdGlmICh0aGlzLnRyYWNrZWRBY3Rpdml0eU1hcC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0Y29uc3QgdHJhY2tlcjogSW5kZXhlZFRyYWNrZXJbXSA9IHRoaXMudHJhY2tlZEFjdGl2aXR5TWFwW2tleV07XHJcblxyXG5cdFx0XHRcdC8vIGxvb3AgdGhyb3VnaCB0cmFja2VyIGFuZCByZW1vdmUgdGhlIG9uZXMgbm90IGFzc29jaWF0ZSB3aXRoIGdpdmVuIHN1cnZleXNcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gdHJhY2tlci5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xyXG5cdFx0XHRcdFx0aWYgKHN1cnZleUxpc3QuaGFzT3duUHJvcGVydHkodHJhY2tlcltpXS5zdXJ2ZXlJZCkpIHtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0cmFja2VyLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0SW5kZXhlZFRyYWNrZXIoYWN0aXZpdHk6IHN0cmluZywgc3VydmV5SWQ6IHN0cmluZyk6IEluZGV4ZWRUcmFja2VyIHwgdW5kZWZpbmVkIHtcclxuXHRcdGNvbnN0IGluZGV4ZWRUcmFja2VycyA9IHRoaXMudHJhY2tlZEFjdGl2aXR5TWFwW2FjdGl2aXR5XTtcclxuXHJcblx0XHRpZiAoIWluZGV4ZWRUcmFja2Vycykge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBpbmRleGVkVHJhY2tlcjogSW5kZXhlZFRyYWNrZXIgfCB1bmRlZmluZWQ7XHJcblx0XHRmb3IgKGNvbnN0IHRyYWNrZXIgb2YgaW5kZXhlZFRyYWNrZXJzKSB7XHJcblx0XHRcdGlmICh0cmFja2VyLnN1cnZleUlkID09PSBzdXJ2ZXlJZCkge1xyXG5cdFx0XHRcdGluZGV4ZWRUcmFja2VyID0gdHJhY2tlcjtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpbmRleGVkVHJhY2tlcjtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmVzZXRRdWV1ZWRBY3Rpdml0aWVzKCk6IHZvaWQge1xyXG5cdFx0cXVldWVkQWN0aXZpdGllcyA9IFtdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBsb2dBY3Rpdml0eV9wcml2YXRlKGFjdGl2aXR5TmFtZTogc3RyaW5nLFxyXG5cdFx0bG9nVHlwZTogU3VydmV5QWN0aXZpdHlMaXN0ZW5lci5Mb2dBY3Rpb25UeXBlLFxyXG5cdFx0aW5jcmVtZW50OiBudW1iZXIsXHJcblx0XHR0aW1lc3RhbXA6IERhdGUsXHJcblx0XHRjb250ZXh0OuKAr0lBY3Rpdml0eUxpc3RlbmVyLklBY3Rpdml0eUNvbnRleHQpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmNhbGxiYWNrICYmICF0aGlzLmNhbGxiYWNrLnNob3VsZEFjY2VwdEFjdGl2aXR5KGFjdGl2aXR5TmFtZSkpIHtcclxuXHRcdFx0cGVuZGluZ0FjdGl2aXR5Q291bnQrKztcclxuXHRcdFx0aWYgKHF1ZXVlZEFjdGl2aXRpZXMubGVuZ3RoIDwgU3VydmV5QWN0aXZpdHlMaXN0ZW5lci5NYXhQZW5kaW5nQWN0aXZpdGllc1F1ZXVlU2l6ZSkge1xyXG5cdFx0XHRcdHF1ZXVlZEFjdGl2aXRpZXMucHVzaCh7YWN0aXZpdHlOYW1lLCBsb2dUeXBlLCBpbmNyZW1lbnQsIHRpbWVzdGFtcH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ291bnQgYW55IGFjdGl2aXRpZXMgdGhhdCBhcmUgcG9zdGVkIGJlZm9yZSAnRmxvb2RnYXRlRmlyc3RTdGFydCcgYWN0aXZpdHkgaGFwcGVuc1xyXG5cdFx0aWYgKGFjdGl2aXR5TmFtZSA9PT0gU3VydmV5QWN0aXZpdHlMaXN0ZW5lci5GbG9vZGdhdGVTdGFydEFjdGl2aXR5TmFtZSkge1xyXG5cdFx0XHRpZiAocGVuZGluZ0FjdGl2aXR5Q291bnQgPiAwKSB7XHJcblx0XHRcdFx0Ly8gR2V0IHRoZSBhY3Rpdml0eSBuYW1lcyBvZiB0aGUgcXVldWVkIGFjdGl2aXRpZXMgZm9yIHRlbGVtZXRyeSwgc2VuZCBvbmx5IGZpcnN0IDI1LlxyXG5cdFx0XHRcdGNvbnN0IGFjdGl2aXR5TmFtZXMgPSBxdWV1ZWRBY3Rpdml0aWVzLnNsaWNlKDAsIDI1KS5tYXAoKHF1ZXVlZEFjdGl2aXR5KSA9PiBxdWV1ZWRBY3Rpdml0eS5hY3Rpdml0eU5hbWUpO1xyXG5cclxuXHRcdFx0XHRjb25zdCB0ZWxlbWV0cnlMb2dnZXIgPSB0aGlzLmxvZ2dlckNhbGxiYWNrICYmIHRoaXMubG9nZ2VyQ2FsbGJhY2soKTtcclxuXHRcdFx0XHRpZiAodGVsZW1ldHJ5TG9nZ2VyKSB7XHJcblx0XHRcdFx0XHQvLyBTYW1wbGluZyB0aGlzIHRlbGVtZXRyeSBldmVudCB0byA1JVxyXG5cdFx0XHRcdFx0dGVsZW1ldHJ5TG9nZ2VyLmxvZ19FdmVudChUZWxlbWV0cnlFdmVudC5TdXJ2ZXlBY3Rpdml0eS5Mb2dBY3Rpdml0eS5FdmVudHNSZXByb2Nlc3NlZCxcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdEFjdGl2aXR5TmFtZXM6IEpTT04uc3RyaW5naWZ5KGFjdGl2aXR5TmFtZXMpLFxyXG5cdFx0XHRcdFx0XHRcdENvdW50OiBxdWV1ZWRBY3Rpdml0aWVzLmxlbmd0aCxcclxuXHRcdFx0XHRcdFx0XHREcm9wcGVkOiBwZW5kaW5nQWN0aXZpdHlDb3VudCAtIHF1ZXVlZEFjdGl2aXRpZXMubGVuZ3RoLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHQwLjA1KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIHJlcGxheSBhbGwgdGhlIHF1ZXVlZCBhY3Rpdml0aWVzIG9uZSBieSBvbmUgYXMgdGhlIGZsb29kZ2F0ZSBlbmdpbmUgaGFzIHN0YXJ0ZWQgbm93XHJcblx0XHRcdFx0cXVldWVkQWN0aXZpdGllcy5tYXAoKHF1ZXVlZEFjdGl2aXR5KSA9PiB0aGlzLmxvZ0FjdGl2aXR5X2NvcmUoXHJcblx0XHRcdFx0XHRxdWV1ZWRBY3Rpdml0eS5hY3Rpdml0eU5hbWUsIHF1ZXVlZEFjdGl2aXR5LmxvZ1R5cGUsIHF1ZXVlZEFjdGl2aXR5LmluY3JlbWVudCwgcXVldWVkQWN0aXZpdHkudGltZXN0YW1wLCBjb250ZXh0KSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHBlbmRpbmdBY3Rpdml0eUNvdW50ID0gMDtcclxuXHRcdFx0dGhpcy5yZXNldFF1ZXVlZEFjdGl2aXRpZXMoKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmxvZ0FjdGl2aXR5X2NvcmUoYWN0aXZpdHlOYW1lLCBsb2dUeXBlLCBpbmNyZW1lbnQsIHRpbWVzdGFtcCwgY29udGV4dCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGxvZ0FjdGl2aXR5X2NvcmUoYWN0aXZpdHlOYW1lOiBzdHJpbmcsXHJcblx0XHRsb2dUeXBlOiBTdXJ2ZXlBY3Rpdml0eUxpc3RlbmVyLkxvZ0FjdGlvblR5cGUsXHJcblx0XHRpbmNyZW1lbnQ6IG51bWJlcixcclxuXHRcdHRpbWVzdGFtcDogRGF0ZSxcclxuXHRcdGNvbnRleHQ64oCvSUFjdGl2aXR5TGlzdGVuZXIuSUFjdGl2aXR5Q29udGV4dCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgaW5kZXhlZFRyYWNrZXJzOiBJbmRleGVkVHJhY2tlcltdID0gdGhpcy50cmFja2VkQWN0aXZpdHlNYXBbYWN0aXZpdHlOYW1lXTtcclxuXHRcdGlmICghaW5kZXhlZFRyYWNrZXJzIHx8IGluZGV4ZWRUcmFja2Vycy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBpbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuXHRcdC8vIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSB0cmFja2VyIHNodWZmbGUgdHJhY2tlcnMgdG8gcmFuZG9taXplIHdoaWNoIGlzIGV2YWx1YXRlZCBmaXJzdFxyXG5cdFx0aWYgKGluZGV4ZWRUcmFja2Vycy5sZW5ndGggPiAxKSB7XHJcblx0XHRcdGluZGljZXMgPSBuZXcgQXJyYXk8bnVtYmVyPihpbmRleGVkVHJhY2tlcnMubGVuZ3RoKTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0aW5kaWNlc1tpXSA9IGk7XHJcblx0XHRcdH1cclxuXHRcdFx0aW5kaWNlcyA9IGZ5U2h1ZmZsZShpbmRpY2VzKTsgLy8gc2h1ZmZsZSBhbmQgcmVhc3NpZ25cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGluZGljZXMucHVzaCgwKTsgLy8ganVzdCBoYXZlIGEgemVyby4gU2h1ZmZsaW5nIGlzIG5vdCBuZWVkZWQuXHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTG9vcCB0aHJvdWdoIHRyYWNrZXJzIGluIHNodWZmbGVkIG9yZGVyXHJcblx0XHRmb3IgKGNvbnN0IGluZGV4IG9mIGluZGljZXMpIHtcclxuXHRcdFx0Y29uc3QgdHJhY2tlcjogSW5kZXhlZFRyYWNrZXIgPSBpbmRleGVkVHJhY2tlcnNbaW5kZXhdO1xyXG5cdFx0XHRzd2l0Y2ggKGxvZ1R5cGUpIHtcclxuXHRcdFx0XHRjYXNlIFN1cnZleUFjdGl2aXR5TGlzdGVuZXIuTG9nQWN0aW9uVHlwZS5TdGFydFRpbWU6IHtcclxuXHRcdFx0XHRcdHRyYWNrZXIudHJhY2tlci5zdGFydFRpbWUodHJhY2tlci5pbmRleCwgdGltZXN0YW1wKTtcclxuXHRcdFx0XHRcdGNvbnRpbnVlOyAvLyBMb29rIGF0IHRoZSBuZXh0IHRyYWNrZXIuIEluY3JlbWVudCBub3QgbmVlZGVkLlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjYXNlIFN1cnZleUFjdGl2aXR5TGlzdGVuZXIuTG9nQWN0aW9uVHlwZS5TdG9wVGltZToge1xyXG5cdFx0XHRcdFx0aW5jcmVtZW50ID0gdHJhY2tlci50cmFja2VyLnN0b3BUaW1lKHRyYWNrZXIuaW5kZXgsIHRpbWVzdGFtcCk7XHJcblx0XHRcdFx0XHQvLyBmYWxsIHRocm91Z2ggdG8gaW5jcmVtZW50IHRoZSBhY3Rpdml0eSBhcyB3ZWxsLlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjYXNlIFN1cnZleUFjdGl2aXR5TGlzdGVuZXIuTG9nQWN0aW9uVHlwZS5JbmNyZW1lbnQ6IHtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRkZWZhdWx0OiB7XHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjb250ZXh0KSB7XHJcblx0XHRcdFx0Y29uc3QgdHJhY2tlclN1cnZleUlkID0gdHJhY2tlci5zdXJ2ZXlJZDtcclxuXHRcdFx0XHR0aGlzLmFjdGl2aXR5Q29udGV4dFt0cmFja2VyU3VydmV5SWRdID0gdGhpcy5hY3Rpdml0eUNvbnRleHRbdHJhY2tlclN1cnZleUlkXSB8fCBbXTtcclxuXHRcdFx0XHR0aGlzLmFjdGl2aXR5Q29udGV4dFt0cmFja2VyU3VydmV5SWRdLnB1c2goeyBhY3Rpdml0eU5hbWUsIGNvbnRleHQgfSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHJlc3VsdDogQWN0aXZpdHlUcmFja2VyLkluY3JlbWVudFJlc3VsdCA9IHRyYWNrZXIudHJhY2tlci5pbmNyZW1lbnRBY3Rpdml0eSh0cmFja2VyLmluZGV4LCBpbmNyZW1lbnQpO1xyXG5cdFx0XHRpZiAocmVzdWx0ID09PSBBY3Rpdml0eVRyYWNrZXIuSW5jcmVtZW50UmVzdWx0LkFsbEFjdGl2aXRpZXNBY3RpdmF0ZWQpIHtcclxuXHRcdFx0XHQvLyBDaGVjayB0aGUgYWN0aXZhdGVkIHN1cnZleXMgbGlzdCB0byBlbnN1cmUgd2hldGhlciBhbnkgcHJldmlvdXMgc3VydmV5IGlzIHN0aWxsIGluIHByb2Nlc3NcclxuXHRcdFx0XHQvLyBJZiBub3QsIHRoZSBsZW5ndGggc2hvdWxkIGJlIDEgYW5kIGNhbGwgdG8gZXhlY3V0ZSB0aGlzIHN1cnZleSByaWdodCBhd2F5XHJcblx0XHRcdFx0Ly8gVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgY2FsbGluZyB0byBHb3Zlcm5hbmNlIFNlcnZpY2UsIGR1ZSB0byB0aGUgY2FsbCBpcyBhc3luY2hyb25vdXNcclxuXHRcdFx0XHR0aGlzLmV4ZWN1dGVDYWxsYmFjayh0cmFja2VyLnN1cnZleUlkKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHQvKiBCcmVha2luZyBoZXJlIHRvIGxldCBvbmUgYW5kIG9ubHkgb25lIGNhbGxiYWNrIHRvIGJlIG1hZGUgZnJvbSBhIGxvZ0FjdGl2aXR5IGNhbGwuXHJcblx0XHRcdFx0VGhpcyBlbnN1cmVzIG9ubHkgb25lIHN1cnZleSBjYW4gZnVsbHkgJ3RyaWdnZXInIGZvciBhIGxvZ0FjdGl2aXR5IGNhbGwuIE90aGVycyB0aGF0IHdvdWxkIGFsc29cclxuXHRcdFx0XHRoYXZlIHRyaWdnZXJlZCBtdXN0IHdhaXQgdW50aWwgdGhlIG5leHQgY2FsbCB0byB0cmlnZ2VyICh3aXRob3V0IHRoZXJlIGJlaW5nIGEgY29vbGRvd24sIG9mIGNvdXJzZSkuXHJcblx0XHRcdFx0Ki9cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ2FsbGJhY2soc3VydmV5SWQ6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0dGhpcy5jYWxsYmFjay5ydW4oc3VydmV5SWQsIHRoaXMuYWN0aXZpdHlDb250ZXh0W3N1cnZleUlkXSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNvcHlPYmplY3QodGFyZ2V0OiB7fSwgc291cmNlOiB7fSkge1xyXG5cdFx0T2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKChrZXkpID0+IHtcclxuXHRcdFx0dGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG5cclxubW9kdWxlIFN1cnZleUFjdGl2aXR5TGlzdGVuZXIge1xyXG5cdGV4cG9ydCBpbnRlcmZhY2UgSUFjdGl2aXR5TGlzdGVuZXJDYWxsYmFjayB7XHJcblx0XHRydW4oc3VydmV5SWQ6IHN0cmluZywgY29udGV4dERhdGE6IElDb250ZXh0RGF0YVtdKTogdm9pZDtcclxuXHRcdHNob3VsZEFjY2VwdEFjdGl2aXR5KGFjdGl2aXR5TmFtZTogc3RyaW5nKTogYm9vbGVhbjtcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBjb25zdCBlbnVtIExvZ0FjdGlvblR5cGUge1xyXG5cdFx0SW5jcmVtZW50LFxyXG5cdFx0U3RhcnRUaW1lLFxyXG5cdFx0U3RvcFRpbWUsXHJcblx0fVxyXG5cclxuXHRleHBvcnQgaW50ZXJmYWNlIElRdWV1ZWRBY3Rpdml0eVBhcmFtcyB7XHJcblx0XHRhY3Rpdml0eU5hbWU6IHN0cmluZztcclxuXHRcdGxvZ1R5cGU6IFN1cnZleUFjdGl2aXR5TGlzdGVuZXIuTG9nQWN0aW9uVHlwZTtcclxuXHRcdGluY3JlbWVudDogbnVtYmVyO1xyXG5cdFx0dGltZXN0YW1wOiBEYXRlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0ID0gU3VydmV5QWN0aXZpdHlMaXN0ZW5lcjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/SurveyActivityListener.js\n')},"../FloodgateCore/dist/src/SurveyComponents/CVSurveyComponent.js":function(){"use strict";eval('\nvar ISurveyComponent = __webpack_require__(/*! ../Api/ISurveyComponent */ "../FloodgateCore/dist/src/Api/ISurveyComponent.js");\nvar CVSurveyComponent = /** @class */ (function () {\n    function CVSurveyComponent(data) {\n        if (!data) {\n            throw new Error("data must not be null");\n        }\n        if (!data.customerVoiceFormId) {\n            throw new Error("data.formID must not be null or empty");\n        }\n        this.data = data;\n    }\n    CVSurveyComponent.make = function (data) {\n        try {\n            return new CVSurveyComponent(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    CVSurveyComponent.prototype.getType = function () {\n        return "CVSurvey" /* CVSurvey */;\n    };\n    CVSurveyComponent.prototype.getFormId = function () {\n        return this.data.customerVoiceFormId;\n    };\n    // @Override\n    CVSurveyComponent.prototype.getDomElements = function (doc) {\n        if (!doc) {\n            throw new Error("Document must not be null");\n        }\n        var element = doc.createElement(ISurveyComponent.DOM_CVSURVEY_TAGNAME);\n        return [element];\n    };\n    // @Override\n    CVSurveyComponent.prototype.getJsonElements = function () {\n        var result = {};\n        result[ISurveyComponent.JSON_CVSURVEY_KEYNAME] = this.getFormId();\n        return result;\n    };\n    // @Override\n    CVSurveyComponent.prototype.getComponentJson = function () {\n        var _a;\n        return _a = {},\n            _a[ISurveyComponent.JSON_CVSURVEYFORMID_KEYNAME] = this.getFormId(),\n            _a;\n    };\n    return CVSurveyComponent;\n}());\n(function (CVSurveyComponent) {\n    var CVSurveyComponentData = /** @class */ (function () {\n        function CVSurveyComponentData() {\n        }\n        return CVSurveyComponentData;\n    }());\n    CVSurveyComponent.CVSurveyComponentData = CVSurveyComponentData;\n})(CVSurveyComponent || (CVSurveyComponent = {}));\nmodule.exports = CVSurveyComponent;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleUNvbXBvbmVudHMvQ1ZTdXJ2ZXlDb21wb25lbnQudHM/MmU3ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsK0hBQTREO0FBRTVEO0lBV0MsMkJBQW1CLElBQTZDO1FBQy9ELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDekM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztTQUN6RDtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUM7SUFuQmEsc0JBQUksR0FBbEIsVUFBbUIsSUFBNkM7UUFDL0QsSUFBSTtZQUNILE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7U0FDWjtJQUNGLENBQUM7SUFlTSxtQ0FBTyxHQUFkO1FBQ0MsaUNBQXNDO0lBQ3ZDLENBQUM7SUFFTSxxQ0FBUyxHQUFoQjtRQUNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUN0QyxDQUFDO0lBRUQsWUFBWTtJQUNMLDBDQUFjLEdBQXJCLFVBQXNCLEdBQWE7UUFDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM3QztRQUNELElBQU0sT0FBTyxHQUFZLEdBQUcsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNsRixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVk7SUFDTCwyQ0FBZSxHQUF0QjtRQUNDLElBQU0sTUFBTSxHQUFXLEVBQUUsQ0FBQztRQUUxQixNQUFNLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEUsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDO0lBRUQsWUFBWTtJQUNMLDRDQUFnQixHQUF2Qjs7UUFDQztZQUNDLEdBQUMsZ0JBQWdCLENBQUMsMkJBQTJCLElBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtlQUMvRDtJQUNILENBQUM7SUFDRix3QkFBQztBQUFELENBQUM7QUFFRCxXQUFPLGlCQUFpQjtJQUN2QjtRQUFBO1FBRUEsQ0FBQztRQUFELDRCQUFDO0lBQUQsQ0FBQztJQUZZLHVDQUFxQix3QkFFakM7QUFDRixDQUFDLEVBSk0saUJBQWlCLEtBQWpCLGlCQUFpQixRQUl2QjtBQUVELGlCQUFTLGlCQUFpQixDQUFDIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvU3VydmV5Q29tcG9uZW50cy9DVlN1cnZleUNvbXBvbmVudC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElDVlN1cnZleUNvbXBvbmVudCB9IGZyb20gXCJzcmMvQXBpL0FwaVwiO1xyXG5pbXBvcnQgKiBhcyBJU3VydmV5Q29tcG9uZW50IGZyb20gXCIuLi9BcGkvSVN1cnZleUNvbXBvbmVudFwiO1xyXG5cclxuY2xhc3MgQ1ZTdXJ2ZXlDb21wb25lbnQgaW1wbGVtZW50cyBJQ1ZTdXJ2ZXlDb21wb25lbnQge1xyXG5cdHB1YmxpYyBzdGF0aWMgbWFrZShkYXRhOiBDVlN1cnZleUNvbXBvbmVudC5DVlN1cnZleUNvbXBvbmVudERhdGEpOiBJQ1ZTdXJ2ZXlDb21wb25lbnQge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0cmV0dXJuIG5ldyBDVlN1cnZleUNvbXBvbmVudChkYXRhKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGRhdGE6IENWU3VydmV5Q29tcG9uZW50LkNWU3VydmV5Q29tcG9uZW50RGF0YTtcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IENWU3VydmV5Q29tcG9uZW50LkNWU3VydmV5Q29tcG9uZW50RGF0YSkge1xyXG5cdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRhdGEgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGF0YS5jdXN0b21lclZvaWNlRm9ybUlkKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRhdGEuZm9ybUlEIG11c3Qgbm90IGJlIG51bGwgb3IgZW1wdHlcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5kYXRhID0gZGF0YTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRUeXBlKCk6IElTdXJ2ZXlDb21wb25lbnQuVHlwZSB7XHJcblx0XHRyZXR1cm4gSVN1cnZleUNvbXBvbmVudC5UeXBlLkNWU3VydmV5O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldEZvcm1JZCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5jdXN0b21lclZvaWNlRm9ybUlkO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldERvbUVsZW1lbnRzKGRvYzogRG9jdW1lbnQpOiBFbGVtZW50W10ge1xyXG5cdFx0aWYgKCFkb2MpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRG9jdW1lbnQgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGVsZW1lbnQ6IEVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudChJU3VydmV5Q29tcG9uZW50LkRPTV9DVlNVUlZFWV9UQUdOQU1FKTtcclxuXHRcdHJldHVybiBbZWxlbWVudF07XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0SnNvbkVsZW1lbnRzKCk6IG9iamVjdCB7XHJcblx0XHRjb25zdCByZXN1bHQ6IG9iamVjdCA9IHt9O1xyXG5cclxuXHRcdHJlc3VsdFtJU3VydmV5Q29tcG9uZW50LkpTT05fQ1ZTVVJWRVlfS0VZTkFNRV0gPSB0aGlzLmdldEZvcm1JZCgpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRDb21wb25lbnRKc29uKCk6IG9iamVjdCB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRbSVN1cnZleUNvbXBvbmVudC5KU09OX0NWU1VSVkVZRk9STUlEX0tFWU5BTUVdOiB0aGlzLmdldEZvcm1JZCgpLFxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuXHJcbm1vZHVsZSBDVlN1cnZleUNvbXBvbmVudCB7XHJcblx0ZXhwb3J0IGNsYXNzIENWU3VydmV5Q29tcG9uZW50RGF0YSB7XHJcblx0XHRwdWJsaWMgY3VzdG9tZXJWb2ljZUZvcm1JZDogc3RyaW5nO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0ID0gQ1ZTdXJ2ZXlDb21wb25lbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/SurveyComponents/CVSurveyComponent.js\n')},"../FloodgateCore/dist/src/SurveyComponents/CommentComponent.js":function(){"use strict";eval('\nvar ISurveyComponent = __webpack_require__(/*! ./../Api/ISurveyComponent */ "../FloodgateCore/dist/src/Api/ISurveyComponent.js");\nvar CommentComponent = /** @class */ (function () {\n    function CommentComponent(data) {\n        if (!data) {\n            throw new Error("data must not be null");\n        }\n        if (!data.question) {\n            throw new Error("data.question must not be null or empty");\n        }\n        this.data = data;\n        this.userComment = "";\n    }\n    CommentComponent.make = function (data) {\n        try {\n            return new CommentComponent(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    // @Override\n    CommentComponent.prototype.getType = function () {\n        return "Comment" /* Comment */;\n    };\n    // @Override\n    CommentComponent.prototype.getQuestion = function () {\n        return this.data.question;\n    };\n    // @Override\n    CommentComponent.prototype.setSubmittedText = function (userComment) {\n        this.userComment = userComment;\n    };\n    // @Override\n    CommentComponent.prototype.getSubmittedText = function () {\n        return this.userComment;\n    };\n    // @Override\n    CommentComponent.prototype.getDomElements = function (doc) {\n        if (!doc) {\n            throw new Error("Document must not be null");\n        }\n        var element = doc.createElement(ISurveyComponent.DOM_COMMENT_TAGNAME);\n        element.appendChild(doc.createTextNode(this.getSubmittedText()));\n        return [element];\n    };\n    // @Override\n    CommentComponent.prototype.getJsonElements = function () {\n        var result = {};\n        result[ISurveyComponent.JSON_COMMENT_KEYNAME] = this.getSubmittedText();\n        return result;\n    };\n    // @Override\n    CommentComponent.prototype.getComponentJson = function () {\n        var _a;\n        return _a = {},\n            _a[ISurveyComponent.JSON_QUESTION_KEYNAME] = this.getQuestion(),\n            _a;\n    };\n    return CommentComponent;\n}());\n(function (CommentComponent) {\n    var CommentComponentData = /** @class */ (function () {\n        function CommentComponentData() {\n        }\n        return CommentComponentData;\n    }());\n    CommentComponent.CommentComponentData = CommentComponentData;\n})(CommentComponent || (CommentComponent = {}));\nmodule.exports = CommentComponent;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleUNvbXBvbmVudHMvQ29tbWVudENvbXBvbmVudC50cz8zODJiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxpSUFBK0Q7QUFFL0Q7SUFZQywwQkFBbUIsSUFBMkM7UUFDN0QsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUN6QztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztTQUMzRDtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFyQmEscUJBQUksR0FBbEIsVUFBbUIsSUFBMkM7UUFDN0QsSUFBSTtZQUNILE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7U0FDWjtJQUNGLENBQUM7SUFpQkQsWUFBWTtJQUNMLGtDQUFPLEdBQWQ7UUFDQywrQkFBcUM7SUFDdEMsQ0FBQztJQUVELFlBQVk7SUFDTCxzQ0FBVyxHQUFsQjtRQUNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVk7SUFDTCwyQ0FBZ0IsR0FBdkIsVUFBd0IsV0FBbUI7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVk7SUFDTCwyQ0FBZ0IsR0FBdkI7UUFDQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDekIsQ0FBQztJQUVELFlBQVk7SUFDTCx5Q0FBYyxHQUFyQixVQUFzQixHQUFhO1FBQ2xDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7U0FDN0M7UUFFRCxJQUFNLE9BQU8sR0FBWSxHQUFHLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDakYsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVk7SUFDTCwwQ0FBZSxHQUF0QjtRQUNDLElBQU0sTUFBTSxHQUFXLEVBQUUsQ0FBQztRQUMxQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4RSxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFFRCxZQUFZO0lBQ0wsMkNBQWdCLEdBQXZCOztRQUNDO1lBQ0MsR0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsSUFBRyxJQUFJLENBQUMsV0FBVyxFQUFFO2VBQzNEO0lBQ0gsQ0FBQztJQUNGLHVCQUFDO0FBQUQsQ0FBQztBQUVELFdBQU8sZ0JBQWdCO0lBQ3RCO1FBQUE7UUFFQSxDQUFDO1FBQUQsMkJBQUM7SUFBRCxDQUFDO0lBRlkscUNBQW9CLHVCQUVoQztBQUNGLENBQUMsRUFKTSxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBSXRCO0FBRUQsaUJBQVMsZ0JBQWdCLENBQUMiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9TdXJ2ZXlDb21wb25lbnRzL0NvbW1lbnRDb21wb25lbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQ29tbWVudENvbXBvbmVudCB9IGZyb20gXCIuLy4uL0FwaS9JQ29tbWVudENvbXBvbmVudFwiO1xyXG5pbXBvcnQgSVN1cnZleUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuLy4uL0FwaS9JU3VydmV5Q29tcG9uZW50XCIpO1xyXG5cclxuY2xhc3MgQ29tbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIElDb21tZW50Q29tcG9uZW50IHtcclxuXHRwdWJsaWMgc3RhdGljIG1ha2UoZGF0YTogQ29tbWVudENvbXBvbmVudC5Db21tZW50Q29tcG9uZW50RGF0YSk6IElDb21tZW50Q29tcG9uZW50IHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHJldHVybiBuZXcgQ29tbWVudENvbXBvbmVudChkYXRhKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGRhdGE6IENvbW1lbnRDb21wb25lbnQuQ29tbWVudENvbXBvbmVudERhdGE7XHJcblx0cHJpdmF0ZSB1c2VyQ29tbWVudDogc3RyaW5nO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3IoZGF0YTogQ29tbWVudENvbXBvbmVudC5Db21tZW50Q29tcG9uZW50RGF0YSkge1xyXG5cdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRhdGEgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGF0YS5xdWVzdGlvbikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhLnF1ZXN0aW9uIG11c3Qgbm90IGJlIG51bGwgb3IgZW1wdHlcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5kYXRhID0gZGF0YTtcclxuXHRcdHRoaXMudXNlckNvbW1lbnQgPSBcIlwiO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldFR5cGUoKTogSVN1cnZleUNvbXBvbmVudC5UeXBlIHtcclxuXHRcdHJldHVybiBJU3VydmV5Q29tcG9uZW50LlR5cGUuQ29tbWVudDtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRRdWVzdGlvbigpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5xdWVzdGlvbjtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBzZXRTdWJtaXR0ZWRUZXh0KHVzZXJDb21tZW50OiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdHRoaXMudXNlckNvbW1lbnQgPSB1c2VyQ29tbWVudDtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRTdWJtaXR0ZWRUZXh0KCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy51c2VyQ29tbWVudDtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXREb21FbGVtZW50cyhkb2M6IERvY3VtZW50KTogRWxlbWVudFtdIHtcclxuXHRcdGlmICghZG9jKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkRvY3VtZW50IG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZWxlbWVudDogRWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KElTdXJ2ZXlDb21wb25lbnQuRE9NX0NPTU1FTlRfVEFHTkFNRSk7XHJcblx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSh0aGlzLmdldFN1Ym1pdHRlZFRleHQoKSkpO1xyXG5cclxuXHRcdHJldHVybiBbZWxlbWVudF07XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0SnNvbkVsZW1lbnRzKCk6IG9iamVjdCB7XHJcblx0XHRjb25zdCByZXN1bHQ6IG9iamVjdCA9IHt9O1xyXG5cdFx0cmVzdWx0W0lTdXJ2ZXlDb21wb25lbnQuSlNPTl9DT01NRU5UX0tFWU5BTUVdID0gdGhpcy5nZXRTdWJtaXR0ZWRUZXh0KCk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldENvbXBvbmVudEpzb24oKTogb2JqZWN0IHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdFtJU3VydmV5Q29tcG9uZW50LkpTT05fUVVFU1RJT05fS0VZTkFNRV06IHRoaXMuZ2V0UXVlc3Rpb24oKSxcclxuXHRcdH07XHJcblx0fVxyXG59XHJcblxyXG5tb2R1bGUgQ29tbWVudENvbXBvbmVudCB7XHJcblx0ZXhwb3J0IGNsYXNzIENvbW1lbnRDb21wb25lbnREYXRhIHtcclxuXHRcdHB1YmxpYyBxdWVzdGlvbjogc3RyaW5nO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0ID0gQ29tbWVudENvbXBvbmVudDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/SurveyComponents/CommentComponent.js\n')},"../FloodgateCore/dist/src/SurveyComponents/InterceptComponent.js":function(){"use strict";eval('\nvar ISurveyComponent = __webpack_require__(/*! ../Api/ISurveyComponent */ "../FloodgateCore/dist/src/Api/ISurveyComponent.js");\nvar InterceptComponent = /** @class */ (function () {\n    function InterceptComponent(data) {\n        if (!data) {\n            throw new Error("data must not be null");\n        }\n        if (!data.question) {\n            throw new Error("data.question must not be null or empty");\n        }\n        if (!data.title) {\n            throw new Error("data.title must not be null or empty");\n        }\n        if (!data.url) {\n            throw new Error("data.url must not be null or empty");\n        }\n        this.data = data;\n    }\n    InterceptComponent.make = function (data) {\n        try {\n            return new InterceptComponent(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    // @Override\n    InterceptComponent.prototype.getType = function () {\n        return "Intercept" /* Intercept */;\n    };\n    // @Override\n    InterceptComponent.prototype.getTitle = function () {\n        return this.data.title;\n    };\n    // @Override\n    InterceptComponent.prototype.getQuestion = function () {\n        return this.data.question;\n    };\n    // @Override\n    InterceptComponent.prototype.getUrl = function () {\n        return this.data.url;\n    };\n    // @Override\n    InterceptComponent.prototype.getDomElements = function (doc) {\n        if (!doc) {\n            throw new Error("Document must not be null");\n        }\n        return [doc.createElement(ISurveyComponent.DOM_INTERCEPT_TAGNAME)];\n    };\n    // @Override\n    InterceptComponent.prototype.getJsonElements = function () {\n        var _a;\n        return _a = {}, _a[ISurveyComponent.JSON_INTERCEPT_KEYNAME] = "", _a;\n    };\n    // @Override\n    InterceptComponent.prototype.getComponentJson = function () {\n        var _a;\n        return _a = {},\n            _a[ISurveyComponent.JSON_TITLE_KEYNAME] = this.getTitle(),\n            _a[ISurveyComponent.JSON_QUESTION_KEYNAME] = this.getQuestion(),\n            _a[ISurveyComponent.JSON_INTERCEPTURL_KEYNAME] = this.getUrl(),\n            _a;\n    };\n    return InterceptComponent;\n}());\n(function (InterceptComponent) {\n    var InterceptComponentData = /** @class */ (function () {\n        function InterceptComponentData() {\n        }\n        return InterceptComponentData;\n    }());\n    InterceptComponent.InterceptComponentData = InterceptComponentData;\n})(InterceptComponent || (InterceptComponent = {}));\nmodule.exports = InterceptComponent;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleUNvbXBvbmVudHMvSW50ZXJjZXB0Q29tcG9uZW50LnRzPzMyNDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtIQUE0RDtBQUc1RDtJQVdDLDRCQUFtQixJQUErQztRQUNqRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDdEQ7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0lBekJhLHVCQUFJLEdBQWxCLFVBQW1CLElBQStDO1FBQ2pFLElBQUk7WUFDSCxPQUFPLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNYLE9BQU8sSUFBSSxDQUFDO1NBQ1o7SUFDRixDQUFDO0lBcUJELFlBQVk7SUFDTCxvQ0FBTyxHQUFkO1FBQ0MsbUNBQXVDO0lBQ3hDLENBQUM7SUFFRCxZQUFZO0lBQ0wscUNBQVEsR0FBZjtRQUNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELFlBQVk7SUFDTCx3Q0FBVyxHQUFsQjtRQUNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVk7SUFDTCxtQ0FBTSxHQUFiO1FBQ0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUN0QixDQUFDO0lBRUQsWUFBWTtJQUNMLDJDQUFjLEdBQXJCLFVBQXNCLEdBQWE7UUFDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM3QztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsWUFBWTtJQUNMLDRDQUFlLEdBQXRCOztRQUNDLGdCQUFRLEdBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLElBQUcsRUFBRSxLQUFFO0lBQ3hELENBQUM7SUFFRCxZQUFZO0lBQ0wsNkNBQWdCLEdBQXZCOztRQUNDO1lBQ0MsR0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsSUFBRyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3RELEdBQUMsZ0JBQWdCLENBQUMscUJBQXFCLElBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUM1RCxHQUFDLGdCQUFnQixDQUFDLHlCQUF5QixJQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7ZUFDMUQ7SUFDSCxDQUFDO0lBQ0YseUJBQUM7QUFBRCxDQUFDO0FBRUQsV0FBTyxrQkFBa0I7SUFDeEI7UUFBQTtRQUlBLENBQUM7UUFBRCw2QkFBQztJQUFELENBQUM7SUFKWSx5Q0FBc0IseUJBSWxDO0FBQ0YsQ0FBQyxFQU5NLGtCQUFrQixLQUFsQixrQkFBa0IsUUFNeEI7QUFFRCxpQkFBUyxrQkFBa0IsQ0FBQyIsImZpbGUiOiIuLi9GbG9vZGdhdGVDb3JlL2Rpc3Qvc3JjL1N1cnZleUNvbXBvbmVudHMvSW50ZXJjZXB0Q29tcG9uZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgSVN1cnZleUNvbXBvbmVudCBmcm9tIFwiLi4vQXBpL0lTdXJ2ZXlDb21wb25lbnRcIjtcclxuaW1wb3J0IHsgSUludGVyY2VwdENvbXBvbmVudCB9IGZyb20gXCIuLy4uL0FwaS9JSW50ZXJjZXB0Q29tcG9uZW50XCI7XHJcblxyXG5jbGFzcyBJbnRlcmNlcHRDb21wb25lbnQgaW1wbGVtZW50cyBJSW50ZXJjZXB0Q29tcG9uZW50IHtcclxuXHRwdWJsaWMgc3RhdGljIG1ha2UoZGF0YTogSW50ZXJjZXB0Q29tcG9uZW50LkludGVyY2VwdENvbXBvbmVudERhdGEpOiBJSW50ZXJjZXB0Q29tcG9uZW50IHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHJldHVybiBuZXcgSW50ZXJjZXB0Q29tcG9uZW50KGRhdGEpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZGF0YTogSW50ZXJjZXB0Q29tcG9uZW50LkludGVyY2VwdENvbXBvbmVudERhdGE7XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRhOiBJbnRlcmNlcHRDb21wb25lbnQuSW50ZXJjZXB0Q29tcG9uZW50RGF0YSkge1xyXG5cdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRhdGEgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGF0YS5xdWVzdGlvbikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhLnF1ZXN0aW9uIG11c3Qgbm90IGJlIG51bGwgb3IgZW1wdHlcIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRhdGEudGl0bGUpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGF0YS50aXRsZSBtdXN0IG5vdCBiZSBudWxsIG9yIGVtcHR5XCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkYXRhLnVybCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhLnVybCBtdXN0IG5vdCBiZSBudWxsIG9yIGVtcHR5XCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0VHlwZSgpOiBJU3VydmV5Q29tcG9uZW50LlR5cGUge1xyXG5cdFx0cmV0dXJuIElTdXJ2ZXlDb21wb25lbnQuVHlwZS5JbnRlcmNlcHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0VGl0bGUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEudGl0bGU7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0UXVlc3Rpb24oKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEucXVlc3Rpb247XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0VXJsKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5kYXRhLnVybDtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXREb21FbGVtZW50cyhkb2M6IERvY3VtZW50KTogRWxlbWVudFtdICB7XHJcblx0XHRpZiAoIWRvYykge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJEb2N1bWVudCBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIFtkb2MuY3JlYXRlRWxlbWVudChJU3VydmV5Q29tcG9uZW50LkRPTV9JTlRFUkNFUFRfVEFHTkFNRSldO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldEpzb25FbGVtZW50cygpOiBvYmplY3Qge1xyXG5cdFx0cmV0dXJuIHtbSVN1cnZleUNvbXBvbmVudC5KU09OX0lOVEVSQ0VQVF9LRVlOQU1FXTogXCJcIn07XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0Q29tcG9uZW50SnNvbigpOiBvYmplY3Qge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0W0lTdXJ2ZXlDb21wb25lbnQuSlNPTl9USVRMRV9LRVlOQU1FXTogdGhpcy5nZXRUaXRsZSgpLFxyXG5cdFx0XHRbSVN1cnZleUNvbXBvbmVudC5KU09OX1FVRVNUSU9OX0tFWU5BTUVdOiB0aGlzLmdldFF1ZXN0aW9uKCksXHJcblx0XHRcdFtJU3VydmV5Q29tcG9uZW50LkpTT05fSU5URVJDRVBUVVJMX0tFWU5BTUVdOiB0aGlzLmdldFVybCgpLFxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuXHJcbm1vZHVsZSBJbnRlcmNlcHRDb21wb25lbnQge1xyXG5cdGV4cG9ydCBjbGFzcyBJbnRlcmNlcHRDb21wb25lbnREYXRhIHtcclxuXHRcdHB1YmxpYyBxdWVzdGlvbjogc3RyaW5nO1xyXG5cdFx0cHVibGljIHRpdGxlOiBzdHJpbmc7XHJcblx0XHRwdWJsaWMgdXJsOiBzdHJpbmc7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgPSBJbnRlcmNlcHRDb21wb25lbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/SurveyComponents/InterceptComponent.js\n')},"../FloodgateCore/dist/src/SurveyComponents/MultipleChoiceComponent.js":function(){"use strict";eval('\nvar ISurveyComponent = __webpack_require__(/*! ../Api/ISurveyComponent */ "../FloodgateCore/dist/src/Api/ISurveyComponent.js");\nvar MultipleChoiceComponent = /** @class */ (function () {\n    function MultipleChoiceComponent(data) {\n        if (!data) {\n            throw new Error("data must not be null");\n        }\n        if (!data.question) {\n            throw new Error("data.question must not be null or empty");\n        }\n        if (!data.availableOptions || data.availableOptions.length < 2) {\n            throw new Error("data.availableOptions must not be null or have less than two choices");\n        }\n        data.availableOptions.forEach(function (option) {\n            if (!option) {\n                throw new Error("Option values must not contain null or empty");\n            }\n        });\n        this.data = data;\n        this.optionStates = new Array(data.availableOptions.length);\n        // Initialize with all false values\n        for (var i = 0; i < this.optionStates.length; i++) {\n            this.optionStates[i] = false;\n        }\n    }\n    MultipleChoiceComponent.make = function (data) {\n        try {\n            return new MultipleChoiceComponent(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    MultipleChoiceComponent.prototype.getType = function () {\n        return "MultipleChoice" /* MultipleChoice */;\n    };\n    MultipleChoiceComponent.prototype.getQuestion = function () {\n        return this.data.question;\n    };\n    MultipleChoiceComponent.prototype.getAvailableOptions = function () {\n        return this.data.availableOptions;\n    };\n    MultipleChoiceComponent.prototype.getOptionSelectedStates = function () {\n        return this.optionStates;\n    };\n    MultipleChoiceComponent.prototype.getMinNumberofSelectedOptions = function () {\n        return this.data.minNumberOfSelectedOptions;\n    };\n    MultipleChoiceComponent.prototype.getMaxNumberofSelectedOptions = function () {\n        return this.data.maxNumberOfSelectedOptions;\n    };\n    MultipleChoiceComponent.prototype.setOptionSelectedStates = function (selectedStates) {\n        for (var i = 0; i < selectedStates.length; i++) {\n            this.optionStates[i] = selectedStates[i];\n        }\n    };\n    MultipleChoiceComponent.prototype.ValidateMinNumberofSelectedOptions = function () {\n        var result = 0;\n        this.optionStates.forEach(function (element) {\n            if (element) {\n                result++;\n            }\n        });\n        return (result >= this.getMinNumberofSelectedOptions());\n    };\n    MultipleChoiceComponent.prototype.ValidateMaxNumberofSelectedOptions = function () {\n        var result = 0;\n        this.optionStates.forEach(function (element) {\n            if (element) {\n                result++;\n            }\n        });\n        return (result <= this.getMaxNumberofSelectedOptions());\n    };\n    MultipleChoiceComponent.prototype.getDomElements = function (doc) {\n        if (!doc) {\n            throw new Error("Document must not be null");\n        }\n        var element = doc.createElement(ISurveyComponent.DOM_MULTIPLECHOICE_TAGNAME);\n        element.appendChild(doc.createTextNode(this.getOptionSelectedStates().toString()));\n        return [element];\n    };\n    // @Override\n    MultipleChoiceComponent.prototype.getJsonElements = function () {\n        var result = {};\n        result[ISurveyComponent.JSON_MULTIPLECHOICE_KEYNAME] = this.getOptionSelectedStates().toString();\n        return result;\n    };\n    // @Override\n    MultipleChoiceComponent.prototype.getComponentJson = function () {\n        var _a;\n        return _a = {},\n            _a[ISurveyComponent.JSON_QUESTION_KEYNAME] = this.getQuestion(),\n            _a[ISurveyComponent.JSON_RATINGOPTIONS_KEYNAME] = this.getAvailableOptions(),\n            _a;\n    };\n    return MultipleChoiceComponent;\n}());\n(function (MultipleChoiceComponent) {\n    var MultipleChoiceComponentData = /** @class */ (function () {\n        function MultipleChoiceComponentData() {\n        }\n        return MultipleChoiceComponentData;\n    }());\n    MultipleChoiceComponent.MultipleChoiceComponentData = MultipleChoiceComponentData;\n})(MultipleChoiceComponent || (MultipleChoiceComponent = {}));\nmodule.exports = MultipleChoiceComponent;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleUNvbXBvbmVudHMvTXVsdGlwbGVDaG9pY2VDb21wb25lbnQudHM/MDBkNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0hBQTREO0FBRzVEO0lBWUMsaUNBQW1CLElBQXlEO1FBQzNFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDekM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7U0FDM0Q7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztTQUN4RjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsVUFBQyxNQUFNO1lBQ3BDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2FBQ2hFO1FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksS0FBSyxDQUFVLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRSxtQ0FBbUM7UUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQzdCO0lBQ0YsQ0FBQztJQWxDYSw0QkFBSSxHQUFsQixVQUFtQixJQUF5RDtRQUMzRSxJ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LENBQUM7QUFFRCxXQUFPLHVCQUF1QjtJQUM3QjtRQUFBO1FBS0EsQ0FBQztRQUFELGtDQUFDO0lBQUQsQ0FBQztJQUxZLG1EQUEyQiw4QkFLdkM7QUFDRixDQUFDLEVBUE0sdUJBQXVCLEtBQXZCLHVCQUF1QixRQU83QjtBQUVELGlCQUFTLHVCQUF1QixDQUFDIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvU3VydmV5Q29tcG9uZW50cy9NdWx0aXBsZUNob2ljZUNvbXBvbmVudC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIElTdXJ2ZXlDb21wb25lbnQgZnJvbSBcIi4uL0FwaS9JU3VydmV5Q29tcG9uZW50XCI7XHJcbmltcG9ydCB7IElNdWx0aXBsZUNob2ljZUNvbXBvbmVudCB9IGZyb20gXCIuLy4uL0FwaS9JTXVsdGlwbGVDaG9pY2VDb21wb25lbnRcIjtcclxuXHJcbmNsYXNzIE11bHRpcGxlQ2hvaWNlQ29tcG9uZW50IGltcGxlbWVudHMgSU11bHRpcGxlQ2hvaWNlQ29tcG9uZW50IHtcclxuXHRwdWJsaWMgc3RhdGljIG1ha2UoZGF0YTogTXVsdGlwbGVDaG9pY2VDb21wb25lbnQuTXVsdGlwbGVDaG9pY2VDb21wb25lbnREYXRhKTogSU11bHRpcGxlQ2hvaWNlQ29tcG9uZW50IHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHJldHVybiBuZXcgTXVsdGlwbGVDaG9pY2VDb21wb25lbnQoZGF0YSk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBkYXRhOiBNdWx0aXBsZUNob2ljZUNvbXBvbmVudC5NdWx0aXBsZUNob2ljZUNvbXBvbmVudERhdGE7XHJcblx0cHJpdmF0ZSBvcHRpb25TdGF0ZXM6IGJvb2xlYW5bXTtcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IE11bHRpcGxlQ2hvaWNlQ29tcG9uZW50Lk11bHRpcGxlQ2hvaWNlQ29tcG9uZW50RGF0YSkge1xyXG5cdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRhdGEgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGF0YS5xdWVzdGlvbikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhLnF1ZXN0aW9uIG11c3Qgbm90IGJlIG51bGwgb3IgZW1wdHlcIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRhdGEuYXZhaWxhYmxlT3B0aW9ucyB8fCBkYXRhLmF2YWlsYWJsZU9wdGlvbnMubGVuZ3RoIDwgMikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhLmF2YWlsYWJsZU9wdGlvbnMgbXVzdCBub3QgYmUgbnVsbCBvciBoYXZlIGxlc3MgdGhhbiB0d28gY2hvaWNlc1wiKTtcclxuXHRcdH1cclxuXHJcblx0XHRkYXRhLmF2YWlsYWJsZU9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcblx0XHRcdGlmICghb3B0aW9uKSB7XHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiT3B0aW9uIHZhbHVlcyBtdXN0IG5vdCBjb250YWluIG51bGwgb3IgZW1wdHlcIik7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XHJcblx0XHR0aGlzLm9wdGlvblN0YXRlcyA9IG5ldyBBcnJheTxib29sZWFuPihkYXRhLmF2YWlsYWJsZU9wdGlvbnMubGVuZ3RoKTtcclxuXHRcdC8vIEluaXRpYWxpemUgd2l0aCBhbGwgZmFsc2UgdmFsdWVzXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9uU3RhdGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHRoaXMub3B0aW9uU3RhdGVzW2ldID0gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0VHlwZSgpOiBJU3VydmV5Q29tcG9uZW50LlR5cGUge1xyXG5cdFx0cmV0dXJuIElTdXJ2ZXlDb21wb25lbnQuVHlwZS5NdWx0aXBsZUNob2ljZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRRdWVzdGlvbigpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5xdWVzdGlvbjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRBdmFpbGFibGVPcHRpb25zKCk6IHN0cmluZ1tdIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEuYXZhaWxhYmxlT3B0aW9ucztcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRPcHRpb25TZWxlY3RlZFN0YXRlcygpOiBib29sZWFuW10ge1xyXG5cdFx0cmV0dXJuIHRoaXMub3B0aW9uU3RhdGVzO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldE1pbk51bWJlcm9mU2VsZWN0ZWRPcHRpb25zKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5kYXRhLm1pbk51bWJlck9mU2VsZWN0ZWRPcHRpb25zO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldE1heE51bWJlcm9mU2VsZWN0ZWRPcHRpb25zKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5kYXRhLm1heE51bWJlck9mU2VsZWN0ZWRPcHRpb25zO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldE9wdGlvblNlbGVjdGVkU3RhdGVzKHNlbGVjdGVkU3RhdGVzOiBib29sZWFuW10pOiB2b2lkIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRTdGF0ZXMubGVuZ3RoOyBpICsrKSB7XHJcblx0XHRcdHRoaXMub3B0aW9uU3RhdGVzW2ldID0gc2VsZWN0ZWRTdGF0ZXNbaV07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgVmFsaWRhdGVNaW5OdW1iZXJvZlNlbGVjdGVkT3B0aW9ucygpOiBib29sZWFuIHtcclxuXHRcdGxldCByZXN1bHQ6IG51bWJlciA9IDA7XHJcblx0XHR0aGlzLm9wdGlvblN0YXRlcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcblx0XHRcdGlmIChlbGVtZW50KSB7XHJcblx0XHRcdFx0cmVzdWx0Kys7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiAocmVzdWx0ID49IHRoaXMuZ2V0TWluTnVtYmVyb2ZTZWxlY3RlZE9wdGlvbnMoKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgVmFsaWRhdGVNYXhOdW1iZXJvZlNlbGVjdGVkT3B0aW9ucygpOiBib29sZWFuIHtcclxuXHRcdGxldCByZXN1bHQ6IG51bWJlciA9IDA7XHJcblx0XHR0aGlzLm9wdGlvblN0YXRlcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcblx0XHRcdGlmIChlbGVtZW50KSB7XHJcblx0XHRcdFx0cmVzdWx0Kys7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiAocmVzdWx0IDw9IHRoaXMuZ2V0TWF4TnVtYmVyb2ZTZWxlY3RlZE9wdGlvbnMoKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0RG9tRWxlbWVudHMoZG9jOiBEb2N1bWVudCk6IEVsZW1lbnRbXSB7XHJcblx0XHRpZiAoIWRvYykge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJEb2N1bWVudCBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGVsZW1lbnQ6IEVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudChJU3VydmV5Q29tcG9uZW50LkRPTV9NVUxUSVBMRUNIT0lDRV9UQUdOQU1FKTtcclxuXHJcblx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSh0aGlzLmdldE9wdGlvblNlbGVjdGVkU3RhdGVzKCkudG9TdHJpbmcoKSkpO1xyXG5cclxuXHRcdHJldHVybiBbZWxlbWVudF07XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0SnNvbkVsZW1lbnRzKCk6IG9iamVjdCB7XHJcblx0XHRjb25zdCByZXN1bHQ6IG9iamVjdCA9IHt9O1xyXG5cdFx0cmVzdWx0W0lTdXJ2ZXlDb21wb25lbnQuSlNPTl9NVUxUSVBMRUNIT0lDRV9LRVlOQU1FXSA9IHRoaXMuZ2V0T3B0aW9uU2VsZWN0ZWRTdGF0ZXMoKS50b1N0cmluZygpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0Q29tcG9uZW50SnNvbigpOiBvYmplY3Qge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0W0lTdXJ2ZXlDb21wb25lbnQuSlNPTl9RVUVTVElPTl9LRVlOQU1FXTogdGhpcy5nZXRRdWVzdGlvbigpLFxyXG5cdFx0XHRbSVN1cnZleUNvbXBvbmVudC5KU09OX1JBVElOR09QVElPTlNfS0VZTkFNRV06IHRoaXMuZ2V0QXZhaWxhYmxlT3B0aW9ucygpLFxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuXHJcbm1vZHVsZSBNdWx0aXBsZUNob2ljZUNvbXBvbmVudCB7XHJcblx0ZXhwb3J0IGNsYXNzIE11bHRpcGxlQ2hvaWNlQ29tcG9uZW50RGF0YSB7XHJcblx0XHRwdWJsaWMgcXVlc3Rpb246IHN0cmluZztcclxuXHRcdHB1YmxpYyBhdmFpbGFibGVPcHRpb25zOiBzdHJpbmdbXTtcclxuXHRcdHB1YmxpYyBtaW5OdW1iZXJPZlNlbGVjdGVkT3B0aW9uczogbnVtYmVyO1xyXG5cdFx0cHVibGljIG1heE51bWJlck9mU2VsZWN0ZWRPcHRpb25zOiBudW1iZXI7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgPSBNdWx0aXBsZUNob2ljZUNvbXBvbmVudDtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/SurveyComponents/MultipleChoiceComponent.js\n')},"../FloodgateCore/dist/src/SurveyComponents/PromptComponent.js":function(){"use strict";eval('\nvar ISurveyComponent = __webpack_require__(/*! ../Api/ISurveyComponent */ "../FloodgateCore/dist/src/Api/ISurveyComponent.js");\nvar PromptComponent = /** @class */ (function () {\n    function PromptComponent(data) {\n        if (!data) {\n            throw new Error("data must not be null");\n        }\n        if (!data.question) {\n            throw new Error("data.question must not be null or empty");\n        }\n        if (!data.title) {\n            throw new Error("data.title must not be null or empty");\n        }\n        if (!data.yesButtonLabel) {\n            throw new Error("data.yesButtonLabel must not be null or empty");\n        }\n        if (!data.noButtonLabel) {\n            throw new Error("data.noButtonLabel must not be null or empty");\n        }\n        this.data = data;\n        this.selectedButton = 0 /* Unselected */;\n    }\n    PromptComponent.make = function (data) {\n        try {\n            return new PromptComponent(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    // @Override\n    PromptComponent.prototype.getType = function () {\n        return "Prompt" /* Prompt */;\n    };\n    // @Override\n    PromptComponent.prototype.getTitle = function () {\n        return this.data.title;\n    };\n    // @Override\n    PromptComponent.prototype.getQuestion = function () {\n        return this.data.question;\n    };\n    // @Override\n    PromptComponent.prototype.getYesButtonText = function () {\n        return this.data.yesButtonLabel;\n    };\n    // @Override\n    PromptComponent.prototype.getNoButtonText = function () {\n        return this.data.noButtonLabel;\n    };\n    // @Override\n    PromptComponent.prototype.setButtonSelected = function (selected) {\n        if (selected) {\n            this.selectedButton = selected;\n        }\n    };\n    // @Override\n    PromptComponent.prototype.getButtonSelected = function () {\n        return this.selectedButton;\n    };\n    // @Override\n    PromptComponent.prototype.getDomElements = function (doc) {\n        if (!doc) {\n            throw new Error("Document must not be null");\n        }\n        var element = doc.createElement(ISurveyComponent.DOM_PROMPT_TAGNAME);\n        element.appendChild(doc.createTextNode(this.promptButtonToString(this.getButtonSelected())));\n        return [element];\n    };\n    // @Override\n    PromptComponent.prototype.getJsonElements = function () {\n        var result = {};\n        result[ISurveyComponent.JSON_PROMPT_KEYNAME] = this.promptButtonToString(this.getButtonSelected());\n        return result;\n    };\n    // @Override\n    PromptComponent.prototype.getComponentJson = function () {\n        var _a;\n        return _a = {},\n            _a[ISurveyComponent.JSON_TITLE_KEYNAME] = this.getTitle(),\n            _a[ISurveyComponent.JSON_QUESTION_KEYNAME] = this.getQuestion(),\n            _a[ISurveyComponent.JSON_PROMPTYESTEXT_KEYNAME] = this.getYesButtonText(),\n            _a[ISurveyComponent.JSON_PROMPTNOTEXT_KEYNAME] = this.getNoButtonText(),\n            _a;\n    };\n    PromptComponent.prototype.promptButtonToString = function (value) {\n        switch (value) {\n            case 0 /* Unselected */:\n                return "Unselected";\n            case 1 /* Yes */:\n                return "Yes";\n            case 2 /* No */:\n                return "No";\n            default:\n                return "Unknown";\n        }\n    };\n    return PromptComponent;\n}());\n(function (PromptComponent) {\n    var PromptComponentData = /** @class */ (function () {\n        function PromptComponentData() {\n        }\n        return PromptComponentData;\n    }());\n    PromptComponent.PromptComponentData = PromptComponentData;\n})(PromptComponent || (PromptComponent = {}));\nmodule.exports = PromptComponent;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleUNvbXBvbmVudHMvUHJvbXB0Q29tcG9uZW50LnRzPzRjZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtIQUE0RDtBQUk1RDtJQVlDLHlCQUFtQixJQUF5QztRQUMzRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGNBQWMscUJBQWtDLENBQUM7SUFDdkQsQ0FBQztJQTlCYSxvQkFBSSxHQUFsQixVQUFtQixJQUF5QztRQUMzRCxJQUFJO1lBQ0gsT0FBTyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7U0FDWjtJQUNGLENBQUM7SUEwQkQsWUFBWTtJQUNMLGlDQUFPLEdBQWQ7UUFDQyw2QkFBb0M7SUFDckMsQ0FBQztJQUVELFlBQVk7SUFDTCxrQ0FBUSxHQUFmO1FBQ0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWTtJQUNMLHFDQUFXLEdBQWxCO1FBQ0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBWTtJQUNMLDBDQUFnQixHQUF2QjtRQUNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDakMsQ0FBQztJQUVELFlBQVk7SUFDTCx5Q0FBZSxHQUF0QjtRQUNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVk7SUFDTCwyQ0FBaUIsR0FBeEIsVUFBeUIsUUFBOEI7UUFDdEQsSUFBSSxRQUFRLEVBQUU7WUFDYixJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztTQUMvQjtJQUNGLENBQUM7SUFFRCxZQUFZO0lBQ0wsMkNBQWlCLEdBQXhCO1FBQ0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzVCLENBQUM7SUFFRCxZQUFZO0lBQ0wsd0NBQWMsR0FBckIsVUFBc0IsR0FBYTtRQUNsQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsSUFBTSxPQUFPLEdBQVksR0FBRyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxZQUFZO0lBQ0wseUNBQWUsR0FBdEI7UUFDQyxJQUFNLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFDMUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDbkcsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDO0lBRUQsWUFBWTtJQUNMLDBDQUFnQixHQUF2Qjs7UUFDQztZQUNDLEdBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN0RCxHQUFDLGdCQUFnQixDQUFDLHFCQUFxQixJQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDNUQsR0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsSUFBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdEUsR0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsSUFBRyxJQUFJLENBQUMsZUFBZSxFQUFFO2VBQ25FO0lBQ0gsQ0FBQztJQUVPLDhDQUFvQixHQUE1QixVQUE2QixLQUEyQjtRQUN2RCxRQUFRLEtBQUssRUFBRTtZQUNkO2dCQUNDLE9BQU8sWUFBWSxDQUFDO1lBQ3JCO2dCQUNDLE9BQU8sS0FBSyxDQUFDO1lBQ2Q7Z0JBQ0MsT0FBTyxJQUFJLENBQUM7WUFDYjtnQkFDQyxPQUFPLFNBQVMsQ0FBQztTQUNsQjtJQUNGLENBQUM7SUFDRixzQkFBQztBQUFELENBQUM7QUFFRCxXQUFPLGVBQWU7SUFDckI7UUFBQTtRQUtBLENBQUM7UUFBRCwwQkFBQztJQUFELENBQUM7SUFMWSxtQ0FBbUIsc0JBSy9CO0FBQ0YsQ0FBQyxFQVBNLGVBQWUsS0FBZixlQUFlLFFBT3JCO0FBRUQsaUJBQVMsZUFBZSxDQUFDIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvU3VydmV5Q29tcG9uZW50cy9Qcm9tcHRDb21wb25lbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBJU3VydmV5Q29tcG9uZW50IGZyb20gXCIuLi9BcGkvSVN1cnZleUNvbXBvbmVudFwiO1xyXG5pbXBvcnQgKiBhcyBJUHJvbXB0IGZyb20gXCIuLy4uL0FwaS9JUHJvbXB0XCI7XHJcbmltcG9ydCB7IElQcm9tcHRDb21wb25lbnQgfSBmcm9tIFwiLi8uLi9BcGkvSVByb21wdENvbXBvbmVudFwiO1xyXG5cclxuY2xhc3MgUHJvbXB0Q29tcG9uZW50IGltcGxlbWVudHMgSVByb21wdENvbXBvbmVudCB7XHJcblx0cHVibGljIHN0YXRpYyBtYWtlKGRhdGE6IFByb21wdENvbXBvbmVudC5Qcm9tcHRDb21wb25lbnREYXRhKTogSVByb21wdENvbXBvbmVudCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFByb21wdENvbXBvbmVudChkYXRhKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGRhdGE6IFByb21wdENvbXBvbmVudC5Qcm9tcHRDb21wb25lbnREYXRhO1xyXG5cdHByaXZhdGUgc2VsZWN0ZWRCdXR0b246IElQcm9tcHQuUHJvbXB0QnV0dG9uO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3IoZGF0YTogUHJvbXB0Q29tcG9uZW50LlByb21wdENvbXBvbmVudERhdGEpIHtcclxuXHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRhdGEucXVlc3Rpb24pIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGF0YS5xdWVzdGlvbiBtdXN0IG5vdCBiZSBudWxsIG9yIGVtcHR5XCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkYXRhLnRpdGxlKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRhdGEudGl0bGUgbXVzdCBub3QgYmUgbnVsbCBvciBlbXB0eVwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGF0YS55ZXNCdXR0b25MYWJlbCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhLnllc0J1dHRvbkxhYmVsIG11c3Qgbm90IGJlIG51bGwgb3IgZW1wdHlcIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRhdGEubm9CdXR0b25MYWJlbCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhLm5vQnV0dG9uTGFiZWwgbXVzdCBub3QgYmUgbnVsbCBvciBlbXB0eVwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmRhdGEgPSBkYXRhO1xyXG5cdFx0dGhpcy5zZWxlY3RlZEJ1dHRvbiA9IElQcm9tcHQuUHJvbXB0QnV0dG9uLlVuc2VsZWN0ZWQ7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0VHlwZSgpOiBJU3VydmV5Q29tcG9uZW50LlR5cGUge1xyXG5cdFx0cmV0dXJuIElTdXJ2ZXlDb21wb25lbnQuVHlwZS5Qcm9tcHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0VGl0bGUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEudGl0bGU7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0UXVlc3Rpb24oKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEucXVlc3Rpb247XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0WWVzQnV0dG9uVGV4dCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS55ZXNCdXR0b25MYWJlbDtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXROb0J1dHRvblRleHQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEubm9CdXR0b25MYWJlbDtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBzZXRCdXR0b25TZWxlY3RlZChzZWxlY3RlZDogSVByb21wdC5Qcm9tcHRCdXR0b24pOiB2b2lkIHtcclxuXHRcdGlmIChzZWxlY3RlZCkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkQnV0dG9uID0gc2VsZWN0ZWQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0QnV0dG9uU2VsZWN0ZWQoKTogSVByb21wdC5Qcm9tcHRCdXR0b24ge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0ZWRCdXR0b247XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0RG9tRWxlbWVudHMoZG9jOiBEb2N1bWVudCk6IEVsZW1lbnRbXSAge1xyXG5cdFx0aWYgKCFkb2MpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRG9jdW1lbnQgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBlbGVtZW50OiBFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoSVN1cnZleUNvbXBvbmVudC5ET01fUFJPTVBUX1RBR05BTUUpO1xyXG5cdFx0ZWxlbWVudC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUodGhpcy5wcm9tcHRCdXR0b25Ub1N0cmluZyh0aGlzLmdldEJ1dHRvblNlbGVjdGVkKCkpKSk7XHJcblxyXG5cdFx0cmV0dXJuIFtlbGVtZW50XTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRKc29uRWxlbWVudHMoKTogb2JqZWN0IHtcclxuXHRcdGNvbnN0IHJlc3VsdDogb2JqZWN0ID0ge307XHJcblx0XHRyZXN1bHRbSVN1cnZleUNvbXBvbmVudC5KU09OX1BST01QVF9LRVlOQU1FXSA9IHRoaXMucHJvbXB0QnV0dG9uVG9TdHJpbmcodGhpcy5nZXRCdXR0b25TZWxlY3RlZCgpKTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0Q29tcG9uZW50SnNvbigpOiBvYmplY3Qge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0W0lTdXJ2ZXlDb21wb25lbnQuSlNPTl9USVRMRV9LRVlOQU1FXTogdGhpcy5nZXRUaXRsZSgpLFxyXG5cdFx0XHRbSVN1cnZleUNvbXBvbmVudC5KU09OX1FVRVNUSU9OX0tFWU5BTUVdOiB0aGlzLmdldFF1ZXN0aW9uKCksXHJcblx0XHRcdFtJU3VydmV5Q29tcG9uZW50LkpTT05fUFJPTVBUWUVTVEVYVF9LRVlOQU1FXTogdGhpcy5nZXRZZXNCdXR0b25UZXh0KCksXHJcblx0XHRcdFtJU3VydmV5Q29tcG9uZW50LkpTT05fUFJPTVBUTk9URVhUX0tFWU5BTUVdOiB0aGlzLmdldE5vQnV0dG9uVGV4dCgpLFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvbXB0QnV0dG9uVG9TdHJpbmcodmFsdWU6IElQcm9tcHQuUHJvbXB0QnV0dG9uKTogc3RyaW5nIHtcclxuXHRcdHN3aXRjaCAodmFsdWUpIHtcclxuXHRcdFx0Y2FzZSBJUHJvbXB0LlByb21wdEJ1dHRvbi5VbnNlbGVjdGVkOlxyXG5cdFx0XHRcdHJldHVybiBcIlVuc2VsZWN0ZWRcIjtcclxuXHRcdFx0Y2FzZSBJUHJvbXB0LlByb21wdEJ1dHRvbi5ZZXM6XHJcblx0XHRcdFx0cmV0dXJuIFwiWWVzXCI7XHJcblx0XHRcdGNhc2UgSVByb21wdC5Qcm9tcHRCdXR0b24uTm86XHJcblx0XHRcdFx0cmV0dXJuIFwiTm9cIjtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gXCJVbmtub3duXCI7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5tb2R1bGUgUHJvbXB0Q29tcG9uZW50IHtcclxuXHRleHBvcnQgY2xhc3MgUHJvbXB0Q29tcG9uZW50RGF0YSB7XHJcblx0XHRwdWJsaWMgcXVlc3Rpb246IHN0cmluZztcclxuXHRcdHB1YmxpYyB0aXRsZTogc3RyaW5nO1xyXG5cdFx0cHVibGljIHllc0J1dHRvbkxhYmVsOiBzdHJpbmc7XHJcblx0XHRwdWJsaWMgbm9CdXR0b25MYWJlbDogc3RyaW5nO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0ID0gUHJvbXB0Q29tcG9uZW50O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/SurveyComponents/PromptComponent.js\n')},"../FloodgateCore/dist/src/SurveyComponents/RatingComponent.js":function(){"use strict";eval('\nvar ISurveyComponent = __webpack_require__(/*! ../Api/ISurveyComponent */ "../FloodgateCore/dist/src/Api/ISurveyComponent.js");\nvar RatingComponent = /** @class */ (function () {\n    function RatingComponent(data) {\n        if (!data) {\n            throw new Error("data must not be null");\n        }\n        if (!data.question) {\n            throw new Error("data.question must not be null or empty");\n        }\n        if (!data.ratingValuesAscending || data.ratingValuesAscending.length < 2) {\n            throw new Error("data.ratingValuesAscending must not be null or have less than two choices");\n        }\n        data.ratingValuesAscending.forEach(function (rating) {\n            if (!rating) {\n                throw new Error("rating values must not contain null or empty");\n            }\n        });\n        this.data = data;\n        this.selectedIndex = -1;\n    }\n    RatingComponent.make = function (data) {\n        try {\n            return new RatingComponent(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    RatingComponent.prototype.getType = function () {\n        return "Rating" /* Rating */;\n    };\n    RatingComponent.prototype.getQuestion = function () {\n        return this.data.question;\n    };\n    RatingComponent.prototype.getRatingValuesAscending = function () {\n        return this.data.ratingValuesAscending;\n    };\n    RatingComponent.prototype.getSelectedRating = function () {\n        if (!this.isRatingIndexValid(this.selectedIndex)) {\n            return "";\n        }\n        return this.data.ratingValuesAscending[this.selectedIndex];\n    };\n    RatingComponent.prototype.setSelectedRatingIndex = function (selected) {\n        if (this.isRatingIndexValid(selected)) {\n            this.selectedIndex = selected;\n        }\n        else {\n            this.selectedIndex = -1;\n        }\n    };\n    RatingComponent.prototype.getSelectedRatingIndex = function () {\n        return this.selectedIndex;\n    };\n    RatingComponent.prototype.getDomElements = function (doc) {\n        if (!doc) {\n            throw new Error("Document must not be null");\n        }\n        var element = doc.createElement(ISurveyComponent.DOM_RATING_TAGNAME);\n        if (!this.isRatingIndexValid(this.getSelectedRatingIndex())) {\n            element.appendChild(doc.createTextNode("Not rated"));\n        }\n        else {\n            // Enforce six digits after the decimal\n            element.appendChild(doc.createTextNode(this.getNormalizedRatingScore().toFixed(6)));\n        }\n        return [element];\n    };\n    // @Override\n    RatingComponent.prototype.getJsonElements = function () {\n        var result = {};\n        if (!this.isRatingIndexValid(this.getSelectedRatingIndex())) {\n            result[ISurveyComponent.JSON_RATING_KEYNAME] = "Not rated";\n        }\n        else {\n            result[ISurveyComponent.JSON_RATING_KEYNAME] = this.getNormalizedRatingScore();\n        }\n        return result;\n    };\n    // @Override\n    RatingComponent.prototype.getComponentJson = function () {\n        var _a;\n        return _a = {},\n            _a[ISurveyComponent.JSON_QUESTION_KEYNAME] = this.getQuestion(),\n            _a[ISurveyComponent.JSON_RATINGOPTIONS_KEYNAME] = this.getRatingValuesAscending(),\n            _a;\n    };\n    RatingComponent.prototype.getNormalizedRatingScore = function () {\n        if (!this.isRatingIndexValid(this.getSelectedRatingIndex())) {\n            return -1;\n        }\n        if (this.data.isZeroBased) {\n            return (this.selectedIndex) / (this.data.ratingValuesAscending.length - 1);\n        }\n        else {\n            return (this.selectedIndex + 1.0) / this.data.ratingValuesAscending.length;\n        }\n    };\n    RatingComponent.prototype.isRatingIndexValid = function (index) {\n        return (index >= 0 && index < this.data.ratingValuesAscending.length);\n    };\n    return RatingComponent;\n}());\n(function (RatingComponent) {\n    var RatingComponentData = /** @class */ (function () {\n        function RatingComponentData() {\n        }\n        return RatingComponentData;\n    }());\n    RatingComponent.RatingComponentData = RatingComponentData;\n})(RatingComponent || (RatingComponent = {}));\nmodule.exports = RatingComponent;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleUNvbXBvbmVudHMvUmF0aW5nQ29tcG9uZW50LnRzP2UwNjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtIQUE0RDtBQUc1RDtJQVlDLHlCQUFtQixJQUF5QztRQUMzRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6RSxNQUFNLElBQUksS0FBSyxDQUFDLDJFQUEyRSxDQUFDLENBQUM7U0FDN0Y7UUFFRCxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFVBQUMsTUFBTTtZQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQzthQUNoRTtRQUNGLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBOUJhLG9CQUFJLEdBQWxCLFVBQW1CLElBQXlDO1FBQzNELElBQUk7WUFDSCxPQUFPLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztTQUNaO0lBQ0YsQ0FBQztJQTBCTSxpQ0FBTyxHQUFkO1FBQ0MsNkJBQW9DO0lBQ3JDLENBQUM7SUFFTSxxQ0FBVyxHQUFsQjtRQUNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFD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QUMsTUFBTSxDQUFDO1NBQzNFO0lBQ0YsQ0FBQztJQUVPLDRDQUFrQixHQUExQixVQUEyQixLQUFhO1FBQ3ZDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRixzQkFBQztBQUFELENBQUM7QUFFRCxXQUFPLGVBQWU7SUFDckI7UUFBQTtRQUlBLENBQUM7UUFBRCwwQkFBQztJQUFELENBQUM7SUFKWSxtQ0FBbUIsc0JBSS9CO0FBQ0YsQ0FBQyxFQU5NLGVBQWUsS0FBZixlQUFlLFFBTXJCO0FBRUQsaUJBQVMsZUFBZSxDQUFDIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvU3VydmV5Q29tcG9uZW50cy9SYXRpbmdDb21wb25lbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBJU3VydmV5Q29tcG9uZW50IGZyb20gXCIuLi9BcGkvSVN1cnZleUNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBJUmF0aW5nQ29tcG9uZW50IH0gZnJvbSBcIi4vLi4vQXBpL0lSYXRpbmdDb21wb25lbnRcIjtcclxuXHJcbmNsYXNzIFJhdGluZ0NvbXBvbmVudCBpbXBsZW1lbnRzIElSYXRpbmdDb21wb25lbnQge1xyXG5cdHB1YmxpYyBzdGF0aWMgbWFrZShkYXRhOiBSYXRpbmdDb21wb25lbnQuUmF0aW5nQ29tcG9uZW50RGF0YSk6IElSYXRpbmdDb21wb25lbnQge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0cmV0dXJuIG5ldyBSYXRpbmdDb21wb25lbnQoZGF0YSk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBkYXRhOiBSYXRpbmdDb21wb25lbnQuUmF0aW5nQ29tcG9uZW50RGF0YTtcclxuXHRwcml2YXRlIHNlbGVjdGVkSW5kZXg6IG51bWJlcjtcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IFJhdGluZ0NvbXBvbmVudC5SYXRpbmdDb21wb25lbnREYXRhKSB7XHJcblx0XHRpZiAoIWRhdGEpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGF0YSBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkYXRhLnF1ZXN0aW9uKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRhdGEucXVlc3Rpb24gbXVzdCBub3QgYmUgbnVsbCBvciBlbXB0eVwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGF0YS5yYXRpbmdWYWx1ZXNBc2NlbmRpbmcgfHwgZGF0YS5yYXRpbmdWYWx1ZXNBc2NlbmRpbmcubGVuZ3RoIDwgMikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhLnJhdGluZ1ZhbHVlc0FzY2VuZGluZyBtdXN0IG5vdCBiZSBudWxsIG9yIGhhdmUgbGVzcyB0aGFuIHR3byBjaG9pY2VzXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRhdGEucmF0aW5nVmFsdWVzQXNjZW5kaW5nLmZvckVhY2goKHJhdGluZykgPT4ge1xyXG5cdFx0XHRpZiAoIXJhdGluZykge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInJhdGluZyB2YWx1ZXMgbXVzdCBub3QgY29udGFpbiBudWxsIG9yIGVtcHR5XCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmRhdGEgPSBkYXRhO1xyXG5cdFx0dGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0VHlwZSgpOiBJU3VydmV5Q29tcG9uZW50LlR5cGUge1xyXG5cdFx0cmV0dXJuIElTdXJ2ZXlDb21wb25lbnQuVHlwZS5SYXRpbmc7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0UXVlc3Rpb24oKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEucXVlc3Rpb247XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0UmF0aW5nVmFsdWVzQXNjZW5kaW5nKCk6IHN0cmluZ1tdIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEucmF0aW5nVmFsdWVzQXNjZW5kaW5nO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFNlbGVjdGVkUmF0aW5nKCk6IHN0cmluZyB7XHJcblx0XHRpZiAoIXRoaXMuaXNSYXRpbmdJbmRleFZhbGlkKHRoaXMuc2VsZWN0ZWRJbmRleCkpIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5yYXRpbmdWYWx1ZXNBc2NlbmRpbmdbdGhpcy5zZWxlY3RlZEluZGV4XTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRTZWxlY3RlZFJhdGluZ0luZGV4KHNlbGVjdGVkOiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmlzUmF0aW5nSW5kZXhWYWxpZChzZWxlY3RlZCkpIHtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWQ7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRTZWxlY3RlZFJhdGluZ0luZGV4KCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5zZWxlY3RlZEluZGV4O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldERvbUVsZW1lbnRzKGRvYzogRG9jdW1lbnQpOiBFbGVtZW50W10ge1xyXG5cdFx0aWYgKCFkb2MpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRG9jdW1lbnQgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBlbGVtZW50OiBFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoSVN1cnZleUNvbXBvbmVudC5ET01fUkFUSU5HX1RBR05BTUUpO1xyXG5cclxuXHRcdGlmICghdGhpcy5pc1JhdGluZ0luZGV4VmFsaWQodGhpcy5nZXRTZWxlY3RlZFJhdGluZ0luZGV4KCkpKSB7XHJcblx0XHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKFwiTm90IHJhdGVkXCIpKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIEVuZm9yY2Ugc2l4IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxyXG5cdFx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSh0aGlzLmdldE5vcm1hbGl6ZWRSYXRpbmdTY29yZSgpLnRvRml4ZWQoNikpKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gW2VsZW1lbnRdO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldEpzb25FbGVtZW50cygpOiBvYmplY3Qge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBvYmplY3QgPSB7fTtcclxuXHJcblx0XHRpZiAoIXRoaXMuaXNSYXRpbmdJbmRleFZhbGlkKHRoaXMuZ2V0U2VsZWN0ZWRSYXRpbmdJbmRleCgpKSkge1xyXG5cdFx0XHRyZXN1bHRbSVN1cnZleUNvbXBvbmVudC5KU09OX1JBVElOR19LRVlOQU1FXSA9IFwiTm90IHJhdGVkXCI7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXN1bHRbSVN1cnZleUNvbXBvbmVudC5KU09OX1JBVElOR19LRVlOQU1FXSA9IHRoaXMuZ2V0Tm9ybWFsaXplZFJhdGluZ1Njb3JlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRDb21wb25lbnRKc29uKCk6IG9iamVjdCB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRbSVN1cnZleUNvbXBvbmVudC5KU09OX1FVRVNUSU9OX0tFWU5BTUVdOiB0aGlzLmdldFF1ZXN0aW9uKCksXHJcblx0XHRcdFtJU3VydmV5Q29tcG9uZW50LkpTT05fUkFUSU5HT1BUSU9OU19LRVlOQU1FXTogdGhpcy5nZXRSYXRpbmdWYWx1ZXNBc2NlbmRpbmcoKSxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0Tm9ybWFsaXplZFJhdGluZ1Njb3JlKCk6IG51bWJlciB7XHJcblx0XHRpZiAoIXRoaXMuaXNSYXRpbmdJbmRleFZhbGlkKHRoaXMuZ2V0U2VsZWN0ZWRSYXRpbmdJbmRleCgpKSkge1xyXG5cdFx0XHRyZXR1cm4gLTE7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuZGF0YS5pc1plcm9CYXNlZCkge1xyXG5cdFx0XHRyZXR1cm4gKHRoaXMuc2VsZWN0ZWRJbmRleCkgLyAodGhpcy5kYXRhLnJhdGluZ1ZhbHVlc0FzY2VuZGluZy5sZW5ndGggLSAxKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiAodGhpcy5zZWxlY3RlZEluZGV4ICsgMS4wKSAvIHRoaXMuZGF0YS5yYXRpbmdWYWx1ZXNBc2NlbmRpbmcubGVuZ3RoO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBpc1JhdGluZ0luZGV4VmFsaWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5kYXRhLnJhdGluZ1ZhbHVlc0FzY2VuZGluZy5sZW5ndGgpO1xyXG5cdH1cclxuXHJcbn1cclxuXHJcbm1vZHVsZSBSYXRpbmdDb21wb25lbnQge1xyXG5cdGV4cG9ydCBjbGFzcyBSYXRpbmdDb21wb25lbnREYXRhIHtcclxuXHRcdHB1YmxpYyBxdWVzdGlvbjogc3RyaW5nO1xyXG5cdFx0cHVibGljIHJhdGluZ1ZhbHVlc0FzY2VuZGluZzogc3RyaW5nW107XHJcblx0XHRwdWJsaWMgaXNaZXJvQmFzZWQ6IGJvb2xlYW47XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgPSBSYXRpbmdDb21wb25lbnQ7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/SurveyComponents/RatingComponent.js\n')},"../FloodgateCore/dist/src/SurveyEvents.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.CountedActivitySequenceEventData = exports.CountedActivitySequenceEvent = exports.CountedActivityEventData = exports.CountedActivityEvent = void 0;\nvar ActivityTrackingData_1 = __webpack_require__(/*! ./ActivityTrackingData */ "../FloodgateCore/dist/src/ActivityTrackingData.js");\nvar ActivityTrackingSet_1 = __webpack_require__(/*! ./ActivityTrackingSet */ "../FloodgateCore/dist/src/ActivityTrackingSet.js");\nvar CountedActivityEvent = /** @class */ (function () {\n    function CountedActivityEvent(data) {\n        if (!data) {\n            throw new Error("data must not be null");\n        }\n        if (data.count <= 0) {\n            throw new Error("count must be greater than 0");\n        }\n        if (!data.activity || data.activity.length === 0) {\n            throw new Error("activity must not be null or an empty string");\n        }\n        this.data = data;\n    }\n    CountedActivityEvent.make = function (data) {\n        try {\n            return new CountedActivityEvent(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    CountedActivityEvent.prototype.getActivity = function () {\n        return this.data.activity;\n    };\n    CountedActivityEvent.prototype.getCount = function () {\n        return this.data.count;\n    };\n    CountedActivityEvent.prototype.isAggregate = function () {\n        return this.data.isAggregate;\n    };\n    CountedActivityEvent.prototype.getType = function () {\n        return "CountedActivity" /* CountedActivity */;\n    };\n    CountedActivityEvent.prototype.getTrackingSet = function () {\n        var trackingDataList = new Array();\n        trackingDataList.push(new ActivityTrackingData_1.ActivityTrackingData(this.data.activity, this.data.count, this.data.isAggregate));\n        return new ActivityTrackingSet_1.ActivityTrackingSet(false, trackingDataList);\n    };\n    return CountedActivityEvent;\n}());\nexports.CountedActivityEvent = CountedActivityEvent;\n/**\n * Data class for serialization and deserialization. Do not add logic in here.\n */\nvar CountedActivityEventData = /** @class */ (function () {\n    function CountedActivityEventData() {\n    }\n    return CountedActivityEventData;\n}());\nexports.CountedActivityEventData = CountedActivityEventData;\nvar CountedActivitySequenceEvent = /** @class */ (function () {\n    function CountedActivitySequenceEvent(data) {\n        if (!data) {\n            throw new Error("data must not be null");\n        }\n        if (!data.sequence) {\n            throw new Error("data.sequence must not be null");\n        }\n        if (data.sequence.length === 0) {\n            throw new Error("data.sequence size must be greater than 0");\n        }\n        this.data = [];\n        for (var _i = 0, _a = data.sequence; _i < _a.length; _i++) {\n            var countedActivityEventData = _a[_i];\n            this.data.push(new CountedActivityEvent(countedActivityEventData));\n        }\n    }\n    CountedActivitySequenceEvent.make = function (data) {\n        try {\n            return new CountedActivitySequenceEvent(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    CountedActivitySequenceEvent.prototype.getSequence = function () {\n        return this.data;\n    };\n    CountedActivitySequenceEvent.prototype.getType = function () {\n        return "CountedActivitySequence" /* CountedActivitySequence */;\n    };\n    CountedActivitySequenceEvent.prototype.getTrackingSet = function () {\n        var trackingDataList = new Array();\n        for (var _i = 0, _a = this.data; _i < _a.length; _i++) {\n            var countedActivityEvent = _a[_i];\n            trackingDataList.push(new ActivityTrackingData_1.ActivityTrackingData(countedActivityEvent.getActivity(), countedActivityEvent.getCount(), countedActivityEvent.isAggregate()));\n        }\n        return new ActivityTrackingSet_1.ActivityTrackingSet(true, trackingDataList);\n    };\n    return CountedActivitySequenceEvent;\n}());\nexports.CountedActivitySequenceEvent = CountedActivitySequenceEvent;\n/**\n * Data class for serialization and deserialization. Do not add logic in here.\n */\nvar CountedActivitySequenceEventData = /** @class */ (function () {\n    function CountedActivitySequenceEventData() {\n    }\n    /**\n     * No args constructor needed for serialization.\n     */\n    CountedActivitySequenceEventData.prototype.CountedActivitySequenceEventData = function () {\n    };\n    return CountedActivitySequenceEventData;\n}());\nexports.CountedActivitySequenceEventData = CountedActivitySequenceEventData;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleUV2ZW50cy50cz9mYWVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9JQUE4RDtBQUM5RCxpSUFBNEQ7QUE0QjVEO0lBV0MsOEJBQW1CLElBQThCO1FBQ2hELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDekM7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7U0FDaEU7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0lBdEJhLHlCQUFJLEdBQWxCLFVBQW1CLElBQThCO1FBQ2hELElBQUk7WUFDSCxPQUFPLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNYLE9BQU8sSUFBSSxDQUFDO1NBQ1o7SUFDRixDQUFDO0lBa0JNLDBDQUFXLEdBQWxCO1FBQ0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRU0sdUNBQVEsR0FBZjtRQUNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVNLDBDQUFXLEdBQWxCO1FBQ0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM5QixDQUFDO0lBRU0sc0NBQU8sR0FBZDtRQUNDLCtDQUF5QztJQUMxQyxDQUFDO0lBRU0sNkNBQWMsR0FBckI7UUFDQyxJQUFNLGdCQUFnQixHQUFHLElBQUksS0FBSyxFQUF3QixDQUFDO1FBQzNELGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLDJDQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM1RyxPQUFPLElBQUkseUNBQW1CLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNGLDJCQUFDO0FBQUQsQ0FBQztBQTlDWSxvREFBb0I7QUFnRGpDOztHQUVHO0FBQ0g7SUFBQTtJQUlBLENBQUM7SUFBRCwrQkFBQztBQUFELENBQUM7QUFKWSw0REFBd0I7QUFNckM7SUFXQyxzQ0FBbUIsSUFBc0M7UUFDeEQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUN6QztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztTQUM3RDtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsS0FBdUMsVUFBYSxFQUFiLFNBQUksQ0FBQyxRQUFRLEVBQWIsY0FBYSxFQUFiLElBQWEsRUFBRTtZQUFqRCxJQUFNLHdCQUF3QjtZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLG9CQUFvQixDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztTQUNuRTtJQUNGLENBQUM7SUF6QmEsaUNBQUksR0FBbEIsVUFBbUIsSUFBc0M7UUFDeEQsSUFBSTtZQUNILE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7U0FDWjtJQUNGLENBQUM7SUFxQk0sa0RBQVcsR0FBbEI7UUFDQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUVNLDhDQUFPLEdBQWQ7UUFDQywrREFBaUQ7SUFDbEQsQ0FBQztJQUVNLHFEQUFjLEdBQXJCO1FBQ0MsSUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssRUFBd0IsQ0FBQztRQUUzRCxLQUFtQyxVQUFTLEVBQVQsU0FBSSxDQUFDLElBQUksRUFBVCxjQUFTLEVBQVQsSUFBUyxFQUFFO1lBQXpDLElBQU0sb0JBQW9CO1lBQzlCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLDJDQUFvQixDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxFQUFFLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxFQUNqSCxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdEM7UUFFRCxPQUFPLElBQUkseUNBQW1CLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNGLG1DQUFDO0FBQUQsQ0FBQztBQTlDWSxvRUFBNEI7QUFnRHpDOztHQUVHO0FBQ0g7SUFBQTtJQVFBLENBQUM7SUFMQTs7T0FFRztJQUNJLDJFQUFnQyxHQUF2QztJQUNBLENBQUM7SUFDRix1Q0FBQztBQUFELENBQUM7QUFSWSw0RUFBZ0MiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9TdXJ2ZXlFdmVudHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpdml0eVRyYWNraW5nRGF0YSB9IGZyb20gXCIuL0FjdGl2aXR5VHJhY2tpbmdEYXRhXCI7XHJcbmltcG9ydCB7IEFjdGl2aXR5VHJhY2tpbmdTZXQgfSBmcm9tIFwiLi9BY3Rpdml0eVRyYWNraW5nU2V0XCI7XHJcbmltcG9ydCAqIGFzIElTdXJ2ZXlFdmVudCBmcm9tIFwiLi9JU3VydmV5RXZlbnRcIjtcclxuXHJcbi8qKlxyXG4gKiBBIFN1cnZleUV2ZW50IHRoYXQgY291bnRzIG9jY3VycmVuY2VzIG9mIGEgbGl0ZXJhbCBzdHJpbmcgbG9nZ2VkIGJ5IHRoZSBwcm9kdWN0LlxyXG4gKiBTdXJ2ZXkgaXMgYWN0aXZhdGVkIG9uY2UgdGhlIGFjdGl2aXR5IG9jY3VycyBDb3VudCB0aW1lcy5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvdW50ZWRBY3Rpdml0eUV2ZW50IGV4dGVuZHMgSVN1cnZleUV2ZW50IHtcclxuXHQvKipcclxuXHQgKiBOYW1lIG9mIHRoZSBhY3Rpdml0eSB0byBsaXN0ZW4gZm9yXHJcblx0ICovXHJcblx0Z2V0QWN0aXZpdHkoKTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBOdW1iZXIgb2YgdGltZXMgdGhlIG5hbWVkIGFjdGl2aXR5IG11c3QgYmUgbG9nZ2VkIHRvIGFjdGl2YXRlXHJcblx0ICovXHJcblx0Z2V0Q291bnQoKTogbnVtYmVyO1xyXG5cclxuXHQvKipcclxuXHQgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY291bnQgc2hvdWxkIGJlIHBlcnNpc3RlZCBhY3Jvc3MgYXBwIHNlc3Npb25zXHJcblx0ICovXHJcblx0aXNBZ2dyZWdhdGUoKTogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ291bnRlZEFjdGl2aXR5U2VxdWVuY2VFdmVudCBleHRlbmRzIElTdXJ2ZXlFdmVudCB7XHJcblx0Z2V0U2VxdWVuY2UoKTogSUNvdW50ZWRBY3Rpdml0eUV2ZW50W107XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb3VudGVkQWN0aXZpdHlFdmVudCBpbXBsZW1lbnRzIElDb3VudGVkQWN0aXZpdHlFdmVudCB7XHJcblx0cHVibGljIHN0YXRpYyBtYWtlKGRhdGE6IENvdW50ZWRBY3Rpdml0eUV2ZW50RGF0YSk6IElDb3VudGVkQWN0aXZpdHlFdmVudCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IENvdW50ZWRBY3Rpdml0eUV2ZW50KGRhdGEpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZGF0YTogQ291bnRlZEFjdGl2aXR5RXZlbnREYXRhO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3IoZGF0YTogQ291bnRlZEFjdGl2aXR5RXZlbnREYXRhKSB7XHJcblx0XHRpZiAoIWRhdGEpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGF0YSBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGRhdGEuY291bnQgPD0gMCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkYXRhLmFjdGl2aXR5IHx8IGRhdGEuYWN0aXZpdHkubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImFjdGl2aXR5IG11c3Qgbm90IGJlIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZGF0YSA9IGRhdGE7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0QWN0aXZpdHkoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEuYWN0aXZpdHk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0Q291bnQoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEuY291bnQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgaXNBZ2dyZWdhdGUoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmlzQWdncmVnYXRlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFR5cGUoKTogSVN1cnZleUV2ZW50LlR5cGUge1xyXG5cdFx0cmV0dXJuIElTdXJ2ZXlFdmVudC5UeXBlLkNvdW50ZWRBY3Rpdml0eTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRUcmFja2luZ1NldCgpOiBBY3Rpdml0eVRyYWNraW5nU2V0IHtcclxuXHRcdGNvbnN0IHRyYWNraW5nRGF0YUxpc3QgPSBuZXcgQXJyYXk8QWN0aXZpdHlUcmFja2luZ0RhdGE+KCk7XHJcblx0XHR0cmFja2luZ0RhdGFMaXN0LnB1c2gobmV3IEFjdGl2aXR5VHJhY2tpbmdEYXRhKHRoaXMuZGF0YS5hY3Rpdml0eSwgdGhpcy5kYXRhLmNvdW50LCB0aGlzLmRhdGEuaXNBZ2dyZWdhdGUpKTtcclxuXHRcdHJldHVybiBuZXcgQWN0aXZpdHlUcmFja2luZ1NldChmYWxzZSwgdHJhY2tpbmdEYXRhTGlzdCk7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogRGF0YSBjbGFzcyBmb3Igc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLiBEbyBub3QgYWRkIGxvZ2ljIGluIGhlcmUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ291bnRlZEFjdGl2aXR5RXZlbnREYXRhIHtcclxuXHRwdWJsaWMgYWN0aXZpdHk6IHN0cmluZztcclxuXHRwdWJsaWMgY291bnQ6IG51bWJlcjtcclxuXHRwdWJsaWMgaXNBZ2dyZWdhdGU6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZUV2ZW50IGltcGxlbWVudHMgSUNvdW50ZWRBY3Rpdml0eVNlcXVlbmNlRXZlbnQge1xyXG5cdHB1YmxpYyBzdGF0aWMgbWFrZShkYXRhOiBDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZUV2ZW50RGF0YSk6IElDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZUV2ZW50IHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHJldHVybiBuZXcgQ291bnRlZEFjdGl2aXR5U2VxdWVuY2VFdmVudChkYXRhKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGRhdGE6IElDb3VudGVkQWN0aXZpdHlFdmVudFtdO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3IoZGF0YTogQ291bnRlZEFjdGl2aXR5U2VxdWVuY2VFdmVudERhdGEpIHtcclxuXHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRhdGEuc2VxdWVuY2UpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGF0YS5zZXF1ZW5jZSBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGRhdGEuc2VxdWVuY2UubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRhdGEuc2VxdWVuY2Ugc2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZGF0YSA9IFtdO1xyXG5cdFx0Zm9yIChjb25zdCBjb3VudGVkQWN0aXZpdHlFdmVudERhdGEgb2YgZGF0YS5zZXF1ZW5jZSkge1xyXG5cdFx0XHR0aGlzLmRhdGEucHVzaChuZXcgQ291bnRlZEFjdGl2aXR5RXZlbnQoY291bnRlZEFjdGl2aXR5RXZlbnREYXRhKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0U2VxdWVuY2UoKTogSUNvdW50ZWRBY3Rpdml0eUV2ZW50W10ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRUeXBlKCk6IElTdXJ2ZXlFdmVudC5UeXBlIHtcclxuXHRcdHJldHVybiBJU3VydmV5RXZlbnQuVHlwZS5Db3VudGVkQWN0aXZpdHlTZXF1ZW5jZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRUcmFja2luZ1NldCgpOiBBY3Rpdml0eVRyYWNraW5nU2V0IHtcclxuXHRcdGNvbnN0IHRyYWNraW5nRGF0YUxpc3QgPSBuZXcgQXJyYXk8QWN0aXZpdHlUcmFja2luZ0RhdGE+KCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb3VudGVkQWN0aXZpdHlFdmVudCBvZiB0aGlzLmRhdGEpIHtcclxuXHRcdFx0dHJhY2tpbmdEYXRhTGlzdC5wdXNoKG5ldyBBY3Rpdml0eVRyYWNraW5nRGF0YShjb3VudGVkQWN0aXZpdHlFdmVudC5nZXRBY3Rpdml0eSgpLCBjb3VudGVkQWN0aXZpdHlFdmVudC5nZXRDb3VudCgpLFxyXG5cdFx0XHRcdGNvdW50ZWRBY3Rpdml0eUV2ZW50LmlzQWdncmVnYXRlKCkpKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbmV3IEFjdGl2aXR5VHJhY2tpbmdTZXQodHJ1ZSwgdHJhY2tpbmdEYXRhTGlzdCk7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogRGF0YSBjbGFzcyBmb3Igc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLiBEbyBub3QgYWRkIGxvZ2ljIGluIGhlcmUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ291bnRlZEFjdGl2aXR5U2VxdWVuY2VFdmVudERhdGEge1xyXG5cdHB1YmxpYyBzZXF1ZW5jZTogQ291bnRlZEFjdGl2aXR5RXZlbnREYXRhW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5vIGFyZ3MgY29uc3RydWN0b3IgbmVlZGVkIGZvciBzZXJpYWxpemF0aW9uLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBDb3VudGVkQWN0aXZpdHlTZXF1ZW5jZUV2ZW50RGF0YSgpIHtcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/SurveyEvents.js\n')},"../FloodgateCore/dist/src/SurveyMetadata.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.Metadata = exports.SurveyMetadata = void 0;\nvar Utils = __webpack_require__(/*! ./Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar SurveyMetadata = /** @class */ (function () {\n    function SurveyMetadata(data) {\n        if (!data) {\n            throw new Error("data must not be null");\n        }\n        if (!data.contentMetadata) {\n            throw new Error("content metadata must not be null");\n        }\n        if (!Utils.isObject(data.contentMetadata)) {\n            throw new Error("content metadata must be of object type");\n        }\n        this.data = data;\n    }\n    SurveyMetadata.make = function (data) {\n        try {\n            return new SurveyMetadata(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    SurveyMetadata.prototype.getContentMetadata = function () {\n        return this.data.contentMetadata;\n    };\n    return SurveyMetadata;\n}());\nexports.SurveyMetadata = SurveyMetadata;\n/**\n * Data class for serialization and deserialization. Do not add logic in here.\n */\nvar Metadata = /** @class */ (function () {\n    function Metadata() {\n    }\n    return Metadata;\n}());\nexports.Metadata = Metadata;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleU1ldGFkYXRhLnRzP2U0NzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscUZBQWlDO0FBRWpDO0lBV0Msd0JBQW1CLElBQWM7UUFDaEMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUN6QztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7U0FDM0Q7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0lBdEJhLG1CQUFJLEdBQWxCLFVBQW1CLElBQWM7UUFDaEMsSUFBSTtZQUNILE9BQU8sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNYLE9BQU8sSUFBSSxDQUFDO1NBQ1o7SUFDRixDQUFDO0lBa0JNLDJDQUFrQixHQUF6QjtRQUNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDbEMsQ0FBQztJQUNGLHFCQUFDO0FBQUQsQ0FBQztBQTVCWSx3Q0FBYztBQThCM0I7O0dBRUc7QUFDSDtJQUFBO0lBRUEsQ0FBQztJQUFELGVBQUM7QUFBRCxDQUFDO0FBRlksNEJBQVEiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9TdXJ2ZXlNZXRhZGF0YS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElTdXJ2ZXlNZXRhZGF0YSB9IGZyb20gXCIuL0lTdXJ2ZXlNZXRhZGF0YVwiO1xyXG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tIFwiLi9VdGlsc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleU1ldGFkYXRhIGltcGxlbWVudHMgSVN1cnZleU1ldGFkYXRhIHtcclxuXHRwdWJsaWMgc3RhdGljIG1ha2UoZGF0YTogTWV0YWRhdGEpOiBJU3VydmV5TWV0YWRhdGEge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0cmV0dXJuIG5ldyBTdXJ2ZXlNZXRhZGF0YShkYXRhKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGRhdGE6IE1ldGFkYXRhO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3IoZGF0YTogTWV0YWRhdGEpIHtcclxuXHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRhdGEuY29udGVudE1ldGFkYXRhKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImNvbnRlbnQgbWV0YWRhdGEgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghVXRpbHMuaXNPYmplY3QoZGF0YS5jb250ZW50TWV0YWRhdGEpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImNvbnRlbnQgbWV0YWRhdGEgbXVzdCBiZSBvZiBvYmplY3QgdHlwZVwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmRhdGEgPSBkYXRhO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENvbnRlbnRNZXRhZGF0YSgpOiBvYmplY3Qge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5jb250ZW50TWV0YWRhdGE7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogRGF0YSBjbGFzcyBmb3Igc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLiBEbyBub3QgYWRkIGxvZ2ljIGluIGhlcmUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTWV0YWRhdGEge1xyXG5cdHB1YmxpYyBjb250ZW50TWV0YWRhdGE6IG9iamVjdDtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/SurveyMetadata.js\n')},"../FloodgateCore/dist/src/SurveyStatCollection.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.SurveyStatCollection = void 0;\n/**\n * Generic class for managing a collection of survey stats. Includes read-from/write-to json structures or a file,\n * as well as merge routines for combining collections\n */\nvar SurveyStatCollection = /** @class */ (function () {\n    function SurveyStatCollection() {\n        // The following property name matches the JSON root key name for proper serialization/ deserialization\n        this.Surveys = {};\n        this.Surveys = {};\n    }\n    /**\n     * Add stats. Overwrites if already exists.\n     */\n    SurveyStatCollection.prototype.addStats = function (surveyId, stats) {\n        this.Surveys[surveyId] = stats;\n    };\n    /**\n     * Get a SurveyActivationStats object by surveyId. Returns null if surveyId is not found\n     */\n    SurveyStatCollection.prototype.getBySurveyId = function (surveyId) {\n        return (this.Surveys[surveyId]);\n    };\n    /**\n     * Get all stats available\n     */\n    SurveyStatCollection.prototype.getStats = function () {\n        return this.Surveys;\n    };\n    return SurveyStatCollection;\n}());\nexports.SurveyStatCollection = SurveyStatCollection;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleVN0YXRDb2xsZWN0aW9uLnRzPzJkMmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUE7OztHQUdHO0FBQ0g7SUFJQztRQUhBLHVHQUF1RztRQUMvRixZQUFPLEdBQXdCLEVBQUUsQ0FBQztRQUd6QyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSSx1Q0FBUSxHQUFmLFVBQWdCLFFBQWdCLEVBQUUsS0FBYTtRQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSw0Q0FBYSxHQUFwQixVQUFxQixRQUFnQjtRQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLHVDQUFRLEdBQWY7UUFDQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDckIsQ0FBQztJQUNGLDJCQUFDO0FBQUQsQ0FBQztBQTVCcUIsb0RBQW9CIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvU3VydmV5U3RhdENvbGxlY3Rpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRGljdGlvbmFyeSB9IGZyb20gXCIuL0NvbW1vblwiO1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyaWMgY2xhc3MgZm9yIG1hbmFnaW5nIGEgY29sbGVjdGlvbiBvZiBzdXJ2ZXkgc3RhdHMuIEluY2x1ZGVzIHJlYWQtZnJvbS93cml0ZS10byBqc29uIHN0cnVjdHVyZXMgb3IgYSBmaWxlLFxyXG4gKiBhcyB3ZWxsIGFzIG1lcmdlIHJvdXRpbmVzIGZvciBjb21iaW5pbmcgY29sbGVjdGlvbnNcclxuICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTdXJ2ZXlTdGF0Q29sbGVjdGlvbjxUU3RhdHM+IHtcclxuXHQvLyBUaGUgZm9sbG93aW5nIHByb3BlcnR5IG5hbWUgbWF0Y2hlcyB0aGUgSlNPTiByb290IGtleSBuYW1lIGZvciBwcm9wZXIgc2VyaWFsaXphdGlvbi8gZGVzZXJpYWxpemF0aW9uXHJcblx0cHJpdmF0ZSBTdXJ2ZXlzOiBJRGljdGlvbmFyeTxUU3RhdHM+ID0ge307XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMuU3VydmV5cyA9IHt9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIHN0YXRzLiBPdmVyd3JpdGVzIGlmIGFscmVhZHkgZXhpc3RzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhZGRTdGF0cyhzdXJ2ZXlJZDogc3RyaW5nLCBzdGF0czogVFN0YXRzKTogdm9pZCB7XHJcblx0XHR0aGlzLlN1cnZleXNbc3VydmV5SWRdID0gc3RhdHM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgYSBTdXJ2ZXlBY3RpdmF0aW9uU3RhdHMgb2JqZWN0IGJ5IHN1cnZleUlkLiBSZXR1cm5zIG51bGwgaWYgc3VydmV5SWQgaXMgbm90IGZvdW5kXHJcblx0ICovXHJcblx0cHVibGljIGdldEJ5U3VydmV5SWQoc3VydmV5SWQ6IHN0cmluZyk6IFRTdGF0cyB7XHJcblx0XHRyZXR1cm4gKHRoaXMuU3VydmV5c1tzdXJ2ZXlJZF0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IGFsbCBzdGF0cyBhdmFpbGFibGVcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0U3RhdHMoKTogSURpY3Rpb25hcnk8VFN0YXRzPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5TdXJ2ZXlzO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/SurveyStatCollection.js\n')},"../FloodgateCore/dist/src/SurveyStatCollectionActivation.js":function(){"use strict";eval('\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.SurveyActivationStats = exports.FileBasedSurveyActivationStatsProvider = exports.HostBasedSurveyActivationStatsProvider = exports.SurveyActivationStatsProviderFactory = exports.SurveyStatCollectionActivation = void 0;\nvar IFloodgateStorageProvider = __webpack_require__(/*! ./Api/IFloodgateStorageProvider */ "../FloodgateCore/dist/src/Api/IFloodgateStorageProvider.js");\nvar FileType = IFloodgateStorageProvider.FileType;\nvar ISurvey = __webpack_require__(/*! ./Api/ISurvey */ "../FloodgateCore/dist/src/Api/ISurvey.js");\nvar Constants_1 = __webpack_require__(/*! ./Constants */ "../FloodgateCore/dist/src/Constants.js");\nvar FloodgateEngine_1 = __webpack_require__(/*! ./FloodgateEngine */ "../FloodgateCore/dist/src/FloodgateEngine.js");\nvar StateProviderHelpers = __webpack_require__(/*! ./StateProviderHelpers */ "../FloodgateCore/dist/src/StateProviderHelpers.js");\nvar SurveyStatCollection_1 = __webpack_require__(/*! ./SurveyStatCollection */ "../FloodgateCore/dist/src/SurveyStatCollection.js");\nvar Utils = __webpack_require__(/*! ./Utils */ "../FloodgateCore/dist/src/Utils.js");\n/**\n * StatCollection for activated surveys.  Should be used to track the SurveyIds\n * that have been recently shown to a user\n */\n// TODO (gachoi) Check if this applies - VSOBug: 1443010 One bad Stat object fails the entire serialization\nvar SurveyStatCollectionActivation = /** @class */ (function (_super) {\n    __extends(SurveyStatCollectionActivation, _super);\n    function SurveyStatCollectionActivation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Load from Json\n     */\n    SurveyStatCollectionActivation.fromJson = function (json) {\n        var statCollection = new SurveyStatCollectionActivation();\n        if (!json) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.SurveyStatCollectionActivation.FromJson.Failed, { ErrorMessage: "Input json is null or empty." });\n            return statCollection;\n        }\n        var readStats;\n        try {\n            readStats = JSON.parse(json);\n        }\n        catch (e) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.SurveyStatCollectionActivation.FromJson.Failed, { ErrorMessage: "Json parsing failed. " + e.toString() });\n            return statCollection;\n        }\n        if (!statCollection.deserialize(readStats)) {\n            return new SurveyStatCollectionActivation();\n        }\n        return statCollection;\n    };\n    /**\n     * Convert to Json\n     */\n    SurveyStatCollectionActivation.toJson = function (object) {\n        if (!object) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.SurveyStatCollectionActivation.ToJson.Failed, { ErrorMessage: "Input json is null or empty." });\n            object = new SurveyStatCollectionActivation();\n        }\n        return JSON.stringify(object);\n    };\n    /**\n     * Add another SurveyStatCollectionActivation object\n     */\n    SurveyStatCollectionActivation.prototype.accumulate = function (other) {\n        if (!other) {\n            return;\n        }\n        var stats = other.getStats();\n        // SurveyActivationStats accumulation simply overwrites any keys from \'other\' into our collection\n        for (var key in stats) {\n            if (stats.hasOwnProperty(key)) {\n                this.addStats(key, stats[key]);\n            }\n        }\n    };\n    /**\n     * Method to deserialize SurveyStatCollectionActivation\n     * @param input: collection of SurveyStatCollectionActivation\n     * Returns result of validation check\n     */\n    SurveyStatCollectionActivation.prototype.deserialize = function (input) {\n        var rawStats = input.Surveys;\n        var now = new Date();\n        for (var key in rawStats) {\n            if (rawStats.hasOwnProperty(key)) {\n                var newStat = new SurveyActivationStats();\n                if (newStat.deserialize(rawStats[key]) && newStat.ExpirationTimeUtc > now) {\n                    this.addStats(key, newStat);\n                }\n            }\n        }\n        return this.validate();\n    };\n    /**\n     * Validate the Surveys\n     * Returns false if validation fails\n     */\n    SurveyStatCollectionActivation.prototype.validate = function () {\n        return Utils.isObject(this.getStats());\n    };\n    return SurveyStatCollectionActivation;\n}(SurveyStatCollection_1.SurveyStatCollection));\nexports.SurveyStatCollectionActivation = SurveyStatCollectionActivation;\nvar SurveyActivationStatsProviderFactory = /** @class */ (function () {\n    function SurveyActivationStatsProviderFactory() {\n    }\n    SurveyActivationStatsProviderFactory.make = function (fileBasedStorage, hostBasedStorage) {\n        if (hostBasedStorage) {\n            return new HostBasedSurveyActivationStatsProvider(fileBasedStorage, hostBasedStorage);\n        }\n        return new FileBasedSurveyActivationStatsProvider(fileBasedStorage);\n    };\n    return SurveyActivationStatsProviderFactory;\n}());\nexports.SurveyActivationStatsProviderFactory = SurveyActivationStatsProviderFactory;\nvar HostBasedSurveyActivationStatsProvider = /** @class */ (function () {\n    function HostBasedSurveyActivationStatsProvider(fileBasedStorageProvider, hostBasedStorage) {\n        if (!hostBasedStorage) {\n            throw new Error("host-based storage must not be null");\n        }\n        this.hostBasedStorage = hostBasedStorage;\n        // file based provider is optional\n        if (fileBasedStorageProvider) {\n            this.fileBasedStorageProvider = new FileBasedSurveyActivationStatsProvider(fileBasedStorageProvider);\n        }\n    }\n    // @Override\n    HostBasedSurveyActivationStatsProvider.prototype.load = function () {\n        var surveyStatsFromHost = this.getSurveyStatsFromHost();\n        var surveyStatsFromFile = new SurveyStatCollectionActivation();\n        if (this.fileBasedStorageProvider) {\n            surveyStatsFromFile = this.fileBasedStorageProvider.load();\n        }\n        var surveyStatsCollections = StateProviderHelpers.MergeAndUpdateSurveyActivationStats(surveyStatsFromFile, surveyStatsFromHost);\n        return surveyStatsCollections.find(0 /* Merged */);\n    };\n    // @Override\n    HostBasedSurveyActivationStatsProvider.prototype.save = function (stats) {\n        if (!stats) {\n            return;\n        }\n        var statsFromHost = this.getSurveyStatsFromHost();\n        var statCollection = StateProviderHelpers.MergeAndUpdateSurveyActivationStats(stats, statsFromHost);\n        var toBeUpdatedStats = statCollection.find(1 /* ToBeUpdated */);\n        var mergedStates = statCollection.find(0 /* Merged */);\n        // write delta_data to Roaming\n        if (toBeUpdatedStats) {\n            var toBeUpdatedStatsDictionary = toBeUpdatedStats.getStats();\n            for (var surveyId in toBeUpdatedStatsDictionary) {\n                if (toBeUpdatedStatsDictionary.hasOwnProperty(surveyId)) {\n                    var item = StateProviderHelpers.makeSettingItemValue(JSON.stringify(toBeUpdatedStatsDictionary[surveyId]));\n                    this.hostBasedStorage.upsertSettingItem(FileType[FileType.SurveyActivationStats], surveyId, item);\n                }\n            }\n        }\n        // Write merged data to File\n        if (this.fileBasedStorageProvider) {\n            this.fileBasedStorageProvider.save(mergedStates);\n        }\n    };\n    HostBasedSurveyActivationStatsProvider.prototype.getSurveyStatsFromHost = function () {\n        var statsCollection = new SurveyStatCollectionActivation();\n        var itemData = this.hostBasedStorage.readSettingList(FileType[FileType.SurveyActivationStats]);\n        var now = new Date();\n        for (var surveyId in itemData) {\n            if (!itemData.hasOwnProperty(surveyId)) {\n                continue;\n            }\n            var dataString = StateProviderHelpers.extractSettingItemValueSubString(itemData[surveyId]);\n            var newStats = new SurveyActivationStats();\n            try {\n                var readStats = JSON.parse(dataString);\n                newStats.deserialize(readStats);\n            }\n            catch (e) {\n                FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.HostBasedSurveyActivationStatsProvider.GetSurveyStatsFromHost.Failed, { ErrorMessage: "Json parsing/deserializing failed. " + e.toString() + ".  Input:" + dataString });\n            }\n            if (newStats.ExpirationTimeUtc <= now) {\n                // Delete survey stat from host storage if it\'s expired.\n                this.hostBasedStorage.deleteSettingItem(FileType[FileType.SurveyActivationStats], surveyId);\n            }\n            else {\n                statsCollection.addStats(surveyId, newStats);\n            }\n        }\n        return statsCollection;\n    };\n    return HostBasedSurveyActivationStatsProvider;\n}());\nexports.HostBasedSurveyActivationStatsProvider = HostBasedSurveyActivationStatsProvider;\nvar FileBasedSurveyActivationStatsProvider = /** @class */ (function () {\n    function FileBasedSurveyActivationStatsProvider(storage) {\n        if (!storage) {\n            throw new Error("storage must not be null");\n        }\n        this.storage = storage;\n    }\n    // @Override\n    FileBasedSurveyActivationStatsProvider.prototype.load = function () {\n        var readString = this.storage.read(IFloodgateStorageProvider.FileType.SurveyActivationStats);\n        if (!readString) {\n            return new SurveyStatCollectionActivation();\n        }\n        return SurveyStatCollectionActivation.fromJson(readString);\n    };\n    // @Override\n    FileBasedSurveyActivationStatsProvider.prototype.save = function (surveyStatCollectionActivation) {\n        if (!surveyStatCollectionActivation) {\n            return;\n        }\n        var writeString = SurveyStatCollectionActivation.toJson(surveyStatCollectionActivation);\n        this.storage.write(IFloodgateStorageProvider.FileType.SurveyActivationStats, writeString);\n    };\n    return FileBasedSurveyActivationStatsProvider;\n}());\nexports.FileBasedSurveyActivationStatsProvider = FileBasedSurveyActivationStatsProvider;\nvar SurveyActivationStats = /** @class */ (function () {\n    function SurveyActivationStats() {\n        this.SurveyLaunchCount = 0;\n        this.SurveyLaunchCountPerSession = 0;\n    }\n    /**\n     * Method to deserialize a JSON object to class object\n     * @param input: JSON object\n     * Returns result of validation check\n     */\n    SurveyActivationStats.prototype.deserialize = function (input) {\n        var _a, _b;\n        this.ActivationTimeUtc = input.ActivationTimeUtc;\n        this.ExpirationTimeUtc = input.ExpirationTimeUtc;\n        this.Type = input.Type;\n        this.SurveyLaunchCount = (_a = input.SurveyLaunchCount) !== null && _a !== void 0 ? _a : 0;\n        this.SurveyLaunchCountPerSession = (_b = input.SurveyLaunchCountPerSession) !== null && _b !== void 0 ? _b : 0;\n        return this.validate();\n    };\n    /**\n     * Method to call after deserialization to validate generated object.\n     * Returns false if not valid.\n     */\n    SurveyActivationStats.prototype.validate = function () {\n        // make it a date object if it\'s a valid UTC date time value\n        if (Utils.isUtcDatetimeString(this.ActivationTimeUtc)) {\n            this.ActivationTimeUtc = Utils.stringToDate(this.ActivationTimeUtc);\n        }\n        else {\n            return false;\n        }\n        // make it a date object if it\'s a valid UTC date time value\n        if (Utils.isUtcDatetimeString(this.ExpirationTimeUtc)) {\n            this.ExpirationTimeUtc = Utils.stringToDate(this.ExpirationTimeUtc);\n        }\n        else {\n            return false;\n        }\n        if (!Utils.isNumber(this.SurveyLaunchCount) ||\n            !Utils.isNumber(this.SurveyLaunchCountPerSession)) {\n            return false;\n        }\n        return Utils.isEnumValue(this.Type, ISurvey.Type);\n    };\n    return SurveyActivationStats;\n}());\nexports.SurveyActivationStats = SurveyActivationStats;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbi50cz9iM2QyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSx5SkFBNkU7QUFDN0UsSUFBTyxRQUFRLEdBQUcseUJBQXlCLENBQUMsUUFBUSxDQUFDO0FBQ3JELG1HQUF5QztBQUV6QyxtR0FBNkM7QUFDN0MscUhBQW9EO0FBQ3BELGtJQUErRDtBQUMvRCxvSUFBOEQ7QUFDOUQscUZBQWlDO0FBRWpDOzs7R0FHRztBQUNILDJHQUEyRztBQUMzRztJQUFvRCxrREFBMkM7SUFBL0Y7O0lBd0ZBLENBQUM7SUF2RkE7O09BRUc7SUFDVyx1Q0FBUSxHQUF0QixVQUF1QixJQUFZO1FBQ2xDLElBQU0sY0FBYyxHQUFHLElBQUksOEJBQThCLEVBQUUsQ0FBQztRQUU1RCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1YsaUNBQWUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FDN0MsMEJBQWMsQ0FBQyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLDhCQUE4QixFQUFFLENBQUMsQ0FBQztZQUNsSCxPQUFPLGNBQWMsQ0FBQztTQUN0QjtRQUVELElBQUksU0FBeUMsQ0FBQztRQUM5QyxJQUFJO1lBQ0gsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNYLGlDQUFlLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQzdDLDBCQUFjLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFILE9BQU8sY0FBYyxDQUFDO1NBQ3RCO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsU0FBUyxD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QUFDLGlCQUFpQixDQUFDLENBQUM7U0FDcEU7YUFBTTtZQUNOLE9BQU8sS0FBSyxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDMUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFO1lBQ25ELE9BQU8sS0FBSyxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNGLDRCQUFDO0FBQUQsQ0FBQztBQWpEWSxzREFBcUIiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9TdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRmxvb2RnYXRlU2V0dGluZyB9IGZyb20gXCIuL0FwaS9JRmxvb2RnYXRlU2V0dGluZ1wiO1xyXG5pbXBvcnQgeyBJRmxvb2RnYXRlU2V0dGluZ1N0b3JhZ2VDYWxsYmFjayB9IGZyb20gXCIuL0FwaS9JRmxvb2RnYXRlU2V0dGluZ1N0b3JhZ2VDYWxsYmFja1wiO1xyXG5pbXBvcnQgKiBhcyBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyIGZyb20gXCIuL0FwaS9JRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyXCI7XHJcbmltcG9ydCBGaWxlVHlwZSA9IElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIuRmlsZVR5cGU7XHJcbmltcG9ydCAqIGFzIElTdXJ2ZXkgZnJvbSBcIi4vQXBpL0lTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgSURpY3Rpb25hcnksIElTZXJpYWxpemFibGUgfSBmcm9tIFwiLi9Db21tb25cIjtcclxuaW1wb3J0IHsgVGVsZW1ldHJ5RXZlbnQgfSBmcm9tIFwiLi9Db25zdGFudHNcIjtcclxuaW1wb3J0IHsgRmxvb2RnYXRlRW5naW5lIH0gZnJvbSBcIi4vRmxvb2RnYXRlRW5naW5lXCI7XHJcbmltcG9ydCAqIGFzIFN0YXRlUHJvdmlkZXJIZWxwZXJzIGZyb20gXCIuL1N0YXRlUHJvdmlkZXJIZWxwZXJzXCI7XHJcbmltcG9ydCB7IFN1cnZleVN0YXRDb2xsZWN0aW9uIH0gZnJvbSBcIi4vU3VydmV5U3RhdENvbGxlY3Rpb25cIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4vVXRpbHNcIjtcclxuXHJcbi8qKlxyXG4gKiBTdGF0Q29sbGVjdGlvbiBmb3IgYWN0aXZhdGVkIHN1cnZleXMuICBTaG91bGQgYmUgdXNlZCB0byB0cmFjayB0aGUgU3VydmV5SWRzXHJcbiAqIHRoYXQgaGF2ZSBiZWVuIHJlY2VudGx5IHNob3duIHRvIGEgdXNlclxyXG4gKi9cclxuLy8gVE9ETyAoZ2FjaG9pKSBDaGVjayBpZiB0aGlzIGFwcGxpZXMgLSBWU09CdWc6IDE0NDMwMTAgT25lIGJhZCBTdGF0IG9iamVjdCBmYWlscyB0aGUgZW50aXJlIHNlcmlhbGl6YXRpb25cclxuZXhwb3J0IGNsYXNzIFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbiBleHRlbmRzIFN1cnZleVN0YXRDb2xsZWN0aW9uPFN1cnZleUFjdGl2YXRpb25TdGF0cz4gaW1wbGVtZW50cyBJU2VyaWFsaXphYmxlIHtcclxuXHQvKipcclxuXHQgKiBMb2FkIGZyb20gSnNvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdGF0aWMgZnJvbUpzb24oanNvbjogc3RyaW5nKTogU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uIHtcclxuXHRcdGNvbnN0IHN0YXRDb2xsZWN0aW9uID0gbmV3IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbigpO1xyXG5cclxuXHRcdGlmICghanNvbikge1xyXG5cdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0V2ZW50KFxyXG5cdFx0XHRcdFRlbGVtZXRyeUV2ZW50LlN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbi5Gcm9tSnNvbi5GYWlsZWQsIHsgRXJyb3JNZXNzYWdlOiBcIklucHV0IGpzb24gaXMgbnVsbCBvciBlbXB0eS5cIiB9KTtcclxuXHRcdFx0cmV0dXJuIHN0YXRDb2xsZWN0aW9uO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCByZWFkU3RhdHM6IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbjtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHJlYWRTdGF0cyA9IEpTT04ucGFyc2UoanNvbik7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfRXZlbnQoXHJcblx0XHRcdFx0VGVsZW1ldHJ5RXZlbnQuU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uLkZyb21Kc29uLkZhaWxlZCwgeyBFcnJvck1lc3NhZ2U6IFwiSnNvbiBwYXJzaW5nIGZhaWxlZC4gXCIgKyBlLnRvU3RyaW5nKCkgfSk7XHJcblx0XHRcdHJldHVybiBzdGF0Q29sbGVjdGlvbjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXN0YXRDb2xsZWN0aW9uLmRlc2VyaWFsaXplKHJlYWRTdGF0cykpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb24oKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gc3RhdENvbGxlY3Rpb247XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0IHRvIEpzb25cclxuXHQgKi9cclxuXHRwdWJsaWMgc3RhdGljIHRvSnNvbihvYmplY3Q6IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbik6IHN0cmluZyB7XHJcblx0XHRpZiAoIW9iamVjdCkge1xyXG5cdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0V2ZW50KFxyXG5cdFx0XHRcdFRlbGVtZXRyeUV2ZW50LlN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbi5Ub0pzb24uRmFpbGVkLCB7IEVycm9yTWVzc2FnZTogXCJJbnB1dCBqc29uIGlzIG51bGwgb3IgZW1wdHkuXCIgfSk7XHJcblx0XHRcdG9iamVjdCA9IG5ldyBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb24oKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCBhbm90aGVyIFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbiBvYmplY3RcclxuXHQgKi9cclxuXHRwdWJsaWMgYWNjdW11bGF0ZShvdGhlcjogU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uKTogdm9pZCB7XHJcblx0XHRpZiAoIW90aGVyKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBzdGF0czogSURpY3Rpb25hcnk8U3VydmV5QWN0aXZhdGlvblN0YXRzPiA9IG90aGVyLmdldFN0YXRzKCk7XHJcblx0XHQvLyBTdXJ2ZXlBY3RpdmF0aW9uU3RhdHMgYWNjdW11bGF0aW9uIHNpbXBseSBvdmVyd3JpdGVzIGFueSBrZXlzIGZyb20gJ290aGVyJyBpbnRvIG91ciBjb2xsZWN0aW9uXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBzdGF0cykge1xyXG5cdFx0XHRpZiAoc3RhdHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdHRoaXMuYWRkU3RhdHMoa2V5LCBzdGF0c1trZXldKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTWV0aG9kIHRvIGRlc2VyaWFsaXplIFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvblxyXG5cdCAqIEBwYXJhbSBpbnB1dDogY29sbGVjdGlvbiBvZiBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb25cclxuXHQgKiBSZXR1cm5zIHJlc3VsdCBvZiB2YWxpZGF0aW9uIGNoZWNrXHJcblx0ICovXHJcblx0cHVibGljIGRlc2VyaWFsaXplKGlucHV0OiBhbnkpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHJhd1N0YXRzOiBJRGljdGlvbmFyeTxTdXJ2ZXlBY3RpdmF0aW9uU3RhdHM+ID0gaW5wdXQuU3VydmV5cztcclxuXHRcdGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcmF3U3RhdHMpIHtcclxuXHRcdFx0aWYgKHJhd1N0YXRzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRjb25zdCBuZXdTdGF0ID0gbmV3IFN1cnZleUFjdGl2YXRpb25TdGF0cygpO1xyXG5cclxuXHRcdFx0XHRpZiAobmV3U3RhdC5kZXNlcmlhbGl6ZShyYXdTdGF0c1trZXldKSAmJiBuZXdTdGF0LkV4cGlyYXRpb25UaW1lVXRjID4gbm93KSB7XHJcblx0XHRcdFx0XHR0aGlzLmFkZFN0YXRzKGtleSwgbmV3U3RhdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudmFsaWRhdGUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZhbGlkYXRlIHRoZSBTdXJ2ZXlzXHJcblx0ICogUmV0dXJucyBmYWxzZSBpZiB2YWxpZGF0aW9uIGZhaWxzXHJcblx0ICovXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFV0aWxzLmlzT2JqZWN0KHRoaXMuZ2V0U3RhdHMoKSk7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlciB7XHJcblx0bG9hZCgpOiBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb247XHJcblxyXG5cdHNhdmUoc3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uOiBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb24pOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aXZhdGlvblN0YXRzUHJvdmlkZXJGYWN0b3J5IHtcclxuXHRwdWJsaWMgc3RhdGljIG1ha2UoZmlsZUJhc2VkU3RvcmFnZTogSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlcixcclxuXHRcdGhvc3RCYXNlZFN0b3JhZ2U6IElGbG9vZGdhdGVTZXR0aW5nU3RvcmFnZUNhbGxiYWNrKTogSVN1cnZleUFjdGl2YXRpb25TdGF0c1Byb3ZpZGVyIHtcclxuXHRcdGlmIChob3N0QmFzZWRTdG9yYWdlKSB7XHJcblx0XHRcdHJldHVybiBuZXcgSG9zdEJhc2VkU3VydmV5QWN0aXZhdGlvblN0YXRzUHJvdmlkZXIoZmlsZUJhc2VkU3RvcmFnZSwgaG9zdEJhc2VkU3RvcmFnZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG5ldyBGaWxlQmFzZWRTdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlcihmaWxlQmFzZWRTdG9yYWdlKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBIb3N0QmFzZWRTdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlciBpbXBsZW1lbnRzIElTdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlciB7XHJcblx0cHJpdmF0ZSBmaWxlQmFzZWRTdG9yYWdlUHJvdmlkZXI6IEZpbGVCYXNlZFN1cnZleUFjdGl2YXRpb25TdGF0c1Byb3ZpZGVyO1xyXG5cdHByaXZhdGUgaG9zdEJhc2VkU3RvcmFnZTogSUZsb29kZ2F0ZVNldHRpbmdTdG9yYWdlQ2FsbGJhY2s7XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihmaWxlQmFzZWRTdG9yYWdlUHJvdmlkZXI6IElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIsIGhvc3RCYXNlZFN0b3JhZ2U6IElGbG9vZGdhdGVTZXR0aW5nU3RvcmFnZUNhbGxiYWNrKSB7XHJcblx0XHRpZiAoIWhvc3RCYXNlZFN0b3JhZ2UpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaG9zdC1iYXNlZCBzdG9yYWdlIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5ob3N0QmFzZWRTdG9yYWdlID0gaG9zdEJhc2VkU3RvcmFnZTtcclxuXHJcblx0XHQvLyBmaWxlIGJhc2VkIHByb3ZpZGVyIGlzIG9wdGlvbmFsXHJcblx0XHRpZiAoZmlsZUJhc2VkU3RvcmFnZVByb3ZpZGVyKSB7XHJcblx0XHRcdHRoaXMuZmlsZUJhc2VkU3RvcmFnZVByb3ZpZGVyID0gbmV3IEZpbGVCYXNlZFN1cnZleUFjdGl2YXRpb25TdGF0c1Byb3ZpZGVyKGZpbGVCYXNlZFN0b3JhZ2VQcm92aWRlcik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgbG9hZCgpOiBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb24ge1xyXG5cdFx0Y29uc3Qgc3VydmV5U3RhdHNGcm9tSG9zdDogU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uID0gdGhpcy5nZXRTdXJ2ZXlTdGF0c0Zyb21Ib3N0KCk7XHJcblxyXG5cdFx0bGV0IHN1cnZleVN0YXRzRnJvbUZpbGU6IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbiA9IG5ldyBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb24oKTtcclxuXHRcdGlmICh0aGlzLmZpbGVCYXNlZFN0b3JhZ2VQcm92aWRlcikge1xyXG5cdFx0XHRzdXJ2ZXlTdGF0c0Zyb21GaWxlID0gdGhpcy5maWxlQmFzZWRTdG9yYWdlUHJvdmlkZXIubG9hZCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHN1cnZleVN0YXRzQ29sbGVjdGlvbnMgPSBTdGF0ZVByb3ZpZGVySGVscGVycy5NZXJnZUFuZFVwZGF0ZVN1cnZleUFjdGl2YXRpb25TdGF0cyhzdXJ2ZXlTdGF0c0Zyb21GaWxlLCBzdXJ2ZXlTdGF0c0Zyb21Ib3N0KTtcclxuXHRcdHJldHVybiBzdXJ2ZXlTdGF0c0NvbGxlY3Rpb25zLmZpbmQoU3RhdGVQcm92aWRlckhlbHBlcnMuU3RhdGVMaXN0VHlwZS5NZXJnZWQpO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIHNhdmUoc3RhdHM6IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbik6IHZvaWQge1xyXG5cdFx0aWYgKCFzdGF0cykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc3RhdHNGcm9tSG9zdDogU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uID0gdGhpcy5nZXRTdXJ2ZXlTdGF0c0Zyb21Ib3N0KCk7XHJcblx0XHRjb25zdCBzdGF0Q29sbGVjdGlvbiA9IFN0YXRlUHJvdmlkZXJIZWxwZXJzLk1lcmdlQW5kVXBkYXRlU3VydmV5QWN0aXZhdGlvblN0YXRzKHN0YXRzLCBzdGF0c0Zyb21Ib3N0KTtcclxuXHRcdGNvbnN0IHRvQmVVcGRhdGVkU3RhdHM6IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbiA9IHN0YXRDb2xsZWN0aW9uLmZpbmQoU3RhdGVQcm92aWRlckhlbHBlcnMuU3RhdGVMaXN0VHlwZS5Ub0JlVXBkYXRlZCk7XHJcblx0XHRjb25zdCBtZXJnZWRTdGF0ZXM6IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbiA9IHN0YXRDb2xsZWN0aW9uLmZpbmQoU3RhdGVQcm92aWRlckhlbHBlcnMuU3RhdGVMaXN0VHlwZS5NZXJnZWQpO1xyXG5cclxuXHRcdC8vIHdyaXRlIGRlbHRhX2RhdGEgdG8gUm9hbWluZ1xyXG5cdFx0aWYgKHRvQmVVcGRhdGVkU3RhdHMpIHtcclxuXHRcdFx0Y29uc3QgdG9CZVVwZGF0ZWRTdGF0c0RpY3Rpb25hcnk6IElEaWN0aW9uYXJ5PFN1cnZleUFjdGl2YXRpb25TdGF0cz4gPSB0b0JlVXBkYXRlZFN0YXRzLmdldFN0YXRzKCk7XHJcblx0XHRcdGZvciAoY29uc3Qgc3VydmV5SWQgaW4gdG9CZVVwZGF0ZWRTdGF0c0RpY3Rpb25hcnkpIHtcclxuXHRcdFx0XHRpZiAodG9CZVVwZGF0ZWRTdGF0c0RpY3Rpb25hcnkuaGFzT3duUHJvcGVydHkoc3VydmV5SWQpKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtOiBzdHJpbmcgPSBTdGF0ZVByb3ZpZGVySGVscGVycy5tYWtlU2V0dGluZ0l0ZW1WYWx1ZShcclxuXHRcdFx0XHRcdFx0SlNPTi5zdHJpbmdpZnkodG9CZVVwZGF0ZWRTdGF0c0RpY3Rpb25hcnlbc3VydmV5SWRdKSk7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5ob3N0QmFzZWRTdG9yYWdlLnVwc2VydFNldHRpbmdJdGVtKEZpbGVUeXBlW0ZpbGVUeXBlLlN1cnZleUFjdGl2YXRpb25TdGF0c10sXHJcblx0XHRcdFx0XHRcdHN1cnZleUlkLCBpdGVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBXcml0ZSBtZXJnZWQgZGF0YSB0byBGaWxlXHJcblx0XHRpZiAodGhpcy5maWxlQmFzZWRTdG9yYWdlUHJvdmlkZXIpIHtcclxuXHRcdFx0dGhpcy5maWxlQmFzZWRTdG9yYWdlUHJvdmlkZXIuc2F2ZShtZXJnZWRTdGF0ZXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRTdXJ2ZXlTdGF0c0Zyb21Ib3N0KCk6IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbiB7XHJcblx0XHRjb25zdCBzdGF0c0NvbGxlY3Rpb246IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbiA9IG5ldyAgU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uKCk7XHJcblx0XHRjb25zdCBpdGVtRGF0YTogSUZsb29kZ2F0ZVNldHRpbmcgPSB0aGlzLmhvc3RCYXNlZFN0b3JhZ2UucmVhZFNldHRpbmdMaXN0KEZpbGVUeXBlW0ZpbGVUeXBlLlN1cnZleUFjdGl2YXRpb25TdGF0c10pO1xyXG5cclxuXHRcdGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcblx0XHRmb3IgKGNvbnN0IHN1cnZleUlkIGluIGl0ZW1EYXRhKSB7XHJcblx0XHRcdGlmICghaXRlbURhdGEuaGFzT3duUHJvcGVydHkoc3VydmV5SWQpKSB7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGRhdGFTdHJpbmc6IHN0cmluZyA9IFN0YXRlUHJvdmlkZXJIZWxwZXJzLmV4dHJhY3RTZXR0aW5nSXRlbVZhbHVlU3ViU3RyaW5nKGl0ZW1EYXRhW3N1cnZleUlkXSk7XHJcblx0XHRcdGNvbnN0IG5ld1N0YXRzOiBTdXJ2ZXlBY3RpdmF0aW9uU3RhdHMgPSBuZXcgU3VydmV5QWN0aXZhdGlvblN0YXRzKCk7XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Y29uc3QgcmVhZFN0YXRzOiBTdXJ2ZXlBY3RpdmF0aW9uU3RhdHMgPSBKU09OLnBhcnNlKGRhdGFTdHJpbmcpO1xyXG5cdFx0XHRcdG5ld1N0YXRzLmRlc2VyaWFsaXplKHJlYWRTdGF0cyk7XHJcblx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0V2ZW50KFxyXG5cdFx0XHRcdFx0VGVsZW1ldHJ5RXZlbnQuSG9zdEJhc2VkU3VydmV5QWN0aXZhdGlvblN0YXRzUHJvdmlkZXIuR2V0U3VydmV5U3RhdHNGcm9tSG9zdC5GYWlsZWQsXHJcblx0XHRcdFx0XHR7IEVycm9yTWVzc2FnZTogXCJKc29uIHBhcnNpbmcvZGVzZXJpYWxpemluZyBmYWlsZWQuIFwiICsgZS50b1N0cmluZygpICsgXCIuICBJbnB1dDpcIiArIGRhdGFTdHJpbmcgfSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChuZXdTdGF0cy5FeHBpcmF0aW9uVGltZVV0YyA8PSBub3cpIHtcclxuXHRcdFx0XHQvLyBEZWxldGUgc3VydmV5IHN0YXQgZnJvbSBob3N0IHN0b3JhZ2UgaWYgaXQncyBleHBpcmVkLlxyXG5cdFx0XHRcdHRoaXMuaG9zdEJhc2VkU3RvcmFnZS5kZWxldGVTZXR0aW5nSXRlbShGaWxlVHlwZVtGaWxlVHlwZS5TdXJ2ZXlBY3RpdmF0aW9uU3RhdHNdLCBzdXJ2ZXlJZCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0c3RhdHNDb2xsZWN0aW9uLmFkZFN0YXRzKHN1cnZleUlkLCBuZXdTdGF0cyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBzdGF0c0NvbGxlY3Rpb247XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBGaWxlQmFzZWRTdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlciBpbXBsZW1lbnRzIElTdXJ2ZXlBY3RpdmF0aW9uU3RhdHNQcm92aWRlciB7XHJcblx0cHJpdmF0ZSBzdG9yYWdlOiBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3Ioc3RvcmFnZTogSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlcikge1xyXG5cdFx0aWYgKCFzdG9yYWdlKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInN0b3JhZ2UgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnN0b3JhZ2UgPSBzdG9yYWdlO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGxvYWQoKTogU3VydmV5U3RhdENvbGxlY3Rpb25BY3RpdmF0aW9uIHtcclxuXHRcdGNvbnN0IHJlYWRTdHJpbmc6IHN0cmluZyA9IHRoaXMuc3RvcmFnZS5yZWFkKElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIuRmlsZVR5cGUuU3VydmV5QWN0aXZhdGlvblN0YXRzKTtcclxuXHRcdGlmICghcmVhZFN0cmluZykge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb24uZnJvbUpzb24ocmVhZFN0cmluZyk7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgc2F2ZShzdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb246IFN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbik6IHZvaWQge1xyXG5cdFx0aWYgKCFzdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb24pIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHdyaXRlU3RyaW5nOiBzdHJpbmcgPSBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkFjdGl2YXRpb24udG9Kc29uKHN1cnZleVN0YXRDb2xsZWN0aW9uQWN0aXZhdGlvbik7XHJcblx0XHR0aGlzLnN0b3JhZ2Uud3JpdGUoSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlci5GaWxlVHlwZS5TdXJ2ZXlBY3RpdmF0aW9uU3RhdHMsIHdyaXRlU3RyaW5nKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3RpdmF0aW9uU3RhdHMgaW1wbGVtZW50cyBJU2VyaWFsaXphYmxlIHtcclxuXHQvLyBUaGUgZm9sbG93aW5nIHByb3BlcnR5IG5hbWVzIG1hdGNoIEpTT04gcHJvcGVydHkgbmFtZXMgZm9yIHByb3BlciBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvblxyXG5cdHB1YmxpYyBFeHBpcmF0aW9uVGltZVV0YzogRGF0ZTtcclxuXHRwdWJsaWMgQWN0aXZhdGlvblRpbWVVdGM6IERhdGU7XHJcblx0cHVibGljIFR5cGU6IElTdXJ2ZXkuVHlwZTtcclxuXHRwdWJsaWMgU3VydmV5TGF1bmNoQ291bnQgPSAwO1xyXG5cdHB1YmxpYyBTdXJ2ZXlMYXVuY2hDb3VudFBlclNlc3Npb24gPSAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBNZXRob2QgdG8gZGVzZXJpYWxpemUgYSBKU09OIG9iamVjdCB0byBjbGFzcyBvYmplY3RcclxuXHQgKiBAcGFyYW0gaW5wdXQ6IEpTT04gb2JqZWN0XHJcblx0ICogUmV0dXJucyByZXN1bHQgb2YgdmFsaWRhdGlvbiBjaGVja1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogYm9vbGVhbiB7XHJcblx0XHR0aGlzLkFjdGl2YXRpb25UaW1lVXRjID0gaW5wdXQuQWN0aXZhdGlvblRpbWVVdGM7XHJcblx0XHR0aGlzLkV4cGlyYXRpb25UaW1lVXRjID0gaW5wdXQuRXhwaXJhdGlvblRpbWVVdGM7XHJcblx0XHR0aGlzLlR5cGUgPSBpbnB1dC5UeXBlO1xyXG5cdFx0dGhpcy5TdXJ2ZXlMYXVuY2hDb3VudCA9IGlucHV0LlN1cnZleUxhdW5jaENvdW50ID8/IDA7XHJcblx0XHR0aGlzLlN1cnZleUxhdW5jaENvdW50UGVyU2Vzc2lvbiA9IGlucHV0LlN1cnZleUxhdW5jaENvdW50UGVyU2Vzc2lvbiA/PyAwO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnZhbGlkYXRlKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBNZXRob2QgdG8gY2FsbCBhZnRlciBkZXNlcmlhbGl6YXRpb24gdG8gdmFsaWRhdGUgZ2VuZXJhdGVkIG9iamVjdC5cclxuXHQgKiBSZXR1cm5zIGZhbHNlIGlmIG5vdCB2YWxpZC5cclxuXHQgKi9cclxuXHRwdWJsaWMgdmFsaWRhdGUoKTogYm9vbGVhbiB7XHJcblx0XHQvLyBtYWtlIGl0IGEgZGF0ZSBvYmplY3QgaWYgaXQncyBhIHZhbGlkIFVUQyBkYXRlIHRpbWUgdmFsdWVcclxuXHRcdGlmIChVdGlscy5pc1V0Y0RhdGV0aW1lU3RyaW5nKHRoaXMuQWN0aXZhdGlvblRpbWVVdGMpKSB7XHJcblx0XHRcdHRoaXMuQWN0aXZhdGlvblRpbWVVdGMgPSBVdGlscy5zdHJpbmdUb0RhdGUodGhpcy5BY3RpdmF0aW9uVGltZVV0Yyk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gbWFrZSBpdCBhIGRhdGUgb2JqZWN0IGlmIGl0J3MgYSB2YWxpZCBVVEMgZGF0ZSB0aW1lIHZhbHVlXHJcblx0XHRpZiAoVXRpbHMuaXNVdGNEYXRldGltZVN0cmluZyh0aGlzLkV4cGlyYXRpb25UaW1lVXRjKSkge1xyXG5cdFx0XHR0aGlzLkV4cGlyYXRpb25UaW1lVXRjID0gVXRpbHMuc3RyaW5nVG9EYXRlKHRoaXMuRXhwaXJhdGlvblRpbWVVdGMpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghVXRpbHMuaXNOdW1iZXIodGhpcy5TdXJ2ZXlMYXVuY2hDb3VudCkgfHxcclxuXHRcdFx0IVV0aWxzLmlzTnVtYmVyKHRoaXMuU3VydmV5TGF1bmNoQ291bnRQZXJTZXNzaW9uKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFV0aWxzLmlzRW51bVZhbHVlKHRoaXMuVHlwZSwgSVN1cnZleS5UeXBlKTtcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/SurveyStatCollectionActivation.js\n')},"../FloodgateCore/dist/src/SurveyStatCollectionEventActivity.js":function(){"use strict";eval('\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.SurveyEventActivityStats = exports.SurveyStatCollectionEventActivity = void 0;\nvar Constants_1 = __webpack_require__(/*! ./Constants */ "../FloodgateCore/dist/src/Constants.js");\nvar FloodgateEngine_1 = __webpack_require__(/*! ./FloodgateEngine */ "../FloodgateCore/dist/src/FloodgateEngine.js");\nvar SurveyStatCollection_1 = __webpack_require__(/*! ./SurveyStatCollection */ "../FloodgateCore/dist/src/SurveyStatCollection.js");\nvar Utils = __webpack_require__(/*! ./Utils */ "../FloodgateCore/dist/src/Utils.js");\n/**\n * StatCollection for EventActivity counts.  Should be used to store/merge\n * aggregate values between sessions tracking the same surveys/events\n * E.g. A survey that activates after 3 boots.\n */\n// TODO (gachoi) check the following - VSOBug: 1443010 One bad Stat object fails the entire serialization\nvar SurveyStatCollectionEventActivity = /** @class */ (function (_super) {\n    __extends(SurveyStatCollectionEventActivity, _super);\n    function SurveyStatCollectionEventActivity() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Load from Json\n     */\n    SurveyStatCollectionEventActivity.fromJson = function (json) {\n        var statCollection = new SurveyStatCollectionEventActivity();\n        if (!json) {\n            return statCollection;\n        }\n        var readStats;\n        try {\n            readStats = JSON.parse(json);\n        }\n        catch (e) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.SurveyStatCollectionEventActivity.FromJson.Failed, { ErrorMessage: "Json parsing failed. " + e.toString() });\n            return statCollection;\n        }\n        if (!statCollection.deserialize(readStats)) {\n            return new SurveyStatCollectionEventActivity();\n        }\n        return statCollection;\n    };\n    /**\n     * Convert to Json\n     */\n    SurveyStatCollectionEventActivity.toJson = function (object) {\n        if (!object) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.SurveyStatCollectionEventActivity.ToJson.Failed, { ErrorMessage: "Input json is null or empty." });\n            object = new SurveyStatCollectionEventActivity();\n        }\n        return JSON.stringify(object);\n    };\n    /**\n     * Add another SurveyStatCollectionEventActivity object\n     */\n    SurveyStatCollectionEventActivity.prototype.accumulate = function (other) {\n        if (!other) {\n            return;\n        }\n        var stats = other.getStats();\n        // SurveyEventActivityStats accumulation simply overwrites any keys from \'other\' into our collection\n        for (var key in stats) {\n            if (stats.hasOwnProperty(key)) {\n                var ourStats = this.getBySurveyId(key);\n                // If it does not already exist\n                if (!ourStats) {\n                    ourStats = new SurveyEventActivityStats();\n                    ourStats.Counts = [];\n                    this.addStats(key, ourStats);\n                }\n                ourStats.ExpirationTimeUtc = stats[key].ExpirationTimeUtc;\n                // If for some reason the other counts array is larger, resize ourStats.counts\n                if (ourStats.Counts.length < stats[key].Counts.length) {\n                    var resizedCounts = ourStats.Counts.slice();\n                    ourStats.Counts = resizedCounts;\n                }\n                for (var i = 0; i < stats[key].Counts.length; i++) {\n                    if (!ourStats.Counts[i]) {\n                        ourStats.Counts[i] = 0;\n                    }\n                    ourStats.Counts[i] += stats[key].Counts[i];\n                }\n            }\n        }\n    };\n    /**\n     * Method to deserialize SurveyStatCollectionEventActivity\n     * @param input: collection of SurveyStatCollectionEventActivity\n     * Returns result of validation check\n     */\n    SurveyStatCollectionEventActivity.prototype.deserialize = function (input) {\n        var rawStats = input.Surveys;\n        var now = new Date();\n        for (var key in rawStats) {\n            if (rawStats.hasOwnProperty(key)) {\n                var newStat = new SurveyEventActivityStats();\n                if (newStat.deserialize(rawStats[key]) && newStat.ExpirationTimeUtc > now) {\n                    this.addStats(key, newStat);\n                }\n            }\n        }\n        return this.validate();\n    };\n    /**\n     * Validate the Surveys\n     * Returns false if validation fails\n     */\n    SurveyStatCollectionEventActivity.prototype.validate = function () {\n        return Utils.isObject(this.getStats());\n    };\n    return SurveyStatCollectionEventActivity;\n}(SurveyStatCollection_1.SurveyStatCollection));\nexports.SurveyStatCollectionEventActivity = SurveyStatCollectionEventActivity;\nvar SurveyEventActivityStats = /** @class */ (function () {\n    function SurveyEventActivityStats() {\n    }\n    /**\n     * Method to deserialize a JSON object to class object\n     * @param input: JSON object\n     * Returns result of validation check\n     */\n    SurveyEventActivityStats.prototype.deserialize = function (input) {\n        this.ExpirationTimeUtc = input.ExpirationTimeUtc;\n        this.Counts = input.Counts;\n        return this.validate();\n    };\n    /**\n     * Method to call after deserialization to validate generated object.\n     * Returns false if not valid.\n     */\n    SurveyEventActivityStats.prototype.validate = function () {\n        if (!this.Counts) {\n            return false;\n        }\n        for (var i = 0; i < this.Counts.length; i++) {\n            var val = this.Counts[i];\n            if (!Utils.isNumber(val)) {\n                return false;\n            }\n            if (val < 0) {\n                this.Counts[i] = 0;\n            }\n        }\n        // make it a date object if it\'s a valid UTC date time value\n        if (Utils.isUtcDatetimeString(this.ExpirationTimeUtc)) {\n            this.ExpirationTimeUtc = Utils.stringToDate(this.ExpirationTimeUtc);\n        }\n        else {\n            return false;\n        }\n        return true;\n    };\n    return SurveyEventActivityStats;\n}());\nexports.SurveyEventActivityStats = SurveyEventActivityStats;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eS50cz83ODA5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxtR0FBNkM7QUFDN0MscUhBQW9EO0FBQ3BELG9JQUE4RDtBQUM5RCxxRkFBaUM7QUFFakM7Ozs7R0FJRztBQUNILHlHQUF5RztBQUN6RztJQUF1RCxxREFBOEM7SUFBckc7O0lBZ0hBLENBQUM7SUE5R0E7O09BRUc7SUFDVywwQ0FBUSxHQUF0QixVQUF1QixJQUFZO1FBQ2xDLElBQU0sY0FBYyxHQUFHLElBQUksaUNBQWlDLEVBQUUsQ0FBQztRQUUvRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1YsT0FBTyxjQUFjLENBQUM7U0FDdEI7UUFFRCxJQUFJLFNBQTRDLENBQUM7UUFDakQsSUFBSTtZQUNILFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWCxpQ0FBZSxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxDQUM3QywwQkFBYyxDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQ2hFLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0QsT0FBTyxjQUFjLENBQUM7U0FDdEI7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMzQyxPQUFPLElBQUksaUNBQWlDLEVBQUUsQ0FBQztTQUMvQztRQUVELE9BQU8sY0FBYyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNXLHdDQUFNLEdBQXBCLFVBQXFCLE1BQXlDO1FBQzdELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWixpQ0FBZSxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxDQUM3QywwQkFBYyxDQUFDLGlD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ZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvU3VydmV5U3RhdENvbGxlY3Rpb25FdmVudEFjdGl2aXR5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSURpY3Rpb25hcnksIElTZXJpYWxpemFibGUgfSBmcm9tIFwiLi9Db21tb25cIjtcclxuaW1wb3J0IHsgVGVsZW1ldHJ5RXZlbnQgfSBmcm9tIFwiLi9Db25zdGFudHNcIjtcclxuaW1wb3J0IHsgRmxvb2RnYXRlRW5naW5lIH0gZnJvbSBcIi4vRmxvb2RnYXRlRW5naW5lXCI7XHJcbmltcG9ydCB7IFN1cnZleVN0YXRDb2xsZWN0aW9uIH0gZnJvbSBcIi4vU3VydmV5U3RhdENvbGxlY3Rpb25cIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4vVXRpbHNcIjtcclxuXHJcbi8qKlxyXG4gKiBTdGF0Q29sbGVjdGlvbiBmb3IgRXZlbnRBY3Rpdml0eSBjb3VudHMuICBTaG91bGQgYmUgdXNlZCB0byBzdG9yZS9tZXJnZVxyXG4gKiBhZ2dyZWdhdGUgdmFsdWVzIGJldHdlZW4gc2Vzc2lvbnMgdHJhY2tpbmcgdGhlIHNhbWUgc3VydmV5cy9ldmVudHNcclxuICogRS5nLiBBIHN1cnZleSB0aGF0IGFjdGl2YXRlcyBhZnRlciAzIGJvb3RzLlxyXG4gKi9cclxuLy8gVE9ETyAoZ2FjaG9pKSBjaGVjayB0aGUgZm9sbG93aW5nIC0gVlNPQnVnOiAxNDQzMDEwIE9uZSBiYWQgU3RhdCBvYmplY3QgZmFpbHMgdGhlIGVudGlyZSBzZXJpYWxpemF0aW9uXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkV2ZW50QWN0aXZpdHkgZXh0ZW5kcyBTdXJ2ZXlTdGF0Q29sbGVjdGlvbjxTdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHM+IGltcGxlbWVudHMgSVNlcmlhbGl6YWJsZSB7XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvYWQgZnJvbSBKc29uXHJcblx0ICovXHJcblx0cHVibGljIHN0YXRpYyBmcm9tSnNvbihqc29uOiBzdHJpbmcpOiBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkV2ZW50QWN0aXZpdHkge1xyXG5cdFx0Y29uc3Qgc3RhdENvbGxlY3Rpb24gPSBuZXcgU3VydmV5U3RhdENvbGxlY3Rpb25FdmVudEFjdGl2aXR5KCk7XHJcblxyXG5cdFx0aWYgKCFqc29uKSB7XHJcblx0XHRcdHJldHVybiBzdGF0Q29sbGVjdGlvbjtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgcmVhZFN0YXRzOiBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkV2ZW50QWN0aXZpdHk7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRyZWFkU3RhdHMgPSBKU09OLnBhcnNlKGpzb24pO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0V2ZW50KFxyXG5cdFx0XHRcdFRlbGVtZXRyeUV2ZW50LlN1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eS5Gcm9tSnNvbi5GYWlsZWQsXHJcblx0XHRcdFx0eyBFcnJvck1lc3NhZ2U6IFwiSnNvbiBwYXJzaW5nIGZhaWxlZC4gXCIgKyBlLnRvU3RyaW5nKCkgfSk7XHJcblx0XHRcdHJldHVybiBzdGF0Q29sbGVjdGlvbjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXN0YXRDb2xsZWN0aW9uLmRlc2VyaWFsaXplKHJlYWRTdGF0cykpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkV2ZW50QWN0aXZpdHkoKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gc3RhdENvbGxlY3Rpb247XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0IHRvIEpzb25cclxuXHQgKi9cclxuXHRwdWJsaWMgc3RhdGljIHRvSnNvbihvYmplY3Q6IFN1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eSk6IHN0cmluZyB7XHJcblx0XHRpZiAoIW9iamVjdCkge1xyXG5cdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0V2ZW50KFxyXG5cdFx0XHRcdFRlbGVtZXRyeUV2ZW50LlN1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eS5Ub0pzb24uRmFpbGVkLFxyXG5cdFx0XHRcdHsgRXJyb3JNZXNzYWdlOiBcIklucHV0IGpzb24gaXMgbnVsbCBvciBlbXB0eS5cIiB9KTtcclxuXHRcdFx0b2JqZWN0ID0gbmV3IFN1cnZleVN0YXRDb2xsZWN0aW9uRXZlbnRBY3Rpdml0eSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShvYmplY3QpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkIGFub3RoZXIgU3VydmV5U3RhdENvbGxlY3Rpb25FdmVudEFjdGl2aXR5IG9iamVjdFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhY2N1bXVsYXRlKG90aGVyOiBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkV2ZW50QWN0aXZpdHkpOiB2b2lkIHtcclxuXHRcdGlmICghb3RoZXIpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHN0YXRzOiBJRGljdGlvbmFyeTxTdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHM+ID0gb3RoZXIuZ2V0U3RhdHMoKTtcclxuXHRcdC8vIFN1cnZleUV2ZW50QWN0aXZpdHlTdGF0cyBhY2N1bXVsYXRpb24gc2ltcGx5IG92ZXJ3cml0ZXMgYW55IGtleXMgZnJvbSAnb3RoZXInIGludG8gb3VyIGNvbGxlY3Rpb25cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHN0YXRzKSB7XHJcblx0XHRcdGlmIChzdGF0cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0bGV0IG91clN0YXRzOiBTdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHMgPSB0aGlzLmdldEJ5U3VydmV5SWQoa2V5KTtcclxuXHJcblx0XHRcdFx0Ly8gSWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdFxyXG5cdFx0XHRcdGlmICghb3VyU3RhdHMpIHtcclxuXHRcdFx0XHRcdG91clN0YXRzID0gbmV3IFN1cnZleUV2ZW50QWN0aXZpdHlTdGF0cygpO1xyXG5cdFx0XHRcdFx0b3VyU3RhdHMuQ291bnRzID0gW107XHJcblx0XHRcdFx0XHR0aGlzLmFkZFN0YXRzKGtleSwgb3VyU3RhdHMpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0b3VyU3RhdHMuRXhwaXJhdGlvblRpbWVVdGMgPSBzdGF0c1trZXldLkV4cGlyYXRpb25UaW1lVXRjO1xyXG5cclxuXHRcdFx0XHQvLyBJZiBmb3Igc29tZSByZWFzb24gdGhlIG90aGVyIGNvdW50cyBhcnJheSBpcyBsYXJnZXIsIHJlc2l6ZSBvdXJTdGF0cy5jb3VudHNcclxuXHRcdFx0XHRpZiAob3VyU3RhdHMuQ291bnRzLmxlbmd0aCA8IHN0YXRzW2tleV0uQ291bnRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgcmVzaXplZENvdW50czogbnVtYmVyW10gPSBvdXJTdGF0cy5Db3VudHMuc2xpY2UoKTtcclxuXHRcdFx0XHRcdG91clN0YXRzLkNvdW50cyA9IHJlc2l6ZWRDb3VudHM7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHN0YXRzW2tleV0uQ291bnRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRpZiAoIW91clN0YXRzLkNvdW50c1tpXSkge1xyXG5cdFx0XHRcdFx0XHRvdXJTdGF0cy5Db3VudHNbaV0gPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdG91clN0YXRzLkNvdW50c1tpXSArPSBzdGF0c1trZXldLkNvdW50c1tpXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1ldGhvZCB0byBkZXNlcmlhbGl6ZSBTdXJ2ZXlTdGF0Q29sbGVjdGlvbkV2ZW50QWN0aXZpdHlcclxuXHQgKiBAcGFyYW0gaW5wdXQ6IGNvbGxlY3Rpb24gb2YgU3VydmV5U3RhdENvbGxlY3Rpb25FdmVudEFjdGl2aXR5XHJcblx0ICogUmV0dXJucyByZXN1bHQgb2YgdmFsaWRhdGlvbiBjaGVja1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCByYXdTdGF0czogSURpY3Rpb25hcnk8U3VydmV5RXZlbnRBY3Rpdml0eVN0YXRzPiA9IGlucHV0LlN1cnZleXM7XHJcblx0XHRjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHJhd1N0YXRzKSB7XHJcblx0XHRcdGlmIChyYXdTdGF0cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0Y29uc3QgbmV3U3RhdCA9IG5ldyBTdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHMoKTtcclxuXHJcblx0XHRcdFx0aWYgKG5ld1N0YXQuZGVzZXJpYWxpemUocmF3U3RhdHNba2V5XSkgJiYgbmV3U3RhdC5FeHBpcmF0aW9uVGltZVV0YyA+IG5vdykge1xyXG5cdFx0XHRcdFx0dGhpcy5hZGRTdGF0cyhrZXksIG5ld1N0YXQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnZhbGlkYXRlKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBWYWxpZGF0ZSB0aGUgU3VydmV5c1xyXG5cdCAqIFJldHVybnMgZmFsc2UgaWYgdmFsaWRhdGlvbiBmYWlsc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB2YWxpZGF0ZSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBVdGlscy5pc09iamVjdCh0aGlzLmdldFN0YXRzKCkpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUV2ZW50QWN0aXZpdHlTdGF0cyBpbXBsZW1lbnRzIElTZXJpYWxpemFibGUge1xyXG5cdC8vIFRoZSBmb2xsb3dpbmcgcHJvcGVydHkgbmFtZXMgbWF0Y2ggSlNPTiBwcm9wZXJ0eSBuYW1lcyBmb3IgcHJvcGVyIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uXHJcblx0cHVibGljIEV4cGlyYXRpb25UaW1lVXRjOiBEYXRlO1xyXG5cdHB1YmxpYyBDb3VudHM6IG51bWJlcltdO1xyXG5cclxuXHQvKipcclxuXHQgKiBNZXRob2QgdG8gZGVzZXJpYWxpemUgYSBKU09OIG9iamVjdCB0byBjbGFzcyBvYmplY3RcclxuXHQgKiBAcGFyYW0gaW5wdXQ6IEpTT04gb2JqZWN0XHJcblx0ICogUmV0dXJucyByZXN1bHQgb2YgdmFsaWRhdGlvbiBjaGVja1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZXNlcmlhbGl6ZShpbnB1dDogYW55KTogYm9vbGVhbiB7XHJcblx0XHR0aGlzLkV4cGlyYXRpb25UaW1lVXRjID0gaW5wdXQuRXhwaXJhdGlvblRpbWVVdGM7XHJcblx0XHR0aGlzLkNvdW50cyA9IGlucHV0LkNvdW50cztcclxuXHJcblx0XHRyZXR1cm4gdGhpcy52YWxpZGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTWV0aG9kIHRvIGNhbGwgYWZ0ZXIgZGVzZXJpYWxpemF0aW9uIHRvIHZhbGlkYXRlIGdlbmVyYXRlZCBvYmplY3QuXHJcblx0ICogUmV0dXJucyBmYWxzZSBpZiBub3QgdmFsaWQuXHJcblx0ICovXHJcblx0cHVibGljIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCF0aGlzLkNvdW50cykge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLkNvdW50cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCB2YWw6IG51bWJlciA9IHRoaXMuQ291bnRzW2ldO1xyXG5cclxuXHRcdFx0aWYgKCFVdGlscy5pc051bWJlcih2YWwpKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodmFsIDwgMCkge1xyXG5cdFx0XHRcdHRoaXMuQ291bnRzW2ldID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIG1ha2UgaXQgYSBkYXRlIG9iamVjdCBpZiBpdCdzIGEgdmFsaWQgVVRDIGRhdGUgdGltZSB2YWx1ZVxyXG5cdFx0aWYgKFV0aWxzLmlzVXRjRGF0ZXRpbWVTdHJpbmcodGhpcy5FeHBpcmF0aW9uVGltZVV0YykpIHtcclxuXHRcdFx0dGhpcy5FeHBpcmF0aW9uVGltZVV0YyA9IFV0aWxzLnN0cmluZ1RvRGF0ZSh0aGlzLkV4cGlyYXRpb25UaW1lVXRjKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/SurveyStatCollectionEventActivity.js\n')},"../FloodgateCore/dist/src/Surveys/FpsSurvey.js":function(){"use strict";eval('\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar ISurvey = __webpack_require__(/*! ../Api/ISurvey */ "../FloodgateCore/dist/src/Api/ISurvey.js");\nvar ISurveyComponent = __webpack_require__(/*! ../Api/ISurveyComponent */ "../FloodgateCore/dist/src/Api/ISurveyComponent.js");\nvar CommentComponent = __webpack_require__(/*! ../SurveyComponents/CommentComponent */ "../FloodgateCore/dist/src/SurveyComponents/CommentComponent.js");\nvar CVSurveyComponent = __webpack_require__(/*! ../SurveyComponents/CVSurveyComponent */ "../FloodgateCore/dist/src/SurveyComponents/CVSurveyComponent.js");\nvar MultipleChoiceComponent = __webpack_require__(/*! ../SurveyComponents/MultipleChoiceComponent */ "../FloodgateCore/dist/src/SurveyComponents/MultipleChoiceComponent.js");\nvar PromptComponent = __webpack_require__(/*! ../SurveyComponents/PromptComponent */ "../FloodgateCore/dist/src/SurveyComponents/PromptComponent.js");\nvar RatingComponent = __webpack_require__(/*! ../SurveyComponents/RatingComponent */ "../FloodgateCore/dist/src/SurveyComponents/RatingComponent.js");\nvar Utils = __webpack_require__(/*! ../Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar Survey_1 = __webpack_require__(/*! ./Survey */ "../FloodgateCore/dist/src/Surveys/Survey.js");\nvar SurveyDataSource = __webpack_require__(/*! ./SurveyDataSource */ "../FloodgateCore/dist/src/Surveys/SurveyDataSource.js");\nvar isNOU = Utils.isNOU;\nvar FpsSurvey = /** @class */ (function (_super) {\n    __extends(FpsSurvey, _super);\n    function FpsSurvey(data) {\n        var _this = _super.call(this) || this;\n        if (isNOU(data)) {\n            throw new Error("data must not be null");\n        }\n        _this.surveyInfo = new SurveyDataSource(data.baseData);\n        _this.prompt = new PromptComponent(data.promptData);\n        _this.question = data.commentData ? (new CommentComponent(data.commentData)) : null;\n        _this.rating = data.ratingData ? (new RatingComponent(data.ratingData)) : null;\n        _this.multipleChoice = data.multipleChoiceData ? (new MultipleChoiceComponent(data.multipleChoiceData)) : null;\n        _this.cvSurvey = data.cvSurveyData ? (new CVSurveyComponent(data.cvSurveyData)) : null;\n        return _this;\n    }\n    FpsSurvey.make = function (data) {\n        try {\n            return new FpsSurvey(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    FpsSurvey.makeFps = function (baseData, sp, surveyModel) {\n        if (isNOU(baseData) || isNOU(sp) || isNOU(surveyModel)) {\n            return null;\n        }\n        var ratingValuesAscending = [];\n        var availableOptions = [];\n        var content = surveyModel.content;\n        // Prompt is required and at least one of the other components are required\n        if (isNOU(content) || isNOU(content.prompt) ||\n            (isNOU(content.rating) && isNOU(content.multipleChoice) &&\n                isNOU(content.comment))) {\n            return null;\n        }\n        var data = new FpsSurvey.FpsSurveyData();\n        data.baseData = baseData;\n        data.promptData = new PromptComponent.PromptComponentData();\n        data.promptData.title = sp.getCustomString(content.prompt.title);\n        data.promptData.question = sp.getCustomString(content.prompt.question);\n        data.promptData.yesButtonLabel = sp.getCustomString(content.prompt.yesLabel);\n        data.promptData.noButtonLabel = sp.getCustomString(content.prompt.noLabel);\n        if (isNOU(data.promptData.title)\n            || isNOU(data.promptData.question)\n            || isNOU(data.promptData.yesButtonLabel)\n            || isNOU(data.promptData.noButtonLabel)) {\n            return null;\n        }\n        if (content.rating) {\n            data.ratingData = new RatingComponent.RatingComponentData();\n            data.ratingData.question = sp.getCustomString(content.rating.question);\n            data.ratingData.isZeroBased = content.rating.isZeroBased;\n            for (var _i = 0, _a = content.rating.ratingValuesAscending; _i < _a.length; _i++) {\n                var value = _a[_i];\n                var customString = sp.getCustomString(value);\n                if (isNOU(customString)) {\n                    return null;\n                }\n                ratingValuesAscending.push(customString);\n            }\n            data.ratingData.ratingValuesAscending = ratingValuesAscending;\n            if (isNOU(data.ratingData.question)\n                || isNOU(data.ratingData.ratingValuesAscending)) {\n                return null;\n            }\n        }\n        if (content.multipleChoice) {\n            data.multipleChoiceData = new MultipleChoiceComponent.MultipleChoiceComponentData();\n            data.multipleChoiceData.question = sp.getCustomString(content.multipleChoice.question);\n            data.multipleChoiceData.minNumberOfSelectedOptions = content.multipleChoice.minNumberOfSelectedOptions;\n            data.multipleChoiceData.maxNumberOfSelectedOptions = content.multipleChoice.maxNumberOfSelectedOptions;\n            for (var _b = 0, _c = content.multipleChoice.availableOptions; _b < _c.length; _b++) {\n                var value = _c[_b];\n                var customString = sp.getCustomString(value);\n                if (isNOU(customString)) {\n                    return null;\n                }\n                availableOptions.push(customString);\n            }\n            data.multipleChoiceData.availableOptions = availableOptions;\n            if (isNOU(data.multipleChoiceData.question)\n                || isNOU(data.multipleChoiceData.availableOptions)) {\n                return null;\n            }\n        }\n        if (content.comment) {\n            data.commentData = new CommentComponent.CommentComponentData();\n            data.commentData.question = sp.getCustomString(content.comment.question);\n            if (isNOU(data.commentData.question)) {\n                return null;\n            }\n        }\n        // cvsurvey data is not required on all surveys.\n        if (content.cvSurvey) {\n            data.cvSurveyData = new CVSurveyComponent.CVSurveyComponentData();\n            data.cvSurveyData.customerVoiceFormId = content.cvSurvey.customerVoiceFormId;\n            if (isNOU(data.cvSurveyData.customerVoiceFormId)) {\n                return null;\n            }\n        }\n        return this.make(data);\n    };\n    // @Override\n    FpsSurvey.prototype.getType = function () {\n        return ISurvey.Type.Fps;\n    };\n    // @Override\n    FpsSurvey.prototype.getSurveyInfo = function () {\n        return this.surveyInfo;\n    };\n    // @Override\n    FpsSurvey.prototype.getCommentComponent = function () {\n        return this.question;\n    };\n    // @Override\n    FpsSurvey.prototype.getPromptComponent = function () {\n        return this.prompt;\n    };\n    // @Override\n    FpsSurvey.prototype.getRatingComponent = function () {\n        return this.rating;\n    };\n    // @Override\n    FpsSurvey.prototype.getMultipleChoiceComponent = function () {\n        return this.multipleChoice;\n    };\n    FpsSurvey.prototype.getCVSurveyComponent = function () {\n        return this.cvSurvey;\n    };\n    // @Override\n    FpsSurvey.prototype.getComponent = function (componentType) {\n        switch (componentType) {\n            case "Comment" /* Comment */:\n                return this.getCommentComponent();\n            case "Prompt" /* Prompt */:\n                return this.getPromptComponent();\n            case "Rating" /* Rating */:\n                return this.getRatingComponent();\n            case "MultipleChoice" /* MultipleChoice */:\n                return this.getMultipleChoiceComponent();\n            case "CVSurvey" /* CVSurvey */:\n                return this.getCVSurveyComponent();\n            default:\n                return null;\n        }\n    };\n    // @Override\n    FpsSurvey.prototype.getDomElements = function (doc) {\n        if (isNOU(doc)) {\n            throw new Error("Document must not be null");\n        }\n        var element = doc.createElement(ISurvey.DOM_FPS_TAGNAME);\n        this.getSurveyInfo().getDomElements(doc).forEach(function (child) {\n            if (!isNOU(child)) {\n                element.appendChild(child);\n            }\n        });\n        this.getCommentComponent().getDomElements(doc).forEach(function (child) {\n            if (!isNOU(child)) {\n                element.appendChild(child);\n            }\n        });\n        if (this.getRatingComponent()) {\n            this.getRatingComponent().getDomElements(doc).forEach(function (child) {\n                if (!isNOU(child)) {\n                    element.appendChild(child);\n                }\n            });\n        }\n        if (this.getMultipleChoiceComponent()) {\n            this.getMultipleChoiceComponent().getDomElements(doc).forEach(function (child) {\n                if (!isNOU(child)) {\n                    element.appendChild(child);\n                }\n            });\n        }\n        return [element];\n    };\n    // @Override\n    FpsSurvey.prototype.getJsonElements = function () {\n        var _a;\n        var result = {};\n        result = Utils.overrideValues(this.getSurveyInfo().getJsonElements(), result);\n        result[ISurveyComponent.JSON_APPLICATION_KEYNAME] = {};\n        result[ISurveyComponent.JSON_APPLICATION_KEYNAME][ISurveyComponent.JSON_EXTENDEDMANIFESTDATA_KEYNAME] =\n            JSON.stringify((_a = {},\n                _a[ISurveyComponent.JSON_SURVEYSTRINGS_KEYNAME] = this.makeSurveyStrings(),\n                _a[ISurveyComponent.JSON_SURVEYSPECIFICDATA_KEYNAME] = this.makeResponseString(),\n                _a));\n        return result;\n    };\n    // Makes the string to send to Manifest respecting the components present in the survey\n    FpsSurvey.prototype.makeResponseString = function () {\n        var response = {};\n        if (this.question) {\n            response[ISurveyComponent.JSON_COMMENT_KEYNAME] = [this.getCommentComponent().getSubmittedText()];\n        }\n        if (this.multipleChoice) {\n            response[ISurveyComponent.JSON_MULTIPLECHOICE_KEYNAME] =\n                [this.getMultipleChoiceComponent().getOptionSelectedStates()];\n        }\n        if (this.rating) {\n            response[ISurveyComponent.JSON_RATING_KEYNAME] = [\n                { numberOfOptions: this.getRatingComponent().getRatingValuesAscending().length,\n                    selectedRating: this.getRatingComponent().getSelectedRatingIndex() }\n            ];\n        }\n        return JSON.stringify(response);\n    };\n    // Makes the string to send to Manifest respecting the components present in the survey\n    FpsSurvey.prototype.makeSurveyStrings = function () {\n        var actualStrings = {};\n        if (this.prompt) {\n            actualStrings[ISurveyComponent.JSON_PROMPT_KEYNAME] = this.prompt.getComponentJson();\n        }\n        if (this.rating) {\n            actualStrings[ISurveyComponent.JSON_RATING_KEYNAME] = [this.rating.getComponentJson()];\n        }\n        if (this.question) {\n            actualStrings[ISurveyComponent.JSON_COMMENT_KEYNAME] = [this.question.getComponentJson()];\n        }\n        if (this.multipleChoice) {\n            actualStrings[ISurveyComponent.JSON_MULTIPLECHOICE_KEYNAME] = [this.multipleChoice.getComponentJson()];\n        }\n        return JSON.stringify(actualStrings);\n    };\n    return FpsSurvey;\n}(Survey_1.Survey));\n(function (FpsSurvey) {\n    /**\n     * Data required for a Fps Survey\n     */\n    var FpsSurveyData = /** @class */ (function () {\n        function FpsSurveyData() {\n        }\n        return FpsSurveyData;\n    }());\n    FpsSurvey.FpsSurveyData = FpsSurveyData;\n})(FpsSurvey || (FpsSurvey = {}));\nmodule.exports = FpsSurvey;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleXMvRnBzU3VydmV5LnRzPzIwYzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFFQSxvR0FBMEM7QUFDMUMsK0hBQTREO0FBRzVELHlKQUF5RTtBQUN6RSw0SkFBMkU7QUFDM0UsOEtBQXVGO0FBQ3ZGLHNKQUF1RTtBQUN2RSxzSkFBdUU7QUFDdkUsc0ZBQWtDO0FBQ2xDLGtHQUFrQztBQUNsQyw4SEFBdUQ7QUFFL0MsU0FBSyxHQUFLLEtBQUssTUFBVixDQUFXO0FBRXhCO0lBQXdCLDZCQUFNO0lBMEg3QixtQkFBb0IsSUFBNkI7UUFBakQsWUFDQyxpQkFBTyxTQVdQO1FBVkEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsS0FBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxLQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxLQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25GLEtBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzlFLEtBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksdUJBQXVCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENB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Q0QsV0FBTyxTQUFTO0lBQ2Y7O09BRUc7SUFDSDtRQUFBO1FBT0EsQ0FBQztRQUFELG9CQUFDO0lBQUQsQ0FBQztJQVBZLHVCQUFhLGdCQU96QjtBQUNGLENBQUMsRUFaTSxTQUFTLEtBQVQsU0FBUyxRQVlmO0FBRUQsaUJBQVMsU0FBUyxDQUFDIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvU3VydmV5cy9GcHNTdXJ2ZXkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIgZnJvbSBcIi4uL0FwaS9JRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXJcIjtcclxuaW1wb3J0IHsgSUZwc1N1cnZleSB9IGZyb20gXCIuLi9BcGkvSUZwc1N1cnZleVwiO1xyXG5pbXBvcnQgKiBhcyBJU3VydmV5IGZyb20gXCIuLi9BcGkvSVN1cnZleVwiO1xyXG5pbXBvcnQgKiBhcyBJU3VydmV5Q29tcG9uZW50IGZyb20gXCIuLi9BcGkvSVN1cnZleUNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDYW1wYWlnblN1cnZleUNvbnRlbnQsIENhbXBhaWduU3VydmV5VGVtcGxhdGUgfSBmcm9tIFwiLi4vQ2FtcGFpZ24vQ2FtcGFpZ25EZWZpbml0aW9uUHJvdmlkZXJcIjtcclxuaW1wb3J0ICogYXMgSVN1cnZleUluZm8gZnJvbSBcIi4uL0lTdXJ2ZXlJbmZvXCI7XHJcbmltcG9ydCAqIGFzIENvbW1lbnRDb21wb25lbnQgZnJvbSBcIi4uL1N1cnZleUNvbXBvbmVudHMvQ29tbWVudENvbXBvbmVudFwiO1xyXG5pbXBvcnQgKiBhcyBDVlN1cnZleUNvbXBvbmVudCBmcm9tIFwiLi4vU3VydmV5Q29tcG9uZW50cy9DVlN1cnZleUNvbXBvbmVudFwiO1xyXG5pbXBvcnQgKiBhcyBNdWx0aXBsZUNob2ljZUNvbXBvbmVudCBmcm9tIFwiLi4vU3VydmV5Q29tcG9uZW50cy9NdWx0aXBsZUNob2ljZUNvbXBvbmVudFwiO1xyXG5pbXBvcnQgKiBhcyBQcm9tcHRDb21wb25lbnQgZnJvbSBcIi4uL1N1cnZleUNvbXBvbmVudHMvUHJvbXB0Q29tcG9uZW50XCI7XHJcbmltcG9ydCAqIGFzIFJhdGluZ0NvbXBvbmVudCBmcm9tIFwiLi4vU3VydmV5Q29tcG9uZW50cy9SYXRpbmdDb21wb25lbnRcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uL1V0aWxzXCI7XHJcbmltcG9ydCB7IFN1cnZleSB9IGZyb20gXCIuL1N1cnZleVwiO1xyXG5pbXBvcnQgKiBhcyBTdXJ2ZXlEYXRhU291cmNlIGZyb20gXCIuL1N1cnZleURhdGFTb3VyY2VcIjtcclxuXHJcbmNvbnN0IHsgaXNOT1UgfSA9IFV0aWxzO1xyXG5cclxuY2xhc3MgRnBzU3VydmV5IGV4dGVuZHMgU3VydmV5IGltcGxlbWVudHMgSUZwc1N1cnZleSB7XHJcblx0cHVibGljIHN0YXRpYyBtYWtlKGRhdGE6IEZwc1N1cnZleS5GcHNTdXJ2ZXlEYXRhKTogSUZwc1N1cnZleSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IEZwc1N1cnZleShkYXRhKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc3RhdGljIG1ha2VGcHMoYmFzZURhdGE6IFN1cnZleURhdGFTb3VyY2UuU3VydmV5RGF0YVNvdXJjZURhdGEsIHNwOiBJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIsXHJcblx0XHRzdXJ2ZXlNb2RlbDogQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZSk6IElGcHNTdXJ2ZXkge1xyXG5cclxuXHRcdGlmIChpc05PVShiYXNlRGF0YSkgfHwgaXNOT1Uoc3ApIHx8IGlzTk9VKHN1cnZleU1vZGVsKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCByYXRpbmdWYWx1ZXNBc2NlbmRpbmc6IHN0cmluZ1tdID0gW107XHJcblx0XHRjb25zdCBhdmFpbGFibGVPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0Y29uc3QgY29udGVudDogQ2FtcGFpZ25TdXJ2ZXlDb250ZW50ID0gc3VydmV5TW9kZWwuY29udGVudDtcclxuXHJcblx0XHQvLyBQcm9tcHQgaXMgcmVxdWlyZWQgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3RoZXIgY29tcG9uZW50cyBhcmUgcmVxdWlyZWRcclxuXHRcdGlmIChpc05PVShjb250ZW50KSB8fCBpc05PVShjb250ZW50LnByb21wdCkgfHxcclxuXHRcdFx0KGlzTk9VKGNvbnRlbnQucmF0aW5nKSAmJiBpc05PVShjb250ZW50Lm11bHRpcGxlQ2hvaWNlKSAmJlxyXG5cdFx0XHRpc05PVShjb250ZW50LmNvbW1lbnQpKSkge1xyXG5cclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZGF0YSA9IG5ldyBGcHNTdXJ2ZXkuRnBzU3VydmV5RGF0YSgpO1xyXG5cdFx0ZGF0YS5iYXNlRGF0YSA9IGJhc2VEYXRhO1xyXG5cdFx0ZGF0YS5wcm9tcHREYXRhID0gbmV3IFByb21wdENvbXBvbmVudC5Qcm9tcHRDb21wb25lbnREYXRhKCk7XHJcblx0XHRkYXRhLnByb21wdERhdGEudGl0bGUgPSBzcC5nZXRDdXN0b21TdHJpbmcoY29udGVudC5wcm9tcHQudGl0bGUpO1xyXG5cdFx0ZGF0YS5wcm9tcHREYXRhLnF1ZXN0aW9uID0gc3AuZ2V0Q3VzdG9tU3RyaW5nKGNvbnRlbnQucHJvbXB0LnF1ZXN0aW9uKTtcclxuXHRcdGRhdGEucHJvbXB0RGF0YS55ZXNCdXR0b25MYWJlbCA9IHNwLmdldEN1c3RvbVN0cmluZyhjb250ZW50LnByb21wdC55ZXNMYWJlbCk7XHJcblx0XHRkYXRhLnByb21wdERhdGEubm9CdXR0b25MYWJlbCA9IHNwLmdldEN1c3RvbVN0cmluZyhjb250ZW50LnByb21wdC5ub0xhYmVsKTtcclxuXHJcblx0XHRpZiAoIGlzTk9VKGRhdGEucHJvbXB0RGF0YS50aXRsZSlcclxuXHRcdFx0fHwgaXNOT1UoZGF0YS5wcm9tcHREYXRhLnF1ZXN0aW9uKVxyXG5cdFx0XHR8fCBpc05PVShkYXRhLnByb21wdERhdGEueWVzQnV0dG9uTGFiZWwpXHJcblx0XHRcdHx8IGlzTk9VKGRhdGEucHJvbXB0RGF0YS5ub0J1dHRvbkxhYmVsKSkge1xyXG5cclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNvbnRlbnQucmF0aW5nKSB7XHJcblx0XHRcdGRhdGEucmF0aW5nRGF0YSA9IG5ldyBSYXRpbmdDb21wb25lbnQuUmF0aW5nQ29tcG9uZW50RGF0YSgpO1xyXG5cdFx0XHRkYXRhLnJhdGluZ0RhdGEucXVlc3Rpb24gPSBzcC5nZXRDdXN0b21TdHJpbmcoY29udGVudC5yYXRpbmcucXVlc3Rpb24pO1xyXG5cdFx0XHRkYXRhLnJhdGluZ0RhdGEuaXNaZXJvQmFzZWQgPSBjb250ZW50LnJhdGluZy5pc1plcm9CYXNlZDtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgdmFsdWUgb2YgY29udGVudC5yYXRpbmcucmF0aW5nVmFsdWVzQXNjZW5kaW5nKSB7XHJcblx0XHRcdFx0Y29uc3QgY3VzdG9tU3RyaW5nOiBzdHJpbmcgPSBzcC5nZXRDdXN0b21TdHJpbmcodmFsdWUpO1xyXG5cclxuXHRcdFx0XHRpZiAoaXNOT1UoY3VzdG9tU3RyaW5nKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyYXRpbmdWYWx1ZXNBc2NlbmRpbmcucHVzaChjdXN0b21TdHJpbmcpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkYXRhLnJhdGluZ0RhdGEucmF0aW5nVmFsdWVzQXNjZW5kaW5nID0gcmF0aW5nVmFsdWVzQXNjZW5kaW5nO1xyXG5cclxuXHRcdFx0aWYgKGlzTk9VKGRhdGEucmF0aW5nRGF0YS5xdWVzdGlvbilcclxuXHRcdFx0XHR8fCBpc05PVShkYXRhLnJhdGluZ0RhdGEucmF0aW5nVmFsdWVzQXNjZW5kaW5nKSkge1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjb250ZW50Lm11bHRpcGxlQ2hvaWNlKSB7XHJcblx0XHRcdGRhdGEubXVsdGlwbGVDaG9pY2VEYXRhID0gbmV3IE11bHRpcGxlQ2hvaWNlQ29tcG9uZW50Lk11bHRpcGxlQ2hvaWNlQ29tcG9uZW50RGF0YSgpO1xyXG5cdFx0XHRkYXRhLm11bHRpcGxlQ2hvaWNlRGF0YS5xdWVzdGlvbiA9IHNwLmdldEN1c3RvbVN0cmluZyhjb250ZW50Lm11bHRpcGxlQ2hvaWNlLnF1ZXN0aW9uKTtcclxuXHRcdFx0ZGF0YS5tdWx0aXBsZUNob2ljZURhdGEubWluTnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnMgPSBjb250ZW50Lm11bHRpcGxlQ2hvaWNlLm1pbk51bWJlck9mU2VsZWN0ZWRPcHRpb25zO1xyXG5cdFx0XHRkYXRhLm11bHRpcGxlQ2hvaWNlRGF0YS5tYXhOdW1iZXJPZlNlbGVjdGVkT3B0aW9ucyA9IGNvbnRlbnQubXVsdGlwbGVDaG9pY2UubWF4TnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnM7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIGNvbnRlbnQubXVsdGlwbGVDaG9pY2UuYXZhaWxhYmxlT3B0aW9ucykge1xyXG5cdFx0XHRcdGNvbnN0IGN1c3RvbVN0cmluZzogc3RyaW5nID0gc3AuZ2V0Q3VzdG9tU3RyaW5nKHZhbHVlKTtcclxuXHJcblx0XHRcdFx0aWYgKGlzTk9VKGN1c3RvbVN0cmluZykpIHtcclxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0YXZhaWxhYmxlT3B0aW9ucy5wdXNoKGN1c3RvbVN0cmluZyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGRhdGEubXVsdGlwbGVDaG9pY2VEYXRhLmF2YWlsYWJsZU9wdGlvbnMgPSBhdmFpbGFibGVPcHRpb25zO1xyXG5cclxuXHRcdFx0aWYgKGlzTk9VKGRhdGEubXVsdGlwbGVDaG9pY2VEYXRhLnF1ZXN0aW9uKVxyXG5cdFx0XHRcdHx8IGlzTk9VKGRhdGEubXVsdGlwbGVDaG9pY2VEYXRhLmF2YWlsYWJsZU9wdGlvbnMpKSB7XHJcblxyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNvbnRlbnQuY29tbWVudCkge1xyXG5cdFx0XHRkYXRhLmNvbW1lbnREYXRhID0gbmV3IENvbW1lbnRDb21wb25lbnQuQ29tbWVudENvbXBvbmVudERhdGEoKTtcclxuXHRcdFx0ZGF0YS5jb21tZW50RGF0YS5xdWVzdGlvbiA9IHNwLmdldEN1c3RvbVN0cmluZyhjb250ZW50LmNvbW1lbnQucXVlc3Rpb24pO1xyXG5cclxuXHRcdFx0aWYgKGlzTk9VKGRhdGEuY29tbWVudERhdGEucXVlc3Rpb24pKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBjdnN1cnZleSBkYXRhIGlzIG5vdCByZXF1aXJlZCBvbiBhbGwgc3VydmV5cy5cclxuXHRcdGlmIChjb250ZW50LmN2U3VydmV5KSB7XHJcblx0XHRcdGRhdGEuY3ZTdXJ2ZXlEYXRhID0gbmV3IENWU3VydmV5Q29tcG9uZW50LkNWU3VydmV5Q29tcG9uZW50RGF0YSgpO1xyXG5cdFx0XHRkYXRhLmN2U3VydmV5RGF0YS5jdXN0b21lclZvaWNlRm9ybUlkID0gIGNvbnRlbnQuY3ZTdXJ2ZXkuY3VzdG9tZXJWb2ljZUZvcm1JZDtcclxuXHJcblx0XHRcdGlmIChpc05PVShkYXRhLmN2U3VydmV5RGF0YS5jdXN0b21lclZvaWNlRm9ybUlkKSkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMubWFrZShkYXRhKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3VydmV5SW5mbzogU3VydmV5RGF0YVNvdXJjZTtcclxuXHRwcml2YXRlIHF1ZXN0aW9uOiBDb21tZW50Q29tcG9uZW50O1xyXG5cdHByaXZhdGUgcHJvbXB0OiBQcm9tcHRDb21wb25lbnQ7XHJcblx0cHJpdmF0ZSByYXRpbmc6IFJhdGluZ0NvbXBvbmVudDtcclxuXHRwcml2YXRlIG11bHRpcGxlQ2hvaWNlOiBNdWx0aXBsZUNob2ljZUNvbXBvbmVudDtcclxuXHRwcml2YXRlIGN2U3VydmV5OiBDVlN1cnZleUNvbXBvbmVudDtcclxuXHJcblx0cHJpdmF0ZSBjb25zdHJ1Y3RvcihkYXRhOiBGcHNTdXJ2ZXkuRnBzU3VydmV5RGF0YSkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdGlmIChpc05PVShkYXRhKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zdXJ2ZXlJbmZvID0gbmV3IFN1cnZleURhdGFTb3VyY2UoZGF0YS5iYXNlRGF0YSk7XHJcblx0XHR0aGlzLnByb21wdCA9IG5ldyBQcm9tcHRDb21wb25lbnQoZGF0YS5wcm9tcHREYXRhKTtcclxuXHRcdHRoaXMucXVlc3Rpb24gPSBkYXRhLmNvbW1lbnREYXRhID8gKG5ldyBDb21tZW50Q29tcG9uZW50KGRhdGEuY29tbWVudERhdGEpKSA6IG51bGw7XHJcblx0XHR0aGlzLnJhdGluZyA9IGRhdGEucmF0aW5nRGF0YSA/IChuZXcgUmF0aW5nQ29tcG9uZW50KGRhdGEucmF0aW5nRGF0YSkpIDogbnVsbDtcclxuXHRcdHRoaXMubXVsdGlwbGVDaG9pY2UgPSBkYXRhLm11bHRpcGxlQ2hvaWNlRGF0YSA/IChuZXcgTXVsdGlwbGVDaG9pY2VDb21wb25lbnQoZGF0YS5tdWx0aXBsZUNob2ljZURhdGEpKSA6IG51bGw7XHJcblx0XHR0aGlzLmN2U3VydmV5ID0gZGF0YS5jdlN1cnZleURhdGEgPyAobmV3IENWU3VydmV5Q29tcG9uZW50KGRhdGEuY3ZTdXJ2ZXlEYXRhKSkgOiBudWxsO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldFR5cGUoKTogSVN1cnZleS5UeXBlIHtcclxuXHRcdHJldHVybiBJU3VydmV5LlR5cGUuRnBzO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldFN1cnZleUluZm8oKTogSVN1cnZleUluZm8ge1xyXG5cdFx0cmV0dXJuIHRoaXMuc3VydmV5SW5mbztcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRDb21tZW50Q29tcG9uZW50KCk6IENvbW1lbnRDb21wb25lbnQge1xyXG5cdFx0cmV0dXJuIHRoaXMucXVlc3Rpb247XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0UHJvbXB0Q29tcG9uZW50KCk6IFByb21wdENvbXBvbmVudCB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9tcHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0UmF0aW5nQ29tcG9uZW50KCk6IFJhdGluZ0NvbXBvbmVudCB7XHJcblx0XHRyZXR1cm4gdGhpcy5yYXRpbmc7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0TXVsdGlwbGVDaG9pY2VDb21wb25lbnQoKTogTXVsdGlwbGVDaG9pY2VDb21wb25lbnQge1xyXG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbGVDaG9pY2U7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0Q1ZTdXJ2ZXlDb21wb25lbnQoKTogQ1ZTdXJ2ZXlDb21wb25lbnQge1xyXG5cdFx0cmV0dXJuIHRoaXMuY3ZTdXJ2ZXk7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0Q29tcG9uZW50KGNvbXBvbmVudFR5cGU6IElTdXJ2ZXlDb21wb25lbnQuVHlwZSk6IElTdXJ2ZXlDb21wb25lbnQge1xyXG5cdFx0c3dpdGNoIChjb21wb25lbnRUeXBlKSB7XHJcblx0XHRcdGNhc2UgSVN1cnZleUNvbXBvbmVudC5UeXBlLkNvbW1lbnQ6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0Q29tbWVudENvbXBvbmVudCgpO1xyXG5cdFx0XHRjYXNlIElTdXJ2ZXlDb21wb25lbnQuVHlwZS5Qcm9tcHQ6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0UHJvbXB0Q29tcG9uZW50KCk7XHJcblx0XHRcdGNhc2UgSVN1cnZleUNvbXBvbmVudC5UeXBlLlJhdGluZzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRSYXRpbmdDb21wb25lbnQoKTtcclxuXHRcdFx0Y2FzZSBJU3VydmV5Q29tcG9uZW50LlR5cGUuTXVsdGlwbGVDaG9pY2U6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0TXVsdGlwbGVDaG9pY2VDb21wb25lbnQoKTtcclxuXHRcdFx0Y2FzZSBJU3VydmV5Q29tcG9uZW50LlR5cGUuQ1ZTdXJ2ZXk6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0Q1ZTdXJ2ZXlDb21wb25lbnQoKTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXREb21FbGVtZW50cyhkb2M6IERvY3VtZW50KTogRWxlbWVudFtdIHtcclxuXHRcdGlmIChpc05PVShkb2MpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkRvY3VtZW50IG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZWxlbWVudDogRWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KElTdXJ2ZXkuRE9NX0ZQU19UQUdOQU1FKTtcclxuXHJcblx0XHR0aGlzLmdldFN1cnZleUluZm8oKS5nZXREb21FbGVtZW50cyhkb2MpLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcblx0XHRcdGlmICghaXNOT1UoY2hpbGQpKSB7XHJcblx0XHRcdFx0ZWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuZ2V0Q29tbWVudENvbXBvbmVudCgpLmdldERvbUVsZW1lbnRzKGRvYykuZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuXHRcdFx0aWYgKCFpc05PVShjaGlsZCkpIHtcclxuXHRcdFx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0aWYgKHRoaXMuZ2V0UmF0aW5nQ29tcG9uZW50KCkpIHtcclxuXHRcdFx0dGhpcy5nZXRSYXRpbmdDb21wb25lbnQoKS5nZXREb21FbGVtZW50cyhkb2MpLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcblx0XHRcdFx0aWYgKCFpc05PVShjaGlsZCkpIHtcclxuXHRcdFx0XHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuZ2V0TXVsdGlwbGVDaG9pY2VDb21wb25lbnQoKSkge1xyXG5cdFx0XHR0aGlzLmdldE11bHRpcGxlQ2hvaWNlQ29tcG9uZW50KCkuZ2V0RG9tRWxlbWVudHMoZG9jKS5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG5cdFx0XHRcdGlmICghaXNOT1UoY2hpbGQpKSB7XHJcblx0XHRcdFx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBbZWxlbWVudF07XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0SnNvbkVsZW1lbnRzKCk6IG9iamVjdCB7XHJcblx0XHRsZXQgcmVzdWx0OiBvYmplY3QgPSB7fTtcclxuXHJcblx0XHRyZXN1bHQgPSBVdGlscy5vdmVycmlkZVZhbHVlcyh0aGlzLmdldFN1cnZleUluZm8oKS5nZXRKc29uRWxlbWVudHMoKSwgcmVzdWx0KTtcclxuXHRcdHJlc3VsdFtJU3VydmV5Q29tcG9uZW50LkpTT05fQVBQTElDQVRJT05fS0VZTkFNRV0gPSB7fTtcclxuXHJcblx0XHRyZXN1bHRbSVN1cnZleUNvbXBvbmVudC5KU09OX0FQUExJQ0FUSU9OX0tFWU5BTUVdW0lTdXJ2ZXlDb21wb25lbnQuSlNPTl9FWFRFTkRFRE1BTklGRVNUREFUQV9LRVlOQU1FXSA9XHJcblx0XHRcdEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRbSVN1cnZleUNvbXBvbmVudC5KU09OX1NVUlZFWVNUUklOR1NfS0VZTkFNRV06IHRoaXMubWFrZVN1cnZleVN0cmluZ3MoKSxcclxuXHRcdFx0XHRbSVN1cnZleUNvbXBvbmVudC5KU09OX1NVUlZFWVNQRUNJRklDREFUQV9LRVlOQU1FXTogdGhpcy5tYWtlUmVzcG9uc2VTdHJpbmcoKSxcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIE1ha2VzIHRoZSBzdHJpbmcgdG8gc2VuZCB0byBNYW5pZmVzdCByZXNwZWN0aW5nIHRoZSBjb21wb25lbnRzIHByZXNlbnQgaW4gdGhlIHN1cnZleVxyXG5cdHByaXZhdGUgbWFrZVJlc3BvbnNlU3RyaW5nKCk6IHN0cmluZyB7XHJcblx0XHRjb25zdCByZXNwb25zZTogb2JqZWN0ID0ge307XHJcblxyXG5cdFx0aWYgKHRoaXMucXVlc3Rpb24pIHtcclxuXHRcdFx0cmVzcG9uc2VbSVN1cnZleUNvbXBvbmVudC5KU09OX0NPTU1FTlRfS0VZTkFNRV0gPSBbdGhpcy5nZXRDb21tZW50Q29tcG9uZW50KCkuZ2V0U3VibWl0dGVkVGV4dCgpXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5tdWx0aXBsZUNob2ljZSkge1xyXG5cdFx0XHRyZXNwb25zZVtJU3VydmV5Q29tcG9uZW50LkpTT05fTVVMVElQTEVDSE9JQ0VfS0VZTkFNRV0gPVxyXG5cdFx0XHRcdFt0aGlzLmdldE11bHRpcGxlQ2hvaWNlQ29tcG9uZW50KCkuZ2V0T3B0aW9uU2VsZWN0ZWRTdGF0ZXMoKV07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMucmF0aW5nKSB7XHJcblx0XHRcdHJlc3BvbnNlW0lTdXJ2ZXlDb21wb25lbnQuSlNPTl9SQVRJTkdfS0VZTkFNRV0gPSBbXHJcblx0XHRcdFx0e251bWJlck9mT3B0aW9uczogdGhpcy5nZXRSYXRpbmdDb21wb25lbnQoKS5nZXRSYXRpbmdWYWx1ZXNBc2NlbmRpbmcoKS5sZW5ndGgsXHJcblx0XHRcdHNlbGVjdGVkUmF0aW5nOiB0aGlzLmdldFJhdGluZ0NvbXBvbmVudCgpLmdldFNlbGVjdGVkUmF0aW5nSW5kZXgoKSB9XTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpO1xyXG5cdH1cclxuXHJcblx0Ly8gTWFrZXMgdGhlIHN0cmluZyB0byBzZW5kIHRvIE1hbmlmZXN0IHJlc3BlY3RpbmcgdGhlIGNvbXBvbmVudHMgcHJlc2VudCBpbiB0aGUgc3VydmV5XHJcblx0cHJpdmF0ZSBtYWtlU3VydmV5U3RyaW5ncygpOiBzdHJpbmcge1xyXG5cdFx0Y29uc3QgYWN0dWFsU3RyaW5nczogb2JqZWN0ID0ge307XHJcblxyXG5cdFx0aWYgKHRoaXMucHJvbXB0KSB7XHJcblx0XHRcdGFjdHVhbFN0cmluZ3NbSVN1cnZleUNvbXBvbmVudC5KU09OX1BST01QVF9LRVlOQU1FXSA9IHRoaXMucHJvbXB0LmdldENvbXBvbmVudEpzb24oKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5yYXRpbmcpIHtcclxuXHRcdFx0YWN0dWFsU3RyaW5nc1tJU3VydmV5Q29tcG9uZW50LkpTT05fUkFUSU5HX0tFWU5BTUVdID0gW3RoaXMucmF0aW5nLmdldENvbXBvbmVudEpzb24oKV07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMucXVlc3Rpb24pIHtcclxuXHRcdFx0YWN0dWFsU3RyaW5nc1tJU3VydmV5Q29tcG9uZW50LkpTT05fQ09NTUVOVF9LRVlOQU1FXSA9IFt0aGlzLnF1ZXN0aW9uLmdldENvbXBvbmVudEpzb24oKV07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMubXVsdGlwbGVDaG9pY2UpIHtcclxuXHRcdFx0YWN0dWFsU3RyaW5nc1tJU3VydmV5Q29tcG9uZW50LkpTT05fTVVMVElQTEVDSE9JQ0VfS0VZTkFNRV0gPSBbdGhpcy5tdWx0aXBsZUNob2ljZS5nZXRDb21wb25lbnRKc29uKCldO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShhY3R1YWxTdHJpbmdzKTtcclxuXHR9XHJcbn1cclxubW9kdWxlIEZwc1N1cnZleSB7XHJcblx0LyoqXHJcblx0ICogRGF0YSByZXF1aXJlZCBmb3IgYSBGcHMgU3VydmV5XHJcblx0ICovXHJcblx0ZXhwb3J0IGNsYXNzIEZwc1N1cnZleURhdGEge1xyXG5cdFx0cHVibGljIGJhc2VEYXRhOiBTdXJ2ZXlEYXRhU291cmNlLlN1cnZleURhdGFTb3VyY2VEYXRhO1xyXG5cdFx0cHVibGljIGNvbW1lbnREYXRhOiBDb21tZW50Q29tcG9uZW50LkNvbW1lbnRDb21wb25lbnREYXRhO1xyXG5cdFx0cHVibGljIHByb21wdERhdGE6IFByb21wdENvbXBvbmVudC5Qcm9tcHRDb21wb25lbnREYXRhO1xyXG5cdFx0cHVibGljIHJhdGluZ0RhdGE6IFJhdGluZ0NvbXBvbmVudC5SYXRpbmdDb21wb25lbnREYXRhO1xyXG5cdFx0cHVibGljIG11bHRpcGxlQ2hvaWNlRGF0YTogTXVsdGlwbGVDaG9pY2VDb21wb25lbnQuTXVsdGlwbGVDaG9pY2VDb21wb25lbnREYXRhO1xyXG5cdFx0cHVibGljIGN2U3VydmV5RGF0YTogQ1ZTdXJ2ZXlDb21wb25lbnQuQ1ZTdXJ2ZXlDb21wb25lbnREYXRhO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0ID0gRnBzU3VydmV5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Surveys/FpsSurvey.js\n')},"../FloodgateCore/dist/src/Surveys/GenericMessagingSurfaceSurvey.js":function(){"use strict";eval('\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar ISurvey = __webpack_require__(/*! ../Api/ISurvey */ "../FloodgateCore/dist/src/Api/ISurvey.js");\nvar Utils = __webpack_require__(/*! ../Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar Survey_1 = __webpack_require__(/*! ./Survey */ "../FloodgateCore/dist/src/Surveys/Survey.js");\nvar SurveyDataSource = __webpack_require__(/*! ./SurveyDataSource */ "../FloodgateCore/dist/src/Surveys/SurveyDataSource.js");\nvar isNOU = Utils.isNOU;\nvar GenericMessagingSurfaceSurvey = /** @class */ (function (_super) {\n    __extends(GenericMessagingSurfaceSurvey, _super);\n    function GenericMessagingSurfaceSurvey(data) {\n        var _this = _super.call(this) || this;\n        if (!data) {\n            throw new Error("data must not be null");\n        }\n        _this.surveyInfo = new SurveyDataSource(data.baseData);\n        // This check cannot be done in survey info constructor\n        // as metadata is specific to this survey type.\n        if (isNOU(_this.surveyInfo.getMetadata())) {\n            throw new Error("metadata must not be null");\n        }\n        return _this;\n    }\n    GenericMessagingSurfaceSurvey.make = function (data) {\n        try {\n            return new GenericMessagingSurfaceSurvey(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    GenericMessagingSurfaceSurvey.makeCustom = function (baseData) {\n        if (isNOU(baseData)) {\n            return null;\n        }\n        var data = new GenericMessagingSurfaceSurvey.GenericMessagingSurfaceSurveyData();\n        data.baseData = baseData;\n        return this.make(data);\n    };\n    // @Override\n    GenericMessagingSurfaceSurvey.prototype.getType = function () {\n        return ISurvey.Type.GenericMessagingSurface;\n    };\n    // @Override\n    GenericMessagingSurfaceSurvey.prototype.getSurveyInfo = function () {\n        return this.surveyInfo;\n    };\n    // @Override\n    GenericMessagingSurfaceSurvey.prototype.getComponent = function (componentType) {\n        return null;\n    };\n    // @Override\n    GenericMessagingSurfaceSurvey.prototype.getDomElements = function (doc) {\n        return [];\n    };\n    // @Override\n    GenericMessagingSurfaceSurvey.prototype.getJsonElements = function () {\n        return {};\n    };\n    return GenericMessagingSurfaceSurvey;\n}(Survey_1.Survey));\n(function (GenericMessagingSurfaceSurvey) {\n    /**\n     * Data required for a Generic Surface Survey\n     */\n    var GenericMessagingSurfaceSurveyData = /** @class */ (function () {\n        function GenericMessagingSurfaceSurveyData() {\n        }\n        return GenericMessagingSurfaceSurveyData;\n    }());\n    GenericMessagingSurfaceSurvey.GenericMessagingSurfaceSurveyData = GenericMessagingSurfaceSurveyData;\n})(GenericMessagingSurfaceSurvey || (GenericMessagingSurfaceSurvey = {}));\nmodule.exports = GenericMessagingSurfaceSurvey;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleXMvR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2VTdXJ2ZXkudHM/ZWEwMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLG9HQUEwQztBQUcxQyxzRkFBa0M7QUFDbEMsa0dBQWtDO0FBQ2xDLDhIQUF1RDtBQUUvQyxTQUFLLEdBQUssS0FBSyxNQUFWLENBQVc7QUFFeEI7SUFBNEMsaURBQU07SUFzQmpELHVDQUFvQixJQUFxRTtRQUF6RixZQUNDLGlCQUFPLFNBWVA7UUFYQSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsS0FBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV0RCx1REFBdUQ7UUFDdkQsK0NBQStDO1FBQy9DLElBQUksS0FBSyxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7U0FDN0M7O0lBQ0YsQ0FBQztJQWxDYSxrQ0FBSSxHQUFsQixVQUFtQixJQUFxRTtRQUN2RixJQUFJO1lBQ0gsT0FBTyxJQUFJLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9DO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztTQUNaO0lBQ0YsQ0FBQztJQUVhLHdDQUFVLEdBQXhCLFVBQXlCLFFBQStDO1FBQ3ZFLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFFRCxJQUFNLElBQUksR0FBRyxJQUFJLDZCQUE2QixDQUFDLGlDQUFpQyxFQUFFLENBQUM7UUFDbkYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFtQkQsWUFBWTtJQUNMLCtDQUFPLEdBQWQ7UUFDQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDN0MsQ0FBQztJQUVELFlBQVk7SUFDTCxxREFBYSxHQUFwQjtRQUNDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWTtJQUNMLG9EQUFZLEdBQW5CLFVBQW9CLGFBQW9DO1FBQ3ZELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVk7SUFDTCxzREFBYyxHQUFyQixVQUFzQixHQUFhO1FBQ2xDLE9BQU8sRUFBRSxDQUFDO0lBQ1gsQ0FBQztJQUVELFlBQVk7SUFDTCx1REFBZSxHQUF0QjtRQUNDLE9BQU8sRUFBRSxDQUFDO0lBQ1gsQ0FBQztJQUNGLG9DQUFDO0FBQUQsQ0FBQyxDQTdEMkMsZUFBTSxHQTZEakQ7QUFFRCxXQUFPLDZCQUE2QjtJQUNuQzs7T0FFRztJQUNIO1FBQUE7UUFFQSxDQUFDO1FBQUQsd0NBQUM7SUFBRCxDQUFDO0lBRlksK0RBQWlDLG9DQUU3QztBQUNGLENBQUMsRUFQTSw2QkFBNkIsS0FBN0IsNkJBQTZCLFFBT25DO0FBRUQsaUJBQVMsNkJBQTZCLENBQUMiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9TdXJ2ZXlzL0dlbmVyaWNNZXNzYWdpbmdTdXJmYWNlU3VydmV5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgSVN1cnZleSBmcm9tIFwiLi4vQXBpL0lTdXJ2ZXlcIjtcclxuaW1wb3J0ICogYXMgSVN1cnZleUNvbXBvbmVudCBmcm9tIFwiLi4vQXBpL0lTdXJ2ZXlDb21wb25lbnRcIjtcclxuaW1wb3J0ICogYXMgSVN1cnZleUluZm8gZnJvbSBcIi4uL0lTdXJ2ZXlJbmZvXCI7XHJcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gXCIuLi9VdGlsc1wiO1xyXG5pbXBvcnQgeyBTdXJ2ZXkgfSBmcm9tIFwiLi9TdXJ2ZXlcIjtcclxuaW1wb3J0ICogYXMgU3VydmV5RGF0YVNvdXJjZSBmcm9tIFwiLi9TdXJ2ZXlEYXRhU291cmNlXCI7XHJcblxyXG5jb25zdCB7IGlzTk9VIH0gPSBVdGlscztcclxuXHJcbmNsYXNzIEdlbmVyaWNNZXNzYWdpbmdTdXJmYWNlU3VydmV5IGV4dGVuZHMgU3VydmV5IHtcclxuXHRwdWJsaWMgc3RhdGljIG1ha2UoZGF0YTogR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2VTdXJ2ZXkuR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2VTdXJ2ZXlEYXRhKTogSVN1cnZleSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IEdlbmVyaWNNZXNzYWdpbmdTdXJmYWNlU3VydmV5KGRhdGEpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgbWFrZUN1c3RvbShiYXNlRGF0YTogU3VydmV5RGF0YVNvdXJjZS5TdXJ2ZXlEYXRhU291cmNlRGF0YSk6IElTdXJ2ZXkge1xyXG5cdFx0aWYgKGlzTk9VKGJhc2VEYXRhKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBkYXRhID0gbmV3IEdlbmVyaWNNZXNzYWdpbmdTdXJmYWNlU3VydmV5LkdlbmVyaWNNZXNzYWdpbmdTdXJmYWNlU3VydmV5RGF0YSgpO1xyXG5cdFx0ZGF0YS5iYXNlRGF0YSA9IGJhc2VEYXRhO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm1ha2UoZGF0YSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHN1cnZleUluZm86IFN1cnZleURhdGFTb3VyY2U7XHJcblxyXG5cdHByaXZhdGUgY29uc3RydWN0b3IoZGF0YTogR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2VTdXJ2ZXkuR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2VTdXJ2ZXlEYXRhKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRhdGEgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnN1cnZleUluZm8gPSBuZXcgU3VydmV5RGF0YVNvdXJjZShkYXRhLmJhc2VEYXRhKTtcclxuXHJcblx0XHQvLyBUaGlzIGNoZWNrIGNhbm5vdCBiZSBkb25lIGluIHN1cnZleSBpbmZvIGNvbnN0cnVjdG9yXHJcblx0XHQvLyBhcyBtZXRhZGF0YSBpcyBzcGVjaWZpYyB0byB0aGlzIHN1cnZleSB0eXBlLlxyXG5cdFx0aWYgKGlzTk9VKHRoaXMuc3VydmV5SW5mby5nZXRNZXRhZGF0YSgpKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtZXRhZGF0YSBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldFR5cGUoKTogSVN1cnZleS5UeXBlIHtcclxuXHRcdHJldHVybiBJU3VydmV5LlR5cGUuR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2U7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0U3VydmV5SW5mbygpOiBJU3VydmV5SW5mbyB7XHJcblx0XHRyZXR1cm4gdGhpcy5zdXJ2ZXlJbmZvO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldENvbXBvbmVudChjb21wb25lbnRUeXBlOiBJU3VydmV5Q29tcG9uZW50LlR5cGUpOiBJU3VydmV5Q29tcG9uZW50IHtcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldERvbUVsZW1lbnRzKGRvYzogRG9jdW1lbnQpOiBFbGVtZW50W10ge1xyXG5cdFx0cmV0dXJuIFtdO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldEpzb25FbGVtZW50cygpOiBvYmplY3Qge1xyXG5cdFx0cmV0dXJuIHt9O1xyXG5cdH1cclxufVxyXG5cclxubW9kdWxlIEdlbmVyaWNNZXNzYWdpbmdTdXJmYWNlU3VydmV5IHtcclxuXHQvKipcclxuXHQgKiBEYXRhIHJlcXVpcmVkIGZvciBhIEdlbmVyaWMgU3VyZmFjZSBTdXJ2ZXlcclxuXHQgKi9cclxuXHRleHBvcnQgY2xhc3MgR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2VTdXJ2ZXlEYXRhIHtcclxuXHRcdHB1YmxpYyBiYXNlRGF0YTogU3VydmV5RGF0YVNvdXJjZS5TdXJ2ZXlEYXRhU291cmNlRGF0YTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCA9IEdlbmVyaWNNZXNzYWdpbmdTdXJmYWNlU3VydmV5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Surveys/GenericMessagingSurfaceSurvey.js\n')},"../FloodgateCore/dist/src/Surveys/InterceptSurvey.js":function(){"use strict";eval('\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar ISurvey = __webpack_require__(/*! ../Api/ISurvey */ "../FloodgateCore/dist/src/Api/ISurvey.js");\nvar InterceptComponent = __webpack_require__(/*! ../SurveyComponents/InterceptComponent */ "../FloodgateCore/dist/src/SurveyComponents/InterceptComponent.js");\nvar Utils = __webpack_require__(/*! ../Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar Survey_1 = __webpack_require__(/*! ./Survey */ "../FloodgateCore/dist/src/Surveys/Survey.js");\nvar SurveyDataSource = __webpack_require__(/*! ./SurveyDataSource */ "../FloodgateCore/dist/src/Surveys/SurveyDataSource.js");\nvar isNOU = Utils.isNOU;\nvar InterceptSurvey = /** @class */ (function (_super) {\n    __extends(InterceptSurvey, _super);\n    function InterceptSurvey(data) {\n        var _this = _super.call(this) || this;\n        if (isNOU(data)) {\n            throw new Error("data must not be null");\n        }\n        _this.surveyInfo = new SurveyDataSource(data.baseData);\n        _this.intercept = new InterceptComponent(data.interceptData);\n        return _this;\n    }\n    InterceptSurvey.make = function (data) {\n        try {\n            return new InterceptSurvey(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    InterceptSurvey.makeIntercept = function (baseData, sp, surveyModel) {\n        if (isNOU(baseData) || isNOU(sp) || isNOU(surveyModel)) {\n            return null;\n        }\n        var content = surveyModel.content;\n        // Intercept component is required.\n        if (isNOU(content) || isNOU(content.intercept)) {\n            return null;\n        }\n        var data = new InterceptSurvey.InterceptSurveyData();\n        data.baseData = baseData;\n        data.interceptData = new InterceptComponent.InterceptComponentData();\n        data.interceptData.title = sp.getCustomString(content.intercept.title);\n        data.interceptData.question = sp.getCustomString(content.intercept.question);\n        data.interceptData.url = sp.getCustomString(content.intercept.url);\n        if (isNOU(data.interceptData.title)\n            || isNOU(data.interceptData.question)\n            || isNOU(data.interceptData.url)) {\n            return null;\n        }\n        return this.make(data);\n    };\n    // @Override\n    InterceptSurvey.prototype.getType = function () {\n        return ISurvey.Type.Intercept;\n    };\n    // @Override\n    InterceptSurvey.prototype.getSurveyInfo = function () {\n        return this.surveyInfo;\n    };\n    // @Override\n    InterceptSurvey.prototype.getInterceptComponent = function () {\n        return this.intercept;\n    };\n    // @Override\n    InterceptSurvey.prototype.getComponent = function (componentType) {\n        return (componentType === "Intercept" /* Intercept */) ? this.getInterceptComponent() : null;\n    };\n    // @Override\n    InterceptSurvey.prototype.getDomElements = function (doc) {\n        return [];\n    };\n    // @Override\n    InterceptSurvey.prototype.getJsonElements = function () {\n        return {};\n    };\n    return InterceptSurvey;\n}(Survey_1.Survey));\n(function (InterceptSurvey) {\n    /**\n     * Data required for an Intercept Survey\n     */\n    var InterceptSurveyData = /** @class */ (function () {\n        function InterceptSurveyData() {\n        }\n        return InterceptSurveyData;\n    }());\n    InterceptSurvey.InterceptSurveyData = InterceptSurveyData;\n})(InterceptSurvey || (InterceptSurvey = {}));\nmodule.exports = InterceptSurvey;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleXMvSW50ZXJjZXB0U3VydmV5LnRzPzZiM2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFFQSxvR0FBMEM7QUFJMUMsK0pBQTZFO0FBQzdFLHNGQUFrQztBQUNsQyxrR0FBa0M7QUFDbEMsOEhBQXVEO0FBRS9DLFNBQUssR0FBSyxLQUFLLE1BQVYsQ0FBVztBQUV4QjtJQUE4QixtQ0FBTTtJQTZDbkMseUJBQW9CLElBQXlDO1FBQTdELFlBQ0MsaUJBQU8sU0FPUDtRQU5BLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUN6QztRQUVELEtBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsS0FBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzs7SUFDN0QsQ0FBQztJQXBEYSxvQkFBSSxHQUFsQixVQUFtQixJQUF5QztRQUMzRCxJQUFJO1lBQ0gsT0FBTyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7U0FDWjtJQUNGLENBQUM7SUFFYSw2QkFBYSxHQUEzQixVQUE0QixRQUErQyxFQUFFLEVBQTRCLEVBQ3hHLFdBQW1DO1FBRW5DLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDdkQsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELElBQU0sT0FBTyxHQUEwQixXQUFXLENBQUMsT0FBTyxDQUFDO1FBRTNELG1DQUFtQztRQUNuQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFFRCxJQUFNLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRXJFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRW5FLElBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO2VBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztlQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUVsQyxPQUFPLElBQUksQ0FBQztTQUNaO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFlRCxZQUFZO0lBQ0wsaUNBQU8sR0FBZDtRQUNDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVk7SUFDTCx1Q0FBYSxHQUFwQjtRQUNDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWTtJQUNMLCtDQUFxQixHQUE1QjtRQUNDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN2QixDQUFDO0lBRUQsWUFBWTtJQUNMLHNDQUFZLEdBQW5CLFVBQW9CLGFBQW9DO1FBQ3ZELE9BQU8sQ0FBQyxhQUFhLGdDQUFvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEcsQ0FBQztJQUVELFlBQVk7SUFDTCx3Q0FBYyxHQUFyQixVQUFzQixHQUFhO1FBQ2xDLE9BQU8sRUFBRSxDQUFDO0lBQ1gsQ0FBQztJQUVELFlBQVk7SUFDTCx5Q0FBZSxHQUF0QjtRQUNDLE9BQU8sRUFBRSxDQUFDO0lBQ1gsQ0FBQztJQUNGLHNCQUFDO0FBQUQsQ0FBQyxDQXBGNkIsZUFBTSxHQW9GbkM7QUFDRCxXQUFPLGVBQWU7SUFDckI7O09BRUc7SUFDSDtRQUFBO1FBR0EsQ0FBQztRQUFELDBCQUFDO0lBQUQsQ0FBQztJQUhZLG1DQUFtQixzQkFHL0I7QUFDRixDQUFDLEVBUk0sZUFBZSxLQUFmLGVBQWUsUUFRckI7QUFFRCxpQkFBUyxlQUFlLENBQUMiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9TdXJ2ZXlzL0ludGVyY2VwdFN1cnZleS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIElGbG9vZGdhdGVTdHJpbmdQcm92aWRlciBmcm9tIFwiLi4vQXBpL0lGbG9vZGdhdGVTdHJpbmdQcm92aWRlclwiO1xyXG5pbXBvcnQgeyBJSW50ZXJjZXB0U3VydmV5IH0gZnJvbSBcIi4uL0FwaS9JSW50ZXJjZXB0U3VydmV5XCI7XHJcbmltcG9ydCAqIGFzIElTdXJ2ZXkgZnJvbSBcIi4uL0FwaS9JU3VydmV5XCI7XHJcbmltcG9ydCAqIGFzIElTdXJ2ZXlDb21wb25lbnQgZnJvbSBcIi4uL0FwaS9JU3VydmV5Q29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENhbXBhaWduU3VydmV5Q29udGVudCwgQ2FtcGFpZ25TdXJ2ZXlUZW1wbGF0ZSB9IGZyb20gXCIuLi9DYW1wYWlnbi9DYW1wYWlnbkRlZmluaXRpb25Qcm92aWRlclwiO1xyXG5pbXBvcnQgKiBhcyBJU3VydmV5SW5mbyBmcm9tIFwiLi4vSVN1cnZleUluZm9cIjtcclxuaW1wb3J0ICogYXMgSW50ZXJjZXB0Q29tcG9uZW50IGZyb20gXCIuLi9TdXJ2ZXlDb21wb25lbnRzL0ludGVyY2VwdENvbXBvbmVudFwiO1xyXG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tIFwiLi4vVXRpbHNcIjtcclxuaW1wb3J0IHsgU3VydmV5IH0gZnJvbSBcIi4vU3VydmV5XCI7XHJcbmltcG9ydCAqIGFzIFN1cnZleURhdGFTb3VyY2UgZnJvbSBcIi4vU3VydmV5RGF0YVNvdXJjZVwiO1xyXG5cclxuY29uc3QgeyBpc05PVSB9ID0gVXRpbHM7XHJcblxyXG5jbGFzcyBJbnRlcmNlcHRTdXJ2ZXkgZXh0ZW5kcyBTdXJ2ZXkgaW1wbGVtZW50cyBJSW50ZXJjZXB0U3VydmV5IHtcclxuXHRwdWJsaWMgc3RhdGljIG1ha2UoZGF0YTogSW50ZXJjZXB0U3VydmV5LkludGVyY2VwdFN1cnZleURhdGEpOiBJSW50ZXJjZXB0U3VydmV5IHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHJldHVybiBuZXcgSW50ZXJjZXB0U3VydmV5KGRhdGEpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgbWFrZUludGVyY2VwdChiYXNlRGF0YTogU3VydmV5RGF0YVNvdXJjZS5TdXJ2ZXlEYXRhU291cmNlRGF0YSwgc3A6IElGbG9vZGdhdGVTdHJpbmdQcm92aWRlcixcclxuXHRcdHN1cnZleU1vZGVsOiBDYW1wYWlnblN1cnZleVRlbXBsYXRlKTogSUludGVyY2VwdFN1cnZleSB7XHJcblxyXG5cdFx0aWYgKGlzTk9VKGJhc2VEYXRhKSB8fCBpc05PVShzcCkgfHwgaXNOT1Uoc3VydmV5TW9kZWwpKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNvbnRlbnQ6IENhbXBhaWduU3VydmV5Q29udGVudCA9IHN1cnZleU1vZGVsLmNvbnRlbnQ7XHJcblxyXG5cdFx0Ly8gSW50ZXJjZXB0IGNvbXBvbmVudCBpcyByZXF1aXJlZC5cclxuXHRcdGlmIChpc05PVShjb250ZW50KSB8fCBpc05PVShjb250ZW50LmludGVyY2VwdCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZGF0YSA9IG5ldyBJbnRlcmNlcHRTdXJ2ZXkuSW50ZXJjZXB0U3VydmV5RGF0YSgpO1xyXG5cdFx0ZGF0YS5iYXNlRGF0YSA9IGJhc2VEYXRhO1xyXG5cclxuXHRcdGRhdGEuaW50ZXJjZXB0RGF0YSA9IG5ldyBJbnRlcmNlcHRDb21wb25lbnQuSW50ZXJjZXB0Q29tcG9uZW50RGF0YSgpO1xyXG5cclxuXHRcdGRhdGEuaW50ZXJjZXB0RGF0YS50aXRsZSA9IHNwLmdldEN1c3RvbVN0cmluZyhjb250ZW50LmludGVyY2VwdC50aXRsZSk7XHJcblx0XHRkYXRhLmludGVyY2VwdERhdGEucXVlc3Rpb24gPSBzcC5nZXRDdXN0b21TdHJpbmcoY29udGVudC5pbnRlcmNlcHQucXVlc3Rpb24pO1xyXG5cdFx0ZGF0YS5pbnRlcmNlcHREYXRhLnVybCA9IHNwLmdldEN1c3RvbVN0cmluZyhjb250ZW50LmludGVyY2VwdC51cmwpO1xyXG5cclxuXHRcdGlmICggaXNOT1UoZGF0YS5pbnRlcmNlcHREYXRhLnRpdGxlKVxyXG5cdFx0XHR8fCBpc05PVShkYXRhLmludGVyY2VwdERhdGEucXVlc3Rpb24pXHJcblx0XHRcdHx8IGlzTk9VKGRhdGEuaW50ZXJjZXB0RGF0YS51cmwpKSB7XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5tYWtlKGRhdGEpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdXJ2ZXlJbmZvOiBTdXJ2ZXlEYXRhU291cmNlO1xyXG5cdHByaXZhdGUgaW50ZXJjZXB0OiBJbnRlcmNlcHRDb21wb25lbnQ7XHJcblxyXG5cdHByaXZhdGUgY29uc3RydWN0b3IoZGF0YTogSW50ZXJjZXB0U3VydmV5LkludGVyY2VwdFN1cnZleURhdGEpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHRpZiAoaXNOT1UoZGF0YSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGF0YSBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc3VydmV5SW5mbyA9IG5ldyBTdXJ2ZXlEYXRhU291cmNlKGRhdGEuYmFzZURhdGEpO1xyXG5cdFx0dGhpcy5pbnRlcmNlcHQgPSBuZXcgSW50ZXJjZXB0Q29tcG9uZW50KGRhdGEuaW50ZXJjZXB0RGF0YSk7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0VHlwZSgpOiBJU3VydmV5LlR5cGUge1xyXG5cdFx0cmV0dXJuIElTdXJ2ZXkuVHlwZS5JbnRlcmNlcHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0U3VydmV5SW5mbygpOiBJU3VydmV5SW5mbyB7XHJcblx0XHRyZXR1cm4gdGhpcy5zdXJ2ZXlJbmZvO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldEludGVyY2VwdENvbXBvbmVudCgpOiBJbnRlcmNlcHRDb21wb25lbnQge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW50ZXJjZXB0O1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldENvbXBvbmVudChjb21wb25lbnRUeXBlOiBJU3VydmV5Q29tcG9uZW50LlR5cGUpOiBJU3VydmV5Q29tcG9uZW50IHtcclxuXHRcdHJldHVybiAoY29tcG9uZW50VHlwZSA9PT0gSVN1cnZleUNvbXBvbmVudC5UeXBlLkludGVyY2VwdCkgPyB0aGlzLmdldEludGVyY2VwdENvbXBvbmVudCgpIDogbnVsbDtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXREb21FbGVtZW50cyhkb2M6IERvY3VtZW50KTogRWxlbWVudFtdIHtcclxuXHRcdHJldHVybiBbXTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRKc29uRWxlbWVudHMoKTogb2JqZWN0IHtcclxuXHRcdHJldHVybiB7fTtcclxuXHR9XHJcbn1cclxubW9kdWxlIEludGVyY2VwdFN1cnZleSB7XHJcblx0LyoqXHJcblx0ICogRGF0YSByZXF1aXJlZCBmb3IgYW4gSW50ZXJjZXB0IFN1cnZleVxyXG5cdCAqL1xyXG5cdGV4cG9ydCBjbGFzcyBJbnRlcmNlcHRTdXJ2ZXlEYXRhIHtcclxuXHRcdHB1YmxpYyBiYXNlRGF0YTogU3VydmV5RGF0YVNvdXJjZS5TdXJ2ZXlEYXRhU291cmNlRGF0YTtcclxuXHRcdHB1YmxpYyBpbnRlcmNlcHREYXRhOiBJbnRlcmNlcHRDb21wb25lbnQuSW50ZXJjZXB0Q29tcG9uZW50RGF0YTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCA9IEludGVyY2VwdFN1cnZleTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Surveys/InterceptSurvey.js\n')},"../FloodgateCore/dist/src/Surveys/NlqsSurvey.js":function(){"use strict";eval('\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar ISurvey = __webpack_require__(/*! ../Api/ISurvey */ "../FloodgateCore/dist/src/Api/ISurvey.js");\nvar CommentComponent = __webpack_require__(/*! ../SurveyComponents/CommentComponent */ "../FloodgateCore/dist/src/SurveyComponents/CommentComponent.js");\nvar PromptComponent = __webpack_require__(/*! ../SurveyComponents/PromptComponent */ "../FloodgateCore/dist/src/SurveyComponents/PromptComponent.js");\nvar RatingComponent = __webpack_require__(/*! ../SurveyComponents/RatingComponent */ "../FloodgateCore/dist/src/SurveyComponents/RatingComponent.js");\nvar Utils = __webpack_require__(/*! ../Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar Survey_1 = __webpack_require__(/*! ./Survey */ "../FloodgateCore/dist/src/Surveys/Survey.js");\nvar SurveyDataSource = __webpack_require__(/*! ./SurveyDataSource */ "../FloodgateCore/dist/src/Surveys/SurveyDataSource.js");\nvar isNOU = Utils.isNOU, overrideValues = Utils.overrideValues;\nvar NlqsSurvey = /** @class */ (function (_super) {\n    __extends(NlqsSurvey, _super);\n    function NlqsSurvey(data) {\n        var _this = _super.call(this) || this;\n        if (isNOU(data)) {\n            throw new Error("data must not be null");\n        }\n        _this.surveyInfo = new SurveyDataSource(data.baseData);\n        _this.prompt = new PromptComponent(data.promptData);\n        _this.question = new CommentComponent(data.commentData);\n        _this.rating = new RatingComponent(data.ratingData);\n        return _this;\n    }\n    NlqsSurvey.make = function (data) {\n        try {\n            return new NlqsSurvey(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    NlqsSurvey.makeNlqs = function (baseData, sp, surveyModel) {\n        if (isNOU(baseData) || isNOU(sp) || isNOU(surveyModel)) {\n            return null;\n        }\n        var ratingValuesAscending = [];\n        var content = surveyModel.content;\n        if (isNOU(content) || isNOU(content.comment)\n            || isNOU(content.prompt) || isNOU(content.rating)) {\n            return null;\n        }\n        var data = new NlqsSurvey.NlqsSurveyData();\n        data.baseData = baseData;\n        data.promptData = new PromptComponent.PromptComponentData();\n        data.ratingData = new RatingComponent.RatingComponentData();\n        data.commentData = new CommentComponent.CommentComponentData();\n        data.promptData.title = sp.getCustomString(content.prompt.title);\n        data.promptData.question = sp.getCustomString(content.prompt.question);\n        data.promptData.yesButtonLabel = sp.getCustomString(content.prompt.yesLabel);\n        data.promptData.noButtonLabel = sp.getCustomString(content.prompt.noLabel);\n        data.ratingData.question = sp.getCustomString(content.rating.question);\n        data.ratingData.isZeroBased = content.rating.isZeroBased;\n        data.commentData.question = sp.getCustomString(content.comment.question);\n        for (var _i = 0, _a = content.rating.ratingValuesAscending; _i < _a.length; _i++) {\n            var value = _a[_i];\n            var customString = sp.getCustomString(value);\n            if (isNOU(customString)) {\n                return null;\n            }\n            ratingValuesAscending.push(customString);\n        }\n        data.ratingData.ratingValuesAscending = ratingValuesAscending;\n        if (isNOU(data.ratingData.question)\n            || isNOU(data.commentData.question)\n            || isNOU(data.promptData.title)\n            || isNOU(data.promptData.question)\n            || isNOU(data.promptData.yesButtonLabel)\n            || isNOU(data.promptData.noButtonLabel)\n            || isNOU(data.ratingData.ratingValuesAscending)) {\n            return null;\n        }\n        return this.make(data);\n    };\n    // @Override\n    NlqsSurvey.prototype.getType = function () {\n        return ISurvey.Type.Nlqs;\n    };\n    // @Override\n    NlqsSurvey.prototype.getSurveyInfo = function () {\n        return this.surveyInfo;\n    };\n    // @Override\n    NlqsSurvey.prototype.getCommentComponent = function () {\n        return this.question;\n    };\n    // @Override\n    NlqsSurvey.prototype.getPromptComponent = function () {\n        return this.prompt;\n    };\n    // @Override\n    NlqsSurvey.prototype.getRatingComponent = function () {\n        return this.rating;\n    };\n    // @Override\n    NlqsSurvey.prototype.getComponent = function (componentType) {\n        switch (componentType) {\n            case "Comment" /* Comment */:\n                return this.getCommentComponent();\n            case "Prompt" /* Prompt */:\n                return this.getPromptComponent();\n            case "Rating" /* Rating */:\n                return this.getRatingComponent();\n            default:\n                return null;\n        }\n    };\n    // @Override\n    NlqsSurvey.prototype.getDomElements = function (doc) {\n        if (isNOU(doc)) {\n            throw new Error("Document must not be null");\n        }\n        var element = doc.createElement(ISurvey.DOM_NLQS_TAGNAME);\n        this.getSurveyInfo().getDomElements(doc).forEach(function (child) {\n            if (!isNOU(child)) {\n                element.appendChild(child);\n            }\n        });\n        this.getCommentComponent().getDomElements(doc).forEach(function (child) {\n            if (!isNOU(child)) {\n                element.appendChild(child);\n            }\n        });\n        this.getRatingComponent().getDomElements(doc).forEach(function (child) {\n            if (!isNOU(child)) {\n                element.appendChild(child);\n            }\n        });\n        return [element];\n    };\n    // @Override\n    NlqsSurvey.prototype.getJsonElements = function () {\n        var result = {};\n        result = overrideValues(this.getSurveyInfo().getJsonElements(), result);\n        result = overrideValues(this.getCommentComponent().getJsonElements(), result);\n        result = overrideValues(this.getRatingComponent().getJsonElements(), result);\n        return result;\n    };\n    return NlqsSurvey;\n}(Survey_1.Survey));\n(function (NlqsSurvey) {\n    /**\n     * Data required for a Nlqs Survey\n     */\n    var NlqsSurveyData = /** @class */ (function () {\n        function NlqsSurveyData() {\n        }\n        return NlqsSurveyData;\n    }());\n    NlqsSurvey.NlqsSurveyData = NlqsSurveyData;\n})(NlqsSurvey || (NlqsSurvey = {}));\nmodule.exports = NlqsSurvey;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleXMvTmxxc1N1cnZleS50cz9jZjU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRUEsb0dBQTBDO0FBSTFDLHlKQUF5RTtBQUN6RSxzSkFBdUU7QUFDdkUsc0pBQXVFO0FBQ3ZFLHNGQUFrQztBQUNsQyxrR0FBa0M7QUFDbEMsOEhBQXVEO0FBRS9DLFNBQUssR0FBcUIsS0FBSyxNQUExQixFQUFFLGNBQWMsR0FBSyxLQUFLLGVBQVYsQ0FBVztBQUV4QztJQUF5Qiw4QkFBTTtJQXNFOUIsb0JBQW9CLElBQStCO1FBQW5ELFlBQ0MsaUJBQU8sU0FTUDtRQVJBLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUN6QztRQUVELEtBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsS0FBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsS0FBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RCxLQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzs7SUFDcEQsQ0FBQztJQS9FYSxlQUFJLEdBQWxCLFVBQW1CLElBQStCO1FBQ2pELElBQUk7WUFDSCxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztTQUNaO0lBQ0YsQ0FBQztJQUVhLG1CQUFRLEdBQXRCLFVBQXVCLFFBQStDLEVBQUUsRUFBNEIsRUFDbkcsV0FBbUM7UUFFbkMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFD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QUM7UUFFN0UsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDO0lBQ0YsaUJBQUM7QUFBRCxDQUFDLENBaEt3QixlQUFNLEdBZ0s5QjtBQUVELFdBQU8sVUFBVTtJQUNoQjs7T0FFRztJQUNIO1FBQUE7UUFLQSxDQUFDO1FBQUQscUJBQUM7SUFBRCxDQUFDO0lBTFkseUJBQWMsaUJBSzFCO0FBQ0YsQ0FBQyxFQVZNLFVBQVUsS0FBVixVQUFVLFFBVWhCO0FBRUQsaUJBQVMsVUFBVSxDQUFDIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvU3VydmV5cy9ObHFzU3VydmV5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyIGZyb20gXCIuLi9BcGkvSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyXCI7XHJcbmltcG9ydCB7IElObHFzU3VydmV5IH0gZnJvbSBcIi4uL0FwaS9JTmxxc1N1cnZleVwiO1xyXG5pbXBvcnQgKiBhcyBJU3VydmV5IGZyb20gXCIuLi9BcGkvSVN1cnZleVwiO1xyXG5pbXBvcnQgKiBhcyBJU3VydmV5Q29tcG9uZW50IGZyb20gXCIuLi9BcGkvSVN1cnZleUNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDYW1wYWlnblN1cnZleUNvbnRlbnQsIENhbXBhaWduU3VydmV5VGVtcGxhdGUgfSBmcm9tIFwiLi4vQ2FtcGFpZ24vQ2FtcGFpZ25EZWZpbml0aW9uUHJvdmlkZXJcIjtcclxuaW1wb3J0ICogYXMgSVN1cnZleUluZm8gZnJvbSBcIi4uL0lTdXJ2ZXlJbmZvXCI7XHJcbmltcG9ydCAqIGFzIENvbW1lbnRDb21wb25lbnQgZnJvbSBcIi4uL1N1cnZleUNvbXBvbmVudHMvQ29tbWVudENvbXBvbmVudFwiO1xyXG5pbXBvcnQgKiBhcyBQcm9tcHRDb21wb25lbnQgZnJvbSBcIi4uL1N1cnZleUNvbXBvbmVudHMvUHJvbXB0Q29tcG9uZW50XCI7XHJcbmltcG9ydCAqIGFzIFJhdGluZ0NvbXBvbmVudCBmcm9tIFwiLi4vU3VydmV5Q29tcG9uZW50cy9SYXRpbmdDb21wb25lbnRcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uL1V0aWxzXCI7XHJcbmltcG9ydCB7IFN1cnZleSB9IGZyb20gXCIuL1N1cnZleVwiO1xyXG5pbXBvcnQgKiBhcyBTdXJ2ZXlEYXRhU291cmNlIGZyb20gXCIuL1N1cnZleURhdGFTb3VyY2VcIjtcclxuXHJcbmNvbnN0IHsgaXNOT1UsIG92ZXJyaWRlVmFsdWVzIH0gPSBVdGlscztcclxuXHJcbmNsYXNzIE5scXNTdXJ2ZXkgZXh0ZW5kcyBTdXJ2ZXkgaW1wbGVtZW50cyBJTmxxc1N1cnZleSB7XHJcblx0cHVibGljIHN0YXRpYyBtYWtlKGRhdGE6IE5scXNTdXJ2ZXkuTmxxc1N1cnZleURhdGEpOiBJTmxxc1N1cnZleSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE5scXNTdXJ2ZXkoZGF0YSk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIHN0YXRpYyBtYWtlTmxxcyhiYXNlRGF0YTogU3VydmV5RGF0YVNvdXJjZS5TdXJ2ZXlEYXRhU291cmNlRGF0YSwgc3A6IElGbG9vZGdhdGVTdHJpbmdQcm92aWRlcixcclxuXHRcdHN1cnZleU1vZGVsOiBDYW1wYWlnblN1cnZleVRlbXBsYXRlKTogSU5scXNTdXJ2ZXkge1xyXG5cclxuXHRcdGlmIChpc05PVShiYXNlRGF0YSkgfHwgaXNOT1Uoc3ApIHx8IGlzTk9VKHN1cnZleU1vZGVsKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCByYXRpbmdWYWx1ZXNBc2NlbmRpbmc6IHN0cmluZ1tdID0gW107XHJcblx0XHRjb25zdCBjb250ZW50OiBDYW1wYWlnblN1cnZleUNvbnRlbnQgPSBzdXJ2ZXlNb2RlbC5jb250ZW50O1xyXG5cclxuXHRcdGlmIChpc05PVShjb250ZW50KSB8fCBpc05PVShjb250ZW50LmNvbW1lbnQpXHJcblx0XHRcdHx8IGlzTk9VKGNvbnRlbnQucHJvbXB0KSB8fCBpc05PVShjb250ZW50LnJhdGluZykpIHtcclxuXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGRhdGEgPSBuZXcgTmxxc1N1cnZleS5ObHFzU3VydmV5RGF0YSgpO1xyXG5cdFx0ZGF0YS5iYXNlRGF0YSA9IGJhc2VEYXRhO1xyXG5cdFx0ZGF0YS5wcm9tcHREYXRhID0gbmV3IFByb21wdENvbXBvbmVudC5Qcm9tcHRDb21wb25lbnREYXRhKCk7XHJcblx0XHRkYXRhLnJhdGluZ0RhdGEgPSBuZXcgUmF0aW5nQ29tcG9uZW50LlJhdGluZ0NvbXBvbmVudERhdGEoKTtcclxuXHRcdGRhdGEuY29tbWVudERhdGEgPSBuZXcgQ29tbWVudENvbXBvbmVudC5Db21tZW50Q29tcG9uZW50RGF0YSgpO1xyXG5cclxuXHRcdGRhdGEucHJvbXB0RGF0YS50aXRsZSA9IHNwLmdldEN1c3RvbVN0cmluZyhjb250ZW50LnByb21wdC50aXRsZSk7XHJcblx0XHRkYXRhLnByb21wdERhdGEucXVlc3Rpb24gPSBzcC5nZXRDdXN0b21TdHJpbmcoY29udGVudC5wcm9tcHQucXVlc3Rpb24pO1xyXG5cdFx0ZGF0YS5wcm9tcHREYXRhLnllc0J1dHRvbkxhYmVsID0gc3AuZ2V0Q3VzdG9tU3RyaW5nKGNvbnRlbnQucHJvbXB0Lnllc0xhYmVsKTtcclxuXHRcdGRhdGEucHJvbXB0RGF0YS5ub0J1dHRvbkxhYmVsID0gc3AuZ2V0Q3VzdG9tU3RyaW5nKGNvbnRlbnQucHJvbXB0Lm5vTGFiZWwpO1xyXG5cdFx0ZGF0YS5yYXRpbmdEYXRhLnF1ZXN0aW9uID0gc3AuZ2V0Q3VzdG9tU3RyaW5nKGNvbnRlbnQucmF0aW5nLnF1ZXN0aW9uKTtcclxuXHRcdGRhdGEucmF0aW5nRGF0YS5pc1plcm9CYXNlZCA9IGNvbnRlbnQucmF0aW5nLmlzWmVyb0Jhc2VkO1xyXG5cdFx0ZGF0YS5jb21tZW50RGF0YS5xdWVzdGlvbiA9IHNwLmdldEN1c3RvbVN0cmluZyhjb250ZW50LmNvbW1lbnQucXVlc3Rpb24pO1xyXG5cclxuXHRcdGZvciAoY29uc3QgdmFsdWUgb2YgY29udGVudC5yYXRpbmcucmF0aW5nVmFsdWVzQXNjZW5kaW5nKSB7XHJcblx0XHRcdGNvbnN0IGN1c3RvbVN0cmluZzogc3RyaW5nID0gc3AuZ2V0Q3VzdG9tU3RyaW5nKHZhbHVlKTtcclxuXHJcblx0XHRcdGlmIChpc05PVShjdXN0b21TdHJpbmcpKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJhdGluZ1ZhbHVlc0FzY2VuZGluZy5wdXNoKGN1c3RvbVN0cmluZyk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGF0YS5yYXRpbmdEYXRhLnJhdGluZ1ZhbHVlc0FzY2VuZGluZyA9IHJhdGluZ1ZhbHVlc0FzY2VuZGluZztcclxuXHJcblx0XHRpZiAoaXNOT1UoZGF0YS5yYXRpbmdEYXRhLnF1ZXN0aW9uKVxyXG5cdFx0XHR8fCBpc05PVShkYXRhLmNvbW1lbnREYXRhLnF1ZXN0aW9uKVxyXG5cdFx0XHR8fCBpc05PVShkYXRhLnByb21wdERhdGEudGl0bGUpXHJcblx0XHRcdHx8IGlzTk9VKGRhdGEucHJvbXB0RGF0YS5xdWVzdGlvbilcclxuXHRcdFx0fHwgaXNOT1UoZGF0YS5wcm9tcHREYXRhLnllc0J1dHRvbkxhYmVsKVxyXG5cdFx0XHR8fCBpc05PVShkYXRhLnByb21wdERhdGEubm9CdXR0b25MYWJlbClcclxuXHRcdFx0fHwgaXNOT1UoZGF0YS5yYXRpbmdEYXRhLnJhdGluZ1ZhbHVlc0FzY2VuZGluZykpIHtcclxuXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLm1ha2UoZGF0YSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHN1cnZleUluZm86IFN1cnZleURhdGFTb3VyY2U7XHJcblx0cHJpdmF0ZSBxdWVzdGlvbjogQ29tbWVudENvbXBvbmVudDtcclxuXHRwcml2YXRlIHByb21wdDogUHJvbXB0Q29tcG9uZW50O1xyXG5cdHByaXZhdGUgcmF0aW5nOiBSYXRpbmdDb21wb25lbnQ7XHJcblxyXG5cdHByaXZhdGUgY29uc3RydWN0b3IoZGF0YTogTmxxc1N1cnZleS5ObHFzU3VydmV5RGF0YSkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdGlmIChpc05PVShkYXRhKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zdXJ2ZXlJbmZvID0gbmV3IFN1cnZleURhdGFTb3VyY2UoZGF0YS5iYXNlRGF0YSk7XHJcblx0XHR0aGlzLnByb21wdCA9IG5ldyBQcm9tcHRDb21wb25lbnQoZGF0YS5wcm9tcHREYXRhKTtcclxuXHRcdHRoaXMucXVlc3Rpb24gPSBuZXcgQ29tbWVudENvbXBvbmVudChkYXRhLmNvbW1lbnREYXRhKTtcclxuXHRcdHRoaXMucmF0aW5nID0gbmV3IFJhdGluZ0NvbXBvbmVudChkYXRhLnJhdGluZ0RhdGEpO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldFR5cGUoKTogSVN1cnZleS5UeXBlIHtcclxuXHRcdHJldHVybiBJU3VydmV5LlR5cGUuTmxxcztcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRTdXJ2ZXlJbmZvKCk6IElTdXJ2ZXlJbmZvIHtcclxuXHRcdHJldHVybiB0aGlzLnN1cnZleUluZm87XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0Q29tbWVudENvbXBvbmVudCgpOiBDb21tZW50Q29tcG9uZW50IHtcclxuXHRcdHJldHVybiB0aGlzLnF1ZXN0aW9uO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldFByb21wdENvbXBvbmVudCgpOiBQcm9tcHRDb21wb25lbnQge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvbXB0O1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldFJhdGluZ0NvbXBvbmVudCgpOiBSYXRpbmdDb21wb25lbnQge1xyXG5cdFx0cmV0dXJuIHRoaXMucmF0aW5nO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldENvbXBvbmVudChjb21wb25lbnRUeXBlOiBJU3VydmV5Q29tcG9uZW50LlR5cGUpOiBJU3VydmV5Q29tcG9uZW50IHtcclxuXHRcdHN3aXRjaCAoY29tcG9uZW50VHlwZSkge1xyXG5cdFx0XHRjYXNlIElTdXJ2ZXlDb21wb25lbnQuVHlwZS5Db21tZW50OlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmdldENvbW1lbnRDb21wb25lbnQoKTtcclxuXHRcdFx0Y2FzZSBJU3VydmV5Q29tcG9uZW50LlR5cGUuUHJvbXB0OlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmdldFByb21wdENvbXBvbmVudCgpO1xyXG5cdFx0XHRjYXNlIElTdXJ2ZXlDb21wb25lbnQuVHlwZS5SYXRpbmc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0UmF0aW5nQ29tcG9uZW50KCk7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0RG9tRWxlbWVudHMoZG9jOiBEb2N1bWVudCk6IEVsZW1lbnRbXSB7XHJcblx0XHRpZiAoaXNOT1UoZG9jKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJEb2N1bWVudCBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGVsZW1lbnQ6IEVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudChJU3VydmV5LkRPTV9OTFFTX1RBR05BTUUpO1xyXG5cclxuXHRcdHRoaXMuZ2V0U3VydmV5SW5mbygpLmdldERvbUVsZW1lbnRzKGRvYykuZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuXHRcdFx0aWYgKCFpc05PVShjaGlsZCkpIHtcclxuXHRcdFx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5nZXRDb21tZW50Q29tcG9uZW50KCkuZ2V0RG9tRWxlbWVudHMoZG9jKS5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG5cdFx0XHRpZiAoIWlzTk9VKGNoaWxkKSkge1xyXG5cdFx0XHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmdldFJhdGluZ0NvbXBvbmVudCgpLmdldERvbUVsZW1lbnRzKGRvYykuZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuXHRcdFx0aWYgKCFpc05PVShjaGlsZCkpIHtcclxuXHRcdFx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIFtlbGVtZW50XTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRKc29uRWxlbWVudHMoKTogb2JqZWN0IHtcclxuXHRcdGxldCByZXN1bHQ6IG9iamVjdCA9IHt9O1xyXG5cclxuXHRcdHJlc3VsdCA9IG92ZXJyaWRlVmFsdWVzKHRoaXMuZ2V0U3VydmV5SW5mbygpLmdldEpzb25FbGVtZW50cygpLCByZXN1bHQpO1xyXG5cdFx0cmVzdWx0ID0gb3ZlcnJpZGVWYWx1ZXModGhpcy5nZXRDb21tZW50Q29tcG9uZW50KCkuZ2V0SnNvbkVsZW1lbnRzKCksIHJlc3VsdCk7XHJcblx0XHRyZXN1bHQgPSBvdmVycmlkZVZhbHVlcyh0aGlzLmdldFJhdGluZ0NvbXBvbmVudCgpLmdldEpzb25FbGVtZW50cygpLCByZXN1bHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcblxyXG5tb2R1bGUgTmxxc1N1cnZleSB7XHJcblx0LyoqXHJcblx0ICogRGF0YSByZXF1aXJlZCBmb3IgYSBObHFzIFN1cnZleVxyXG5cdCAqL1xyXG5cdGV4cG9ydCBjbGFzcyBObHFzU3VydmV5RGF0YSB7XHJcblx0XHRwdWJsaWMgYmFzZURhdGE6IFN1cnZleURhdGFTb3VyY2UuU3VydmV5RGF0YVNvdXJjZURhdGE7XHJcblx0XHRwdWJsaWMgY29tbWVudERhdGE6IENvbW1lbnRDb21wb25lbnQuQ29tbWVudENvbXBvbmVudERhdGE7XHJcblx0XHRwdWJsaWMgcHJvbXB0RGF0YTogUHJvbXB0Q29tcG9uZW50LlByb21wdENvbXBvbmVudERhdGE7XHJcblx0XHRwdWJsaWMgcmF0aW5nRGF0YTogUmF0aW5nQ29tcG9uZW50LlJhdGluZ0NvbXBvbmVudERhdGE7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgPSBObHFzU3VydmV5O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Surveys/NlqsSurvey.js\n')},"../FloodgateCore/dist/src/Surveys/NpsSurvey.js":function(){"use strict";eval('\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar ISurvey = __webpack_require__(/*! ../Api/ISurvey */ "../FloodgateCore/dist/src/Api/ISurvey.js");\nvar ISurveyComponent = __webpack_require__(/*! ../Api/ISurveyComponent */ "../FloodgateCore/dist/src/Api/ISurveyComponent.js");\nvar CommentComponent = __webpack_require__(/*! ../SurveyComponents/CommentComponent */ "../FloodgateCore/dist/src/SurveyComponents/CommentComponent.js");\nvar CVSurveyComponent = __webpack_require__(/*! ../SurveyComponents/CVSurveyComponent */ "../FloodgateCore/dist/src/SurveyComponents/CVSurveyComponent.js");\nvar PromptComponent = __webpack_require__(/*! ../SurveyComponents/PromptComponent */ "../FloodgateCore/dist/src/SurveyComponents/PromptComponent.js");\nvar RatingComponent = __webpack_require__(/*! ../SurveyComponents/RatingComponent */ "../FloodgateCore/dist/src/SurveyComponents/RatingComponent.js");\nvar Utils = __webpack_require__(/*! ../Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar Survey_1 = __webpack_require__(/*! ./Survey */ "../FloodgateCore/dist/src/Surveys/Survey.js");\nvar SurveyDataSource = __webpack_require__(/*! ./SurveyDataSource */ "../FloodgateCore/dist/src/Surveys/SurveyDataSource.js");\nvar isNOU = Utils.isNOU, overrideValues = Utils.overrideValues;\nvar NpsSurvey = /** @class */ (function (_super) {\n    __extends(NpsSurvey, _super);\n    function NpsSurvey(data) {\n        var _this = _super.call(this) || this;\n        if (!data) {\n            throw new Error("data must not be null");\n        }\n        _this.surveyInfo = new SurveyDataSource(data.baseData);\n        _this.prompt = new PromptComponent(data.promptData);\n        _this.question = new CommentComponent(data.commentData);\n        _this.rating = new RatingComponent(data.ratingData);\n        _this.cvSurvey = data.cvSurveyData ? (new CVSurveyComponent(data.cvSurveyData)) : null;\n        return _this;\n    }\n    NpsSurvey.make = function (data) {\n        try {\n            return new NpsSurvey(data);\n        }\n        catch (e) {\n            return null;\n        }\n    };\n    NpsSurvey.makeCustom = function (baseData, sp, surveyModel) {\n        if (isNOU(baseData) || isNOU(sp) || isNOU(surveyModel)) {\n            return null;\n        }\n        var ratingValuesAscending = [];\n        var content = surveyModel.content;\n        if (isNOU(content) || isNOU(content.comment)\n            || isNOU(content.prompt) || isNOU(content.rating)) {\n            return null;\n        }\n        var data = new NpsSurvey.NpsSurveyData();\n        data.baseData = baseData;\n        data.promptData = new PromptComponent.PromptComponentData();\n        data.ratingData = new RatingComponent.RatingComponentData();\n        data.commentData = new CommentComponent.CommentComponentData();\n        data.promptData.title = sp.getCustomString(content.prompt.title);\n        data.promptData.question = sp.getCustomString(content.prompt.question);\n        data.promptData.yesButtonLabel = sp.getCustomString(content.prompt.yesLabel);\n        data.promptData.noButtonLabel = sp.getCustomString(content.prompt.noLabel);\n        data.ratingData.question = sp.getCustomString(content.rating.question);\n        data.ratingData.isZeroBased = content.rating.isZeroBased;\n        data.commentData.question = sp.getCustomString(content.comment.question);\n        for (var _i = 0, _a = content.rating.ratingValuesAscending; _i < _a.length; _i++) {\n            var value = _a[_i];\n            var customString = sp.getCustomString(value);\n            if (isNOU(customString)) {\n                return null;\n            }\n            ratingValuesAscending.push(customString);\n        }\n        data.ratingData.ratingValuesAscending = ratingValuesAscending;\n        if (isNOU(data.ratingData.question)\n            || isNOU(data.commentData.question)\n            || isNOU(data.promptData.title)\n            || isNOU(data.promptData.question)\n            || isNOU(data.promptData.yesButtonLabel)\n            || isNOU(data.promptData.noButtonLabel)\n            || isNOU(data.ratingData.ratingValuesAscending)) {\n            return null;\n        }\n        // cvsurvey data is not required on all surveys.\n        if (content.cvSurvey) {\n            data.cvSurveyData = new CVSurveyComponent.CVSurveyComponentData();\n            data.cvSurveyData.customerVoiceFormId = content.cvSurvey.customerVoiceFormId;\n            if (isNOU(data.cvSurveyData.customerVoiceFormId)) {\n                return null;\n            }\n        }\n        return this.make(data);\n    };\n    NpsSurvey.make5Point = function (baseData, sp) {\n        if (!baseData || !sp) {\n            return null;\n        }\n        var data = new NpsSurvey.NpsSurveyData();\n        data.baseData = baseData;\n        data.ratingData = new RatingComponent.RatingComponentData();\n        data.ratingData.isZeroBased = false;\n        data.commentData = new CommentComponent.CommentComponentData();\n        data.promptData = new PromptComponent.PromptComponentData();\n        data.ratingData.question = sp.loadStringResource(4 /* NpsRatingQuestion */);\n        data.commentData.question = sp.loadStringResource(21 /* NpsCommentQuestion */);\n        data.promptData.title = sp.loadStringResource(0 /* NpsPromptTitle */);\n        data.promptData.question = sp.loadStringResource(1 /* NpsPromptQuestion */);\n        data.promptData.yesButtonLabel = sp.loadStringResource(2 /* NpsPromptYesLabel */);\n        data.promptData.noButtonLabel = sp.loadStringResource(3 /* NpsPromptNotNowLabel */);\n        var ratingValuesAscending = new Array(5);\n        ratingValuesAscending[0] = sp.loadStringResource(16 /* Nps5RatingValue1 */);\n        ratingValuesAscending[1] = sp.loadStringResource(17 /* Nps5RatingValue2 */);\n        ratingValuesAscending[2] = sp.loadStringResource(18 /* Nps5RatingValue3 */);\n        ratingValuesAscending[3] = sp.loadStringResource(19 /* Nps5RatingValue4 */);\n        ratingValuesAscending[4] = sp.loadStringResource(20 /* Nps5RatingValue5 */);\n        if (!data.ratingData.question\n            || !data.commentData.question\n            || !data.promptData.title\n            || !data.promptData.question\n            || !data.promptData.yesButtonLabel\n            || !data.promptData.noButtonLabel\n            || !ratingValuesAscending[0]\n            || !ratingValuesAscending[1]\n            || !ratingValuesAscending[2]\n            || !ratingValuesAscending[3]\n            || !ratingValuesAscending[4]) {\n            return null;\n        }\n        data.ratingData.ratingValuesAscending = ratingValuesAscending;\n        return this.make(data);\n    };\n    NpsSurvey.make11Point = function (baseData, sp) {\n        if (!baseData || !sp) {\n            return null;\n        }\n        var data = new NpsSurvey.NpsSurveyData();\n        data.baseData = baseData;\n        data.ratingData = new RatingComponent.RatingComponentData();\n        data.ratingData.isZeroBased = true;\n        data.commentData = new CommentComponent.CommentComponentData();\n        data.promptData = new PromptComponent.PromptComponentData();\n        data.ratingData.question = sp.loadStringResource(4 /* NpsRatingQuestion */);\n        data.commentData.question = sp.loadStringResource(21 /* NpsCommentQuestion */);\n        data.promptData.title = sp.loadStringResource(0 /* NpsPromptTitle */);\n        data.promptData.question = sp.loadStringResource(1 /* NpsPromptQuestion */);\n        data.promptData.yesButtonLabel = sp.loadStringResource(2 /* NpsPromptYesLabel */);\n        data.promptData.noButtonLabel = sp.loadStringResource(3 /* NpsPromptNotNowLabel */);\n        var ratingValuesAscending = new Array(11);\n        ratingValuesAscending[0] = sp.loadStringResource(5 /* Nps11RatingValue0 */);\n        ratingValuesAscending[1] = sp.loadStringResource(6 /* Nps11RatingValue1 */);\n        ratingValuesAscending[2] = sp.loadStringResource(7 /* Nps11RatingValue2 */);\n        ratingValuesAscending[3] = sp.loadStringResource(8 /* Nps11RatingValue3 */);\n        ratingValuesAscending[4] = sp.loadStringResource(9 /* Nps11RatingValue4 */);\n        ratingValuesAscending[5] = sp.loadStringResource(10 /* Nps11RatingValue5 */);\n        ratingValuesAscending[6] = sp.loadStringResource(11 /* Nps11RatingValue6 */);\n        ratingValuesAscending[7] = sp.loadStringResource(12 /* Nps11RatingValue7 */);\n        ratingValuesAscending[8] = sp.loadStringResource(13 /* Nps11RatingValue8 */);\n        ratingValuesAscending[9] = sp.loadStringResource(14 /* Nps11RatingValue9 */);\n        ratingValuesAscending[10] = sp.loadStringResource(15 /* Nps11RatingValue10 */);\n        if (!data.ratingData.question\n            || !data.commentData.question\n            || !data.promptData.title\n            || !data.promptData.question\n            || !data.promptData.yesButtonLabel\n            || !data.promptData.noButtonLabel\n            || !ratingValuesAscending[0]\n            || !ratingValuesAscending[1]\n            || !ratingValuesAscending[2]\n            || !ratingValuesAscending[3]\n            || !ratingValuesAscending[4]\n            || !ratingValuesAscending[5]\n            || !ratingValuesAscending[6]\n            || !ratingValuesAscending[7]\n            || !ratingValuesAscending[8]\n            || !ratingValuesAscending[9]\n            || !ratingValuesAscending[10]) {\n            return null;\n        }\n        data.ratingData.ratingValuesAscending = ratingValuesAscending;\n        return this.make(data);\n    };\n    // @Override\n    NpsSurvey.prototype.getType = function () {\n        return ISurvey.Type.Nps;\n    };\n    // @Override\n    NpsSurvey.prototype.getSurveyInfo = function () {\n        return this.surveyInfo;\n    };\n    // @Override\n    NpsSurvey.prototype.getCommentComponent = function () {\n        return this.question;\n    };\n    // @Override\n    NpsSurvey.prototype.getPromptComponent = function () {\n        return this.prompt;\n    };\n    // @Override\n    NpsSurvey.prototype.getRatingComponent = function () {\n        return this.rating;\n    };\n    // @Override\n    NpsSurvey.prototype.getCVSurveyComponent = function () {\n        return this.cvSurvey;\n    };\n    // @Override\n    NpsSurvey.prototype.getComponent = function (componentType) {\n        switch (componentType) {\n            case "Comment" /* Comment */:\n                return this.getCommentComponent();\n            case "Prompt" /* Prompt */:\n                return this.getPromptComponent();\n            case "Rating" /* Rating */:\n                return this.getRatingComponent();\n            case "CVSurvey" /* CVSurvey */:\n                return this.getCVSurveyComponent();\n            default:\n                return null;\n        }\n    };\n    // @Override\n    NpsSurvey.prototype.getDomElements = function (doc) {\n        if (!doc) {\n            throw new Error("Document must not be null");\n        }\n        var element = doc.createElement(ISurvey.DOM_NPS_TAGNAME);\n        this.getSurveyInfo().getDomElements(doc).forEach(function (child) {\n            if (child) {\n                element.appendChild(child);\n            }\n        });\n        this.getCommentComponent().getDomElements(doc).forEach(function (child) {\n            if (child) {\n                element.appendChild(child);\n            }\n        });\n        this.getRatingComponent().getDomElements(doc).forEach(function (child) {\n            if (child) {\n                element.appendChild(child);\n            }\n        });\n        return [element];\n    };\n    // @Override\n    NpsSurvey.prototype.getJsonElements = function () {\n        var _a;\n        var result = {};\n        result = overrideValues(this.getSurveyInfo().getJsonElements(), result);\n        result = overrideValues(this.getCommentComponent().getJsonElements(), result);\n        result = overrideValues(this.getRatingComponent().getJsonElements(), result);\n        result[ISurveyComponent.JSON_APPLICATION_KEYNAME] = {};\n        result[ISurveyComponent.JSON_APPLICATION_KEYNAME][ISurveyComponent.JSON_EXTENDEDMANIFESTDATA_KEYNAME] =\n            JSON.stringify((_a = {}, _a[ISurveyComponent.JSON_SURVEYSTRINGS_KEYNAME] = this.makeSurveyStrings(), _a));\n        return result;\n    };\n    // Makes the string to send to Manifest respecting the components present in the survey\n    NpsSurvey.prototype.makeSurveyStrings = function () {\n        var actualStrings = {};\n        if (this.prompt) {\n            actualStrings[ISurveyComponent.JSON_PROMPT_KEYNAME] = this.prompt.getComponentJson();\n        }\n        if (this.rating) {\n            actualStrings[ISurveyComponent.JSON_RATING_KEYNAME] = [this.rating.getComponentJson()];\n        }\n        if (this.question) {\n            actualStrings[ISurveyComponent.JSON_COMMENT_KEYNAME] = [this.question.getComponentJson()];\n        }\n        return JSON.stringify(actualStrings);\n    };\n    return NpsSurvey;\n}(Survey_1.Survey));\n(function (NpsSurvey) {\n    /**\n     * Data required for a Nps Survey\n     */\n    var NpsSurveyData = /** @class */ (function () {\n        function NpsSurveyData() {\n        }\n        return NpsSurveyData;\n    }());\n    NpsSurvey.NpsSurveyData = NpsSurveyData;\n})(NpsSurvey || (NpsSurvey = {}));\nmodule.exports = NpsSurvey;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleXMvTnBzU3VydmV5LnRzPzQ5YWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFFQSxvR0FBMEM7QUFDMUMsK0hBQTREO0FBRzVELHlKQUF5RTtBQUN6RSw0SkFBMkU7QUFDM0Usc0pBQXVFO0FBQ3ZFLHNKQUF1RTtBQUN2RSxzRkFBa0M7QUFDbEMsa0dBQWtDO0FBQ2xDLDhIQUF1RDtBQUUvQyxTQUFLLEdBQXFCLEtBQUssTUFBMUIsRUFBRSxjQUFjLEdBQUssS0FBSyxlQUFWLENBQVc7QUFFeEM7SUFBd0IsNkJBQU07SUFvTDdCLG1CQUFvQixJQUE2QjtRQUFqRCxZQUNDLGlCQUFPLFNBVVA7UUFUQSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsS0FBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxLQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxLQUFJLENBQUMsUUFBUSxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELEtBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELEtBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7O0lBQ3ZGLENBQUM7SUE5TGEsY0FBSSxHQUFsQixVQUFtQixJQUE2QjtRQUMvQyxJQUFJO1lBQ0gsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztT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QkFBZ0IsQ0FBQyxpQ0FBaUMsQ0FBQztZQUNwRyxJQUFJLENBQUMsU0FBUyxXQUFFLEdBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLElBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQUUsQ0FBQztRQUUzRixPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFFRCx1RkFBdUY7SUFDL0UscUNBQWlCLEdBQXpCO1FBQ0MsSUFBTSxhQUFhLEdBQVcsRUFBRSxDQUFDO1FBRWpDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixhQUFhLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDckY7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsYUFBYSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztTQUN2RjtRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixhQUFhLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1NBQzFGO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRixnQkFBQztBQUFELENBQUMsQ0E3U3VCLGVBQU0sR0E2UzdCO0FBRUQsV0FBTyxTQUFTO0lBQ2Y7O09BRUc7SUFDSDtRQUFBO1FBTUEsQ0FBQztRQUFELG9CQUFDO0lBQUQsQ0FBQztJQU5ZLHVCQUFhLGdCQU16QjtBQUNGLENBQUMsRUFYTSxTQUFTLEtBQVQsU0FBUyxRQVdmO0FBRUQsaUJBQVMsU0FBUyxDQUFDIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvU3VydmV5cy9OcHNTdXJ2ZXkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIgZnJvbSBcIi4uL0FwaS9JRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXJcIjtcclxuaW1wb3J0IHsgSU5wc1N1cnZleSB9IGZyb20gXCIuLi9BcGkvSU5wc1N1cnZleVwiO1xyXG5pbXBvcnQgKiBhcyBJU3VydmV5IGZyb20gXCIuLi9BcGkvSVN1cnZleVwiO1xyXG5pbXBvcnQgKiBhcyBJU3VydmV5Q29tcG9uZW50IGZyb20gXCIuLi9BcGkvSVN1cnZleUNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDYW1wYWlnblN1cnZleUNvbnRlbnQsIENhbXBhaWduU3VydmV5VGVtcGxhdGUgfSBmcm9tIFwiLi4vQ2FtcGFpZ24vQ2FtcGFpZ25EZWZpbml0aW9uUHJvdmlkZXJcIjtcclxuaW1wb3J0ICogYXMgSVN1cnZleUluZm8gZnJvbSBcIi4uL0lTdXJ2ZXlJbmZvXCI7XHJcbmltcG9ydCAqIGFzIENvbW1lbnRDb21wb25lbnQgZnJvbSBcIi4uL1N1cnZleUNvbXBvbmVudHMvQ29tbWVudENvbXBvbmVudFwiO1xyXG5pbXBvcnQgKiBhcyBDVlN1cnZleUNvbXBvbmVudCBmcm9tIFwiLi4vU3VydmV5Q29tcG9uZW50cy9DVlN1cnZleUNvbXBvbmVudFwiO1xyXG5pbXBvcnQgKiBhcyBQcm9tcHRDb21wb25lbnQgZnJvbSBcIi4uL1N1cnZleUNvbXBvbmVudHMvUHJvbXB0Q29tcG9uZW50XCI7XHJcbmltcG9ydCAqIGFzIFJhdGluZ0NvbXBvbmVudCBmcm9tIFwiLi4vU3VydmV5Q29tcG9uZW50cy9SYXRpbmdDb21wb25lbnRcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uL1V0aWxzXCI7XHJcbmltcG9ydCB7IFN1cnZleSB9IGZyb20gXCIuL1N1cnZleVwiO1xyXG5pbXBvcnQgKiBhcyBTdXJ2ZXlEYXRhU291cmNlIGZyb20gXCIuL1N1cnZleURhdGFTb3VyY2VcIjtcclxuXHJcbmNvbnN0IHsgaXNOT1UsIG92ZXJyaWRlVmFsdWVzIH0gPSBVdGlscztcclxuXHJcbmNsYXNzIE5wc1N1cnZleSBleHRlbmRzIFN1cnZleSBpbXBsZW1lbnRzIElOcHNTdXJ2ZXkge1xyXG5cdHB1YmxpYyBzdGF0aWMgbWFrZShkYXRhOiBOcHNTdXJ2ZXkuTnBzU3VydmV5RGF0YSk6IElOcHNTdXJ2ZXkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0cmV0dXJuIG5ldyBOcHNTdXJ2ZXkoZGF0YSk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIHN0YXRpYyBtYWtlQ3VzdG9tKGJhc2VEYXRhOiBTdXJ2ZXlEYXRhU291cmNlLlN1cnZleURhdGFTb3VyY2VEYXRhLCBzcDogSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLFxyXG5cdFx0c3VydmV5TW9kZWw6IENhbXBhaWduU3VydmV5VGVtcGxhdGUpOiBJTnBzU3VydmV5IHtcclxuXHJcblx0XHRpZiAoaXNOT1UoYmFzZURhdGEpIHx8IGlzTk9VKHNwKSB8fCBpc05PVShzdXJ2ZXlNb2RlbCkpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcmF0aW5nVmFsdWVzQXNjZW5kaW5nOiBzdHJpbmdbXSA9IFtdO1xyXG5cdFx0Y29uc3QgY29udGVudDogQ2FtcGFpZ25TdXJ2ZXlDb250ZW50ID0gc3VydmV5TW9kZWwuY29udGVudDtcclxuXHJcblx0XHRpZiAoaXNOT1UoY29udGVudCkgfHwgaXNOT1UoY29udGVudC5jb21tZW50KVxyXG5cdFx0XHR8fCBpc05PVShjb250ZW50LnByb21wdCkgfHwgaXNOT1UoY29udGVudC5yYXRpbmcpKSB7XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBkYXRhID0gbmV3IE5wc1N1cnZleS5OcHNTdXJ2ZXlEYXRhKCk7XHJcblx0XHRkYXRhLmJhc2VEYXRhID0gYmFzZURhdGE7XHJcblx0XHRkYXRhLnByb21wdERhdGEgPSBuZXcgUHJvbXB0Q29tcG9uZW50LlByb21wdENvbXBvbmVudERhdGEoKTtcclxuXHRcdGRhdGEucmF0aW5nRGF0YSA9IG5ldyBSYXRpbmdDb21wb25lbnQuUmF0aW5nQ29tcG9uZW50RGF0YSgpO1xyXG5cdFx0ZGF0YS5jb21tZW50RGF0YSA9IG5ldyBDb21tZW50Q29tcG9uZW50LkNvbW1lbnRDb21wb25lbnREYXRhKCk7XHJcblxyXG5cdFx0ZGF0YS5wcm9tcHREYXRhLnRpdGxlID0gc3AuZ2V0Q3VzdG9tU3RyaW5nKGNvbnRlbnQucHJvbXB0LnRpdGxlKTtcclxuXHRcdGRhdGEucHJvbXB0RGF0YS5xdWVzdGlvbiA9IHNwLmdldEN1c3RvbVN0cmluZyhjb250ZW50LnByb21wdC5xdWVzdGlvbik7XHJcblx0XHRkYXRhLnByb21wdERhdGEueWVzQnV0dG9uTGFiZWwgPSBzcC5nZXRDdXN0b21TdHJpbmcoY29udGVudC5wcm9tcHQueWVzTGFiZWwpO1xyXG5cdFx0ZGF0YS5wcm9tcHREYXRhLm5vQnV0dG9uTGFiZWwgPSBzcC5nZXRDdXN0b21TdHJpbmcoY29udGVudC5wcm9tcHQubm9MYWJlbCk7XHJcblx0XHRkYXRhLnJhdGluZ0RhdGEucXVlc3Rpb24gPSBzcC5nZXRDdXN0b21TdHJpbmcoY29udGVudC5yYXRpbmcucXVlc3Rpb24pO1xyXG5cdFx0ZGF0YS5yYXRpbmdEYXRhLmlzWmVyb0Jhc2VkID0gY29udGVudC5yYXRpbmcuaXNaZXJvQmFzZWQ7XHJcblx0XHRkYXRhLmNvbW1lbnREYXRhLnF1ZXN0aW9uID0gc3AuZ2V0Q3VzdG9tU3RyaW5nKGNvbnRlbnQuY29tbWVudC5xdWVzdGlvbik7XHJcblxyXG5cdFx0Zm9yIChjb25zdCB2YWx1ZSBvZiBjb250ZW50LnJhdGluZy5yYXRpbmdWYWx1ZXNBc2NlbmRpbmcpIHtcclxuXHRcdFx0Y29uc3QgY3VzdG9tU3RyaW5nOiBzdHJpbmcgPSBzcC5nZXRDdXN0b21TdHJpbmcodmFsdWUpO1xyXG5cclxuXHRcdFx0aWYgKGlzTk9VKGN1c3RvbVN0cmluZykpIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmF0aW5nVmFsdWVzQXNjZW5kaW5nLnB1c2goY3VzdG9tU3RyaW5nKTtcclxuXHRcdH1cclxuXHJcblx0XHRkYXRhLnJhdGluZ0RhdGEucmF0aW5nVmFsdWVzQXNjZW5kaW5nID0gcmF0aW5nVmFsdWVzQXNjZW5kaW5nO1xyXG5cclxuXHRcdGlmIChpc05PVShkYXRhLnJhdGluZ0RhdGEucXVlc3Rpb24pXHJcblx0XHRcdHx8IGlzTk9VKGRhdGEuY29tbWVudERhdGEucXVlc3Rpb24pXHJcblx0XHRcdHx8IGlzTk9VKGRhdGEucHJvbXB0RGF0YS50aXRsZSlcclxuXHRcdFx0fHwgaXNOT1UoZGF0YS5wcm9tcHREYXRhLnF1ZXN0aW9uKVxyXG5cdFx0XHR8fCBpc05PVShkYXRhLnByb21wdERhdGEueWVzQnV0dG9uTGFiZWwpXHJcblx0XHRcdHx8IGlzTk9VKGRhdGEucHJvbXB0RGF0YS5ub0J1dHRvbkxhYmVsKVxyXG5cdFx0XHR8fCBpc05PVShkYXRhLnJhdGluZ0RhdGEucmF0aW5nVmFsdWVzQXNjZW5kaW5nKSkge1xyXG5cclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY3ZzdXJ2ZXkgZGF0YSBpcyBub3QgcmVxdWlyZWQgb24gYWxsIHN1cnZleXMuXHJcblx0XHRpZiAoY29udGVudC5jdlN1cnZleSkge1xyXG5cdFx0XHRkYXRhLmN2U3VydmV5RGF0YSA9IG5ldyBDVlN1cnZleUNvbXBvbmVudC5DVlN1cnZleUNvbXBvbmVudERhdGEoKTtcclxuXHRcdFx0ZGF0YS5jdlN1cnZleURhdGEuY3VzdG9tZXJWb2ljZUZvcm1JZCA9ICBjb250ZW50LmN2U3VydmV5LmN1c3RvbWVyVm9pY2VGb3JtSWQ7XHJcblxyXG5cdFx0XHRpZiAoaXNOT1UoZGF0YS5jdlN1cnZleURhdGEuY3VzdG9tZXJWb2ljZUZvcm1JZCkpIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLm1ha2UoZGF0YSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc3RhdGljIG1ha2U1UG9pbnQoYmFzZURhdGE6IFN1cnZleURhdGFTb3VyY2UuU3VydmV5RGF0YVNvdXJjZURhdGEsIHNwOiBJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIpOiBJTnBzU3VydmV5IHtcclxuXHRcdGlmICghYmFzZURhdGEgfHwgIXNwKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGRhdGEgPSBuZXcgTnBzU3VydmV5Lk5wc1N1cnZleURhdGEoKTtcclxuXHRcdGRhdGEuYmFzZURhdGEgPSBiYXNlRGF0YTtcclxuXHRcdGRhdGEucmF0aW5nRGF0YSA9IG5ldyBSYXRpbmdDb21wb25lbnQuUmF0aW5nQ29tcG9uZW50RGF0YSgpO1xyXG5cdFx0ZGF0YS5yYXRpbmdEYXRhLmlzWmVyb0Jhc2VkID0gZmFsc2U7XHJcblx0XHRkYXRhLmNvbW1lbnREYXRhID0gbmV3IENvbW1lbnRDb21wb25lbnQuQ29tbWVudENvbXBvbmVudERhdGEoKTtcclxuXHRcdGRhdGEucHJvbXB0RGF0YSA9IG5ldyBQcm9tcHRDb21wb25lbnQuUHJvbXB0Q29tcG9uZW50RGF0YSgpO1xyXG5cdFx0ZGF0YS5yYXRpbmdEYXRhLnF1ZXN0aW9uID0gc3AubG9hZFN0cmluZ1Jlc291cmNlKElGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wc1JhdGluZ1F1ZXN0aW9uKTtcclxuXHRcdGRhdGEuY29tbWVudERhdGEucXVlc3Rpb24gPSBzcC5sb2FkU3RyaW5nUmVzb3VyY2UoSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzQ29tbWVudFF1ZXN0aW9uKTtcclxuXHRcdGRhdGEucHJvbXB0RGF0YS50aXRsZSA9IHNwLmxvYWRTdHJpbmdSZXNvdXJjZShJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIuU3RyaW5nVHlwZS5OcHNQcm9tcHRUaXRsZSk7XHJcblx0XHRkYXRhLnByb21wdERhdGEucXVlc3Rpb24gPSBzcC5sb2FkU3RyaW5nUmVzb3VyY2UoSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzUHJvbXB0UXVlc3Rpb24pO1xyXG5cdFx0ZGF0YS5wcm9tcHREYXRhLnllc0J1dHRvbkxhYmVsID0gc3AubG9hZFN0cmluZ1Jlc291cmNlKElGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wc1Byb21wdFllc0xhYmVsKTtcclxuXHRcdGRhdGEucHJvbXB0RGF0YS5ub0J1dHRvbkxhYmVsID0gc3AubG9hZFN0cmluZ1Jlc291cmNlKElGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wc1Byb21wdE5vdE5vd0xhYmVsKTtcclxuXHRcdGNvbnN0IHJhdGluZ1ZhbHVlc0FzY2VuZGluZzogc3RyaW5nW10gPSBuZXcgQXJyYXkoNSk7XHJcblx0XHRyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbMF0gPSBzcC5sb2FkU3RyaW5nUmVzb3VyY2UoSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzNVJhdGluZ1ZhbHVlMSk7XHJcblx0XHRyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbMV0gPSBzcC5sb2FkU3RyaW5nUmVzb3VyY2UoSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzNVJhdGluZ1ZhbHVlMik7XHJcblx0XHRyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbMl0gPSBzcC5sb2FkU3RyaW5nUmVzb3VyY2UoSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzNVJhdGluZ1ZhbHVlMyk7XHJcblx0XHRyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbM10gPSBzcC5sb2FkU3RyaW5nUmVzb3VyY2UoSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzNVJhdGluZ1ZhbHVlNCk7XHJcblx0XHRyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbNF0gPSBzcC5sb2FkU3RyaW5nUmVzb3VyY2UoSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzNVJhdGluZ1ZhbHVlNSk7XHJcblxyXG5cdFx0aWYgKCFkYXRhLnJhdGluZ0RhdGEucXVlc3Rpb25cclxuXHRcdFx0fHwgIWRhdGEuY29tbWVudERhdGEucXVlc3Rpb25cclxuXHRcdFx0fHwgIWRhdGEucHJvbXB0RGF0YS50aXRsZVxyXG5cdFx0XHR8fCAhZGF0YS5wcm9tcHREYXRhLnF1ZXN0aW9uXHJcblx0XHRcdHx8ICFkYXRhLnByb21wdERhdGEueWVzQnV0dG9uTGFiZWxcclxuXHRcdFx0fHwgIWRhdGEucHJvbXB0RGF0YS5ub0J1dHRvbkxhYmVsXHJcblx0XHRcdHx8ICFyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbMF1cclxuXHRcdFx0fHwgIXJhdGluZ1ZhbHVlc0FzY2VuZGluZ1sxXVxyXG5cdFx0XHR8fCAhcmF0aW5nVmFsdWVzQXNjZW5kaW5nWzJdXHJcblx0XHRcdHx8ICFyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbM11cclxuXHRcdFx0fHwgIXJhdGluZ1ZhbHVlc0FzY2VuZGluZ1s0XSkge1xyXG5cclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGF0YS5yYXRpbmdEYXRhLnJhdGluZ1ZhbHVlc0FzY2VuZGluZyA9IHJhdGluZ1ZhbHVlc0FzY2VuZGluZztcclxuXHRcdHJldHVybiB0aGlzLm1ha2UoZGF0YSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc3RhdGljIG1ha2UxMVBvaW50KGJhc2VEYXRhOiBTdXJ2ZXlEYXRhU291cmNlLlN1cnZleURhdGFTb3VyY2VEYXRhLCBzcDogSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyKTogSU5wc1N1cnZleSB7XHJcblx0XHRpZiAoIWJhc2VEYXRhIHx8ICFzcCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBkYXRhID0gbmV3IE5wc1N1cnZleS5OcHNTdXJ2ZXlEYXRhKCk7XHJcblx0XHRkYXRhLmJhc2VEYXRhID0gYmFzZURhdGE7XHJcblx0XHRkYXRhLnJhdGluZ0RhdGEgPSBuZXcgUmF0aW5nQ29tcG9uZW50LlJhdGluZ0NvbXBvbmVudERhdGEoKTtcclxuXHRcdGRhdGEucmF0aW5nRGF0YS5pc1plcm9CYXNlZCA9IHRydWU7XHJcblx0XHRkYXRhLmNvbW1lbnREYXRhID0gbmV3IENvbW1lbnRDb21wb25lbnQuQ29tbWVudENvbXBvbmVudERhdGEoKTtcclxuXHRcdGRhdGEucHJvbXB0RGF0YSA9IG5ldyBQcm9tcHRDb21wb25lbnQuUHJvbXB0Q29tcG9uZW50RGF0YSgpO1xyXG5cdFx0ZGF0YS5yYXRpbmdEYXRhLnF1ZXN0aW9uID0gc3AubG9hZFN0cmluZ1Jlc291cmNlKElGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wc1JhdGluZ1F1ZXN0aW9uKTtcclxuXHRcdGRhdGEuY29tbWVudERhdGEucXVlc3Rpb24gPSBzcC5sb2FkU3RyaW5nUmVzb3VyY2UoSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzQ29tbWVudFF1ZXN0aW9uKTtcclxuXHRcdGRhdGEucHJvbXB0RGF0YS50aXRsZSA9IHNwLmxvYWRTdHJpbmdSZXNvdXJjZShJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIuU3RyaW5nVHlwZS5OcHNQcm9tcHRUaXRsZSk7XHJcblx0XHRkYXRhLnByb21wdERhdGEucXVlc3Rpb24gPSBzcC5sb2FkU3RyaW5nUmVzb3VyY2UoSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzUHJvbXB0UXVlc3Rpb24pO1xyXG5cdFx0ZGF0YS5wcm9tcHREYXRhLnllc0J1dHRvbkxhYmVsID0gc3AubG9hZFN0cmluZ1Jlc291cmNlKElGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wc1Byb21wdFllc0xhYmVsKTtcclxuXHRcdGRhdGEucHJvbXB0RGF0YS5ub0J1dHRvbkxhYmVsID0gc3AubG9hZFN0cmluZ1Jlc291cmNlKElGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wc1Byb21wdE5vdE5vd0xhYmVsKTtcclxuXHJcblx0XHRjb25zdCByYXRpbmdWYWx1ZXNBc2NlbmRpbmc6IHN0cmluZ1tdID0gbmV3IEFycmF5KDExKTtcclxuXHRcdHJhdGluZ1ZhbHVlc0FzY2VuZGluZ1swXSA9IHNwLmxvYWRTdHJpbmdSZXNvdXJjZShJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIuU3RyaW5nVHlwZS5OcHMxMVJhdGluZ1ZhbHVlMCk7XHJcblx0XHRyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbMV0gPSBzcC5sb2FkU3RyaW5nUmVzb3VyY2UoSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTEpO1xyXG5cdFx0cmF0aW5nVmFsdWVzQXNjZW5kaW5nWzJdID0gc3AubG9hZFN0cmluZ1Jlc291cmNlKElGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wczExUmF0aW5nVmFsdWUyKTtcclxuXHRcdHJhdGluZ1ZhbHVlc0FzY2VuZGluZ1szXSA9IHNwLmxvYWRTdHJpbmdSZXNvdXJjZShJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIuU3RyaW5nVHlwZS5OcHMxMVJhdGluZ1ZhbHVlMyk7XHJcblx0XHRyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbNF0gPSBzcC5sb2FkU3RyaW5nUmVzb3VyY2UoSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTQpO1xyXG5cdFx0cmF0aW5nVmFsdWVzQXNjZW5kaW5nWzVdID0gc3AubG9hZFN0cmluZ1Jlc291cmNlKElGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wczExUmF0aW5nVmFsdWU1KTtcclxuXHRcdHJhdGluZ1ZhbHVlc0FzY2VuZGluZ1s2XSA9IHNwLmxvYWRTdHJpbmdSZXNvdXJjZShJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIuU3RyaW5nVHlwZS5OcHMxMVJhdGluZ1ZhbHVlNik7XHJcblx0XHRyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbN10gPSBzcC5sb2FkU3RyaW5nUmVzb3VyY2UoSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTcpO1xyXG5cdFx0cmF0aW5nVmFsdWVzQXNjZW5kaW5nWzhdID0gc3AubG9hZFN0cmluZ1Jlc291cmNlKElGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wczExUmF0aW5nVmFsdWU4KTtcclxuXHRcdHJhdGluZ1ZhbHVlc0FzY2VuZGluZ1s5XSA9IHNwLmxvYWRTdHJpbmdSZXNvdXJjZShJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIuU3RyaW5nVHlwZS5OcHMxMVJhdGluZ1ZhbHVlOSk7XHJcblx0XHRyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbMTBdID0gc3AubG9hZFN0cmluZ1Jlc291cmNlKElGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wczExUmF0aW5nVmFsdWUxMCk7XHJcblxyXG5cdFx0aWYgKCFkYXRhLnJhdGluZ0RhdGEucXVlc3Rpb25cclxuXHRcdFx0fHwgIWRhdGEuY29tbWVudERhdGEucXVlc3Rpb25cclxuXHRcdFx0fHwgIWRhdGEucHJvbXB0RGF0YS50aXRsZVxyXG5cdFx0XHR8fCAhZGF0YS5wcm9tcHREYXRhLnF1ZXN0aW9uXHJcblx0XHRcdHx8ICFkYXRhLnByb21wdERhdGEueWVzQnV0dG9uTGFiZWxcclxuXHRcdFx0fHwgIWRhdGEucHJvbXB0RGF0YS5ub0J1dHRvbkxhYmVsXHJcblx0XHRcdHx8ICFyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbMF1cclxuXHRcdFx0fHwgIXJhdGluZ1ZhbHVlc0FzY2VuZGluZ1sxXVxyXG5cdFx0XHR8fCAhcmF0aW5nVmFsdWVzQXNjZW5kaW5nWzJdXHJcblx0XHRcdHx8ICFyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbM11cclxuXHRcdFx0fHwgIXJhdGluZ1ZhbHVlc0FzY2VuZGluZ1s0XVxyXG5cdFx0XHR8fCAhcmF0aW5nVmFsdWVzQXNjZW5kaW5nWzVdXHJcblx0XHRcdHx8ICFyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbNl1cclxuXHRcdFx0fHwgIXJhdGluZ1ZhbHVlc0FzY2VuZGluZ1s3XVxyXG5cdFx0XHR8fCAhcmF0aW5nVmFsdWVzQXNjZW5kaW5nWzhdXHJcblx0XHRcdHx8ICFyYXRpbmdWYWx1ZXNBc2NlbmRpbmdbOV1cclxuXHRcdFx0fHwgIXJhdGluZ1ZhbHVlc0FzY2VuZGluZ1sxMF0pIHtcclxuXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRhdGEucmF0aW5nRGF0YS5yYXRpbmdWYWx1ZXNBc2NlbmRpbmcgPSByYXRpbmdWYWx1ZXNBc2NlbmRpbmc7XHJcblx0XHRyZXR1cm4gdGhpcy5tYWtlKGRhdGEpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdXJ2ZXlJbmZvOiBTdXJ2ZXlEYXRhU291cmNlO1xyXG5cdHByaXZhdGUgcXVlc3Rpb246IENvbW1lbnRDb21wb25lbnQ7XHJcblx0cHJpdmF0ZSBwcm9tcHQ6IFByb21wdENvbXBvbmVudDtcclxuXHRwcml2YXRlIHJhdGluZzogUmF0aW5nQ29tcG9uZW50O1xyXG5cdHByaXZhdGUgY3ZTdXJ2ZXk6IENWU3VydmV5Q29tcG9uZW50O1xyXG5cclxuXHRwcml2YXRlIGNvbnN0cnVjdG9yKGRhdGE6IE5wc1N1cnZleS5OcHNTdXJ2ZXlEYXRhKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0aWYgKCFkYXRhKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRhdGEgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnN1cnZleUluZm8gPSBuZXcgU3VydmV5RGF0YVNvdXJjZShkYXRhLmJhc2VEYXRhKTtcclxuXHRcdHRoaXMucHJvbXB0ID0gbmV3IFByb21wdENvbXBvbmVudChkYXRhLnByb21wdERhdGEpO1xyXG5cdFx0dGhpcy5xdWVzdGlvbiA9IG5ldyBDb21tZW50Q29tcG9uZW50KGRhdGEuY29tbWVudERhdGEpO1xyXG5cdFx0dGhpcy5yYXRpbmcgPSBuZXcgUmF0aW5nQ29tcG9uZW50KGRhdGEucmF0aW5nRGF0YSk7XHJcblx0XHR0aGlzLmN2U3VydmV5ID0gZGF0YS5jdlN1cnZleURhdGEgPyAobmV3IENWU3VydmV5Q29tcG9uZW50KGRhdGEuY3ZTdXJ2ZXlEYXRhKSkgOiBudWxsO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldFR5cGUoKTogSVN1cnZleS5UeXBlIHtcclxuXHRcdHJldHVybiBJU3VydmV5LlR5cGUuTnBzO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldFN1cnZleUluZm8oKTogSVN1cnZleUluZm8ge1xyXG5cdFx0cmV0dXJuIHRoaXMuc3VydmV5SW5mbztcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRDb21tZW50Q29tcG9uZW50KCk6IENvbW1lbnRDb21wb25lbnQge1xyXG5cdFx0cmV0dXJuIHRoaXMucXVlc3Rpb247XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0UHJvbXB0Q29tcG9uZW50KCk6IFByb21wdENvbXBvbmVudCB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9tcHQ7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0UmF0aW5nQ29tcG9uZW50KCk6IFJhdGluZ0NvbXBvbmVudCB7XHJcblx0XHRyZXR1cm4gdGhpcy5yYXRpbmc7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0Q1ZTdXJ2ZXlDb21wb25lbnQoKTogQ1ZTdXJ2ZXlDb21wb25lbnQge1xyXG5cdFx0cmV0dXJuIHRoaXMuY3ZTdXJ2ZXk7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0Q29tcG9uZW50KGNvbXBvbmVudFR5cGU6IElTdXJ2ZXlDb21wb25lbnQuVHlwZSk6IElTdXJ2ZXlDb21wb25lbnQge1xyXG5cdFx0c3dpdGNoIChjb21wb25lbnRUeXBlKSB7XHJcblx0XHRcdGNhc2UgSVN1cnZleUNvbXBvbmVudC5UeXBlLkNvbW1lbnQ6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0Q29tbWVudENvbXBvbmVudCgpO1xyXG5cdFx0XHRjYXNlIElTdXJ2ZXlDb21wb25lbnQuVHlwZS5Qcm9tcHQ6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0UHJvbXB0Q29tcG9uZW50KCk7XHJcblx0XHRcdGNhc2UgSVN1cnZleUNvbXBvbmVudC5UeXBlLlJhdGluZzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRSYXRpbmdDb21wb25lbnQoKTtcclxuXHRcdFx0Y2FzZSBJU3VydmV5Q29tcG9uZW50LlR5cGUuQ1ZTdXJ2ZXk6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0Q1ZTdXJ2ZXlDb21wb25lbnQoKTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXREb21FbGVtZW50cyhkb2M6IERvY3VtZW50KTogRWxlbWVudFtdIHtcclxuXHRcdGlmICghZG9jKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkRvY3VtZW50IG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZWxlbWVudDogRWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KElTdXJ2ZXkuRE9NX05QU19UQUdOQU1FKTtcclxuXHJcblx0XHR0aGlzLmdldFN1cnZleUluZm8oKS5nZXREb21FbGVtZW50cyhkb2MpLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcblx0XHRcdGlmIChjaGlsZCkge1xyXG5cdFx0XHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmdldENvbW1lbnRDb21wb25lbnQoKS5nZXREb21FbGVtZW50cyhkb2MpLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcblx0XHRcdGlmIChjaGlsZCkge1xyXG5cdFx0XHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmdldFJhdGluZ0NvbXBvbmVudCgpLmdldERvbUVsZW1lbnRzKGRvYykuZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuXHRcdFx0aWYgKGNoaWxkKSB7XHJcblx0XHRcdFx0ZWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBbZWxlbWVudF07XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0SnNvbkVsZW1lbnRzKCk6IG9iamVjdCB7XHJcblx0XHRsZXQgcmVzdWx0OiBvYmplY3QgPSB7fTtcclxuXHJcblx0XHRyZXN1bHQgPSBvdmVycmlkZVZhbHVlcyh0aGlzLmdldFN1cnZleUluZm8oKS5nZXRKc29uRWxlbWVudHMoKSwgcmVzdWx0KTtcclxuXHRcdHJlc3VsdCA9IG92ZXJyaWRlVmFsdWVzKHRoaXMuZ2V0Q29tbWVudENvbXBvbmVudCgpLmdldEpzb25FbGVtZW50cygpLCByZXN1bHQpO1xyXG5cdFx0cmVzdWx0ID0gb3ZlcnJpZGVWYWx1ZXModGhpcy5nZXRSYXRpbmdDb21wb25lbnQoKS5nZXRKc29uRWxlbWVudHMoKSwgcmVzdWx0KTtcclxuXHJcblx0XHRyZXN1bHRbSVN1cnZleUNvbXBvbmVudC5KU09OX0FQUExJQ0FUSU9OX0tFWU5BTUVdID0ge307XHJcblx0XHRyZXN1bHRbSVN1cnZleUNvbXBvbmVudC5KU09OX0FQUExJQ0FUSU9OX0tFWU5BTUVdW0lTdXJ2ZXlDb21wb25lbnQuSlNPTl9FWFRFTkRFRE1BTklGRVNUREFUQV9LRVlOQU1FXSA9XHJcblx0XHRcdEpTT04uc3RyaW5naWZ5KHtbSVN1cnZleUNvbXBvbmVudC5KU09OX1NVUlZFWVNUUklOR1NfS0VZTkFNRV06IHRoaXMubWFrZVN1cnZleVN0cmluZ3MoKX0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBNYWtlcyB0aGUgc3RyaW5nIHRvIHNlbmQgdG8gTWFuaWZlc3QgcmVzcGVjdGluZyB0aGUgY29tcG9uZW50cyBwcmVzZW50IGluIHRoZSBzdXJ2ZXlcclxuXHRwcml2YXRlIG1ha2VTdXJ2ZXlTdHJpbmdzKCk6IHN0cmluZyB7XHJcblx0XHRjb25zdCBhY3R1YWxTdHJpbmdzOiBvYmplY3QgPSB7fTtcclxuXHJcblx0XHRpZiAodGhpcy5wcm9tcHQpIHtcclxuXHRcdFx0YWN0dWFsU3RyaW5nc1tJU3VydmV5Q29tcG9uZW50LkpTT05fUFJPTVBUX0tFWU5BTUVdID0gdGhpcy5wcm9tcHQuZ2V0Q29tcG9uZW50SnNvbigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnJhdGluZykge1xyXG5cdFx0XHRhY3R1YWxTdHJpbmdzW0lTdXJ2ZXlDb21wb25lbnQuSlNPTl9SQVRJTkdfS0VZTkFNRV0gPSBbdGhpcy5yYXRpbmcuZ2V0Q29tcG9uZW50SnNvbigpXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5xdWVzdGlvbikge1xyXG5cdFx0XHRhY3R1YWxTdHJpbmdzW0lTdXJ2ZXlDb21wb25lbnQuSlNPTl9DT01NRU5UX0tFWU5BTUVdID0gW3RoaXMucXVlc3Rpb24uZ2V0Q29tcG9uZW50SnNvbigpXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYWN0dWFsU3RyaW5ncyk7XHJcblx0fVxyXG59XHJcblxyXG5tb2R1bGUgTnBzU3VydmV5IHtcclxuXHQvKipcclxuXHQgKiBEYXRhIHJlcXVpcmVkIGZvciBhIE5wcyBTdXJ2ZXlcclxuXHQgKi9cclxuXHRleHBvcnQgY2xhc3MgTnBzU3VydmV5RGF0YSB7XHJcblx0XHRwdWJsaWMgYmFzZURhdGE6IFN1cnZleURhdGFTb3VyY2UuU3VydmV5RGF0YVNvdXJjZURhdGE7XHJcblx0XHRwdWJsaWMgY29tbWVudERhdGE6IENvbW1lbnRDb21wb25lbnQuQ29tbWVudENvbXBvbmVudERhdGE7XHJcblx0XHRwdWJsaWMgcHJvbXB0RGF0YTogUHJvbXB0Q29tcG9uZW50LlByb21wdENvbXBvbmVudERhdGE7XHJcblx0XHRwdWJsaWMgcmF0aW5nRGF0YTogUmF0aW5nQ29tcG9uZW50LlJhdGluZ0NvbXBvbmVudERhdGE7XHJcblx0XHRwdWJsaWMgY3ZTdXJ2ZXlEYXRhOiBDVlN1cnZleUNvbXBvbmVudC5DVlN1cnZleUNvbXBvbmVudERhdGE7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgPSBOcHNTdXJ2ZXk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Surveys/NpsSurvey.js\n')},"../FloodgateCore/dist/src/Surveys/Survey.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.Survey = void 0;\nvar ISurvey = __webpack_require__(/*! ../Api/ISurvey */ "../FloodgateCore/dist/src/Api/ISurvey.js");\nvar FloodgateEngine_1 = __webpack_require__(/*! ../FloodgateEngine */ "../FloodgateCore/dist/src/FloodgateEngine.js");\nvar Utils = __webpack_require__(/*! ./../Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar Survey = /** @class */ (function () {\n    function Survey() {\n    }\n    Survey.prototype.getCampaignId = function () {\n        return this.getSurveyInfo().getBackEndId();\n    };\n    Survey.prototype.getLauncherType = function () {\n        return this.getSurveyInfo().getLauncherType();\n    };\n    Survey.prototype.getClientFeedbackId = function () {\n        return this.clientFeedbackId;\n    };\n    Survey.prototype.submit = function () {\n        var surveyType = ISurvey.Type[this.getType()];\n        var transporter = FloodgateEngine_1.FloodgateEngine.getTransportFactory().makeTransporter(surveyType);\n        transporter.setManifestValues(this.getJsonElements());\n        this.clientFeedbackId = transporter.getClientFeedbackId();\n        transporter.submit();\n    };\n    Survey.prototype.getPreGeneratedClientFeedbackId = function () {\n        if (this.clientFeedbackId) {\n            return this.clientFeedbackId;\n        }\n        else {\n            return this.clientFeedbackId = Utils.guid();\n        }\n    };\n    return Survey;\n}());\nexports.Survey = Survey;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleXMvU3VydmV5LnRzPzZkZDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0dBQTJDO0FBRzNDLHNIQUFxRDtBQUVyRCx3RkFBb0M7QUFFcEM7SUFBQTtJQXlDQSxDQUFDO0lBbkNPLDhCQUFhLEdBQXBCO1FBQ0MsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVNLGdDQUFlLEdBQXRCO1FBQ0MsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVNLG9DQUFtQixHQUExQjtRQUNDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQzlCLENBQUM7SUFFTSx1QkFBTSxHQUFiO1FBQ0MsSUFBTSxVQUFVLEdBQVcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFNLFdBQVcsR0FBaUIsaUNBQWUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzFELFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sZ0RBQStCLEdBQXRDO1FBQ0MsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDN0I7YUFBTTtZQUNOLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUM1QztJQUNGLENBQUM7SUFTRixhQUFDO0FBQUQsQ0FBQztBQXpDcUIsd0JBQU0iLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9TdXJ2ZXlzL1N1cnZleS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBJU3VydmV5ID0gcmVxdWlyZShcIi4uL0FwaS9JU3VydmV5XCIpO1xyXG5pbXBvcnQgSVN1cnZleUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuLi9BcGkvSVN1cnZleUNvbXBvbmVudFwiKTtcclxuaW1wb3J0IHsgSVRyYW5zcG9ydGVyIH0gZnJvbSBcIi4uL0FwaS9JVHJhbnNwb3J0ZXJcIjtcclxuaW1wb3J0IHsgRmxvb2RnYXRlRW5naW5lIH0gZnJvbSBcIi4uL0Zsb29kZ2F0ZUVuZ2luZVwiO1xyXG5pbXBvcnQgKiBhcyBJU3VydmV5SW5mbyBmcm9tIFwiLi4vSVN1cnZleUluZm9cIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4vLi4vVXRpbHNcIjtcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTdXJ2ZXkgaW1wbGVtZW50cyBJU3VydmV5IHtcclxuXHRwcml2YXRlIHN1cnZleTogSVN1cnZleTtcclxuXHRwcml2YXRlIGNsaWVudEZlZWRiYWNrSWQ6IHN0cmluZztcclxuXHJcblx0cHVibGljIGFic3RyYWN0IGdldENvbXBvbmVudChjb21wb25lbnRUeXBlOiBJU3VydmV5Q29tcG9uZW50LlR5cGUpOiBJU3VydmV5Q29tcG9uZW50O1xyXG5cclxuXHRwdWJsaWMgZ2V0Q2FtcGFpZ25JZCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0U3VydmV5SW5mbygpLmdldEJhY2tFbmRJZCgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldExhdW5jaGVyVHlwZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0U3VydmV5SW5mbygpLmdldExhdW5jaGVyVHlwZSgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENsaWVudEZlZWRiYWNrSWQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmNsaWVudEZlZWRiYWNrSWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc3VibWl0KCkge1xyXG5cdFx0Y29uc3Qgc3VydmV5VHlwZTogc3RyaW5nID0gSVN1cnZleS5UeXBlW3RoaXMuZ2V0VHlwZSgpXTtcclxuXHRcdGNvbnN0IHRyYW5zcG9ydGVyOiBJVHJhbnNwb3J0ZXIgPSBGbG9vZGdhdGVFbmdpbmUuZ2V0VHJhbnNwb3J0RmFjdG9yeSgpLm1ha2VUcmFuc3BvcnRlcihzdXJ2ZXlUeXBlKTtcclxuXHRcdHRyYW5zcG9ydGVyLnNldE1hbmlmZXN0VmFsdWVzKHRoaXMuZ2V0SnNvbkVsZW1lbnRzKCkpO1xyXG5cdFx0dGhpcy5jbGllbnRGZWVkYmFja0lkID0gdHJhbnNwb3J0ZXIuZ2V0Q2xpZW50RmVlZGJhY2tJZCgpO1xyXG5cdFx0dHJhbnNwb3J0ZXIuc3VibWl0KCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0UHJlR2VuZXJhdGVkQ2xpZW50RmVlZGJhY2tJZCgpOiBzdHJpbmcge1xyXG5cdFx0aWYgKHRoaXMuY2xpZW50RmVlZGJhY2tJZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5jbGllbnRGZWVkYmFja0lkO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuY2xpZW50RmVlZGJhY2tJZCA9IFV0aWxzLmd1aWQoKTtcclxuXHRcdH1cclxuXHR9XHJcblx0Ly8gQWJzdHJhY3QgY2xhc3NlcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBieSBhY3R1YWwgU3VydmV5c1xyXG5cdHB1YmxpYyBhYnN0cmFjdCBnZXRUeXBlKCk6IElTdXJ2ZXkuVHlwZTtcclxuXHJcblx0cHVibGljIGFic3RyYWN0IGdldFN1cnZleUluZm8oKTogSVN1cnZleUluZm87XHJcblxyXG5cdHB1YmxpYyBhYnN0cmFjdCBnZXRKc29uRWxlbWVudHMoKTogb2JqZWN0O1xyXG5cclxuXHRwdWJsaWMgYWJzdHJhY3QgZ2V0RG9tRWxlbWVudHMoZG9jOiBEb2N1bWVudCk6IEVsZW1lbnRbXTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Surveys/Survey.js\n')},"../FloodgateCore/dist/src/Surveys/SurveyDataSource.js":function(){"use strict";eval('\nvar ISurvey = __webpack_require__(/*! ../../src/Api/ISurvey */ "../FloodgateCore/dist/src/Api/ISurvey.js");\nvar GovernedChannel_1 = __webpack_require__(/*! ../GovernedChannel */ "../FloodgateCore/dist/src/GovernedChannel.js");\nvar ISurveyInfo = __webpack_require__(/*! ../ISurveyInfo */ "../FloodgateCore/dist/src/ISurveyInfo.js");\nvar Utils = __webpack_require__(/*! ../Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar getDistantFuture = Utils.getDistantFuture, getDistantPast = Utils.getDistantPast, isNOU = Utils.isNOU, isDate = Utils.isDate;\nvar SurveyDataSource = /** @class */ (function () {\n    function SurveyDataSource(data) {\n        if (isNOU(data)) {\n            throw new Error("data must not be null");\n        }\n        if (isNOU(data.id) || data.id === "") {\n            throw new Error("data.id must not be null or empty");\n        }\n        if (isNOU(data.governedChannelType)) {\n            data.governedChannelType = GovernedChannel_1.GovernedChannelType.getDefault();\n        }\n        if (isNOU(data.expirationTimeUtc) || data.expirationTimeUtc === "") {\n            throw new Error("data.expirationTimeUtc must not be null or empty");\n        }\n        if (isNOU(data.activationEvent)) {\n            throw new Error("data.activationEvent must not be null");\n        }\n        if (isNOU(data.backEndIdentifier) || data.backEndIdentifier === "") {\n            data.backEndIdentifier = data.id;\n        }\n        if (isNOU(data.launcherType)) {\n            data.launcherType = ISurvey.LAUNCHER_TYPE_DEFAULT;\n        }\n        this.data = data;\n    }\n    // @Override\n    SurveyDataSource.prototype.getId = function () {\n        return this.data.id;\n    };\n    // @Override\n    SurveyDataSource.prototype.getBackEndId = function () {\n        return this.data.backEndIdentifier;\n    };\n    // @Override\n    SurveyDataSource.prototype.getGovernedChannelType = function () {\n        return this.data.governedChannelType;\n    };\n    // @Override\n    SurveyDataSource.prototype.getRawStartTimeUtc = function () {\n        return this.data.startTimeUtc;\n    };\n    // @Override\n    SurveyDataSource.prototype.getStartTimeUtc = function () {\n        if (isNOU(this.data.startTimeUtc)) {\n            return getDistantPast(); // Optional start date means the survey has started\n        }\n        var parsed = new Date(this.data.startTimeUtc);\n        if (!isDate(parsed)) {\n            return getDistantFuture(); // Badly specified start dates means the survey never starts\n        }\n        return parsed;\n    };\n    // @Override\n    SurveyDataSource.prototype.getExpirationTimeUtc = function () {\n        // Bad or missing expiration date means survey is always expired.\n        if (isNOU(this.data.expirationTimeUtc)) {\n            return getDistantPast();\n        }\n        var parsed = new Date(this.data.expirationTimeUtc);\n        if (!isDate(parsed)) {\n            return getDistantPast();\n        }\n        return parsed;\n    };\n    // @Override\n    SurveyDataSource.prototype.getRawExpirationTimeUtc = function () {\n        return this.data.expirationTimeUtc;\n    };\n    // @Override\n    SurveyDataSource.prototype.isActiveForDate = function (date) {\n        if (isNOU(date)) {\n            return false;\n        }\n        return (date >= this.getStartTimeUtc() && date <= this.getExpirationTimeUtc());\n    };\n    // @Override\n    SurveyDataSource.prototype.getActivationEvent = function () {\n        return this.data.activationEvent;\n    };\n    // @Override\n    SurveyDataSource.prototype.getPreferredLaunchType = function () {\n        return this.data.preferredLaunchType;\n    };\n    // @Override\n    SurveyDataSource.prototype.isAdditionalDataRequested = function (additionalDataToCheck) {\n        if (isNOU(this.data.additionalDataRequested)) {\n            return false;\n        }\n        for (var _i = 0, _a = this.data.additionalDataRequested; _i < _a.length; _i++) {\n            var additionalData = _a[_i];\n            if (additionalData === additionalDataToCheck) {\n                return true;\n            }\n        }\n        return false;\n    };\n    // @Override\n    SurveyDataSource.prototype.getLauncherType = function () {\n        return this.data.launcherType;\n    };\n    // @Override\n    SurveyDataSource.prototype.getMetadata = function () {\n        return this.data.metadata;\n    };\n    // @Override\n    SurveyDataSource.prototype.getBusinessLevel = function () {\n        return this.data.businessLevel;\n    };\n    // @Override\n    SurveyDataSource.prototype.getMaxLaunches = function () {\n        return this.data.maxLaunches;\n    };\n    // @Override\n    SurveyDataSource.prototype.getMaxLaunchesPerSession = function () {\n        return this.data.maxLaunchesPerSession;\n    };\n    // @Override\n    SurveyDataSource.prototype.getDomElements = function (doc) {\n        if (!doc) {\n            throw new Error("Document must not be null");\n        }\n        var typeElement = doc.createElement(ISurveyInfo.DOM_TYPE_TAGNAME);\n        typeElement.appendChild(doc.createTextNode(ISurveyInfo.DOM_TYPE_VALUE));\n        var idElement = doc.createElement(ISurveyInfo.DOM_ID_TAGNAME);\n        idElement.appendChild(doc.createTextNode(this.getBackEndId()));\n        return [typeElement, idElement];\n    };\n    // @Override\n    SurveyDataSource.prototype.getJsonElements = function () {\n        var surveyObject = {};\n        surveyObject[ISurveyInfo.JSON_ID_KEYNAME] = this.getBackEndId();\n        var result = {};\n        result[ISurveyInfo.JSON_SURVEY_KEYNAME] = surveyObject;\n        return result;\n    };\n    return SurveyDataSource;\n}());\n(function (SurveyDataSource) {\n    /**\n     * Basic data needed for all Surveys\n     */\n    var SurveyDataSourceData = /** @class */ (function () {\n        function SurveyDataSourceData() {\n            this.preferredLaunchType = "Default" /* Default */;\n        }\n        return SurveyDataSourceData;\n    }());\n    SurveyDataSource.SurveyDataSourceData = SurveyDataSourceData;\n})(SurveyDataSource || (SurveyDataSource = {}));\nmodule.exports = SurveyDataSource;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1N1cnZleXMvU3VydmV5RGF0YVNvdXJjZS50cz84MzQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwyR0FBaUQ7QUFDakQsc0hBQXlEO0FBRXpELHdHQUE4QztBQUc5QyxzRkFBa0M7QUFFMUIsb0JBQWdCLEdBQW9DLEtBQUssaUJBQXpDLEVBQUUsY0FBYyxHQUFvQixLQUFLLGVBQXpCLEVBQUUsS0FBSyxHQUFhLEtBQUssTUFBbEIsRUFBRSxNQUFNLEdBQUssS0FBSyxPQUFWLENBQVc7QUFFbEU7SUFHQywwQkFBbUIsSUFBMkM7UUFDN0QsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxxQ0FBbUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUM1RDtRQUNELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxFQUFFLEVBQUU7WUFDbkUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztTQUN6RDtRQUNELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxFQUFF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LE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFlBQVk7SUFDTCwwQ0FBZSxHQUF0QjtRQUNDLElBQU0sWUFBWSxHQUFXLEVBQUUsQ0FBQztRQUNoQyxZQUFZLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVoRSxJQUFNLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFDMUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUV2RCxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFDRix1QkFBQztBQUFELENBQUM7QUFFRCxXQUFPLGdCQUFnQjtJQUN0Qjs7T0FFRztJQUNIO1FBQUE7WUFPUSx3QkFBbUIsMkJBQTBEO1FBUXJGLENBQUM7UUFBRCwyQkFBQztJQUFELENBQUM7SUFmWSxxQ0FBb0IsdUJBZWhDO0FBQ0YsQ0FBQyxFQXBCTSxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBb0J0QjtBQUVELGlCQUFTLGdCQUFnQixDQUFDIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvU3VydmV5cy9TdXJ2ZXlEYXRhU291cmNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgSVN1cnZleSBmcm9tIFwiLi4vLi4vc3JjL0FwaS9JU3VydmV5XCI7XHJcbmltcG9ydCB7IEdvdmVybmVkQ2hhbm5lbFR5cGUgfSBmcm9tIFwiLi4vR292ZXJuZWRDaGFubmVsXCI7XHJcbmltcG9ydCAqIGFzIElTdXJ2ZXlFdmVudCBmcm9tIFwiLi4vSVN1cnZleUV2ZW50XCI7XHJcbmltcG9ydCAqIGFzIElTdXJ2ZXlJbmZvIGZyb20gXCIuLi9JU3VydmV5SW5mb1wiO1xyXG5pbXBvcnQgeyBCdXNpbmVzc0xldmVsIH0gZnJvbSBcIi4uL0lTdXJ2ZXlJbmZvXCI7XHJcbmltcG9ydCB7IElTdXJ2ZXlNZXRhZGF0YSB9IGZyb20gXCIuLi9JU3VydmV5TWV0YWRhdGFcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uL1V0aWxzXCI7XHJcblxyXG5jb25zdCB7IGdldERpc3RhbnRGdXR1cmUsIGdldERpc3RhbnRQYXN0LCBpc05PVSwgaXNEYXRlIH0gPSBVdGlscztcclxuXHJcbmNsYXNzIFN1cnZleURhdGFTb3VyY2UgaW1wbGVtZW50cyBJU3VydmV5SW5mbyB7XHJcblx0cHJpdmF0ZSBkYXRhOiBTdXJ2ZXlEYXRhU291cmNlLlN1cnZleURhdGFTb3VyY2VEYXRhO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3IoZGF0YTogU3VydmV5RGF0YVNvdXJjZS5TdXJ2ZXlEYXRhU291cmNlRGF0YSkge1xyXG5cdFx0aWYgKGlzTk9VKGRhdGEpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRhdGEgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHRcdGlmIChpc05PVShkYXRhLmlkKSB8fCBkYXRhLmlkID09PSBcIlwiKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRhdGEuaWQgbXVzdCBub3QgYmUgbnVsbCBvciBlbXB0eVwiKTtcclxuXHRcdH1cclxuXHRcdGlmIChpc05PVShkYXRhLmdvdmVybmVkQ2hhbm5lbFR5cGUpKSB7XHJcblx0XHRcdGRhdGEuZ292ZXJuZWRDaGFubmVsVHlwZSA9IEdvdmVybmVkQ2hhbm5lbFR5cGUuZ2V0RGVmYXVsdCgpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGlzTk9VKGRhdGEuZXhwaXJhdGlvblRpbWVVdGMpIHx8IGRhdGEuZXhwaXJhdGlvblRpbWVVdGMgPT09IFwiXCIpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGF0YS5leHBpcmF0aW9uVGltZVV0YyBtdXN0IG5vdCBiZSBudWxsIG9yIGVtcHR5XCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGlzTk9VKGRhdGEuYWN0aXZhdGlvbkV2ZW50KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkYXRhLmFjdGl2YXRpb25FdmVudCBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGlzTk9VKGRhdGEuYmFja0VuZElkZW50aWZpZXIpIHx8IGRhdGEuYmFja0VuZElkZW50aWZpZXIgPT09IFwiXCIpIHtcclxuXHRcdFx0ZGF0YS5iYWNrRW5kSWRlbnRpZmllciA9IGRhdGEuaWQ7XHJcblx0XHR9XHJcblx0XHRpZiAoaXNOT1UoZGF0YS5sYXVuY2hlclR5cGUpKSB7XHJcblx0XHRcdGRhdGEubGF1bmNoZXJUeXBlID0gSVN1cnZleS5MQVVOQ0hFUl9UWVBFX0RFRkFVTFQ7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5kYXRhID0gZGF0YTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5pZDtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRCYWNrRW5kSWQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEuYmFja0VuZElkZW50aWZpZXI7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0R292ZXJuZWRDaGFubmVsVHlwZSgpOiBHb3Zlcm5lZENoYW5uZWxUeXBlIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEuZ292ZXJuZWRDaGFubmVsVHlwZTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRSYXdTdGFydFRpbWVVdGMoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEuc3RhcnRUaW1lVXRjO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldFN0YXJ0VGltZVV0YygpOiBEYXRlIHtcclxuXHRcdGlmIChpc05PVSh0aGlzLmRhdGEuc3RhcnRUaW1lVXRjKSkge1xyXG5cdFx0XHRyZXR1cm4gZ2V0RGlzdGFudFBhc3QoKTsgLy8gT3B0aW9uYWwgc3RhcnQgZGF0ZSBtZWFucyB0aGUgc3VydmV5IGhhcyBzdGFydGVkXHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkID0gbmV3IERhdGUodGhpcy5kYXRhLnN0YXJ0VGltZVV0Yyk7XHJcblx0XHRpZiAoIWlzRGF0ZShwYXJzZWQpKSB7XHJcblx0XHRcdHJldHVybiBnZXREaXN0YW50RnV0dXJlKCk7IC8vIEJhZGx5IHNwZWNpZmllZCBzdGFydCBkYXRlcyBtZWFucyB0aGUgc3VydmV5IG5ldmVyIHN0YXJ0c1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBwYXJzZWQ7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0RXhwaXJhdGlvblRpbWVVdGMoKTogRGF0ZSB7XHJcblx0XHQvLyBCYWQgb3IgbWlzc2luZyBleHBpcmF0aW9uIGRhdGUgbWVhbnMgc3VydmV5IGlzIGFsd2F5cyBleHBpcmVkLlxyXG5cclxuXHRcdGlmIChpc05PVSh0aGlzLmRhdGEuZXhwaXJhdGlvblRpbWVVdGMpKSB7XHJcblx0XHRcdHJldHVybiBnZXREaXN0YW50UGFzdCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHRoaXMuZGF0YS5leHBpcmF0aW9uVGltZVV0Yyk7XHJcblx0XHRpZiAoIWlzRGF0ZShwYXJzZWQpKSB7XHJcblx0XHRcdHJldHVybiBnZXREaXN0YW50UGFzdCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBwYXJzZWQ7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0UmF3RXhwaXJhdGlvblRpbWVVdGMoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEuZXhwaXJhdGlvblRpbWVVdGM7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgaXNBY3RpdmVGb3JEYXRlKGRhdGU6IERhdGUpOiBib29sZWFuIHtcclxuXHRcdGlmIChpc05PVShkYXRlKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIChkYXRlID49IHRoaXMuZ2V0U3RhcnRUaW1lVXRjKCkgJiYgZGF0ZSA8PSB0aGlzLmdldEV4cGlyYXRpb25UaW1lVXRjKCkpO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldEFjdGl2YXRpb25FdmVudCgpOiBJU3VydmV5RXZlbnQge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5hY3RpdmF0aW9uRXZlbnQ7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0UHJlZmVycmVkTGF1bmNoVHlwZSgpOiBJU3VydmV5SW5mby5MYXVuY2hUeXBlIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEucHJlZmVycmVkTGF1bmNoVHlwZTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBpc0FkZGl0aW9uYWxEYXRhUmVxdWVzdGVkKGFkZGl0aW9uYWxEYXRhVG9DaGVjazogSVN1cnZleUluZm8uQWRkaXRpb25hbERhdGFUeXBlKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoaXNOT1UodGhpcy5kYXRhLmFkZGl0aW9uYWxEYXRhUmVxdWVzdGVkKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRmb3IgKGNvbnN0IGFkZGl0aW9uYWxEYXRhIG9mIHRoaXMuZGF0YS5hZGRpdGlvbmFsRGF0YVJlcXVlc3RlZCkge1xyXG5cdFx0XHRpZiAoYWRkaXRpb25hbERhdGEgPT09IGFkZGl0aW9uYWxEYXRhVG9DaGVjaykge1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0TGF1bmNoZXJUeXBlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmxhdW5jaGVyVHlwZTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRNZXRhZGF0YSgpOiBJU3VydmV5TWV0YWRhdGEge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5tZXRhZGF0YTtcclxuXHR9XHJcblxyXG5cdC8vIEBPdmVycmlkZVxyXG5cdHB1YmxpYyBnZXRCdXNpbmVzc0xldmVsKCk6IEJ1c2luZXNzTGV2ZWwge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5idXNpbmVzc0xldmVsO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldE1heExhdW5jaGVzKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5kYXRhLm1heExhdW5jaGVzO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldE1heExhdW5jaGVzUGVyU2Vzc2lvbigpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5tYXhMYXVuY2hlc1BlclNlc3Npb247XHJcblx0fVxyXG5cclxuXHQvLyBAT3ZlcnJpZGVcclxuXHRwdWJsaWMgZ2V0RG9tRWxlbWVudHMoZG9jOiBEb2N1bWVudCk6IEVsZW1lbnRbXSB7XHJcblx0XHRpZiAoIWRvYykge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJEb2N1bWVudCBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHR5cGVFbGVtZW50OiBFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoSVN1cnZleUluZm8uRE9NX1RZUEVfVEFHTkFNRSk7XHJcblx0XHR0eXBlRWxlbWVudC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoSVN1cnZleUluZm8uRE9NX1RZUEVfVkFMVUUpKTtcclxuXHJcblx0XHRjb25zdCBpZEVsZW1lbnQ6IEVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudChJU3VydmV5SW5mby5ET01fSURfVEFHTkFNRSk7XHJcblx0XHRpZEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKHRoaXMuZ2V0QmFja0VuZElkKCkpKTtcclxuXHJcblx0XHRyZXR1cm4gW3R5cGVFbGVtZW50LCBpZEVsZW1lbnRdO1xyXG5cdH1cclxuXHJcblx0Ly8gQE92ZXJyaWRlXHJcblx0cHVibGljIGdldEpzb25FbGVtZW50cygpOiBvYmplY3Qge1xyXG5cdFx0Y29uc3Qgc3VydmV5T2JqZWN0OiBvYmplY3QgPSB7fTtcclxuXHRcdHN1cnZleU9iamVjdFtJU3VydmV5SW5mby5KU09OX0lEX0tFWU5BTUVdID0gdGhpcy5nZXRCYWNrRW5kSWQoKTtcclxuXHJcblx0XHRjb25zdCByZXN1bHQ6IG9iamVjdCA9IHt9O1xyXG5cdFx0cmVzdWx0W0lTdXJ2ZXlJbmZvLkpTT05fU1VSVkVZX0tFWU5BTUVdID0gc3VydmV5T2JqZWN0O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcblxyXG5tb2R1bGUgU3VydmV5RGF0YVNvdXJjZSB7XHJcblx0LyoqXHJcblx0ICogQmFzaWMgZGF0YSBuZWVkZWQgZm9yIGFsbCBTdXJ2ZXlzXHJcblx0ICovXHJcblx0ZXhwb3J0IGNsYXNzIFN1cnZleURhdGFTb3VyY2VEYXRhIHtcclxuXHRcdHB1YmxpYyBpZDogc3RyaW5nO1xyXG5cdFx0cHVibGljIGJhY2tFbmRJZGVudGlmaWVyOiBzdHJpbmc7XHJcblx0XHRwdWJsaWMgZ292ZXJuZWRDaGFubmVsVHlwZTogR292ZXJuZWRDaGFubmVsVHlwZTtcclxuXHRcdHB1YmxpYyBzdGFydFRpbWVVdGM6IHN0cmluZztcclxuXHRcdHB1YmxpYyBleHBpcmF0aW9uVGltZVV0Yzogc3RyaW5nO1xyXG5cdFx0cHVibGljIGFjdGl2YXRpb25FdmVudDogSVN1cnZleUV2ZW50O1xyXG5cdFx0cHVibGljIHByZWZlcnJlZExhdW5jaFR5cGU6IElTdXJ2ZXlJbmZvLkxhdW5jaFR5cGUgPSBJU3VydmV5SW5mby5MYXVuY2hUeXBlLkRlZmF1bHQ7XHJcblx0XHRwdWJsaWMgYWRkaXRpb25hbERhdGFSZXF1ZXN0ZWQ6IElTdXJ2ZXlJbmZvLkFkZGl0aW9uYWxEYXRhVHlwZVtdO1xyXG5cdFx0cHVibGljIGxhdW5jaGVyVHlwZTogc3RyaW5nO1xyXG5cdFx0cHVibGljIG1ldGFkYXRhOiBJU3VydmV5TWV0YWRhdGE7XHJcblxyXG5cdFx0cHVibGljIGJ1c2luZXNzTGV2ZWw6IEJ1c2luZXNzTGV2ZWw7XHJcblx0XHRwdWJsaWMgbWF4TGF1bmNoZXM6IG51bWJlcjtcclxuXHRcdHB1YmxpYyBtYXhMYXVuY2hlc1BlclNlc3Npb246IG51bWJlcjtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCA9IFN1cnZleURhdGFTb3VyY2U7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Surveys/SurveyDataSource.js\n')},"../FloodgateCore/dist/src/UserFact/UserFact.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.UserFact = void 0;\nvar Constants_1 = __webpack_require__(/*! ../Constants */ "../FloodgateCore/dist/src/Constants.js");\nvar FloodgateEngine_1 = __webpack_require__(/*! ../FloodgateEngine */ "../FloodgateCore/dist/src/FloodgateEngine.js");\nvar Utils = __webpack_require__(/*! ../Utils */ "../FloodgateCore/dist/src/Utils.js");\nvar isNOU = Utils.isNOU, isNumber = Utils.isNumber, isArray = Utils.isArray;\nvar commonComparatorTypes = [\n    0 /* Equal */,\n    1 /* NotEqual */,\n    2 /* GreaterThan */,\n    3 /* GreaterThanOrEqual */,\n    4 /* LessThan */,\n    5 /* LessThanOrEqual */,\n];\nvar UserFact = /** @class */ (function () {\n    function UserFact(input) {\n        this.input = input;\n    }\n    UserFact.deserialize = function (rawUserFactSpec) {\n        return this.validate(rawUserFactSpec) ? new UserFact(rawUserFactSpec) : null;\n    };\n    UserFact.validate = function (input) {\n        if (!input) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecDeserialization.Failed, "Input is null or undefined for user fact");\n            return false;\n        }\n        // Values is used for type UserFactType.ListOfStrings\n        if (!input.Value && input.Values) {\n            input.Value = input.Values;\n        }\n        if (isNOU(input.Name) || isNOU(input.Type) || isNOU(input.Value)) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecDeserialization.Failed, "Either of the required parameters Name: " + input.Name + ", Type: " + input.Type + " or Value: " + input.Value + " are not provided for the user fact");\n            return false;\n        }\n        if (!this.validateUserFactType(input.Type)) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecDeserialization.Failed, "Invalid UserFactType value " + input.Type + " is provided for user fact");\n            return false;\n        }\n        if (input.Type === 6 /* ListFile */) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecDeserialization.Failed, "Unsupported UserFactType value " + input.Type + " is provided for user fact");\n            return false;\n        }\n        if (input.LatencyType && !this.validateLatencyType(input.LatencyType)) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecDeserialization.Failed, "Invalid LatencyType value " + input.LatencyType + " is provided for user fact of type " + input.Type);\n            return false;\n        }\n        if (input.LatencyType && input.LatencyType !== 0 /* None */ && isNOU(input.LatencyDurationInSeconds)) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecDeserialization.Failed, "LatencyDurationInSeconds value " + input.LatencyDurationInSeconds + " is not provided for user fact of type " + input.Type);\n            return false;\n        }\n        if (input.LatencyDurationInSeconds && !isNumber(input.LatencyDurationInSeconds)) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecDeserialization.Failed, "Invalid LatencyDurationInSeconds value " + input.LatencyDurationInSeconds + " is provided for user fact of type " + input.Type);\n            return false;\n        }\n        if (input.Type === 1 /* TimeIntervalInSeconds */ && isNOU(input.IntervalType)) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecDeserialization.Failed, "Required parameter intervalType is not provided for user fact of type " + input.Type);\n            return false;\n        }\n        var supportedComparatorTypes = this.getComparatorTypes(input.Type);\n        if (input.Comparator && !isComparatorTypeSupported(input.Comparator, supportedComparatorTypes)) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecIsAMatch.Failed, "Unsupported comparator type for user fact of type " + input.Type);\n            return false;\n        }\n        return true;\n    };\n    UserFact.getComparatorTypes = function (userFactType) {\n        switch (userFactType) {\n            case 0 /* Boolean */:\n                return [0 /* Equal */, 1 /* NotEqual */];\n            case 4 /* String */:\n                return [0 /* Equal */,\n                    1 /* NotEqual */,\n                    6 /* In */,\n                    7 /* NotIn */,\n                    8 /* InverseIn */,\n                    9 /* InverseNotIn */];\n            case 5 /* ListOfStrings */:\n                return [6 /* In */, 7 /* NotIn */, 8 /* InverseIn */, 9 /* InverseNotIn */];\n            case 1 /* TimeIntervalInSeconds */:\n            case 2 /* DateTimeUTC */:\n            case 3 /* Number */:\n            case 6 /* ListFile */:\n                return commonComparatorTypes;\n            default:\n                assertNever(userFactType);\n        }\n        return commonComparatorTypes;\n    };\n    UserFact.validateLatencyType = function (latency) {\n        return (latency === 0 /* None */ ||\n            latency === 3 /* ClientIngestionDateTime */ ||\n            latency === 1 /* SourceDateTime */ ||\n            latency === 2 /* StorageDateTime */) ? true : assertNever(latency);\n    };\n    UserFact.validateUserFactType = function (factType) {\n        return (factType === 0 /* Boolean */ ||\n            factType === 2 /* DateTimeUTC */ ||\n            factType === 3 /* Number */ ||\n            factType === 4 /* String */ ||\n            factType === 1 /* TimeIntervalInSeconds */ ||\n            factType === 5 /* ListOfStrings */ ||\n            factType === 6 /* ListFile */) ? true : assertNever(factType);\n    };\n    UserFact.prototype.isAMatch = function (rawUserFact) {\n        if (!rawUserFact || !rawUserFact.userFactValue) {\n            return false;\n        }\n        if (!this.isLatencyAcceptable(rawUserFact)) {\n            return false;\n        }\n        try {\n            var factType = this.getType();\n            if (factType === 0 /* Boolean */) {\n                return compareBooleanValues(this.getValue(), rawUserFact, this.getComparator());\n            }\n            else if (factType === 2 /* DateTimeUTC */) {\n                return compareDateTimeUTCValues(this.getValue(), rawUserFact, this.getComparator());\n            }\n            else if (factType === 3 /* Number */) {\n                return compareNumberValues(this.getValue(), rawUserFact, this.getComparator());\n            }\n            else if (factType === 4 /* String */) {\n                return compareStringValues(this.getValue(), rawUserFact, this.getComparator());\n            }\n            else if (factType === 1 /* TimeIntervalInSeconds */) {\n                return compareTimeIntervalValues(this.getValue(), rawUserFact, this.getComparator(), this.getIntervalType());\n            }\n            else if (factType === 5 /* ListOfStrings */) {\n                return compareListValues(this.getValue(), rawUserFact, this.getComparator());\n            }\n            else {\n                FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecIsAMatch.Failed, "Unsupported type of user fact was provided " + factType);\n                return false;\n            }\n        }\n        catch (error) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecIsAMatch.Failed, error);\n            return false;\n        }\n    };\n    UserFact.prototype.getType = function () {\n        return this.input.Type;\n    };\n    UserFact.prototype.getName = function () {\n        return this.input.Name;\n    };\n    UserFact.prototype.getValue = function () {\n        return this.input.Value;\n    };\n    UserFact.prototype.getComparator = function () {\n        return this.input.Comparator || 0 /* Equal */;\n    };\n    UserFact.prototype.getLatencyType = function () {\n        return this.input.LatencyType || 0 /* None */;\n    };\n    UserFact.prototype.getLatencyDurationInSeconds = function () {\n        return this.input.LatencyDurationInSeconds;\n    };\n    UserFact.prototype.getIntervalType = function () {\n        return this.input.IntervalType;\n    };\n    UserFact.prototype.isLatencyAcceptable = function (rawUserFact) {\n        var factType = this.getType();\n        if (!isNOU(this.getLatencyDurationInSeconds()) &&\n            !evaluateFactCandidacy(this.getLatencyType(), this.getLatencyDurationInSeconds(), rawUserFact)) {\n            FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecIsAMatch.Mismatch, {\n                ErrorMessage: "Latency duration not acceptable - { Name: \\"" + rawUserFact.userFactName + "\\" }",\n                TimeMilliseconds: this.getLatencyDurationInSeconds(),\n                Type: "" + factType,\n            });\n            return false;\n        }\n        return true;\n    };\n    return UserFact;\n}());\nexports.UserFact = UserFact;\nfunction evaluateFactCandidacy(latencyType, latencyDurationInSeconds, userFact) {\n    var userFactTime;\n    switch (latencyType) {\n        case 0 /* None */:\n            break;\n        case 1 /* SourceDateTime */:\n            userFactTime = userFact.sourceDateTime;\n            break;\n        case 2 /* StorageDateTime */:\n            userFactTime = userFact.storageDateTime;\n            break;\n        case 3 /* ClientIngestionDateTime */:\n            userFactTime = userFact.clientIngestionDateTime;\n            break;\n        default:\n            assertNever(latencyType);\n    }\n    if (!isNOU(userFactTime)) {\n        var userFactTimeInMilliseconds = Date.parse(userFactTime);\n        var currentTimeInMilliseconds = Date.now();\n        return currentTimeInMilliseconds - userFactTimeInMilliseconds <= (latencyDurationInSeconds * 1000);\n    }\n    return true;\n}\nfunction compareBooleanValues(userFactSpecValue, rawUserFact, comparator) {\n    var rawUserFactValueInBoolean = JSON.parse(rawUserFact.userFactValue.toLowerCase());\n    return compareValues(!!userFactSpecValue, !!rawUserFactValueInBoolean, comparator);\n}\nfunction compareDateTimeUTCValues(userFactSpecValue, rawUserFact, comparator) {\n    var rawUserFactValueInMilliseconds = Date.parse(rawUserFact.userFactValue);\n    if (!isAValidNumber(rawUserFactValueInMilliseconds, rawUserFact.userFactValue, rawUserFact.userFactName)) {\n        return false;\n    }\n    var userFactSpecValueInMilliseconds = Date.parse(userFactSpecValue);\n    if (!isAValidNumber(userFactSpecValueInMilliseconds, userFactSpecValue, null, 2 /* DateTimeUTC */)) {\n        return false;\n    }\n    return compareValues(userFactSpecValueInMilliseconds, rawUserFactValueInMilliseconds, comparator);\n}\nfunction compareNumberValues(userFactSpecValue, rawUserFact, comparator) {\n    var rawUserFactValueInNumber = parseInt(rawUserFact.userFactValue, 10);\n    if (!isAValidNumber(rawUserFactValueInNumber, rawUserFact.userFactValue, rawUserFact.userFactName)) {\n        return false;\n    }\n    return compareValues(userFactSpecValue, rawUserFactValueInNumber, comparator);\n}\nfunction compareStringValues(userFactSpecValue, rawUserFact, comparator) {\n    return compareValues(userFactSpecValue.toLowerCase(), rawUserFact.userFactValue.toLowerCase(), comparator);\n}\nfunction compareTimeIntervalValues(userFactSpecValue, rawUserFact, comparator, intervalType) {\n    var rawUserFactValueInMilliseconds = Date.parse(rawUserFact.userFactValue);\n    if (!isAValidNumber(rawUserFactValueInMilliseconds, rawUserFact.userFactValue, rawUserFact.userFactName)) {\n        return false;\n    }\n    // Diff from now and users input date\n    // IntervalTo - Internval to current date from fact date (fact date is expected to be before current date)\n    // IntervalFrom - Interval from current date to fact date (fact date is expected to be after current date)\n    var currentTimeInMilliseconds = Date.now();\n    var currentDateDiff = intervalType === 0 /* IntervalTo */ ?\n        (currentTimeInMilliseconds - rawUserFactValueInMilliseconds) : (rawUserFactValueInMilliseconds - currentTimeInMilliseconds);\n    if (currentDateDiff < 0) {\n        FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Event(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecIsAMatch.Mismatch, {\n            ErrorMessage: "Interval type not acceptable - { Spec: " + userFactSpecValue + ", Name: \\"" + rawUserFact.userFactName + "\\" }",\n            TimeMilliseconds: currentDateDiff,\n            Type: "" + intervalType,\n        });\n        return false;\n    }\n    var dayInMilliseconds = 86400000;\n    var userFactSpecValueInMilliseconds = userFactSpecValue * dayInMilliseconds;\n    // check if the above diff satisfies the comparison criteria\n    return compareValues(userFactSpecValueInMilliseconds, currentDateDiff, comparator);\n}\nfunction compareListValues(userFactSpecValue, rawUserFact, comparator) {\n    return compareValues(userFactSpecValue, rawUserFact.userFactValue, comparator);\n}\nfunction isComparatorTypeSupported(comparator, supportedComparatorTypes) {\n    return supportedComparatorTypes.indexOf(comparator) !== -1;\n}\nfunction compareValues(userFactSpecValue, userFactRawValue, comparator) {\n    switch (comparator) {\n        case 0 /* Equal */:\n            return userFactRawValue === userFactSpecValue;\n        case 1 /* NotEqual */:\n            return userFactRawValue !== userFactSpecValue;\n        case 2 /* GreaterThan */:\n            return userFactRawValue > userFactSpecValue;\n        case 3 /* GreaterThanOrEqual */:\n            return userFactRawValue >= userFactSpecValue;\n        case 4 /* LessThan */:\n            return userFactRawValue < userFactSpecValue;\n        case 5 /* LessThanOrEqual */:\n            return userFactRawValue <= userFactSpecValue;\n        case 6 /* In */:\n            return isFactValueInTargetItem(userFactSpecValue, userFactRawValue);\n        case 7 /* NotIn */:\n            return !isFactValueInTargetItem(userFactSpecValue, userFactRawValue);\n        case 8 /* InverseIn */:\n            return isFactValueInTargetItem(userFactRawValue, userFactSpecValue);\n        case 9 /* InverseNotIn */:\n            return !isFactValueInTargetItem(userFactRawValue, userFactSpecValue);\n        default:\n            assertNever(comparator);\n    }\n}\nfunction assertNever(_) {\n    return false;\n}\nfunction isFactValueInTargetItem(userFactTargetValues, userFactRawValue) {\n    if (typeof userFactRawValue === "string") {\n        var factValue_1 = userFactRawValue.toLowerCase();\n        if (typeof userFactTargetValues === "string") {\n            // both the inputs are strings, do a plain indexOf\n            return userFactTargetValues.toLowerCase().indexOf(factValue_1) !== -1;\n        }\n        if (isArray(userFactTargetValues)) {\n            var specValues = userFactTargetValues;\n            return specValues.some(function (specValue) { return specValue && specValue.toString().toLowerCase() === factValue_1; });\n        }\n    }\n    if (isArray(userFactTargetValues)) {\n        return userFactTargetValues.indexOf(userFactRawValue) !== -1;\n    }\n    return false;\n}\nfunction isAValidNumber(numberValue, value, rawUserFactName, factType) {\n    if (!isNumber(numberValue)) {\n        var errorMessage = "User fact " + rawUserFactName + " has invalid value " + value;\n        if (factType) {\n            errorMessage = "Invalid value " + value + " was provided for user fact of type " + factType;\n        }\n        FloodgateEngine_1.FloodgateEngine.getTelemetryLogger().log_Error(Constants_1.TelemetryEvent.Floodgate.UserFactsSpecIsAMatch.Failed, errorMessage);\n        return false;\n    }\n    return true;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1VzZXJGYWN0L1VzZXJGYWN0LnRzP2E4NWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0dBQThDO0FBQzlDLHNIQUFxRDtBQUNyRCxzRkFBa0M7QUFJMUIsU0FBSyxHQUF3QixLQUFLLE1BQTdCLEVBQUUsUUFBUSxHQUFjLEtBQUssU0FBbkIsRUFBRSxPQUFPLEdBQUssS0FBSyxRQUFWLENBQVc7QUFDM0MsSUFBTSxxQkFBcUIsR0FBcUI7Ozs7Ozs7Q0FPL0MsQ0FBQztBQUVGO0lBOEhDLGtCQUFZLEtBQXFCO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUEvSGEsb0JBQVcsR0FBekIsVUFBMEIsZUFBb0I7UUFDN0MsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzlFLENBQUM7SUFFYyxpQkFBUSxHQUF2QixVQUF3QixLQUFVO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDWCxpQ0FBZSxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxDQUM3QywwQkFBYyxDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLEVBQzVELDBDQUEwQyxDQUFDLENBQUM7WUFDN0MsT0FBTyxLQUFLLENBQUM7U0FDYjtRQUVELHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2pDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUMzQjtRQUVELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakUs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T0FBTyxLQUFLLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsV0FBbUIsRUFBRSxLQUFhLEVBQUUsZUFBdUIsRUFBRSxRQUF1QjtJQUMzRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQzNCLElBQUksWUFBWSxHQUFHLGVBQWEsZUFBZSwyQkFBc0IsS0FBTyxDQUFDO1FBQzdFLElBQUksUUFBUSxFQUFFO1lBQ2IsWUFBWSxHQUFHLG1CQUFpQixLQUFLLDRDQUF1QyxRQUFVLENBQUM7U0FDdkY7UUFFRCxpQ0FBZSxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxDQUM3QywwQkFBYyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQ3JELFlBQVksQ0FBQyxDQUFDO1FBRWYsT0FBTyxLQUFLLENBQUM7S0FDYjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2IsQ0FBQyIsImZpbGUiOiIuLi9GbG9vZGdhdGVDb3JlL2Rpc3Qvc3JjL1VzZXJGYWN0L1VzZXJGYWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVsZW1ldHJ5RXZlbnQgfSBmcm9tIFwiLi4vQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEZsb29kZ2F0ZUVuZ2luZSB9IGZyb20gXCIuLi9GbG9vZGdhdGVFbmdpbmVcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uL1V0aWxzXCI7XHJcbmltcG9ydCB7IElVc2VyRmFjdCB9IGZyb20gXCIuL0lVc2VyRmFjdFwiO1xyXG5pbXBvcnQgeyBDb21wYXJhdG9yVHlwZSwgQ3VycmVudFRpbWVJbnRlcnZhbFR5cGUsIElVc2VyRmFjdElucHV0LCBVc2VyRmFjdExhdGVuY3lUeXBlLCBVc2VyRmFjdFR5cGUgfSBmcm9tIFwiLi9Vc2VyRmFjdE1vZGVsXCI7XHJcblxyXG5jb25zdCB7IGlzTk9VLCBpc051bWJlciwgaXNBcnJheSB9ID0gVXRpbHM7XHJcbmNvbnN0IGNvbW1vbkNvbXBhcmF0b3JUeXBlczogQ29tcGFyYXRvclR5cGVbXSA9IFtcclxuXHRDb21wYXJhdG9yVHlwZS5FcXVhbCxcclxuXHRDb21wYXJhdG9yVHlwZS5Ob3RFcXVhbCxcclxuXHRDb21wYXJhdG9yVHlwZS5HcmVhdGVyVGhhbixcclxuXHRDb21wYXJhdG9yVHlwZS5HcmVhdGVyVGhhbk9yRXF1YWwsXHJcblx0Q29tcGFyYXRvclR5cGUuTGVzc1RoYW4sXHJcblx0Q29tcGFyYXRvclR5cGUuTGVzc1RoYW5PckVxdWFsLFxyXG5dO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJGYWN0IHtcclxuXHRwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplKHJhd1VzZXJGYWN0U3BlYzogYW55KTogVXNlckZhY3Qge1xyXG5cdFx0cmV0dXJuIHRoaXMudmFsaWRhdGUocmF3VXNlckZhY3RTcGVjKSA/IG5ldyBVc2VyRmFjdChyYXdVc2VyRmFjdFNwZWMpIDogbnVsbDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIHZhbGlkYXRlKGlucHV0OiBhbnkpIHtcclxuXHRcdGlmICghaW5wdXQpIHtcclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FcnJvcihcclxuXHRcdFx0XHRUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGUuVXNlckZhY3RzU3BlY0Rlc2VyaWFsaXphdGlvbi5GYWlsZWQsXHJcblx0XHRcdFx0XCJJbnB1dCBpcyBudWxsIG9yIHVuZGVmaW5lZCBmb3IgdXNlciBmYWN0XCIpO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gVmFsdWVzIGlzIHVzZWQgZm9yIHR5cGUgVXNlckZhY3RUeXBlLkxpc3RPZlN0cmluZ3NcclxuXHRcdGlmICghaW5wdXQuVmFsdWUgJiYgaW5wdXQuVmFsdWVzKSB7XHJcblx0XHRcdGlucHV0LlZhbHVlID0gaW5wdXQuVmFsdWVzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpc05PVShpbnB1dC5OYW1lKSB8fCBpc05PVShpbnB1dC5UeXBlKSB8fCBpc05PVShpbnB1dC5WYWx1ZSkpIHtcclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FcnJvcihcclxuXHRcdFx0XHRUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGUuVXNlckZhY3RzU3BlY0Rlc2VyaWFsaXphdGlvbi5GYWlsZWQsXHJcblx0XHRcdFx0YEVpdGhlciBvZiB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBOYW1lOiAke2lucHV0Lk5hbWV9LCBUeXBlOiAke2lucHV0LlR5cGV9IG9yIFZhbHVlOiAke2lucHV0LlZhbHVlfSBhcmUgbm90IHByb3ZpZGVkIGZvciB0aGUgdXNlciBmYWN0YCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXRoaXMudmFsaWRhdGVVc2VyRmFjdFR5cGUoaW5wdXQuVHlwZSkpIHtcclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FcnJvcihcclxuXHRcdFx0XHRUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGUuVXNlckZhY3RzU3BlY0Rlc2VyaWFsaXphdGlvbi5GYWlsZWQsXHJcblx0XHRcdFx0YEludmFsaWQgVXNlckZhY3RUeXBlIHZhbHVlICR7aW5wdXQuVHlwZX0gaXMgcHJvdmlkZWQgZm9yIHVzZXIgZmFjdGApO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlucHV0LlR5cGUgPT09IFVzZXJGYWN0VHlwZS5MaXN0RmlsZSkge1xyXG5cdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0Vycm9yKFxyXG5cdFx0XHRcdFRlbGVtZXRyeUV2ZW50LkZsb29kZ2F0ZS5Vc2VyRmFjdHNTcGVjRGVzZXJpYWxpemF0aW9uLkZhaWxlZCxcclxuXHRcdFx0XHRgVW5zdXBwb3J0ZWQgVXNlckZhY3RUeXBlIHZhbHVlICR7aW5wdXQuVHlwZX0gaXMgcHJvdmlkZWQgZm9yIHVzZXIgZmFjdGApO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlucHV0LkxhdGVuY3lUeXBlICYmICF0aGlzLnZhbGlkYXRlTGF0ZW5jeVR5cGUoaW5wdXQuTGF0ZW5jeVR5cGUpKSB7XHJcblx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfRXJyb3IoXHJcblx0XHRcdFx0VGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlLlVzZXJGYWN0c1NwZWNEZXNlcmlhbGl6YXRpb24uRmFpbGVkLFxyXG5cdFx0XHRcdGBJbnZhbGlkIExhdGVuY3lUeXBlIHZhbHVlICR7aW5wdXQuTGF0ZW5jeVR5cGV9IGlzIHByb3ZpZGVkIGZvciB1c2VyIGZhY3Qgb2YgdHlwZSAke2lucHV0LlR5cGV9YCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5wdXQuTGF0ZW5jeVR5cGUgJiYgaW5wdXQuTGF0ZW5jeVR5cGUgIT09IFVzZXJGYWN0TGF0ZW5jeVR5cGUuTm9uZSAmJiBpc05PVShpbnB1dC5MYXRlbmN5RHVyYXRpb25JblNlY29uZHMpKSB7XHJcblx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfRXJyb3IoXHJcblx0XHRcdFx0VGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlLlVzZXJGYWN0c1NwZWNEZXNlcmlhbGl6YXRpb24uRmFpbGVkLFxyXG5cdFx0XHRcdGBMYXRlbmN5RHVyYXRpb25JblNlY29uZHMgdmFsdWUgJHtpbnB1dC5MYXRlbmN5RHVyYXRpb25JblNlY29uZHN9IGlzIG5vdCBwcm92aWRlZCBmb3IgdXNlciBmYWN0IG9mIHR5cGUgJHtpbnB1dC5UeXBlfWApO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlucHV0LkxhdGVuY3lEdXJhdGlvbkluU2Vjb25kcyAmJiAhaXNOdW1iZXIoaW5wdXQuTGF0ZW5jeUR1cmF0aW9uSW5TZWNvbmRzKSkge1xyXG5cdFx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0Vycm9yKFxyXG5cdFx0XHRcdFRlbGVtZXRyeUV2ZW50LkZsb29kZ2F0ZS5Vc2VyRmFjdHNTcGVjRGVzZXJpYWxpemF0aW9uLkZhaWxlZCxcclxuXHRcdFx0XHRgSW52YWxpZCBMYXRlbmN5RHVyYXRpb25JblNlY29uZHMgdmFsdWUgJHtpbnB1dC5MYXRlbmN5RHVyYXRpb25JblNlY29uZHN9IGlzIHByb3ZpZGVkIGZvciB1c2VyIGZhY3Qgb2YgdHlwZSAke2lucHV0LlR5cGV9YCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5wdXQuVHlwZSA9PT0gVXNlckZhY3RUeXBlLlRpbWVJbnRlcnZhbEluU2Vjb25kcyAmJiBpc05PVShpbnB1dC5JbnRlcnZhbFR5cGUpKSB7XHJcblx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfRXJyb3IoXHJcblx0XHRcdFx0VGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlLlVzZXJGYWN0c1NwZWNEZXNlcmlhbGl6YXRpb24uRmFpbGVkLFxyXG5cdFx0XHRcdGBSZXF1aXJlZCBwYXJhbWV0ZXIgaW50ZXJ2YWxUeXBlIGlzIG5vdCBwcm92aWRlZCBmb3IgdXNlciBmYWN0IG9mIHR5cGUgJHtpbnB1dC5UeXBlfWApO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc3VwcG9ydGVkQ29tcGFyYXRvclR5cGVzID0gdGhpcy5nZXRDb21wYXJhdG9yVHlwZXMoaW5wdXQuVHlwZSk7XHJcblx0XHRpZiAoaW5wdXQuQ29tcGFyYXRvciAmJiAhaXNDb21wYXJhdG9yVHlwZVN1cHBvcnRlZChpbnB1dC5Db21wYXJhdG9yLCBzdXBwb3J0ZWRDb21wYXJhdG9yVHlwZXMpKSB7XHJcblx0XHRcdEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKS5sb2dfRXJyb3IoXHJcblx0XHRcdFx0VGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlLlVzZXJGYWN0c1NwZWNJc0FNYXRjaC5GYWlsZWQsXHJcblx0XHRcdFx0YFVuc3VwcG9ydGVkIGNvbXBhcmF0b3IgdHlwZSBmb3IgdXNlciBmYWN0IG9mIHR5cGUgJHtpbnB1dC5UeXBlfWApO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHN0YXRpYyBnZXRDb21wYXJhdG9yVHlwZXModXNlckZhY3RUeXBlOiBVc2VyRmFjdFR5cGUpOiBDb21wYXJhdG9yVHlwZVtdICB7XHJcblx0XHRzd2l0Y2ggKHVzZXJGYWN0VHlwZSkge1xyXG5cdFx0XHRjYXNlIFVzZXJGYWN0VHlwZS5Cb29sZWFuOlxyXG5cdFx0XHRcdHJldHVybiBbQ29tcGFyYXRvclR5cGUuRXF1YWwsIENvbXBhcmF0b3JUeXBlLk5vdEVxdWFsXTtcclxuXHRcdFx0Y2FzZSBVc2VyRmFjdFR5cGUuU3RyaW5nOlxyXG5cdFx0XHRcdHJldHVybiBbQ29tcGFyYXRvclR5cGUuRXF1YWwsXHJcblx0XHRcdFx0XHRcdENvbXBhcmF0b3JUeXBlLk5vdEVxdWFsLFxyXG5cdFx0XHRcdFx0XHRDb21wYXJhdG9yVHlwZS5JbixcclxuXHRcdFx0XHRcdFx0Q29tcGFyYXRvclR5cGUuTm90SW4sXHJcblx0XHRcdFx0XHRcdENvbXBhcmF0b3JUeXBlLkludmVyc2VJbixcclxuXHRcdFx0XHRcdFx0Q29tcGFyYXRvclR5cGUuSW52ZXJzZU5vdEluXTtcclxuXHRcdFx0Y2FzZSBVc2VyRmFjdFR5cGUuTGlzdE9mU3RyaW5nczpcclxuXHRcdFx0XHRyZXR1cm4gW0NvbXBhcmF0b3JUeXBlLkluLCBDb21wYXJhdG9yVHlwZS5Ob3RJbiwgQ29tcGFyYXRvclR5cGUuSW52ZXJzZUluLCBDb21wYXJhdG9yVHlwZS5JbnZlcnNlTm90SW5dO1xyXG5cdFx0XHRjYXNlIFVzZXJGYWN0VHlwZS5UaW1lSW50ZXJ2YWxJblNlY29uZHM6XHJcblx0XHRcdGNhc2UgVXNlckZhY3RUeXBlLkRhdGVUaW1lVVRDOlxyXG5cdFx0XHRjYXNlIFVzZXJGYWN0VHlwZS5OdW1iZXI6XHJcblx0XHRcdGNhc2UgVXNlckZhY3RUeXBlLkxpc3RGaWxlOlxyXG5cdFx0XHRcdHJldHVybiBjb21tb25Db21wYXJhdG9yVHlwZXM7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0YXNzZXJ0TmV2ZXIodXNlckZhY3RUeXBlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29tbW9uQ29tcGFyYXRvclR5cGVzO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVMYXRlbmN5VHlwZShsYXRlbmN5OiBVc2VyRmFjdExhdGVuY3lUeXBlKSB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsYXRlbmN5ID09PSBVc2VyRmFjdExhdGVuY3lUeXBlLk5vbmUgfHxcclxuXHRcdFx0bGF0ZW5jeSA9PT0gVXNlckZhY3RMYXRlbmN5VHlwZS5DbGllbnRJbmdlc3Rpb25EYXRlVGltZSB8fFxyXG5cdFx0XHRsYXRlbmN5ID09PSBVc2VyRmFjdExhdGVuY3lUeXBlLlNvdXJjZURhdGVUaW1lIHx8XHJcblx0XHRcdGxhdGVuY3kgPT09IFVzZXJGYWN0TGF0ZW5jeVR5cGUuU3RvcmFnZURhdGVUaW1lXHJcblx0XHQpID8gdHJ1ZSA6IGFzc2VydE5ldmVyKGxhdGVuY3kpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVVc2VyRmFjdFR5cGUoZmFjdFR5cGU6IFVzZXJGYWN0VHlwZSkge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0ZmFjdFR5cGUgPT09IFVzZXJGYWN0VHlwZS5Cb29sZWFuIHx8XHJcblx0XHRcdGZhY3RUeXBlID09PSBVc2VyRmFjdFR5cGUuRGF0ZVRpbWVVVEMgfHxcclxuXHRcdFx0ZmFjdFR5cGUgPT09IFVzZXJGYWN0VHlwZS5OdW1iZXIgfHxcclxuXHRcdFx0ZmFjdFR5cGUgPT09IFVzZXJGYWN0VHlwZS5TdHJpbmcgfHxcclxuXHRcdFx0ZmFjdFR5cGUgPT09IFVzZXJGYWN0VHlwZS5UaW1lSW50ZXJ2YWxJblNlY29uZHMgfHxcclxuXHRcdFx0ZmFjdFR5cGUgPT09IFVzZXJGYWN0VHlwZS5MaXN0T2ZTdHJpbmdzIHx8XHJcblx0XHRcdGZhY3RUeXBlID09PSBVc2VyRmFjdFR5cGUuTGlzdEZpbGVcclxuXHRcdCkgPyB0cnVlIDogYXNzZXJ0TmV2ZXIoZmFjdFR5cGUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBpbnB1dDogSVVzZXJGYWN0SW5wdXQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGlucHV0OiBJVXNlckZhY3RJbnB1dCkge1xyXG5cdFx0dGhpcy5pbnB1dCA9IGlucHV0O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGlzQU1hdGNoKHJhd1VzZXJGYWN0OiBJVXNlckZhY3QpOiBib29sZWFuIHtcclxuXHRcdGlmICghcmF3VXNlckZhY3QgfHwgIXJhd1VzZXJGYWN0LnVzZXJGYWN0VmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghdGhpcy5pc0xhdGVuY3lBY2NlcHRhYmxlKHJhd1VzZXJGYWN0KSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgZmFjdFR5cGUgPSB0aGlzLmdldFR5cGUoKTtcclxuXHRcdFx0aWYgKGZhY3RUeXBlID09PSBVc2VyRmFjdFR5cGUuQm9vbGVhbikge1xyXG5cdFx0XHRcdHJldHVybiBjb21wYXJlQm9vbGVhblZhbHVlcyh0aGlzLmdldFZhbHVlKCksIHJhd1VzZXJGYWN0LCB0aGlzLmdldENvbXBhcmF0b3IoKSk7XHJcblx0XHRcdH0gZWxzZSBpZiAoZmFjdFR5cGUgPT09IFVzZXJGYWN0VHlwZS5EYXRlVGltZVVUQykge1xyXG5cdFx0XHRcdHJldHVybiBjb21wYXJlRGF0ZVRpbWVVVENWYWx1ZXModGhpcy5nZXRWYWx1ZSgpIGFzIHN0cmluZywgcmF3VXNlckZhY3QsIHRoaXMuZ2V0Q29tcGFyYXRvcigpKTtcclxuXHRcdFx0fSBlbHNlIGlmIChmYWN0VHlwZSA9PT0gVXNlckZhY3RUeXBlLk51bWJlcikge1xyXG5cdFx0XHRcdHJldHVybiBjb21wYXJlTnVtYmVyVmFsdWVzKHRoaXMuZ2V0VmFsdWUoKSBhcyBudW1iZXIsIHJhd1VzZXJGYWN0LCB0aGlzLmdldENvbXBhcmF0b3IoKSk7XHJcblx0XHRcdH0gZWxzZSBpZiAoZmFjdFR5cGUgPT09IFVzZXJGYWN0VHlwZS5TdHJpbmcpIHtcclxuXHRcdFx0XHRyZXR1cm4gY29tcGFyZVN0cmluZ1ZhbHVlcyh0aGlzLmdldFZhbHVlKCkgYXMgc3RyaW5nLCByYXdVc2VyRmFjdCwgdGhpcy5nZXRDb21wYXJhdG9yKCkpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKGZhY3RUeXBlID09PSBVc2VyRmFjdFR5cGUuVGltZUludGVydmFsSW5TZWNvbmRzKSB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbXBhcmVUaW1lSW50ZXJ2YWxWYWx1ZXModGhpcy5nZXRWYWx1ZSgpIGFzIG51bWJlciwgcmF3VXNlckZhY3QsIHRoaXMuZ2V0Q29tcGFyYXRvcigpLCB0aGlzLmdldEludGVydmFsVHlwZSgpKTtcclxuXHRcdFx0fSBlbHNlIGlmIChmYWN0VHlwZSA9PT0gVXNlckZhY3RUeXBlLkxpc3RPZlN0cmluZ3MpIHtcclxuXHRcdFx0XHRyZXR1cm4gY29tcGFyZUxpc3RWYWx1ZXModGhpcy5nZXRWYWx1ZSgpIGFzIHVua25vd24gYXMgc3RyaW5nW10sIHJhd1VzZXJGYWN0LCB0aGlzLmdldENvbXBhcmF0b3IoKSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FcnJvcihcclxuXHRcdFx0XHRcdFRlbGVtZXRyeUV2ZW50LkZsb29kZ2F0ZS5Vc2VyRmFjdHNTcGVjSXNBTWF0Y2guRmFpbGVkLFxyXG5cdFx0XHRcdFx0YFVuc3VwcG9ydGVkIHR5cGUgb2YgdXNlciBmYWN0IHdhcyBwcm92aWRlZCAke2ZhY3RUeXBlfWApO1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FcnJvcihcclxuXHRcdFx0XHRUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGUuVXNlckZhY3RzU3BlY0lzQU1hdGNoLkZhaWxlZCxcclxuXHRcdFx0XHRlcnJvcik7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRUeXBlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW5wdXQuVHlwZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXROYW1lKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW5wdXQuTmFtZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRWYWx1ZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLmlucHV0LlZhbHVlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENvbXBhcmF0b3IoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pbnB1dC5Db21wYXJhdG9yIHx8IENvbXBhcmF0b3JUeXBlLkVxdWFsO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldExhdGVuY3lUeXBlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW5wdXQuTGF0ZW5jeVR5cGUgfHwgVXNlckZhY3RMYXRlbmN5VHlwZS5Ob25lO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldExhdGVuY3lEdXJhdGlvbkluU2Vjb25kcygpIHtcclxuXHRcdHJldHVybiB0aGlzLmlucHV0LkxhdGVuY3lEdXJhdGlvbkluU2Vjb25kcztcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRJbnRlcnZhbFR5cGUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pbnB1dC5JbnRlcnZhbFR5cGU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGlzTGF0ZW5jeUFjY2VwdGFibGUocmF3VXNlckZhY3Q6IElVc2VyRmFjdCkge1xyXG5cdFx0Y29uc3QgZmFjdFR5cGUgPSB0aGlzLmdldFR5cGUoKTtcclxuXHJcblx0XHRpZiAoIWlzTk9VKHRoaXMuZ2V0TGF0ZW5jeUR1cmF0aW9uSW5TZWNvbmRzKCkpICYmXHJcblx0XHRcdCFldmFsdWF0ZUZhY3RDYW5kaWRhY3kodGhpcy5nZXRMYXRlbmN5VHlwZSgpLCB0aGlzLmdldExhdGVuY3lEdXJhdGlvbkluU2Vjb25kcygpLCByYXdVc2VyRmFjdCkpIHtcclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FdmVudChcclxuXHRcdFx0XHRUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGUuVXNlckZhY3RzU3BlY0lzQU1hdGNoLk1pc21hdGNoLCB7XHJcblx0XHRcdFx0XHRFcnJvck1lc3NhZ2U6IGBMYXRlbmN5IGR1cmF0aW9uIG5vdCBhY2NlcHRhYmxlIC0geyBOYW1lOiBcIiR7cmF3VXNlckZhY3QudXNlckZhY3ROYW1lfVwiIH1gLFxyXG5cdFx0XHRcdFx0VGltZU1pbGxpc2Vjb25kczogdGhpcy5nZXRMYXRlbmN5RHVyYXRpb25JblNlY29uZHMoKSxcclxuXHRcdFx0XHRcdFR5cGU6IGAke2ZhY3RUeXBlfWAsXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0KTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gZXZhbHVhdGVGYWN0Q2FuZGlkYWN5KGxhdGVuY3lUeXBlOiBVc2VyRmFjdExhdGVuY3lUeXBlLCBsYXRlbmN5RHVyYXRpb25JblNlY29uZHM6IG51bWJlciwgdXNlckZhY3Q6IElVc2VyRmFjdCkge1xyXG5cdGxldCB1c2VyRmFjdFRpbWU6IHN0cmluZztcclxuXHRzd2l0Y2ggKGxhdGVuY3lUeXBlKSB7XHJcblx0XHRjYXNlIFVzZXJGYWN0TGF0ZW5jeVR5cGUuTm9uZTpcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFVzZXJGYWN0TGF0ZW5jeVR5cGUuU291cmNlRGF0ZVRpbWU6XHJcblx0XHRcdHVzZXJGYWN0VGltZSA9IHVzZXJGYWN0LnNvdXJjZURhdGVUaW1lO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgVXNlckZhY3RMYXRlbmN5VHlwZS5TdG9yYWdlRGF0ZVRpbWU6XHJcblx0XHRcdHVzZXJGYWN0VGltZSA9IHVzZXJGYWN0LnN0b3JhZ2VEYXRlVGltZTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFVzZXJGYWN0TGF0ZW5jeVR5cGUuQ2xpZW50SW5nZXN0aW9uRGF0ZVRpbWU6XHJcblx0XHRcdHVzZXJGYWN0VGltZSA9IHVzZXJGYWN0LmNsaWVudEluZ2VzdGlvbkRhdGVUaW1lO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGRlZmF1bHQ6XHJcblx0XHRcdGFzc2VydE5ldmVyKGxhdGVuY3lUeXBlKTtcclxuXHRcdH1cclxuXHJcblx0aWYgKCFpc05PVSh1c2VyRmFjdFRpbWUpKSB7XHJcblx0XHRjb25zdCB1c2VyRmFjdFRpbWVJbk1pbGxpc2Vjb25kcyA9IERhdGUucGFyc2UodXNlckZhY3RUaW1lKTtcclxuXHRcdGNvbnN0IGN1cnJlbnRUaW1lSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpO1xyXG5cclxuXHRcdHJldHVybiBjdXJyZW50VGltZUluTWlsbGlzZWNvbmRzIC0gdXNlckZhY3RUaW1lSW5NaWxsaXNlY29uZHMgPD0gKGxhdGVuY3lEdXJhdGlvbkluU2Vjb25kcyAqIDEwMDApO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBhcmVCb29sZWFuVmFsdWVzKHVzZXJGYWN0U3BlY1ZhbHVlOiBhbnksIHJhd1VzZXJGYWN0OiBJVXNlckZhY3QsIGNvbXBhcmF0b3I6IENvbXBhcmF0b3JUeXBlKSB7XHJcblx0Y29uc3QgcmF3VXNlckZhY3RWYWx1ZUluQm9vbGVhbiA9IEpTT04ucGFyc2UocmF3VXNlckZhY3QudXNlckZhY3RWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcclxuXHRyZXR1cm4gY29tcGFyZVZhbHVlcyghIXVzZXJGYWN0U3BlY1ZhbHVlLCAhIXJhd1VzZXJGYWN0VmFsdWVJbkJvb2xlYW4sIGNvbXBhcmF0b3IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb21wYXJlRGF0ZVRpbWVVVENWYWx1ZXModXNlckZhY3RTcGVjVmFsdWU6IHN0cmluZywgcmF3VXNlckZhY3Q6IElVc2VyRmFjdCwgY29tcGFyYXRvcjogQ29tcGFyYXRvclR5cGUpIHtcclxuXHRjb25zdCByYXdVc2VyRmFjdFZhbHVlSW5NaWxsaXNlY29uZHMgPSBEYXRlLnBhcnNlKHJhd1VzZXJGYWN0LnVzZXJGYWN0VmFsdWUpO1xyXG5cdGlmICghaXNBVmFsaWROdW1iZXIocmF3VXNlckZhY3RWYWx1ZUluTWlsbGlzZWNvbmRzLCByYXdVc2VyRmFjdC51c2VyRmFjdFZhbHVlLCByYXdVc2VyRmFjdC51c2VyRmFjdE5hbWUpKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cdGNvbnN0IHVzZXJGYWN0U3BlY1ZhbHVlSW5NaWxsaXNlY29uZHMgPSBEYXRlLnBhcnNlKHVzZXJGYWN0U3BlY1ZhbHVlKTtcclxuXHRpZiAoIWlzQVZhbGlkTnVtYmVyKHVzZXJGYWN0U3BlY1ZhbHVlSW5NaWxsaXNlY29uZHMsIHVzZXJGYWN0U3BlY1ZhbHVlLCBudWxsLCBVc2VyRmFjdFR5cGUuRGF0ZVRpbWVVVEMpKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gY29tcGFyZVZhbHVlcyh1c2VyRmFjdFNwZWNWYWx1ZUluTWlsbGlzZWNvbmRzLCByYXdVc2VyRmFjdFZhbHVlSW5NaWxsaXNlY29uZHMsIGNvbXBhcmF0b3IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb21wYXJlTnVtYmVyVmFsdWVzKHVzZXJGYWN0U3BlY1ZhbHVlOiBudW1iZXIsIHJhd1VzZXJGYWN0OiBJVXNlckZhY3QsIGNvbXBhcmF0b3I6IENvbXBhcmF0b3JUeXBlKSB7XHJcblx0Y29uc3QgcmF3VXNlckZhY3RWYWx1ZUluTnVtYmVyID0gcGFyc2VJbnQocmF3VXNlckZhY3QudXNlckZhY3RWYWx1ZSwgMTApO1xyXG5cdGlmICghaXNBVmFsaWROdW1iZXIocmF3VXNlckZhY3RWYWx1ZUluTnVtYmVyLCByYXdVc2VyRmFjdC51c2VyRmFjdFZhbHVlLCByYXdVc2VyRmFjdC51c2VyRmFjdE5hbWUpKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gY29tcGFyZVZhbHVlcyh1c2VyRmFjdFNwZWNWYWx1ZSwgcmF3VXNlckZhY3RWYWx1ZUluTnVtYmVyLCBjb21wYXJhdG9yKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29tcGFyZVN0cmluZ1ZhbHVlcyh1c2VyRmFjdFNwZWNWYWx1ZTogc3RyaW5nLCByYXdVc2VyRmFjdDogSVVzZXJGYWN0LCBjb21wYXJhdG9yOiBDb21wYXJhdG9yVHlwZSkge1xyXG5cdHJldHVybiBjb21wYXJlVmFsdWVzKHVzZXJGYWN0U3BlY1ZhbHVlLnRvTG93ZXJDYXNlKCksIHJhd1VzZXJGYWN0LnVzZXJGYWN0VmFsdWUudG9Mb3dlckNhc2UoKSwgY29tcGFyYXRvcik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBhcmVUaW1lSW50ZXJ2YWxWYWx1ZXMoXHJcblx0dXNlckZhY3RTcGVjVmFsdWU6IG51bWJlciwgcmF3VXNlckZhY3Q6IElVc2VyRmFjdCwgY29tcGFyYXRvcjogQ29tcGFyYXRvclR5cGUsIGludGVydmFsVHlwZTogQ3VycmVudFRpbWVJbnRlcnZhbFR5cGUpIHtcclxuXHRjb25zdCByYXdVc2VyRmFjdFZhbHVlSW5NaWxsaXNlY29uZHMgPSBEYXRlLnBhcnNlKHJhd1VzZXJGYWN0LnVzZXJGYWN0VmFsdWUpO1xyXG5cdGlmICghaXNBVmFsaWROdW1iZXIocmF3VXNlckZhY3RWYWx1ZUluTWlsbGlzZWNvbmRzLCByYXdVc2VyRmFjdC51c2VyRmFjdFZhbHVlLCByYXdVc2VyRmFjdC51c2VyRmFjdE5hbWUpKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBEaWZmIGZyb20gbm93IGFuZCB1c2VycyBpbnB1dCBkYXRlXHJcblx0Ly8gSW50ZXJ2YWxUbyAtIEludGVybnZhbCB0byBjdXJyZW50IGRhdGUgZnJvbSBmYWN0IGRhdGUgKGZhY3QgZGF0ZSBpcyBleHBlY3RlZCB0byBiZSBiZWZvcmUgY3VycmVudCBkYXRlKVxyXG5cdC8vIEludGVydmFsRnJvbSAtIEludGVydmFsIGZyb20gY3VycmVudCBkYXRlIHRvIGZhY3QgZGF0ZSAoZmFjdCBkYXRlIGlzIGV4cGVjdGVkIHRvIGJlIGFmdGVyIGN1cnJlbnQgZGF0ZSlcclxuXHRjb25zdCBjdXJyZW50VGltZUluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKTtcclxuXHRjb25zdCBjdXJyZW50RGF0ZURpZmYgPSBpbnRlcnZhbFR5cGUgPT09IEN1cnJlbnRUaW1lSW50ZXJ2YWxUeXBlLkludGVydmFsVG8gP1xyXG5cdFx0KGN1cnJlbnRUaW1lSW5NaWxsaXNlY29uZHMgLSByYXdVc2VyRmFjdFZhbHVlSW5NaWxsaXNlY29uZHMpIDogKHJhd1VzZXJGYWN0VmFsdWVJbk1pbGxpc2Vjb25kcyAtIGN1cnJlbnRUaW1lSW5NaWxsaXNlY29uZHMpO1xyXG5cdGlmIChjdXJyZW50RGF0ZURpZmYgPCAwKSB7XHJcblx0XHRGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCkubG9nX0V2ZW50KFxyXG5cdFx0XHRUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGUuVXNlckZhY3RzU3BlY0lzQU1hdGNoLk1pc21hdGNoLCB7XHJcblx0XHRcdFx0RXJyb3JNZXNzYWdlOiBgSW50ZXJ2YWwgdHlwZSBub3QgYWNjZXB0YWJsZSAtIHsgU3BlYzogJHt1c2VyRmFjdFNwZWNWYWx1ZX0sIE5hbWU6IFwiJHtyYXdVc2VyRmFjdC51c2VyRmFjdE5hbWV9XCIgfWAsXHJcblx0XHRcdFx0VGltZU1pbGxpc2Vjb25kczogY3VycmVudERhdGVEaWZmLFxyXG5cdFx0XHRcdFR5cGU6IGAke2ludGVydmFsVHlwZX1gLFxyXG5cdFx0XHR9LFxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRjb25zdCBkYXlJbk1pbGxpc2Vjb25kcyA9IDg2NDAwMDAwO1xyXG5cdGNvbnN0IHVzZXJGYWN0U3BlY1ZhbHVlSW5NaWxsaXNlY29uZHMgPSB1c2VyRmFjdFNwZWNWYWx1ZSAqIGRheUluTWlsbGlzZWNvbmRzO1xyXG5cclxuXHQvLyBjaGVjayBpZiB0aGUgYWJvdmUgZGlmZiBzYXRpc2ZpZXMgdGhlIGNvbXBhcmlzb24gY3JpdGVyaWFcclxuXHRyZXR1cm4gY29tcGFyZVZhbHVlcyh1c2VyRmFjdFNwZWNWYWx1ZUluTWlsbGlzZWNvbmRzLCBjdXJyZW50RGF0ZURpZmYsIGNvbXBhcmF0b3IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb21wYXJlTGlzdFZhbHVlczxUIGV4dGVuZHMgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcj4odXNlckZhY3RTcGVjVmFsdWU6IFRbXSwgcmF3VXNlckZhY3Q6IElVc2VyRmFjdCwgY29tcGFyYXRvcjogQ29tcGFyYXRvclR5cGUpIHtcclxuXHRyZXR1cm4gY29tcGFyZVZhbHVlcyh1c2VyRmFjdFNwZWNWYWx1ZSwgcmF3VXNlckZhY3QudXNlckZhY3RWYWx1ZSBhcyBULCBjb21wYXJhdG9yKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDb21wYXJhdG9yVHlwZVN1cHBvcnRlZChjb21wYXJhdG9yOiBDb21wYXJhdG9yVHlwZSwgc3VwcG9ydGVkQ29tcGFyYXRvclR5cGVzOiBDb21wYXJhdG9yVHlwZVtdKSB7XHJcblx0cmV0dXJuIHN1cHBvcnRlZENvbXBhcmF0b3JUeXBlcy5pbmRleE9mKGNvbXBhcmF0b3IpICE9PSAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29tcGFyZVZhbHVlczxUIGV4dGVuZHMgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcj4oXHJcblx0dXNlckZhY3RTcGVjVmFsdWU6IFQgfCBUW10sIHVzZXJGYWN0UmF3VmFsdWU6IFQsIGNvbXBhcmF0b3I6IENvbXBhcmF0b3JUeXBlKTogYm9vbGVhbiB7XHJcblx0c3dpdGNoIChjb21wYXJhdG9yKSB7XHJcblx0XHRjYXNlIENvbXBhcmF0b3JUeXBlLkVxdWFsOlxyXG5cdFx0XHRyZXR1cm4gdXNlckZhY3RSYXdWYWx1ZSA9PT0gdXNlckZhY3RTcGVjVmFsdWU7XHJcblx0XHRjYXNlIENvbXBhcmF0b3JUeXBlLk5vdEVxdWFsOlxyXG5cdFx0XHRyZXR1cm4gdXNlckZhY3RSYXdWYWx1ZSAhPT0gdXNlckZhY3RTcGVjVmFsdWU7XHJcblx0XHRjYXNlIENvbXBhcmF0b3JUeXBlLkdyZWF0ZXJUaGFuOlxyXG5cdFx0XHRyZXR1cm4gdXNlckZhY3RSYXdWYWx1ZSA+IHVzZXJGYWN0U3BlY1ZhbHVlO1xyXG5cdFx0Y2FzZSBDb21wYXJhdG9yVHlwZS5HcmVhdGVyVGhhbk9yRXF1YWw6XHJcblx0XHRcdHJldHVybiB1c2VyRmFjdFJhd1ZhbHVlID49IHVzZXJGYWN0U3BlY1ZhbHVlO1xyXG5cdFx0Y2FzZSBDb21wYXJhdG9yVHlwZS5MZXNzVGhhbjpcclxuXHRcdFx0cmV0dXJuIHVzZXJGYWN0UmF3VmFsdWUgPCB1c2VyRmFjdFNwZWNWYWx1ZTtcclxuXHRcdGNhc2UgQ29tcGFyYXRvclR5cGUuTGVzc1RoYW5PckVxdWFsOlxyXG5cdFx0XHRyZXR1cm4gdXNlckZhY3RSYXdWYWx1ZSA8PSB1c2VyRmFjdFNwZWNWYWx1ZTtcclxuXHRcdGNhc2UgQ29tcGFyYXRvclR5cGUuSW46XHJcblx0XHRcdHJldHVybiBpc0ZhY3RWYWx1ZUluVGFyZ2V0SXRlbSh1c2VyRmFjdFNwZWNWYWx1ZSwgdXNlckZhY3RSYXdWYWx1ZSk7XHJcblx0XHRjYXNlIENvbXBhcmF0b3JUeXBlLk5vdEluOlxyXG5cdFx0XHRyZXR1cm4gIWlzRmFjdFZhbHVlSW5UYXJnZXRJdGVtKHVzZXJGYWN0U3BlY1ZhbHVlLCB1c2VyRmFjdFJhd1ZhbHVlKTtcclxuXHRcdGNhc2UgQ29tcGFyYXRvclR5cGUuSW52ZXJzZUluOlxyXG5cdFx0XHRyZXR1cm4gaXNGYWN0VmFsdWVJblRhcmdldEl0ZW0odXNlckZhY3RSYXdWYWx1ZSwgdXNlckZhY3RTcGVjVmFsdWUgYXMgVCk7XHJcblx0XHRjYXNlIENvbXBhcmF0b3JUeXBlLkludmVyc2VOb3RJbjpcclxuXHRcdFx0cmV0dXJuICFpc0ZhY3RWYWx1ZUluVGFyZ2V0SXRlbSh1c2VyRmFjdFJhd1ZhbHVlLCB1c2VyRmFjdFNwZWNWYWx1ZSBhcyBUKTtcclxuXHRcdGRlZmF1bHQ6XHJcblx0XHRcdGFzc2VydE5ldmVyKGNvbXBhcmF0b3IpO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoXzogbmV2ZXIpIHtcclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRmFjdFZhbHVlSW5UYXJnZXRJdGVtPFQ+KHVzZXJGYWN0VGFyZ2V0VmFsdWVzOiBUIHwgVFtdLCB1c2VyRmFjdFJhd1ZhbHVlOiBUKTogYm9vbGVhbiB7XHJcblx0aWYgKHR5cGVvZiB1c2VyRmFjdFJhd1ZhbHVlID09PSBcInN0cmluZ1wiKSB7XHJcblx0XHRjb25zdCBmYWN0VmFsdWUgPSB1c2VyRmFjdFJhd1ZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRpZiAodHlwZW9mIHVzZXJGYWN0VGFyZ2V0VmFsdWVzID09PSBcInN0cmluZ1wiKSB7XHJcblx0XHRcdC8vIGJvdGggdGhlIGlucHV0cyBhcmUgc3RyaW5ncywgZG8gYSBwbGFpbiBpbmRleE9mXHJcblx0XHRcdHJldHVybiAodXNlckZhY3RUYXJnZXRWYWx1ZXMgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmFjdFZhbHVlKSAhPT0gLTE7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzQXJyYXkodXNlckZhY3RUYXJnZXRWYWx1ZXMpKSB7XHJcblx0XHRcdGNvbnN0IHNwZWNWYWx1ZXMgPSB1c2VyRmFjdFRhcmdldFZhbHVlcyBhcyBUW107XHJcblx0XHRcdHJldHVybiBzcGVjVmFsdWVzLnNvbWUoKHNwZWNWYWx1ZSkgPT4gc3BlY1ZhbHVlICYmIHNwZWNWYWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IGZhY3RWYWx1ZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpZiAoaXNBcnJheSh1c2VyRmFjdFRhcmdldFZhbHVlcykpIHtcclxuXHRcdHJldHVybiAodXNlckZhY3RUYXJnZXRWYWx1ZXMgYXMgVFtdKS5pbmRleE9mKHVzZXJGYWN0UmF3VmFsdWUpICE9PSAtMTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBVmFsaWROdW1iZXIobnVtYmVyVmFsdWU6IG51bWJlciwgdmFsdWU6IHN0cmluZywgcmF3VXNlckZhY3ROYW1lOiBzdHJpbmcsIGZhY3RUeXBlPzogVXNlckZhY3RUeXBlKSB7XHJcblx0aWYgKCFpc051bWJlcihudW1iZXJWYWx1ZSkpIHtcclxuXHRcdGxldCBlcnJvck1lc3NhZ2UgPSBgVXNlciBmYWN0ICR7cmF3VXNlckZhY3ROYW1lfSBoYXMgaW52YWxpZCB2YWx1ZSAke3ZhbHVlfWA7XHJcblx0XHRpZiAoZmFjdFR5cGUpIHtcclxuXHRcdFx0ZXJyb3JNZXNzYWdlID0gYEludmFsaWQgdmFsdWUgJHt2YWx1ZX0gd2FzIHByb3ZpZGVkIGZvciB1c2VyIGZhY3Qgb2YgdHlwZSAke2ZhY3RUeXBlfWA7XHJcblx0XHR9XHJcblxyXG5cdFx0Rmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpLmxvZ19FcnJvcihcclxuXHRcdFx0VGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlLlVzZXJGYWN0c1NwZWNJc0FNYXRjaC5GYWlsZWQsXHJcblx0XHRcdGVycm9yTWVzc2FnZSk7XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHRydWU7XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/UserFact/UserFact.js\n')},"../FloodgateCore/dist/src/UserFact/UserFactHelper.js":function(){"use strict";eval('\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.validateUserFacts = exports.deserializeUserFacts = void 0;\nvar UserFact_1 = __webpack_require__(/*! ./UserFact */ "../FloodgateCore/dist/src/UserFact/UserFact.js");\nexports.deserializeUserFacts = function (input) {\n    var userFacts = [];\n    for (var key in input.UserFacts) {\n        if (input.UserFacts.hasOwnProperty(key)) {\n            var userFactInput = input.UserFacts[key];\n            if (userFactInput) {\n                userFacts.push(UserFact_1.UserFact.deserialize(userFactInput));\n            }\n        }\n    }\n    if (userFacts.length === 0) {\n        userFacts = null;\n    }\n    return userFacts;\n};\nexports.validateUserFacts = function (userFacts) {\n    if (userFacts) {\n        for (var key in userFacts) {\n            if (userFacts.hasOwnProperty(key) && !userFacts[key]) {\n                return false;\n            }\n        }\n    }\n    return true;\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1VzZXJGYWN0L1VzZXJGYWN0SGVscGVyLnRzPzk4OGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUdBQXNDO0FBRXpCLDRCQUFvQixHQUFHLFVBQUMsS0FBVTtJQUM5QyxJQUFJLFNBQVMsR0FBZSxFQUFFLENBQUM7SUFDL0IsS0FBSyxJQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO1FBQ2xDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEMsSUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUUzQyxJQUFJLGFBQWEsRUFBRTtnQkFDbEIsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2FBQ3BEO1NBQ0Q7S0FDRDtJQUVELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDM0IsU0FBUyxHQUFHLElBQUksQ0FBQztLQUNqQjtJQUVELE9BQU8sU0FBUyxDQUFDO0FBRWxCLENBQUMsQ0FBQztBQUVXLHlCQUFpQixHQUFHLFVBQUMsU0FBcUI7SUFDdEQsSUFBSSxTQUFTLEVBQUU7UUFDZCxLQUFLLElBQU0sR0FBRyxJQUFJLFNBQVMsRUFBRTtZQUM1QixJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3JELE9BQU8sS0FBSyxDQUFDO2FBQ2I7U0FDRDtLQUNEO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDYixDQUFDLENBQUMiLCJmaWxlIjoiLi4vRmxvb2RnYXRlQ29yZS9kaXN0L3NyYy9Vc2VyRmFjdC9Vc2VyRmFjdEhlbHBlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJGYWN0IH0gZnJvbSBcIi4vVXNlckZhY3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBkZXNlcmlhbGl6ZVVzZXJGYWN0cyA9IChpbnB1dDogYW55KTogVXNlckZhY3RbXSA9PiB7XHJcblx0bGV0IHVzZXJGYWN0czogVXNlckZhY3RbXSA9IFtdO1xyXG5cdGZvciAoY29uc3Qga2V5IGluIGlucHV0LlVzZXJGYWN0cykge1xyXG5cdFx0aWYgKGlucHV0LlVzZXJGYWN0cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdGNvbnN0IHVzZXJGYWN0SW5wdXQgPSBpbnB1dC5Vc2VyRmFjdHNba2V5XTtcclxuXHJcblx0XHRcdGlmICh1c2VyRmFjdElucHV0KSB7XHJcblx0XHRcdFx0dXNlckZhY3RzLnB1c2goVXNlckZhY3QuZGVzZXJpYWxpemUodXNlckZhY3RJbnB1dCkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpZiAodXNlckZhY3RzLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0dXNlckZhY3RzID0gbnVsbDtcclxuXHR9XHJcblxyXG5cdHJldHVybiB1c2VyRmFjdHM7XHJcblxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVXNlckZhY3RzID0gKHVzZXJGYWN0czogVXNlckZhY3RbXSk6IGJvb2xlYW4gPT4ge1xyXG5cdGlmICh1c2VyRmFjdHMpIHtcclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHVzZXJGYWN0cykge1xyXG5cdFx0XHRpZiAodXNlckZhY3RzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVzZXJGYWN0c1trZXldKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/UserFact/UserFactHelper.js\n')},"../FloodgateCore/dist/src/Utils.js":function(){"use strict";eval('\n/*\n * Utils.ts\n *\n * Module for utility functions\n */\nObject.defineProperty(exports, "__esModule", { value: true });\nexports.findHighestPriorityDefinition = exports.safeParseObject = exports.isValidUserId = exports.fyShuffle = exports.dateToShortUtcString = exports.isUtcDatetimeString = exports.overrideValues = exports.stringToDate = exports.makeArrayFromObjectValuesSortedByKeyString = exports.guid = exports.extractLanguageSubtag = exports.isValidLanguageSubTag = exports.subtractSecondsWithoutOverflow = exports.addSecondsWithoutOverflow = exports.MIN_DATE_MILLISECONDS = exports.MAX_DATE_MILLISECONDS = exports.getDistantFuture = exports.getDistantPast = exports.isBoolean = exports.isString = exports.isArray = exports.isFunction = exports.isObject = exports.isNOU = exports.isNumber = exports.isEnumValue = exports.isDate = exports.timeAdd = void 0;\n/**\n * Add time to a given date\n * Example, timeAdd(new Date(), \'minute\', 5)  //returns 5 minutes from now\n * @param date  Date to start with\n * @param interval  One of: hour or h, minute or m, second or s\n * @param units  units of the given interval to add\n * @return date\n */\nfunction timeAdd(date, interval, units) {\n    switch (interval.toLowerCase()) {\n        case "h":\n        case "hour":\n            return new Date(date.getTime() + (units * 3600000));\n        case "m":\n        case "minute":\n            return new Date(date.getTime() + (units * 60000));\n        case "s":\n        case "second":\n            return new Date(date.getTime() + (units * 1000));\n        default:\n            throw new Error("Invalid interval value of " + interval);\n    }\n}\nexports.timeAdd = timeAdd;\n/**\n * Check if an input value is a valid date, null or undefined return false.\n * @param input  input value\n * @return boolean\n */\nfunction isDate(input) {\n    if (Object.prototype.toString.call(input) === "[object Date]") {\n        // it is a date\n        if (!(isNaN(input.getTime()))) {\n            return true;\n        }\n    }\n    return false;\n}\nexports.isDate = isDate;\n/**\n * Check if an input value is a valid value in the input enum\n * @param value  input value\n * @param input  input enum\n * Returns true if value exists in the enum\n */\nfunction isEnumValue(value, input) {\n    return (value in input);\n}\nexports.isEnumValue = isEnumValue;\n/**\n * Check if an input value is a number\n * @param value: input value\n */\nfunction isNumber(value) {\n    return (value !== null && !isNaN(value) && isFinite(value));\n}\nexports.isNumber = isNumber;\n/**\n * Check if an input value is null or undefined\n * @param value: input value\n */\nfunction isNOU(value) {\n    return (value === null || value === undefined);\n}\nexports.isNOU = isNOU;\n/**\n * Check if an input value is an object\n * @param value: input value\n */\nfunction isObject(value) {\n    return (value !== null && value !== undefined && (typeof value === "object"));\n}\nexports.isObject = isObject;\n/**\n * Check if an input value is an array\n * @param value: input value\n */\nfunction isFunction(value) {\n    return (value !== null && value !== undefined && (typeof value === "function"));\n}\nexports.isFunction = isFunction;\n/**\n * Check if an input value is an array\n * @param value: input value\n */\nfunction isArray(value) {\n    return (value !== null && value !== undefined && (Array.isArray(value)));\n}\nexports.isArray = isArray;\n/**\n * Check if given value is a string\n * @param {any} value value\n */\nfunction isString(value) {\n    return (typeof value === "string");\n}\nexports.isString = isString;\n/**\n * Check if value is an object\n * @param {any} value value\n */\nfunction isBoolean(value) {\n    return typeof (value) === "boolean";\n}\nexports.isBoolean = isBoolean;\n/**\n * Returns a lower temporal boundary\n * @return date\n */\nfunction getDistantPast() {\n    // Corresponds to UTC 1601-01-01T00:00:00Z\n    return new Date(-11644473600000);\n}\nexports.getDistantPast = getDistantPast;\n/**\n * Get an upper temporal boundary\n * @return date\n */\nfunction getDistantFuture() {\n    // Corresponds to UTC 4001-01-01T00:00:00Z\n    return new Date(64092211200000);\n}\nexports.getDistantFuture = getDistantFuture;\nexports.MAX_DATE_MILLISECONDS = 8640000000000000;\nexports.MIN_DATE_MILLISECONDS = -8640000000000000;\n/**\n * Adds seconds to a date, if overflows returns Date(Number.Max_VALUE)\n *\n * @param date    date to add to\n * @param seconds seconds as number\n * @return Resulting date\n */\nfunction addSecondsWithoutOverflow(date, seconds) {\n    if (!date) {\n        return null;\n    }\n    if (seconds < 0) {\n        return subtractSecondsWithoutOverflow(date, -1 * seconds);\n    }\n    else {\n        var milliseconds = date.getTime() + seconds * 1000;\n        if (milliseconds < exports.MAX_DATE_MILLISECONDS) {\n            return new Date(milliseconds);\n        }\n        else {\n            return new Date(exports.MAX_DATE_MILLISECONDS);\n        }\n    }\n}\nexports.addSecondsWithoutOverflow = addSecondsWithoutOverflow;\n/**\n * Subtracts seconds from a date, if overflows returns Date(Number.MIN_VALUE)\n *\n * @param date   date to subtract from\n * @param seconds seconds as number\n * @return Resulting date\n */\nfunction subtractSecondsWithoutOverflow(date, seconds) {\n    if (!date) {\n        return null;\n    }\n    if (seconds < 0) {\n        seconds = -seconds;\n        return this.addSecondsWithoutOverflow(date, seconds);\n    }\n    var milliseconds = date.getTime() - (seconds * 1000);\n    if (milliseconds > exports.MIN_DATE_MILLISECONDS) {\n        return new Date(milliseconds);\n    }\n    else {\n        return new Date(exports.MIN_DATE_MILLISECONDS);\n    }\n}\nexports.subtractSecondsWithoutOverflow = subtractSecondsWithoutOverflow;\n// region Language related\n/**\n * Effectively un-anchored on the right side because tags can have many more trailing sub-parts than we care to extract\n * Refer to https://www.ietf.org/rfc/rfc5646.txt\n */\nvar LANGUAGE_AND_SCRIPT_TAG_PATTERN = "^" +\n    // capture 1:language subtag\n    "(" +\n    "(?:[a-zA-Z]{2,3}(?:-[a-zA-Z]{3}){0,3})" + // 2-3 Alpha chars, followed by up to three optional extension tags, each of format -AAA, A=Alpha char\n    "|" +\n    "(?:[a-zA-Z]{4,8})" + // 4-Alpha chars (reserved in standard) or 5-8 Alpha chars\n    ")" +\n    "(?:" +\n    "-" +\n    // capture 2: optional script subtag (without leading dash), exactly 4 alpha chars\n    "([a-zA-Z]{4})" + // 4-Alpha chars\n    ")?" +\n    // capture 3: optional region subtag (without leading dash), exactly 2 alpha chars or 3 digits\n    "(?:-([a-zA-Z]{2}|[0-9]{3}))?" +\n    "(" +\n    // capture 4: any left-overs, rejecting remainder strings that don\'t end here or lead with a dash.\n    "-.*" +\n    ")?" +\n    "$";\nfunction isValidLanguageSubTag(subTag) {\n    if (!subTag) {\n        return false;\n    }\n    var extractedSubTag = extractLanguageSubtag(subTag);\n    if (!extractedSubTag) {\n        return false;\n    }\n    return extractedSubTag === subTag;\n}\nexports.isValidLanguageSubTag = isValidLanguageSubTag;\nfunction extractLanguageSubtag(language) {\n    if (!language) {\n        return null;\n    }\n    var matches = language.match(LANGUAGE_AND_SCRIPT_TAG_PATTERN);\n    if (!matches || matches.length < 1 || !isNOU(matches[4])) {\n        return null;\n    }\n    // return the first capture group which should be the original input if there is a match\n    // For example, "en-US" input should return "en-US", and "en" input should return "en".\n    return matches[0];\n}\nexports.extractLanguageSubtag = extractLanguageSubtag;\n// endregion\n/**\n * Create guid string\n */\nfunction guid() {\n    // Stitch in \'4\' in the third group\n    return (randomHex4() + randomHex4() + "-" + randomHex4() + "-4" + randomHex4().substr(0, 3) + "-" + randomHex4() + "-"\n        + randomHex4() + randomHex4() + randomHex4()).toLowerCase();\n}\nexports.guid = guid;\n/**\n * Create random Hex4 string\n */\nfunction randomHex4() {\n    return (Math.floor(((1 + Math.random()) * 0x10000))).toString(16).substring(1);\n}\n/**\n * Create an array from input object values sorted by object key\n * @param Object input object\n * @return array\n */\nfunction makeArrayFromObjectValuesSortedByKeyString(object) {\n    var keys = Object.keys(object);\n    keys.sort();\n    var values = [];\n    for (var id in keys) {\n        if (keys.hasOwnProperty(id)) {\n            var key = keys[id];\n            values.push(object[key]);\n        }\n    }\n    return values;\n}\nexports.makeArrayFromObjectValuesSortedByKeyString = makeArrayFromObjectValuesSortedByKeyString;\n/**\n * Create a date object from an input string\n * @param Object input string\n * @return date\n */\nfunction stringToDate(input) {\n    if (!isString(input)) {\n        return null;\n    }\n    var newDate = input ? new Date(input) : null;\n    return isDate(newDate) ? newDate : null;\n}\nexports.stringToDate = stringToDate;\n/**\n * Takes two objects (source, target) and returns the target object with values in the source added to it.\n * It overwrites any source properties which already exist in target.\n */\nfunction overrideValues(sourceObject, targetobject) {\n    if (!targetobject) {\n        return targetobject;\n    }\n    var result = targetobject;\n    if (sourceObject) {\n        for (var field in sourceObject) {\n            if (sourceObject.hasOwnProperty(field)) {\n                result[field] = sourceObject[field];\n            }\n        }\n    }\n    return result;\n}\nexports.overrideValues = overrideValues;\n/**\n * Test a string is in our supported ISO8601 UTC format of "yyyy-MM-ddTHH:mm:ssZ" and "yyyy-MM-ddTHH:mm:ss.fffZ"\n * @param input Input string to be evaluated.\n */\nfunction isUtcDatetimeString(input) {\n    if (!isString(input)) {\n        return false;\n    }\n    var supportedUtcRegex = /^(\\d{4}\\-\\d\\d\\-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d\\d\\d)?Z)$/;\n    return supportedUtcRegex.test(input);\n}\nexports.isUtcDatetimeString = isUtcDatetimeString;\n/**\n * Convert a date object to a string in ISO8601 UTC format supported by Floodgate ("yyyy-MM-ddTHH:mm:ssZ")\n * @param input Input date object\n */\nfunction dateToShortUtcString(input) {\n    if (!isDate(input)) {\n        return null;\n    }\n    function pad(n) {\n        return (n < 10) ? ("0" + n) : n.toString();\n    }\n    return input.getUTCFullYear() +\n        "-" + pad(input.getUTCMonth() + 1) +\n        "-" + pad(input.getUTCDate()) +\n        "T" + pad(input.getUTCHours()) +\n        ":" + pad(input.getUTCMinutes()) +\n        ":" + pad(input.getUTCSeconds()) +\n        "Z";\n}\nexports.dateToShortUtcString = dateToShortUtcString;\n/*\nImplementing the Fisher-Yates Shuffle\n(Shuffles in situ)\n*/\nfunction fyShuffle(arrIn) {\n    if (isNOU(arrIn)) {\n        return undefined;\n    }\n    // If the array is empty or has one element, do nothing.\n    if (arrIn.length === 0 || arrIn.length === 1) {\n        return arrIn;\n    }\n    var lastNonShuffledElement = arrIn.length - 1;\n    // While there is still a non shuffled element.\n    while (lastNonShuffledElement > 0) {\n        // Pick one of the non shuffled elements (num range [0,lastNonShuffledElement+1))\n        var pickIndex = Math.floor(Math.random() * (lastNonShuffledElement + 1));\n        // And swap it with the last non shuffled element\n        var temp = arrIn[lastNonShuffledElement];\n        arrIn[lastNonShuffledElement] = arrIn[pickIndex];\n        arrIn[pickIndex] = temp;\n        lastNonShuffledElement--;\n    }\n    return arrIn;\n}\nexports.fyShuffle = fyShuffle;\n/**\n * Check if value is an valid user id\n * One or two character before colon, a colon, and some word after colon.\n * @param {any} value value\n */\nfunction isValidUserId(value) {\n    if (!isString(value)) {\n        return false;\n    }\n    var supportedUserIdRegex = /^([a-z]{1,2}):\\w+/;\n    return supportedUserIdRegex.test(value);\n}\nexports.isValidUserId = isValidUserId;\n/**\n * Safely read an object\n */\nfunction safeParseObject(serializedValue, defaultValue) {\n    try {\n        var parsedObject = serializedValue && (serializedValue[0] === "{" || serializedValue[0] === "[")\n            ? JSON.parse(serializedValue)\n            : undefined;\n        return parsedObject !== null && parsedObject !== void 0 ? parsedObject : defaultValue;\n    }\n    catch (e) {\n        // ignore\n    }\n    return defaultValue;\n}\nexports.safeParseObject = safeParseObject;\n/**\n * Find the definition with highest priority\n */\nfunction findHighestPriorityDefinition(definitions) {\n    var hasLowerPriorityDefinitions = false;\n    // Get definition that has max priority value (0/null/undefined has highest prioirty)\n    var maxPriorityDefinition = definitions.reduce(function (prev, cur) {\n        var curPriority = cur.primaryPriority || 0;\n        var prevPriority = prev.primaryPriority || 0;\n        // check if we have lower priority (higher number)\n        if (curPriority !== prevPriority) {\n            hasLowerPriorityDefinitions = true;\n        }\n        return curPriority < prevPriority ? cur : prev;\n    });\n    return [maxPriorityDefinition, hasLowerPriorityDefinitions];\n}\nexports.findHighestPriorityDefinition = findHighestPriorityDefinition;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL1V0aWxzLnRzP2NmZTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQUlIOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixPQUFPLENBQUMsSUFBVSxFQUFFLFFBQWdCLEVBQUUsS0FBYTtJQUNsRSxRQUFRLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRTtRQUMvQixLQUFLLEdBQUcsQ0FBQztRQUNULEtBQUssTUFBTTtZQUNWLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDckQsS0FBSyxHQUFHLENBQUM7UUFDVCxLQUFLLFFBQVE7WUFDWixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25ELEtBQUssR0FBRyxDQUFDO1FBQ1QsS0FBSyxRQUFRO1lBQ1osT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRDtZQUNDLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLEdBQUcsUUFBUSxDQUFDLENBQUM7S0FDMUQ7QUFDRixDQUFDO0FBZEQsMEJBY0M7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsTUFBTSxDQUFDLEtBQVU7SUFDaEMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssZUFBZSxFQUFFO1FBQzlELGVBQWU7UUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQztTQUNaO0tBQ0Q7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNkLENBQUM7QUFSRCx3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Z0JDIiwiZmlsZSI6Ii4uL0Zsb29kZ2F0ZUNvcmUvZGlzdC9zcmMvVXRpbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBVdGlscy50c1xyXG4gKlxyXG4gKiBNb2R1bGUgZm9yIHV0aWxpdHkgZnVuY3Rpb25zXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ2FtcGFpZ25EZWZpbml0aW9uIH0gZnJvbSBcIi4vQ2FtcGFpZ24vQ2FtcGFpZ25EZWZpbml0aW9uUHJvdmlkZXJcIjtcclxuXHJcbi8qKlxyXG4gKiBBZGQgdGltZSB0byBhIGdpdmVuIGRhdGVcclxuICogRXhhbXBsZSwgdGltZUFkZChuZXcgRGF0ZSgpLCAnbWludXRlJywgNSkgIC8vcmV0dXJucyA1IG1pbnV0ZXMgZnJvbSBub3dcclxuICogQHBhcmFtIGRhdGUgIERhdGUgdG8gc3RhcnQgd2l0aFxyXG4gKiBAcGFyYW0gaW50ZXJ2YWwgIE9uZSBvZjogaG91ciBvciBoLCBtaW51dGUgb3IgbSwgc2Vjb25kIG9yIHNcclxuICogQHBhcmFtIHVuaXRzICB1bml0cyBvZiB0aGUgZ2l2ZW4gaW50ZXJ2YWwgdG8gYWRkXHJcbiAqIEByZXR1cm4gZGF0ZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVBZGQoZGF0ZTogRGF0ZSwgaW50ZXJ2YWw6IHN0cmluZywgdW5pdHM6IG51bWJlcik6IERhdGUge1xyXG5cdHN3aXRjaCAoaW50ZXJ2YWwudG9Mb3dlckNhc2UoKSkge1xyXG5cdFx0Y2FzZSBcImhcIjpcclxuXHRcdGNhc2UgXCJob3VyXCI6XHJcblx0XHRcdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArICh1bml0cyAqIDM2MDAwMDApKTtcclxuXHRcdGNhc2UgXCJtXCI6XHJcblx0XHRjYXNlIFwibWludXRlXCI6XHJcblx0XHRcdHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArICh1bml0cyAqIDYwMDAwKSk7XHJcblx0XHRjYXNlIFwic1wiOlxyXG5cdFx0Y2FzZSBcInNlY29uZFwiOlxyXG5cdFx0XHRyZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgKyAodW5pdHMgKiAxMDAwKSk7XHJcblx0XHRkZWZhdWx0OlxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGludGVydmFsIHZhbHVlIG9mIFwiICsgaW50ZXJ2YWwpO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIGFuIGlucHV0IHZhbHVlIGlzIGEgdmFsaWQgZGF0ZSwgbnVsbCBvciB1bmRlZmluZWQgcmV0dXJuIGZhbHNlLlxyXG4gKiBAcGFyYW0gaW5wdXQgIGlucHV0IHZhbHVlXHJcbiAqIEByZXR1cm4gYm9vbGVhblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZShpbnB1dDogYW55KTogYm9vbGVhbiB7XHJcblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09IFwiW29iamVjdCBEYXRlXVwiKSB7XHJcblx0XHQvLyBpdCBpcyBhIGRhdGVcclxuXHRcdGlmICghKGlzTmFOKGlucHV0LmdldFRpbWUoKSkpKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhbiBpbnB1dCB2YWx1ZSBpcyBhIHZhbGlkIHZhbHVlIGluIHRoZSBpbnB1dCBlbnVtXHJcbiAqIEBwYXJhbSB2YWx1ZSAgaW5wdXQgdmFsdWVcclxuICogQHBhcmFtIGlucHV0ICBpbnB1dCBlbnVtXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBleGlzdHMgaW4gdGhlIGVudW1cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0VudW1WYWx1ZSh2YWx1ZTogYW55LCBpbnB1dDogYW55KTogYm9vbGVhbiB7XHJcblx0cmV0dXJuICh2YWx1ZSBpbiBpbnB1dCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhbiBpbnB1dCB2YWx1ZSBpcyBhIG51bWJlclxyXG4gKiBAcGFyYW0gdmFsdWU6IGlucHV0IHZhbHVlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG5cdHJldHVybiAodmFsdWUgIT09IG51bGwgJiYgIWlzTmFOKHZhbHVlKSAmJiBpc0Zpbml0ZSh2YWx1ZSkpO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgYW4gaW5wdXQgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWRcclxuICogQHBhcmFtIHZhbHVlOiBpbnB1dCB2YWx1ZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTk9VKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuXHRyZXR1cm4gKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgYW4gaW5wdXQgdmFsdWUgaXMgYW4gb2JqZWN0XHJcbiAqIEBwYXJhbSB2YWx1ZTogaW5wdXQgdmFsdWVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcblx0cmV0dXJuICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIGFuIGlucHV0IHZhbHVlIGlzIGFuIGFycmF5XHJcbiAqIEBwYXJhbSB2YWx1ZTogaW5wdXQgdmFsdWVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuXHRyZXR1cm4gKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhbiBpbnB1dCB2YWx1ZSBpcyBhbiBhcnJheVxyXG4gKiBAcGFyYW0gdmFsdWU6IGlucHV0IHZhbHVlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcblx0cmV0dXJuICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIChBcnJheS5pc0FycmF5KHZhbHVlKSkpO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gdmFsdWUgaXMgYSBzdHJpbmdcclxuICogQHBhcmFtIHthbnl9IHZhbHVlIHZhbHVlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG5cdHJldHVybiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGFuIG9iamVjdFxyXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgdmFsdWVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG5cdHJldHVybiB0eXBlb2YgKHZhbHVlKSA9PT0gXCJib29sZWFuXCI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgbG93ZXIgdGVtcG9yYWwgYm91bmRhcnlcclxuICogQHJldHVybiBkYXRlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGFudFBhc3QoKTogRGF0ZSB7XHJcblx0Ly8gQ29ycmVzcG9uZHMgdG8gVVRDIDE2MDEtMDEtMDFUMDA6MDA6MDBaXHJcblx0cmV0dXJuIG5ldyBEYXRlKC0xMTY0NDQ3MzYwMDAwMCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgYW4gdXBwZXIgdGVtcG9yYWwgYm91bmRhcnlcclxuICogQHJldHVybiBkYXRlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGFudEZ1dHVyZSgpOiBEYXRlIHtcclxuXHQvLyBDb3JyZXNwb25kcyB0byBVVEMgNDAwMS0wMS0wMVQwMDowMDowMFpcclxuXHRyZXR1cm4gbmV3IERhdGUoNjQwOTIyMTEyMDAwMDApO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgTUFYX0RBVEVfTUlMTElTRUNPTkRTOiBudW1iZXIgPSA4NjQwMDAwMDAwMDAwMDAwO1xyXG5leHBvcnQgY29uc3QgTUlOX0RBVEVfTUlMTElTRUNPTkRTOiBudW1iZXIgPSAtODY0MDAwMDAwMDAwMDAwMDtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIHNlY29uZHMgdG8gYSBkYXRlLCBpZiBvdmVyZmxvd3MgcmV0dXJucyBEYXRlKE51bWJlci5NYXhfVkFMVUUpXHJcbiAqXHJcbiAqIEBwYXJhbSBkYXRlICAgIGRhdGUgdG8gYWRkIHRvXHJcbiAqIEBwYXJhbSBzZWNvbmRzIHNlY29uZHMgYXMgbnVtYmVyXHJcbiAqIEByZXR1cm4gUmVzdWx0aW5nIGRhdGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBhZGRTZWNvbmRzV2l0aG91dE92ZXJmbG93KGRhdGU6IERhdGUsIHNlY29uZHM6IG51bWJlcik6IERhdGUge1xyXG5cdGlmICghZGF0ZSkge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRpZiAoc2Vjb25kcyA8IDApIHtcclxuXHRcdHJldHVybiBzdWJ0cmFjdFNlY29uZHNXaXRob3V0T3ZlcmZsb3coZGF0ZSwgLTEgKiBzZWNvbmRzKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Y29uc3QgbWlsbGlzZWNvbmRzOiBudW1iZXIgPSBkYXRlLmdldFRpbWUoKSArIHNlY29uZHMgKiAxMDAwO1xyXG5cclxuXHRcdGlmIChtaWxsaXNlY29uZHMgPCBNQVhfREFURV9NSUxMSVNFQ09ORFMpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBEYXRlKG1pbGxpc2Vjb25kcyk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gbmV3IERhdGUoTUFYX0RBVEVfTUlMTElTRUNPTkRTKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdHMgc2Vjb25kcyBmcm9tIGEgZGF0ZSwgaWYgb3ZlcmZsb3dzIHJldHVybnMgRGF0ZShOdW1iZXIuTUlOX1ZBTFVFKVxyXG4gKlxyXG4gKiBAcGFyYW0gZGF0ZSAgIGRhdGUgdG8gc3VidHJhY3QgZnJvbVxyXG4gKiBAcGFyYW0gc2Vjb25kcyBzZWNvbmRzIGFzIG51bWJlclxyXG4gKiBAcmV0dXJuIFJlc3VsdGluZyBkYXRlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3RTZWNvbmRzV2l0aG91dE92ZXJmbG93KGRhdGU6IERhdGUsIHNlY29uZHM6IG51bWJlcik6IERhdGUge1xyXG5cdGlmICghZGF0ZSkge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRpZiAoc2Vjb25kcyA8IDApIHtcclxuXHRcdHNlY29uZHMgPSAtc2Vjb25kcztcclxuXHRcdHJldHVybiB0aGlzLmFkZFNlY29uZHNXaXRob3V0T3ZlcmZsb3coZGF0ZSwgc2Vjb25kcyk7XHJcblx0fVxyXG5cclxuXHRjb25zdCBtaWxsaXNlY29uZHM6IG51bWJlciA9IGRhdGUuZ2V0VGltZSgpIC0gKHNlY29uZHMgKiAxMDAwKTtcclxuXHJcblx0aWYgKG1pbGxpc2Vjb25kcyA+IE1JTl9EQVRFX01JTExJU0VDT05EUykge1xyXG5cdFx0cmV0dXJuIG5ldyBEYXRlKG1pbGxpc2Vjb25kcyk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiBuZXcgRGF0ZShNSU5fREFURV9NSUxMSVNFQ09ORFMpO1xyXG5cdH1cclxufVxyXG5cclxuLy8gcmVnaW9uIExhbmd1YWdlIHJlbGF0ZWRcclxuXHJcbi8qKlxyXG4gKiBFZmZlY3RpdmVseSB1bi1hbmNob3JlZCBvbiB0aGUgcmlnaHQgc2lkZSBiZWNhdXNlIHRhZ3MgY2FuIGhhdmUgbWFueSBtb3JlIHRyYWlsaW5nIHN1Yi1wYXJ0cyB0aGFuIHdlIGNhcmUgdG8gZXh0cmFjdFxyXG4gKiBSZWZlciB0byBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNTY0Ni50eHRcclxuICovXHJcbmNvbnN0IExBTkdVQUdFX0FORF9TQ1JJUFRfVEFHX1BBVFRFUk46IHN0cmluZyA9XHJcblx0XCJeXCIgK1xyXG5cdC8vIGNhcHR1cmUgMTpsYW5ndWFnZSBzdWJ0YWdcclxuXHRcIihcIiArXHJcblx0XCIoPzpbYS16QS1aXXsyLDN9KD86LVthLXpBLVpdezN9KXswLDN9KVwiICsgIC8vIDItMyBBbHBoYSBjaGFycywgZm9sbG93ZWQgYnkgdXAgdG8gdGhyZWUgb3B0aW9uYWwgZXh0ZW5zaW9uIHRhZ3MsIGVhY2ggb2YgZm9ybWF0IC1BQUEsIEE9QWxwaGEgY2hhclxyXG5cdFwifFwiICtcclxuXHRcIig/OlthLXpBLVpdezQsOH0pXCIgKyAgICAgICAgICAgICAgICAgICAgICAgLy8gNC1BbHBoYSBjaGFycyAocmVzZXJ2ZWQgaW4gc3RhbmRhcmQpIG9yIDUtOCBBbHBoYSBjaGFyc1xyXG5cdFwiKVwiICtcclxuXHRcIig/OlwiICtcclxuXHRcIi1cIiArXHJcblx0Ly8gY2FwdHVyZSAyOiBvcHRpb25hbCBzY3JpcHQgc3VidGFnICh3aXRob3V0IGxlYWRpbmcgZGFzaCksIGV4YWN0bHkgNCBhbHBoYSBjaGFyc1xyXG5cdFwiKFthLXpBLVpdezR9KVwiICsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0LUFscGhhIGNoYXJzXHJcblx0XCIpP1wiICtcclxuXHQvLyBjYXB0dXJlIDM6IG9wdGlvbmFsIHJlZ2lvbiBzdWJ0YWcgKHdpdGhvdXQgbGVhZGluZyBkYXNoKSwgZXhhY3RseSAyIGFscGhhIGNoYXJzIG9yIDMgZGlnaXRzXHJcblx0XCIoPzotKFthLXpBLVpdezJ9fFswLTldezN9KSk/XCIgK1xyXG5cdFwiKFwiICtcclxuXHQvLyBjYXB0dXJlIDQ6IGFueSBsZWZ0LW92ZXJzLCByZWplY3RpbmcgcmVtYWluZGVyIHN0cmluZ3MgdGhhdCBkb24ndCBlbmQgaGVyZSBvciBsZWFkIHdpdGggYSBkYXNoLlxyXG5cdFwiLS4qXCIgK1xyXG5cdFwiKT9cIiArXHJcblx0XCIkXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZExhbmd1YWdlU3ViVGFnKHN1YlRhZzogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0aWYgKCFzdWJUYWcpIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGNvbnN0IGV4dHJhY3RlZFN1YlRhZzogc3RyaW5nID0gZXh0cmFjdExhbmd1YWdlU3VidGFnKHN1YlRhZyk7XHJcblx0aWYgKCFleHRyYWN0ZWRTdWJUYWcpIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBleHRyYWN0ZWRTdWJUYWcgPT09IHN1YlRhZztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMYW5ndWFnZVN1YnRhZyhsYW5ndWFnZTogc3RyaW5nKTogc3RyaW5nIHtcclxuXHRpZiAoIWxhbmd1YWdlKSB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdGNvbnN0IG1hdGNoZXMgPSBsYW5ndWFnZS5tYXRjaChMQU5HVUFHRV9BTkRfU0NSSVBUX1RBR19QQVRURVJOKTtcclxuXHRpZiAoIW1hdGNoZXMgfHwgbWF0Y2hlcy5sZW5ndGggPCAxIHx8ICFpc05PVShtYXRjaGVzWzRdKSkge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHQvLyByZXR1cm4gdGhlIGZpcnN0IGNhcHR1cmUgZ3JvdXAgd2hpY2ggc2hvdWxkIGJlIHRoZSBvcmlnaW5hbCBpbnB1dCBpZiB0aGVyZSBpcyBhIG1hdGNoXHJcblx0Ly8gRm9yIGV4YW1wbGUsIFwiZW4tVVNcIiBpbnB1dCBzaG91bGQgcmV0dXJuIFwiZW4tVVNcIiwgYW5kIFwiZW5cIiBpbnB1dCBzaG91bGQgcmV0dXJuIFwiZW5cIi5cclxuXHRyZXR1cm4gbWF0Y2hlc1swXTtcclxufVxyXG5cclxuLy8gZW5kcmVnaW9uXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGd1aWQgc3RyaW5nXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ3VpZCgpOiBzdHJpbmcge1xyXG5cdC8vIFN0aXRjaCBpbiAnNCcgaW4gdGhlIHRoaXJkIGdyb3VwXHJcblx0cmV0dXJuIChyYW5kb21IZXg0KCkgKyByYW5kb21IZXg0KCkgKyBcIi1cIiArIHJhbmRvbUhleDQoKSArIFwiLTRcIiArIHJhbmRvbUhleDQoKS5zdWJzdHIoMCwgMykgKyBcIi1cIiArIHJhbmRvbUhleDQoKSArIFwiLVwiXHJcblx0XHQrIHJhbmRvbUhleDQoKSArIHJhbmRvbUhleDQoKSArIHJhbmRvbUhleDQoKSkudG9Mb3dlckNhc2UoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSByYW5kb20gSGV4NCBzdHJpbmdcclxuICovXHJcbmZ1bmN0aW9uIHJhbmRvbUhleDQoKTogc3RyaW5nIHtcclxuXHRyZXR1cm4gKE1hdGguZmxvb3IoKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKSkpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gYXJyYXkgZnJvbSBpbnB1dCBvYmplY3QgdmFsdWVzIHNvcnRlZCBieSBvYmplY3Qga2V5XHJcbiAqIEBwYXJhbSBPYmplY3QgaW5wdXQgb2JqZWN0XHJcbiAqIEByZXR1cm4gYXJyYXlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtYWtlQXJyYXlGcm9tT2JqZWN0VmFsdWVzU29ydGVkQnlLZXlTdHJpbmcob2JqZWN0OiBvYmplY3QpOiBhbnlbXSB7XHJcblx0Y29uc3Qga2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhvYmplY3QpO1xyXG5cdGtleXMuc29ydCgpO1xyXG5cclxuXHRjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XHJcblx0Zm9yIChjb25zdCBpZCBpbiBrZXlzKSB7XHJcblx0XHRpZiAoa2V5cy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcclxuXHRcdFx0Y29uc3Qga2V5OiBzdHJpbmcgPSBrZXlzW2lkXTtcclxuXHRcdFx0dmFsdWVzLnB1c2gob2JqZWN0W2tleV0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHZhbHVlcztcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGRhdGUgb2JqZWN0IGZyb20gYW4gaW5wdXQgc3RyaW5nXHJcbiAqIEBwYXJhbSBPYmplY3QgaW5wdXQgc3RyaW5nXHJcbiAqIEByZXR1cm4gZGF0ZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvRGF0ZShpbnB1dDogYW55KTogRGF0ZSB7XHJcblx0aWYgKCFpc1N0cmluZyhpbnB1dCkpIHtcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgbmV3RGF0ZTogRGF0ZSA9IGlucHV0ID8gbmV3IERhdGUoaW5wdXQpIDogbnVsbDtcclxuXHRyZXR1cm4gaXNEYXRlKG5ld0RhdGUpID8gbmV3RGF0ZSA6IG51bGw7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUYWtlcyB0d28gb2JqZWN0cyAoc291cmNlLCB0YXJnZXQpIGFuZCByZXR1cm5zIHRoZSB0YXJnZXQgb2JqZWN0IHdpdGggdmFsdWVzIGluIHRoZSBzb3VyY2UgYWRkZWQgdG8gaXQuXHJcbiAqIEl0IG92ZXJ3cml0ZXMgYW55IHNvdXJjZSBwcm9wZXJ0aWVzIHdoaWNoIGFscmVhZHkgZXhpc3QgaW4gdGFyZ2V0LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG92ZXJyaWRlVmFsdWVzPFQ+KHNvdXJjZU9iamVjdDogVCwgdGFyZ2V0b2JqZWN0OiBUKTogVCB7XHJcblx0aWYgKCF0YXJnZXRvYmplY3QpIHtcclxuXHRcdHJldHVybiB0YXJnZXRvYmplY3Q7XHJcblx0fVxyXG5cclxuXHRjb25zdCByZXN1bHQ6IFQgPSB0YXJnZXRvYmplY3Q7XHJcblxyXG5cdGlmIChzb3VyY2VPYmplY3QpIHtcclxuXHRcdGZvciAoY29uc3QgZmllbGQgaW4gc291cmNlT2JqZWN0KSB7XHJcblx0XHRcdGlmIChzb3VyY2VPYmplY3QuaGFzT3duUHJvcGVydHkoZmllbGQpKSB7XHJcblx0XHRcdFx0KHJlc3VsdCBhcyBhbnkpW2ZpZWxkXSA9IChzb3VyY2VPYmplY3QgYXMgYW55KVtmaWVsZF07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUZXN0IGEgc3RyaW5nIGlzIGluIG91ciBzdXBwb3J0ZWQgSVNPODYwMSBVVEMgZm9ybWF0IG9mIFwieXl5eS1NTS1kZFRISDptbTpzc1pcIiBhbmQgXCJ5eXl5LU1NLWRkVEhIOm1tOnNzLmZmZlpcIlxyXG4gKiBAcGFyYW0gaW5wdXQgSW5wdXQgc3RyaW5nIHRvIGJlIGV2YWx1YXRlZC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1V0Y0RhdGV0aW1lU3RyaW5nKGlucHV0OiBhbnkpOiBib29sZWFuIHtcclxuXHRpZiAoIWlzU3RyaW5nKGlucHV0KSkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Y29uc3Qgc3VwcG9ydGVkVXRjUmVnZXggPSAvXihcXGR7NH1cXC1cXGRcXGRcXC1cXGRcXGRUXFxkXFxkOlxcZFxcZDpcXGRcXGQoXFwuXFxkXFxkXFxkKT9aKSQvO1xyXG5cdHJldHVybiBzdXBwb3J0ZWRVdGNSZWdleC50ZXN0KGlucHV0KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgYSBkYXRlIG9iamVjdCB0byBhIHN0cmluZyBpbiBJU084NjAxIFVUQyBmb3JtYXQgc3VwcG9ydGVkIGJ5IEZsb29kZ2F0ZSAoXCJ5eXl5LU1NLWRkVEhIOm1tOnNzWlwiKVxyXG4gKiBAcGFyYW0gaW5wdXQgSW5wdXQgZGF0ZSBvYmplY3RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkYXRlVG9TaG9ydFV0Y1N0cmluZyhpbnB1dDogRGF0ZSk6IHN0cmluZyB7XHJcblx0aWYgKCFpc0RhdGUoaW5wdXQpKSB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHBhZChuOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIChuIDwgMTApID8gKFwiMFwiICsgbikgOiBuLnRvU3RyaW5nKCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gaW5wdXQuZ2V0VVRDRnVsbFllYXIoKSArXHJcblx0XHRcIi1cIiArIHBhZChpbnB1dC5nZXRVVENNb250aCgpICsgMSkgK1xyXG5cdFx0XCItXCIgKyBwYWQoaW5wdXQuZ2V0VVRDRGF0ZSgpKSArXHJcblx0XHRcIlRcIiArIHBhZChpbnB1dC5nZXRVVENIb3VycygpKSArXHJcblx0XHRcIjpcIiArIHBhZChpbnB1dC5nZXRVVENNaW51dGVzKCkpICtcclxuXHRcdFwiOlwiICsgcGFkKGlucHV0LmdldFVUQ1NlY29uZHMoKSkgK1xyXG5cdFx0XCJaXCI7XHJcbn1cclxuXHJcbi8qXHJcbkltcGxlbWVudGluZyB0aGUgRmlzaGVyLVlhdGVzIFNodWZmbGVcclxuKFNodWZmbGVzIGluIHNpdHUpXHJcbiovXHJcbmV4cG9ydCBmdW5jdGlvbiBmeVNodWZmbGUoYXJySW46IG51bWJlcltdKTogbnVtYmVyW10gfCB1bmRlZmluZWQge1xyXG5cclxuXHRpZiAoaXNOT1UoYXJySW4pKSB7XHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0Ly8gSWYgdGhlIGFycmF5IGlzIGVtcHR5IG9yIGhhcyBvbmUgZWxlbWVudCwgZG8gbm90aGluZy5cclxuXHRpZiAoYXJySW4ubGVuZ3RoID09PSAwIHx8IGFyckluLmxlbmd0aCA9PT0gMSkge1xyXG5cdFx0cmV0dXJuIGFyckluO1xyXG5cdH1cclxuXHJcblx0bGV0IGxhc3ROb25TaHVmZmxlZEVsZW1lbnQgPSBhcnJJbi5sZW5ndGggLSAxO1xyXG5cclxuXHQvLyBXaGlsZSB0aGVyZSBpcyBzdGlsbCBhIG5vbiBzaHVmZmxlZCBlbGVtZW50LlxyXG5cdHdoaWxlIChsYXN0Tm9uU2h1ZmZsZWRFbGVtZW50ID4gMCkge1xyXG5cclxuXHRcdC8vIFBpY2sgb25lIG9mIHRoZSBub24gc2h1ZmZsZWQgZWxlbWVudHMgKG51bSByYW5nZSBbMCxsYXN0Tm9uU2h1ZmZsZWRFbGVtZW50KzEpKVxyXG5cdFx0Y29uc3QgcGlja0luZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGxhc3ROb25TaHVmZmxlZEVsZW1lbnQgKyAxKSk7XHJcblxyXG5cdFx0Ly8gQW5kIHN3YXAgaXQgd2l0aCB0aGUgbGFzdCBub24gc2h1ZmZsZWQgZWxlbWVudFxyXG5cdFx0Y29uc3QgdGVtcCA9IGFyckluW2xhc3ROb25TaHVmZmxlZEVsZW1lbnRdO1xyXG5cdFx0YXJySW5bbGFzdE5vblNodWZmbGVkRWxlbWVudF0gPSBhcnJJbltwaWNrSW5kZXhdO1xyXG5cdFx0YXJySW5bcGlja0luZGV4XSA9IHRlbXA7XHJcblxyXG5cdFx0bGFzdE5vblNodWZmbGVkRWxlbWVudC0tO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGFyckluO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgaXMgYW4gdmFsaWQgdXNlciBpZFxyXG4gKiBPbmUgb3IgdHdvIGNoYXJhY3RlciBiZWZvcmUgY29sb24sIGEgY29sb24sIGFuZCBzb21lIHdvcmQgYWZ0ZXIgY29sb24uXHJcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSB2YWx1ZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRVc2VySWQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG5cdGlmICghaXNTdHJpbmcodmFsdWUpKSB7XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRjb25zdCBzdXBwb3J0ZWRVc2VySWRSZWdleCA9IC9eKFthLXpdezEsMn0pOlxcdysvO1xyXG5cdHJldHVybiBzdXBwb3J0ZWRVc2VySWRSZWdleC50ZXN0KHZhbHVlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNhZmVseSByZWFkIGFuIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVQYXJzZU9iamVjdDxUPihzZXJpYWxpemVkVmFsdWU6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogVCk6IFQge1xyXG5cdHRyeSB7XHJcblx0XHRjb25zdCBwYXJzZWRPYmplY3QgPSBzZXJpYWxpemVkVmFsdWUgJiYgKHNlcmlhbGl6ZWRWYWx1ZVswXSA9PT0gXCJ7XCIgfHwgc2VyaWFsaXplZFZhbHVlWzBdID09PSBcIltcIilcclxuXHRcdFx0XHRcdFx0XHQ/IEpTT04ucGFyc2Uoc2VyaWFsaXplZFZhbHVlKVxyXG5cdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xyXG5cdFx0cmV0dXJuIHBhcnNlZE9iamVjdCA/PyBkZWZhdWx0VmFsdWU7XHJcblx0fSBjYXRjaCAoZSkge1xyXG5cdFx0Ly8gaWdub3JlXHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG59XHJcblxyXG4vKipcclxuICogRmluZCB0aGUgZGVmaW5pdGlvbiB3aXRoIGhpZ2hlc3QgcHJpb3JpdHlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kSGlnaGVzdFByaW9yaXR5RGVmaW5pdGlvbihkZWZpbml0aW9uczogQ2FtcGFpZ25EZWZpbml0aW9uW10pOiBbQ2FtcGFpZ25EZWZpbml0aW9uLCBib29sZWFuXSB7XHJcblx0bGV0IGhhc0xvd2VyUHJpb3JpdHlEZWZpbml0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8vIEdldCBkZWZpbml0aW9uIHRoYXQgaGFzIG1heCBwcmlvcml0eSB2YWx1ZSAoMC9udWxsL3VuZGVmaW5lZCBoYXMgaGlnaGVzdCBwcmlvaXJ0eSlcclxuXHRjb25zdCBtYXhQcmlvcml0eURlZmluaXRpb24gPSBkZWZpbml0aW9ucy5yZWR1Y2UoKHByZXYsIGN1cikgPT4ge1xyXG5cdFx0Y29uc3QgY3VyUHJpb3JpdHkgPSBjdXIucHJpbWFyeVByaW9yaXR5IHx8IDA7XHJcblx0XHRjb25zdCBwcmV2UHJpb3JpdHkgPSBwcmV2LnByaW1hcnlQcmlvcml0eSB8fCAwO1xyXG5cclxuXHRcdC8vIGNoZWNrIGlmIHdlIGhhdmUgbG93ZXIgcHJpb3JpdHkgKGhpZ2hlciBudW1iZXIpXHJcblx0XHRpZiAoY3VyUHJpb3JpdHkgIT09IHByZXZQcmlvcml0eSkge1xyXG5cdFx0XHRoYXNMb3dlclByaW9yaXR5RGVmaW5pdGlvbnMgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjdXJQcmlvcml0eSA8IHByZXZQcmlvcml0eSA/IGN1ciA6IHByZXY7XHJcblx0fSk7XHJcblxyXG5cdHJldHVybiBbbWF4UHJpb3JpdHlEZWZpbml0aW9uLCBoYXNMb3dlclByaW9yaXR5RGVmaW5pdGlvbnNdO1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../FloodgateCore/dist/src/Utils.js\n')},"./node_modules/@augloop/types-core/dist/src/annotations.js":function(){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nexports.AnnotationState = void 0;\r\nvar AnnotationState;\r\n(function (AnnotationState) {\r\n    AnnotationState[AnnotationState["Undefined"] = 0] = "Undefined";\r\n    //only dealt with on server side\r\n    AnnotationState[AnnotationState["Created"] = 10] = "Created";\r\n    AnnotationState[AnnotationState["Sent"] = 20] = "Sent";\r\n    AnnotationState[AnnotationState["Duplicated"] = 30] = "Duplicated";\r\n    //dealt with on client side and server side\r\n    AnnotationState[AnnotationState["Seen"] = 40] = "Seen";\r\n    AnnotationState[AnnotationState["Tried"] = 50] = "Tried";\r\n    AnnotationState[AnnotationState["Kept"] = 60] = "Kept";\r\n    AnnotationState[AnnotationState["Rejected"] = 70] = "Rejected";\r\n})(AnnotationState = exports.AnnotationState || (exports.AnnotationState = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Fubm90YXRpb25zLnRzPzg2MWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsSUFBWSxlQVdYO0FBWEQsV0FBWSxlQUFlO0lBQ3ZCLCtEQUFhO0lBQ2IsZ0NBQWdDO0lBQ2hDLDREQUFZO0lBQ1osc0RBQVM7SUFDVCxrRUFBZTtJQUNmLDJDQUEyQztJQUMzQyxzREFBUztJQUNULHdEQUFVO0lBQ1Ysc0RBQVM7SUFDVCw4REFBYTtBQUNqQixDQUFDLEVBWFcsZUFBZSxHQUFmLHVCQUFlLEtBQWYsdUJBQWUsUUFXMUIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGF1Z2xvb3AvdHlwZXMtY29yZS9kaXN0L3NyYy9hbm5vdGF0aW9ucy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElTY2hlbWFPYmplY3QgfSBmcm9tICcuL3NjaGVtYS1vYmplY3QnO1xyXG5cclxuZXhwb3J0IGVudW0gQW5ub3RhdGlvblN0YXRlIHtcclxuICAgIFVuZGVmaW5lZCA9IDAsXHJcbiAgICAvL29ubHkgZGVhbHQgd2l0aCBvbiBzZXJ2ZXIgc2lkZVxyXG4gICAgQ3JlYXRlZCA9IDEwLFxyXG4gICAgU2VudCA9IDIwLFxyXG4gICAgRHVwbGljYXRlZCA9IDMwLCAvL29ubHkgdG8gYmUgdXNlZCBmb3IgbG9ncyAtLSBhbm5vdGF0aW9uIHNob3VsZCBuZXZlciBiZSBhc3NpZ25lZCB0aGlzIHN0YXRlXHJcbiAgICAvL2RlYWx0IHdpdGggb24gY2xpZW50IHNpZGUgYW5kIHNlcnZlciBzaWRlXHJcbiAgICBTZWVuID0gNDAsXHJcbiAgICBUcmllZCA9IDUwLFxyXG4gICAgS2VwdCA9IDYwLFxyXG4gICAgUmVqZWN0ZWQgPSA3MFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFubm90YXRpb25NZXRhRGF0YSB7XHJcbiAgICBzdGF0ZT86IEFubm90YXRpb25TdGF0ZTtcclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGlzIGFubm90YXRpb24gY2FuIGJlIHNoYXJlZCB3aXRoIGNvYXV0aG9ycyxcclxuICAgICAqIGkuZS4sIGFuIGFubm90YXRpb24gdGhhdCBpcyBub3QgcGVyc29uYWxpemVkIHRvIGEgZ2l2ZW4gdXNlci5cclxuICAgICAqL1xyXG4gICAgc2hhcmVhYmxlPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmaWVsZCBpcyBpbnRlbmRlZCB0byBiZSBleHRlbmRlZCBieSB3b3JrZmxvdyBhdXRob3JzXHJcbiAgICAgKiB0aGF0IHdhbnQgdG8gdXNlIGN1c3RvbSBtZXRhZGF0YSBmb3IgdGhlaXIgYW5ub3RhdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIGN1c3RvbU1ldGFkYXRhPzogSVNjaGVtYU9iamVjdDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlcXVlbmNlIG51bWJlciB0byBhbGxvdyBhbm5vdGF0aW9ucyB0byBiZSBhcHBsaWVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgY3JlYXRlZC5cclxuICAgICAqIFRoZSBzZXF1ZW5jZSBudW1iZXIgaXMgc2NvcGVkIHRvIHRoZSBhbm5vdGF0aW9uJ3Mgb3duZXJJZCBhbmQgc3RhcnRzIGF0IDAuXHJcbiAgICAgKiBTZXF1ZW5jaW5nIGlzIGFwcGxpZWQgYXV0b21hdGljYWxseSBhbmQgYnkgZGVmYXVsdCBmb3Igc3RhdGVmdWwgd29ya2Zsb3dzLiBGb3Igc3RhdGVsZXNzXHJcbiAgICAgKiB3b3JrZmxvd3MsIGl0IGNhbiBiZSBzcGVjaWZpZWQgZXhwbGljaXRseSBieSBpbml0aWFsaXppbmcgdGhpcyBmaWVsZCB3aGVuIGNyZWF0aW5nIHRoZVxyXG4gICAgICogYW5ub3RhdGlvbi5cclxuICAgICAqL1xyXG4gICAgc2VxPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBbm5vdGF0aW9uQWN0aXZhdGlvbkNvbmZpZ3Mge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdHlwZSBuYW1lIG9mIGFubm90YXRpb24uXHJcbiAgICAgKi9cclxuICAgIGFubm90YXRpb25UeXBlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZpZWxkIGNvbnRhaW5zIGFsbCBjb25maWdzIG9mIGdpdmVuIGFubm90YXRpb24gdHlwZS5cclxuICAgICAqIFRoZSBsYXRlciBjb25maWcgYXJyaXZlcywgdGhlIGxhdGVyIGl0IGFwcGVhcnMgaW4gdGhlIGFycmF5LlxyXG4gICAgICovXHJcbiAgICBjb25maWdzOiBJU2NoZW1hT2JqZWN0W107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgYW5ub3RhdGlvbnMuIE1heSBoYXZlIG90aGVyIGFubm90YXRpb25zIGFzIGNoaWxkcmVuLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQW5ub3RhdGlvbiBleHRlbmRzIElTY2hlbWFPYmplY3Qge1xyXG4gICAgLyoqXHJcbiAgICAgKiBVbmlxdWUgSUQgb2YgdGhpcyBhbm5vdGF0aW9uLiBNdXN0IG5vdCBiZSByZS11c2VkIGZvciBhbiBhbm5vdGF0aW9uIG9uIGFcclxuICAgICAqIGRpZmZlcmVudCBwYXJlbnQgKHNpbWlsYXJseSwgYW5ub3RhdGlvbnMgbWF5IGJlIHVwZGF0ZWQgb3IgZGVsZXRlZCwgYnV0XHJcbiAgICAgKiBtYXkgbm90IGJlIG1vdmVkIHRvIGEgZGlmZmVyZW50IHBhcmVudCkuIElmIHRoaXMgaXMgbm90IHNldCBieSB0aGUgd29ya2Zsb3dcclxuICAgICAqIHRoYXQgcHJvZHVjZWQgdGhlIGFubm90YXRpb24sIGl0IHdpbGwgYmUgc2V0IHRvIGEgcmFuZG9tIEdVSUQgYnkgdGhlXHJcbiAgICAgKiBydW50aW1lLiBJZiBhIHdvcmtmbG93IHByb2R1Y2VzIGFuIGFubm90YXRpb24gaWRlbnRpY2FsIHRvIGFuIGV4aXN0aW5nXHJcbiAgICAgKiBhbm5vdGF0aW9uIHRoYXQgZGlmZmVycyBvbmx5IGJ5IElELCB0aGUgbmV3ZXIgYW5ub3RhdGlvbiB3aWxsIGJlIGRpc2NhcmRlZFxyXG4gICAgICogYW5kIG5vIHVwZGF0ZSB3aWxsIGJlIHNlbnQgdG8gdGhlIGNsaWVudC5cclxuICAgICAqL1xyXG4gICAgaWQ/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSUQgb2YgdGhlIG93bmVyIG9mIHRoZSBhbm5vdGF0aW9uIChpLmUuIHRoZSBzZXJ2aWNlIG9yIHRoZSBlbmdpbmUgdGhhdFxyXG4gICAgICogcHJvZHVjZWQgdGhlIGFubm90YXRpb24pXHJcbiAgICAgKi9cclxuICAgIG93bmVySWQ/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFibGUgYnV0IG5vdCBuZWNlc3NhcmlseSB1bmlxdWUgaWRlbnRpZmllciByZXByZXNlbnRpbmcgdGhlIHJhbmdlIG9mIGNvbnRlbnQgY292ZXJlZFxyXG4gICAgICogYnkgdGhpcyBhbm5vdGF0aW9uLiBUaGUgbWV0aG9kIGJ5IHdoaWNoIHRoaXMgaXMgZ2VuZXJhdGVkIGlzIHVuc3BlY2lmaWVkXHJcbiAgICAgKiBhbmQgd2lsbCBzb21ldGltZXMgdmFyeSBhY3Jvc3MgZGlmZmVyZW50IHR5cGVzIG9mIGFubm90YXRpb25zLCBidXQgaXRcclxuICAgICAqIHNob3VsZCBnZW5lcmFsbHkgYmUgdGhvdWdodCBvZiBhcyBhIGhhc2ggb3ZlciBhbGwgdGhlIGNvbnRlbnQgd2l0aGluIHRoZVxyXG4gICAgICogXCJpbnZhbGlkYXRpb24gcmFuZ2VcIiBvZiB0aGUgYW5ub3RhdGlvbiAodGhhdCBpcywgdGhlIHBhcnRzIG9mIHRoZSB1c2VyIGNvbnRlbnRcclxuICAgICAqIGluIHdoaWNoIGFueSBlZGl0IHdpbGwgcmVuZGVyIHRoZSBhbm5vdGF0aW9uIHN0YWxlLCBwb3NzaWJseSBpbmNsdWRpbmcgZm9ybWF0dGluZ1xyXG4gICAgICogYW5kIG90aGVyIG1ldGFkYXRhIGluIGFkZGl0aW9uIHRvIGJhc2ljIGNvbnRlbnQgc3VjaCBhcyB0ZXh0KS5cclxuICAgICAqXHJcbiAgICAgKiBUaGVzZSBtYXkgYmUgc2hhcmVkIGJ5IG11bHRpcGxlIGFubm90YXRpb25zIGNvdmVyaW5nIGV4YWN0bHkgdGhlIHNhbWUgY29udGVudC5cclxuICAgICAqIFJhbmRvbSBjb2xsaXNpb25zIGJldHdlZW4gZGlmZmVyZW50IHJlZ2lvbnMgbXVzdCBiZSBhdm9pZGVkLiBUaGlzIGhhc2ggc2hvdWxkXHJcbiAgICAgKiBoYXZlIGEgbWluaW11bSBvZiA4IGJ5dGVzIG9mIGVudHJvcHkuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBpcyB1c2VkIGJ5IE9mZmljZSBjbGllbnRzIHRvIGltcGxlbWVudCBwZXJzaXN0ZW5jZSBmZWF0dXJlcy4gSWYgbGVmdFxyXG4gICAgICogdW5zZXQsIHNvbWUgZmVhdHVyZXMgbWF5IGJlIHR1cm5lZCBvZmYgZm9yIHRoaXMgYW5ub3RhdGlvbi5cclxuICAgICAqL1xyXG4gICAgaW52YWxpZGF0aW9uSGFzaD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgdXNlciBoYXMgaW50ZXJhY3RlZCB3aXRoIHRoZSBhbm5vdGF0aW9uXHJcbiAgICAgKiAoc2VudCwgc2VlbiwgdHJpZWQsIGtlcHQpLiBUaGUgcHJvcGVydHkgbmFtZSBpcyBkZWxpYmVyYXRlbHlcclxuICAgICAqIG9iZnVzY2F0ZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBzZXJpYWxpemVkIG9iamVjdCBhbmQgaXNcclxuICAgICAqIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2UsIHdoZXJlYXMgdGhlIG1ldGFkYXRhIHByb3BlcnR5IGlzIGludGVuZGVkXHJcbiAgICAgKiBmb3IgZXh0ZXJuYWwgdXNlIGJ5IHdvcmtmbG93IGF1dGhvcnMuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBwcm9wZXJ0eSB3aWxsIGhhdmUgdGhlIGZvbGxvd2luZyBuYW1lcyBpbiBvdXIgdGFyZ2V0IGxhbmd1YWdlczpcclxuICAgICAqIEBjcHBuYW1lIE1ldGFkYXRhXHJcbiAgICAgKi9cclxuICAgIE1fPzogQW5ub3RhdGlvbk1ldGFEYXRhO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSB1c2VyIGhhcyBpbnRlcmFjdGVkIHdpdGggdGhlIGFubm90YXRpb25cclxuICAgICAqIChzZW50LCBzZWVuLCB0cmllZCwga2VwdCkuIFRoaXMgaXMgYmFja2VkIGJ5IHRoZSBNXyBmaWVsZCwgYnV0XHJcbiAgICAgKiBwcm92aWRlcyBhIGJldHRlciBwcm9wZXJ0eSBuYW1lIGZvciB3b3JrZmxvdyBhdXRob3JzIHRvIHVzZS5cclxuICAgICAqL1xyXG4gICAgbWV0YWRhdGE/OiBBbm5vdGF0aW9uTWV0YURhdGE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgc2ltcGxlIHRydWUvZmFsc2UgY2xhc3NpZmljYXRpb24gYW5ub3RhdGlvbi5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJpbmFyeUNsYXNzaWZpY2F0aW9uQW5ub3RhdGlvbiBleHRlbmRzIElBbm5vdGF0aW9uIHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGNsYXNzaWZpY2F0aW9uXHJcbiAgICAgKi9cclxuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgY2xhc3NpZmljYXRpb25cclxuICAgICAqL1xyXG4gICAgcmVhZG9ubHkgdmFsdWU6IGJvb2xlYW47XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@augloop/types-core/dist/src/annotations.js\n')},"./node_modules/@augloop/types-core/dist/src/events.js":function(){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYXVnbG9vcC90eXBlcy1jb3JlL2Rpc3Qvc3JjL2V2ZW50cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@augloop/types-core/dist/src/events.js\n')},"./node_modules/@augloop/types-core/dist/src/generated/annotations.g.js":function(){"use strict";eval('\r\n// ------------------------------------------------------------------------------\r\n// <auto-generated>\r\n// This code was generated by the @augloop/code-gen tool.\r\n// Source: https://dev.azure.com/office/ISS/_git/augloop-server?path=%2Fmodules%2Ftypes-core%2Fsrc%2Fannotations.ts\r\n// Changes to this file may cause incorrect behavior and will be lost upon regeneration.\r\n// <\/auto-generated>\r\n// ------------------------------------------------------------------------------\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nexports.BinaryClassificationAnnotation = exports.Annotation = void 0;\r\nvar schema_object_g_1 = __webpack_require__(/*! ./schema-object.g */ "./node_modules/@augloop/types-core/dist/src/generated/schema-object.g.js");\r\nvar Annotation = /** @class */ (function () {\r\n    function Annotation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(Annotation, this, obj);\r\n    }\r\n    Object.defineProperty(Annotation.prototype, "metadata", {\r\n        get: function () { return this.M_; },\r\n        set: function (value) { this.M_ = value; },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    Annotation.getTypeName = function () {\r\n        return \'AugLoop_Core_Annotation\';\r\n    };\r\n    Annotation.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of Annotation type or its inheritor and implements {@link IAnnotation}\r\n     */\r\n    Annotation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [Annotation.getTypeName()]);\r\n    };\r\n    Annotation.H_ = { T_: Annotation.getTypeName(), B_: Annotation.getBaseTypes() };\r\n    return Annotation;\r\n}());\r\nexports.Annotation = Annotation;\r\nvar BinaryClassificationAnnotation = /** @class */ (function () {\r\n    function BinaryClassificationAnnotation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(BinaryClassificationAnnotation, this, obj);\r\n    }\r\n    Object.defineProperty(BinaryClassificationAnnotation.prototype, "metadata", {\r\n        get: function () { return this.M_; },\r\n        set: function (value) { this.M_ = value; },\r\n        enumerable: false,\r\n        configurable: true\r\n    });\r\n    BinaryClassificationAnnotation.getTypeName = function () {\r\n        return \'AugLoop_Core_BinaryClassificationAnnotation\';\r\n    };\r\n    BinaryClassificationAnnotation.getBaseTypes = function () {\r\n        return [\'AugLoop_Core_Annotation\'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of BinaryClassificationAnnotation type or its inheritor and implements {@link IBinaryClassificationAnnotation}\r\n     */\r\n    BinaryClassificationAnnotation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [BinaryClassificationAnnotation.getTypeName()]);\r\n    };\r\n    BinaryClassificationAnnotation.H_ = { T_: BinaryClassificationAnnotation.getTypeName(), B_: BinaryClassificationAnnotation.getBaseTypes() };\r\n    return BinaryClassificationAnnotation;\r\n}());\r\nexports.BinaryClassificationAnnotation = BinaryClassificationAnnotation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vc3JjL2dlbmVyYXRlZC9hbm5vdGF0aW9ucy5nLnRzP2Q0MTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGlGQUFpRjtBQUNqRixtQkFBbUI7QUFDbkIseURBQXlEO0FBQ3pELG1IQUFtSDtBQUNuSCx3RkFBd0Y7QUFDeEYsb0JBQW9CO0FBQ3BCLGlGQUFpRjs7O0FBR2pGLGlKQUFpRDtBQUdqRDtJQVFJLG9CQUFtQixHQUFpQjtRQUNoQyw4QkFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFMRCxzQkFBVyxnQ0FBUTthQUFuQixjQUF3RCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3pFLFVBQW9CLEtBQXFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDOzs7T0FETjtJQU0zRCxzQkFBVyxHQUF6QjtRQUNJLE9BQU8seUJBQXlCLENBQUM7SUFDckMsQ0FBQztJQUNhLHVCQUFZLEdBQTFCO1FBQ0ksT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDVyxvQkFBUyxHQUF2QixVQUF3QixZQUEyQjtRQUMvQyxPQUFPLDhCQUFZLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQU5zQixhQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztJQU9oRyxpQkFBQztDQUFBO0FBeEJZLGdDQUFVO0FBMEJ2QjtJQVVJLHdDQUFtQixHQUFxQztRQUNwRCw4QkFBWSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUxELHNCQUFXLG9EQUFRO2FBQW5CLGNBQXdELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDekUsVUFBb0IsS0FBcUMsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7OztPQUROO0lBTTNELDBDQUFXLEdBQXpCO1FBQ0ksT0FBTyw2Q0FBNkMsQ0FBQztJQUN6RCxDQUFDO0lBQ2EsMkNBQVksR0FBMUI7UUFDSSxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDVyx3Q0FBUyxHQUF2QixVQUF3QixZQUEyQjtRQUMvQyxPQUFPLDhCQUFZLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDLDhCQUE4QixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBTnNCLGlDQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsOEJBQThCLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLDhCQUE4QixDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7SUFPeEkscUNBQUM7Q0FBQTtBQTFCWSx3RUFBOEIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGF1Z2xvb3AvdHlwZXMtY29yZS9kaXN0L3NyYy9nZW5lcmF0ZWQvYW5ub3RhdGlvbnMuZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyA8YXV0by1nZW5lcmF0ZWQ+XHJcbi8vIFRoaXMgY29kZSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBAYXVnbG9vcC9jb2RlLWdlbiB0b29sLlxyXG4vLyBTb3VyY2U6IGh0dHBzOi8vZGV2LmF6dXJlLmNvbS9vZmZpY2UvSVNTL19naXQvYXVnbG9vcC1zZXJ2ZXI/cGF0aD0lMkZtb2R1bGVzJTJGdHlwZXMtY29yZSUyRnNyYyUyRmFubm90YXRpb25zLnRzXHJcbi8vIENoYW5nZXMgdG8gdGhpcyBmaWxlIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCB1cG9uIHJlZ2VuZXJhdGlvbi5cclxuLy8gPC9hdXRvLWdlbmVyYXRlZD5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5pbXBvcnQgeyBBbm5vdGF0aW9uTWV0YURhdGEsIElBbm5vdGF0aW9uLCBJQmluYXJ5Q2xhc3NpZmljYXRpb25Bbm5vdGF0aW9uIH0gZnJvbSAnLi4vYW5ub3RhdGlvbnMnO1xyXG5pbXBvcnQgeyBTY2hlbWFPYmplY3QgfSBmcm9tICcuL3NjaGVtYS1vYmplY3QuZyc7XHJcbmltcG9ydCB7IElTY2hlbWFPYmplY3QsIFNjaGVtYU9iamVjdEhlYWRlciB9IGZyb20gJy4uL3NjaGVtYS1vYmplY3QnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFubm90YXRpb24gaW1wbGVtZW50cyBJQW5ub3RhdGlvbiB7XHJcbiAgICBwdWJsaWMgaWQ/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgb3duZXJJZD86IHN0cmluZztcclxuICAgIHB1YmxpYyBpbnZhbGlkYXRpb25IYXNoPzogc3RyaW5nO1xyXG4gICAgcHVibGljIE1fPzogQW5ub3RhdGlvbk1ldGFEYXRhO1xyXG4gICAgcHVibGljIGdldCBtZXRhZGF0YSgpOiBBbm5vdGF0aW9uTWV0YURhdGEgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5NXzsgfVxyXG4gICAgcHVibGljIHNldCBtZXRhZGF0YSh2YWx1ZTogQW5ub3RhdGlvbk1ldGFEYXRhIHwgdW5kZWZpbmVkKSB7IHRoaXMuTV8gPSB2YWx1ZTsgfVxyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSUFubm90YXRpb24pIHtcclxuICAgICAgICBTY2hlbWFPYmplY3QuYXNzaWduKEFubm90YXRpb24sIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfQW5ub3RhdGlvbic7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IEFubm90YXRpb24uZ2V0VHlwZU5hbWUoKSwgQl86IEFubm90YXRpb24uZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIEFubm90YXRpb24gdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJQW5ub3RhdGlvbn1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElBbm5vdGF0aW9uIHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtBbm5vdGF0aW9uLmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJpbmFyeUNsYXNzaWZpY2F0aW9uQW5ub3RhdGlvbiBpbXBsZW1lbnRzIElCaW5hcnlDbGFzc2lmaWNhdGlvbkFubm90YXRpb24ge1xyXG4gICAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcclxuICAgIHB1YmxpYyByZWFkb25seSB2YWx1ZTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpZD86IHN0cmluZztcclxuICAgIHB1YmxpYyBvd25lcklkPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGludmFsaWRhdGlvbkhhc2g/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgTV8/OiBBbm5vdGF0aW9uTWV0YURhdGE7XHJcbiAgICBwdWJsaWMgZ2V0IG1ldGFkYXRhKCk6IEFubm90YXRpb25NZXRhRGF0YSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLk1fOyB9XHJcbiAgICBwdWJsaWMgc2V0IG1ldGFkYXRhKHZhbHVlOiBBbm5vdGF0aW9uTWV0YURhdGEgfCB1bmRlZmluZWQpIHsgdGhpcy5NXyA9IHZhbHVlOyB9XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgSF86IFNjaGVtYU9iamVjdEhlYWRlcjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo/OiBJQmluYXJ5Q2xhc3NpZmljYXRpb25Bbm5vdGF0aW9uKSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihCaW5hcnlDbGFzc2lmaWNhdGlvbkFubm90YXRpb24sIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfQmluYXJ5Q2xhc3NpZmljYXRpb25Bbm5vdGF0aW9uJztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gWydBdWdMb29wX0NvcmVfQW5ub3RhdGlvbiddO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IEJpbmFyeUNsYXNzaWZpY2F0aW9uQW5ub3RhdGlvbi5nZXRUeXBlTmFtZSgpLCBCXzogQmluYXJ5Q2xhc3NpZmljYXRpb25Bbm5vdGF0aW9uLmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBCaW5hcnlDbGFzc2lmaWNhdGlvbkFubm90YXRpb24gdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJQmluYXJ5Q2xhc3NpZmljYXRpb25Bbm5vdGF0aW9ufVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHR5cGVHdWFyZChzY2hlbWFPYmplY3Q6IElTY2hlbWFPYmplY3QpOiBzY2hlbWFPYmplY3QgaXMgSUJpbmFyeUNsYXNzaWZpY2F0aW9uQW5ub3RhdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbQmluYXJ5Q2xhc3NpZmljYXRpb25Bbm5vdGF0aW9uLmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@augloop/types-core/dist/src/generated/annotations.g.js\n')},"./node_modules/@augloop/types-core/dist/src/generated/events.g.js":function(){"use strict";eval("\r\n// ------------------------------------------------------------------------------\r\n// <auto-generated>\r\n// This code was generated by the @augloop/code-gen tool.\r\n// Source: https://dev.azure.com/office/ISS/_git/augloop-server?path=%2Fmodules%2Ftypes-core%2Fsrc%2Fevents.ts\r\n// Changes to this file may cause incorrect behavior and will be lost upon regeneration.\r\n// <\/auto-generated>\r\n// ------------------------------------------------------------------------------\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.UserCommand = exports.Event = void 0;\r\nvar schema_object_g_1 = __webpack_require__(/*! ./schema-object.g */ \"./node_modules/@augloop/types-core/dist/src/generated/schema-object.g.js\");\r\nvar Event = /** @class */ (function () {\r\n    function Event(obj) {\r\n        schema_object_g_1.SchemaObject.assign(Event, this, obj);\r\n    }\r\n    Event.getTypeName = function () {\r\n        return 'AugLoop_Core_Event';\r\n    };\r\n    Event.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of Event type or its inheritor and implements {@link IEvent}\r\n     */\r\n    Event.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [Event.getTypeName()]);\r\n    };\r\n    Event.H_ = { T_: Event.getTypeName(), B_: Event.getBaseTypes() };\r\n    return Event;\r\n}());\r\nexports.Event = Event;\r\nvar UserCommand = /** @class */ (function () {\r\n    function UserCommand(obj) {\r\n        schema_object_g_1.SchemaObject.assign(UserCommand, this, obj);\r\n    }\r\n    UserCommand.getTypeName = function () {\r\n        return 'AugLoop_Core_UserCommand';\r\n    };\r\n    UserCommand.getBaseTypes = function () {\r\n        return ['AugLoop_Core_Event'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of UserCommand type or its inheritor and implements {@link IUserCommand}\r\n     */\r\n    UserCommand.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [UserCommand.getTypeName()]);\r\n    };\r\n    UserCommand.H_ = { T_: UserCommand.getTypeName(), B_: UserCommand.getBaseTypes() };\r\n    return UserCommand;\r\n}());\r\nexports.UserCommand = UserCommand;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vc3JjL2dlbmVyYXRlZC9ldmVudHMuZy50cz9jNDgzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxpRkFBaUY7QUFDakYsbUJBQW1CO0FBQ25CLHlEQUF5RDtBQUN6RCw4R0FBOEc7QUFDOUcsd0ZBQXdGO0FBQ3hGLG9CQUFvQjtBQUNwQixpRkFBaUY7OztBQUdqRixpSkFBaUQ7QUFHakQ7SUFJSSxlQUFtQixHQUFZO1FBQzNCLDhCQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNhLGlCQUFXLEdBQXpCO1FBQ0ksT0FBTyxvQkFBb0IsQ0FBQztJQUNoQyxDQUFDO0lBQ2Esa0JBQVksR0FBMUI7UUFDSSxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNXLGVBQVMsR0FBdkIsVUFBd0IsWUFBMkI7UUFDL0MsT0FBTyw4QkFBWSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFOc0IsUUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7SUFPdEYsWUFBQztDQUFBO0FBcEJZLHNCQUFLO0FBc0JsQjtJQU9JLHFCQUFtQixHQUFrQjtRQUNqQyw4QkFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDYSx1QkFBVyxHQUF6QjtRQUNJLE9BQU8sMEJBQTBCLENBQUM7SUFDdEMsQ0FBQztJQUNhLHdCQUFZLEdBQTFCO1FBQ0ksT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ1cscUJBQVMsR0FBdkIsVUFBd0IsWUFBMkI7UUFDL0MsT0FBTyw4QkFBWSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFOc0IsY0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7SUFPbEcsa0JBQUM7Q0FBQTtBQXZCWSxrQ0FBVyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYXVnbG9vcC90eXBlcy1jb3JlL2Rpc3Qvc3JjL2dlbmVyYXRlZC9ldmVudHMuZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyA8YXV0by1nZW5lcmF0ZWQ+XHJcbi8vIFRoaXMgY29kZSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBAYXVnbG9vcC9jb2RlLWdlbiB0b29sLlxyXG4vLyBTb3VyY2U6IGh0dHBzOi8vZGV2LmF6dXJlLmNvbS9vZmZpY2UvSVNTL19naXQvYXVnbG9vcC1zZXJ2ZXI/cGF0aD0lMkZtb2R1bGVzJTJGdHlwZXMtY29yZSUyRnNyYyUyRmV2ZW50cy50c1xyXG4vLyBDaGFuZ2VzIHRvIHRoaXMgZmlsZSBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgdXBvbiByZWdlbmVyYXRpb24uXHJcbi8vIDwvYXV0by1nZW5lcmF0ZWQ+XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuaW1wb3J0IHsgSUV2ZW50LCBJVXNlckNvbW1hbmQgfSBmcm9tICcuLi9ldmVudHMnO1xyXG5pbXBvcnQgeyBTY2hlbWFPYmplY3QgfSBmcm9tICcuL3NjaGVtYS1vYmplY3QuZyc7XHJcbmltcG9ydCB7IElTY2hlbWFPYmplY3QsIFNjaGVtYU9iamVjdEhlYWRlciB9IGZyb20gJy4uL3NjaGVtYS1vYmplY3QnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEV2ZW50IGltcGxlbWVudHMgSUV2ZW50IHtcclxuICAgIHB1YmxpYyB0aW1lc3RhbXA6IG51bWJlcjtcclxuICAgIHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgSF86IFNjaGVtYU9iamVjdEhlYWRlcjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo/OiBJRXZlbnQpIHtcclxuICAgICAgICBTY2hlbWFPYmplY3QuYXNzaWduKEV2ZW50LCB0aGlzLCBvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUeXBlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnQXVnTG9vcF9Db3JlX0V2ZW50JztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogRXZlbnQuZ2V0VHlwZU5hbWUoKSwgQl86IEV2ZW50LmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBFdmVudCB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElFdmVudH1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElFdmVudCB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbRXZlbnQuZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlckNvbW1hbmQgaW1wbGVtZW50cyBJVXNlckNvbW1hbmQge1xyXG4gICAgcHVibGljIGR1cmF0aW9uTXM6IG51bWJlcjtcclxuICAgIHB1YmxpYyBjb250cm9sSWQ/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZXh0ZW5kZWRNZXRhZGF0YT86IElTY2hlbWFPYmplY3Q7XHJcbiAgICBwdWJsaWMgdGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSVVzZXJDb21tYW5kKSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihVc2VyQ29tbWFuZCwgdGhpcywgb2JqKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VHlwZU5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJ0F1Z0xvb3BfQ29yZV9Vc2VyQ29tbWFuZCc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsnQXVnTG9vcF9Db3JlX0V2ZW50J107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogVXNlckNvbW1hbmQuZ2V0VHlwZU5hbWUoKSwgQl86IFVzZXJDb21tYW5kLmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBVc2VyQ29tbWFuZCB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElVc2VyQ29tbWFuZH1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElVc2VyQ29tbWFuZCB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbVXNlckNvbW1hbmQuZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@augloop/types-core/dist/src/generated/events.g.js\n")},"./node_modules/@augloop/types-core/dist/src/generated/operations.g.js":function(){"use strict";eval("\r\n// ------------------------------------------------------------------------------\r\n// <auto-generated>\r\n// This code was generated by the @augloop/code-gen tool.\r\n// Source: https://dev.azure.com/office/ISS/_git/augloop-server?path=%2Fmodules%2Ftypes-core%2Fsrc%2Foperations.ts\r\n// Changes to this file may cause incorrect behavior and will be lost upon regeneration.\r\n// <\/auto-generated>\r\n// ------------------------------------------------------------------------------\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.SignalOperation = exports.MicroSyncOperation = exports.DeltaUpdateOperation = exports.VisibilityOperation = exports.FocusOperation = exports.PurgeOperation = exports.DeleteOperation = exports.UpdateOperation = exports.UpdateAnnotationMetaDataOperation = exports.MoveOperation = exports.AddOperation = exports.OperationWithSiblingContext = exports.Operation = exports.ItemChangesDelta = exports.ItemDelta = void 0;\r\nvar schema_object_g_1 = __webpack_require__(/*! ./schema-object.g */ \"./node_modules/@augloop/types-core/dist/src/generated/schema-object.g.js\");\r\nvar ItemDelta = /** @class */ (function () {\r\n    function ItemDelta(obj) {\r\n        schema_object_g_1.SchemaObject.assign(ItemDelta, this, obj);\r\n    }\r\n    ItemDelta.getTypeName = function () {\r\n        return 'AugLoop_Core_ItemDelta';\r\n    };\r\n    ItemDelta.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of ItemDelta type or its inheritor and implements {@link IItemDelta}\r\n     */\r\n    ItemDelta.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [ItemDelta.getTypeName()]);\r\n    };\r\n    ItemDelta.H_ = { T_: ItemDelta.getTypeName(), B_: ItemDelta.getBaseTypes() };\r\n    return ItemDelta;\r\n}());\r\nexports.ItemDelta = ItemDelta;\r\nvar ItemChangesDelta = /** @class */ (function () {\r\n    function ItemChangesDelta(obj) {\r\n        schema_object_g_1.SchemaObject.assign(ItemChangesDelta, this, obj);\r\n    }\r\n    ItemChangesDelta.getTypeName = function () {\r\n        return 'AugLoop_Core_ItemChangesDelta';\r\n    };\r\n    ItemChangesDelta.getBaseTypes = function () {\r\n        return ['AugLoop_Core_ItemDelta'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of ItemChangesDelta type or its inheritor and implements {@link IItemChangesDelta}\r\n     */\r\n    ItemChangesDelta.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [ItemChangesDelta.getTypeName()]);\r\n    };\r\n    ItemChangesDelta.H_ = { T_: ItemChangesDelta.getTypeName(), B_: ItemChangesDelta.getBaseTypes() };\r\n    return ItemChangesDelta;\r\n}());\r\nexports.ItemChangesDelta = ItemChangesDelta;\r\nvar Operation = /** @class */ (function () {\r\n    function Operation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(Operation, this, obj);\r\n    }\r\n    Operation.getTypeName = function () {\r\n        return 'AugLoop_Core_Operation';\r\n    };\r\n    Operation.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of Operation type or its inheritor and implements {@link IOperation}\r\n     */\r\n    Operation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [Operation.getTypeName()]);\r\n    };\r\n    Operation.H_ = { T_: Operation.getTypeName(), B_: Operation.getBaseTypes() };\r\n    return Operation;\r\n}());\r\nexports.Operation = Operation;\r\nvar OperationWithSiblingContext = /** @class */ (function () {\r\n    function OperationWithSiblingContext(obj) {\r\n        schema_object_g_1.SchemaObject.assign(OperationWithSiblingContext, this, obj);\r\n    }\r\n    OperationWithSiblingContext.getTypeName = function () {\r\n        return 'AugLoop_Core_OperationWithSiblingContext';\r\n    };\r\n    OperationWithSiblingContext.getBaseTypes = function () {\r\n        return ['AugLoop_Core_Operation'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of OperationWithSiblingContext type or its inheritor and implements {@link IOperationWithSiblingContext}\r\n     */\r\n    OperationWithSiblingContext.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [OperationWithSiblingContext.getTypeName()]);\r\n    };\r\n    OperationWithSiblingContext.H_ = { T_: OperationWithSiblingContext.getTypeName(), B_: OperationWithSiblingContext.getBaseTypes() };\r\n    return OperationWithSiblingContext;\r\n}());\r\nexports.OperationWithSiblingContext = OperationWithSiblingContext;\r\nvar AddOperation = /** @class */ (function () {\r\n    function AddOperation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(AddOperation, this, obj);\r\n    }\r\n    AddOperation.getTypeName = function () {\r\n        return 'AugLoop_Core_AddOperation';\r\n    };\r\n    AddOperation.getBaseTypes = function () {\r\n        return ['AugLoop_Core_OperationWithSiblingContext', 'AugLoop_Core_Operation'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of AddOperation type or its inheritor and implements {@link IAddOperation}\r\n     */\r\n    AddOperation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [AddOperation.getTypeName()]);\r\n    };\r\n    AddOperation.H_ = { T_: AddOperation.getTypeName(), B_: AddOperation.getBaseTypes() };\r\n    return AddOperation;\r\n}());\r\nexports.AddOperation = AddOperation;\r\nvar MoveOperation = /** @class */ (function () {\r\n    function MoveOperation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(MoveOperation, this, obj);\r\n    }\r\n    MoveOperation.getTypeName = function () {\r\n        return 'AugLoop_Core_MoveOperation';\r\n    };\r\n    MoveOperation.getBaseTypes = function () {\r\n        return ['AugLoop_Core_OperationWithSiblingContext', 'AugLoop_Core_Operation'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of MoveOperation type or its inheritor and implements {@link IMoveOperation}\r\n     */\r\n    MoveOperation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [MoveOperation.getTypeName()]);\r\n    };\r\n    MoveOperation.H_ = { T_: MoveOperation.getTypeName(), B_: MoveOperation.getBaseTypes() };\r\n    return MoveOperation;\r\n}());\r\nexports.MoveOperation = MoveOperation;\r\nvar UpdateAnnotationMetaDataOperation = /** @class */ (function () {\r\n    function UpdateAnnotationMetaDataOperation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(UpdateAnnotationMetaDataOperation, this, obj);\r\n    }\r\n    UpdateAnnotationMetaDataOperation.getTypeName = function () {\r\n        return 'AugLoop_Core_UpdateAnnotationMetaDataOperation';\r\n    };\r\n    UpdateAnnotationMetaDataOperation.getBaseTypes = function () {\r\n        return ['AugLoop_Core_Operation'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of UpdateAnnotationMetaDataOperation type or its inheritor and implements {@link IUpdateAnnotationMetaDataOperation}\r\n     */\r\n    UpdateAnnotationMetaDataOperation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [UpdateAnnotationMetaDataOperation.getTypeName()]);\r\n    };\r\n    UpdateAnnotationMetaDataOperation.H_ = { T_: UpdateAnnotationMetaDataOperation.getTypeName(), B_: UpdateAnnotationMetaDataOperation.getBaseTypes() };\r\n    return UpdateAnnotationMetaDataOperation;\r\n}());\r\nexports.UpdateAnnotationMetaDataOperation = UpdateAnnotationMetaDataOperation;\r\nvar UpdateOperation = /** @class */ (function () {\r\n    function UpdateOperation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(UpdateOperation, this, obj);\r\n    }\r\n    UpdateOperation.getTypeName = function () {\r\n        return 'AugLoop_Core_UpdateOperation';\r\n    };\r\n    UpdateOperation.getBaseTypes = function () {\r\n        return ['AugLoop_Core_Operation'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of UpdateOperation type or its inheritor and implements {@link IUpdateOperation}\r\n     */\r\n    UpdateOperation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [UpdateOperation.getTypeName()]);\r\n    };\r\n    UpdateOperation.H_ = { T_: UpdateOperation.getTypeName(), B_: UpdateOperation.getBaseTypes() };\r\n    return UpdateOperation;\r\n}());\r\nexports.UpdateOperation = UpdateOperation;\r\nvar DeleteOperation = /** @class */ (function () {\r\n    function DeleteOperation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(DeleteOperation, this, obj);\r\n    }\r\n    DeleteOperation.getTypeName = function () {\r\n        return 'AugLoop_Core_DeleteOperation';\r\n    };\r\n    DeleteOperation.getBaseTypes = function () {\r\n        return ['AugLoop_Core_Operation'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of DeleteOperation type or its inheritor and implements {@link IDeleteOperation}\r\n     */\r\n    DeleteOperation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [DeleteOperation.getTypeName()]);\r\n    };\r\n    DeleteOperation.H_ = { T_: DeleteOperation.getTypeName(), B_: DeleteOperation.getBaseTypes() };\r\n    return DeleteOperation;\r\n}());\r\nexports.DeleteOperation = DeleteOperation;\r\nvar PurgeOperation = /** @class */ (function () {\r\n    function PurgeOperation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(PurgeOperation, this, obj);\r\n    }\r\n    PurgeOperation.getTypeName = function () {\r\n        return 'AugLoop_Core_PurgeOperation';\r\n    };\r\n    PurgeOperation.getBaseTypes = function () {\r\n        return ['AugLoop_Core_Operation'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of PurgeOperation type or its inheritor and implements {@link IPurgeOperation}\r\n     */\r\n    PurgeOperation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [PurgeOperation.getTypeName()]);\r\n    };\r\n    PurgeOperation.H_ = { T_: PurgeOperation.getTypeName(), B_: PurgeOperation.getBaseTypes() };\r\n    return PurgeOperation;\r\n}());\r\nexports.PurgeOperation = PurgeOperation;\r\nvar FocusOperation = /** @class */ (function () {\r\n    function FocusOperation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(FocusOperation, this, obj);\r\n    }\r\n    FocusOperation.getTypeName = function () {\r\n        return 'AugLoop_Core_FocusOperation';\r\n    };\r\n    FocusOperation.getBaseTypes = function () {\r\n        return ['AugLoop_Core_Operation'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of FocusOperation type or its inheritor and implements {@link IFocusOperation}\r\n     */\r\n    FocusOperation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [FocusOperation.getTypeName()]);\r\n    };\r\n    FocusOperation.H_ = { T_: FocusOperation.getTypeName(), B_: FocusOperation.getBaseTypes() };\r\n    return FocusOperation;\r\n}());\r\nexports.FocusOperation = FocusOperation;\r\nvar VisibilityOperation = /** @class */ (function () {\r\n    function VisibilityOperation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(VisibilityOperation, this, obj);\r\n    }\r\n    VisibilityOperation.getTypeName = function () {\r\n        return 'AugLoop_Core_VisibilityOperation';\r\n    };\r\n    VisibilityOperation.getBaseTypes = function () {\r\n        return ['AugLoop_Core_Operation'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of VisibilityOperation type or its inheritor and implements {@link IVisibilityOperation}\r\n     */\r\n    VisibilityOperation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [VisibilityOperation.getTypeName()]);\r\n    };\r\n    VisibilityOperation.H_ = { T_: VisibilityOperation.getTypeName(), B_: VisibilityOperation.getBaseTypes() };\r\n    return VisibilityOperation;\r\n}());\r\nexports.VisibilityOperation = VisibilityOperation;\r\nvar DeltaUpdateOperation = /** @class */ (function () {\r\n    function DeltaUpdateOperation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(DeltaUpdateOperation, this, obj);\r\n    }\r\n    DeltaUpdateOperation.getTypeName = function () {\r\n        return 'AugLoop_Core_DeltaUpdateOperation';\r\n    };\r\n    DeltaUpdateOperation.getBaseTypes = function () {\r\n        return ['AugLoop_Core_Operation'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of DeltaUpdateOperation type or its inheritor and implements {@link IDeltaUpdateOperation}\r\n     */\r\n    DeltaUpdateOperation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [DeltaUpdateOperation.getTypeName()]);\r\n    };\r\n    DeltaUpdateOperation.H_ = { T_: DeltaUpdateOperation.getTypeName(), B_: DeltaUpdateOperation.getBaseTypes() };\r\n    return DeltaUpdateOperation;\r\n}());\r\nexports.DeltaUpdateOperation = DeltaUpdateOperation;\r\nvar MicroSyncOperation = /** @class */ (function () {\r\n    function MicroSyncOperation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(MicroSyncOperation, this, obj);\r\n    }\r\n    MicroSyncOperation.getTypeName = function () {\r\n        return 'AugLoop_Core_MicroSyncOperation';\r\n    };\r\n    MicroSyncOperation.getBaseTypes = function () {\r\n        return ['AugLoop_Core_Operation'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of MicroSyncOperation type or its inheritor and implements {@link IMicroSyncOperation}\r\n     */\r\n    MicroSyncOperation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [MicroSyncOperation.getTypeName()]);\r\n    };\r\n    MicroSyncOperation.H_ = { T_: MicroSyncOperation.getTypeName(), B_: MicroSyncOperation.getBaseTypes() };\r\n    return MicroSyncOperation;\r\n}());\r\nexports.MicroSyncOperation = MicroSyncOperation;\r\nvar SignalOperation = /** @class */ (function () {\r\n    function SignalOperation(obj) {\r\n        schema_object_g_1.SchemaObject.assign(SignalOperation, this, obj);\r\n    }\r\n    SignalOperation.getTypeName = function () {\r\n        return 'AugLoop_Signals_SignalOperation';\r\n    };\r\n    SignalOperation.getBaseTypes = function () {\r\n        return ['AugLoop_Core_Operation'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of SignalOperation type or its inheritor and implements {@link ISignalOperation}\r\n     */\r\n    SignalOperation.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [SignalOperation.getTypeName()]);\r\n    };\r\n    SignalOperation.H_ = { T_: SignalOperation.getTypeName(), B_: SignalOperation.getBaseTypes() };\r\n    return SignalOperation;\r\n}());\r\nexports.SignalOperation = SignalOperation;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vc3JjL2dlbmVyYXRlZC9vcGVyYXRpb25zLmcudHM/MDJjYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUZBQWlGO0FBQ2pGLG1CQUFtQjtBQUNuQix5REFBeUQ7QUFDekQsa0hBQWtIO0FBQ2xILHdGQUF3RjtBQUN4RixvQkFBb0I7QUFDcEIsaUZBQWlGOzs7QUFHakYsaUpBQWlEO0FBSWpEO0lBR0ksbUJBQW1CLEdBQWdCO1FBQy9CLDhCQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNhLHFCQUFXLEdBQXpCO1FBQ0ksT0FBTyx3QkFBd0IsQ0FBQztJQUNwQyxDQUFDO0lBQ2Esc0JBQVksR0FBMUI7UUFDSSxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNXLG1CQUFTLEdBQXZCLFVBQXdCLFlBQTJCO1FBQy9DLE9BQU8sOEJBQVksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBTnNCLFlBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO0lBTzlGLGdCQUFDO0NBQUE7QUFuQlksOEJBQVM7QUFxQnRCO0lBSUksMEJBQW1CLEdBQXVCO1FBQ3RDLDhCQUFZLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ2EsNEJBQVcsR0FBekI7UUFDSSxPQUFPLCtCQUErQixDQUFDO0lBQzNDLENBQUM7SUFDYSw2QkFBWSxHQUExQjtRQUNJLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNXLDBCQUFTLEdBQXZCLFVBQXdCLFlBQTJCO1FBQy9DLE9BQU8sOEJBQVksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFOc0IsbUJBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztJQU81Ryx1QkFBQztDQUFBO0FBcEJZLDRDQUFnQjtBQXNCN0I7SUFLSSxtQkFBbUIsR0FBZ0I7UUFDL0IsOEJBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ2EscUJBQVcsR0FBekI7UUFDSSxPQUFPLHdCQUF3QixDQUFDO0lBQ3BDLENBQUM7SUFDYSxzQkFBWSxHQUExQjtRQUNJLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ1csbUJBQVMsR0FBdkIsVUFBd0IsWUFBMkI7UUFDL0MsT0FBTyw4QkFBWSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFOc0IsWUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7SUFPOUYsZ0JBQUM7Q0FBQTtBQXJCWSw4QkFBUztBQXVCdEI7SUFPSSxxQ0FBbUIsR0FBa0M7UUFDakQsOEJBQVksQ0FBQyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDYSx1Q0FBVyxHQUF6QjtRQUNJLE9BQU8sMENBQTBDLENBQUM7SUFDdEQsQ0FBQztJQUNhLHdDQUFZLEdBQTFCO1FBQ0ksT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ1cscUNBQVMsR0FBdkIsVUFBd0IsWUFBMkI7UUFDL0MsT0FBTyw4QkFBWSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQU5zQiw4QkFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSwyQkFBMkIsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO0lBT2xJLGtDQUFDO0NBQUE7QUF2Qlksa0VBQTJCO0FBeUJ4QztJQU9JLHNCQUFtQixHQUFtQjtRQUNsQyw4QkFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDYSx3QkFBVyxHQUF6QjtRQUNJLE9BQU8sMkJBQTJCLENBQUM7SUFDdkMsQ0FBQztJQUNhLHlCQUFZLEdBQTFCO1FBQ0ksT0FBTyxDQUFDLDBDQUEwQyxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVEOztPQUVHO0lBQ1csc0JBQVMsR0FBdkIsVUFBd0IsWUFBMkI7UUFDL0MsT0FBTyw4QkFBWSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFOc0IsZUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7SUFPcEcsbUJBQUM7Q0FBQTtBQXZCWSxvQ0FBWTtBQXlCekI7SUFRSSx1QkFBbUIsR0FBb0I7UUFDbkMsOEJBQVksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ2EseUJBQVcsR0FBekI7UUFDSSxPQUFPLDRCQUE0QixDQUFDO0lBQ3hDLENBQUM7SUFDYSwwQkFBWSxHQUExQjtRQUNJLE9BQU8sQ0FBQywwQ0FBMEMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7T0FFRztJQUNXLHVCQUFTLEdBQXZCLFVBQXdCLFlBQTJCO1FBQy9DLE9BQU8sOEJBQVksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBTnNCLGdCQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztJQU90RyxvQkFBQztDQUFBO0FBeEJZLHNDQUFhO0FBMEIxQjtJQU1JLDJDQUFtQixHQUF3QztRQUN2RCw4QkFBWSxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNhLDZDQUFXLEdBQXpCO1FBQ0ksT0FBTyxnREFBZ0QsQ0FBQztJQUM1RCxDQUFDO0lBQ2EsOENBQVksR0FBMUI7UUFDSSxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDVywyQ0FBUyxHQUF2QixVQUF3QixZQUEyQjtRQUMvQyxPQUFPLDhCQUFZLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDLGlDQUFpQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBTnNCLG9DQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsaUNBQWlDLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLGlDQUFpQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7SUFPOUksd0NBQUM7Q0FBQTtBQXRCWSw4RUFBaUM7QUF3QjlDO0lBS0kseUJBQW1CLEdBQXNCO1FBQ3JDLDhCQUFZLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNhLDJCQUFXLEdBQXpCO1FBQ0ksT0FBTyw4QkFBOEIsQ0FBQztJQUMxQyxDQUFDO0lBQ2EsNEJBQVksR0FBMUI7UUFDSSxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDVyx5QkFBUyxHQUF2QixVQUF3QixZQUEyQjtRQUMvQyxPQUFPLDhCQUFZLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQU5zQixrQkFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7SUFPMUcsc0JBQUM7Q0FBQTtBQXJCWSwwQ0FBZTtBQXVCNUI7SUFLSSx5QkFBbUIsR0FBc0I7UUFDckMsOEJBQVksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ2EsMkJBQVcsR0FBekI7UUFDSSxPQUFPLDhCQUE4QixDQUFDO0lBQzFDLENBQUM7SUFDYSw0QkFBWSxHQUExQjtRQUNJLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNXLHlCQUFTLEdBQXZCLFVBQXdCLFlBQTJCO1FBQy9DLE9BQU8sOEJBQVksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBTnNCLGtCQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxlQUFlLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztJQU8xRyxzQkFBQztDQUFBO0FBckJZLDBDQUFlO0FBdUI1QjtJQUtJLHdCQUFtQixHQUFxQjtRQUNwQyw4QkFBWSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDYSwwQkFBVyxHQUF6QjtRQUNJLE9BQU8sNkJBQTZCLENBQUM7SUFDekMsQ0FBQztJQUNhLDJCQUFZLEdBQTFCO1FBQ0ksT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ1csd0JBQVMsR0FBdkIsVUFBd0IsWUFBMkI7UUFDL0MsT0FBTyw4QkFBWSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFOc0IsaUJBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxjQUFjLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLGNBQWMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO0lBT3hHLHFCQUFDO0NBQUE7QUFyQlksd0NBQWM7QUF1QjNCO0lBTUksd0JBQW1CLEdBQXFCO1FBQ3BDLDhCQUFZLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNhLDBCQUFXLEdBQXpCO1FBQ0ksT0FBTyw2QkFBNkIsQ0FBQztJQUN6QyxDQUFDO0lBQ2EsMkJBQVksR0FBMUI7UUFDSSxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDVyx3QkFBUyxHQUF2QixVQUF3QixZQUEyQjtRQUMvQyxPQUFPLDhCQUFZLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQU5zQixpQkFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLGNBQWMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsY0FBYyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7SUFPeEcscUJBQUM7Q0FBQTtBQXRCWSx3Q0FBYztBQXdCM0I7SUFNSSw2QkFBbUIsR0FBMEI7UUFDekMsOEJBQVksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFDYSwrQkFBVyxHQUF6QjtRQUNJLE9BQU8sa0NBQWtDLENBQUM7SUFDOUMsQ0FBQztJQUNhLGdDQUFZLEdBQTFCO1FBQ0ksT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ1csNkJBQVMsR0FBdkIsVUFBd0IsWUFBMkI7UUFDL0MsT0FBTyw4QkFBWSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQU5zQixzQkFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO0lBT2xILDBCQUFDO0NBQUE7QUF0Qlksa0RBQW1CO0FBd0JoQztJQUtJLDhCQUFtQixHQUEyQjtRQUMxQyw4QkFBWSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNhLGdDQUFXLEdBQXpCO1FBQ0ksT0FBTyxtQ0FBbUMsQ0FBQztJQUMvQyxDQUFDO0lBQ2EsaUNBQVksR0FBMUI7UUFDSSxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDVyw4QkFBUyxHQUF2QixVQUF3QixZQUEyQjtRQUMvQyxPQUFPLDhCQUFZLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBTnNCLHVCQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsb0JBQW9CLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7SUFPcEgsMkJBQUM7Q0FBQTtBQXJCWSxvREFBb0I7QUF1QmpDO0lBT0ksNEJBQW1CLEdBQXlCO1FBQ3hDLDhCQUFZLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ2EsOEJBQVcsR0FBekI7UUFDSSxPQUFPLGlDQUFpQyxDQUFDO0lBQzdDLENBQUM7SUFDYSwrQkFBWSxHQUExQjtRQUNJLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNXLDRCQUFTLEdBQXZCLFVBQXdCLFlBQTJCO1FBQy9DLE9BQU8sOEJBQVksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFOc0IscUJBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztJQU9oSCx5QkFBQztDQUFBO0FBdkJZLGdEQUFrQjtBQXlCL0I7SUFLSSx5QkFBbUIsR0FBc0I7UUFDckMsOEJBQVksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ2EsMkJBQVcsR0FBekI7UUFDSSxPQUFPLGlDQUFpQyxDQUFDO0lBQzdDLENBQUM7SUFDYSw0QkFBWSxHQUExQjtRQUNJLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNXLHlCQUFTLEdBQXZCLFVBQXdCLFlBQTJCO1FBQy9DLE9BQU8sOEJBQVksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBTnNCLGtCQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxlQUFlLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztJQU8xRyxzQkFBQztDQUFBO0FBckJZLDBDQUFlIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0BhdWdsb29wL3R5cGVzLWNvcmUvZGlzdC9zcmMvZ2VuZXJhdGVkL29wZXJhdGlvbnMuZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyA8YXV0by1nZW5lcmF0ZWQ+XHJcbi8vIFRoaXMgY29kZSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBAYXVnbG9vcC9jb2RlLWdlbiB0b29sLlxyXG4vLyBTb3VyY2U6IGh0dHBzOi8vZGV2LmF6dXJlLmNvbS9vZmZpY2UvSVNTL19naXQvYXVnbG9vcC1zZXJ2ZXI/cGF0aD0lMkZtb2R1bGVzJTJGdHlwZXMtY29yZSUyRnNyYyUyRm9wZXJhdGlvbnMudHNcclxuLy8gQ2hhbmdlcyB0byB0aGlzIGZpbGUgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IHVwb24gcmVnZW5lcmF0aW9uLlxyXG4vLyA8L2F1dG8tZ2VuZXJhdGVkPlxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbmltcG9ydCB7IElBZGRPcGVyYXRpb24sIElEZWxldGVPcGVyYXRpb24sIElEZWx0YVVwZGF0ZU9wZXJhdGlvbiwgSUZvY3VzT3BlcmF0aW9uLCBJSXRlbUNoYW5nZXNEZWx0YSwgSUl0ZW1EZWx0YSwgSU1pY3JvU3luY09wZXJhdGlvbiwgSU1vdmVPcGVyYXRpb24sIElPcGVyYXRpb24sIElPcGVyYXRpb25XaXRoU2libGluZ0NvbnRleHQsIElQdXJnZU9wZXJhdGlvbiwgSVNpZ25hbE9wZXJhdGlvbiwgSVVwZGF0ZUFubm90YXRpb25NZXRhRGF0YU9wZXJhdGlvbiwgSVVwZGF0ZU9wZXJhdGlvbiwgSVZpc2liaWxpdHlPcGVyYXRpb24sIEl0ZW0sIEl0ZW1DaGFuZ2VzLCBJdGVtUGF0aCB9IGZyb20gJy4uL29wZXJhdGlvbnMnO1xyXG5pbXBvcnQgeyBTY2hlbWFPYmplY3QgfSBmcm9tICcuL3NjaGVtYS1vYmplY3QuZyc7XHJcbmltcG9ydCB7IElTY2hlbWFPYmplY3QsIFNjaGVtYU9iamVjdEhlYWRlciB9IGZyb20gJy4uL3NjaGVtYS1vYmplY3QnO1xyXG5pbXBvcnQgeyBBbm5vdGF0aW9uTWV0YURhdGEgfSBmcm9tICcuLi9hbm5vdGF0aW9ucyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbURlbHRhIGltcGxlbWVudHMgSUl0ZW1EZWx0YSB7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdGU/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgSF86IFNjaGVtYU9iamVjdEhlYWRlcjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo/OiBJSXRlbURlbHRhKSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihJdGVtRGVsdGEsIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfSXRlbURlbHRhJztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogSXRlbURlbHRhLmdldFR5cGVOYW1lKCksIEJfOiBJdGVtRGVsdGEuZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIEl0ZW1EZWx0YSB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElJdGVtRGVsdGF9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgdHlwZUd1YXJkKHNjaGVtYU9iamVjdDogSVNjaGVtYU9iamVjdCk6IHNjaGVtYU9iamVjdCBpcyBJSXRlbURlbHRhIHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtJdGVtRGVsdGEuZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUNoYW5nZXNEZWx0YSBpbXBsZW1lbnRzIElJdGVtQ2hhbmdlc0RlbHRhIHtcclxuICAgIHB1YmxpYyBjaGFuZ2VzOiBJdGVtQ2hhbmdlc1tdO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXRlPzogc3RyaW5nO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSUl0ZW1DaGFuZ2VzRGVsdGEpIHtcclxuICAgICAgICBTY2hlbWFPYmplY3QuYXNzaWduKEl0ZW1DaGFuZ2VzRGVsdGEsIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfSXRlbUNoYW5nZXNEZWx0YSc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsnQXVnTG9vcF9Db3JlX0l0ZW1EZWx0YSddO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IEl0ZW1DaGFuZ2VzRGVsdGEuZ2V0VHlwZU5hbWUoKSwgQl86IEl0ZW1DaGFuZ2VzRGVsdGEuZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIEl0ZW1DaGFuZ2VzRGVsdGEgdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJSXRlbUNoYW5nZXNEZWx0YX1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElJdGVtQ2hhbmdlc0RlbHRhIHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtJdGVtQ2hhbmdlc0RlbHRhLmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbiBpbXBsZW1lbnRzIElPcGVyYXRpb24ge1xyXG4gICAgcHVibGljIHBhcmVudFBhdGg6IEl0ZW1QYXRoO1xyXG4gICAgcHVibGljIHBhcmVudFJldklkPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGl0ZW1zOiBJdGVtW107XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgSF86IFNjaGVtYU9iamVjdEhlYWRlcjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo/OiBJT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihPcGVyYXRpb24sIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfT3BlcmF0aW9uJztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogT3BlcmF0aW9uLmdldFR5cGVOYW1lKCksIEJfOiBPcGVyYXRpb24uZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIE9wZXJhdGlvbiB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElPcGVyYXRpb259XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgdHlwZUd1YXJkKHNjaGVtYU9iamVjdDogSVNjaGVtYU9iamVjdCk6IHNjaGVtYU9iamVjdCBpcyBJT3BlcmF0aW9uIHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtPcGVyYXRpb24uZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uV2l0aFNpYmxpbmdDb250ZXh0IGltcGxlbWVudHMgSU9wZXJhdGlvbldpdGhTaWJsaW5nQ29udGV4dCB7XHJcbiAgICBwdWJsaWMgcHJldklkPzogc3RyaW5nO1xyXG4gICAgcHVibGljIG5leHRJZD86IHN0cmluZztcclxuICAgIHB1YmxpYyBwYXJlbnRQYXRoOiBJdGVtUGF0aDtcclxuICAgIHB1YmxpYyBwYXJlbnRSZXZJZD86IHN0cmluZztcclxuICAgIHB1YmxpYyBpdGVtczogSXRlbVtdO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSU9wZXJhdGlvbldpdGhTaWJsaW5nQ29udGV4dCkge1xyXG4gICAgICAgIFNjaGVtYU9iamVjdC5hc3NpZ24oT3BlcmF0aW9uV2l0aFNpYmxpbmdDb250ZXh0LCB0aGlzLCBvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUeXBlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnQXVnTG9vcF9Db3JlX09wZXJhdGlvbldpdGhTaWJsaW5nQ29udGV4dCc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsnQXVnTG9vcF9Db3JlX09wZXJhdGlvbiddO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IE9wZXJhdGlvbldpdGhTaWJsaW5nQ29udGV4dC5nZXRUeXBlTmFtZSgpLCBCXzogT3BlcmF0aW9uV2l0aFNpYmxpbmdDb250ZXh0LmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBPcGVyYXRpb25XaXRoU2libGluZ0NvbnRleHQgdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJT3BlcmF0aW9uV2l0aFNpYmxpbmdDb250ZXh0fVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHR5cGVHdWFyZChzY2hlbWFPYmplY3Q6IElTY2hlbWFPYmplY3QpOiBzY2hlbWFPYmplY3QgaXMgSU9wZXJhdGlvbldpdGhTaWJsaW5nQ29udGV4dCB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbT3BlcmF0aW9uV2l0aFNpYmxpbmdDb250ZXh0LmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFkZE9wZXJhdGlvbiBpbXBsZW1lbnRzIElBZGRPcGVyYXRpb24ge1xyXG4gICAgcHVibGljIHByZXZJZD86IHN0cmluZztcclxuICAgIHB1YmxpYyBuZXh0SWQ/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcGFyZW50UGF0aDogSXRlbVBhdGg7XHJcbiAgICBwdWJsaWMgcGFyZW50UmV2SWQ/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaXRlbXM6IEl0ZW1bXTtcclxuICAgIHB1YmxpYyByZWFkb25seSBIXzogU2NoZW1hT2JqZWN0SGVhZGVyO1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG9iaj86IElBZGRPcGVyYXRpb24pIHtcclxuICAgICAgICBTY2hlbWFPYmplY3QuYXNzaWduKEFkZE9wZXJhdGlvbiwgdGhpcywgb2JqKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VHlwZU5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJ0F1Z0xvb3BfQ29yZV9BZGRPcGVyYXRpb24nO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRCYXNlVHlwZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbJ0F1Z0xvb3BfQ29yZV9PcGVyYXRpb25XaXRoU2libGluZ0NvbnRleHQnLCAnQXVnTG9vcF9Db3JlX09wZXJhdGlvbiddO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IEFkZE9wZXJhdGlvbi5nZXRUeXBlTmFtZSgpLCBCXzogQWRkT3BlcmF0aW9uLmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBBZGRPcGVyYXRpb24gdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJQWRkT3BlcmF0aW9ufVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHR5cGVHdWFyZChzY2hlbWFPYmplY3Q6IElTY2hlbWFPYmplY3QpOiBzY2hlbWFPYmplY3QgaXMgSUFkZE9wZXJhdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbQWRkT3BlcmF0aW9uLmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1vdmVPcGVyYXRpb24gaW1wbGVtZW50cyBJTW92ZU9wZXJhdGlvbiB7XHJcbiAgICBwdWJsaWMgcHJldlBhcmVudFBhdGg6IEl0ZW1QYXRoO1xyXG4gICAgcHVibGljIHByZXZJZD86IHN0cmluZztcclxuICAgIHB1YmxpYyBuZXh0SWQ/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcGFyZW50UGF0aDogSXRlbVBhdGg7XHJcbiAgICBwdWJsaWMgcGFyZW50UmV2SWQ/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaXRlbXM6IEl0ZW1bXTtcclxuICAgIHB1YmxpYyByZWFkb25seSBIXzogU2NoZW1hT2JqZWN0SGVhZGVyO1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG9iaj86IElNb3ZlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihNb3ZlT3BlcmF0aW9uLCB0aGlzLCBvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUeXBlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnQXVnTG9vcF9Db3JlX01vdmVPcGVyYXRpb24nO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRCYXNlVHlwZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbJ0F1Z0xvb3BfQ29yZV9PcGVyYXRpb25XaXRoU2libGluZ0NvbnRleHQnLCAnQXVnTG9vcF9Db3JlX09wZXJhdGlvbiddO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IE1vdmVPcGVyYXRpb24uZ2V0VHlwZU5hbWUoKSwgQl86IE1vdmVPcGVyYXRpb24uZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIE1vdmVPcGVyYXRpb24gdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJTW92ZU9wZXJhdGlvbn1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElNb3ZlT3BlcmF0aW9uIHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtNb3ZlT3BlcmF0aW9uLmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVwZGF0ZUFubm90YXRpb25NZXRhRGF0YU9wZXJhdGlvbiBpbXBsZW1lbnRzIElVcGRhdGVBbm5vdGF0aW9uTWV0YURhdGFPcGVyYXRpb24ge1xyXG4gICAgcHVibGljIE1fOiBBbm5vdGF0aW9uTWV0YURhdGE7XHJcbiAgICBwdWJsaWMgcGFyZW50UGF0aDogSXRlbVBhdGg7XHJcbiAgICBwdWJsaWMgcGFyZW50UmV2SWQ/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaXRlbXM6IEl0ZW1bXTtcclxuICAgIHB1YmxpYyByZWFkb25seSBIXzogU2NoZW1hT2JqZWN0SGVhZGVyO1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG9iaj86IElVcGRhdGVBbm5vdGF0aW9uTWV0YURhdGFPcGVyYXRpb24pIHtcclxuICAgICAgICBTY2hlbWFPYmplY3QuYXNzaWduKFVwZGF0ZUFubm90YXRpb25NZXRhRGF0YU9wZXJhdGlvbiwgdGhpcywgb2JqKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VHlwZU5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJ0F1Z0xvb3BfQ29yZV9VcGRhdGVBbm5vdGF0aW9uTWV0YURhdGFPcGVyYXRpb24nO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRCYXNlVHlwZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbJ0F1Z0xvb3BfQ29yZV9PcGVyYXRpb24nXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSF8gPSB7IFRfOiBVcGRhdGVBbm5vdGF0aW9uTWV0YURhdGFPcGVyYXRpb24uZ2V0VHlwZU5hbWUoKSwgQl86IFVwZGF0ZUFubm90YXRpb25NZXRhRGF0YU9wZXJhdGlvbi5nZXRCYXNlVHlwZXMoKSB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgcGFzc2VkIHNjaGVtYSBvYmplY3QgaXMgb2YgVXBkYXRlQW5ub3RhdGlvbk1ldGFEYXRhT3BlcmF0aW9uIHR5cGUgb3IgaXRzIGluaGVyaXRvciBhbmQgaW1wbGVtZW50cyB7QGxpbmsgSVVwZGF0ZUFubm90YXRpb25NZXRhRGF0YU9wZXJhdGlvbn1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElVcGRhdGVBbm5vdGF0aW9uTWV0YURhdGFPcGVyYXRpb24ge1xyXG4gICAgICAgIHJldHVybiBTY2hlbWFPYmplY3QubWF0Y2hlc1R5cGVzRm9yKHNjaGVtYU9iamVjdCwgW1VwZGF0ZUFubm90YXRpb25NZXRhRGF0YU9wZXJhdGlvbi5nZXRUeXBlTmFtZSgpXSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVcGRhdGVPcGVyYXRpb24gaW1wbGVtZW50cyBJVXBkYXRlT3BlcmF0aW9uIHtcclxuICAgIHB1YmxpYyBwYXJlbnRQYXRoOiBJdGVtUGF0aDtcclxuICAgIHB1YmxpYyBwYXJlbnRSZXZJZD86IHN0cmluZztcclxuICAgIHB1YmxpYyBpdGVtczogSXRlbVtdO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSVVwZGF0ZU9wZXJhdGlvbikge1xyXG4gICAgICAgIFNjaGVtYU9iamVjdC5hc3NpZ24oVXBkYXRlT3BlcmF0aW9uLCB0aGlzLCBvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUeXBlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnQXVnTG9vcF9Db3JlX1VwZGF0ZU9wZXJhdGlvbic7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsnQXVnTG9vcF9Db3JlX09wZXJhdGlvbiddO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IFVwZGF0ZU9wZXJhdGlvbi5nZXRUeXBlTmFtZSgpLCBCXzogVXBkYXRlT3BlcmF0aW9uLmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBVcGRhdGVPcGVyYXRpb24gdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJVXBkYXRlT3BlcmF0aW9ufVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHR5cGVHdWFyZChzY2hlbWFPYmplY3Q6IElTY2hlbWFPYmplY3QpOiBzY2hlbWFPYmplY3QgaXMgSVVwZGF0ZU9wZXJhdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbVXBkYXRlT3BlcmF0aW9uLmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIERlbGV0ZU9wZXJhdGlvbiBpbXBsZW1lbnRzIElEZWxldGVPcGVyYXRpb24ge1xyXG4gICAgcHVibGljIHBhcmVudFBhdGg6IEl0ZW1QYXRoO1xyXG4gICAgcHVibGljIHBhcmVudFJldklkPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGl0ZW1zOiBJdGVtW107XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgSF86IFNjaGVtYU9iamVjdEhlYWRlcjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo/OiBJRGVsZXRlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihEZWxldGVPcGVyYXRpb24sIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfRGVsZXRlT3BlcmF0aW9uJztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gWydBdWdMb29wX0NvcmVfT3BlcmF0aW9uJ107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogRGVsZXRlT3BlcmF0aW9uLmdldFR5cGVOYW1lKCksIEJfOiBEZWxldGVPcGVyYXRpb24uZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIERlbGV0ZU9wZXJhdGlvbiB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElEZWxldGVPcGVyYXRpb259XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgdHlwZUd1YXJkKHNjaGVtYU9iamVjdDogSVNjaGVtYU9iamVjdCk6IHNjaGVtYU9iamVjdCBpcyBJRGVsZXRlT3BlcmF0aW9uIHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtEZWxldGVPcGVyYXRpb24uZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUHVyZ2VPcGVyYXRpb24gaW1wbGVtZW50cyBJUHVyZ2VPcGVyYXRpb24ge1xyXG4gICAgcHVibGljIHBhcmVudFBhdGg6IEl0ZW1QYXRoO1xyXG4gICAgcHVibGljIHBhcmVudFJldklkPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGl0ZW1zOiBJdGVtW107XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgSF86IFNjaGVtYU9iamVjdEhlYWRlcjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo/OiBJUHVyZ2VPcGVyYXRpb24pIHtcclxuICAgICAgICBTY2hlbWFPYmplY3QuYXNzaWduKFB1cmdlT3BlcmF0aW9uLCB0aGlzLCBvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUeXBlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnQXVnTG9vcF9Db3JlX1B1cmdlT3BlcmF0aW9uJztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gWydBdWdMb29wX0NvcmVfT3BlcmF0aW9uJ107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogUHVyZ2VPcGVyYXRpb24uZ2V0VHlwZU5hbWUoKSwgQl86IFB1cmdlT3BlcmF0aW9uLmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBQdXJnZU9wZXJhdGlvbiB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElQdXJnZU9wZXJhdGlvbn1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElQdXJnZU9wZXJhdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbUHVyZ2VPcGVyYXRpb24uZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRm9jdXNPcGVyYXRpb24gaW1wbGVtZW50cyBJRm9jdXNPcGVyYXRpb24ge1xyXG4gICAgcHVibGljIGlzRm9jdXNlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwYXJlbnRQYXRoOiBJdGVtUGF0aDtcclxuICAgIHB1YmxpYyBwYXJlbnRSZXZJZD86IHN0cmluZztcclxuICAgIHB1YmxpYyBpdGVtczogSXRlbVtdO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSUZvY3VzT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihGb2N1c09wZXJhdGlvbiwgdGhpcywgb2JqKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VHlwZU5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJ0F1Z0xvb3BfQ29yZV9Gb2N1c09wZXJhdGlvbic7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsnQXVnTG9vcF9Db3JlX09wZXJhdGlvbiddO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IEZvY3VzT3BlcmF0aW9uLmdldFR5cGVOYW1lKCksIEJfOiBGb2N1c09wZXJhdGlvbi5nZXRCYXNlVHlwZXMoKSB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgcGFzc2VkIHNjaGVtYSBvYmplY3QgaXMgb2YgRm9jdXNPcGVyYXRpb24gdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJRm9jdXNPcGVyYXRpb259XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgdHlwZUd1YXJkKHNjaGVtYU9iamVjdDogSVNjaGVtYU9iamVjdCk6IHNjaGVtYU9iamVjdCBpcyBJRm9jdXNPcGVyYXRpb24ge1xyXG4gICAgICAgIHJldHVybiBTY2hlbWFPYmplY3QubWF0Y2hlc1R5cGVzRm9yKHNjaGVtYU9iamVjdCwgW0ZvY3VzT3BlcmF0aW9uLmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFZpc2liaWxpdHlPcGVyYXRpb24gaW1wbGVtZW50cyBJVmlzaWJpbGl0eU9wZXJhdGlvbiB7XHJcbiAgICBwdWJsaWMgaXNWaXNpYmxlOiBib29sZWFuO1xyXG4gICAgcHVibGljIHBhcmVudFBhdGg6IEl0ZW1QYXRoO1xyXG4gICAgcHVibGljIHBhcmVudFJldklkPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGl0ZW1zOiBJdGVtW107XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgSF86IFNjaGVtYU9iamVjdEhlYWRlcjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo/OiBJVmlzaWJpbGl0eU9wZXJhdGlvbikge1xyXG4gICAgICAgIFNjaGVtYU9iamVjdC5hc3NpZ24oVmlzaWJpbGl0eU9wZXJhdGlvbiwgdGhpcywgb2JqKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VHlwZU5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJ0F1Z0xvb3BfQ29yZV9WaXNpYmlsaXR5T3BlcmF0aW9uJztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gWydBdWdMb29wX0NvcmVfT3BlcmF0aW9uJ107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogVmlzaWJpbGl0eU9wZXJhdGlvbi5nZXRUeXBlTmFtZSgpLCBCXzogVmlzaWJpbGl0eU9wZXJhdGlvbi5nZXRCYXNlVHlwZXMoKSB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgcGFzc2VkIHNjaGVtYSBvYmplY3QgaXMgb2YgVmlzaWJpbGl0eU9wZXJhdGlvbiB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElWaXNpYmlsaXR5T3BlcmF0aW9ufVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHR5cGVHdWFyZChzY2hlbWFPYmplY3Q6IElTY2hlbWFPYmplY3QpOiBzY2hlbWFPYmplY3QgaXMgSVZpc2liaWxpdHlPcGVyYXRpb24ge1xyXG4gICAgICAgIHJldHVybiBTY2hlbWFPYmplY3QubWF0Y2hlc1R5cGVzRm9yKHNjaGVtYU9iamVjdCwgW1Zpc2liaWxpdHlPcGVyYXRpb24uZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRGVsdGFVcGRhdGVPcGVyYXRpb24gaW1wbGVtZW50cyBJRGVsdGFVcGRhdGVPcGVyYXRpb24ge1xyXG4gICAgcHVibGljIHBhcmVudFBhdGg6IEl0ZW1QYXRoO1xyXG4gICAgcHVibGljIHBhcmVudFJldklkPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGl0ZW1zOiBJdGVtW107XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgSF86IFNjaGVtYU9iamVjdEhlYWRlcjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo/OiBJRGVsdGFVcGRhdGVPcGVyYXRpb24pIHtcclxuICAgICAgICBTY2hlbWFPYmplY3QuYXNzaWduKERlbHRhVXBkYXRlT3BlcmF0aW9uLCB0aGlzLCBvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUeXBlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnQXVnTG9vcF9Db3JlX0RlbHRhVXBkYXRlT3BlcmF0aW9uJztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gWydBdWdMb29wX0NvcmVfT3BlcmF0aW9uJ107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogRGVsdGFVcGRhdGVPcGVyYXRpb24uZ2V0VHlwZU5hbWUoKSwgQl86IERlbHRhVXBkYXRlT3BlcmF0aW9uLmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBEZWx0YVVwZGF0ZU9wZXJhdGlvbiB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElEZWx0YVVwZGF0ZU9wZXJhdGlvbn1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElEZWx0YVVwZGF0ZU9wZXJhdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbRGVsdGFVcGRhdGVPcGVyYXRpb24uZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWljcm9TeW5jT3BlcmF0aW9uIGltcGxlbWVudHMgSU1pY3JvU3luY09wZXJhdGlvbiB7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VxPzogbnVtYmVyO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IG9wVHlwZT86IHN0cmluZztcclxuICAgIHB1YmxpYyBwYXJlbnRQYXRoOiBJdGVtUGF0aDtcclxuICAgIHB1YmxpYyBwYXJlbnRSZXZJZD86IHN0cmluZztcclxuICAgIHB1YmxpYyBpdGVtczogSXRlbVtdO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSU1pY3JvU3luY09wZXJhdGlvbikge1xyXG4gICAgICAgIFNjaGVtYU9iamVjdC5hc3NpZ24oTWljcm9TeW5jT3BlcmF0aW9uLCB0aGlzLCBvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUeXBlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnQXVnTG9vcF9Db3JlX01pY3JvU3luY09wZXJhdGlvbic7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsnQXVnTG9vcF9Db3JlX09wZXJhdGlvbiddO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IE1pY3JvU3luY09wZXJhdGlvbi5nZXRUeXBlTmFtZSgpLCBCXzogTWljcm9TeW5jT3BlcmF0aW9uLmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBNaWNyb1N5bmNPcGVyYXRpb24gdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJTWljcm9TeW5jT3BlcmF0aW9ufVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHR5cGVHdWFyZChzY2hlbWFPYmplY3Q6IElTY2hlbWFPYmplY3QpOiBzY2hlbWFPYmplY3QgaXMgSU1pY3JvU3luY09wZXJhdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbTWljcm9TeW5jT3BlcmF0aW9uLmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25hbE9wZXJhdGlvbiBpbXBsZW1lbnRzIElTaWduYWxPcGVyYXRpb24ge1xyXG4gICAgcHVibGljIHBhcmVudFBhdGg6IEl0ZW1QYXRoO1xyXG4gICAgcHVibGljIHBhcmVudFJldklkPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGl0ZW1zOiBJdGVtW107XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgSF86IFNjaGVtYU9iamVjdEhlYWRlcjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo/OiBJU2lnbmFsT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihTaWduYWxPcGVyYXRpb24sIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX1NpZ25hbHNfU2lnbmFsT3BlcmF0aW9uJztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gWydBdWdMb29wX0NvcmVfT3BlcmF0aW9uJ107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogU2lnbmFsT3BlcmF0aW9uLmdldFR5cGVOYW1lKCksIEJfOiBTaWduYWxPcGVyYXRpb24uZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIFNpZ25hbE9wZXJhdGlvbiB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElTaWduYWxPcGVyYXRpb259XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgdHlwZUd1YXJkKHNjaGVtYU9iamVjdDogSVNjaGVtYU9iamVjdCk6IHNjaGVtYU9iamVjdCBpcyBJU2lnbmFsT3BlcmF0aW9uIHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtTaWduYWxPcGVyYXRpb24uZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@augloop/types-core/dist/src/generated/operations.g.js\n")},"./node_modules/@augloop/types-core/dist/src/generated/schema-object.g.js":function(){"use strict";eval("\r\n// ------------------------------------------------------------------------------\r\n// <auto-generated>\r\n// This code was generated by the @augloop/code-gen tool.\r\n// Source: https://dev.azure.com/office/ISS/_git/augloop-server?path=%2Fmodules%2Ftypes-core%2Fsrc%2Fschema-object.ts\r\n// Changes to this file may cause incorrect behavior and will be lost upon regeneration.\r\n// <\/auto-generated>\r\n// ------------------------------------------------------------------------------\r\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.SchemaObject = void 0;\r\nvar SchemaObject = /** @class */ (function () {\r\n    function SchemaObject(obj) {\r\n        SchemaObject.assign(SchemaObject, this, obj);\r\n    }\r\n    SchemaObject.getTypeName = function () {\r\n        return 'AugLoop_Core_SchemaObject';\r\n    };\r\n    SchemaObject.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    // Get type name for the given ISchemaObject instance.\r\n    // Example:\r\n    //   SchemaObject.getTypeNameFor(new Foo()) === 'Foo'\r\n    SchemaObject.getTypeNameFor = function (obj) {\r\n        return (obj && obj.H_) ? obj.H_.T_ : undefined;\r\n    };\r\n    // Get base types for the given ISchemaObject instance.\r\n    // Example:\r\n    //   SchemaObject.getBaseTypesFor(new Foo()) === ['Bar', 'Baz']\r\n    SchemaObject.getBaseTypesFor = function (obj) {\r\n        return (obj && obj.H_ && obj.H_.B_) ? obj.H_.B_ : [];\r\n    };\r\n    // Get all types (direct and base) for the given ISchemaObject instance.\r\n    // Example:\r\n    //   SchemaObject.getTypesFor(new Foo()) == ['Foo', 'Bar', 'Baz']\r\n    SchemaObject.getAllTypesFor = function (obj) {\r\n        var typeName = SchemaObject.getTypeNameFor(obj);\r\n        return typeName ? __spreadArray([typeName], SchemaObject.getBaseTypesFor(obj), true) : [];\r\n    };\r\n    // Returns true if the given object has any of the types in the given array,\r\n    // or if that array is undefined or empty.\r\n    SchemaObject.matchesTypesFor = function (obj, types) {\r\n        if (!Array.isArray(types) || types.length === 0) {\r\n            // Nothing passed in means \"match everything\"\r\n            return true;\r\n        }\r\n        var objType = SchemaObject.getTypeNameFor(obj);\r\n        var baseTypes = SchemaObject.getBaseTypesFor(obj);\r\n        for (var _i = 0, types_1 = types; _i < types_1.length; _i++) {\r\n            var typeName = types_1[_i];\r\n            if (typeName === objType) {\r\n                return true;\r\n            }\r\n            if (baseTypes.indexOf(typeName) >= 0) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    SchemaObject.assign = function (ctr, target, source) {\r\n        // Assign source properties to target\r\n        if (source) {\r\n            for (var _i = 0, _a = Object.keys(source); _i < _a.length; _i++) {\r\n                var key = _a[_i];\r\n                target[key] = source[key];\r\n            }\r\n        }\r\n        // Cast away readonly to set the header\r\n        target.H_ = ctr.H_;\r\n        // Return target instance\r\n        return target;\r\n    };\r\n    SchemaObject.H_ = { T_: SchemaObject.getTypeName(), B_: SchemaObject.getBaseTypes() };\r\n    return SchemaObject;\r\n}());\r\nexports.SchemaObject = SchemaObject;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vc3JjL2dlbmVyYXRlZC9zY2hlbWEtb2JqZWN0LmcudHM/YjJhMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUZBQWlGO0FBQ2pGLG1CQUFtQjtBQUNuQix5REFBeUQ7QUFDekQscUhBQXFIO0FBQ3JILHdGQUF3RjtBQUN4RixvQkFBb0I7QUFDcEIsaUZBQWlGOzs7Ozs7Ozs7Ozs7QUFLakY7SUFFSSxzQkFBbUIsR0FBbUI7UUFDbEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDYSx3QkFBVyxHQUF6QjtRQUNJLE9BQU8sMkJBQTJCLENBQUM7SUFDdkMsQ0FBQztJQUNhLHlCQUFZLEdBQTFCO1FBQ0ksT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBR0Qsc0RBQXNEO0lBQ3RELFdBQVc7SUFDWCxxREFBcUQ7SUFDdkMsMkJBQWMsR0FBNUIsVUFBNkIsR0FBa0I7UUFDM0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDbkQsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCxXQUFXO0lBQ1gsK0RBQStEO0lBQ2pELDRCQUFlLEdBQTdCLFVBQThCLEdBQWtCO1FBQzVDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsV0FBVztJQUNYLGlFQUFpRTtJQUNuRCwyQkFBYyxHQUE1QixVQUE2QixHQUFrQjtRQUMzQyxJQUFNLFFBQVEsR0FBVyxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFELE9BQU8sUUFBUSxDQUFDLENBQUMsZ0JBQUUsUUFBUSxHQUFLLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1RSxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLDBDQUEwQztJQUM1Qiw0QkFBZSxHQUE3QixVQUE4QixHQUFrQixFQUFFLEtBQWU7UUFDN0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0MsNkNBQTZDO1lBQzdDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxJQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELElBQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEQsS0FBdUIsVUFBSyxFQUFMLGVBQUssRUFBTCxtQkFBSyxFQUFMLElBQUssRUFBRTtZQUF6QixJQUFNLFFBQVE7WUFDZixJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUU7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNsQyxPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRWEsbUJBQU0sR0FBcEIsVUFBcUIsR0FBNkIsRUFBRSxNQUFxQixFQUFFLE1BQXNCO1FBQzdGLHFDQUFxQztRQUNyQyxJQUFJLE1BQU0sRUFBRTtZQUNSLEtBQWtCLFVBQW1CLEVBQW5CLFdBQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQW5CLGNBQW1CLEVBQW5CLElBQW1CLEVBQUU7Z0JBQWxDLElBQU0sR0FBRztnQkFDVixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzdCO1NBQ0o7UUFDRCx1Q0FBdUM7UUFDdEMsTUFBcUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuRix5QkFBeUI7UUFDekIsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQXZEc0IsZUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7SUF3RHBHLG1CQUFDO0NBQUE7QUFuRVksb0NBQVkiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGF1Z2xvb3AvdHlwZXMtY29yZS9kaXN0L3NyYy9nZW5lcmF0ZWQvc2NoZW1hLW9iamVjdC5nLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIDxhdXRvLWdlbmVyYXRlZD5cclxuLy8gVGhpcyBjb2RlIHdhcyBnZW5lcmF0ZWQgYnkgdGhlIEBhdWdsb29wL2NvZGUtZ2VuIHRvb2wuXHJcbi8vIFNvdXJjZTogaHR0cHM6Ly9kZXYuYXp1cmUuY29tL29mZmljZS9JU1MvX2dpdC9hdWdsb29wLXNlcnZlcj9wYXRoPSUyRm1vZHVsZXMlMkZ0eXBlcy1jb3JlJTJGc3JjJTJGc2NoZW1hLW9iamVjdC50c1xyXG4vLyBDaGFuZ2VzIHRvIHRoaXMgZmlsZSBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3QgdXBvbiByZWdlbmVyYXRpb24uXHJcbi8vIDwvYXV0by1nZW5lcmF0ZWQ+XHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuaW1wb3J0IHsgSVNjaGVtYU9iamVjdCwgU2NoZW1hT2JqZWN0SGVhZGVyIH0gZnJvbSAnLi4vc2NoZW1hLW9iamVjdCc7XHJcbmltcG9ydCB7IElTY2hlbWFPYmplY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uL3NjaGVtYS1vYmplY3QtY29uc3RydWN0b3InO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNjaGVtYU9iamVjdCBpbXBsZW1lbnRzIElTY2hlbWFPYmplY3Qge1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSVNjaGVtYU9iamVjdCkge1xyXG4gICAgICAgIFNjaGVtYU9iamVjdC5hc3NpZ24oU2NoZW1hT2JqZWN0LCB0aGlzLCBvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUeXBlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnQXVnTG9vcF9Db3JlX1NjaGVtYU9iamVjdCc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IFNjaGVtYU9iamVjdC5nZXRUeXBlTmFtZSgpLCBCXzogU2NoZW1hT2JqZWN0LmdldEJhc2VUeXBlcygpIH07XHJcblxyXG4gICAgLy8gR2V0IHR5cGUgbmFtZSBmb3IgdGhlIGdpdmVuIElTY2hlbWFPYmplY3QgaW5zdGFuY2UuXHJcbiAgICAvLyBFeGFtcGxlOlxyXG4gICAgLy8gICBTY2hlbWFPYmplY3QuZ2V0VHlwZU5hbWVGb3IobmV3IEZvbygpKSA9PT0gJ0ZvbydcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VHlwZU5hbWVGb3Iob2JqOiBJU2NoZW1hT2JqZWN0KTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gKG9iaiAmJiBvYmouSF8pID8gb2JqLkhfLlRfIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdldCBiYXNlIHR5cGVzIGZvciB0aGUgZ2l2ZW4gSVNjaGVtYU9iamVjdCBpbnN0YW5jZS5cclxuICAgIC8vIEV4YW1wbGU6XHJcbiAgICAvLyAgIFNjaGVtYU9iamVjdC5nZXRCYXNlVHlwZXNGb3IobmV3IEZvbygpKSA9PT0gWydCYXInLCAnQmF6J11cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzRm9yKG9iajogSVNjaGVtYU9iamVjdCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gKG9iaiAmJiBvYmouSF8gJiYgb2JqLkhfLkJfKSA/IG9iai5IXy5CXyA6IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdldCBhbGwgdHlwZXMgKGRpcmVjdCBhbmQgYmFzZSkgZm9yIHRoZSBnaXZlbiBJU2NoZW1hT2JqZWN0IGluc3RhbmNlLlxyXG4gICAgLy8gRXhhbXBsZTpcclxuICAgIC8vICAgU2NoZW1hT2JqZWN0LmdldFR5cGVzRm9yKG5ldyBGb28oKSkgPT0gWydGb28nLCAnQmFyJywgJ0JheiddXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEFsbFR5cGVzRm9yKG9iajogSVNjaGVtYU9iamVjdCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBjb25zdCB0eXBlTmFtZTogc3RyaW5nID0gU2NoZW1hT2JqZWN0LmdldFR5cGVOYW1lRm9yKG9iaik7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVOYW1lID8gW3R5cGVOYW1lLCAuLi5TY2hlbWFPYmplY3QuZ2V0QmFzZVR5cGVzRm9yKG9iaildIDogW107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIGFueSBvZiB0aGUgdHlwZXMgaW4gdGhlIGdpdmVuIGFycmF5LFxyXG4gICAgLy8gb3IgaWYgdGhhdCBhcnJheSBpcyB1bmRlZmluZWQgb3IgZW1wdHkuXHJcbiAgICBwdWJsaWMgc3RhdGljIG1hdGNoZXNUeXBlc0ZvcihvYmo6IElTY2hlbWFPYmplY3QsIHR5cGVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0eXBlcykgfHwgdHlwZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIE5vdGhpbmcgcGFzc2VkIGluIG1lYW5zIFwibWF0Y2ggZXZlcnl0aGluZ1wiXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvYmpUeXBlID0gU2NoZW1hT2JqZWN0LmdldFR5cGVOYW1lRm9yKG9iaik7XHJcbiAgICAgICAgY29uc3QgYmFzZVR5cGVzID0gU2NoZW1hT2JqZWN0LmdldEJhc2VUeXBlc0ZvcihvYmopO1xyXG4gICAgICAgIGZvciAoY29uc3QgdHlwZU5hbWUgb2YgdHlwZXMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVOYW1lID09PSBvYmpUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYmFzZVR5cGVzLmluZGV4T2YodHlwZU5hbWUpID49IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGFzc2lnbihjdHI6IElTY2hlbWFPYmplY3RDb25zdHJ1Y3RvciwgdGFyZ2V0OiBJU2NoZW1hT2JqZWN0LCBzb3VyY2U/OiBJU2NoZW1hT2JqZWN0KSB7XHJcbiAgICAgICAgLy8gQXNzaWduIHNvdXJjZSBwcm9wZXJ0aWVzIHRvIHRhcmdldFxyXG4gICAgICAgIGlmIChzb3VyY2UpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc291cmNlKSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDYXN0IGF3YXkgcmVhZG9ubHkgdG8gc2V0IHRoZSBoZWFkZXJcclxuICAgICAgICAodGFyZ2V0IGFzIHsgLXJlYWRvbmx5IFtLIGluIGtleW9mIElTY2hlbWFPYmplY3RdOiBJU2NoZW1hT2JqZWN0W0tdIH0pLkhfID0gY3RyLkhfO1xyXG4gICAgICAgIC8vIFJldHVybiB0YXJnZXQgaW5zdGFuY2VcclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG59XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@augloop/types-core/dist/src/generated/schema-object.g.js\n")},"./node_modules/@augloop/types-core/dist/src/generated/signals.g.js":function(){"use strict";eval('\r\n// ------------------------------------------------------------------------------\r\n// <auto-generated>\r\n// This code was generated by the @augloop/code-gen tool.\r\n// Source: https://dev.azure.com/office/ISS/_git/augloop-server?path=%2Fmodules%2Ftypes-core%2Fsrc%2Fsignals.ts\r\n// Changes to this file may cause incorrect behavior and will be lost upon regeneration.\r\n// <\/auto-generated>\r\n// ------------------------------------------------------------------------------\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nexports.Signal = void 0;\r\nvar schema_object_g_1 = __webpack_require__(/*! ./schema-object.g */ "./node_modules/@augloop/types-core/dist/src/generated/schema-object.g.js");\r\nvar Signal = /** @class */ (function () {\r\n    function Signal(obj) {\r\n        schema_object_g_1.SchemaObject.assign(Signal, this, obj);\r\n    }\r\n    Signal.getTypeName = function () {\r\n        return \'AugLoop_Signals_Signal\';\r\n    };\r\n    Signal.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of Signal type or its inheritor and implements {@link ISignal}\r\n     */\r\n    Signal.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [Signal.getTypeName()]);\r\n    };\r\n    Signal.H_ = { T_: Signal.getTypeName(), B_: Signal.getBaseTypes() };\r\n    return Signal;\r\n}());\r\nexports.Signal = Signal;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vc3JjL2dlbmVyYXRlZC9zaWduYWxzLmcudHM/ODhjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUZBQWlGO0FBQ2pGLG1CQUFtQjtBQUNuQix5REFBeUQ7QUFDekQsK0dBQStHO0FBQy9HLHdGQUF3RjtBQUN4RixvQkFBb0I7QUFDcEIsaUZBQWlGOzs7QUFHakYsaUpBQWlEO0FBR2pEO0lBSUksZ0JBQW1CLEdBQWE7UUFDNUIsOEJBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ2Esa0JBQVcsR0FBekI7UUFDSSxPQUFPLHdCQUF3QixDQUFDO0lBQ3BDLENBQUM7SUFDYSxtQkFBWSxHQUExQjtRQUNJLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ1csZ0JBQVMsR0FBdkIsVUFBd0IsWUFBMkI7UUFDL0MsT0FBTyw4QkFBWSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFOc0IsU0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7SUFPeEYsYUFBQztDQUFBO0FBcEJZLHdCQUFNIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0BhdWdsb29wL3R5cGVzLWNvcmUvZGlzdC9zcmMvZ2VuZXJhdGVkL3NpZ25hbHMuZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyA8YXV0by1nZW5lcmF0ZWQ+XHJcbi8vIFRoaXMgY29kZSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBAYXVnbG9vcC9jb2RlLWdlbiB0b29sLlxyXG4vLyBTb3VyY2U6IGh0dHBzOi8vZGV2LmF6dXJlLmNvbS9vZmZpY2UvSVNTL19naXQvYXVnbG9vcC1zZXJ2ZXI/cGF0aD0lMkZtb2R1bGVzJTJGdHlwZXMtY29yZSUyRnNyYyUyRnNpZ25hbHMudHNcclxuLy8gQ2hhbmdlcyB0byB0aGlzIGZpbGUgbWF5IGNhdXNlIGluY29ycmVjdCBiZWhhdmlvciBhbmQgd2lsbCBiZSBsb3N0IHVwb24gcmVnZW5lcmF0aW9uLlxyXG4vLyA8L2F1dG8tZ2VuZXJhdGVkPlxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbmltcG9ydCB7IElTaWduYWwgfSBmcm9tICcuLi9zaWduYWxzJztcclxuaW1wb3J0IHsgU2NoZW1hT2JqZWN0IH0gZnJvbSAnLi9zY2hlbWEtb2JqZWN0LmcnO1xyXG5pbXBvcnQgeyBJU2NoZW1hT2JqZWN0LCBTY2hlbWFPYmplY3RIZWFkZXIgfSBmcm9tICcuLi9zY2hlbWEtb2JqZWN0JztcclxuXHJcbmV4cG9ydCBjbGFzcyBTaWduYWwgaW1wbGVtZW50cyBJU2lnbmFsIHtcclxuICAgIHB1YmxpYyB0YXJnZXRPYmplY3Q/OiBJU2NoZW1hT2JqZWN0O1xyXG4gICAgcHVibGljIHRpbWVzdGFtcD86IG51bWJlcjtcclxuICAgIHB1YmxpYyByZWFkb25seSBIXzogU2NoZW1hT2JqZWN0SGVhZGVyO1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG9iaj86IElTaWduYWwpIHtcclxuICAgICAgICBTY2hlbWFPYmplY3QuYXNzaWduKFNpZ25hbCwgdGhpcywgb2JqKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VHlwZU5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJ0F1Z0xvb3BfU2lnbmFsc19TaWduYWwnO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRCYXNlVHlwZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSF8gPSB7IFRfOiBTaWduYWwuZ2V0VHlwZU5hbWUoKSwgQl86IFNpZ25hbC5nZXRCYXNlVHlwZXMoKSB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgcGFzc2VkIHNjaGVtYSBvYmplY3QgaXMgb2YgU2lnbmFsIHR5cGUgb3IgaXRzIGluaGVyaXRvciBhbmQgaW1wbGVtZW50cyB7QGxpbmsgSVNpZ25hbH1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElTaWduYWwge1xyXG4gICAgICAgIHJldHVybiBTY2hlbWFPYmplY3QubWF0Y2hlc1R5cGVzRm9yKHNjaGVtYU9iamVjdCwgW1NpZ25hbC5nZXRUeXBlTmFtZSgpXSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@augloop/types-core/dist/src/generated/signals.g.js\n')},"./node_modules/@augloop/types-core/dist/src/generated/tiles.g.js":function(){"use strict";eval("\r\n// ------------------------------------------------------------------------------\r\n// <auto-generated>\r\n// This code was generated by the @augloop/code-gen tool.\r\n// Source: https://dev.azure.com/office/ISS/_git/augloop-server?path=%2Fmodules%2Ftypes-core%2Fsrc%2Ftiles.ts\r\n// Changes to this file may cause incorrect behavior and will be lost upon regeneration.\r\n// <\/auto-generated>\r\n// ------------------------------------------------------------------------------\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.UserCommandsHolder = exports.EventsHolder = exports.TenantContextHolder = exports.UserContextHolder = exports.ContextHolder = exports.DynamicContext = exports.GridNeighborhoodContext = exports.GridCell = exports.SubDocument = exports.Document = exports.Session = exports.TileGroup = exports.Binary = exports.Blob = void 0;\r\nvar schema_object_g_1 = __webpack_require__(/*! ./schema-object.g */ \"./node_modules/@augloop/types-core/dist/src/generated/schema-object.g.js\");\r\nvar Blob = /** @class */ (function () {\r\n    function Blob(obj) {\r\n        schema_object_g_1.SchemaObject.assign(Blob, this, obj);\r\n    }\r\n    Blob.getTypeName = function () {\r\n        return 'AugLoop_Core_Blob';\r\n    };\r\n    Blob.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of Blob type or its inheritor and implements {@link IBlob}\r\n     */\r\n    Blob.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [Blob.getTypeName()]);\r\n    };\r\n    Blob.H_ = { T_: Blob.getTypeName(), B_: Blob.getBaseTypes() };\r\n    return Blob;\r\n}());\r\nexports.Blob = Blob;\r\nvar Binary = /** @class */ (function () {\r\n    function Binary(obj) {\r\n        schema_object_g_1.SchemaObject.assign(Binary, this, obj);\r\n    }\r\n    Binary.getTypeName = function () {\r\n        return 'AugLoop_Core_Binary';\r\n    };\r\n    Binary.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of Binary type or its inheritor and implements {@link IBinary}\r\n     */\r\n    Binary.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [Binary.getTypeName()]);\r\n    };\r\n    Binary.H_ = { T_: Binary.getTypeName(), B_: Binary.getBaseTypes() };\r\n    return Binary;\r\n}());\r\nexports.Binary = Binary;\r\nvar TileGroup = /** @class */ (function () {\r\n    function TileGroup(obj) {\r\n        schema_object_g_1.SchemaObject.assign(TileGroup, this, obj);\r\n    }\r\n    TileGroup.getTypeName = function () {\r\n        return 'AugLoop_Core_TileGroup';\r\n    };\r\n    TileGroup.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of TileGroup type or its inheritor and implements {@link ITileGroup}\r\n     */\r\n    TileGroup.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [TileGroup.getTypeName()]);\r\n    };\r\n    TileGroup.H_ = { T_: TileGroup.getTypeName(), B_: TileGroup.getBaseTypes() };\r\n    return TileGroup;\r\n}());\r\nexports.TileGroup = TileGroup;\r\nvar Session = /** @class */ (function () {\r\n    function Session(obj) {\r\n        schema_object_g_1.SchemaObject.assign(Session, this, obj);\r\n    }\r\n    Session.getTypeName = function () {\r\n        return 'AugLoop_Core_Session';\r\n    };\r\n    Session.getBaseTypes = function () {\r\n        return ['AugLoop_Core_TileGroup'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of Session type or its inheritor and implements {@link ISession}\r\n     */\r\n    Session.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [Session.getTypeName()]);\r\n    };\r\n    Session.H_ = { T_: Session.getTypeName(), B_: Session.getBaseTypes() };\r\n    return Session;\r\n}());\r\nexports.Session = Session;\r\nvar Document = /** @class */ (function () {\r\n    function Document(obj) {\r\n        schema_object_g_1.SchemaObject.assign(Document, this, obj);\r\n    }\r\n    Document.getTypeName = function () {\r\n        return 'AugLoop_Core_Document';\r\n    };\r\n    Document.getBaseTypes = function () {\r\n        return ['AugLoop_Core_TileGroup'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of Document type or its inheritor and implements {@link IDocument}\r\n     */\r\n    Document.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [Document.getTypeName()]);\r\n    };\r\n    Document.H_ = { T_: Document.getTypeName(), B_: Document.getBaseTypes() };\r\n    return Document;\r\n}());\r\nexports.Document = Document;\r\nvar SubDocument = /** @class */ (function () {\r\n    function SubDocument(obj) {\r\n        schema_object_g_1.SchemaObject.assign(SubDocument, this, obj);\r\n    }\r\n    SubDocument.getTypeName = function () {\r\n        return 'AugLoop_Core_SubDocument';\r\n    };\r\n    SubDocument.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of SubDocument type or its inheritor and implements {@link ISubDocument}\r\n     */\r\n    SubDocument.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [SubDocument.getTypeName()]);\r\n    };\r\n    SubDocument.H_ = { T_: SubDocument.getTypeName(), B_: SubDocument.getBaseTypes() };\r\n    return SubDocument;\r\n}());\r\nexports.SubDocument = SubDocument;\r\nvar GridCell = /** @class */ (function () {\r\n    function GridCell(obj) {\r\n        schema_object_g_1.SchemaObject.assign(GridCell, this, obj);\r\n    }\r\n    GridCell.getTypeName = function () {\r\n        return 'AugLoop_Core_GridCell';\r\n    };\r\n    GridCell.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of GridCell type or its inheritor and implements {@link IGridCell}\r\n     */\r\n    GridCell.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [GridCell.getTypeName()]);\r\n    };\r\n    GridCell.H_ = { T_: GridCell.getTypeName(), B_: GridCell.getBaseTypes() };\r\n    return GridCell;\r\n}());\r\nexports.GridCell = GridCell;\r\nvar GridNeighborhoodContext = /** @class */ (function () {\r\n    function GridNeighborhoodContext(obj) {\r\n        schema_object_g_1.SchemaObject.assign(GridNeighborhoodContext, this, obj);\r\n    }\r\n    GridNeighborhoodContext.getTypeName = function () {\r\n        return 'AugLoop_Core_GridNeighborhoodContext';\r\n    };\r\n    GridNeighborhoodContext.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of GridNeighborhoodContext type or its inheritor and implements {@link IGridNeighborhoodContext}\r\n     */\r\n    GridNeighborhoodContext.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [GridNeighborhoodContext.getTypeName()]);\r\n    };\r\n    GridNeighborhoodContext.H_ = { T_: GridNeighborhoodContext.getTypeName(), B_: GridNeighborhoodContext.getBaseTypes() };\r\n    return GridNeighborhoodContext;\r\n}());\r\nexports.GridNeighborhoodContext = GridNeighborhoodContext;\r\nvar DynamicContext = /** @class */ (function () {\r\n    function DynamicContext(obj) {\r\n        schema_object_g_1.SchemaObject.assign(DynamicContext, this, obj);\r\n    }\r\n    DynamicContext.getTypeName = function () {\r\n        return 'AugLoop_Core_DynamicContext';\r\n    };\r\n    DynamicContext.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of DynamicContext type or its inheritor and implements {@link IDynamicContext}\r\n     */\r\n    DynamicContext.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [DynamicContext.getTypeName()]);\r\n    };\r\n    DynamicContext.H_ = { T_: DynamicContext.getTypeName(), B_: DynamicContext.getBaseTypes() };\r\n    return DynamicContext;\r\n}());\r\nexports.DynamicContext = DynamicContext;\r\nvar ContextHolder = /** @class */ (function () {\r\n    function ContextHolder(obj) {\r\n        schema_object_g_1.SchemaObject.assign(ContextHolder, this, obj);\r\n    }\r\n    ContextHolder.getTypeName = function () {\r\n        return 'AugLoop_Core_ContextHolder';\r\n    };\r\n    ContextHolder.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of ContextHolder type or its inheritor and implements {@link IContextHolder}\r\n     */\r\n    ContextHolder.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [ContextHolder.getTypeName()]);\r\n    };\r\n    ContextHolder.H_ = { T_: ContextHolder.getTypeName(), B_: ContextHolder.getBaseTypes() };\r\n    return ContextHolder;\r\n}());\r\nexports.ContextHolder = ContextHolder;\r\nvar UserContextHolder = /** @class */ (function () {\r\n    function UserContextHolder(obj) {\r\n        schema_object_g_1.SchemaObject.assign(UserContextHolder, this, obj);\r\n    }\r\n    UserContextHolder.getTypeName = function () {\r\n        return 'AugLoop_Core_UserContextHolder';\r\n    };\r\n    UserContextHolder.getBaseTypes = function () {\r\n        return ['AugLoop_Core_ContextHolder'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of UserContextHolder type or its inheritor and implements {@link IUserContextHolder}\r\n     */\r\n    UserContextHolder.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [UserContextHolder.getTypeName()]);\r\n    };\r\n    UserContextHolder.H_ = { T_: UserContextHolder.getTypeName(), B_: UserContextHolder.getBaseTypes() };\r\n    return UserContextHolder;\r\n}());\r\nexports.UserContextHolder = UserContextHolder;\r\nvar TenantContextHolder = /** @class */ (function () {\r\n    function TenantContextHolder(obj) {\r\n        schema_object_g_1.SchemaObject.assign(TenantContextHolder, this, obj);\r\n    }\r\n    TenantContextHolder.getTypeName = function () {\r\n        return 'AugLoop_Core_TenantContextHolder';\r\n    };\r\n    TenantContextHolder.getBaseTypes = function () {\r\n        return ['AugLoop_Core_ContextHolder'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of TenantContextHolder type or its inheritor and implements {@link ITenantContextHolder}\r\n     */\r\n    TenantContextHolder.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [TenantContextHolder.getTypeName()]);\r\n    };\r\n    TenantContextHolder.H_ = { T_: TenantContextHolder.getTypeName(), B_: TenantContextHolder.getBaseTypes() };\r\n    return TenantContextHolder;\r\n}());\r\nexports.TenantContextHolder = TenantContextHolder;\r\nvar EventsHolder = /** @class */ (function () {\r\n    function EventsHolder(obj) {\r\n        schema_object_g_1.SchemaObject.assign(EventsHolder, this, obj);\r\n    }\r\n    EventsHolder.getTypeName = function () {\r\n        return 'AugLoop_Core_EventsHolder';\r\n    };\r\n    EventsHolder.getBaseTypes = function () {\r\n        return [];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of EventsHolder type or its inheritor and implements {@link IEventsHolder}\r\n     */\r\n    EventsHolder.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [EventsHolder.getTypeName()]);\r\n    };\r\n    EventsHolder.H_ = { T_: EventsHolder.getTypeName(), B_: EventsHolder.getBaseTypes() };\r\n    return EventsHolder;\r\n}());\r\nexports.EventsHolder = EventsHolder;\r\nvar UserCommandsHolder = /** @class */ (function () {\r\n    function UserCommandsHolder(obj) {\r\n        schema_object_g_1.SchemaObject.assign(UserCommandsHolder, this, obj);\r\n    }\r\n    UserCommandsHolder.getTypeName = function () {\r\n        return 'AugLoop_Core_UserCommandsHolder';\r\n    };\r\n    UserCommandsHolder.getBaseTypes = function () {\r\n        return ['AugLoop_Core_EventsHolder'];\r\n    };\r\n    /**\r\n     * Checks if passed schema object is of UserCommandsHolder type or its inheritor and implements {@link IUserCommandsHolder}\r\n     */\r\n    UserCommandsHolder.typeGuard = function (schemaObject) {\r\n        return schema_object_g_1.SchemaObject.matchesTypesFor(schemaObject, [UserCommandsHolder.getTypeName()]);\r\n    };\r\n    UserCommandsHolder.H_ = { T_: UserCommandsHolder.getTypeName(), B_: UserCommandsHolder.getBaseTypes() };\r\n    return UserCommandsHolder;\r\n}());\r\nexports.UserCommandsHolder = UserCommandsHolder;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vc3JjL2dlbmVyYXRlZC90aWxlcy5nLnRzPzQ0YTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGlGQUFpRjtBQUNqRixtQkFBbUI7QUFDbkIseURBQXlEO0FBQ3pELDZHQUE2RztBQUM3Ryx3RkFBd0Y7QUFDeEYsb0JBQW9CO0FBQ3BCLGlGQUFpRjs7O0FBR2pGLGlKQUFpRDtBQUdqRDtJQU1JLGNBQW1CLEdBQVc7UUFDMUIsOEJBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ2EsZ0JBQVcsR0FBekI7UUFDSSxPQUFPLG1CQUFtQixDQUFDO0lBQy9CLENBQUM7SUFDYSxpQkFBWSxHQUExQjtRQUNJLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ1csY0FBUyxHQUF2QixVQUF3QixZQUEyQjtRQUMvQyxPQUFPLDhCQUFZLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQU5zQixPQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztJQU9wRixXQUFDO0NBQUE7QUF0Qlksb0JBQUk7QUF3QmpCO0lBR0ksZ0JBQW1CLEdBQWE7UUFDNUIsOEJBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ2Esa0JBQVcsR0FBekI7UUFDSSxPQUFPLHFCQUFxQixDQUFDO0lBQ2pDLENBQUM7SUFDYSxtQkFBWSxHQUExQjtRQUNJLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ1csZ0JBQVMsR0FBdkIsVUFBd0IsWUFBMkI7UUFDL0MsT0FBTyw4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Q0FBQztJQUM3QyxDQUFDO0lBQ2EsK0JBQVksR0FBMUI7UUFDSSxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDVyw0QkFBUyxHQUF2QixVQUF3QixZQUEyQjtRQUMvQyxPQUFPLDhCQUFZLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBTnNCLHFCQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7SUFPaEgseUJBQUM7Q0FBQTtBQWxCWSxnREFBa0IiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGF1Z2xvb3AvdHlwZXMtY29yZS9kaXN0L3NyYy9nZW5lcmF0ZWQvdGlsZXMuZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyA8YXV0by1nZW5lcmF0ZWQ+XHJcbi8vIFRoaXMgY29kZSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBAYXVnbG9vcC9jb2RlLWdlbiB0b29sLlxyXG4vLyBTb3VyY2U6IGh0dHBzOi8vZGV2LmF6dXJlLmNvbS9vZmZpY2UvSVNTL19naXQvYXVnbG9vcC1zZXJ2ZXI/cGF0aD0lMkZtb2R1bGVzJTJGdHlwZXMtY29yZSUyRnNyYyUyRnRpbGVzLnRzXHJcbi8vIENoYW5nZXMgdG8gdGhpcyBmaWxlIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgYW5kIHdpbGwgYmUgbG9zdCB1cG9uIHJlZ2VuZXJhdGlvbi5cclxuLy8gPC9hdXRvLWdlbmVyYXRlZD5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5pbXBvcnQgeyBJQmluYXJ5LCBJQmxvYiwgSUJsb2JSZWYsIElDb250ZXh0SG9sZGVyLCBJRG9jdW1lbnQsIElEeW5hbWljQ29udGV4dCwgSUV2ZW50c0hvbGRlciwgSUdyaWRDZWxsLCBJR3JpZE5laWdoYm9yaG9vZENvbnRleHQsIElTZXNzaW9uLCBJU3ViRG9jdW1lbnQsIElUZW5hbnRDb250ZXh0SG9sZGVyLCBJVGlsZUdyb3VwLCBJVXNlckNvbW1hbmRzSG9sZGVyLCBJVXNlckNvbnRleHRIb2xkZXIsIE9wZW5UeXBlIH0gZnJvbSAnLi4vdGlsZXMnO1xyXG5pbXBvcnQgeyBTY2hlbWFPYmplY3QgfSBmcm9tICcuL3NjaGVtYS1vYmplY3QuZyc7XHJcbmltcG9ydCB7IElTY2hlbWFPYmplY3QsIFNjaGVtYU9iamVjdEhlYWRlciB9IGZyb20gJy4uL3NjaGVtYS1vYmplY3QnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJsb2IgaW1wbGVtZW50cyBJQmxvYiB7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyByZWFkb25seSBzaXplQnl0ZXM6IG51bWJlcjtcclxuICAgIHB1YmxpYyByZWFkb25seSBkYXRhPzogVWludDhBcnJheTtcclxuICAgIHB1YmxpYyByZWFkb25seSBkYXRhUG9pbnRlcj86IElCbG9iUmVmO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSUJsb2IpIHtcclxuICAgICAgICBTY2hlbWFPYmplY3QuYXNzaWduKEJsb2IsIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfQmxvYic7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IEJsb2IuZ2V0VHlwZU5hbWUoKSwgQl86IEJsb2IuZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIEJsb2IgdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJQmxvYn1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElCbG9iIHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtCbG9iLmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJpbmFyeSBpbXBsZW1lbnRzIElCaW5hcnkge1xyXG4gICAgcHVibGljIGRhdGE/OiBVaW50OEFycmF5O1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSUJpbmFyeSkge1xyXG4gICAgICAgIFNjaGVtYU9iamVjdC5hc3NpZ24oQmluYXJ5LCB0aGlzLCBvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUeXBlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnQXVnTG9vcF9Db3JlX0JpbmFyeSc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IEJpbmFyeS5nZXRUeXBlTmFtZSgpLCBCXzogQmluYXJ5LmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBCaW5hcnkgdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJQmluYXJ5fVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHR5cGVHdWFyZChzY2hlbWFPYmplY3Q6IElTY2hlbWFPYmplY3QpOiBzY2hlbWFPYmplY3QgaXMgSUJpbmFyeSB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbQmluYXJ5LmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRpbGVHcm91cCBpbXBsZW1lbnRzIElUaWxlR3JvdXAge1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSVRpbGVHcm91cCkge1xyXG4gICAgICAgIFNjaGVtYU9iamVjdC5hc3NpZ24oVGlsZUdyb3VwLCB0aGlzLCBvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUeXBlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnQXVnTG9vcF9Db3JlX1RpbGVHcm91cCc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IFRpbGVHcm91cC5nZXRUeXBlTmFtZSgpLCBCXzogVGlsZUdyb3VwLmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBUaWxlR3JvdXAgdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJVGlsZUdyb3VwfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHR5cGVHdWFyZChzY2hlbWFPYmplY3Q6IElTY2hlbWFPYmplY3QpOiBzY2hlbWFPYmplY3QgaXMgSVRpbGVHcm91cCB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbVGlsZUdyb3VwLmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNlc3Npb24gaW1wbGVtZW50cyBJU2Vzc2lvbiB7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgYWN0aXZlVXNlcklkOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgd2lkdGhEcGk/OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGVpZ2h0RHBpPzogbnVtYmVyO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSVNlc3Npb24pIHtcclxuICAgICAgICBTY2hlbWFPYmplY3QuYXNzaWduKFNlc3Npb24sIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfU2Vzc2lvbic7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsnQXVnTG9vcF9Db3JlX1RpbGVHcm91cCddO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IFNlc3Npb24uZ2V0VHlwZU5hbWUoKSwgQl86IFNlc3Npb24uZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIFNlc3Npb24gdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJU2Vzc2lvbn1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElTZXNzaW9uIHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtTZXNzaW9uLmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIERvY3VtZW50IGltcGxlbWVudHMgSURvY3VtZW50IHtcclxuICAgIHB1YmxpYyByZWFkb25seSBpc1JlYWRvbmx5OiBib29sZWFuO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHVybD86IHN0cmluZztcclxuICAgIHB1YmxpYyByZWFkb25seSBvcGVuVHlwZT86IE9wZW5UeXBlO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSURvY3VtZW50KSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihEb2N1bWVudCwgdGhpcywgb2JqKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VHlwZU5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJ0F1Z0xvb3BfQ29yZV9Eb2N1bWVudCc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsnQXVnTG9vcF9Db3JlX1RpbGVHcm91cCddO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IERvY3VtZW50LmdldFR5cGVOYW1lKCksIEJfOiBEb2N1bWVudC5nZXRCYXNlVHlwZXMoKSB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgcGFzc2VkIHNjaGVtYSBvYmplY3QgaXMgb2YgRG9jdW1lbnQgdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJRG9jdW1lbnR9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgdHlwZUd1YXJkKHNjaGVtYU9iamVjdDogSVNjaGVtYU9iamVjdCk6IHNjaGVtYU9iamVjdCBpcyBJRG9jdW1lbnQge1xyXG4gICAgICAgIHJldHVybiBTY2hlbWFPYmplY3QubWF0Y2hlc1R5cGVzRm9yKHNjaGVtYU9iamVjdCwgW0RvY3VtZW50LmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN1YkRvY3VtZW50IGltcGxlbWVudHMgSVN1YkRvY3VtZW50IHtcclxuICAgIHB1YmxpYyByZWFkb25seSBIXzogU2NoZW1hT2JqZWN0SGVhZGVyO1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG9iaj86IElTdWJEb2N1bWVudCkge1xyXG4gICAgICAgIFNjaGVtYU9iamVjdC5hc3NpZ24oU3ViRG9jdW1lbnQsIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfU3ViRG9jdW1lbnQnO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRCYXNlVHlwZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSF8gPSB7IFRfOiBTdWJEb2N1bWVudC5nZXRUeXBlTmFtZSgpLCBCXzogU3ViRG9jdW1lbnQuZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIFN1YkRvY3VtZW50IHR5cGUgb3IgaXRzIGluaGVyaXRvciBhbmQgaW1wbGVtZW50cyB7QGxpbmsgSVN1YkRvY3VtZW50fVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHR5cGVHdWFyZChzY2hlbWFPYmplY3Q6IElTY2hlbWFPYmplY3QpOiBzY2hlbWFPYmplY3QgaXMgSVN1YkRvY3VtZW50IHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtTdWJEb2N1bWVudC5nZXRUeXBlTmFtZSgpXSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkQ2VsbCBpbXBsZW1lbnRzIElHcmlkQ2VsbCB7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29sdW1uOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgSF86IFNjaGVtYU9iamVjdEhlYWRlcjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo/OiBJR3JpZENlbGwpIHtcclxuICAgICAgICBTY2hlbWFPYmplY3QuYXNzaWduKEdyaWRDZWxsLCB0aGlzLCBvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUeXBlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnQXVnTG9vcF9Db3JlX0dyaWRDZWxsJztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogR3JpZENlbGwuZ2V0VHlwZU5hbWUoKSwgQl86IEdyaWRDZWxsLmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBHcmlkQ2VsbCB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElHcmlkQ2VsbH1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElHcmlkQ2VsbCB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbR3JpZENlbGwuZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR3JpZE5laWdoYm9yaG9vZENvbnRleHQgaW1wbGVtZW50cyBJR3JpZE5laWdoYm9yaG9vZENvbnRleHQge1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHdpZHRoOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmV0cmlldmVkV2lkdGg6IG51bWJlcjtcclxuICAgIHB1YmxpYyByZWFkb25seSByZXRyaWV2ZWRIZWlnaHQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyByZWFkb25seSBuZWlnaGJvcmhvb2RUb3BSb3c6IG51bWJlcjtcclxuICAgIHB1YmxpYyByZWFkb25seSBuZWlnaGJvcmhvb2RMZWZ0Q29sdW1uOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0R3JpZFRvcFJvdzogbnVtYmVyO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHRhcmdldEdyaWRMZWZ0Q29sdW1uOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0R3JpZFJlbGF0aXZlVG9wUm93OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0R3JpZFJlbGF0aXZlTGVmdENvbHVtbjogbnVtYmVyO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IG51bWJlck9mTm9uRW1wdHlDZWxsczogbnVtYmVyO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSUdyaWROZWlnaGJvcmhvb2RDb250ZXh0KSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihHcmlkTmVpZ2hib3Job29kQ29udGV4dCwgdGhpcywgb2JqKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0VHlwZU5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJ0F1Z0xvb3BfQ29yZV9HcmlkTmVpZ2hib3Job29kQ29udGV4dCc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IEdyaWROZWlnaGJvcmhvb2RDb250ZXh0LmdldFR5cGVOYW1lKCksIEJfOiBHcmlkTmVpZ2hib3Job29kQ29udGV4dC5nZXRCYXNlVHlwZXMoKSB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgcGFzc2VkIHNjaGVtYSBvYmplY3QgaXMgb2YgR3JpZE5laWdoYm9yaG9vZENvbnRleHQgdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJR3JpZE5laWdoYm9yaG9vZENvbnRleHR9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgdHlwZUd1YXJkKHNjaGVtYU9iamVjdDogSVNjaGVtYU9iamVjdCk6IHNjaGVtYU9iamVjdCBpcyBJR3JpZE5laWdoYm9yaG9vZENvbnRleHQge1xyXG4gICAgICAgIHJldHVybiBTY2hlbWFPYmplY3QubWF0Y2hlc1R5cGVzRm9yKHNjaGVtYU9iamVjdCwgW0dyaWROZWlnaGJvcmhvb2RDb250ZXh0LmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIER5bmFtaWNDb250ZXh0IGltcGxlbWVudHMgSUR5bmFtaWNDb250ZXh0IHtcclxuICAgIHB1YmxpYyByZWFkb25seSBIXzogU2NoZW1hT2JqZWN0SGVhZGVyO1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG9iaj86IElEeW5hbWljQ29udGV4dCkge1xyXG4gICAgICAgIFNjaGVtYU9iamVjdC5hc3NpZ24oRHluYW1pY0NvbnRleHQsIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfRHluYW1pY0NvbnRleHQnO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRCYXNlVHlwZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSF8gPSB7IFRfOiBEeW5hbWljQ29udGV4dC5nZXRUeXBlTmFtZSgpLCBCXzogRHluYW1pY0NvbnRleHQuZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIER5bmFtaWNDb250ZXh0IHR5cGUgb3IgaXRzIGluaGVyaXRvciBhbmQgaW1wbGVtZW50cyB7QGxpbmsgSUR5bmFtaWNDb250ZXh0fVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHR5cGVHdWFyZChzY2hlbWFPYmplY3Q6IElTY2hlbWFPYmplY3QpOiBzY2hlbWFPYmplY3QgaXMgSUR5bmFtaWNDb250ZXh0IHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtEeW5hbWljQ29udGV4dC5nZXRUeXBlTmFtZSgpXSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb250ZXh0SG9sZGVyIGltcGxlbWVudHMgSUNvbnRleHRIb2xkZXIge1xyXG4gICAgcHVibGljIHJlYWRvbmx5IEhfOiBTY2hlbWFPYmplY3RIZWFkZXI7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Iob2JqPzogSUNvbnRleHRIb2xkZXIpIHtcclxuICAgICAgICBTY2hlbWFPYmplY3QuYXNzaWduKENvbnRleHRIb2xkZXIsIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfQ29udGV4dEhvbGRlcic7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEJhc2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBIXyA9IHsgVF86IENvbnRleHRIb2xkZXIuZ2V0VHlwZU5hbWUoKSwgQl86IENvbnRleHRIb2xkZXIuZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIENvbnRleHRIb2xkZXIgdHlwZSBvciBpdHMgaW5oZXJpdG9yIGFuZCBpbXBsZW1lbnRzIHtAbGluayBJQ29udGV4dEhvbGRlcn1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElDb250ZXh0SG9sZGVyIHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtDb250ZXh0SG9sZGVyLmdldFR5cGVOYW1lKCldKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJDb250ZXh0SG9sZGVyIGltcGxlbWVudHMgSVVzZXJDb250ZXh0SG9sZGVyIHtcclxuICAgIHB1YmxpYyByZWFkb25seSBIXzogU2NoZW1hT2JqZWN0SGVhZGVyO1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG9iaj86IElVc2VyQ29udGV4dEhvbGRlcikge1xyXG4gICAgICAgIFNjaGVtYU9iamVjdC5hc3NpZ24oVXNlckNvbnRleHRIb2xkZXIsIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfVXNlckNvbnRleHRIb2xkZXInO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRCYXNlVHlwZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbJ0F1Z0xvb3BfQ29yZV9Db250ZXh0SG9sZGVyJ107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogVXNlckNvbnRleHRIb2xkZXIuZ2V0VHlwZU5hbWUoKSwgQl86IFVzZXJDb250ZXh0SG9sZGVyLmdldEJhc2VUeXBlcygpIH07XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwYXNzZWQgc2NoZW1hIG9iamVjdCBpcyBvZiBVc2VyQ29udGV4dEhvbGRlciB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElVc2VyQ29udGV4dEhvbGRlcn1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyB0eXBlR3VhcmQoc2NoZW1hT2JqZWN0OiBJU2NoZW1hT2JqZWN0KTogc2NoZW1hT2JqZWN0IGlzIElVc2VyQ29udGV4dEhvbGRlciB7XHJcbiAgICAgICAgcmV0dXJuIFNjaGVtYU9iamVjdC5tYXRjaGVzVHlwZXNGb3Ioc2NoZW1hT2JqZWN0LCBbVXNlckNvbnRleHRIb2xkZXIuZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGVuYW50Q29udGV4dEhvbGRlciBpbXBsZW1lbnRzIElUZW5hbnRDb250ZXh0SG9sZGVyIHtcclxuICAgIHB1YmxpYyByZWFkb25seSBIXzogU2NoZW1hT2JqZWN0SGVhZGVyO1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG9iaj86IElUZW5hbnRDb250ZXh0SG9sZGVyKSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihUZW5hbnRDb250ZXh0SG9sZGVyLCB0aGlzLCBvYmopO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUeXBlTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnQXVnTG9vcF9Db3JlX1RlbmFudENvbnRleHRIb2xkZXInO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRCYXNlVHlwZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbJ0F1Z0xvb3BfQ29yZV9Db250ZXh0SG9sZGVyJ107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogVGVuYW50Q29udGV4dEhvbGRlci5nZXRUeXBlTmFtZSgpLCBCXzogVGVuYW50Q29udGV4dEhvbGRlci5nZXRCYXNlVHlwZXMoKSB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgcGFzc2VkIHNjaGVtYSBvYmplY3QgaXMgb2YgVGVuYW50Q29udGV4dEhvbGRlciB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElUZW5hbnRDb250ZXh0SG9sZGVyfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHR5cGVHdWFyZChzY2hlbWFPYmplY3Q6IElTY2hlbWFPYmplY3QpOiBzY2hlbWFPYmplY3QgaXMgSVRlbmFudENvbnRleHRIb2xkZXIge1xyXG4gICAgICAgIHJldHVybiBTY2hlbWFPYmplY3QubWF0Y2hlc1R5cGVzRm9yKHNjaGVtYU9iamVjdCwgW1RlbmFudENvbnRleHRIb2xkZXIuZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRXZlbnRzSG9sZGVyIGltcGxlbWVudHMgSUV2ZW50c0hvbGRlciB7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgSF86IFNjaGVtYU9iamVjdEhlYWRlcjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo/OiBJRXZlbnRzSG9sZGVyKSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihFdmVudHNIb2xkZXIsIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfRXZlbnRzSG9sZGVyJztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogRXZlbnRzSG9sZGVyLmdldFR5cGVOYW1lKCksIEJfOiBFdmVudHNIb2xkZXIuZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIEV2ZW50c0hvbGRlciB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElFdmVudHNIb2xkZXJ9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgdHlwZUd1YXJkKHNjaGVtYU9iamVjdDogSVNjaGVtYU9iamVjdCk6IHNjaGVtYU9iamVjdCBpcyBJRXZlbnRzSG9sZGVyIHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtFdmVudHNIb2xkZXIuZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlckNvbW1hbmRzSG9sZGVyIGltcGxlbWVudHMgSVVzZXJDb21tYW5kc0hvbGRlciB7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgSF86IFNjaGVtYU9iamVjdEhlYWRlcjtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo/OiBJVXNlckNvbW1hbmRzSG9sZGVyKSB7XHJcbiAgICAgICAgU2NoZW1hT2JqZWN0LmFzc2lnbihVc2VyQ29tbWFuZHNIb2xkZXIsIHRoaXMsIG9iaik7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFR5cGVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdBdWdMb29wX0NvcmVfVXNlckNvbW1hbmRzSG9sZGVyJztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QmFzZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gWydBdWdMb29wX0NvcmVfRXZlbnRzSG9sZGVyJ107XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhfID0geyBUXzogVXNlckNvbW1hbmRzSG9sZGVyLmdldFR5cGVOYW1lKCksIEJfOiBVc2VyQ29tbWFuZHNIb2xkZXIuZ2V0QmFzZVR5cGVzKCkgfTtcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHBhc3NlZCBzY2hlbWEgb2JqZWN0IGlzIG9mIFVzZXJDb21tYW5kc0hvbGRlciB0eXBlIG9yIGl0cyBpbmhlcml0b3IgYW5kIGltcGxlbWVudHMge0BsaW5rIElVc2VyQ29tbWFuZHNIb2xkZXJ9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgdHlwZUd1YXJkKHNjaGVtYU9iamVjdDogSVNjaGVtYU9iamVjdCk6IHNjaGVtYU9iamVjdCBpcyBJVXNlckNvbW1hbmRzSG9sZGVyIHtcclxuICAgICAgICByZXR1cm4gU2NoZW1hT2JqZWN0Lm1hdGNoZXNUeXBlc0ZvcihzY2hlbWFPYmplY3QsIFtVc2VyQ29tbWFuZHNIb2xkZXIuZ2V0VHlwZU5hbWUoKV0pO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@augloop/types-core/dist/src/generated/tiles.g.js\n")},"./node_modules/@augloop/types-core/dist/src/index.js":function(){"use strict";eval('\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n}));\r\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\r\n    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\n__exportStar(__webpack_require__(/*! ./annotations */ "./node_modules/@augloop/types-core/dist/src/annotations.js"), exports);\r\n__exportStar(__webpack_require__(/*! ./events */ "./node_modules/@augloop/types-core/dist/src/events.js"), exports);\r\n__exportStar(__webpack_require__(/*! ./schema-object-constructor */ "./node_modules/@augloop/types-core/dist/src/schema-object-constructor.js"), exports);\r\n__exportStar(__webpack_require__(/*! ./signals */ "./node_modules/@augloop/types-core/dist/src/signals.js"), exports);\r\n__exportStar(__webpack_require__(/*! ./tiles */ "./node_modules/@augloop/types-core/dist/src/tiles.js"), exports);\r\n__exportStar(__webpack_require__(/*! ./generated/annotations.g */ "./node_modules/@augloop/types-core/dist/src/generated/annotations.g.js"), exports);\r\n__exportStar(__webpack_require__(/*! ./generated/events.g */ "./node_modules/@augloop/types-core/dist/src/generated/events.g.js"), exports);\r\n__exportStar(__webpack_require__(/*! ./generated/operations.g */ "./node_modules/@augloop/types-core/dist/src/generated/operations.g.js"), exports);\r\n__exportStar(__webpack_require__(/*! ./generated/schema-object.g */ "./node_modules/@augloop/types-core/dist/src/generated/schema-object.g.js"), exports);\r\n__exportStar(__webpack_require__(/*! ./generated/signals.g */ "./node_modules/@augloop/types-core/dist/src/generated/signals.g.js"), exports);\r\n__exportStar(__webpack_require__(/*! ./generated/tiles.g */ "./node_modules/@augloop/types-core/dist/src/generated/tiles.g.js"), exports);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2luZGV4LnRzPzBlM2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsOEhBQThCO0FBQzlCLG9IQUF5QjtBQUd6QiwwSkFBNEM7QUFDNUMsc0hBQTBCO0FBQzFCLGtIQUF3QjtBQUN4QixzSkFBMEM7QUFDMUMsNElBQXFDO0FBQ3JDLG9KQUF5QztBQUN6QywwSkFBNEM7QUFDNUMsOElBQXNDO0FBQ3RDLDBJQUFvQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYXVnbG9vcC90eXBlcy1jb3JlL2Rpc3Qvc3JjL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hbm5vdGF0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZXZlbnRzJztcclxuZXhwb3J0IHsgSXRlbVBhdGhLZXksIE9wZXJhdGlvblR5cGUsIElBZGRPcGVyYXRpb24sIElEZWxldGVPcGVyYXRpb24sIElGb2N1c09wZXJhdGlvbiwgSU1vdmVPcGVyYXRpb24sIElPcGVyYXRpb24sIElPcGVyYXRpb25XaXRoU2libGluZ0NvbnRleHQsIElQdXJnZU9wZXJhdGlvbiwgSVVwZGF0ZUFubm90YXRpb25NZXRhRGF0YU9wZXJhdGlvbiwgSVVwZGF0ZU9wZXJhdGlvbiwgSVZpc2liaWxpdHlPcGVyYXRpb24sIElTaWduYWxPcGVyYXRpb24sIEl0ZW0sIEl0ZW1QYXRoLCBJdGVtV2l0aFBhdGgsIElJdGVtUmVmZXJlbmNlLCBJSXRlbURlbHRhLCBJdGVtT3BlcmF0aW9uLCBJSXRlbUNoYW5nZXNEZWx0YSwgSXRlbUNoYW5nZXMgfSBmcm9tICcuL29wZXJhdGlvbnMnO1xyXG5leHBvcnQgeyBJU2NoZW1hT2JqZWN0LCBTY2hlbWFPYmplY3RIZWFkZXIgfSBmcm9tICcuL3NjaGVtYS1vYmplY3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS1vYmplY3QtY29uc3RydWN0b3InO1xyXG5leHBvcnQgKiBmcm9tICcuL3NpZ25hbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3RpbGVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmF0ZWQvYW5ub3RhdGlvbnMuZyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZ2VuZXJhdGVkL2V2ZW50cy5nJztcclxuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmF0ZWQvb3BlcmF0aW9ucy5nJztcclxuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmF0ZWQvc2NoZW1hLW9iamVjdC5nJztcclxuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmF0ZWQvc2lnbmFscy5nJztcclxuZXhwb3J0ICogZnJvbSAnLi9nZW5lcmF0ZWQvdGlsZXMuZyc7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@augloop/types-core/dist/src/index.js\n')},"./node_modules/@augloop/types-core/dist/src/schema-object-constructor.js":function(){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AYXVnbG9vcC90eXBlcy1jb3JlL2Rpc3Qvc3JjL3NjaGVtYS1vYmplY3QtY29uc3RydWN0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@augloop/types-core/dist/src/schema-object-constructor.js\n')},"./node_modules/@augloop/types-core/dist/src/signals.js":function(){"use strict";eval('\r\n/**\r\n * @copyright Microsoft Corporation. All rights reserved.\r\n */\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc3JjL3NpZ25hbHMudHM/YjE5ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUciLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGF1Z2xvb3AvdHlwZXMtY29yZS9kaXN0L3NyYy9zaWduYWxzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBjb3B5cmlnaHQgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IElTY2hlbWFPYmplY3QgfSBmcm9tICcuL3NjaGVtYS1vYmplY3QnO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBiYXNlIGludGVyZmFjZSBvZiBhbGwgc2lnbmFscy5cclxuICogQHJlbWFya3MgU2lnbmFscyBhcmUgdXNlZCB0byBjYXB0dXJlIHVzZXIgYW5kIHN5c3RlbSBhY3Rpb25zIGluIHRoZSBzZXNzaW9uXHJcbiAqIGFuZCBidWlsZCBsb2dpYyBvbiB0b3Agb2YgdGhhdCBmb3IgYXV0b21hdGljIHRyaWdnZXJpbmcgYW5kIHJlY29tbWVuZGF0aW9uc1xyXG4gKiBAZXh0ZW5kcyBJU2NoZW1hT2JqZWN0XHJcbiAqIEB0eXBlcHJlZml4IEF1Z0xvb3BfU2lnbmFsc1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJU2lnbmFsIGV4dGVuZHMgSVNjaGVtYU9iamVjdCB7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvYmplY3QgdGhpcyBzaWduYWwgaXMgdGFyZ2V0aW5nLiBJdCBjYW4gYmUgYSBkb2N1bWVudCwgdGlsZSwgb3IgYW4gYW5ub3RhdGlvbi5cclxuICAgICAqIEByZW1hcmtzIFdoZW4gYG51bGxgLCB0aGUgc2lnbmFsIGlzIGEgZ2VuZXJpYyBzaWduYWwgaW4gdGhlIHNlc3Npb24uXHJcbiAgICAgKi9cclxuICAgIHRhcmdldE9iamVjdD86IElTY2hlbWFPYmplY3Q7IC8vIFRPRE86IFRoaXMgc2hvdWxkIGJlIGEgc2NoZW1hIG9iamVjdCByZWZlcmVuY2VcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aW1lIG9mIHNpZ25hbCBjcmVhdGlvbi5cclxuICAgICAqL1xyXG4gICAgdGltZXN0YW1wPzogbnVtYmVyO1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@augloop/types-core/dist/src/signals.js\n')},"./node_modules/@augloop/types-core/dist/src/tiles.js":function(){"use strict";eval("\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.GridConstants = void 0;\r\nvar GridConstants = /** @class */ (function () {\r\n    function GridConstants() {\r\n    }\r\n    GridConstants.lowerIndexBound = 1;\r\n    GridConstants.maxNumberOfRows = 1048576;\r\n    GridConstants.maxNumberOfColumns = 16384;\r\n    GridConstants.firstColumnName = 'A';\r\n    GridConstants.lastColumnName = 'XFD';\r\n    return GridConstants;\r\n}());\r\nexports.GridConstants = GridConstants;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vc3JjL3RpbGVzLnRzPzkyZjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBeUZBO0lBQUE7SUFNQSxDQUFDO0lBTG1CLDZCQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLDZCQUFlLEdBQUcsT0FBTyxDQUFDO0lBQzFCLGdDQUFrQixHQUFHLEtBQUssQ0FBQztJQUMzQiw2QkFBZSxHQUFHLEdBQUcsQ0FBQztJQUN0Qiw0QkFBYyxHQUFHLEtBQUssQ0FBQztJQUMzQyxvQkFBQztDQUFBO0FBTlksc0NBQWEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGF1Z2xvb3AvdHlwZXMtY29yZS9kaXN0L3NyYy90aWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElTY2hlbWFPYmplY3QgfSBmcm9tICcuL3NjaGVtYS1vYmplY3QnO1xyXG5cclxuLy8gQmluYXJ5XHJcbi8vIEJlbG93IHR5cGVzIGFyZSBhbGxvd2luZyB1cyB0byBzZW5kIG9uZSBvciBtb3JlIGJpbmFyeSBjb250ZW50cyBjb250YWluZWQgaW4gb3RoZXIgc2NoZW1hIG9iamVjdHNcclxuLy8gV2lsbCBiZSBzZW50IG1vcmUgZWZmaWNpZW50bHkgb3ZlciB0aGUgbmV0d29ya1xyXG5leHBvcnQgY29uc3QgZW51bSBCbG9iUmVmVHlwZSB7XHJcbiAgICAvLyBJZiB0aGlzIGlzIHNldCB0aGVuIHRoZXJlIGlzIG5vIHdheSB0byBnZXQgdGhlIGJpbmFyeSBkYXRhXHJcbiAgICBOb25lID0gMCxcclxuICAgIC8vIFdoZW4gdGhpcyBpcyBzZXQgdmFsdWUgaXMgVVJMIHdlIGNhbiBzaW1wbHkgY2FsbCBIVFRQUyBHRVQgdG8gZmV0Y2ggYmluYXJ5IGRhdGEuIFRoaXMgVVJMIG11c3QgYmUgb24gdGhlIEFMIHNlcnZpY2UgYWxsb3ctbGlzdC5cclxuICAgIEh0dHBzR2V0RG93bmxvYWRVcmwsXHJcbiAgICAvLyBXaGVuIHRoaXMgaXMgc2V0IHZhbHVlIGlzIGEgYmxvYiBjb2RlZCBsb2NhdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJldHJpZXZlIHRoZSBkYXRhIGZyb20gdGhlIEF6dXJlIEJsb2IgU3RvcmFnZS5cclxuICAgIC8vIEl0IGlzIG9ubHkgdmFsaWQgZm9yIG9uZSBwYWlyIG9mIHNlc3Npb24ga2V5IGFuZCB1c2VySWQuXHJcbiAgICBBbENvZGVkTG9jYXRpb25cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQmxvYlJlZiB7XHJcbiAgICByZWFkb25seSByZWZUeXBlOiBCbG9iUmVmVHlwZTtcclxuICAgIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJsb2IgZXh0ZW5kcyBJU2NoZW1hT2JqZWN0IHtcclxuICAgIC8vIFVuaXF1ZSBJZCBzZXQgZm9yIHRoZSBjb250ZW50IHdoZW4gdXBsb2FkaW5nIGl0LiBUaGlzIGlzIHNldCBieSBjbGllbnQgYW5kIG11c3QgYmUgdW5pcXVlIGZvciB0aGUgd2hvbGUgc2Vzc2lvbi5cclxuICAgIHJlYWRvbmx5IGlkOiBzdHJpbmc7XHJcblxyXG4gICAgLy8gU2l6ZSBvZiBkYXRhIGluIGJ5dGVzXHJcbiAgICByZWFkb25seSBzaXplQnl0ZXM6IG51bWJlcjtcclxuXHJcbiAgICAvLyBBY3R1YWwgZGF0YSBvciBBTCBpbnRlcm5hbCBJZCB1c2VkIGZvciBmZXRjaGluZyBkYXRhLiBPcHRpb25hbCBpZiBkYXRhIGlzIG5vdCBkZWxpdmVyZWQgYXQgdGhpcyBwb2ludCBpbiB0aW1lLlxyXG4gICAgLy8gSWYgaXQgaXMgaW50ZXJuYWwgSWQgaXQgaXMgY3JlYXRlZCBhbmQgbWFpbnRhaW5lZCBieSBBTC5cclxuICAgIHJlYWRvbmx5IGRhdGE/OiBVaW50OEFycmF5O1xyXG5cclxuICAgIC8vIFJlZmVyZW5jZSB0byBkYXRhLiBPcHRpb25hbCBpZiBkYXRhL3JlZmVyZW5jZSBpcyBub3QgZGVsaXZlcmVkIGF0IHRoaXMgcG9pbnQgaW4gdGltZS5cclxuICAgIHJlYWRvbmx5IGRhdGFQb2ludGVyPzogSUJsb2JSZWY7XHJcbn1cclxuXHJcbi8vIEJpbmFyeVxyXG4vLyBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIHNjaGVtYSBvYmplY3RzIHRoYXQgaGF2ZSBsYXJnZSBiaW5hcnkgcG9ydGlvbnNcclxuLy8gV2lsbCBiZSBzZW50IG1vcmUgZWZmaWNpZW50bHkgb3ZlciB0aGUgbmV0d29ya1xyXG5leHBvcnQgaW50ZXJmYWNlIElCaW5hcnkgZXh0ZW5kcyBJU2NoZW1hT2JqZWN0IHtcclxuICAgIGRhdGE/OiBVaW50OEFycmF5O1xyXG59XHJcblxyXG4vLyBUaWxlR3JvdXBcclxuLy8gUmVwcmVzZW50cyBhIGdyb3VwIG9mIHRpbGVzLiBUaGlzIGNhbiBiZSB1c2VkIGJ5IGhvc3RzIHRvXHJcbi8vIHByb3ZpZGUgYW55IGFyYml0cmFyeSBncm91cGluZyBvZiB0aWxlcyBhdCBhbnkgbGV2ZWwuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRpbGVHcm91cCBleHRlbmRzIElTY2hlbWFPYmplY3QgeyB9XHJcblxyXG4vLyBTZXNzaW9uXHJcbi8vIFJlcHJlc2VudHMgYSB1c2VyIHNlc3Npb24uIEEgdXNlciBzZXNzaW9uIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgZG9jdW1lbnQuXHJcbi8vIEl0IGlzIHRoZSByb290IG9mIHRoZSB3aG9sZSBjb250ZW50IHRyZWVcclxuZXhwb3J0IGludGVyZmFjZSBJU2Vzc2lvbiBleHRlbmRzIElUaWxlR3JvdXAge1xyXG4gICAgLy8gVGhlIGN1cnJlbnQgYWN0aXZlIHVzZXIgSURcclxuICAgIHJlYWRvbmx5IGFjdGl2ZVVzZXJJZDogc3RyaW5nO1xyXG5cclxuICAgIC8vIERQSXMgb2YgY2xpZW50IHNjcmVlblxyXG4gICAgcmVhZG9ubHkgd2lkdGhEcGk/OiBudW1iZXI7XHJcbiAgICByZWFkb25seSBoZWlnaHREcGk/OiBudW1iZXI7XHJcbn1cclxuXHJcbi8vIERvY3VtZW50IE9wZW4gVHlwZVxyXG4vLyBSZXByZXNlbnRzIHRoZSBtZXRob2Qgd2l0aCB3aGljaCB0aGUgZG9jdW1lbnQgd2FzIG9wZW5lZCBhdCB0aGUgY2xpZW50XHJcbmV4cG9ydCBjb25zdCBlbnVtIE9wZW5UeXBlIHtcclxuICAgIC8vIHRoZSBkb2N1bWVudCB3YXMgbmV3bHkgY3JlYXRlZFxyXG4gICAgTmV3RG9jdW1lbnQgPSAwLFxyXG4gICAgLy8gYW4gb2xkIGRvY3VtZW50IG9wZW5lZCBmb3IgZWRpdGluZ1xyXG4gICAgRWRpdERvY3VtZW50ID0gMSxcclxuICAgIC8vIGRvY3VtZW50IHRvIGJlIHZpZXdlZFxyXG4gICAgVmlld09ubHlEb2N1bWVudCA9IDJcclxufVxyXG5cclxuLy8gRG9jdW1lbnRcclxuLy8gUmVwcmVzZW50cyBhIGRvY3VtZW50IG5vZGVcclxuZXhwb3J0IGludGVyZmFjZSBJRG9jdW1lbnQgZXh0ZW5kcyBJVGlsZUdyb3VwIHtcclxuICAgIC8vIHdoZXRoZXIgdGhlIGRvY3VtZW50IGlzIHJlYWRvbmx5IG9yIG5vdFxyXG4gICAgcmVhZG9ubHkgaXNSZWFkb25seTogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBkb2N1bWVudCB0aXRsZVxyXG4gICAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XHJcblxyXG4gICAgLy8gZG9jdW1lbnQgdXJsXHJcbiAgICByZWFkb25seSB1cmw/OiBzdHJpbmc7XHJcblxyXG4gICAgLy8gZGV0ZXJtaW5lcyB0aGUgT3BlblR5cGUgb2YgdGhlIGRvY3VtZW50XHJcbiAgICByZWFkb25seSBvcGVuVHlwZT86IE9wZW5UeXBlO1xyXG59XHJcblxyXG4vLyBSZXByZXNlbnRzIGFuIGludGVyZmFjZSBmb3Igc3ViLWRvY3VtZW50IG5vZGVzXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVN1YkRvY3VtZW50IGV4dGVuZHMgSVNjaGVtYU9iamVjdCB7fVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWRDb25zdGFudHMge1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IGxvd2VySW5kZXhCb3VuZCA9IDE7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgbWF4TnVtYmVyT2ZSb3dzID0gMTA0ODU3NjtcclxuICAgIHN0YXRpYyByZWFkb25seSBtYXhOdW1iZXJPZkNvbHVtbnMgPSAxNjM4NDtcclxuICAgIHN0YXRpYyByZWFkb25seSBmaXJzdENvbHVtbk5hbWUgPSAnQSc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgbGFzdENvbHVtbk5hbWUgPSAnWEZEJztcclxufVxyXG5cclxuLy8gUmVwcmVzZW50cyBhbnkgY2VsbCB3aXRoaW4gYSB0YWJsZS4gVGhpcyBjYW4gYmUgdXNlZCBieSBib3RoIFdvcmQgYW5kIEV4Y2VsIHRhYmxlcy5cclxuZXhwb3J0IGludGVyZmFjZSBJR3JpZENlbGwgZXh0ZW5kcyBJU2NoZW1hT2JqZWN0IHtcclxuICAgIC8vIFRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoaXMgY2VsbFxyXG4gICAgcmVhZG9ubHkgY29sdW1uOiBudW1iZXI7XHJcblxyXG4gICAgLy8gVGhlIHJvdyBudW1iZXIgb2YgdGhpcyBjZWxsXHJcbiAgICByZWFkb25seSByb3c6IG51bWJlcjtcclxufVxyXG5cclxuLy8gUmVwcmVzZW50cyB0aGUgY29udGV4dCBvZiB0aGUgZ3JpZCBuZWlnaGJvcmhvb2QgZm9yIHdoZW4gYSBncmlkIGlzIHBhc3NlZCB0b1xyXG4vLyBleGVjdXRlIHdvcmtmbG93IGFzIGFuIGFycmF5LiBVc2VkIGJ5IHRoZSB3b3JrZmxvdyB0byByZWNvbnN0cnVjdCB0aGUgbmVpZ2hib3Job29kXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWROZWlnaGJvcmhvb2RDb250ZXh0IGV4dGVuZHMgSVNjaGVtYU9iamVjdCB7XHJcbiAgICAvLyBUaGUgd2lkdGggb2YgdGhlIG5laWdoYm9yaG9vZFxyXG4gICAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcclxuXHJcbiAgICAvLyBUaGUgaGVpZ2h0IG9mIHRoZSBuZWlnaGJvcmhvb2RcclxuICAgIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xyXG5cclxuICAgIC8vIFRoZSB3aWR0aCBvZiB0aGUgcmV0cmlldmVkIHBhcnQgb2YgbmVpZ2hib3Job29kXHJcbiAgICByZWFkb25seSByZXRyaWV2ZWRXaWR0aDogbnVtYmVyO1xyXG5cclxuICAgIC8vIFRoZSBoZWlnaHQgb2YgdGhlIHJldHJpZXZlZCBwYXJ0IG9mIG5laWdoYm9yaG9vZFxyXG4gICAgcmVhZG9ubHkgcmV0cmlldmVkSGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gICAgLy8gVGhlIHJvdyBvZiB0aGUgY2VsbCBhdCB0aGUgdG9wIGxlZnQgb2YgdGhlIG5laWdoYm9yaG9vZFxyXG4gICAgcmVhZG9ubHkgbmVpZ2hib3Job29kVG9wUm93OiBudW1iZXI7XHJcblxyXG4gICAgLy8gVGhlIGNvbHVtbiBvZiB0aGUgY2VsbCBhdCB0aGUgdG9wIGxlZnQgb2YgdGhlIG5laWdoYm9yaG9vZFxyXG4gICAgcmVhZG9ubHkgbmVpZ2hib3Job29kTGVmdENvbHVtbjogbnVtYmVyO1xyXG5cclxuICAgIC8vIFRoZSByb3cgb2YgdGhlIGNlbGwgYXQgdGhlIHRvcCBsZWZ0IG9mIHRoZSBncmlkIGluc2lkZSB0aGUgbmVpZ2hib3Job29kXHJcbiAgICByZWFkb25seSB0YXJnZXRHcmlkVG9wUm93OiBudW1iZXI7XHJcblxyXG4gICAgLy8gVGhlIGNvbHVtbiBvZiB0aGUgY2VsbCBhdCB0aGUgdG9wIGxlZnQgb2YgdGhlIGdyaWQgaW5zaWRlIHRoZSBuZWlnaGJvcmhvb2RcclxuICAgIHJlYWRvbmx5IHRhcmdldEdyaWRMZWZ0Q29sdW1uOiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiByZWxhdGl2ZSBsb2NhdGlvbiBvZiB0b3Agcm93IG9mIHRhcmdldCBncmlkIGluIHRoZSBuZWlnaGJvcmhvb2RcclxuICAgICAqL1xyXG4gICAgcmVhZG9ubHkgdGFyZ2V0R3JpZFJlbGF0aXZlVG9wUm93OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiByZWxhdGl2ZSBsb2NhdGlvbiBvZiBsZWZ0IGNvbHVtbiBvZiB0YXJnZXQgZ3JpZCBpbiB0aGUgbmVpZ2hib3Job29kXHJcbiAgICAgKi9cclxuICAgIHJlYWRvbmx5IHRhcmdldEdyaWRSZWxhdGl2ZUxlZnRDb2x1bW46IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBudW1iZXIgb2Ygbm9uLWVtcHR5IGNlbGxzIG9mIHRoZSBuZWlnaGJvcmhvb2RcclxuICAgICAqL1xyXG4gICAgcmVhZG9ubHkgbnVtYmVyT2ZOb25FbXB0eUNlbGxzOiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCYXNlIGludGVyZmFjZSByZXByZXNlbnRzIGFsbCB0aGUgY29udGV4dCBpbmZvcm1hdGlvbiBmb3IgZHluYW1pYyB3b3JrZmxvdyBleGVjdXRpb24uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElEeW5hbWljQ29udGV4dCBleHRlbmRzIElTY2hlbWFPYmplY3QgeyB9XHJcblxyXG4vKipcclxuICogQmFzZSBpbnRlcmZhY2UgcmVwcmVzZW50aW5nIHNlc3Npb24gY29udGV4dCBob2xkZXIuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElDb250ZXh0SG9sZGVyIGV4dGVuZHMgSVNjaGVtYU9iamVjdCB7IH1cclxuXHJcbi8qKlxyXG4gKiBJbnRlcmZhY2UgcmVwcmVzZW50aW5nIFVzZXIgd2l0aGluIHRoZSBzZXNzaW9uLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJVXNlckNvbnRleHRIb2xkZXIgZXh0ZW5kcyBJQ29udGV4dEhvbGRlciB7XHJcbiAgICAvLyBDdXJyZW50bHkgZW1wdHksIGluIGZ1dHVyZSBzaG91bGQgcHJvYmFibHkgdGFrZSBzb21lIHVzZXIgcmVsYXRlZCBwcm9wZXJ0aWVzIGZyb20gc2Vzc2lvbi5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVGVuYW50Q29udGV4dEhvbGRlciBleHRlbmRzIElDb250ZXh0SG9sZGVyIHtcclxuICAgIC8vIEN1cnJlbnRseSBlbXB0eSwgaW4gZnV0dXJlIHNob3VsZCBwcm9iYWJseSB0YWtlIHNvbWUgdGVuYW50IHJlbGF0ZWQgcHJvcGVydGllcyBmcm9tIHNlc3Npb24uXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCYXNlIGludGVyZmFjZSByZXByZXNlbnRpbmcgc2Vzc2lvbiBldmVudHMgaG9sZGVyLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJRXZlbnRzSG9sZGVyIGV4dGVuZHMgSVNjaGVtYU9iamVjdCB7IH1cclxuXHJcbi8qKlxyXG4gKiBJbnRlcmZhY2UgcmVwcmVzZW50aW5nIHVzZXIgY29tbWFuZHMgaG9sZGVyLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJVXNlckNvbW1hbmRzSG9sZGVyIGV4dGVuZHMgSUV2ZW50c0hvbGRlciB7IH1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@augloop/types-core/dist/src/tiles.js\n")},"./node_modules/@karankeswani99/html2canvas/dist/html2canvas.js":function(){eval("/*!\n * @karankeswani99/html2canvas 1.0.1 <https://html2canvas.hertzen.com>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\n(function (global, factory) {\n     true ? module.exports = factory() :\n    undefined;\n}(this, (function () { 'use strict';\n\n    /*! *****************************************************************************\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n    purpose with or without fee is hereby granted.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n    PERFORMANCE OF THIS SOFTWARE.\r\n    ***************************************************************************** */\r\n    /* global Reflect, Promise */\r\n\r\n    var extendStatics = function(d, b) {\r\n        extendStatics = Object.setPrototypeOf ||\r\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n        return extendStatics(d, b);\r\n    };\r\n\r\n    function __extends(d, b) {\r\n        if (typeof b !== \"function\" && b !== null)\r\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    }\r\n\r\n    var __assign = function() {\r\n        __assign = Object.assign || function __assign(t) {\r\n            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                s = arguments[i];\r\n                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n            }\r\n            return t;\r\n        };\r\n        return __assign.apply(this, arguments);\r\n    };\r\n\r\n    function __awaiter(thisArg, _arguments, P, generator) {\r\n        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n        return new (P || (P = Promise))(function (resolve, reject) {\r\n            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n            function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n            step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n        });\r\n    }\r\n\r\n    function __generator(thisArg, body) {\r\n        var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n        return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n        function verb(n) { return function (v) { return step([n, v]); }; }\r\n        function step(op) {\r\n            if (f) throw new TypeError(\"Generator is already executing.\");\r\n            while (_) try {\r\n                if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n                if (y = 0, t) op = [op[0] & 2, t.value];\r\n                switch (op[0]) {\r\n                    case 0: case 1: t = op; break;\r\n                    case 4: _.label++; return { value: op[1], done: false };\r\n                    case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                    case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                    default:\r\n                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                        if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                        if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                        if (t[2]) _.ops.pop();\r\n                        _.trys.pop(); continue;\r\n                }\r\n                op = body.call(thisArg, _);\r\n            } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n            if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n        }\r\n    }\r\n\r\n    function __spreadArray(to, from, pack) {\r\n        if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n            if (ar || !(i in from)) {\r\n                if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n                ar[i] = from[i];\r\n            }\r\n        }\r\n        return to.concat(ar || from);\r\n    }\n\n    var Bounds = /** @class */ (function () {\r\n        function Bounds(left, top, width, height) {\r\n            this.left = left;\r\n            this.top = top;\r\n            this.width = width;\r\n            this.height = height;\r\n        }\r\n        Bounds.prototype.add = function (x, y, w, h) {\r\n            return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h);\r\n        };\r\n        Bounds.fromClientRect = function (context, clientRect) {\r\n            return new Bounds(clientRect.left + context.windowBounds.left, clientRect.top + context.windowBounds.top, clientRect.width, clientRect.height);\r\n        };\r\n        Bounds.fromDOMRectList = function (context, domRectList) {\r\n            var domRect = Array.from(domRectList).find(function (rect) { return rect.width !== 0; });\r\n            return domRect\r\n                ? new Bounds(domRect.left + context.windowBounds.left, domRect.top + context.windowBounds.top, domRect.width, domRect.height)\r\n                : Bounds.EMPTY;\r\n        };\r\n        Bounds.EMPTY = new Bounds(0, 0, 0, 0);\r\n        return Bounds;\r\n    }());\r\n    var parseBounds = function (context, node) {\r\n        return Bounds.fromClientRect(context, node.getBoundingClientRect());\r\n    };\r\n    var parseDocumentSize = function (document) {\r\n        var body = document.body;\r\n        var documentElement = document.documentElement;\r\n        if (!body || !documentElement) {\r\n            throw new Error(\"Unable to get document size\");\r\n        }\r\n        var width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth));\r\n        var height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight));\r\n        return new Bounds(0, 0, width, height);\r\n    };\n\n    /*\n     * css-line-break 2.1.0 <https://github.com/niklasvh/css-line-break#readme>\n     * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n     * Released under MIT License\n     */\n    var toCodePoints$1 = function (str) {\n        var codePoints = [];\n        var i = 0;\n        var length = str.length;\n        while (i < length) {\n            var value = str.charCodeAt(i++);\n            if (value >= 0xd800 && value <= 0xdbff && i < length) {\n                var extra = str.charCodeAt(i++);\n                if ((extra & 0xfc00) === 0xdc00) {\n                    codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n                }\n                else {\n                    codePoints.push(value);\n                    i--;\n                }\n            }\n            else {\n                codePoints.push(value);\n            }\n        }\n        return codePoints;\n    };\n    var fromCodePoint$1 = function () {\n        var codePoints = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            codePoints[_i] = arguments[_i];\n        }\n        if (String.fromCodePoint) {\n            return String.fromCodePoint.apply(String, codePoints);\n        }\n        var length = codePoints.length;\n        if (!length) {\n            return '';\n        }\n        var codeUnits = [];\n        var index = -1;\n        var result = '';\n        while (++index < length) {\n            var codePoint = codePoints[index];\n            if (codePoint <= 0xffff) {\n                codeUnits.push(codePoint);\n            }\n            else {\n                codePoint -= 0x10000;\n                codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);\n            }\n            if (index + 1 === length || codeUnits.length > 0x4000) {\n                result += String.fromCharCode.apply(String, codeUnits);\n                codeUnits.length = 0;\n            }\n        }\n        return result;\n    };\n    var chars$2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    // Use a lookup table to find the index.\n    var lookup$2 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n    for (var i$2 = 0; i$2 < chars$2.length; i$2++) {\n        lookup$2[chars$2.charCodeAt(i$2)] = i$2;\n    }\n\n    /*\n     * utrie 1.0.2 <https://github.com/niklasvh/utrie>\n     * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n     * Released under MIT License\n     */\n    var chars$1$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    // Use a lookup table to find the index.\n    var lookup$1$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n    for (var i$1$1 = 0; i$1$1 < chars$1$1.length; i$1$1++) {\n        lookup$1$1[chars$1$1.charCodeAt(i$1$1)] = i$1$1;\n    }\n    var decode$1 = function (base64) {\n        var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n        if (base64[base64.length - 1] === '=') {\n            bufferLength--;\n            if (base64[base64.length - 2] === '=') {\n                bufferLength--;\n            }\n        }\n        var buffer = typeof ArrayBuffer !== 'undefined' &&\n            typeof Uint8Array !== 'undefined' &&\n            typeof Uint8Array.prototype.slice !== 'undefined'\n            ? new ArrayBuffer(bufferLength)\n            : new Array(bufferLength);\n        var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n        for (i = 0; i < len; i += 4) {\n            encoded1 = lookup$1$1[base64.charCodeAt(i)];\n            encoded2 = lookup$1$1[base64.charCodeAt(i + 1)];\n            encoded3 = lookup$1$1[base64.charCodeAt(i + 2)];\n            encoded4 = lookup$1$1[base64.charCodeAt(i + 3)];\n            bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n            bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n            bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n        }\n        return buffer;\n    };\n    var polyUint16Array$1 = function (buffer) {\n        var length = buffer.length;\n        var bytes = [];\n        for (var i = 0; i < length; i += 2) {\n            bytes.push((buffer[i + 1] << 8) | buffer[i]);\n        }\n        return bytes;\n    };\n    var polyUint32Array$1 = function (buffer) {\n        var length = buffer.length;\n        var bytes = [];\n        for (var i = 0; i < length; i += 4) {\n            bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n        }\n        return bytes;\n    };\n\n    /** Shift size for getting the index-2 table offset. */\n    var UTRIE2_SHIFT_2$1 = 5;\n    /** Shift size for getting the index-1 table offset. */\n    var UTRIE2_SHIFT_1$1 = 6 + 5;\n    /**\n     * Shift size for shifting left the index array values.\n     * Increases possible data size with 16-bit index values at the cost\n     * of compactability.\n     * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\n     */\n    var UTRIE2_INDEX_SHIFT$1 = 2;\n    /**\n     * Difference between the two shift sizes,\n     * for getting an index-1 offset from an index-2 offset. 6=11-5\n     */\n    var UTRIE2_SHIFT_1_2$1 = UTRIE2_SHIFT_1$1 - UTRIE2_SHIFT_2$1;\n    /**\n     * The part of the index-2 table for U+D800..U+DBFF stores values for\n     * lead surrogate code _units_ not code _points_.\n     * Values for lead surrogate code _points_ are indexed with this portion of the table.\n     * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\n     */\n    var UTRIE2_LSCP_INDEX_2_OFFSET$1 = 0x10000 >> UTRIE2_SHIFT_2$1;\n    /** Number of entries in a data block. 32=0x20 */\n    var UTRIE2_DATA_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_2$1;\n    /** Mask for getting the lower bits for the in-data-block offset. */\n    var UTRIE2_DATA_MASK$1 = UTRIE2_DATA_BLOCK_LENGTH$1 - 1;\n    var UTRIE2_LSCP_INDEX_2_LENGTH$1 = 0x400 >> UTRIE2_SHIFT_2$1;\n    /** Count the lengths of both BMP pieces. 2080=0x820 */\n    var UTRIE2_INDEX_2_BMP_LENGTH$1 = UTRIE2_LSCP_INDEX_2_OFFSET$1 + UTRIE2_LSCP_INDEX_2_LENGTH$1;\n    /**\n     * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n     * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\n     */\n    var UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 = UTRIE2_INDEX_2_BMP_LENGTH$1;\n    var UTRIE2_UTF8_2B_INDEX_2_LENGTH$1 = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\n    /**\n     * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n     * Variable length, for code points up to highStart, where the last single-value range starts.\n     * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\n     * (For 0x100000 supplementary code points U+10000..U+10ffff.)\n     *\n     * The part of the index-2 table for supplementary code points starts\n     * after this index-1 table.\n     *\n     * Both the index-1 table and the following part of the index-2 table\n     * are omitted completely if there is only BMP data.\n     */\n    var UTRIE2_INDEX_1_OFFSET$1 = UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 + UTRIE2_UTF8_2B_INDEX_2_LENGTH$1;\n    /**\n     * Number of index-1 entries for the BMP. 32=0x20\n     * This part of the index-1 table is omitted from the serialized form.\n     */\n    var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 = 0x10000 >> UTRIE2_SHIFT_1$1;\n    /** Number of entries in an index-2 block. 64=0x40 */\n    var UTRIE2_INDEX_2_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_1_2$1;\n    /** Mask for getting the lower bits for the in-index-2-block offset. */\n    var UTRIE2_INDEX_2_MASK$1 = UTRIE2_INDEX_2_BLOCK_LENGTH$1 - 1;\n    var slice16$1 = function (view, start, end) {\n        if (view.slice) {\n            return view.slice(start, end);\n        }\n        return new Uint16Array(Array.prototype.slice.call(view, start, end));\n    };\n    var slice32$1 = function (view, start, end) {\n        if (view.slice) {\n            return view.slice(start, end);\n        }\n        return new Uint32Array(Array.prototype.slice.call(view, start, end));\n    };\n    var createTrieFromBase64$1 = function (base64, _byteLength) {\n        var buffer = decode$1(base64);\n        var view32 = Array.isArray(buffer) ? polyUint32Array$1(buffer) : new Uint32Array(buffer);\n        var view16 = Array.isArray(buffer) ? polyUint16Array$1(buffer) : new Uint16Array(buffer);\n        var headerLength = 24;\n        var index = slice16$1(view16, headerLength / 2, view32[4] / 2);\n        var data = view32[5] === 2\n            ? slice16$1(view16, (headerLength + view32[4]) / 2)\n            : slice32$1(view32, Math.ceil((headerLength + view32[4]) / 4));\n        return new Trie$1(view32[0], view32[1], view32[2], view32[3], index, data);\n    };\n    var Trie$1 = /** @class */ (function () {\n        function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {\n            this.initialValue = initialValue;\n            this.errorValue = errorValue;\n            this.highStart = highStart;\n            this.highValueIndex = highValueIndex;\n            this.index = index;\n            this.data = data;\n        }\n        /**\n         * Get the value for a code point as stored in the Trie.\n         *\n         * @param codePoint the code point\n         * @return the value\n         */\n        Trie.prototype.get = function (codePoint) {\n            var ix;\n            if (codePoint >= 0) {\n                if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\n                    // Ordinary BMP code point, excluding leading surrogates.\n                    // BMP uses a single level lookup.  BMP index starts at offset 0 in the Trie2 index.\n                    // 16 bit data is stored in the index array itself.\n                    ix = this.index[codePoint >> UTRIE2_SHIFT_2$1];\n                    ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n                    return this.data[ix];\n                }\n                if (codePoint <= 0xffff) {\n                    // Lead Surrogate Code Point.  A Separate index section is stored for\n                    // lead surrogate code units and code points.\n                    //   The main index has the code unit data.\n                    //   For this function, we need the code point data.\n                    // Note: this expression could be refactored for slightly improved efficiency, but\n                    //       surrogate code points will be so rare in practice that it's not worth it.\n                    ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET$1 + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2$1)];\n                    ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n                    return this.data[ix];\n                }\n                if (codePoint < this.highStart) {\n                    // Supplemental code point, use two-level lookup.\n                    ix = UTRIE2_INDEX_1_OFFSET$1 - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 + (codePoint >> UTRIE2_SHIFT_1$1);\n                    ix = this.index[ix];\n                    ix += (codePoint >> UTRIE2_SHIFT_2$1) & UTRIE2_INDEX_2_MASK$1;\n                    ix = this.index[ix];\n                    ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);\n                    return this.data[ix];\n                }\n                if (codePoint <= 0x10ffff) {\n                    return this.data[this.highValueIndex];\n                }\n            }\n            // Fall through.  The code point is outside of the legal range of 0..0x10ffff.\n            return this.errorValue;\n        };\n        return Trie;\n    }());\n\n    /*\n     * base64-arraybuffer 1.0.2 <https://github.com/niklasvh/base64-arraybuffer>\n     * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n     * Released under MIT License\n     */\n    var chars$3 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    // Use a lookup table to find the index.\n    var lookup$3 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n    for (var i$3 = 0; i$3 < chars$3.length; i$3++) {\n        lookup$3[chars$3.charCodeAt(i$3)] = i$3;\n    }\n\n    var base64$1 = 'KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA==';\n\n    var LETTER_NUMBER_MODIFIER = 50;\n    // Non-tailorable Line Breaking Classes\n    var BK = 1; //  Cause a line break (after)\n    var CR$1 = 2; //  Cause a line break (after), except between CR and LF\n    var LF$1 = 3; //  Cause a line break (after)\n    var CM = 4; //  Prohibit a line break between the character and the preceding character\n    var NL = 5; //  Cause a line break (after)\n    var WJ = 7; //  Prohibit line breaks before and after\n    var ZW = 8; //  Provide a break opportunity\n    var GL = 9; //  Prohibit line breaks before and after\n    var SP = 10; // Enable indirect line breaks\n    var ZWJ$1 = 11; // Prohibit line breaks within joiner sequences\n    // Break Opportunities\n    var B2 = 12; //  Provide a line break opportunity before and after the character\n    var BA = 13; //  Generally provide a line break opportunity after the character\n    var BB = 14; //  Generally provide a line break opportunity before the character\n    var HY = 15; //  Provide a line break opportunity after the character, except in numeric context\n    var CB = 16; //   Provide a line break opportunity contingent on additional information\n    // Characters Prohibiting Certain Breaks\n    var CL = 17; //  Prohibit line breaks before\n    var CP = 18; //  Prohibit line breaks before\n    var EX = 19; //  Prohibit line breaks before\n    var IN = 20; //  Allow only indirect line breaks between pairs\n    var NS = 21; //  Allow only indirect line breaks before\n    var OP = 22; //  Prohibit line breaks after\n    var QU = 23; //  Act like they are both opening and closing\n    // Numeric Context\n    var IS = 24; //  Prevent breaks after any and before numeric\n    var NU = 25; //  Form numeric expressions for line breaking purposes\n    var PO = 26; //  Do not break following a numeric expression\n    var PR = 27; //  Do not break in front of a numeric expression\n    var SY = 28; //  Prevent a break before; and allow a break after\n    // Other Characters\n    var AI = 29; //  Act like AL when the resolvedEAW is N; otherwise; act as ID\n    var AL = 30; //  Are alphabetic characters or symbols that are used with alphabetic characters\n    var CJ = 31; //  Treat as NS or ID for strict or normal breaking.\n    var EB = 32; //  Do not break from following Emoji Modifier\n    var EM = 33; //  Do not break from preceding Emoji Base\n    var H2 = 34; //  Form Korean syllable blocks\n    var H3 = 35; //  Form Korean syllable blocks\n    var HL = 36; //  Do not break around a following hyphen; otherwise act as Alphabetic\n    var ID = 37; //  Break before or after; except in some numeric context\n    var JL = 38; //  Form Korean syllable blocks\n    var JV = 39; //  Form Korean syllable blocks\n    var JT = 40; //  Form Korean syllable blocks\n    var RI$1 = 41; //  Keep pairs together. For pairs; break before and after other classes\n    var SA = 42; //  Provide a line break opportunity contingent on additional, language-specific context analysis\n    var XX = 43; //  Have as yet unknown line breaking behavior or unassigned code positions\n    var ea_OP = [0x2329, 0xff08];\n    var BREAK_MANDATORY = '!';\n    var BREAK_NOT_ALLOWED$1 = '×';\n    var BREAK_ALLOWED$1 = '÷';\n    var UnicodeTrie$1 = createTrieFromBase64$1(base64$1);\n    var ALPHABETICS = [AL, HL];\n    var HARD_LINE_BREAKS = [BK, CR$1, LF$1, NL];\n    var SPACE$1 = [SP, ZW];\n    var PREFIX_POSTFIX = [PR, PO];\n    var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE$1);\n    var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3];\n    var HYPHEN = [HY, BA];\n    var codePointsToCharacterClasses = function (codePoints, lineBreak) {\n        if (lineBreak === void 0) { lineBreak = 'strict'; }\n        var types = [];\n        var indices = [];\n        var categories = [];\n        codePoints.forEach(function (codePoint, index) {\n            var classType = UnicodeTrie$1.get(codePoint);\n            if (classType > LETTER_NUMBER_MODIFIER) {\n                categories.push(true);\n                classType -= LETTER_NUMBER_MODIFIER;\n            }\n            else {\n                categories.push(false);\n            }\n            if (['normal', 'auto', 'loose'].indexOf(lineBreak) !== -1) {\n                // U+2010, – U+2013, 〜 U+301C, ゠ U+30A0\n                if ([0x2010, 0x2013, 0x301c, 0x30a0].indexOf(codePoint) !== -1) {\n                    indices.push(index);\n                    return types.push(CB);\n                }\n            }\n            if (classType === CM || classType === ZWJ$1) {\n                // LB10 Treat any remaining combining mark or ZWJ as AL.\n                if (index === 0) {\n                    indices.push(index);\n                    return types.push(AL);\n                }\n                // LB9 Do not break a combining character sequence; treat it as if it has the line breaking class of\n                // the base character in all of the following rules. Treat ZWJ as if it were CM.\n                var prev = types[index - 1];\n                if (LINE_BREAKS.indexOf(prev) === -1) {\n                    indices.push(indices[index - 1]);\n                    return types.push(prev);\n                }\n                indices.push(index);\n                return types.push(AL);\n            }\n            indices.push(index);\n            if (classType === CJ) {\n                return types.push(lineBreak === 'strict' ? NS : ID);\n            }\n            if (classType === SA) {\n                return types.push(AL);\n            }\n            if (classType === AI) {\n                return types.push(AL);\n            }\n            // For supplementary characters, a useful default is to treat characters in the range 10000..1FFFD as AL\n            // and characters in the ranges 20000..2FFFD and 30000..3FFFD as ID, until the implementation can be revised\n            // to take into account the actual line breaking properties for these characters.\n            if (classType === XX) {\n                if ((codePoint >= 0x20000 && codePoint <= 0x2fffd) || (codePoint >= 0x30000 && codePoint <= 0x3fffd)) {\n                    return types.push(ID);\n                }\n                else {\n                    return types.push(AL);\n                }\n            }\n            types.push(classType);\n        });\n        return [indices, types, categories];\n    };\n    var isAdjacentWithSpaceIgnored = function (a, b, currentIndex, classTypes) {\n        var current = classTypes[currentIndex];\n        if (Array.isArray(a) ? a.indexOf(current) !== -1 : a === current) {\n            var i = currentIndex;\n            while (i <= classTypes.length) {\n                i++;\n                var next = classTypes[i];\n                if (next === b) {\n                    return true;\n                }\n                if (next !== SP) {\n                    break;\n                }\n            }\n        }\n        if (current === SP) {\n            var i = currentIndex;\n            while (i > 0) {\n                i--;\n                var prev = classTypes[i];\n                if (Array.isArray(a) ? a.indexOf(prev) !== -1 : a === prev) {\n                    var n = currentIndex;\n                    while (n <= classTypes.length) {\n                        n++;\n                        var next = classTypes[n];\n                        if (next === b) {\n                            return true;\n                        }\n                        if (next !== SP) {\n                            break;\n                        }\n                    }\n                }\n                if (prev !== SP) {\n                    break;\n                }\n            }\n        }\n        return false;\n    };\n    var previousNonSpaceClassType = function (currentIndex, classTypes) {\n        var i = currentIndex;\n        while (i >= 0) {\n            var type = classTypes[i];\n            if (type === SP) {\n                i--;\n            }\n            else {\n                return type;\n            }\n        }\n        return 0;\n    };\n    var _lineBreakAtIndex = function (codePoints, classTypes, indicies, index, forbiddenBreaks) {\n        if (indicies[index] === 0) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        var currentIndex = index - 1;\n        if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        var beforeIndex = currentIndex - 1;\n        var afterIndex = currentIndex + 1;\n        var current = classTypes[currentIndex];\n        // LB4 Always break after hard line breaks.\n        // LB5 Treat CR followed by LF, as well as CR, LF, and NL as hard line breaks.\n        var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0;\n        var next = classTypes[afterIndex];\n        if (current === CR$1 && next === LF$1) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        if (HARD_LINE_BREAKS.indexOf(current) !== -1) {\n            return BREAK_MANDATORY;\n        }\n        // LB6 Do not break before hard line breaks.\n        if (HARD_LINE_BREAKS.indexOf(next) !== -1) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB7 Do not break before spaces or zero width space.\n        if (SPACE$1.indexOf(next) !== -1) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB8 Break before any character following a zero-width space, even if one or more spaces intervene.\n        if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {\n            return BREAK_ALLOWED$1;\n        }\n        // LB8a Do not break after a zero width joiner.\n        if (UnicodeTrie$1.get(codePoints[currentIndex]) === ZWJ$1) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // zwj emojis\n        if ((current === EB || current === EM) && UnicodeTrie$1.get(codePoints[afterIndex]) === ZWJ$1) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB11 Do not break before or after Word joiner and related characters.\n        if (current === WJ || next === WJ) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB12 Do not break after NBSP and related characters.\n        if (current === GL) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB12a Do not break before NBSP and related characters, except after spaces and hyphens.\n        if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces.\n        if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB14 Do not break after ‘[’, even after spaces.\n        if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB15 Do not break within ‘”[’, even with intervening spaces.\n        if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB16 Do not break between closing punctuation and a nonstarter (lb=NS), even with intervening spaces.\n        if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB17 Do not break within ‘——’, even with intervening spaces.\n        if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB18 Break after spaces.\n        if (current === SP) {\n            return BREAK_ALLOWED$1;\n        }\n        // LB19 Do not break before or after quotation marks, such as ‘ ” ’.\n        if (current === QU || next === QU) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB20 Break before and after unresolved CB.\n        if (next === CB || current === CB) {\n            return BREAK_ALLOWED$1;\n        }\n        // LB21 Do not break before hyphen-minus, other hyphens, fixed-width spaces, small kana, and other non-starters, or after acute accents.\n        if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB21a Don't break after Hebrew + Hyphen.\n        if (before === HL && HYPHEN.indexOf(current) !== -1) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB21b Don’t break between Solidus and Hebrew letters.\n        if (current === SY && next === HL) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB22 Do not break before ellipsis.\n        if (next === IN) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB23 Do not break between digits and letters.\n        if ((ALPHABETICS.indexOf(next) !== -1 && current === NU) || (ALPHABETICS.indexOf(current) !== -1 && next === NU)) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB23a Do not break between numeric prefixes and ideographs, or between ideographs and numeric postfixes.\n        if ((current === PR && [ID, EB, EM].indexOf(next) !== -1) ||\n            ([ID, EB, EM].indexOf(current) !== -1 && next === PO)) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB24 Do not break between numeric prefix/postfix and letters, or between letters and prefix/postfix.\n        if ((ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1) ||\n            (PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1)) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB25 Do not break between the following pairs of classes relevant to numbers:\n        if (\n        // (PR | PO) × ( OP | HY )? NU\n        ([PR, PO].indexOf(current) !== -1 &&\n            (next === NU || ([OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU))) ||\n            // ( OP | HY ) × NU\n            ([OP, HY].indexOf(current) !== -1 && next === NU) ||\n            // NU ×\t(NU | SY | IS)\n            (current === NU && [NU, SY, IS].indexOf(next) !== -1)) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // NU (NU | SY | IS)* × (NU | SY | IS | CL | CP)\n        if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {\n            var prevIndex = currentIndex;\n            while (prevIndex >= 0) {\n                var type = classTypes[prevIndex];\n                if (type === NU) {\n                    return BREAK_NOT_ALLOWED$1;\n                }\n                else if ([SY, IS].indexOf(type) !== -1) {\n                    prevIndex--;\n                }\n                else {\n                    break;\n                }\n            }\n        }\n        // NU (NU | SY | IS)* (CL | CP)? × (PO | PR))\n        if ([PR, PO].indexOf(next) !== -1) {\n            var prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex;\n            while (prevIndex >= 0) {\n                var type = classTypes[prevIndex];\n                if (type === NU) {\n                    return BREAK_NOT_ALLOWED$1;\n                }\n                else if ([SY, IS].indexOf(type) !== -1) {\n                    prevIndex--;\n                }\n                else {\n                    break;\n                }\n            }\n        }\n        // LB26 Do not break a Korean syllable.\n        if ((JL === current && [JL, JV, H2, H3].indexOf(next) !== -1) ||\n            ([JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1) ||\n            ([JT, H3].indexOf(current) !== -1 && next === JT)) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB27 Treat a Korean Syllable Block the same as ID.\n        if ((KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1) ||\n            (KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR)) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB28 Do not break between alphabetics (“at”).\n        if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB29 Do not break between numeric punctuation and alphabetics (“e.g.”).\n        if (current === IS && ALPHABETICS.indexOf(next) !== -1) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB30 Do not break between letters, numbers, or ordinary symbols and opening or closing parentheses.\n        if ((ALPHABETICS.concat(NU).indexOf(current) !== -1 &&\n            next === OP &&\n            ea_OP.indexOf(codePoints[afterIndex]) === -1) ||\n            (ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP)) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        // LB30a Break between two regional indicator symbols if and only if there are an even number of regional\n        // indicators preceding the position of the break.\n        if (current === RI$1 && next === RI$1) {\n            var i = indicies[currentIndex];\n            var count = 1;\n            while (i > 0) {\n                i--;\n                if (classTypes[i] === RI$1) {\n                    count++;\n                }\n                else {\n                    break;\n                }\n            }\n            if (count % 2 !== 0) {\n                return BREAK_NOT_ALLOWED$1;\n            }\n        }\n        // LB30b Do not break between an emoji base and an emoji modifier.\n        if (current === EB && next === EM) {\n            return BREAK_NOT_ALLOWED$1;\n        }\n        return BREAK_ALLOWED$1;\n    };\n    var cssFormattedClasses = function (codePoints, options) {\n        if (!options) {\n            options = { lineBreak: 'normal', wordBreak: 'normal' };\n        }\n        var _a = codePointsToCharacterClasses(codePoints, options.lineBreak), indicies = _a[0], classTypes = _a[1], isLetterNumber = _a[2];\n        if (options.wordBreak === 'break-all' || options.wordBreak === 'break-word') {\n            classTypes = classTypes.map(function (type) { return ([NU, AL, SA].indexOf(type) !== -1 ? ID : type); });\n        }\n        var forbiddenBreakpoints = options.wordBreak === 'keep-all'\n            ? isLetterNumber.map(function (letterNumber, i) {\n                return letterNumber && codePoints[i] >= 0x4e00 && codePoints[i] <= 0x9fff;\n            })\n            : undefined;\n        return [indicies, classTypes, forbiddenBreakpoints];\n    };\n    var Break = /** @class */ (function () {\n        function Break(codePoints, lineBreak, start, end) {\n            this.codePoints = codePoints;\n            this.required = lineBreak === BREAK_MANDATORY;\n            this.start = start;\n            this.end = end;\n        }\n        Break.prototype.slice = function () {\n            return fromCodePoint$1.apply(void 0, this.codePoints.slice(this.start, this.end));\n        };\n        return Break;\n    }());\n    var LineBreaker = function (str, options) {\n        var codePoints = toCodePoints$1(str);\n        var _a = cssFormattedClasses(codePoints, options), indicies = _a[0], classTypes = _a[1], forbiddenBreakpoints = _a[2];\n        var length = codePoints.length;\n        var lastEnd = 0;\n        var nextIndex = 0;\n        return {\n            next: function () {\n                if (nextIndex >= length) {\n                    return { done: true, value: null };\n                }\n                var lineBreak = BREAK_NOT_ALLOWED$1;\n                while (nextIndex < length &&\n                    (lineBreak = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) ===\n                        BREAK_NOT_ALLOWED$1) { }\n                if (lineBreak !== BREAK_NOT_ALLOWED$1 || nextIndex === length) {\n                    var value = new Break(codePoints, lineBreak, lastEnd, nextIndex);\n                    lastEnd = nextIndex;\n                    return { value: value, done: false };\n                }\n                return { done: true, value: null };\n            },\n        };\n    };\n\n    // https://www.w3.org/TR/css-syntax-3\r\n    var FLAG_UNRESTRICTED = 1 << 0;\r\n    var FLAG_ID = 1 << 1;\r\n    var FLAG_INTEGER = 1 << 2;\r\n    var FLAG_NUMBER = 1 << 3;\r\n    var LINE_FEED = 0x000a;\r\n    var SOLIDUS = 0x002f;\r\n    var REVERSE_SOLIDUS = 0x005c;\r\n    var CHARACTER_TABULATION = 0x0009;\r\n    var SPACE = 0x0020;\r\n    var QUOTATION_MARK = 0x0022;\r\n    var EQUALS_SIGN = 0x003d;\r\n    var NUMBER_SIGN = 0x0023;\r\n    var DOLLAR_SIGN = 0x0024;\r\n    var PERCENTAGE_SIGN = 0x0025;\r\n    var APOSTROPHE = 0x0027;\r\n    var LEFT_PARENTHESIS = 0x0028;\r\n    var RIGHT_PARENTHESIS = 0x0029;\r\n    var LOW_LINE = 0x005f;\r\n    var HYPHEN_MINUS = 0x002d;\r\n    var EXCLAMATION_MARK = 0x0021;\r\n    var LESS_THAN_SIGN = 0x003c;\r\n    var GREATER_THAN_SIGN = 0x003e;\r\n    var COMMERCIAL_AT = 0x0040;\r\n    var LEFT_SQUARE_BRACKET = 0x005b;\r\n    var RIGHT_SQUARE_BRACKET = 0x005d;\r\n    var CIRCUMFLEX_ACCENT = 0x003d;\r\n    var LEFT_CURLY_BRACKET = 0x007b;\r\n    var QUESTION_MARK = 0x003f;\r\n    var RIGHT_CURLY_BRACKET = 0x007d;\r\n    var VERTICAL_LINE = 0x007c;\r\n    var TILDE = 0x007e;\r\n    var CONTROL = 0x0080;\r\n    var REPLACEMENT_CHARACTER = 0xfffd;\r\n    var ASTERISK = 0x002a;\r\n    var PLUS_SIGN = 0x002b;\r\n    var COMMA = 0x002c;\r\n    var COLON = 0x003a;\r\n    var SEMICOLON = 0x003b;\r\n    var FULL_STOP = 0x002e;\r\n    var NULL = 0x0000;\r\n    var BACKSPACE = 0x0008;\r\n    var LINE_TABULATION = 0x000b;\r\n    var SHIFT_OUT = 0x000e;\r\n    var INFORMATION_SEPARATOR_ONE = 0x001f;\r\n    var DELETE = 0x007f;\r\n    var EOF = -1;\r\n    var ZERO = 0x0030;\r\n    var a = 0x0061;\r\n    var e = 0x0065;\r\n    var f = 0x0066;\r\n    var u = 0x0075;\r\n    var z = 0x007a;\r\n    var A = 0x0041;\r\n    var E = 0x0045;\r\n    var F = 0x0046;\r\n    var U = 0x0055;\r\n    var Z = 0x005a;\r\n    var isDigit = function (codePoint) { return codePoint >= ZERO && codePoint <= 0x0039; };\r\n    var isSurrogateCodePoint = function (codePoint) { return codePoint >= 0xd800 && codePoint <= 0xdfff; };\r\n    var isHex = function (codePoint) {\r\n        return isDigit(codePoint) || (codePoint >= A && codePoint <= F) || (codePoint >= a && codePoint <= f);\r\n    };\r\n    var isLowerCaseLetter = function (codePoint) { return codePoint >= a && codePoint <= z; };\r\n    var isUpperCaseLetter = function (codePoint) { return codePoint >= A && codePoint <= Z; };\r\n    var isLetter = function (codePoint) { return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint); };\r\n    var isNonASCIICodePoint = function (codePoint) { return codePoint >= CONTROL; };\r\n    var isWhiteSpace = function (codePoint) {\r\n        return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE;\r\n    };\r\n    var isNameStartCodePoint = function (codePoint) {\r\n        return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE;\r\n    };\r\n    var isNameCodePoint = function (codePoint) {\r\n        return isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS;\r\n    };\r\n    var isNonPrintableCodePoint = function (codePoint) {\r\n        return ((codePoint >= NULL && codePoint <= BACKSPACE) ||\r\n            codePoint === LINE_TABULATION ||\r\n            (codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) ||\r\n            codePoint === DELETE);\r\n    };\r\n    var isValidEscape = function (c1, c2) {\r\n        if (c1 !== REVERSE_SOLIDUS) {\r\n            return false;\r\n        }\r\n        return c2 !== LINE_FEED;\r\n    };\r\n    var isIdentifierStart = function (c1, c2, c3) {\r\n        if (c1 === HYPHEN_MINUS) {\r\n            return isNameStartCodePoint(c2) || isValidEscape(c2, c3);\r\n        }\r\n        else if (isNameStartCodePoint(c1)) {\r\n            return true;\r\n        }\r\n        else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    var isNumberStart = function (c1, c2, c3) {\r\n        if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\r\n            if (isDigit(c2)) {\r\n                return true;\r\n            }\r\n            return c2 === FULL_STOP && isDigit(c3);\r\n        }\r\n        if (c1 === FULL_STOP) {\r\n            return isDigit(c2);\r\n        }\r\n        return isDigit(c1);\r\n    };\r\n    var stringToNumber = function (codePoints) {\r\n        var c = 0;\r\n        var sign = 1;\r\n        if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\r\n            if (codePoints[c] === HYPHEN_MINUS) {\r\n                sign = -1;\r\n            }\r\n            c++;\r\n        }\r\n        var integers = [];\r\n        while (isDigit(codePoints[c])) {\r\n            integers.push(codePoints[c++]);\r\n        }\r\n        var int = integers.length ? parseInt(fromCodePoint$1.apply(void 0, integers), 10) : 0;\r\n        if (codePoints[c] === FULL_STOP) {\r\n            c++;\r\n        }\r\n        var fraction = [];\r\n        while (isDigit(codePoints[c])) {\r\n            fraction.push(codePoints[c++]);\r\n        }\r\n        var fracd = fraction.length;\r\n        var frac = fracd ? parseInt(fromCodePoint$1.apply(void 0, fraction), 10) : 0;\r\n        if (codePoints[c] === E || codePoints[c] === e) {\r\n            c++;\r\n        }\r\n        var expsign = 1;\r\n        if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {\r\n            if (codePoints[c] === HYPHEN_MINUS) {\r\n                expsign = -1;\r\n            }\r\n            c++;\r\n        }\r\n        var exponent = [];\r\n        while (isDigit(codePoints[c])) {\r\n            exponent.push(codePoints[c++]);\r\n        }\r\n        var exp = exponent.length ? parseInt(fromCodePoint$1.apply(void 0, exponent), 10) : 0;\r\n        return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp);\r\n    };\r\n    var LEFT_PARENTHESIS_TOKEN = {\r\n        type: 2 /* LEFT_PARENTHESIS_TOKEN */\r\n    };\r\n    var RIGHT_PARENTHESIS_TOKEN = {\r\n        type: 3 /* RIGHT_PARENTHESIS_TOKEN */\r\n    };\r\n    var COMMA_TOKEN = { type: 4 /* COMMA_TOKEN */ };\r\n    var SUFFIX_MATCH_TOKEN = { type: 13 /* SUFFIX_MATCH_TOKEN */ };\r\n    var PREFIX_MATCH_TOKEN = { type: 8 /* PREFIX_MATCH_TOKEN */ };\r\n    var COLUMN_TOKEN = { type: 21 /* COLUMN_TOKEN */ };\r\n    var DASH_MATCH_TOKEN = { type: 9 /* DASH_MATCH_TOKEN */ };\r\n    var INCLUDE_MATCH_TOKEN = { type: 10 /* INCLUDE_MATCH_TOKEN */ };\r\n    var LEFT_CURLY_BRACKET_TOKEN = {\r\n        type: 11 /* LEFT_CURLY_BRACKET_TOKEN */\r\n    };\r\n    var RIGHT_CURLY_BRACKET_TOKEN = {\r\n        type: 12 /* RIGHT_CURLY_BRACKET_TOKEN */\r\n    };\r\n    var SUBSTRING_MATCH_TOKEN = { type: 14 /* SUBSTRING_MATCH_TOKEN */ };\r\n    var BAD_URL_TOKEN = { type: 23 /* BAD_URL_TOKEN */ };\r\n    var BAD_STRING_TOKEN = { type: 1 /* BAD_STRING_TOKEN */ };\r\n    var CDO_TOKEN = { type: 25 /* CDO_TOKEN */ };\r\n    var CDC_TOKEN = { type: 24 /* CDC_TOKEN */ };\r\n    var COLON_TOKEN = { type: 26 /* COLON_TOKEN */ };\r\n    var SEMICOLON_TOKEN = { type: 27 /* SEMICOLON_TOKEN */ };\r\n    var LEFT_SQUARE_BRACKET_TOKEN = {\r\n        type: 28 /* LEFT_SQUARE_BRACKET_TOKEN */\r\n    };\r\n    var RIGHT_SQUARE_BRACKET_TOKEN = {\r\n        type: 29 /* RIGHT_SQUARE_BRACKET_TOKEN */\r\n    };\r\n    var WHITESPACE_TOKEN = { type: 31 /* WHITESPACE_TOKEN */ };\r\n    var EOF_TOKEN = { type: 32 /* EOF_TOKEN */ };\r\n    var Tokenizer = /** @class */ (function () {\r\n        function Tokenizer() {\r\n            this._value = [];\r\n        }\r\n        Tokenizer.prototype.write = function (chunk) {\r\n            this._value = this._value.concat(toCodePoints$1(chunk));\r\n        };\r\n        Tokenizer.prototype.read = function () {\r\n            var tokens = [];\r\n            var token = this.consumeToken();\r\n            while (token !== EOF_TOKEN) {\r\n                tokens.push(token);\r\n                token = this.consumeToken();\r\n            }\r\n            return tokens;\r\n        };\r\n        Tokenizer.prototype.consumeToken = function () {\r\n            var codePoint = this.consumeCodePoint();\r\n            switch (codePoint) {\r\n                case QUOTATION_MARK:\r\n                    return this.consumeStringToken(QUOTATION_MARK);\r\n                case NUMBER_SIGN:\r\n                    var c1 = this.peekCodePoint(0);\r\n                    var c2 = this.peekCodePoint(1);\r\n                    var c3 = this.peekCodePoint(2);\r\n                    if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {\r\n                        var flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED;\r\n                        var value = this.consumeName();\r\n                        return { type: 5 /* HASH_TOKEN */, value: value, flags: flags };\r\n                    }\r\n                    break;\r\n                case DOLLAR_SIGN:\r\n                    if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n                        this.consumeCodePoint();\r\n                        return SUFFIX_MATCH_TOKEN;\r\n                    }\r\n                    break;\r\n                case APOSTROPHE:\r\n                    return this.consumeStringToken(APOSTROPHE);\r\n                case LEFT_PARENTHESIS:\r\n                    return LEFT_PARENTHESIS_TOKEN;\r\n                case RIGHT_PARENTHESIS:\r\n                    return RIGHT_PARENTHESIS_TOKEN;\r\n                case ASTERISK:\r\n                    if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n                        this.consumeCodePoint();\r\n                        return SUBSTRING_MATCH_TOKEN;\r\n                    }\r\n                    break;\r\n                case PLUS_SIGN:\r\n                    if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\r\n                        this.reconsumeCodePoint(codePoint);\r\n                        return this.consumeNumericToken();\r\n                    }\r\n                    break;\r\n                case COMMA:\r\n                    return COMMA_TOKEN;\r\n                case HYPHEN_MINUS:\r\n                    var e1 = codePoint;\r\n                    var e2 = this.peekCodePoint(0);\r\n                    var e3 = this.peekCodePoint(1);\r\n                    if (isNumberStart(e1, e2, e3)) {\r\n                        this.reconsumeCodePoint(codePoint);\r\n                        return this.consumeNumericToken();\r\n                    }\r\n                    if (isIdentifierStart(e1, e2, e3)) {\r\n                        this.reconsumeCodePoint(codePoint);\r\n                        return this.consumeIdentLikeToken();\r\n                    }\r\n                    if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {\r\n                        this.consumeCodePoint();\r\n                        this.consumeCodePoint();\r\n                        return CDC_TOKEN;\r\n                    }\r\n                    break;\r\n                case FULL_STOP:\r\n                    if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {\r\n                        this.reconsumeCodePoint(codePoint);\r\n                        return this.consumeNumericToken();\r\n                    }\r\n                    break;\r\n                case SOLIDUS:\r\n                    if (this.peekCodePoint(0) === ASTERISK) {\r\n                        this.consumeCodePoint();\r\n                        while (true) {\r\n                            var c = this.consumeCodePoint();\r\n                            if (c === ASTERISK) {\r\n                                c = this.consumeCodePoint();\r\n                                if (c === SOLIDUS) {\r\n                                    return this.consumeToken();\r\n                                }\r\n                            }\r\n                            if (c === EOF) {\r\n                                return this.consumeToken();\r\n                            }\r\n                        }\r\n                    }\r\n                    break;\r\n                case COLON:\r\n                    return COLON_TOKEN;\r\n                case SEMICOLON:\r\n                    return SEMICOLON_TOKEN;\r\n                case LESS_THAN_SIGN:\r\n                    if (this.peekCodePoint(0) === EXCLAMATION_MARK &&\r\n                        this.peekCodePoint(1) === HYPHEN_MINUS &&\r\n                        this.peekCodePoint(2) === HYPHEN_MINUS) {\r\n                        this.consumeCodePoint();\r\n                        this.consumeCodePoint();\r\n                        return CDO_TOKEN;\r\n                    }\r\n                    break;\r\n                case COMMERCIAL_AT:\r\n                    var a1 = this.peekCodePoint(0);\r\n                    var a2 = this.peekCodePoint(1);\r\n                    var a3 = this.peekCodePoint(2);\r\n                    if (isIdentifierStart(a1, a2, a3)) {\r\n                        var value = this.consumeName();\r\n                        return { type: 7 /* AT_KEYWORD_TOKEN */, value: value };\r\n                    }\r\n                    break;\r\n                case LEFT_SQUARE_BRACKET:\r\n                    return LEFT_SQUARE_BRACKET_TOKEN;\r\n                case REVERSE_SOLIDUS:\r\n                    if (isValidEscape(codePoint, this.peekCodePoint(0))) {\r\n                        this.reconsumeCodePoint(codePoint);\r\n                        return this.consumeIdentLikeToken();\r\n                    }\r\n                    break;\r\n                case RIGHT_SQUARE_BRACKET:\r\n                    return RIGHT_SQUARE_BRACKET_TOKEN;\r\n                case CIRCUMFLEX_ACCENT:\r\n                    if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n                        this.consumeCodePoint();\r\n                        return PREFIX_MATCH_TOKEN;\r\n                    }\r\n                    break;\r\n                case LEFT_CURLY_BRACKET:\r\n                    return LEFT_CURLY_BRACKET_TOKEN;\r\n                case RIGHT_CURLY_BRACKET:\r\n                    return RIGHT_CURLY_BRACKET_TOKEN;\r\n                case u:\r\n                case U:\r\n                    var u1 = this.peekCodePoint(0);\r\n                    var u2 = this.peekCodePoint(1);\r\n                    if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {\r\n                        this.consumeCodePoint();\r\n                        this.consumeUnicodeRangeToken();\r\n                    }\r\n                    this.reconsumeCodePoint(codePoint);\r\n                    return this.consumeIdentLikeToken();\r\n                case VERTICAL_LINE:\r\n                    if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n                        this.consumeCodePoint();\r\n                        return DASH_MATCH_TOKEN;\r\n                    }\r\n                    if (this.peekCodePoint(0) === VERTICAL_LINE) {\r\n                        this.consumeCodePoint();\r\n                        return COLUMN_TOKEN;\r\n                    }\r\n                    break;\r\n                case TILDE:\r\n                    if (this.peekCodePoint(0) === EQUALS_SIGN) {\r\n                        this.consumeCodePoint();\r\n                        return INCLUDE_MATCH_TOKEN;\r\n                    }\r\n                    break;\r\n                case EOF:\r\n                    return EOF_TOKEN;\r\n            }\r\n            if (isWhiteSpace(codePoint)) {\r\n                this.consumeWhiteSpace();\r\n                return WHITESPACE_TOKEN;\r\n            }\r\n            if (isDigit(codePoint)) {\r\n                this.reconsumeCodePoint(codePoint);\r\n                return this.consumeNumericToken();\r\n            }\r\n            if (isNameStartCodePoint(codePoint)) {\r\n                this.reconsumeCodePoint(codePoint);\r\n                return this.consumeIdentLikeToken();\r\n            }\r\n            return { type: 6 /* DELIM_TOKEN */, value: fromCodePoint$1(codePoint) };\r\n        };\r\n        Tokenizer.prototype.consumeCodePoint = function () {\r\n            var value = this._value.shift();\r\n            return typeof value === 'undefined' ? -1 : value;\r\n        };\r\n        Tokenizer.prototype.reconsumeCodePoint = function (codePoint) {\r\n            this._value.unshift(codePoint);\r\n        };\r\n        Tokenizer.prototype.peekCodePoint = function (delta) {\r\n            if (delta >= this._value.length) {\r\n                return -1;\r\n            }\r\n            return this._value[delta];\r\n        };\r\n        Tokenizer.prototype.consumeUnicodeRangeToken = function () {\r\n            var digits = [];\r\n            var codePoint = this.consumeCodePoint();\r\n            while (isHex(codePoint) && digits.length < 6) {\r\n                digits.push(codePoint);\r\n                codePoint = this.consumeCodePoint();\r\n            }\r\n            var questionMarks = false;\r\n            while (codePoint === QUESTION_MARK && digits.length < 6) {\r\n                digits.push(codePoint);\r\n                codePoint = this.consumeCodePoint();\r\n                questionMarks = true;\r\n            }\r\n            if (questionMarks) {\r\n                var start_1 = parseInt(fromCodePoint$1.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? ZERO : digit); })), 16);\r\n                var end = parseInt(fromCodePoint$1.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? F : digit); })), 16);\r\n                return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start_1, end: end };\r\n            }\r\n            var start = parseInt(fromCodePoint$1.apply(void 0, digits), 16);\r\n            if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) {\r\n                this.consumeCodePoint();\r\n                codePoint = this.consumeCodePoint();\r\n                var endDigits = [];\r\n                while (isHex(codePoint) && endDigits.length < 6) {\r\n                    endDigits.push(codePoint);\r\n                    codePoint = this.consumeCodePoint();\r\n                }\r\n                var end = parseInt(fromCodePoint$1.apply(void 0, endDigits), 16);\r\n                return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: end };\r\n            }\r\n            else {\r\n                return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: start };\r\n            }\r\n        };\r\n        Tokenizer.prototype.consumeIdentLikeToken = function () {\r\n            var value = this.consumeName();\r\n            if (value.toLowerCase() === 'url' && this.peekCodePoint(0) === LEFT_PARENTHESIS) {\r\n                this.consumeCodePoint();\r\n                return this.consumeUrlToken();\r\n            }\r\n            else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {\r\n                this.consumeCodePoint();\r\n                return { type: 19 /* FUNCTION_TOKEN */, value: value };\r\n            }\r\n            return { type: 20 /* IDENT_TOKEN */, value: value };\r\n        };\r\n        Tokenizer.prototype.consumeUrlToken = function () {\r\n            var value = [];\r\n            this.consumeWhiteSpace();\r\n            if (this.peekCodePoint(0) === EOF) {\r\n                return { type: 22 /* URL_TOKEN */, value: '' };\r\n            }\r\n            var next = this.peekCodePoint(0);\r\n            if (next === APOSTROPHE || next === QUOTATION_MARK) {\r\n                var stringToken = this.consumeStringToken(this.consumeCodePoint());\r\n                if (stringToken.type === 0 /* STRING_TOKEN */) {\r\n                    this.consumeWhiteSpace();\r\n                    if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\r\n                        this.consumeCodePoint();\r\n                        return { type: 22 /* URL_TOKEN */, value: stringToken.value };\r\n                    }\r\n                }\r\n                this.consumeBadUrlRemnants();\r\n                return BAD_URL_TOKEN;\r\n            }\r\n            while (true) {\r\n                var codePoint = this.consumeCodePoint();\r\n                if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {\r\n                    return { type: 22 /* URL_TOKEN */, value: fromCodePoint$1.apply(void 0, value) };\r\n                }\r\n                else if (isWhiteSpace(codePoint)) {\r\n                    this.consumeWhiteSpace();\r\n                    if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {\r\n                        this.consumeCodePoint();\r\n                        return { type: 22 /* URL_TOKEN */, value: fromCodePoint$1.apply(void 0, value) };\r\n                    }\r\n                    this.consumeBadUrlRemnants();\r\n                    return BAD_URL_TOKEN;\r\n                }\r\n                else if (codePoint === QUOTATION_MARK ||\r\n                    codePoint === APOSTROPHE ||\r\n                    codePoint === LEFT_PARENTHESIS ||\r\n                    isNonPrintableCodePoint(codePoint)) {\r\n                    this.consumeBadUrlRemnants();\r\n                    return BAD_URL_TOKEN;\r\n                }\r\n                else if (codePoint === REVERSE_SOLIDUS) {\r\n                    if (isValidEscape(codePoint, this.peekCodePoint(0))) {\r\n                        value.push(this.consumeEscapedCodePoint());\r\n                    }\r\n                    else {\r\n                        this.consumeBadUrlRemnants();\r\n                        return BAD_URL_TOKEN;\r\n                    }\r\n                }\r\n                else {\r\n                    value.push(codePoint);\r\n                }\r\n            }\r\n        };\r\n        Tokenizer.prototype.consumeWhiteSpace = function () {\r\n            while (isWhiteSpace(this.peekCodePoint(0))) {\r\n                this.consumeCodePoint();\r\n            }\r\n        };\r\n        Tokenizer.prototype.consumeBadUrlRemnants = function () {\r\n            while (true) {\r\n                var codePoint = this.consumeCodePoint();\r\n                if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {\r\n                    return;\r\n                }\r\n                if (isValidEscape(codePoint, this.peekCodePoint(0))) {\r\n                    this.consumeEscapedCodePoint();\r\n                }\r\n            }\r\n        };\r\n        Tokenizer.prototype.consumeStringSlice = function (count) {\r\n            var SLICE_STACK_SIZE = 50000;\r\n            var value = '';\r\n            while (count > 0) {\r\n                var amount = Math.min(SLICE_STACK_SIZE, count);\r\n                value += fromCodePoint$1.apply(void 0, this._value.splice(0, amount));\r\n                count -= amount;\r\n            }\r\n            this._value.shift();\r\n            return value;\r\n        };\r\n        Tokenizer.prototype.consumeStringToken = function (endingCodePoint) {\r\n            var value = '';\r\n            var i = 0;\r\n            do {\r\n                var codePoint = this._value[i];\r\n                if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) {\r\n                    value += this.consumeStringSlice(i);\r\n                    return { type: 0 /* STRING_TOKEN */, value: value };\r\n                }\r\n                if (codePoint === LINE_FEED) {\r\n                    this._value.splice(0, i);\r\n                    return BAD_STRING_TOKEN;\r\n                }\r\n                if (codePoint === REVERSE_SOLIDUS) {\r\n                    var next = this._value[i + 1];\r\n                    if (next !== EOF && next !== undefined) {\r\n                        if (next === LINE_FEED) {\r\n                            value += this.consumeStringSlice(i);\r\n                            i = -1;\r\n                            this._value.shift();\r\n                        }\r\n                        else if (isValidEscape(codePoint, next)) {\r\n                            value += this.consumeStringSlice(i);\r\n                            value += fromCodePoint$1(this.consumeEscapedCodePoint());\r\n                            i = -1;\r\n                        }\r\n                    }\r\n                }\r\n                i++;\r\n            } while (true);\r\n        };\r\n        Tokenizer.prototype.consumeNumber = function () {\r\n            var repr = [];\r\n            var type = FLAG_INTEGER;\r\n            var c1 = this.peekCodePoint(0);\r\n            if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {\r\n                repr.push(this.consumeCodePoint());\r\n            }\r\n            while (isDigit(this.peekCodePoint(0))) {\r\n                repr.push(this.consumeCodePoint());\r\n            }\r\n            c1 = this.peekCodePoint(0);\r\n            var c2 = this.peekCodePoint(1);\r\n            if (c1 === FULL_STOP && isDigit(c2)) {\r\n                repr.push(this.consumeCodePoint(), this.consumeCodePoint());\r\n                type = FLAG_NUMBER;\r\n                while (isDigit(this.peekCodePoint(0))) {\r\n                    repr.push(this.consumeCodePoint());\r\n                }\r\n            }\r\n            c1 = this.peekCodePoint(0);\r\n            c2 = this.peekCodePoint(1);\r\n            var c3 = this.peekCodePoint(2);\r\n            if ((c1 === E || c1 === e) && (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) || isDigit(c2))) {\r\n                repr.push(this.consumeCodePoint(), this.consumeCodePoint());\r\n                type = FLAG_NUMBER;\r\n                while (isDigit(this.peekCodePoint(0))) {\r\n                    repr.push(this.consumeCodePoint());\r\n                }\r\n            }\r\n            return [stringToNumber(repr), type];\r\n        };\r\n        Tokenizer.prototype.consumeNumericToken = function () {\r\n            var _a = this.consumeNumber(), number = _a[0], flags = _a[1];\r\n            var c1 = this.peekCodePoint(0);\r\n            var c2 = this.peekCodePoint(1);\r\n            var c3 = this.peekCodePoint(2);\r\n            if (isIdentifierStart(c1, c2, c3)) {\r\n                var unit = this.consumeName();\r\n                return { type: 15 /* DIMENSION_TOKEN */, number: number, flags: flags, unit: unit };\r\n            }\r\n            if (c1 === PERCENTAGE_SIGN) {\r\n                this.consumeCodePoint();\r\n                return { type: 16 /* PERCENTAGE_TOKEN */, number: number, flags: flags };\r\n            }\r\n            return { type: 17 /* NUMBER_TOKEN */, number: number, flags: flags };\r\n        };\r\n        Tokenizer.prototype.consumeEscapedCodePoint = function () {\r\n            var codePoint = this.consumeCodePoint();\r\n            if (isHex(codePoint)) {\r\n                var hex = fromCodePoint$1(codePoint);\r\n                while (isHex(this.peekCodePoint(0)) && hex.length < 6) {\r\n                    hex += fromCodePoint$1(this.consumeCodePoint());\r\n                }\r\n                if (isWhiteSpace(this.peekCodePoint(0))) {\r\n                    this.consumeCodePoint();\r\n                }\r\n                var hexCodePoint = parseInt(hex, 16);\r\n                if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 0x10ffff) {\r\n                    return REPLACEMENT_CHARACTER;\r\n                }\r\n                return hexCodePoint;\r\n            }\r\n            if (codePoint === EOF) {\r\n                return REPLACEMENT_CHARACTER;\r\n            }\r\n            return codePoint;\r\n        };\r\n        Tokenizer.prototype.consumeName = function () {\r\n            var result = '';\r\n            while (true) {\r\n                var codePoint = this.consumeCodePoint();\r\n                if (isNameCodePoint(codePoint)) {\r\n                    result += fromCodePoint$1(codePoint);\r\n                }\r\n                else if (isValidEscape(codePoint, this.peekCodePoint(0))) {\r\n                    result += fromCodePoint$1(this.consumeEscapedCodePoint());\r\n                }\r\n                else {\r\n                    this.reconsumeCodePoint(codePoint);\r\n                    return result;\r\n                }\r\n            }\r\n        };\r\n        return Tokenizer;\r\n    }());\n\n    var Parser = /** @class */ (function () {\r\n        function Parser(tokens) {\r\n            this._tokens = tokens;\r\n        }\r\n        Parser.create = function (value) {\r\n            var tokenizer = new Tokenizer();\r\n            tokenizer.write(value);\r\n            return new Parser(tokenizer.read());\r\n        };\r\n        Parser.parseValue = function (value) {\r\n            return Parser.create(value).parseComponentValue();\r\n        };\r\n        Parser.parseValues = function (value) {\r\n            return Parser.create(value).parseComponentValues();\r\n        };\r\n        Parser.prototype.parseComponentValue = function () {\r\n            var token = this.consumeToken();\r\n            while (token.type === 31 /* WHITESPACE_TOKEN */) {\r\n                token = this.consumeToken();\r\n            }\r\n            if (token.type === 32 /* EOF_TOKEN */) {\r\n                throw new SyntaxError(\"Error parsing CSS component value, unexpected EOF\");\r\n            }\r\n            this.reconsumeToken(token);\r\n            var value = this.consumeComponentValue();\r\n            do {\r\n                token = this.consumeToken();\r\n            } while (token.type === 31 /* WHITESPACE_TOKEN */);\r\n            if (token.type === 32 /* EOF_TOKEN */) {\r\n                return value;\r\n            }\r\n            throw new SyntaxError(\"Error parsing CSS component value, multiple values found when expecting only one\");\r\n        };\r\n        Parser.prototype.parseComponentValues = function () {\r\n            var values = [];\r\n            while (true) {\r\n                var value = this.consumeComponentValue();\r\n                if (value.type === 32 /* EOF_TOKEN */) {\r\n                    return values;\r\n                }\r\n                values.push(value);\r\n                values.push();\r\n            }\r\n        };\r\n        Parser.prototype.consumeComponentValue = function () {\r\n            var token = this.consumeToken();\r\n            switch (token.type) {\r\n                case 11 /* LEFT_CURLY_BRACKET_TOKEN */:\r\n                case 28 /* LEFT_SQUARE_BRACKET_TOKEN */:\r\n                case 2 /* LEFT_PARENTHESIS_TOKEN */:\r\n                    return this.consumeSimpleBlock(token.type);\r\n                case 19 /* FUNCTION_TOKEN */:\r\n                    return this.consumeFunction(token);\r\n            }\r\n            return token;\r\n        };\r\n        Parser.prototype.consumeSimpleBlock = function (type) {\r\n            var block = { type: type, values: [] };\r\n            var token = this.consumeToken();\r\n            while (true) {\r\n                if (token.type === 32 /* EOF_TOKEN */ || isEndingTokenFor(token, type)) {\r\n                    return block;\r\n                }\r\n                this.reconsumeToken(token);\r\n                block.values.push(this.consumeComponentValue());\r\n                token = this.consumeToken();\r\n            }\r\n        };\r\n        Parser.prototype.consumeFunction = function (functionToken) {\r\n            var cssFunction = {\r\n                name: functionToken.value,\r\n                values: [],\r\n                type: 18 /* FUNCTION */\r\n            };\r\n            while (true) {\r\n                var token = this.consumeToken();\r\n                if (token.type === 32 /* EOF_TOKEN */ || token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */) {\r\n                    return cssFunction;\r\n                }\r\n                this.reconsumeToken(token);\r\n                cssFunction.values.push(this.consumeComponentValue());\r\n            }\r\n        };\r\n        Parser.prototype.consumeToken = function () {\r\n            var token = this._tokens.shift();\r\n            return typeof token === 'undefined' ? EOF_TOKEN : token;\r\n        };\r\n        Parser.prototype.reconsumeToken = function (token) {\r\n            this._tokens.unshift(token);\r\n        };\r\n        return Parser;\r\n    }());\r\n    var isDimensionToken = function (token) { return token.type === 15 /* DIMENSION_TOKEN */; };\r\n    var isNumberToken = function (token) { return token.type === 17 /* NUMBER_TOKEN */; };\r\n    var isIdentToken = function (token) { return token.type === 20 /* IDENT_TOKEN */; };\r\n    var isStringToken = function (token) { return token.type === 0 /* STRING_TOKEN */; };\r\n    var isIdentWithValue = function (token, value) {\r\n        return isIdentToken(token) && token.value === value;\r\n    };\r\n    var nonWhiteSpace = function (token) { return token.type !== 31 /* WHITESPACE_TOKEN */; };\r\n    var nonFunctionArgSeparator = function (token) {\r\n        return token.type !== 31 /* WHITESPACE_TOKEN */ && token.type !== 4 /* COMMA_TOKEN */;\r\n    };\r\n    var parseFunctionArgs = function (tokens) {\r\n        var args = [];\r\n        var arg = [];\r\n        tokens.forEach(function (token) {\r\n            if (token.type === 4 /* COMMA_TOKEN */) {\r\n                if (arg.length === 0) {\r\n                    throw new Error(\"Error parsing function args, zero tokens for arg\");\r\n                }\r\n                args.push(arg);\r\n                arg = [];\r\n                return;\r\n            }\r\n            if (token.type !== 31 /* WHITESPACE_TOKEN */) {\r\n                arg.push(token);\r\n            }\r\n        });\r\n        if (arg.length) {\r\n            args.push(arg);\r\n        }\r\n        return args;\r\n    };\r\n    var isEndingTokenFor = function (token, type) {\r\n        if (type === 11 /* LEFT_CURLY_BRACKET_TOKEN */ && token.type === 12 /* RIGHT_CURLY_BRACKET_TOKEN */) {\r\n            return true;\r\n        }\r\n        if (type === 28 /* LEFT_SQUARE_BRACKET_TOKEN */ && token.type === 29 /* RIGHT_SQUARE_BRACKET_TOKEN */) {\r\n            return true;\r\n        }\r\n        return type === 2 /* LEFT_PARENTHESIS_TOKEN */ && token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */;\r\n    };\n\n    var isLength = function (token) {\r\n        return token.type === 17 /* NUMBER_TOKEN */ || token.type === 15 /* DIMENSION_TOKEN */;\r\n    };\n\n    var isLengthPercentage = function (token) {\r\n        return token.type === 16 /* PERCENTAGE_TOKEN */ || isLength(token);\r\n    };\r\n    var parseLengthPercentageTuple = function (tokens) {\r\n        return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]];\r\n    };\r\n    var ZERO_LENGTH = {\r\n        type: 17 /* NUMBER_TOKEN */,\r\n        number: 0,\r\n        flags: FLAG_INTEGER\r\n    };\r\n    var FIFTY_PERCENT = {\r\n        type: 16 /* PERCENTAGE_TOKEN */,\r\n        number: 50,\r\n        flags: FLAG_INTEGER\r\n    };\r\n    var HUNDRED_PERCENT = {\r\n        type: 16 /* PERCENTAGE_TOKEN */,\r\n        number: 100,\r\n        flags: FLAG_INTEGER\r\n    };\r\n    var getAbsoluteValueForTuple = function (tuple, width, height) {\r\n        var x = tuple[0], y = tuple[1];\r\n        return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== 'undefined' ? y : x, height)];\r\n    };\r\n    var getAbsoluteValue = function (token, parent) {\r\n        if (token.type === 16 /* PERCENTAGE_TOKEN */) {\r\n            return (token.number / 100) * parent;\r\n        }\r\n        if (isDimensionToken(token)) {\r\n            switch (token.unit) {\r\n                case 'rem':\r\n                case 'em':\r\n                    return 16 * token.number; // TODO use correct font-size\r\n                case 'px':\r\n                default:\r\n                    return token.number;\r\n            }\r\n        }\r\n        return token.number;\r\n    };\n\n    var DEG = 'deg';\r\n    var GRAD = 'grad';\r\n    var RAD = 'rad';\r\n    var TURN = 'turn';\r\n    var angle = {\r\n        name: 'angle',\r\n        parse: function (_context, value) {\r\n            if (value.type === 15 /* DIMENSION_TOKEN */) {\r\n                switch (value.unit) {\r\n                    case DEG:\r\n                        return (Math.PI * value.number) / 180;\r\n                    case GRAD:\r\n                        return (Math.PI / 200) * value.number;\r\n                    case RAD:\r\n                        return value.number;\r\n                    case TURN:\r\n                        return Math.PI * 2 * value.number;\r\n                }\r\n            }\r\n            throw new Error(\"Unsupported angle type\");\r\n        }\r\n    };\r\n    var isAngle = function (value) {\r\n        if (value.type === 15 /* DIMENSION_TOKEN */) {\r\n            if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    var parseNamedSide = function (tokens) {\r\n        var sideOrCorner = tokens\r\n            .filter(isIdentToken)\r\n            .map(function (ident) { return ident.value; })\r\n            .join(' ');\r\n        switch (sideOrCorner) {\r\n            case 'to bottom right':\r\n            case 'to right bottom':\r\n            case 'left top':\r\n            case 'top left':\r\n                return [ZERO_LENGTH, ZERO_LENGTH];\r\n            case 'to top':\r\n            case 'bottom':\r\n                return deg(0);\r\n            case 'to bottom left':\r\n            case 'to left bottom':\r\n            case 'right top':\r\n            case 'top right':\r\n                return [ZERO_LENGTH, HUNDRED_PERCENT];\r\n            case 'to right':\r\n            case 'left':\r\n                return deg(90);\r\n            case 'to top left':\r\n            case 'to left top':\r\n            case 'right bottom':\r\n            case 'bottom right':\r\n                return [HUNDRED_PERCENT, HUNDRED_PERCENT];\r\n            case 'to bottom':\r\n            case 'top':\r\n                return deg(180);\r\n            case 'to top right':\r\n            case 'to right top':\r\n            case 'left bottom':\r\n            case 'bottom left':\r\n                return [HUNDRED_PERCENT, ZERO_LENGTH];\r\n            case 'to left':\r\n            case 'right':\r\n                return deg(270);\r\n        }\r\n        return 0;\r\n    };\r\n    var deg = function (deg) { return (Math.PI * deg) / 180; };\n\n    var color$1 = {\r\n        name: 'color',\r\n        parse: function (context, value) {\r\n            if (value.type === 18 /* FUNCTION */) {\r\n                var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name];\r\n                if (typeof colorFunction === 'undefined') {\r\n                    throw new Error(\"Attempting to parse an unsupported color function \\\"\" + value.name + \"\\\"\");\r\n                }\r\n                return colorFunction(context, value.values);\r\n            }\r\n            if (value.type === 5 /* HASH_TOKEN */) {\r\n                if (value.value.length === 3) {\r\n                    var r = value.value.substring(0, 1);\r\n                    var g = value.value.substring(1, 2);\r\n                    var b = value.value.substring(2, 3);\r\n                    return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1);\r\n                }\r\n                if (value.value.length === 4) {\r\n                    var r = value.value.substring(0, 1);\r\n                    var g = value.value.substring(1, 2);\r\n                    var b = value.value.substring(2, 3);\r\n                    var a = value.value.substring(3, 4);\r\n                    return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), parseInt(a + a, 16) / 255);\r\n                }\r\n                if (value.value.length === 6) {\r\n                    var r = value.value.substring(0, 2);\r\n                    var g = value.value.substring(2, 4);\r\n                    var b = value.value.substring(4, 6);\r\n                    return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1);\r\n                }\r\n                if (value.value.length === 8) {\r\n                    var r = value.value.substring(0, 2);\r\n                    var g = value.value.substring(2, 4);\r\n                    var b = value.value.substring(4, 6);\r\n                    var a = value.value.substring(6, 8);\r\n                    return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a, 16) / 255);\r\n                }\r\n            }\r\n            if (value.type === 20 /* IDENT_TOKEN */) {\r\n                var namedColor = COLORS[value.value.toUpperCase()];\r\n                if (typeof namedColor !== 'undefined') {\r\n                    return namedColor;\r\n                }\r\n            }\r\n            return COLORS.TRANSPARENT;\r\n        }\r\n    };\r\n    var isTransparent = function (color) { return (0xff & color) === 0; };\r\n    var asString = function (color) {\r\n        var alpha = 0xff & color;\r\n        var blue = 0xff & (color >> 8);\r\n        var green = 0xff & (color >> 16);\r\n        var red = 0xff & (color >> 24);\r\n        return alpha < 255 ? \"rgba(\" + red + \",\" + green + \",\" + blue + \",\" + alpha / 255 + \")\" : \"rgb(\" + red + \",\" + green + \",\" + blue + \")\";\r\n    };\r\n    var pack = function (r, g, b, a) {\r\n        return ((r << 24) | (g << 16) | (b << 8) | (Math.round(a * 255) << 0)) >>> 0;\r\n    };\r\n    var getTokenColorValue = function (token, i) {\r\n        if (token.type === 17 /* NUMBER_TOKEN */) {\r\n            return token.number;\r\n        }\r\n        if (token.type === 16 /* PERCENTAGE_TOKEN */) {\r\n            var max = i === 3 ? 1 : 255;\r\n            return i === 3 ? (token.number / 100) * max : Math.round((token.number / 100) * max);\r\n        }\r\n        return 0;\r\n    };\r\n    var rgb = function (_context, args) {\r\n        var tokens = args.filter(nonFunctionArgSeparator);\r\n        if (tokens.length === 3) {\r\n            var _a = tokens.map(getTokenColorValue), r = _a[0], g = _a[1], b = _a[2];\r\n            return pack(r, g, b, 1);\r\n        }\r\n        if (tokens.length === 4) {\r\n            var _b = tokens.map(getTokenColorValue), r = _b[0], g = _b[1], b = _b[2], a = _b[3];\r\n            return pack(r, g, b, a);\r\n        }\r\n        return 0;\r\n    };\r\n    function hue2rgb(t1, t2, hue) {\r\n        if (hue < 0) {\r\n            hue += 1;\r\n        }\r\n        if (hue >= 1) {\r\n            hue -= 1;\r\n        }\r\n        if (hue < 1 / 6) {\r\n            return (t2 - t1) * hue * 6 + t1;\r\n        }\r\n        else if (hue < 1 / 2) {\r\n            return t2;\r\n        }\r\n        else if (hue < 2 / 3) {\r\n            return (t2 - t1) * 6 * (2 / 3 - hue) + t1;\r\n        }\r\n        else {\r\n            return t1;\r\n        }\r\n    }\r\n    var hsl = function (context, args) {\r\n        var tokens = args.filter(nonFunctionArgSeparator);\r\n        var hue = tokens[0], saturation = tokens[1], lightness = tokens[2], alpha = tokens[3];\r\n        var h = (hue.type === 17 /* NUMBER_TOKEN */ ? deg(hue.number) : angle.parse(context, hue)) / (Math.PI * 2);\r\n        var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0;\r\n        var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0;\r\n        var a = typeof alpha !== 'undefined' && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1;\r\n        if (s === 0) {\r\n            return pack(l * 255, l * 255, l * 255, 1);\r\n        }\r\n        var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\r\n        var t1 = l * 2 - t2;\r\n        var r = hue2rgb(t1, t2, h + 1 / 3);\r\n        var g = hue2rgb(t1, t2, h);\r\n        var b = hue2rgb(t1, t2, h - 1 / 3);\r\n        return pack(r * 255, g * 255, b * 255, a);\r\n    };\r\n    var SUPPORTED_COLOR_FUNCTIONS = {\r\n        hsl: hsl,\r\n        hsla: hsl,\r\n        rgb: rgb,\r\n        rgba: rgb\r\n    };\r\n    var parseColor = function (context, value) {\r\n        return color$1.parse(context, Parser.create(value).parseComponentValue());\r\n    };\r\n    var COLORS = {\r\n        ALICEBLUE: 0xf0f8ffff,\r\n        ANTIQUEWHITE: 0xfaebd7ff,\r\n        AQUA: 0x00ffffff,\r\n        AQUAMARINE: 0x7fffd4ff,\r\n        AZURE: 0xf0ffffff,\r\n        BEIGE: 0xf5f5dcff,\r\n        BISQUE: 0xffe4c4ff,\r\n        BLACK: 0x000000ff,\r\n        BLANCHEDALMOND: 0xffebcdff,\r\n        BLUE: 0x0000ffff,\r\n        BLUEVIOLET: 0x8a2be2ff,\r\n        BROWN: 0xa52a2aff,\r\n        BURLYWOOD: 0xdeb887ff,\r\n        CADETBLUE: 0x5f9ea0ff,\r\n        CHARTREUSE: 0x7fff00ff,\r\n        CHOCOLATE: 0xd2691eff,\r\n        CORAL: 0xff7f50ff,\r\n        CORNFLOWERBLUE: 0x6495edff,\r\n        CORNSILK: 0xfff8dcff,\r\n        CRIMSON: 0xdc143cff,\r\n        CYAN: 0x00ffffff,\r\n        DARKBLUE: 0x00008bff,\r\n        DARKCYAN: 0x008b8bff,\r\n        DARKGOLDENROD: 0xb886bbff,\r\n        DARKGRAY: 0xa9a9a9ff,\r\n        DARKGREEN: 0x006400ff,\r\n        DARKGREY: 0xa9a9a9ff,\r\n        DARKKHAKI: 0xbdb76bff,\r\n        DARKMAGENTA: 0x8b008bff,\r\n        DARKOLIVEGREEN: 0x556b2fff,\r\n        DARKORANGE: 0xff8c00ff,\r\n        DARKORCHID: 0x9932ccff,\r\n        DARKRED: 0x8b0000ff,\r\n        DARKSALMON: 0xe9967aff,\r\n        DARKSEAGREEN: 0x8fbc8fff,\r\n        DARKSLATEBLUE: 0x483d8bff,\r\n        DARKSLATEGRAY: 0x2f4f4fff,\r\n        DARKSLATEGREY: 0x2f4f4fff,\r\n        DARKTURQUOISE: 0x00ced1ff,\r\n        DARKVIOLET: 0x9400d3ff,\r\n        DEEPPINK: 0xff1493ff,\r\n        DEEPSKYBLUE: 0x00bfffff,\r\n        DIMGRAY: 0x696969ff,\r\n        DIMGREY: 0x696969ff,\r\n        DODGERBLUE: 0x1e90ffff,\r\n        FIREBRICK: 0xb22222ff,\r\n        FLORALWHITE: 0xfffaf0ff,\r\n        FORESTGREEN: 0x228b22ff,\r\n        FUCHSIA: 0xff00ffff,\r\n        GAINSBORO: 0xdcdcdcff,\r\n        GHOSTWHITE: 0xf8f8ffff,\r\n        GOLD: 0xffd700ff,\r\n        GOLDENROD: 0xdaa520ff,\r\n        GRAY: 0x808080ff,\r\n        GREEN: 0x008000ff,\r\n        GREENYELLOW: 0xadff2fff,\r\n        GREY: 0x808080ff,\r\n        HONEYDEW: 0xf0fff0ff,\r\n        HOTPINK: 0xff69b4ff,\r\n        INDIANRED: 0xcd5c5cff,\r\n        INDIGO: 0x4b0082ff,\r\n        IVORY: 0xfffff0ff,\r\n        KHAKI: 0xf0e68cff,\r\n        LAVENDER: 0xe6e6faff,\r\n        LAVENDERBLUSH: 0xfff0f5ff,\r\n        LAWNGREEN: 0x7cfc00ff,\r\n        LEMONCHIFFON: 0xfffacdff,\r\n        LIGHTBLUE: 0xadd8e6ff,\r\n        LIGHTCORAL: 0xf08080ff,\r\n        LIGHTCYAN: 0xe0ffffff,\r\n        LIGHTGOLDENRODYELLOW: 0xfafad2ff,\r\n        LIGHTGRAY: 0xd3d3d3ff,\r\n        LIGHTGREEN: 0x90ee90ff,\r\n        LIGHTGREY: 0xd3d3d3ff,\r\n        LIGHTPINK: 0xffb6c1ff,\r\n        LIGHTSALMON: 0xffa07aff,\r\n        LIGHTSEAGREEN: 0x20b2aaff,\r\n        LIGHTSKYBLUE: 0x87cefaff,\r\n        LIGHTSLATEGRAY: 0x778899ff,\r\n        LIGHTSLATEGREY: 0x778899ff,\r\n        LIGHTSTEELBLUE: 0xb0c4deff,\r\n        LIGHTYELLOW: 0xffffe0ff,\r\n        LIME: 0x00ff00ff,\r\n        LIMEGREEN: 0x32cd32ff,\r\n        LINEN: 0xfaf0e6ff,\r\n        MAGENTA: 0xff00ffff,\r\n        MAROON: 0x800000ff,\r\n        MEDIUMAQUAMARINE: 0x66cdaaff,\r\n        MEDIUMBLUE: 0x0000cdff,\r\n        MEDIUMORCHID: 0xba55d3ff,\r\n        MEDIUMPURPLE: 0x9370dbff,\r\n        MEDIUMSEAGREEN: 0x3cb371ff,\r\n        MEDIUMSLATEBLUE: 0x7b68eeff,\r\n        MEDIUMSPRINGGREEN: 0x00fa9aff,\r\n        MEDIUMTURQUOISE: 0x48d1ccff,\r\n        MEDIUMVIOLETRED: 0xc71585ff,\r\n        MIDNIGHTBLUE: 0x191970ff,\r\n        MINTCREAM: 0xf5fffaff,\r\n        MISTYROSE: 0xffe4e1ff,\r\n        MOCCASIN: 0xffe4b5ff,\r\n        NAVAJOWHITE: 0xffdeadff,\r\n        NAVY: 0x000080ff,\r\n        OLDLACE: 0xfdf5e6ff,\r\n        OLIVE: 0x808000ff,\r\n        OLIVEDRAB: 0x6b8e23ff,\r\n        ORANGE: 0xffa500ff,\r\n        ORANGERED: 0xff4500ff,\r\n        ORCHID: 0xda70d6ff,\r\n        PALEGOLDENROD: 0xeee8aaff,\r\n        PALEGREEN: 0x98fb98ff,\r\n        PALETURQUOISE: 0xafeeeeff,\r\n        PALEVIOLETRED: 0xdb7093ff,\r\n        PAPAYAWHIP: 0xffefd5ff,\r\n        PEACHPUFF: 0xffdab9ff,\r\n        PERU: 0xcd853fff,\r\n        PINK: 0xffc0cbff,\r\n        PLUM: 0xdda0ddff,\r\n        POWDERBLUE: 0xb0e0e6ff,\r\n        PURPLE: 0x800080ff,\r\n        REBECCAPURPLE: 0x663399ff,\r\n        RED: 0xff0000ff,\r\n        ROSYBROWN: 0xbc8f8fff,\r\n        ROYALBLUE: 0x4169e1ff,\r\n        SADDLEBROWN: 0x8b4513ff,\r\n        SALMON: 0xfa8072ff,\r\n        SANDYBROWN: 0xf4a460ff,\r\n        SEAGREEN: 0x2e8b57ff,\r\n        SEASHELL: 0xfff5eeff,\r\n        SIENNA: 0xa0522dff,\r\n        SILVER: 0xc0c0c0ff,\r\n        SKYBLUE: 0x87ceebff,\r\n        SLATEBLUE: 0x6a5acdff,\r\n        SLATEGRAY: 0x708090ff,\r\n        SLATEGREY: 0x708090ff,\r\n        SNOW: 0xfffafaff,\r\n        SPRINGGREEN: 0x00ff7fff,\r\n        STEELBLUE: 0x4682b4ff,\r\n        TAN: 0xd2b48cff,\r\n        TEAL: 0x008080ff,\r\n        THISTLE: 0xd8bfd8ff,\r\n        TOMATO: 0xff6347ff,\r\n        TRANSPARENT: 0x00000000,\r\n        TURQUOISE: 0x40e0d0ff,\r\n        VIOLET: 0xee82eeff,\r\n        WHEAT: 0xf5deb3ff,\r\n        WHITE: 0xffffffff,\r\n        WHITESMOKE: 0xf5f5f5ff,\r\n        YELLOW: 0xffff00ff,\r\n        YELLOWGREEN: 0x9acd32ff\r\n    };\n\n    var backgroundClip = {\r\n        name: 'background-clip',\r\n        initialValue: 'border-box',\r\n        prefix: false,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            return tokens.map(function (token) {\r\n                if (isIdentToken(token)) {\r\n                    switch (token.value) {\r\n                        case 'padding-box':\r\n                            return 1 /* PADDING_BOX */;\r\n                        case 'content-box':\r\n                            return 2 /* CONTENT_BOX */;\r\n                    }\r\n                }\r\n                return 0 /* BORDER_BOX */;\r\n            });\r\n        }\r\n    };\n\n    var backgroundColor = {\r\n        name: \"background-color\",\r\n        initialValue: 'transparent',\r\n        prefix: false,\r\n        type: 3 /* TYPE_VALUE */,\r\n        format: 'color'\r\n    };\n\n    var parseColorStop = function (context, args) {\r\n        var color = color$1.parse(context, args[0]);\r\n        var stop = args[1];\r\n        return stop && isLengthPercentage(stop) ? { color: color, stop: stop } : { color: color, stop: null };\r\n    };\r\n    var processColorStops = function (stops, lineLength) {\r\n        var first = stops[0];\r\n        var last = stops[stops.length - 1];\r\n        if (first.stop === null) {\r\n            first.stop = ZERO_LENGTH;\r\n        }\r\n        if (last.stop === null) {\r\n            last.stop = HUNDRED_PERCENT;\r\n        }\r\n        var processStops = [];\r\n        var previous = 0;\r\n        for (var i = 0; i < stops.length; i++) {\r\n            var stop_1 = stops[i].stop;\r\n            if (stop_1 !== null) {\r\n                var absoluteValue = getAbsoluteValue(stop_1, lineLength);\r\n                if (absoluteValue > previous) {\r\n                    processStops.push(absoluteValue);\r\n                }\r\n                else {\r\n                    processStops.push(previous);\r\n                }\r\n                previous = absoluteValue;\r\n            }\r\n            else {\r\n                processStops.push(null);\r\n            }\r\n        }\r\n        var gapBegin = null;\r\n        for (var i = 0; i < processStops.length; i++) {\r\n            var stop_2 = processStops[i];\r\n            if (stop_2 === null) {\r\n                if (gapBegin === null) {\r\n                    gapBegin = i;\r\n                }\r\n            }\r\n            else if (gapBegin !== null) {\r\n                var gapLength = i - gapBegin;\r\n                var beforeGap = processStops[gapBegin - 1];\r\n                var gapValue = (stop_2 - beforeGap) / (gapLength + 1);\r\n                for (var g = 1; g <= gapLength; g++) {\r\n                    processStops[gapBegin + g - 1] = gapValue * g;\r\n                }\r\n                gapBegin = null;\r\n            }\r\n        }\r\n        return stops.map(function (_a, i) {\r\n            var color = _a.color;\r\n            return { color: color, stop: Math.max(Math.min(1, processStops[i] / lineLength), 0) };\r\n        });\r\n    };\r\n    var getAngleFromCorner = function (corner, width, height) {\r\n        var centerX = width / 2;\r\n        var centerY = height / 2;\r\n        var x = getAbsoluteValue(corner[0], width) - centerX;\r\n        var y = centerY - getAbsoluteValue(corner[1], height);\r\n        return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2);\r\n    };\r\n    var calculateGradientDirection = function (angle, width, height) {\r\n        var radian = typeof angle === 'number' ? angle : getAngleFromCorner(angle, width, height);\r\n        var lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian));\r\n        var halfWidth = width / 2;\r\n        var halfHeight = height / 2;\r\n        var halfLineLength = lineLength / 2;\r\n        var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength;\r\n        var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength;\r\n        return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff];\r\n    };\r\n    var distance = function (a, b) { return Math.sqrt(a * a + b * b); };\r\n    var findCorner = function (width, height, x, y, closest) {\r\n        var corners = [\r\n            [0, 0],\r\n            [0, height],\r\n            [width, 0],\r\n            [width, height]\r\n        ];\r\n        return corners.reduce(function (stat, corner) {\r\n            var cx = corner[0], cy = corner[1];\r\n            var d = distance(x - cx, y - cy);\r\n            if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) {\r\n                return {\r\n                    optimumCorner: corner,\r\n                    optimumDistance: d\r\n                };\r\n            }\r\n            return stat;\r\n        }, {\r\n            optimumDistance: closest ? Infinity : -Infinity,\r\n            optimumCorner: null\r\n        }).optimumCorner;\r\n    };\r\n    var calculateRadius = function (gradient, x, y, width, height) {\r\n        var rx = 0;\r\n        var ry = 0;\r\n        switch (gradient.size) {\r\n            case 0 /* CLOSEST_SIDE */:\r\n                // The ending shape is sized so that that it exactly meets the side of the gradient box closest to the gradient’s center.\r\n                // If the shape is an ellipse, it exactly meets the closest side in each dimension.\r\n                if (gradient.shape === 0 /* CIRCLE */) {\r\n                    rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\r\n                }\r\n                else if (gradient.shape === 1 /* ELLIPSE */) {\r\n                    rx = Math.min(Math.abs(x), Math.abs(x - width));\r\n                    ry = Math.min(Math.abs(y), Math.abs(y - height));\r\n                }\r\n                break;\r\n            case 2 /* CLOSEST_CORNER */:\r\n                // The ending shape is sized so that that it passes through the corner of the gradient box closest to the gradient’s center.\r\n                // If the shape is an ellipse, the ending shape is given the same aspect-ratio it would have if closest-side were specified.\r\n                if (gradient.shape === 0 /* CIRCLE */) {\r\n                    rx = ry = Math.min(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\r\n                }\r\n                else if (gradient.shape === 1 /* ELLIPSE */) {\r\n                    // Compute the ratio ry/rx (which is to be the same as for \"closest-side\")\r\n                    var c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width));\r\n                    var _a = findCorner(width, height, x, y, true), cx = _a[0], cy = _a[1];\r\n                    rx = distance(cx - x, (cy - y) / c);\r\n                    ry = c * rx;\r\n                }\r\n                break;\r\n            case 1 /* FARTHEST_SIDE */:\r\n                // Same as closest-side, except the ending shape is sized based on the farthest side(s)\r\n                if (gradient.shape === 0 /* CIRCLE */) {\r\n                    rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));\r\n                }\r\n                else if (gradient.shape === 1 /* ELLIPSE */) {\r\n                    rx = Math.max(Math.abs(x), Math.abs(x - width));\r\n                    ry = Math.max(Math.abs(y), Math.abs(y - height));\r\n                }\r\n                break;\r\n            case 3 /* FARTHEST_CORNER */:\r\n                // Same as closest-corner, except the ending shape is sized based on the farthest corner.\r\n                // If the shape is an ellipse, the ending shape is given the same aspect ratio it would have if farthest-side were specified.\r\n                if (gradient.shape === 0 /* CIRCLE */) {\r\n                    rx = ry = Math.max(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));\r\n                }\r\n                else if (gradient.shape === 1 /* ELLIPSE */) {\r\n                    // Compute the ratio ry/rx (which is to be the same as for \"farthest-side\")\r\n                    var c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width));\r\n                    var _b = findCorner(width, height, x, y, false), cx = _b[0], cy = _b[1];\r\n                    rx = distance(cx - x, (cy - y) / c);\r\n                    ry = c * rx;\r\n                }\r\n                break;\r\n        }\r\n        if (Array.isArray(gradient.size)) {\r\n            rx = getAbsoluteValue(gradient.size[0], width);\r\n            ry = gradient.size.length === 2 ? getAbsoluteValue(gradient.size[1], height) : rx;\r\n        }\r\n        return [rx, ry];\r\n    };\n\n    var linearGradient = function (context, tokens) {\r\n        var angle$1 = deg(180);\r\n        var stops = [];\r\n        parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n            if (i === 0) {\r\n                var firstToken = arg[0];\r\n                if (firstToken.type === 20 /* IDENT_TOKEN */ && firstToken.value === 'to') {\r\n                    angle$1 = parseNamedSide(arg);\r\n                    return;\r\n                }\r\n                else if (isAngle(firstToken)) {\r\n                    angle$1 = angle.parse(context, firstToken);\r\n                    return;\r\n                }\r\n            }\r\n            var colorStop = parseColorStop(context, arg);\r\n            stops.push(colorStop);\r\n        });\r\n        return { angle: angle$1, stops: stops, type: 1 /* LINEAR_GRADIENT */ };\r\n    };\n\n    var prefixLinearGradient = function (context, tokens) {\r\n        var angle$1 = deg(180);\r\n        var stops = [];\r\n        parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n            if (i === 0) {\r\n                var firstToken = arg[0];\r\n                if (firstToken.type === 20 /* IDENT_TOKEN */ &&\r\n                    ['top', 'left', 'right', 'bottom'].indexOf(firstToken.value) !== -1) {\r\n                    angle$1 = parseNamedSide(arg);\r\n                    return;\r\n                }\r\n                else if (isAngle(firstToken)) {\r\n                    angle$1 = (angle.parse(context, firstToken) + deg(270)) % deg(360);\r\n                    return;\r\n                }\r\n            }\r\n            var colorStop = parseColorStop(context, arg);\r\n            stops.push(colorStop);\r\n        });\r\n        return {\r\n            angle: angle$1,\r\n            stops: stops,\r\n            type: 1 /* LINEAR_GRADIENT */\r\n        };\r\n    };\n\n    var webkitGradient = function (context, tokens) {\r\n        var angle = deg(180);\r\n        var stops = [];\r\n        var type = 1 /* LINEAR_GRADIENT */;\r\n        var shape = 0 /* CIRCLE */;\r\n        var size = 3 /* FARTHEST_CORNER */;\r\n        var position = [];\r\n        parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n            var firstToken = arg[0];\r\n            if (i === 0) {\r\n                if (isIdentToken(firstToken) && firstToken.value === 'linear') {\r\n                    type = 1 /* LINEAR_GRADIENT */;\r\n                    return;\r\n                }\r\n                else if (isIdentToken(firstToken) && firstToken.value === 'radial') {\r\n                    type = 2 /* RADIAL_GRADIENT */;\r\n                    return;\r\n                }\r\n            }\r\n            if (firstToken.type === 18 /* FUNCTION */) {\r\n                if (firstToken.name === 'from') {\r\n                    var color = color$1.parse(context, firstToken.values[0]);\r\n                    stops.push({ stop: ZERO_LENGTH, color: color });\r\n                }\r\n                else if (firstToken.name === 'to') {\r\n                    var color = color$1.parse(context, firstToken.values[0]);\r\n                    stops.push({ stop: HUNDRED_PERCENT, color: color });\r\n                }\r\n                else if (firstToken.name === 'color-stop') {\r\n                    var values = firstToken.values.filter(nonFunctionArgSeparator);\r\n                    if (values.length === 2) {\r\n                        var color = color$1.parse(context, values[1]);\r\n                        var stop_1 = values[0];\r\n                        if (isNumberToken(stop_1)) {\r\n                            stops.push({\r\n                                stop: { type: 16 /* PERCENTAGE_TOKEN */, number: stop_1.number * 100, flags: stop_1.flags },\r\n                                color: color\r\n                            });\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        });\r\n        return type === 1 /* LINEAR_GRADIENT */\r\n            ? {\r\n                angle: (angle + deg(180)) % deg(360),\r\n                stops: stops,\r\n                type: type\r\n            }\r\n            : { size: size, shape: shape, stops: stops, position: position, type: type };\r\n    };\n\n    var CLOSEST_SIDE = 'closest-side';\r\n    var FARTHEST_SIDE = 'farthest-side';\r\n    var CLOSEST_CORNER = 'closest-corner';\r\n    var FARTHEST_CORNER = 'farthest-corner';\r\n    var CIRCLE = 'circle';\r\n    var ELLIPSE = 'ellipse';\r\n    var COVER = 'cover';\r\n    var CONTAIN = 'contain';\r\n    var radialGradient = function (context, tokens) {\r\n        var shape = 0 /* CIRCLE */;\r\n        var size = 3 /* FARTHEST_CORNER */;\r\n        var stops = [];\r\n        var position = [];\r\n        parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n            var isColorStop = true;\r\n            if (i === 0) {\r\n                var isAtPosition_1 = false;\r\n                isColorStop = arg.reduce(function (acc, token) {\r\n                    if (isAtPosition_1) {\r\n                        if (isIdentToken(token)) {\r\n                            switch (token.value) {\r\n                                case 'center':\r\n                                    position.push(FIFTY_PERCENT);\r\n                                    return acc;\r\n                                case 'top':\r\n                                case 'left':\r\n                                    position.push(ZERO_LENGTH);\r\n                                    return acc;\r\n                                case 'right':\r\n                                case 'bottom':\r\n                                    position.push(HUNDRED_PERCENT);\r\n                                    return acc;\r\n                            }\r\n                        }\r\n                        else if (isLengthPercentage(token) || isLength(token)) {\r\n                            position.push(token);\r\n                        }\r\n                    }\r\n                    else if (isIdentToken(token)) {\r\n                        switch (token.value) {\r\n                            case CIRCLE:\r\n                                shape = 0 /* CIRCLE */;\r\n                                return false;\r\n                            case ELLIPSE:\r\n                                shape = 1 /* ELLIPSE */;\r\n                                return false;\r\n                            case 'at':\r\n                                isAtPosition_1 = true;\r\n                                return false;\r\n                            case CLOSEST_SIDE:\r\n                                size = 0 /* CLOSEST_SIDE */;\r\n                                return false;\r\n                            case COVER:\r\n                            case FARTHEST_SIDE:\r\n                                size = 1 /* FARTHEST_SIDE */;\r\n                                return false;\r\n                            case CONTAIN:\r\n                            case CLOSEST_CORNER:\r\n                                size = 2 /* CLOSEST_CORNER */;\r\n                                return false;\r\n                            case FARTHEST_CORNER:\r\n                                size = 3 /* FARTHEST_CORNER */;\r\n                                return false;\r\n                        }\r\n                    }\r\n                    else if (isLength(token) || isLengthPercentage(token)) {\r\n                        if (!Array.isArray(size)) {\r\n                            size = [];\r\n                        }\r\n                        size.push(token);\r\n                        return false;\r\n                    }\r\n                    return acc;\r\n                }, isColorStop);\r\n            }\r\n            if (isColorStop) {\r\n                var colorStop = parseColorStop(context, arg);\r\n                stops.push(colorStop);\r\n            }\r\n        });\r\n        return { size: size, shape: shape, stops: stops, position: position, type: 2 /* RADIAL_GRADIENT */ };\r\n    };\n\n    var prefixRadialGradient = function (context, tokens) {\r\n        var shape = 0 /* CIRCLE */;\r\n        var size = 3 /* FARTHEST_CORNER */;\r\n        var stops = [];\r\n        var position = [];\r\n        parseFunctionArgs(tokens).forEach(function (arg, i) {\r\n            var isColorStop = true;\r\n            if (i === 0) {\r\n                isColorStop = arg.reduce(function (acc, token) {\r\n                    if (isIdentToken(token)) {\r\n                        switch (token.value) {\r\n                            case 'center':\r\n                                position.push(FIFTY_PERCENT);\r\n                                return false;\r\n                            case 'top':\r\n                            case 'left':\r\n                                position.push(ZERO_LENGTH);\r\n                                return false;\r\n                            case 'right':\r\n                            case 'bottom':\r\n                                position.push(HUNDRED_PERCENT);\r\n                                return false;\r\n                        }\r\n                    }\r\n                    else if (isLengthPercentage(token) || isLength(token)) {\r\n                        position.push(token);\r\n                        return false;\r\n                    }\r\n                    return acc;\r\n                }, isColorStop);\r\n            }\r\n            else if (i === 1) {\r\n                isColorStop = arg.reduce(function (acc, token) {\r\n                    if (isIdentToken(token)) {\r\n                        switch (token.value) {\r\n                            case CIRCLE:\r\n                                shape = 0 /* CIRCLE */;\r\n                                return false;\r\n                            case ELLIPSE:\r\n                                shape = 1 /* ELLIPSE */;\r\n                                return false;\r\n                            case CONTAIN:\r\n                            case CLOSEST_SIDE:\r\n                                size = 0 /* CLOSEST_SIDE */;\r\n                                return false;\r\n                            case FARTHEST_SIDE:\r\n                                size = 1 /* FARTHEST_SIDE */;\r\n                                return false;\r\n                            case CLOSEST_CORNER:\r\n                                size = 2 /* CLOSEST_CORNER */;\r\n                                return false;\r\n                            case COVER:\r\n                            case FARTHEST_CORNER:\r\n                                size = 3 /* FARTHEST_CORNER */;\r\n                                return false;\r\n                        }\r\n                    }\r\n                    else if (isLength(token) || isLengthPercentage(token)) {\r\n                        if (!Array.isArray(size)) {\r\n                            size = [];\r\n                        }\r\n                        size.push(token);\r\n                        return false;\r\n                    }\r\n                    return acc;\r\n                }, isColorStop);\r\n            }\r\n            if (isColorStop) {\r\n                var colorStop = parseColorStop(context, arg);\r\n                stops.push(colorStop);\r\n            }\r\n        });\r\n        return { size: size, shape: shape, stops: stops, position: position, type: 2 /* RADIAL_GRADIENT */ };\r\n    };\n\n    var isLinearGradient = function (background) {\r\n        return background.type === 1 /* LINEAR_GRADIENT */;\r\n    };\r\n    var isRadialGradient = function (background) {\r\n        return background.type === 2 /* RADIAL_GRADIENT */;\r\n    };\r\n    var image = {\r\n        name: 'image',\r\n        parse: function (context, value) {\r\n            if (value.type === 22 /* URL_TOKEN */) {\r\n                var image_1 = { url: value.value, type: 0 /* URL */ };\r\n                context.cache.addImage(value.value);\r\n                return image_1;\r\n            }\r\n            if (value.type === 18 /* FUNCTION */) {\r\n                var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name];\r\n                if (typeof imageFunction === 'undefined') {\r\n                    throw new Error(\"Attempting to parse an unsupported image function \\\"\" + value.name + \"\\\"\");\r\n                }\r\n                return imageFunction(context, value.values);\r\n            }\r\n            throw new Error(\"Unsupported image type \" + value.type);\r\n        }\r\n    };\r\n    function isSupportedImage(value) {\r\n        return (!(value.type === 20 /* IDENT_TOKEN */ && value.value === 'none') &&\r\n            (value.type !== 18 /* FUNCTION */ || !!SUPPORTED_IMAGE_FUNCTIONS[value.name]));\r\n    }\r\n    var SUPPORTED_IMAGE_FUNCTIONS = {\r\n        'linear-gradient': linearGradient,\r\n        '-moz-linear-gradient': prefixLinearGradient,\r\n        '-ms-linear-gradient': prefixLinearGradient,\r\n        '-o-linear-gradient': prefixLinearGradient,\r\n        '-webkit-linear-gradient': prefixLinearGradient,\r\n        'radial-gradient': radialGradient,\r\n        '-moz-radial-gradient': prefixRadialGradient,\r\n        '-ms-radial-gradient': prefixRadialGradient,\r\n        '-o-radial-gradient': prefixRadialGradient,\r\n        '-webkit-radial-gradient': prefixRadialGradient,\r\n        '-webkit-gradient': webkitGradient\r\n    };\n\n    var backgroundImage = {\r\n        name: 'background-image',\r\n        initialValue: 'none',\r\n        type: 1 /* LIST */,\r\n        prefix: false,\r\n        parse: function (context, tokens) {\r\n            if (tokens.length === 0) {\r\n                return [];\r\n            }\r\n            var first = tokens[0];\r\n            if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\r\n                return [];\r\n            }\r\n            return tokens\r\n                .filter(function (value) { return nonFunctionArgSeparator(value) && isSupportedImage(value); })\r\n                .map(function (value) { return image.parse(context, value); });\r\n        }\r\n    };\n\n    var backgroundOrigin = {\r\n        name: 'background-origin',\r\n        initialValue: 'border-box',\r\n        prefix: false,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            return tokens.map(function (token) {\r\n                if (isIdentToken(token)) {\r\n                    switch (token.value) {\r\n                        case 'padding-box':\r\n                            return 1 /* PADDING_BOX */;\r\n                        case 'content-box':\r\n                            return 2 /* CONTENT_BOX */;\r\n                    }\r\n                }\r\n                return 0 /* BORDER_BOX */;\r\n            });\r\n        }\r\n    };\n\n    var backgroundPosition = {\r\n        name: 'background-position',\r\n        initialValue: '0% 0%',\r\n        type: 1 /* LIST */,\r\n        prefix: false,\r\n        parse: function (_context, tokens) {\r\n            return parseFunctionArgs(tokens)\r\n                .map(function (values) { return values.filter(isLengthPercentage); })\r\n                .map(parseLengthPercentageTuple);\r\n        }\r\n    };\n\n    var backgroundRepeat = {\r\n        name: 'background-repeat',\r\n        initialValue: 'repeat',\r\n        prefix: false,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            return parseFunctionArgs(tokens)\r\n                .map(function (values) {\r\n                return values\r\n                    .filter(isIdentToken)\r\n                    .map(function (token) { return token.value; })\r\n                    .join(' ');\r\n            })\r\n                .map(parseBackgroundRepeat);\r\n        }\r\n    };\r\n    var parseBackgroundRepeat = function (value) {\r\n        switch (value) {\r\n            case 'no-repeat':\r\n                return 1 /* NO_REPEAT */;\r\n            case 'repeat-x':\r\n            case 'repeat no-repeat':\r\n                return 2 /* REPEAT_X */;\r\n            case 'repeat-y':\r\n            case 'no-repeat repeat':\r\n                return 3 /* REPEAT_Y */;\r\n            case 'repeat':\r\n            default:\r\n                return 0 /* REPEAT */;\r\n        }\r\n    };\n\n    var BACKGROUND_SIZE;\r\n    (function (BACKGROUND_SIZE) {\r\n        BACKGROUND_SIZE[\"AUTO\"] = \"auto\";\r\n        BACKGROUND_SIZE[\"CONTAIN\"] = \"contain\";\r\n        BACKGROUND_SIZE[\"COVER\"] = \"cover\";\r\n    })(BACKGROUND_SIZE || (BACKGROUND_SIZE = {}));\r\n    var backgroundSize = {\r\n        name: 'background-size',\r\n        initialValue: '0',\r\n        prefix: false,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            return parseFunctionArgs(tokens).map(function (values) { return values.filter(isBackgroundSizeInfoToken); });\r\n        }\r\n    };\r\n    var isBackgroundSizeInfoToken = function (value) {\r\n        return isIdentToken(value) || isLengthPercentage(value);\r\n    };\n\n    var borderColorForSide = function (side) { return ({\r\n        name: \"border-\" + side + \"-color\",\r\n        initialValue: 'transparent',\r\n        prefix: false,\r\n        type: 3 /* TYPE_VALUE */,\r\n        format: 'color'\r\n    }); };\r\n    var borderTopColor = borderColorForSide('top');\r\n    var borderRightColor = borderColorForSide('right');\r\n    var borderBottomColor = borderColorForSide('bottom');\r\n    var borderLeftColor = borderColorForSide('left');\n\n    var borderRadiusForSide = function (side) { return ({\r\n        name: \"border-radius-\" + side,\r\n        initialValue: '0 0',\r\n        prefix: false,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            return parseLengthPercentageTuple(tokens.filter(isLengthPercentage));\r\n        }\r\n    }); };\r\n    var borderTopLeftRadius = borderRadiusForSide('top-left');\r\n    var borderTopRightRadius = borderRadiusForSide('top-right');\r\n    var borderBottomRightRadius = borderRadiusForSide('bottom-right');\r\n    var borderBottomLeftRadius = borderRadiusForSide('bottom-left');\n\n    var borderStyleForSide = function (side) { return ({\r\n        name: \"border-\" + side + \"-style\",\r\n        initialValue: 'solid',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, style) {\r\n            switch (style) {\r\n                case 'none':\r\n                    return 0 /* NONE */;\r\n                case 'dashed':\r\n                    return 2 /* DASHED */;\r\n                case 'dotted':\r\n                    return 3 /* DOTTED */;\r\n                case 'double':\r\n                    return 4 /* DOUBLE */;\r\n            }\r\n            return 1 /* SOLID */;\r\n        }\r\n    }); };\r\n    var borderTopStyle = borderStyleForSide('top');\r\n    var borderRightStyle = borderStyleForSide('right');\r\n    var borderBottomStyle = borderStyleForSide('bottom');\r\n    var borderLeftStyle = borderStyleForSide('left');\n\n    var borderWidthForSide = function (side) { return ({\r\n        name: \"border-\" + side + \"-width\",\r\n        initialValue: '0',\r\n        type: 0 /* VALUE */,\r\n        prefix: false,\r\n        parse: function (_context, token) {\r\n            if (isDimensionToken(token)) {\r\n                return token.number;\r\n            }\r\n            return 0;\r\n        }\r\n    }); };\r\n    var borderTopWidth = borderWidthForSide('top');\r\n    var borderRightWidth = borderWidthForSide('right');\r\n    var borderBottomWidth = borderWidthForSide('bottom');\r\n    var borderLeftWidth = borderWidthForSide('left');\n\n    var color = {\r\n        name: \"color\",\r\n        initialValue: 'transparent',\r\n        prefix: false,\r\n        type: 3 /* TYPE_VALUE */,\r\n        format: 'color'\r\n    };\n\n    var direction = {\r\n        name: 'direction',\r\n        initialValue: 'ltr',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, direction) {\r\n            switch (direction) {\r\n                case 'rtl':\r\n                    return 1 /* RTL */;\r\n                case 'ltr':\r\n                default:\r\n                    return 0 /* LTR */;\r\n            }\r\n        }\r\n    };\n\n    var display = {\r\n        name: 'display',\r\n        initialValue: 'inline-block',\r\n        prefix: false,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            return tokens.filter(isIdentToken).reduce(function (bit, token) {\r\n                return bit | parseDisplayValue(token.value);\r\n            }, 0 /* NONE */);\r\n        }\r\n    };\r\n    var parseDisplayValue = function (display) {\r\n        switch (display) {\r\n            case 'block':\r\n            case '-webkit-box':\r\n                return 2 /* BLOCK */;\r\n            case 'inline':\r\n                return 4 /* INLINE */;\r\n            case 'run-in':\r\n                return 8 /* RUN_IN */;\r\n            case 'flow':\r\n                return 16 /* FLOW */;\r\n            case 'flow-root':\r\n                return 32 /* FLOW_ROOT */;\r\n            case 'table':\r\n                return 64 /* TABLE */;\r\n            case 'flex':\r\n            case '-webkit-flex':\r\n                return 128 /* FLEX */;\r\n            case 'grid':\r\n            case '-ms-grid':\r\n                return 256 /* GRID */;\r\n            case 'ruby':\r\n                return 512 /* RUBY */;\r\n            case 'subgrid':\r\n                return 1024 /* SUBGRID */;\r\n            case 'list-item':\r\n                return 2048 /* LIST_ITEM */;\r\n            case 'table-row-group':\r\n                return 4096 /* TABLE_ROW_GROUP */;\r\n            case 'table-header-group':\r\n                return 8192 /* TABLE_HEADER_GROUP */;\r\n            case 'table-footer-group':\r\n                return 16384 /* TABLE_FOOTER_GROUP */;\r\n            case 'table-row':\r\n                return 32768 /* TABLE_ROW */;\r\n            case 'table-cell':\r\n                return 65536 /* TABLE_CELL */;\r\n            case 'table-column-group':\r\n                return 131072 /* TABLE_COLUMN_GROUP */;\r\n            case 'table-column':\r\n                return 262144 /* TABLE_COLUMN */;\r\n            case 'table-caption':\r\n                return 524288 /* TABLE_CAPTION */;\r\n            case 'ruby-base':\r\n                return 1048576 /* RUBY_BASE */;\r\n            case 'ruby-text':\r\n                return 2097152 /* RUBY_TEXT */;\r\n            case 'ruby-base-container':\r\n                return 4194304 /* RUBY_BASE_CONTAINER */;\r\n            case 'ruby-text-container':\r\n                return 8388608 /* RUBY_TEXT_CONTAINER */;\r\n            case 'contents':\r\n                return 16777216 /* CONTENTS */;\r\n            case 'inline-block':\r\n                return 33554432 /* INLINE_BLOCK */;\r\n            case 'inline-list-item':\r\n                return 67108864 /* INLINE_LIST_ITEM */;\r\n            case 'inline-table':\r\n                return 134217728 /* INLINE_TABLE */;\r\n            case 'inline-flex':\r\n                return 268435456 /* INLINE_FLEX */;\r\n            case 'inline-grid':\r\n                return 536870912 /* INLINE_GRID */;\r\n        }\r\n        return 0 /* NONE */;\r\n    };\n\n    var float = {\r\n        name: 'float',\r\n        initialValue: 'none',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, float) {\r\n            switch (float) {\r\n                case 'left':\r\n                    return 1 /* LEFT */;\r\n                case 'right':\r\n                    return 2 /* RIGHT */;\r\n                case 'inline-start':\r\n                    return 3 /* INLINE_START */;\r\n                case 'inline-end':\r\n                    return 4 /* INLINE_END */;\r\n            }\r\n            return 0 /* NONE */;\r\n        }\r\n    };\n\n    var letterSpacing = {\r\n        name: 'letter-spacing',\r\n        initialValue: '0',\r\n        prefix: false,\r\n        type: 0 /* VALUE */,\r\n        parse: function (_context, token) {\r\n            if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'normal') {\r\n                return 0;\r\n            }\r\n            if (token.type === 17 /* NUMBER_TOKEN */) {\r\n                return token.number;\r\n            }\r\n            if (token.type === 15 /* DIMENSION_TOKEN */) {\r\n                return token.number;\r\n            }\r\n            return 0;\r\n        }\r\n    };\n\n    var LINE_BREAK;\r\n    (function (LINE_BREAK) {\r\n        LINE_BREAK[\"NORMAL\"] = \"normal\";\r\n        LINE_BREAK[\"STRICT\"] = \"strict\";\r\n    })(LINE_BREAK || (LINE_BREAK = {}));\r\n    var lineBreak = {\r\n        name: 'line-break',\r\n        initialValue: 'normal',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, lineBreak) {\r\n            switch (lineBreak) {\r\n                case 'strict':\r\n                    return LINE_BREAK.STRICT;\r\n                case 'normal':\r\n                default:\r\n                    return LINE_BREAK.NORMAL;\r\n            }\r\n        }\r\n    };\n\n    var lineHeight = {\r\n        name: 'line-height',\r\n        initialValue: 'normal',\r\n        prefix: false,\r\n        type: 4 /* TOKEN_VALUE */\r\n    };\r\n    var computeLineHeight = function (token, fontSize) {\r\n        if (isIdentToken(token) && token.value === 'normal') {\r\n            return 1.2 * fontSize;\r\n        }\r\n        else if (token.type === 17 /* NUMBER_TOKEN */) {\r\n            return fontSize * token.number;\r\n        }\r\n        else if (isLengthPercentage(token)) {\r\n            return getAbsoluteValue(token, fontSize);\r\n        }\r\n        return fontSize;\r\n    };\n\n    var listStyleImage = {\r\n        name: 'list-style-image',\r\n        initialValue: 'none',\r\n        type: 0 /* VALUE */,\r\n        prefix: false,\r\n        parse: function (context, token) {\r\n            if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') {\r\n                return null;\r\n            }\r\n            return image.parse(context, token);\r\n        }\r\n    };\n\n    var listStylePosition = {\r\n        name: 'list-style-position',\r\n        initialValue: 'outside',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, position) {\r\n            switch (position) {\r\n                case 'inside':\r\n                    return 0 /* INSIDE */;\r\n                case 'outside':\r\n                default:\r\n                    return 1 /* OUTSIDE */;\r\n            }\r\n        }\r\n    };\n\n    var listStyleType = {\r\n        name: 'list-style-type',\r\n        initialValue: 'none',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, type) {\r\n            switch (type) {\r\n                case 'disc':\r\n                    return 0 /* DISC */;\r\n                case 'circle':\r\n                    return 1 /* CIRCLE */;\r\n                case 'square':\r\n                    return 2 /* SQUARE */;\r\n                case 'decimal':\r\n                    return 3 /* DECIMAL */;\r\n                case 'cjk-decimal':\r\n                    return 4 /* CJK_DECIMAL */;\r\n                case 'decimal-leading-zero':\r\n                    return 5 /* DECIMAL_LEADING_ZERO */;\r\n                case 'lower-roman':\r\n                    return 6 /* LOWER_ROMAN */;\r\n                case 'upper-roman':\r\n                    return 7 /* UPPER_ROMAN */;\r\n                case 'lower-greek':\r\n                    return 8 /* LOWER_GREEK */;\r\n                case 'lower-alpha':\r\n                    return 9 /* LOWER_ALPHA */;\r\n                case 'upper-alpha':\r\n                    return 10 /* UPPER_ALPHA */;\r\n                case 'arabic-indic':\r\n                    return 11 /* ARABIC_INDIC */;\r\n                case 'armenian':\r\n                    return 12 /* ARMENIAN */;\r\n                case 'bengali':\r\n                    return 13 /* BENGALI */;\r\n                case 'cambodian':\r\n                    return 14 /* CAMBODIAN */;\r\n                case 'cjk-earthly-branch':\r\n                    return 15 /* CJK_EARTHLY_BRANCH */;\r\n                case 'cjk-heavenly-stem':\r\n                    return 16 /* CJK_HEAVENLY_STEM */;\r\n                case 'cjk-ideographic':\r\n                    return 17 /* CJK_IDEOGRAPHIC */;\r\n                case 'devanagari':\r\n                    return 18 /* DEVANAGARI */;\r\n                case 'ethiopic-numeric':\r\n                    return 19 /* ETHIOPIC_NUMERIC */;\r\n                case 'georgian':\r\n                    return 20 /* GEORGIAN */;\r\n                case 'gujarati':\r\n                    return 21 /* GUJARATI */;\r\n                case 'gurmukhi':\r\n                    return 22 /* GURMUKHI */;\r\n                case 'hebrew':\r\n                    return 22 /* HEBREW */;\r\n                case 'hiragana':\r\n                    return 23 /* HIRAGANA */;\r\n                case 'hiragana-iroha':\r\n                    return 24 /* HIRAGANA_IROHA */;\r\n                case 'japanese-formal':\r\n                    return 25 /* JAPANESE_FORMAL */;\r\n                case 'japanese-informal':\r\n                    return 26 /* JAPANESE_INFORMAL */;\r\n                case 'kannada':\r\n                    return 27 /* KANNADA */;\r\n                case 'katakana':\r\n                    return 28 /* KATAKANA */;\r\n                case 'katakana-iroha':\r\n                    return 29 /* KATAKANA_IROHA */;\r\n                case 'khmer':\r\n                    return 30 /* KHMER */;\r\n                case 'korean-hangul-formal':\r\n                    return 31 /* KOREAN_HANGUL_FORMAL */;\r\n                case 'korean-hanja-formal':\r\n                    return 32 /* KOREAN_HANJA_FORMAL */;\r\n                case 'korean-hanja-informal':\r\n                    return 33 /* KOREAN_HANJA_INFORMAL */;\r\n                case 'lao':\r\n                    return 34 /* LAO */;\r\n                case 'lower-armenian':\r\n                    return 35 /* LOWER_ARMENIAN */;\r\n                case 'malayalam':\r\n                    return 36 /* MALAYALAM */;\r\n                case 'mongolian':\r\n                    return 37 /* MONGOLIAN */;\r\n                case 'myanmar':\r\n                    return 38 /* MYANMAR */;\r\n                case 'oriya':\r\n                    return 39 /* ORIYA */;\r\n                case 'persian':\r\n                    return 40 /* PERSIAN */;\r\n                case 'simp-chinese-formal':\r\n                    return 41 /* SIMP_CHINESE_FORMAL */;\r\n                case 'simp-chinese-informal':\r\n                    return 42 /* SIMP_CHINESE_INFORMAL */;\r\n                case 'tamil':\r\n                    return 43 /* TAMIL */;\r\n                case 'telugu':\r\n                    return 44 /* TELUGU */;\r\n                case 'thai':\r\n                    return 45 /* THAI */;\r\n                case 'tibetan':\r\n                    return 46 /* TIBETAN */;\r\n                case 'trad-chinese-formal':\r\n                    return 47 /* TRAD_CHINESE_FORMAL */;\r\n                case 'trad-chinese-informal':\r\n                    return 48 /* TRAD_CHINESE_INFORMAL */;\r\n                case 'upper-armenian':\r\n                    return 49 /* UPPER_ARMENIAN */;\r\n                case 'disclosure-open':\r\n                    return 50 /* DISCLOSURE_OPEN */;\r\n                case 'disclosure-closed':\r\n                    return 51 /* DISCLOSURE_CLOSED */;\r\n                case 'none':\r\n                default:\r\n                    return -1 /* NONE */;\r\n            }\r\n        }\r\n    };\n\n    var marginForSide = function (side) { return ({\r\n        name: \"margin-\" + side,\r\n        initialValue: '0',\r\n        prefix: false,\r\n        type: 4 /* TOKEN_VALUE */\r\n    }); };\r\n    var marginTop = marginForSide('top');\r\n    var marginRight = marginForSide('right');\r\n    var marginBottom = marginForSide('bottom');\r\n    var marginLeft = marginForSide('left');\n\n    var overflow = {\r\n        name: 'overflow',\r\n        initialValue: 'visible',\r\n        prefix: false,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            return tokens.filter(isIdentToken).map(function (overflow) {\r\n                switch (overflow.value) {\r\n                    case 'hidden':\r\n                        return 1 /* HIDDEN */;\r\n                    case 'scroll':\r\n                        return 2 /* SCROLL */;\r\n                    case 'clip':\r\n                        return 3 /* CLIP */;\r\n                    case 'auto':\r\n                        return 4 /* AUTO */;\r\n                    case 'visible':\r\n                    default:\r\n                        return 0 /* VISIBLE */;\r\n                }\r\n            });\r\n        }\r\n    };\n\n    var overflowWrap = {\r\n        name: 'overflow-wrap',\r\n        initialValue: 'normal',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, overflow) {\r\n            switch (overflow) {\r\n                case 'break-word':\r\n                    return \"break-word\" /* BREAK_WORD */;\r\n                case 'normal':\r\n                default:\r\n                    return \"normal\" /* NORMAL */;\r\n            }\r\n        }\r\n    };\n\n    var paddingForSide = function (side) { return ({\r\n        name: \"padding-\" + side,\r\n        initialValue: '0',\r\n        prefix: false,\r\n        type: 3 /* TYPE_VALUE */,\r\n        format: 'length-percentage'\r\n    }); };\r\n    var paddingTop = paddingForSide('top');\r\n    var paddingRight = paddingForSide('right');\r\n    var paddingBottom = paddingForSide('bottom');\r\n    var paddingLeft = paddingForSide('left');\n\n    var textAlign = {\r\n        name: 'text-align',\r\n        initialValue: 'left',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, textAlign) {\r\n            switch (textAlign) {\r\n                case 'right':\r\n                    return 2 /* RIGHT */;\r\n                case 'center':\r\n                case 'justify':\r\n                    return 1 /* CENTER */;\r\n                case 'left':\r\n                default:\r\n                    return 0 /* LEFT */;\r\n            }\r\n        }\r\n    };\n\n    var position = {\r\n        name: 'position',\r\n        initialValue: 'static',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, position) {\r\n            switch (position) {\r\n                case 'relative':\r\n                    return 1 /* RELATIVE */;\r\n                case 'absolute':\r\n                    return 2 /* ABSOLUTE */;\r\n                case 'fixed':\r\n                    return 3 /* FIXED */;\r\n                case 'sticky':\r\n                    return 4 /* STICKY */;\r\n            }\r\n            return 0 /* STATIC */;\r\n        }\r\n    };\n\n    var textShadow = {\r\n        name: 'text-shadow',\r\n        initialValue: 'none',\r\n        type: 1 /* LIST */,\r\n        prefix: false,\r\n        parse: function (context, tokens) {\r\n            if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\r\n                return [];\r\n            }\r\n            return parseFunctionArgs(tokens).map(function (values) {\r\n                var shadow = {\r\n                    color: COLORS.TRANSPARENT,\r\n                    offsetX: ZERO_LENGTH,\r\n                    offsetY: ZERO_LENGTH,\r\n                    blur: ZERO_LENGTH\r\n                };\r\n                var c = 0;\r\n                for (var i = 0; i < values.length; i++) {\r\n                    var token = values[i];\r\n                    if (isLength(token)) {\r\n                        if (c === 0) {\r\n                            shadow.offsetX = token;\r\n                        }\r\n                        else if (c === 1) {\r\n                            shadow.offsetY = token;\r\n                        }\r\n                        else {\r\n                            shadow.blur = token;\r\n                        }\r\n                        c++;\r\n                    }\r\n                    else {\r\n                        shadow.color = color$1.parse(context, token);\r\n                    }\r\n                }\r\n                return shadow;\r\n            });\r\n        }\r\n    };\n\n    var textTransform = {\r\n        name: 'text-transform',\r\n        initialValue: 'none',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, textTransform) {\r\n            switch (textTransform) {\r\n                case 'uppercase':\r\n                    return 2 /* UPPERCASE */;\r\n                case 'lowercase':\r\n                    return 1 /* LOWERCASE */;\r\n                case 'capitalize':\r\n                    return 3 /* CAPITALIZE */;\r\n            }\r\n            return 0 /* NONE */;\r\n        }\r\n    };\n\n    var transform$1 = {\r\n        name: 'transform',\r\n        initialValue: 'none',\r\n        prefix: true,\r\n        type: 0 /* VALUE */,\r\n        parse: function (_context, token) {\r\n            if (token.type === 20 /* IDENT_TOKEN */ && token.value === 'none') {\r\n                return null;\r\n            }\r\n            if (token.type === 18 /* FUNCTION */) {\r\n                var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name];\r\n                if (typeof transformFunction === 'undefined') {\r\n                    throw new Error(\"Attempting to parse an unsupported transform function \\\"\" + token.name + \"\\\"\");\r\n                }\r\n                return transformFunction(token.values);\r\n            }\r\n            return null;\r\n        }\r\n    };\r\n    var matrix = function (args) {\r\n        var values = args.filter(function (arg) { return arg.type === 17 /* NUMBER_TOKEN */; }).map(function (arg) { return arg.number; });\r\n        return values.length === 6 ? values : null;\r\n    };\r\n    // doesn't support 3D transforms at the moment\r\n    var matrix3d = function (args) {\r\n        var values = args.filter(function (arg) { return arg.type === 17 /* NUMBER_TOKEN */; }).map(function (arg) { return arg.number; });\r\n        var a1 = values[0], b1 = values[1]; values[2]; values[3]; var a2 = values[4], b2 = values[5]; values[6]; values[7]; values[8]; values[9]; values[10]; values[11]; var a4 = values[12], b4 = values[13]; values[14]; values[15];\r\n        return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null;\r\n    };\r\n    var SUPPORTED_TRANSFORM_FUNCTIONS = {\r\n        matrix: matrix,\r\n        matrix3d: matrix3d\r\n    };\n\n    var DEFAULT_VALUE = {\r\n        type: 16 /* PERCENTAGE_TOKEN */,\r\n        number: 50,\r\n        flags: FLAG_INTEGER\r\n    };\r\n    var DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE];\r\n    var transformOrigin = {\r\n        name: 'transform-origin',\r\n        initialValue: '50% 50%',\r\n        prefix: true,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            var origins = tokens.filter(isLengthPercentage);\r\n            if (origins.length !== 2) {\r\n                return DEFAULT;\r\n            }\r\n            return [origins[0], origins[1]];\r\n        }\r\n    };\n\n    var visibility = {\r\n        name: 'visible',\r\n        initialValue: 'none',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, visibility) {\r\n            switch (visibility) {\r\n                case 'hidden':\r\n                    return 1 /* HIDDEN */;\r\n                case 'collapse':\r\n                    return 2 /* COLLAPSE */;\r\n                case 'visible':\r\n                default:\r\n                    return 0 /* VISIBLE */;\r\n            }\r\n        }\r\n    };\n\n    var WORD_BREAK;\r\n    (function (WORD_BREAK) {\r\n        WORD_BREAK[\"NORMAL\"] = \"normal\";\r\n        WORD_BREAK[\"BREAK_ALL\"] = \"break-all\";\r\n        WORD_BREAK[\"KEEP_ALL\"] = \"keep-all\";\r\n    })(WORD_BREAK || (WORD_BREAK = {}));\r\n    var wordBreak = {\r\n        name: 'word-break',\r\n        initialValue: 'normal',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, wordBreak) {\r\n            switch (wordBreak) {\r\n                case 'break-all':\r\n                    return WORD_BREAK.BREAK_ALL;\r\n                case 'keep-all':\r\n                    return WORD_BREAK.KEEP_ALL;\r\n                case 'normal':\r\n                default:\r\n                    return WORD_BREAK.NORMAL;\r\n            }\r\n        }\r\n    };\n\n    var zIndex = {\r\n        name: 'z-index',\r\n        initialValue: 'auto',\r\n        prefix: false,\r\n        type: 0 /* VALUE */,\r\n        parse: function (_context, token) {\r\n            if (token.type === 20 /* IDENT_TOKEN */) {\r\n                return { auto: true, order: 0 };\r\n            }\r\n            if (isNumberToken(token)) {\r\n                return { auto: false, order: token.number };\r\n            }\r\n            throw new Error(\"Invalid z-index number parsed\");\r\n        }\r\n    };\n\n    var time = {\r\n        name: 'time',\r\n        parse: function (_context, value) {\r\n            if (value.type === 15 /* DIMENSION_TOKEN */) {\r\n                switch (value.unit.toLowerCase()) {\r\n                    case 's':\r\n                        return 1000 * value.number;\r\n                    case 'ms':\r\n                        return value.number;\r\n                }\r\n            }\r\n            throw new Error(\"Unsupported time type\");\r\n        }\r\n    };\n\n    var opacity = {\r\n        name: 'opacity',\r\n        initialValue: '1',\r\n        type: 0 /* VALUE */,\r\n        prefix: false,\r\n        parse: function (_context, token) {\r\n            if (isNumberToken(token)) {\r\n                return token.number;\r\n            }\r\n            return 1;\r\n        }\r\n    };\n\n    var textDecorationColor = {\r\n        name: \"text-decoration-color\",\r\n        initialValue: 'transparent',\r\n        prefix: false,\r\n        type: 3 /* TYPE_VALUE */,\r\n        format: 'color'\r\n    };\n\n    var textDecorationLine = {\r\n        name: 'text-decoration-line',\r\n        initialValue: 'none',\r\n        prefix: false,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            return tokens\r\n                .filter(isIdentToken)\r\n                .map(function (token) {\r\n                switch (token.value) {\r\n                    case 'underline':\r\n                        return 1 /* UNDERLINE */;\r\n                    case 'overline':\r\n                        return 2 /* OVERLINE */;\r\n                    case 'line-through':\r\n                        return 3 /* LINE_THROUGH */;\r\n                    case 'none':\r\n                        return 4 /* BLINK */;\r\n                }\r\n                return 0 /* NONE */;\r\n            })\r\n                .filter(function (line) { return line !== 0 /* NONE */; });\r\n        }\r\n    };\n\n    var fontFamily = {\r\n        name: \"font-family\",\r\n        initialValue: '',\r\n        prefix: false,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            var accumulator = [];\r\n            var results = [];\r\n            tokens.forEach(function (token) {\r\n                switch (token.type) {\r\n                    case 20 /* IDENT_TOKEN */:\r\n                    case 0 /* STRING_TOKEN */:\r\n                        accumulator.push(token.value);\r\n                        break;\r\n                    case 17 /* NUMBER_TOKEN */:\r\n                        accumulator.push(token.number.toString());\r\n                        break;\r\n                    case 4 /* COMMA_TOKEN */:\r\n                        results.push(accumulator.join(' '));\r\n                        accumulator.length = 0;\r\n                        break;\r\n                }\r\n            });\r\n            if (accumulator.length) {\r\n                results.push(accumulator.join(' '));\r\n            }\r\n            return results.map(function (result) { return (result.indexOf(' ') === -1 ? result : \"'\" + result + \"'\"); });\r\n        }\r\n    };\n\n    var fontSize = {\r\n        name: \"font-size\",\r\n        initialValue: '0',\r\n        prefix: false,\r\n        type: 3 /* TYPE_VALUE */,\r\n        format: 'length'\r\n    };\n\n    var fontWeight = {\r\n        name: 'font-weight',\r\n        initialValue: 'normal',\r\n        type: 0 /* VALUE */,\r\n        prefix: false,\r\n        parse: function (_context, token) {\r\n            if (isNumberToken(token)) {\r\n                return token.number;\r\n            }\r\n            if (isIdentToken(token)) {\r\n                switch (token.value) {\r\n                    case 'bold':\r\n                        return 700;\r\n                    case 'normal':\r\n                    default:\r\n                        return 400;\r\n                }\r\n            }\r\n            return 400;\r\n        }\r\n    };\n\n    var fontVariant = {\r\n        name: 'font-variant',\r\n        initialValue: 'none',\r\n        type: 1 /* LIST */,\r\n        prefix: false,\r\n        parse: function (_context, tokens) {\r\n            return tokens.filter(isIdentToken).map(function (token) { return token.value; });\r\n        }\r\n    };\n\n    var fontStyle = {\r\n        name: 'font-style',\r\n        initialValue: 'normal',\r\n        prefix: false,\r\n        type: 2 /* IDENT_VALUE */,\r\n        parse: function (_context, overflow) {\r\n            switch (overflow) {\r\n                case 'oblique':\r\n                    return \"oblique\" /* OBLIQUE */;\r\n                case 'italic':\r\n                    return \"italic\" /* ITALIC */;\r\n                case 'normal':\r\n                default:\r\n                    return \"normal\" /* NORMAL */;\r\n            }\r\n        }\r\n    };\n\n    var contains = function (bit, value) { return (bit & value) !== 0; };\n\n    var content = {\r\n        name: 'content',\r\n        initialValue: 'none',\r\n        type: 1 /* LIST */,\r\n        prefix: false,\r\n        parse: function (_context, tokens) {\r\n            if (tokens.length === 0) {\r\n                return [];\r\n            }\r\n            var first = tokens[0];\r\n            if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\r\n                return [];\r\n            }\r\n            return tokens;\r\n        }\r\n    };\n\n    var counterIncrement = {\r\n        name: 'counter-increment',\r\n        initialValue: 'none',\r\n        prefix: true,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            if (tokens.length === 0) {\r\n                return null;\r\n            }\r\n            var first = tokens[0];\r\n            if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\r\n                return null;\r\n            }\r\n            var increments = [];\r\n            var filtered = tokens.filter(nonWhiteSpace);\r\n            for (var i = 0; i < filtered.length; i++) {\r\n                var counter = filtered[i];\r\n                var next = filtered[i + 1];\r\n                if (counter.type === 20 /* IDENT_TOKEN */) {\r\n                    var increment = next && isNumberToken(next) ? next.number : 1;\r\n                    increments.push({ counter: counter.value, increment: increment });\r\n                }\r\n            }\r\n            return increments;\r\n        }\r\n    };\n\n    var counterReset = {\r\n        name: 'counter-reset',\r\n        initialValue: 'none',\r\n        prefix: true,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            if (tokens.length === 0) {\r\n                return [];\r\n            }\r\n            var resets = [];\r\n            var filtered = tokens.filter(nonWhiteSpace);\r\n            for (var i = 0; i < filtered.length; i++) {\r\n                var counter = filtered[i];\r\n                var next = filtered[i + 1];\r\n                if (isIdentToken(counter) && counter.value !== 'none') {\r\n                    var reset = next && isNumberToken(next) ? next.number : 0;\r\n                    resets.push({ counter: counter.value, reset: reset });\r\n                }\r\n            }\r\n            return resets;\r\n        }\r\n    };\n\n    var duration = {\r\n        name: 'duration',\r\n        initialValue: '0s',\r\n        prefix: false,\r\n        type: 1 /* LIST */,\r\n        parse: function (context, tokens) {\r\n            return tokens.filter(isDimensionToken).map(function (token) { return time.parse(context, token); });\r\n        }\r\n    };\n\n    var quotes = {\r\n        name: 'quotes',\r\n        initialValue: 'none',\r\n        prefix: true,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            if (tokens.length === 0) {\r\n                return null;\r\n            }\r\n            var first = tokens[0];\r\n            if (first.type === 20 /* IDENT_TOKEN */ && first.value === 'none') {\r\n                return null;\r\n            }\r\n            var quotes = [];\r\n            var filtered = tokens.filter(isStringToken);\r\n            if (filtered.length % 2 !== 0) {\r\n                return null;\r\n            }\r\n            for (var i = 0; i < filtered.length; i += 2) {\r\n                var open_1 = filtered[i].value;\r\n                var close_1 = filtered[i + 1].value;\r\n                quotes.push({ open: open_1, close: close_1 });\r\n            }\r\n            return quotes;\r\n        }\r\n    };\r\n    var getQuote = function (quotes, depth, open) {\r\n        if (!quotes) {\r\n            return '';\r\n        }\r\n        var quote = quotes[Math.min(depth, quotes.length - 1)];\r\n        if (!quote) {\r\n            return '';\r\n        }\r\n        return open ? quote.open : quote.close;\r\n    };\n\n    var boxShadow = {\r\n        name: 'box-shadow',\r\n        initialValue: 'none',\r\n        type: 1 /* LIST */,\r\n        prefix: false,\r\n        parse: function (context, tokens) {\r\n            if (tokens.length === 1 && isIdentWithValue(tokens[0], 'none')) {\r\n                return [];\r\n            }\r\n            return parseFunctionArgs(tokens).map(function (values) {\r\n                var shadow = {\r\n                    color: 0x000000ff,\r\n                    offsetX: ZERO_LENGTH,\r\n                    offsetY: ZERO_LENGTH,\r\n                    blur: ZERO_LENGTH,\r\n                    spread: ZERO_LENGTH,\r\n                    inset: false\r\n                };\r\n                var c = 0;\r\n                for (var i = 0; i < values.length; i++) {\r\n                    var token = values[i];\r\n                    if (isIdentWithValue(token, 'inset')) {\r\n                        shadow.inset = true;\r\n                    }\r\n                    else if (isLength(token)) {\r\n                        if (c === 0) {\r\n                            shadow.offsetX = token;\r\n                        }\r\n                        else if (c === 1) {\r\n                            shadow.offsetY = token;\r\n                        }\r\n                        else if (c === 2) {\r\n                            shadow.blur = token;\r\n                        }\r\n                        else {\r\n                            shadow.spread = token;\r\n                        }\r\n                        c++;\r\n                    }\r\n                    else {\r\n                        shadow.color = color$1.parse(context, token);\r\n                    }\r\n                }\r\n                return shadow;\r\n            });\r\n        }\r\n    };\n\n    var paintOrder = {\r\n        name: 'paint-order',\r\n        initialValue: 'normal',\r\n        prefix: false,\r\n        type: 1 /* LIST */,\r\n        parse: function (_context, tokens) {\r\n            var DEFAULT_VALUE = [0 /* FILL */, 1 /* STROKE */, 2 /* MARKERS */];\r\n            var layers = [];\r\n            tokens.filter(isIdentToken).forEach(function (token) {\r\n                switch (token.value) {\r\n                    case 'stroke':\r\n                        layers.push(1 /* STROKE */);\r\n                        break;\r\n                    case 'fill':\r\n                        layers.push(0 /* FILL */);\r\n                        break;\r\n                    case 'markers':\r\n                        layers.push(2 /* MARKERS */);\r\n                        break;\r\n                }\r\n            });\r\n            DEFAULT_VALUE.forEach(function (value) {\r\n                if (layers.indexOf(value) === -1) {\r\n                    layers.push(value);\r\n                }\r\n            });\r\n            return layers;\r\n        }\r\n    };\n\n    var webkitTextStrokeColor = {\r\n        name: \"-webkit-text-stroke-color\",\r\n        initialValue: 'currentcolor',\r\n        prefix: false,\r\n        type: 3 /* TYPE_VALUE */,\r\n        format: 'color'\r\n    };\n\n    var webkitTextStrokeWidth = {\r\n        name: \"-webkit-text-stroke-width\",\r\n        initialValue: '0',\r\n        type: 0 /* VALUE */,\r\n        prefix: false,\r\n        parse: function (_context, token) {\r\n            if (isDimensionToken(token)) {\r\n                return token.number;\r\n            }\r\n            return 0;\r\n        }\r\n    };\n\n    var CSSParsedDeclaration = /** @class */ (function () {\r\n        function CSSParsedDeclaration(context, declaration) {\r\n            var _a, _b;\r\n            this.animationDuration = parse(context, duration, declaration.animationDuration);\r\n            this.backgroundClip = parse(context, backgroundClip, declaration.backgroundClip);\r\n            this.backgroundColor = parse(context, backgroundColor, declaration.backgroundColor);\r\n            this.backgroundImage = parse(context, backgroundImage, declaration.backgroundImage);\r\n            this.backgroundOrigin = parse(context, backgroundOrigin, declaration.backgroundOrigin);\r\n            this.backgroundPosition = parse(context, backgroundPosition, declaration.backgroundPosition);\r\n            this.backgroundRepeat = parse(context, backgroundRepeat, declaration.backgroundRepeat);\r\n            this.backgroundSize = parse(context, backgroundSize, declaration.backgroundSize);\r\n            this.borderTopColor = parse(context, borderTopColor, declaration.borderTopColor);\r\n            this.borderRightColor = parse(context, borderRightColor, declaration.borderRightColor);\r\n            this.borderBottomColor = parse(context, borderBottomColor, declaration.borderBottomColor);\r\n            this.borderLeftColor = parse(context, borderLeftColor, declaration.borderLeftColor);\r\n            this.borderTopLeftRadius = parse(context, borderTopLeftRadius, declaration.borderTopLeftRadius);\r\n            this.borderTopRightRadius = parse(context, borderTopRightRadius, declaration.borderTopRightRadius);\r\n            this.borderBottomRightRadius = parse(context, borderBottomRightRadius, declaration.borderBottomRightRadius);\r\n            this.borderBottomLeftRadius = parse(context, borderBottomLeftRadius, declaration.borderBottomLeftRadius);\r\n            this.borderTopStyle = parse(context, borderTopStyle, declaration.borderTopStyle);\r\n            this.borderRightStyle = parse(context, borderRightStyle, declaration.borderRightStyle);\r\n            this.borderBottomStyle = parse(context, borderBottomStyle, declaration.borderBottomStyle);\r\n            this.borderLeftStyle = parse(context, borderLeftStyle, declaration.borderLeftStyle);\r\n            this.borderTopWidth = parse(context, borderTopWidth, declaration.borderTopWidth);\r\n            this.borderRightWidth = parse(context, borderRightWidth, declaration.borderRightWidth);\r\n            this.borderBottomWidth = parse(context, borderBottomWidth, declaration.borderBottomWidth);\r\n            this.borderLeftWidth = parse(context, borderLeftWidth, declaration.borderLeftWidth);\r\n            this.boxShadow = parse(context, boxShadow, declaration.boxShadow);\r\n            this.color = parse(context, color, declaration.color);\r\n            this.direction = parse(context, direction, declaration.direction);\r\n            this.display = parse(context, display, declaration.display);\r\n            this.float = parse(context, float, declaration.cssFloat);\r\n            this.fontFamily = parse(context, fontFamily, declaration.fontFamily);\r\n            this.fontSize = parse(context, fontSize, declaration.fontSize);\r\n            this.fontStyle = parse(context, fontStyle, declaration.fontStyle);\r\n            this.fontVariant = parse(context, fontVariant, declaration.fontVariant);\r\n            this.fontWeight = parse(context, fontWeight, declaration.fontWeight);\r\n            this.letterSpacing = parse(context, letterSpacing, declaration.letterSpacing);\r\n            this.lineBreak = parse(context, lineBreak, declaration.lineBreak);\r\n            this.lineHeight = parse(context, lineHeight, declaration.lineHeight);\r\n            this.listStyleImage = parse(context, listStyleImage, declaration.listStyleImage);\r\n            this.listStylePosition = parse(context, listStylePosition, declaration.listStylePosition);\r\n            this.listStyleType = parse(context, listStyleType, declaration.listStyleType);\r\n            this.marginTop = parse(context, marginTop, declaration.marginTop);\r\n            this.marginRight = parse(context, marginRight, declaration.marginRight);\r\n            this.marginBottom = parse(context, marginBottom, declaration.marginBottom);\r\n            this.marginLeft = parse(context, marginLeft, declaration.marginLeft);\r\n            this.opacity = parse(context, opacity, declaration.opacity);\r\n            var overflowTuple = parse(context, overflow, declaration.overflow);\r\n            this.overflowX = overflowTuple[0];\r\n            this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0];\r\n            this.overflowWrap = parse(context, overflowWrap, declaration.overflowWrap);\r\n            this.paddingTop = parse(context, paddingTop, declaration.paddingTop);\r\n            this.paddingRight = parse(context, paddingRight, declaration.paddingRight);\r\n            this.paddingBottom = parse(context, paddingBottom, declaration.paddingBottom);\r\n            this.paddingLeft = parse(context, paddingLeft, declaration.paddingLeft);\r\n            this.paintOrder = parse(context, paintOrder, declaration.paintOrder);\r\n            this.position = parse(context, position, declaration.position);\r\n            this.textAlign = parse(context, textAlign, declaration.textAlign);\r\n            this.textDecorationColor = parse(context, textDecorationColor, (_a = declaration.textDecorationColor) !== null && _a !== void 0 ? _a : declaration.color);\r\n            this.textDecorationLine = parse(context, textDecorationLine, (_b = declaration.textDecorationLine) !== null && _b !== void 0 ? _b : declaration.textDecoration);\r\n            this.textShadow = parse(context, textShadow, declaration.textShadow);\r\n            this.textTransform = parse(context, textTransform, declaration.textTransform);\r\n            this.transform = parse(context, transform$1, declaration.transform);\r\n            this.transformOrigin = parse(context, transformOrigin, declaration.transformOrigin);\r\n            this.visibility = parse(context, visibility, declaration.visibility);\r\n            this.webkitTextStrokeColor = parse(context, webkitTextStrokeColor, declaration.webkitTextStrokeColor);\r\n            this.webkitTextStrokeWidth = parse(context, webkitTextStrokeWidth, declaration.webkitTextStrokeWidth);\r\n            this.wordBreak = parse(context, wordBreak, declaration.wordBreak);\r\n            this.zIndex = parse(context, zIndex, declaration.zIndex);\r\n        }\r\n        CSSParsedDeclaration.prototype.isVisible = function () {\r\n            return this.display > 0 && this.opacity > 0 && this.visibility === 0 /* VISIBLE */;\r\n        };\r\n        CSSParsedDeclaration.prototype.isTransparent = function () {\r\n            return isTransparent(this.backgroundColor);\r\n        };\r\n        CSSParsedDeclaration.prototype.isTransformed = function () {\r\n            return this.transform !== null;\r\n        };\r\n        CSSParsedDeclaration.prototype.isPositioned = function () {\r\n            return this.position !== 0 /* STATIC */;\r\n        };\r\n        CSSParsedDeclaration.prototype.isPositionedWithZIndex = function () {\r\n            return this.isPositioned() && !this.zIndex.auto;\r\n        };\r\n        CSSParsedDeclaration.prototype.isFloating = function () {\r\n            return this.float !== 0 /* NONE */;\r\n        };\r\n        CSSParsedDeclaration.prototype.isInlineLevel = function () {\r\n            return (contains(this.display, 4 /* INLINE */) ||\r\n                contains(this.display, 33554432 /* INLINE_BLOCK */) ||\r\n                contains(this.display, 268435456 /* INLINE_FLEX */) ||\r\n                contains(this.display, 536870912 /* INLINE_GRID */) ||\r\n                contains(this.display, 67108864 /* INLINE_LIST_ITEM */) ||\r\n                contains(this.display, 134217728 /* INLINE_TABLE */));\r\n        };\r\n        return CSSParsedDeclaration;\r\n    }());\r\n    var CSSParsedPseudoDeclaration = /** @class */ (function () {\r\n        function CSSParsedPseudoDeclaration(context, declaration) {\r\n            this.content = parse(context, content, declaration.content);\r\n            this.quotes = parse(context, quotes, declaration.quotes);\r\n        }\r\n        return CSSParsedPseudoDeclaration;\r\n    }());\r\n    var CSSParsedCounterDeclaration = /** @class */ (function () {\r\n        function CSSParsedCounterDeclaration(context, declaration) {\r\n            this.counterIncrement = parse(context, counterIncrement, declaration.counterIncrement);\r\n            this.counterReset = parse(context, counterReset, declaration.counterReset);\r\n        }\r\n        return CSSParsedCounterDeclaration;\r\n    }());\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    var parse = function (context, descriptor, style) {\r\n        var tokenizer = new Tokenizer();\r\n        var value = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue;\r\n        tokenizer.write(value);\r\n        var parser = new Parser(tokenizer.read());\r\n        switch (descriptor.type) {\r\n            case 2 /* IDENT_VALUE */:\r\n                var token = parser.parseComponentValue();\r\n                return descriptor.parse(context, isIdentToken(token) ? token.value : descriptor.initialValue);\r\n            case 0 /* VALUE */:\r\n                return descriptor.parse(context, parser.parseComponentValue());\r\n            case 1 /* LIST */:\r\n                return descriptor.parse(context, parser.parseComponentValues());\r\n            case 4 /* TOKEN_VALUE */:\r\n                return parser.parseComponentValue();\r\n            case 3 /* TYPE_VALUE */:\r\n                switch (descriptor.format) {\r\n                    case 'angle':\r\n                        return angle.parse(context, parser.parseComponentValue());\r\n                    case 'color':\r\n                        return color$1.parse(context, parser.parseComponentValue());\r\n                    case 'image':\r\n                        return image.parse(context, parser.parseComponentValue());\r\n                    case 'length':\r\n                        var length_1 = parser.parseComponentValue();\r\n                        return isLength(length_1) ? length_1 : ZERO_LENGTH;\r\n                    case 'length-percentage':\r\n                        var value_1 = parser.parseComponentValue();\r\n                        return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH;\r\n                    case 'time':\r\n                        return time.parse(context, parser.parseComponentValue());\r\n                }\r\n                break;\r\n        }\r\n    };\n\n    var elementDebuggerAttribute = 'data-html2canvas-debug';\r\n    var getElementDebugType = function (element) {\r\n        var attribute = element.getAttribute(elementDebuggerAttribute);\r\n        switch (attribute) {\r\n            case 'all':\r\n                return 1 /* ALL */;\r\n            case 'clone':\r\n                return 2 /* CLONE */;\r\n            case 'parse':\r\n                return 3 /* PARSE */;\r\n            case 'render':\r\n                return 4 /* RENDER */;\r\n            default:\r\n                return 0 /* NONE */;\r\n        }\r\n    };\r\n    var isDebugging = function (element, type) {\r\n        var elementType = getElementDebugType(element);\r\n        return elementType === 1 /* ALL */ || type === elementType;\r\n    };\n\n    var ElementContainer = /** @class */ (function () {\r\n        function ElementContainer(context, element) {\r\n            this.context = context;\r\n            this.textNodes = [];\r\n            this.elements = [];\r\n            this.flags = 0;\r\n            if (isDebugging(element, 3 /* PARSE */)) {\r\n                debugger;\r\n            }\r\n            this.styles = new CSSParsedDeclaration(context, window.getComputedStyle(element, null));\r\n            if (isHTMLElementNode(element)) {\r\n                if (this.styles.animationDuration.some(function (duration) { return duration > 0; })) {\r\n                    element.style.animationDuration = '0s';\r\n                }\r\n                if (this.styles.transform !== null) {\r\n                    // getBoundingClientRect takes transforms into account\r\n                    element.style.transform = 'none';\r\n                }\r\n            }\r\n            this.bounds = parseBounds(this.context, element);\r\n            if (isDebugging(element, 4 /* RENDER */)) {\r\n                this.flags |= 16 /* DEBUG_RENDER */;\r\n            }\r\n        }\r\n        return ElementContainer;\r\n    }());\n\n    /*\n     * text-segmentation 1.0.3 <https://github.com/niklasvh/text-segmentation>\n     * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n     * Released under MIT License\n     */\n    var base64 = 'AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=';\n\n    /*\n     * utrie 1.0.2 <https://github.com/niklasvh/utrie>\n     * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n     * Released under MIT License\n     */\n    var chars$1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    // Use a lookup table to find the index.\n    var lookup$1 = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n    for (var i$1 = 0; i$1 < chars$1.length; i$1++) {\n        lookup$1[chars$1.charCodeAt(i$1)] = i$1;\n    }\n    var decode = function (base64) {\n        var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n        if (base64[base64.length - 1] === '=') {\n            bufferLength--;\n            if (base64[base64.length - 2] === '=') {\n                bufferLength--;\n            }\n        }\n        var buffer = typeof ArrayBuffer !== 'undefined' &&\n            typeof Uint8Array !== 'undefined' &&\n            typeof Uint8Array.prototype.slice !== 'undefined'\n            ? new ArrayBuffer(bufferLength)\n            : new Array(bufferLength);\n        var bytes = Array.isArray(buffer) ? buffer : new Uint8Array(buffer);\n        for (i = 0; i < len; i += 4) {\n            encoded1 = lookup$1[base64.charCodeAt(i)];\n            encoded2 = lookup$1[base64.charCodeAt(i + 1)];\n            encoded3 = lookup$1[base64.charCodeAt(i + 2)];\n            encoded4 = lookup$1[base64.charCodeAt(i + 3)];\n            bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n            bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n            bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n        }\n        return buffer;\n    };\n    var polyUint16Array = function (buffer) {\n        var length = buffer.length;\n        var bytes = [];\n        for (var i = 0; i < length; i += 2) {\n            bytes.push((buffer[i + 1] << 8) | buffer[i]);\n        }\n        return bytes;\n    };\n    var polyUint32Array = function (buffer) {\n        var length = buffer.length;\n        var bytes = [];\n        for (var i = 0; i < length; i += 4) {\n            bytes.push((buffer[i + 3] << 24) | (buffer[i + 2] << 16) | (buffer[i + 1] << 8) | buffer[i]);\n        }\n        return bytes;\n    };\n\n    /** Shift size for getting the index-2 table offset. */\n    var UTRIE2_SHIFT_2 = 5;\n    /** Shift size for getting the index-1 table offset. */\n    var UTRIE2_SHIFT_1 = 6 + 5;\n    /**\n     * Shift size for shifting left the index array values.\n     * Increases possible data size with 16-bit index values at the cost\n     * of compactability.\n     * This requires data blocks to be aligned by UTRIE2_DATA_GRANULARITY.\n     */\n    var UTRIE2_INDEX_SHIFT = 2;\n    /**\n     * Difference between the two shift sizes,\n     * for getting an index-1 offset from an index-2 offset. 6=11-5\n     */\n    var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;\n    /**\n     * The part of the index-2 table for U+D800..U+DBFF stores values for\n     * lead surrogate code _units_ not code _points_.\n     * Values for lead surrogate code _points_ are indexed with this portion of the table.\n     * Length=32=0x20=0x400>>UTRIE2_SHIFT_2. (There are 1024=0x400 lead surrogates.)\n     */\n    var UTRIE2_LSCP_INDEX_2_OFFSET = 0x10000 >> UTRIE2_SHIFT_2;\n    /** Number of entries in a data block. 32=0x20 */\n    var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;\n    /** Mask for getting the lower bits for the in-data-block offset. */\n    var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;\n    var UTRIE2_LSCP_INDEX_2_LENGTH = 0x400 >> UTRIE2_SHIFT_2;\n    /** Count the lengths of both BMP pieces. 2080=0x820 */\n    var UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH;\n    /**\n     * The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n     * Length 32=0x20 for lead bytes C0..DF, regardless of UTRIE2_SHIFT_2.\n     */\n    var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;\n    var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; /* U+0800 is the first code point after 2-byte UTF-8 */\n    /**\n     * The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n     * Variable length, for code points up to highStart, where the last single-value range starts.\n     * Maximum length 512=0x200=0x100000>>UTRIE2_SHIFT_1.\n     * (For 0x100000 supplementary code points U+10000..U+10ffff.)\n     *\n     * The part of the index-2 table for supplementary code points starts\n     * after this index-1 table.\n     *\n     * Both the index-1 table and the following part of the index-2 table\n     * are omitted completely if there is only BMP data.\n     */\n    var UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;\n    /**\n     * Number of index-1 entries for the BMP. 32=0x20\n     * This part of the index-1 table is omitted from the serialized form.\n     */\n    var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> UTRIE2_SHIFT_1;\n    /** Number of entries in an index-2 block. 64=0x40 */\n    var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;\n    /** Mask for getting the lower bits for the in-index-2-block offset. */\n    var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;\n    var slice16 = function (view, start, end) {\n        if (view.slice) {\n            return view.slice(start, end);\n        }\n        return new Uint16Array(Array.prototype.slice.call(view, start, end));\n    };\n    var slice32 = function (view, start, end) {\n        if (view.slice) {\n            return view.slice(start, end);\n        }\n        return new Uint32Array(Array.prototype.slice.call(view, start, end));\n    };\n    var createTrieFromBase64 = function (base64, _byteLength) {\n        var buffer = decode(base64);\n        var view32 = Array.isArray(buffer) ? polyUint32Array(buffer) : new Uint32Array(buffer);\n        var view16 = Array.isArray(buffer) ? polyUint16Array(buffer) : new Uint16Array(buffer);\n        var headerLength = 24;\n        var index = slice16(view16, headerLength / 2, view32[4] / 2);\n        var data = view32[5] === 2\n            ? slice16(view16, (headerLength + view32[4]) / 2)\n            : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));\n        return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);\n    };\n    var Trie = /** @class */ (function () {\n        function Trie(initialValue, errorValue, highStart, highValueIndex, index, data) {\n            this.initialValue = initialValue;\n            this.errorValue = errorValue;\n            this.highStart = highStart;\n            this.highValueIndex = highValueIndex;\n            this.index = index;\n            this.data = data;\n        }\n        /**\n         * Get the value for a code point as stored in the Trie.\n         *\n         * @param codePoint the code point\n         * @return the value\n         */\n        Trie.prototype.get = function (codePoint) {\n            var ix;\n            if (codePoint >= 0) {\n                if (codePoint < 0x0d800 || (codePoint > 0x0dbff && codePoint <= 0x0ffff)) {\n                    // Ordinary BMP code point, excluding leading surrogates.\n                    // BMP uses a single level lookup.  BMP index starts at offset 0 in the Trie2 index.\n                    // 16 bit data is stored in the index array itself.\n                    ix = this.index[codePoint >> UTRIE2_SHIFT_2];\n                    ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n                    return this.data[ix];\n                }\n                if (codePoint <= 0xffff) {\n                    // Lead Surrogate Code Point.  A Separate index section is stored for\n                    // lead surrogate code units and code points.\n                    //   The main index has the code unit data.\n                    //   For this function, we need the code point data.\n                    // Note: this expression could be refactored for slightly improved efficiency, but\n                    //       surrogate code points will be so rare in practice that it's not worth it.\n                    ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> UTRIE2_SHIFT_2)];\n                    ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n                    return this.data[ix];\n                }\n                if (codePoint < this.highStart) {\n                    // Supplemental code point, use two-level lookup.\n                    ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1);\n                    ix = this.index[ix];\n                    ix += (codePoint >> UTRIE2_SHIFT_2) & UTRIE2_INDEX_2_MASK;\n                    ix = this.index[ix];\n                    ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);\n                    return this.data[ix];\n                }\n                if (codePoint <= 0x10ffff) {\n                    return this.data[this.highValueIndex];\n                }\n            }\n            // Fall through.  The code point is outside of the legal range of 0..0x10ffff.\n            return this.errorValue;\n        };\n        return Trie;\n    }());\n\n    /*\n     * base64-arraybuffer 1.0.2 <https://github.com/niklasvh/base64-arraybuffer>\n     * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n     * Released under MIT License\n     */\n    var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n    // Use a lookup table to find the index.\n    var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\n    for (var i = 0; i < chars.length; i++) {\n        lookup[chars.charCodeAt(i)] = i;\n    }\n\n    var Prepend = 1;\n    var CR = 2;\n    var LF = 3;\n    var Control = 4;\n    var Extend = 5;\n    var SpacingMark = 7;\n    var L = 8;\n    var V = 9;\n    var T = 10;\n    var LV = 11;\n    var LVT = 12;\n    var ZWJ = 13;\n    var Extended_Pictographic = 14;\n    var RI = 15;\n    var toCodePoints = function (str) {\n        var codePoints = [];\n        var i = 0;\n        var length = str.length;\n        while (i < length) {\n            var value = str.charCodeAt(i++);\n            if (value >= 0xd800 && value <= 0xdbff && i < length) {\n                var extra = str.charCodeAt(i++);\n                if ((extra & 0xfc00) === 0xdc00) {\n                    codePoints.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n                }\n                else {\n                    codePoints.push(value);\n                    i--;\n                }\n            }\n            else {\n                codePoints.push(value);\n            }\n        }\n        return codePoints;\n    };\n    var fromCodePoint = function () {\n        var codePoints = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            codePoints[_i] = arguments[_i];\n        }\n        if (String.fromCodePoint) {\n            return String.fromCodePoint.apply(String, codePoints);\n        }\n        var length = codePoints.length;\n        if (!length) {\n            return '';\n        }\n        var codeUnits = [];\n        var index = -1;\n        var result = '';\n        while (++index < length) {\n            var codePoint = codePoints[index];\n            if (codePoint <= 0xffff) {\n                codeUnits.push(codePoint);\n            }\n            else {\n                codePoint -= 0x10000;\n                codeUnits.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);\n            }\n            if (index + 1 === length || codeUnits.length > 0x4000) {\n                result += String.fromCharCode.apply(String, codeUnits);\n                codeUnits.length = 0;\n            }\n        }\n        return result;\n    };\n    var UnicodeTrie = createTrieFromBase64(base64);\n    var BREAK_NOT_ALLOWED = '×';\n    var BREAK_ALLOWED = '÷';\n    var codePointToClass = function (codePoint) { return UnicodeTrie.get(codePoint); };\n    var _graphemeBreakAtIndex = function (_codePoints, classTypes, index) {\n        var prevIndex = index - 2;\n        var prev = classTypes[prevIndex];\n        var current = classTypes[index - 1];\n        var next = classTypes[index];\n        // GB3 Do not break between a CR and LF\n        if (current === CR && next === LF) {\n            return BREAK_NOT_ALLOWED;\n        }\n        // GB4 Otherwise, break before and after controls.\n        if (current === CR || current === LF || current === Control) {\n            return BREAK_ALLOWED;\n        }\n        // GB5\n        if (next === CR || next === LF || next === Control) {\n            return BREAK_ALLOWED;\n        }\n        // Do not break Hangul syllable sequences.\n        // GB6\n        if (current === L && [L, V, LV, LVT].indexOf(next) !== -1) {\n            return BREAK_NOT_ALLOWED;\n        }\n        // GB7\n        if ((current === LV || current === V) && (next === V || next === T)) {\n            return BREAK_NOT_ALLOWED;\n        }\n        // GB8\n        if ((current === LVT || current === T) && next === T) {\n            return BREAK_NOT_ALLOWED;\n        }\n        // GB9 Do not break before extending characters or ZWJ.\n        if (next === ZWJ || next === Extend) {\n            return BREAK_NOT_ALLOWED;\n        }\n        // Do not break before SpacingMarks, or after Prepend characters.\n        // GB9a\n        if (next === SpacingMark) {\n            return BREAK_NOT_ALLOWED;\n        }\n        // GB9a\n        if (current === Prepend) {\n            return BREAK_NOT_ALLOWED;\n        }\n        // GB11 Do not break within emoji modifier sequences or emoji zwj sequences.\n        if (current === ZWJ && next === Extended_Pictographic) {\n            while (prev === Extend) {\n                prev = classTypes[--prevIndex];\n            }\n            if (prev === Extended_Pictographic) {\n                return BREAK_NOT_ALLOWED;\n            }\n        }\n        // GB12 Do not break within emoji flag sequences.\n        // That is, do not break between regional indicator (RI) symbols\n        // if there is an odd number of RI characters before the break point.\n        if (current === RI && next === RI) {\n            var countRI = 0;\n            while (prev === RI) {\n                countRI++;\n                prev = classTypes[--prevIndex];\n            }\n            if (countRI % 2 === 0) {\n                return BREAK_NOT_ALLOWED;\n            }\n        }\n        return BREAK_ALLOWED;\n    };\n    var GraphemeBreaker = function (str) {\n        var codePoints = toCodePoints(str);\n        var length = codePoints.length;\n        var index = 0;\n        var lastEnd = 0;\n        var classTypes = codePoints.map(codePointToClass);\n        return {\n            next: function () {\n                if (index >= length) {\n                    return { done: true, value: null };\n                }\n                var graphemeBreak = BREAK_NOT_ALLOWED;\n                while (index < length &&\n                    (graphemeBreak = _graphemeBreakAtIndex(codePoints, classTypes, ++index)) === BREAK_NOT_ALLOWED) { }\n                if (graphemeBreak !== BREAK_NOT_ALLOWED || index === length) {\n                    var value = fromCodePoint.apply(null, codePoints.slice(lastEnd, index));\n                    lastEnd = index;\n                    return { value: value, done: false };\n                }\n                return { done: true, value: null };\n            },\n        };\n    };\n    var splitGraphemes = function (str) {\n        var breaker = GraphemeBreaker(str);\n        var graphemes = [];\n        var bk;\n        while (!(bk = breaker.next()).done) {\n            if (bk.value) {\n                graphemes.push(bk.value.slice());\n            }\n        }\n        return graphemes;\n    };\n\n    var testRangeBounds = function (document) {\r\n        var TEST_HEIGHT = 123;\r\n        if (document.createRange) {\r\n            var range = document.createRange();\r\n            if (range.getBoundingClientRect) {\r\n                var testElement = document.createElement('boundtest');\r\n                testElement.style.height = TEST_HEIGHT + \"px\";\r\n                testElement.style.display = 'block';\r\n                document.body.appendChild(testElement);\r\n                range.selectNode(testElement);\r\n                var rangeBounds = range.getBoundingClientRect();\r\n                var rangeHeight = Math.round(rangeBounds.height);\r\n                document.body.removeChild(testElement);\r\n                if (rangeHeight === TEST_HEIGHT) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    var testIOSLineBreak = function (document) {\r\n        var testElement = document.createElement('boundtest');\r\n        testElement.style.width = '50px';\r\n        testElement.style.display = 'block';\r\n        testElement.style.fontSize = '12px';\r\n        testElement.style.letterSpacing = '0px';\r\n        testElement.style.wordSpacing = '0px';\r\n        document.body.appendChild(testElement);\r\n        var range = document.createRange();\r\n        testElement.innerHTML = typeof ''.repeat === 'function' ? '&#128104;'.repeat(10) : '';\r\n        var node = testElement.firstChild;\r\n        var textList = toCodePoints$1(node.data).map(function (i) { return fromCodePoint$1(i); });\r\n        var offset = 0;\r\n        var prev = {};\r\n        // ios 13 does not handle range getBoundingClientRect line changes correctly #2177\r\n        var supports = textList.every(function (text, i) {\r\n            range.setStart(node, offset);\r\n            range.setEnd(node, offset + text.length);\r\n            var rect = range.getBoundingClientRect();\r\n            offset += text.length;\r\n            var boundAhead = rect.x > prev.x || rect.y > prev.y;\r\n            prev = rect;\r\n            if (i === 0) {\r\n                return true;\r\n            }\r\n            return boundAhead;\r\n        });\r\n        document.body.removeChild(testElement);\r\n        return supports;\r\n    };\r\n    var testCORS = function () { return typeof new Image().crossOrigin !== 'undefined'; };\r\n    var testResponseType = function () { return typeof new XMLHttpRequest().responseType === 'string'; };\r\n    var testSVG = function (document) {\r\n        var img = new Image();\r\n        var canvas = document.createElement('canvas');\r\n        var ctx = canvas.getContext('2d');\r\n        if (!ctx) {\r\n            return false;\r\n        }\r\n        img.src = \"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><\/svg>\";\r\n        try {\r\n            ctx.drawImage(img, 0, 0);\r\n            canvas.toDataURL();\r\n        }\r\n        catch (e) {\r\n            return false;\r\n        }\r\n        return true;\r\n    };\r\n    var isGreenPixel = function (data) {\r\n        return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255;\r\n    };\r\n    var testForeignObject = function (document) {\r\n        var canvas = document.createElement('canvas');\r\n        var size = 100;\r\n        canvas.width = size;\r\n        canvas.height = size;\r\n        var ctx = canvas.getContext('2d');\r\n        if (!ctx) {\r\n            return Promise.reject(false);\r\n        }\r\n        ctx.fillStyle = 'rgb(0, 255, 0)';\r\n        ctx.fillRect(0, 0, size, size);\r\n        var img = new Image();\r\n        var greenImageSrc = canvas.toDataURL();\r\n        img.src = greenImageSrc;\r\n        var svg = createForeignObjectSVG(size, size, 0, 0, img);\r\n        ctx.fillStyle = 'red';\r\n        ctx.fillRect(0, 0, size, size);\r\n        return loadSerializedSVG$1(svg)\r\n            .then(function (img) {\r\n            ctx.drawImage(img, 0, 0);\r\n            var data = ctx.getImageData(0, 0, size, size).data;\r\n            ctx.fillStyle = 'red';\r\n            ctx.fillRect(0, 0, size, size);\r\n            var node = document.createElement('div');\r\n            node.style.backgroundImage = \"url(\" + greenImageSrc + \")\";\r\n            node.style.height = size + \"px\";\r\n            // Firefox 55 does not render inline <img /> tags\r\n            return isGreenPixel(data)\r\n                ? loadSerializedSVG$1(createForeignObjectSVG(size, size, 0, 0, node))\r\n                : Promise.reject(false);\r\n        })\r\n            .then(function (img) {\r\n            ctx.drawImage(img, 0, 0);\r\n            // Edge does not render background-images\r\n            return isGreenPixel(ctx.getImageData(0, 0, size, size).data);\r\n        })\r\n            .catch(function () { return false; });\r\n    };\r\n    var createForeignObjectSVG = function (width, height, x, y, node) {\r\n        var xmlns = 'http://www.w3.org/2000/svg';\r\n        var svg = document.createElementNS(xmlns, 'svg');\r\n        var foreignObject = document.createElementNS(xmlns, 'foreignObject');\r\n        svg.setAttributeNS(null, 'width', width.toString());\r\n        svg.setAttributeNS(null, 'height', height.toString());\r\n        foreignObject.setAttributeNS(null, 'width', '100%');\r\n        foreignObject.setAttributeNS(null, 'height', '100%');\r\n        foreignObject.setAttributeNS(null, 'x', x.toString());\r\n        foreignObject.setAttributeNS(null, 'y', y.toString());\r\n        foreignObject.setAttributeNS(null, 'externalResourcesRequired', 'true');\r\n        svg.appendChild(foreignObject);\r\n        foreignObject.appendChild(node);\r\n        return svg;\r\n    };\r\n    var loadSerializedSVG$1 = function (svg) {\r\n        return new Promise(function (resolve, reject) {\r\n            var img = new Image();\r\n            img.onload = function () { return resolve(img); };\r\n            img.onerror = reject;\r\n            img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\r\n        });\r\n    };\r\n    var FEATURES = {\r\n        get SUPPORT_RANGE_BOUNDS() {\r\n            var value = testRangeBounds(document);\r\n            Object.defineProperty(FEATURES, 'SUPPORT_RANGE_BOUNDS', { value: value });\r\n            return value;\r\n        },\r\n        get SUPPORT_WORD_BREAKING() {\r\n            var value = FEATURES.SUPPORT_RANGE_BOUNDS && testIOSLineBreak(document);\r\n            Object.defineProperty(FEATURES, 'SUPPORT_WORD_BREAKING', { value: value });\r\n            return value;\r\n        },\r\n        get SUPPORT_SVG_DRAWING() {\r\n            var value = testSVG(document);\r\n            Object.defineProperty(FEATURES, 'SUPPORT_SVG_DRAWING', { value: value });\r\n            return value;\r\n        },\r\n        get SUPPORT_FOREIGNOBJECT_DRAWING() {\r\n            var value = typeof Array.from === 'function' && typeof window.fetch === 'function'\r\n                ? testForeignObject(document)\r\n                : Promise.resolve(false);\r\n            Object.defineProperty(FEATURES, 'SUPPORT_FOREIGNOBJECT_DRAWING', { value: value });\r\n            return value;\r\n        },\r\n        get SUPPORT_CORS_IMAGES() {\r\n            var value = testCORS();\r\n            Object.defineProperty(FEATURES, 'SUPPORT_CORS_IMAGES', { value: value });\r\n            return value;\r\n        },\r\n        get SUPPORT_RESPONSE_TYPE() {\r\n            var value = testResponseType();\r\n            Object.defineProperty(FEATURES, 'SUPPORT_RESPONSE_TYPE', { value: value });\r\n            return value;\r\n        },\r\n        get SUPPORT_CORS_XHR() {\r\n            var value = 'withCredentials' in new XMLHttpRequest();\r\n            Object.defineProperty(FEATURES, 'SUPPORT_CORS_XHR', { value: value });\r\n            return value;\r\n        },\r\n        get SUPPORT_NATIVE_TEXT_SEGMENTATION() {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            var value = !!(typeof Intl !== 'undefined' && Intl.Segmenter);\r\n            Object.defineProperty(FEATURES, 'SUPPORT_NATIVE_TEXT_SEGMENTATION', { value: value });\r\n            return value;\r\n        }\r\n    };\n\n    var TextBounds = /** @class */ (function () {\r\n        function TextBounds(text, bounds) {\r\n            this.text = text;\r\n            this.bounds = bounds;\r\n        }\r\n        return TextBounds;\r\n    }());\r\n    var parseTextBounds = function (context, value, styles, node) {\r\n        var textList = breakText(value, styles);\r\n        var textBounds = [];\r\n        var offset = 0;\r\n        textList.forEach(function (text) {\r\n            if (styles.textDecorationLine.length || text.trim().length > 0) {\r\n                if (FEATURES.SUPPORT_RANGE_BOUNDS) {\r\n                    var clientRects = createRange(node, offset, text.length).getClientRects();\r\n                    if (clientRects.length > 1) {\r\n                        var subSegments = segmentGraphemes(text);\r\n                        var subOffset_1 = 0;\r\n                        subSegments.forEach(function (subSegment) {\r\n                            textBounds.push(new TextBounds(subSegment, Bounds.fromDOMRectList(context, createRange(node, subOffset_1 + offset, subSegment.length).getClientRects())));\r\n                            subOffset_1 += subSegment.length;\r\n                        });\r\n                    }\r\n                    else {\r\n                        textBounds.push(new TextBounds(text, Bounds.fromDOMRectList(context, clientRects)));\r\n                    }\r\n                }\r\n                else {\r\n                    var replacementNode = node.splitText(text.length);\r\n                    textBounds.push(new TextBounds(text, getWrapperBounds(context, node)));\r\n                    node = replacementNode;\r\n                }\r\n            }\r\n            else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {\r\n                node = node.splitText(text.length);\r\n            }\r\n            offset += text.length;\r\n        });\r\n        return textBounds;\r\n    };\r\n    var getWrapperBounds = function (context, node) {\r\n        var ownerDocument = node.ownerDocument;\r\n        if (ownerDocument) {\r\n            var wrapper = ownerDocument.createElement('html2canvaswrapper');\r\n            wrapper.appendChild(node.cloneNode(true));\r\n            var parentNode = node.parentNode;\r\n            if (parentNode) {\r\n                parentNode.replaceChild(wrapper, node);\r\n                var bounds = parseBounds(context, wrapper);\r\n                if (wrapper.firstChild) {\r\n                    parentNode.replaceChild(wrapper.firstChild, wrapper);\r\n                }\r\n                return bounds;\r\n            }\r\n        }\r\n        return Bounds.EMPTY;\r\n    };\r\n    var createRange = function (node, offset, length) {\r\n        var ownerDocument = node.ownerDocument;\r\n        if (!ownerDocument) {\r\n            throw new Error('Node has no owner document');\r\n        }\r\n        var range = ownerDocument.createRange();\r\n        range.setStart(node, offset);\r\n        range.setEnd(node, offset + length);\r\n        return range;\r\n    };\r\n    var segmentGraphemes = function (value) {\r\n        if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            var segmenter = new Intl.Segmenter(void 0, { granularity: 'grapheme' });\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            return Array.from(segmenter.segment(value)).map(function (segment) { return segment.segment; });\r\n        }\r\n        return splitGraphemes(value);\r\n    };\r\n    var segmentWords = function (value, styles) {\r\n        if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            var segmenter = new Intl.Segmenter(void 0, {\r\n                granularity: 'word'\r\n            });\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            return Array.from(segmenter.segment(value)).map(function (segment) { return segment.segment; });\r\n        }\r\n        return breakWords(value, styles);\r\n    };\r\n    var breakText = function (value, styles) {\r\n        return styles.letterSpacing !== 0 ? segmentGraphemes(value) : segmentWords(value, styles);\r\n    };\r\n    // https://drafts.csswg.org/css-text/#word-separator\r\n    var wordSeparators = [0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091];\r\n    var breakWords = function (str, styles) {\r\n        var breaker = LineBreaker(str, {\r\n            lineBreak: styles.lineBreak,\r\n            wordBreak: styles.overflowWrap === \"break-word\" /* BREAK_WORD */ ? 'break-word' : styles.wordBreak\r\n        });\r\n        var words = [];\r\n        var bk;\r\n        var _loop_1 = function () {\r\n            if (bk.value) {\r\n                var value = bk.value.slice();\r\n                var codePoints = toCodePoints$1(value);\r\n                var word_1 = '';\r\n                codePoints.forEach(function (codePoint) {\r\n                    if (wordSeparators.indexOf(codePoint) === -1) {\r\n                        word_1 += fromCodePoint$1(codePoint);\r\n                    }\r\n                    else {\r\n                        if (word_1.length) {\r\n                            words.push(word_1);\r\n                        }\r\n                        words.push(fromCodePoint$1(codePoint));\r\n                        word_1 = '';\r\n                    }\r\n                });\r\n                if (word_1.length) {\r\n                    words.push(word_1);\r\n                }\r\n            }\r\n        };\r\n        while (!(bk = breaker.next()).done) {\r\n            _loop_1();\r\n        }\r\n        return words;\r\n    };\n\n    var TextContainer = /** @class */ (function () {\r\n        function TextContainer(context, node, styles) {\r\n            this.text = transform(node.data, styles.textTransform);\r\n            this.textBounds = parseTextBounds(context, this.text, styles, node);\r\n        }\r\n        return TextContainer;\r\n    }());\r\n    var transform = function (text, transform) {\r\n        switch (transform) {\r\n            case 1 /* LOWERCASE */:\r\n                return text.toLowerCase();\r\n            case 3 /* CAPITALIZE */:\r\n                return text.replace(CAPITALIZE, capitalize);\r\n            case 2 /* UPPERCASE */:\r\n                return text.toUpperCase();\r\n            default:\r\n                return text;\r\n        }\r\n    };\r\n    var CAPITALIZE = /(^|\\s|:|-|\\(|\\))([a-z])/g;\r\n    var capitalize = function (m, p1, p2) {\r\n        if (m.length > 0) {\r\n            return p1 + p2.toUpperCase();\r\n        }\r\n        return m;\r\n    };\n\n    var ImageElementContainer = /** @class */ (function (_super) {\r\n        __extends(ImageElementContainer, _super);\r\n        function ImageElementContainer(context, img) {\r\n            var _this = _super.call(this, context, img) || this;\r\n            _this.src = img.currentSrc || img.src;\r\n            _this.intrinsicWidth = img.naturalWidth;\r\n            _this.intrinsicHeight = img.naturalHeight;\r\n            _this.context.cache.addImage(_this.src);\r\n            return _this;\r\n        }\r\n        return ImageElementContainer;\r\n    }(ElementContainer));\n\n    var CanvasElementContainer = /** @class */ (function (_super) {\r\n        __extends(CanvasElementContainer, _super);\r\n        function CanvasElementContainer(context, canvas) {\r\n            var _this = _super.call(this, context, canvas) || this;\r\n            _this.canvas = canvas;\r\n            _this.intrinsicWidth = canvas.width;\r\n            _this.intrinsicHeight = canvas.height;\r\n            return _this;\r\n        }\r\n        return CanvasElementContainer;\r\n    }(ElementContainer));\n\n    var SVGElementContainer = /** @class */ (function (_super) {\r\n        __extends(SVGElementContainer, _super);\r\n        function SVGElementContainer(context, img) {\r\n            var _this = _super.call(this, context, img) || this;\r\n            var s = new XMLSerializer();\r\n            var bounds = parseBounds(context, img);\r\n            img.setAttribute('width', bounds.width + \"px\");\r\n            img.setAttribute('height', bounds.height + \"px\");\r\n            _this.svg = \"data:image/svg+xml,\" + encodeURIComponent(s.serializeToString(img));\r\n            _this.intrinsicWidth = img.width.baseVal.value;\r\n            _this.intrinsicHeight = img.height.baseVal.value;\r\n            _this.context.cache.addImage(_this.svg);\r\n            return _this;\r\n        }\r\n        return SVGElementContainer;\r\n    }(ElementContainer));\n\n    var LIElementContainer = /** @class */ (function (_super) {\r\n        __extends(LIElementContainer, _super);\r\n        function LIElementContainer(context, element) {\r\n            var _this = _super.call(this, context, element) || this;\r\n            _this.value = element.value;\r\n            return _this;\r\n        }\r\n        return LIElementContainer;\r\n    }(ElementContainer));\n\n    var OLElementContainer = /** @class */ (function (_super) {\r\n        __extends(OLElementContainer, _super);\r\n        function OLElementContainer(context, element) {\r\n            var _this = _super.call(this, context, element) || this;\r\n            _this.start = element.start;\r\n            _this.reversed = typeof element.reversed === 'boolean' && element.reversed === true;\r\n            return _this;\r\n        }\r\n        return OLElementContainer;\r\n    }(ElementContainer));\n\n    var CHECKBOX_BORDER_RADIUS = [\r\n        {\r\n            type: 15 /* DIMENSION_TOKEN */,\r\n            flags: 0,\r\n            unit: 'px',\r\n            number: 3\r\n        }\r\n    ];\r\n    var RADIO_BORDER_RADIUS = [\r\n        {\r\n            type: 16 /* PERCENTAGE_TOKEN */,\r\n            flags: 0,\r\n            number: 50\r\n        }\r\n    ];\r\n    var reformatInputBounds = function (bounds) {\r\n        if (bounds.width > bounds.height) {\r\n            return new Bounds(bounds.left + (bounds.width - bounds.height) / 2, bounds.top, bounds.height, bounds.height);\r\n        }\r\n        else if (bounds.width < bounds.height) {\r\n            return new Bounds(bounds.left, bounds.top + (bounds.height - bounds.width) / 2, bounds.width, bounds.width);\r\n        }\r\n        return bounds;\r\n    };\r\n    var getInputValue = function (node) {\r\n        var value = node.type === PASSWORD ? new Array(node.value.length + 1).join('\\u2022') : node.value;\r\n        return value.length === 0 ? node.placeholder || '' : value;\r\n    };\r\n    var CHECKBOX = 'checkbox';\r\n    var RADIO = 'radio';\r\n    var PASSWORD = 'password';\r\n    var INPUT_COLOR = 0x2a2a2aff;\r\n    var InputElementContainer = /** @class */ (function (_super) {\r\n        __extends(InputElementContainer, _super);\r\n        function InputElementContainer(context, input) {\r\n            var _this = _super.call(this, context, input) || this;\r\n            _this.type = input.type.toLowerCase();\r\n            _this.checked = input.checked;\r\n            _this.value = getInputValue(input);\r\n            if (_this.type === CHECKBOX || _this.type === RADIO) {\r\n                _this.styles.backgroundColor = 0xdededeff;\r\n                _this.styles.borderTopColor =\r\n                    _this.styles.borderRightColor =\r\n                        _this.styles.borderBottomColor =\r\n                            _this.styles.borderLeftColor =\r\n                                0xa5a5a5ff;\r\n                _this.styles.borderTopWidth =\r\n                    _this.styles.borderRightWidth =\r\n                        _this.styles.borderBottomWidth =\r\n                            _this.styles.borderLeftWidth =\r\n                                1;\r\n                _this.styles.borderTopStyle =\r\n                    _this.styles.borderRightStyle =\r\n                        _this.styles.borderBottomStyle =\r\n                            _this.styles.borderLeftStyle =\r\n                                1 /* SOLID */;\r\n                _this.styles.backgroundClip = [0 /* BORDER_BOX */];\r\n                _this.styles.backgroundOrigin = [0 /* BORDER_BOX */];\r\n                _this.bounds = reformatInputBounds(_this.bounds);\r\n            }\r\n            switch (_this.type) {\r\n                case CHECKBOX:\r\n                    _this.styles.borderTopRightRadius =\r\n                        _this.styles.borderTopLeftRadius =\r\n                            _this.styles.borderBottomRightRadius =\r\n                                _this.styles.borderBottomLeftRadius =\r\n                                    CHECKBOX_BORDER_RADIUS;\r\n                    break;\r\n                case RADIO:\r\n                    _this.styles.borderTopRightRadius =\r\n                        _this.styles.borderTopLeftRadius =\r\n                            _this.styles.borderBottomRightRadius =\r\n                                _this.styles.borderBottomLeftRadius =\r\n                                    RADIO_BORDER_RADIUS;\r\n                    break;\r\n            }\r\n            return _this;\r\n        }\r\n        return InputElementContainer;\r\n    }(ElementContainer));\n\n    var SelectElementContainer = /** @class */ (function (_super) {\r\n        __extends(SelectElementContainer, _super);\r\n        function SelectElementContainer(context, element) {\r\n            var _this = _super.call(this, context, element) || this;\r\n            var option = element.options[element.selectedIndex || 0];\r\n            _this.value = option ? option.text || '' : '';\r\n            return _this;\r\n        }\r\n        return SelectElementContainer;\r\n    }(ElementContainer));\n\n    var TextareaElementContainer = /** @class */ (function (_super) {\r\n        __extends(TextareaElementContainer, _super);\r\n        function TextareaElementContainer(context, element) {\r\n            var _this = _super.call(this, context, element) || this;\r\n            _this.value = element.value;\r\n            return _this;\r\n        }\r\n        return TextareaElementContainer;\r\n    }(ElementContainer));\n\n    var IFrameElementContainer = /** @class */ (function (_super) {\r\n        __extends(IFrameElementContainer, _super);\r\n        function IFrameElementContainer(context, iframe) {\r\n            var _this = _super.call(this, context, iframe) || this;\r\n            _this.src = iframe.src;\r\n            _this.width = parseInt(iframe.width, 10) || 0;\r\n            _this.height = parseInt(iframe.height, 10) || 0;\r\n            _this.backgroundColor = _this.styles.backgroundColor;\r\n            try {\r\n                if (iframe.contentWindow &&\r\n                    iframe.contentWindow.document &&\r\n                    iframe.contentWindow.document.documentElement) {\r\n                    _this.tree = parseTree(context, iframe.contentWindow.document.documentElement);\r\n                    // http://www.w3.org/TR/css3-background/#special-backgrounds\r\n                    var documentBackgroundColor = iframe.contentWindow.document.documentElement\r\n                        ? parseColor(context, getComputedStyle(iframe.contentWindow.document.documentElement).backgroundColor)\r\n                        : COLORS.TRANSPARENT;\r\n                    var bodyBackgroundColor = iframe.contentWindow.document.body\r\n                        ? parseColor(context, getComputedStyle(iframe.contentWindow.document.body).backgroundColor)\r\n                        : COLORS.TRANSPARENT;\r\n                    _this.backgroundColor = isTransparent(documentBackgroundColor)\r\n                        ? isTransparent(bodyBackgroundColor)\r\n                            ? _this.styles.backgroundColor\r\n                            : bodyBackgroundColor\r\n                        : documentBackgroundColor;\r\n                }\r\n            }\r\n            catch (e) { }\r\n            return _this;\r\n        }\r\n        return IFrameElementContainer;\r\n    }(ElementContainer));\n\n    var LIST_OWNERS = ['OL', 'UL', 'MENU'];\r\n    var parseNodeTree = function (context, node, parent, root) {\r\n        for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) {\r\n            nextNode = childNode.nextSibling;\r\n            if (isTextNode(childNode) && childNode.data.trim().length > 0) {\r\n                parent.textNodes.push(new TextContainer(context, childNode, parent.styles));\r\n            }\r\n            else if (isElementNode(childNode)) {\r\n                if (isSlotElement(childNode) && childNode.assignedNodes) {\r\n                    childNode.assignedNodes().forEach(function (childNode) { return parseNodeTree(context, childNode, parent, root); });\r\n                }\r\n                else {\r\n                    var container = createContainer(context, childNode);\r\n                    if (container.styles.isVisible()) {\r\n                        if (createsRealStackingContext(childNode, container, root)) {\r\n                            container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\r\n                        }\r\n                        else if (createsStackingContext(container.styles)) {\r\n                            container.flags |= 2 /* CREATES_STACKING_CONTEXT */;\r\n                        }\r\n                        if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {\r\n                            container.flags |= 8 /* IS_LIST_OWNER */;\r\n                        }\r\n                        parent.elements.push(container);\r\n                        childNode.slot;\r\n                        if (childNode.shadowRoot) {\r\n                            parseNodeTree(context, childNode.shadowRoot, container, root);\r\n                        }\r\n                        else if (!isTextareaElement(childNode) &&\r\n                            !isSVGElement(childNode) &&\r\n                            !isSelectElement(childNode)) {\r\n                            parseNodeTree(context, childNode, container, root);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    var createContainer = function (context, element) {\r\n        if (isImageElement(element)) {\r\n            return new ImageElementContainer(context, element);\r\n        }\r\n        if (isCanvasElement(element)) {\r\n            return new CanvasElementContainer(context, element);\r\n        }\r\n        if (isSVGElement(element)) {\r\n            return new SVGElementContainer(context, element);\r\n        }\r\n        if (isLIElement(element)) {\r\n            return new LIElementContainer(context, element);\r\n        }\r\n        if (isOLElement(element)) {\r\n            return new OLElementContainer(context, element);\r\n        }\r\n        if (isInputElement(element)) {\r\n            return new InputElementContainer(context, element);\r\n        }\r\n        if (isSelectElement(element)) {\r\n            return new SelectElementContainer(context, element);\r\n        }\r\n        if (isTextareaElement(element)) {\r\n            return new TextareaElementContainer(context, element);\r\n        }\r\n        if (isIFrameElement(element)) {\r\n            return new IFrameElementContainer(context, element);\r\n        }\r\n        return new ElementContainer(context, element);\r\n    };\r\n    var parseTree = function (context, element) {\r\n        var container = createContainer(context, element);\r\n        container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;\r\n        parseNodeTree(context, element, container, container);\r\n        return container;\r\n    };\r\n    var createsRealStackingContext = function (node, container, root) {\r\n        return (container.styles.isPositionedWithZIndex() ||\r\n            container.styles.opacity < 1 ||\r\n            container.styles.isTransformed() ||\r\n            (isBodyElement(node) && root.styles.isTransparent()));\r\n    };\r\n    var createsStackingContext = function (styles) { return styles.isPositioned() || styles.isFloating(); };\r\n    var isTextNode = function (node) { return node.nodeType === Node.TEXT_NODE; };\r\n    var isElementNode = function (node) { return node.nodeType === Node.ELEMENT_NODE; };\r\n    var isHTMLElementNode = function (node) {\r\n        return isElementNode(node) && typeof node.style !== 'undefined' && !isSVGElementNode(node);\r\n    };\r\n    var isSVGElementNode = function (element) {\r\n        return typeof element.className === 'object';\r\n    };\r\n    var isLIElement = function (node) { return node.tagName === 'LI'; };\r\n    var isOLElement = function (node) { return node.tagName === 'OL'; };\r\n    var isInputElement = function (node) { return node.tagName === 'INPUT'; };\r\n    var isHTMLElement = function (node) { return node.tagName === 'HTML'; };\r\n    var isSVGElement = function (node) { return node.tagName === 'svg'; };\r\n    var isBodyElement = function (node) { return node.tagName === 'BODY'; };\r\n    var isCanvasElement = function (node) { return node.tagName === 'CANVAS'; };\r\n    var isVideoElement = function (node) { return node.tagName === 'VIDEO'; };\r\n    var isImageElement = function (node) { return node.tagName === 'IMG'; };\r\n    var isIFrameElement = function (node) { return node.tagName === 'IFRAME'; };\r\n    var isStyleElement = function (node) { return node.tagName === 'STYLE'; };\r\n    var isScriptElement = function (node) { return node.tagName === 'SCRIPT'; };\r\n    var isTextareaElement = function (node) { return node.tagName === 'TEXTAREA'; };\r\n    var isSelectElement = function (node) { return node.tagName === 'SELECT'; };\r\n    var isSlotElement = function (node) { return node.tagName === 'SLOT'; };\r\n    // https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\r\n    var isCustomElement = function (node) { return node.tagName.indexOf('-') > 0; };\n\n    var CounterState = /** @class */ (function () {\r\n        function CounterState() {\r\n            this.counters = {};\r\n        }\r\n        CounterState.prototype.getCounterValue = function (name) {\r\n            var counter = this.counters[name];\r\n            if (counter && counter.length) {\r\n                return counter[counter.length - 1];\r\n            }\r\n            return 1;\r\n        };\r\n        CounterState.prototype.getCounterValues = function (name) {\r\n            var counter = this.counters[name];\r\n            return counter ? counter : [];\r\n        };\r\n        CounterState.prototype.pop = function (counters) {\r\n            var _this = this;\r\n            counters.forEach(function (counter) { return _this.counters[counter].pop(); });\r\n        };\r\n        CounterState.prototype.parse = function (style) {\r\n            var _this = this;\r\n            var counterIncrement = style.counterIncrement;\r\n            var counterReset = style.counterReset;\r\n            var canReset = true;\r\n            if (counterIncrement !== null) {\r\n                counterIncrement.forEach(function (entry) {\r\n                    var counter = _this.counters[entry.counter];\r\n                    if (counter && entry.increment !== 0) {\r\n                        canReset = false;\r\n                        if (!counter.length) {\r\n                            counter.push(1);\r\n                        }\r\n                        counter[Math.max(0, counter.length - 1)] += entry.increment;\r\n                    }\r\n                });\r\n            }\r\n            var counterNames = [];\r\n            if (canReset) {\r\n                counterReset.forEach(function (entry) {\r\n                    var counter = _this.counters[entry.counter];\r\n                    counterNames.push(entry.counter);\r\n                    if (!counter) {\r\n                        counter = _this.counters[entry.counter] = [];\r\n                    }\r\n                    counter.push(entry.reset);\r\n                });\r\n            }\r\n            return counterNames;\r\n        };\r\n        return CounterState;\r\n    }());\r\n    var ROMAN_UPPER = {\r\n        integers: [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],\r\n        values: ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']\r\n    };\r\n    var ARMENIAN = {\r\n        integers: [\r\n            9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90, 80, 70,\r\n            60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\r\n        ],\r\n        values: [\r\n            'Ք',\r\n            'Փ',\r\n            'Ւ',\r\n            'Ց',\r\n            'Ր',\r\n            'Տ',\r\n            'Վ',\r\n            'Ս',\r\n            'Ռ',\r\n            'Ջ',\r\n            'Պ',\r\n            'Չ',\r\n            'Ո',\r\n            'Շ',\r\n            'Ն',\r\n            'Յ',\r\n            'Մ',\r\n            'Ճ',\r\n            'Ղ',\r\n            'Ձ',\r\n            'Հ',\r\n            'Կ',\r\n            'Ծ',\r\n            'Խ',\r\n            'Լ',\r\n            'Ի',\r\n            'Ժ',\r\n            'Թ',\r\n            'Ը',\r\n            'Է',\r\n            'Զ',\r\n            'Ե',\r\n            'Դ',\r\n            'Գ',\r\n            'Բ',\r\n            'Ա'\r\n        ]\r\n    };\r\n    var HEBREW = {\r\n        integers: [\r\n            10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 400, 300, 200, 100, 90, 80, 70, 60, 50, 40, 30, 20,\r\n            19, 18, 17, 16, 15, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\r\n        ],\r\n        values: [\r\n            'י׳',\r\n            'ט׳',\r\n            'ח׳',\r\n            'ז׳',\r\n            'ו׳',\r\n            'ה׳',\r\n            'ד׳',\r\n            'ג׳',\r\n            'ב׳',\r\n            'א׳',\r\n            'ת',\r\n            'ש',\r\n            'ר',\r\n            'ק',\r\n            'צ',\r\n            'פ',\r\n            'ע',\r\n            'ס',\r\n            'נ',\r\n            'מ',\r\n            'ל',\r\n            'כ',\r\n            'יט',\r\n            'יח',\r\n            'יז',\r\n            'טז',\r\n            'טו',\r\n            'י',\r\n            'ט',\r\n            'ח',\r\n            'ז',\r\n            'ו',\r\n            'ה',\r\n            'ד',\r\n            'ג',\r\n            'ב',\r\n            'א'\r\n        ]\r\n    };\r\n    var GEORGIAN = {\r\n        integers: [\r\n            10000, 9000, 8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000, 900, 800, 700, 600, 500, 400, 300, 200, 100, 90,\r\n            80, 70, 60, 50, 40, 30, 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1\r\n        ],\r\n        values: [\r\n            'ჵ',\r\n            'ჰ',\r\n            'ჯ',\r\n            'ჴ',\r\n            'ხ',\r\n            'ჭ',\r\n            'წ',\r\n            'ძ',\r\n            'ც',\r\n            'ჩ',\r\n            'შ',\r\n            'ყ',\r\n            'ღ',\r\n            'ქ',\r\n            'ფ',\r\n            'ჳ',\r\n            'ტ',\r\n            'ს',\r\n            'რ',\r\n            'ჟ',\r\n            'პ',\r\n            'ო',\r\n            'ჲ',\r\n            'ნ',\r\n            'მ',\r\n            'ლ',\r\n            'კ',\r\n            'ი',\r\n            'თ',\r\n            'ჱ',\r\n            'ზ',\r\n            'ვ',\r\n            'ე',\r\n            'დ',\r\n            'გ',\r\n            'ბ',\r\n            'ა'\r\n        ]\r\n    };\r\n    var createAdditiveCounter = function (value, min, max, symbols, fallback, suffix) {\r\n        if (value < min || value > max) {\r\n            return createCounterText(value, fallback, suffix.length > 0);\r\n        }\r\n        return (symbols.integers.reduce(function (string, integer, index) {\r\n            while (value >= integer) {\r\n                value -= integer;\r\n                string += symbols.values[index];\r\n            }\r\n            return string;\r\n        }, '') + suffix);\r\n    };\r\n    var createCounterStyleWithSymbolResolver = function (value, codePointRangeLength, isNumeric, resolver) {\r\n        var string = '';\r\n        do {\r\n            if (!isNumeric) {\r\n                value--;\r\n            }\r\n            string = resolver(value) + string;\r\n            value /= codePointRangeLength;\r\n        } while (value * codePointRangeLength >= codePointRangeLength);\r\n        return string;\r\n    };\r\n    var createCounterStyleFromRange = function (value, codePointRangeStart, codePointRangeEnd, isNumeric, suffix) {\r\n        var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;\r\n        return ((value < 0 ? '-' : '') +\r\n            (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function (codePoint) {\r\n                return fromCodePoint$1(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart);\r\n            }) +\r\n                suffix));\r\n    };\r\n    var createCounterStyleFromSymbols = function (value, symbols, suffix) {\r\n        if (suffix === void 0) { suffix = '. '; }\r\n        var codePointRangeLength = symbols.length;\r\n        return (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, false, function (codePoint) { return symbols[Math.floor(codePoint % codePointRangeLength)]; }) + suffix);\r\n    };\r\n    var CJK_ZEROS = 1 << 0;\r\n    var CJK_TEN_COEFFICIENTS = 1 << 1;\r\n    var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;\r\n    var CJK_HUNDRED_COEFFICIENTS = 1 << 3;\r\n    var createCJKCounter = function (value, numbers, multipliers, negativeSign, suffix, flags) {\r\n        if (value < -9999 || value > 9999) {\r\n            return createCounterText(value, 4 /* CJK_DECIMAL */, suffix.length > 0);\r\n        }\r\n        var tmp = Math.abs(value);\r\n        var string = suffix;\r\n        if (tmp === 0) {\r\n            return numbers[0] + string;\r\n        }\r\n        for (var digit = 0; tmp > 0 && digit <= 4; digit++) {\r\n            var coefficient = tmp % 10;\r\n            if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== '') {\r\n                string = numbers[coefficient] + string;\r\n            }\r\n            else if (coefficient > 1 ||\r\n                (coefficient === 1 && digit === 0) ||\r\n                (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS)) ||\r\n                (coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100) ||\r\n                (coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS))) {\r\n                string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : '') + string;\r\n            }\r\n            else if (coefficient === 1 && digit > 0) {\r\n                string = multipliers[digit - 1] + string;\r\n            }\r\n            tmp = Math.floor(tmp / 10);\r\n        }\r\n        return (value < 0 ? negativeSign : '') + string;\r\n    };\r\n    var CHINESE_INFORMAL_MULTIPLIERS = '十百千萬';\r\n    var CHINESE_FORMAL_MULTIPLIERS = '拾佰仟萬';\r\n    var JAPANESE_NEGATIVE = 'マイナス';\r\n    var KOREAN_NEGATIVE = '마이너스';\r\n    var createCounterText = function (value, type, appendSuffix) {\r\n        var defaultSuffix = appendSuffix ? '. ' : '';\r\n        var cjkSuffix = appendSuffix ? '、' : '';\r\n        var koreanSuffix = appendSuffix ? ', ' : '';\r\n        var spaceSuffix = appendSuffix ? ' ' : '';\r\n        switch (type) {\r\n            case 0 /* DISC */:\r\n                return '•' + spaceSuffix;\r\n            case 1 /* CIRCLE */:\r\n                return '◦' + spaceSuffix;\r\n            case 2 /* SQUARE */:\r\n                return '◾' + spaceSuffix;\r\n            case 5 /* DECIMAL_LEADING_ZERO */:\r\n                var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\r\n                return string.length < 4 ? \"0\" + string : string;\r\n            case 4 /* CJK_DECIMAL */:\r\n                return createCounterStyleFromSymbols(value, '〇一二三四五六七八九', cjkSuffix);\r\n            case 6 /* LOWER_ROMAN */:\r\n                return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3 /* DECIMAL */, defaultSuffix).toLowerCase();\r\n            case 7 /* UPPER_ROMAN */:\r\n                return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3 /* DECIMAL */, defaultSuffix);\r\n            case 8 /* LOWER_GREEK */:\r\n                return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix);\r\n            case 9 /* LOWER_ALPHA */:\r\n                return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix);\r\n            case 10 /* UPPER_ALPHA */:\r\n                return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);\r\n            case 11 /* ARABIC_INDIC */:\r\n                return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix);\r\n            case 12 /* ARMENIAN */:\r\n            case 49 /* UPPER_ARMENIAN */:\r\n                return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3 /* DECIMAL */, defaultSuffix);\r\n            case 35 /* LOWER_ARMENIAN */:\r\n                return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3 /* DECIMAL */, defaultSuffix).toLowerCase();\r\n            case 13 /* BENGALI */:\r\n                return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix);\r\n            case 14 /* CAMBODIAN */:\r\n            case 30 /* KHMER */:\r\n                return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix);\r\n            case 15 /* CJK_EARTHLY_BRANCH */:\r\n                return createCounterStyleFromSymbols(value, '子丑寅卯辰巳午未申酉戌亥', cjkSuffix);\r\n            case 16 /* CJK_HEAVENLY_STEM */:\r\n                return createCounterStyleFromSymbols(value, '甲乙丙丁戊己庚辛壬癸', cjkSuffix);\r\n            case 17 /* CJK_IDEOGRAPHIC */:\r\n            case 48 /* TRAD_CHINESE_INFORMAL */:\r\n                return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\r\n            case 47 /* TRAD_CHINESE_FORMAL */:\r\n                return createCJKCounter(value, '零壹貳參肆伍陸柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '負', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\r\n            case 42 /* SIMP_CHINESE_INFORMAL */:\r\n                return createCJKCounter(value, '零一二三四五六七八九', CHINESE_INFORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\r\n            case 41 /* SIMP_CHINESE_FORMAL */:\r\n                return createCJKCounter(value, '零壹贰叁肆伍陆柒捌玖', CHINESE_FORMAL_MULTIPLIERS, '负', cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);\r\n            case 26 /* JAPANESE_INFORMAL */:\r\n                return createCJKCounter(value, '〇一二三四五六七八九', '十百千万', JAPANESE_NEGATIVE, cjkSuffix, 0);\r\n            case 25 /* JAPANESE_FORMAL */:\r\n                return createCJKCounter(value, '零壱弐参四伍六七八九', '拾百千万', JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\r\n            case 31 /* KOREAN_HANGUL_FORMAL */:\r\n                return createCJKCounter(value, '영일이삼사오육칠팔구', '십백천만', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\r\n            case 33 /* KOREAN_HANJA_INFORMAL */:\r\n                return createCJKCounter(value, '零一二三四五六七八九', '十百千萬', KOREAN_NEGATIVE, koreanSuffix, 0);\r\n            case 32 /* KOREAN_HANJA_FORMAL */:\r\n                return createCJKCounter(value, '零壹貳參四五六七八九', '拾百千', KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);\r\n            case 18 /* DEVANAGARI */:\r\n                return createCounterStyleFromRange(value, 0x966, 0x96f, true, defaultSuffix);\r\n            case 20 /* GEORGIAN */:\r\n                return createAdditiveCounter(value, 1, 19999, GEORGIAN, 3 /* DECIMAL */, defaultSuffix);\r\n            case 21 /* GUJARATI */:\r\n                return createCounterStyleFromRange(value, 0xae6, 0xaef, true, defaultSuffix);\r\n            case 22 /* GURMUKHI */:\r\n                return createCounterStyleFromRange(value, 0xa66, 0xa6f, true, defaultSuffix);\r\n            case 22 /* HEBREW */:\r\n                return createAdditiveCounter(value, 1, 10999, HEBREW, 3 /* DECIMAL */, defaultSuffix);\r\n            case 23 /* HIRAGANA */:\r\n                return createCounterStyleFromSymbols(value, 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん');\r\n            case 24 /* HIRAGANA_IROHA */:\r\n                return createCounterStyleFromSymbols(value, 'いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす');\r\n            case 27 /* KANNADA */:\r\n                return createCounterStyleFromRange(value, 0xce6, 0xcef, true, defaultSuffix);\r\n            case 28 /* KATAKANA */:\r\n                return createCounterStyleFromSymbols(value, 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン', cjkSuffix);\r\n            case 29 /* KATAKANA_IROHA */:\r\n                return createCounterStyleFromSymbols(value, 'イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス', cjkSuffix);\r\n            case 34 /* LAO */:\r\n                return createCounterStyleFromRange(value, 0xed0, 0xed9, true, defaultSuffix);\r\n            case 37 /* MONGOLIAN */:\r\n                return createCounterStyleFromRange(value, 0x1810, 0x1819, true, defaultSuffix);\r\n            case 38 /* MYANMAR */:\r\n                return createCounterStyleFromRange(value, 0x1040, 0x1049, true, defaultSuffix);\r\n            case 39 /* ORIYA */:\r\n                return createCounterStyleFromRange(value, 0xb66, 0xb6f, true, defaultSuffix);\r\n            case 40 /* PERSIAN */:\r\n                return createCounterStyleFromRange(value, 0x6f0, 0x6f9, true, defaultSuffix);\r\n            case 43 /* TAMIL */:\r\n                return createCounterStyleFromRange(value, 0xbe6, 0xbef, true, defaultSuffix);\r\n            case 44 /* TELUGU */:\r\n                return createCounterStyleFromRange(value, 0xc66, 0xc6f, true, defaultSuffix);\r\n            case 45 /* THAI */:\r\n                return createCounterStyleFromRange(value, 0xe50, 0xe59, true, defaultSuffix);\r\n            case 46 /* TIBETAN */:\r\n                return createCounterStyleFromRange(value, 0xf20, 0xf29, true, defaultSuffix);\r\n            case 3 /* DECIMAL */:\r\n            default:\r\n                return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);\r\n        }\r\n    };\n\n    /// <reference types=\"trusted-types\"/>\r\n    var htmlEscape = function (str) {\r\n        if (!str)\r\n            return '';\r\n        var escaped = '';\r\n        str.split('').forEach(function (char) {\r\n            if (char == '&') {\r\n                char = '&amp;';\r\n            }\r\n            else if (char == '\\'') {\r\n                char = '&#039;';\r\n            }\r\n            else if (char == '\"') {\r\n                char = '&quot;';\r\n            }\r\n            else if (char == '<') {\r\n                char = '&lt;';\r\n            }\r\n            else if (char == '>') {\r\n                char = '&gt;';\r\n            }\r\n            escaped += char;\r\n        });\r\n        return escaped;\r\n    };\r\n    var createDocType = function (doctype) {\r\n        if (!doctype)\r\n            return '<html><\/html>';\r\n        var name = htmlEscape(doctype.name);\r\n        var internalSubset = htmlEscape(doctype.internalSubset);\r\n        var publicId = doctype.publicId ? \"\\\"\" + htmlEscape(doctype.publicId) + \"\\\"\" : '';\r\n        var systemId = doctype.systemId ? \"\\\"\" + htmlEscape(doctype.systemId) + \"\\\"\" : '';\r\n        return \"<!DOCTYPE \" + name + internalSubset + publicId + systemId + \"><html><\/html>\";\r\n    };\r\n    var doctypePolicy;\r\n    if (window.trustedTypes) {\r\n        doctypePolicy = window.trustedTypes.createPolicy('html2canvas', {\r\n            // @ts-ignore\r\n            createHTML: function (ignored, doctype) {\r\n                return createDocType(doctype);\r\n            }\r\n        });\r\n    }\r\n    var serializeDoctype = function (doctype) {\r\n        if (doctypePolicy !== undefined) {\r\n            return doctypePolicy.createHTML('', doctype);\r\n        }\r\n        else {\r\n            return createDocType(doctype);\r\n        }\r\n    };\n\n    var IGNORE_ATTRIBUTE = 'data-html2canvas-ignore';\r\n    var DocumentCloner = /** @class */ (function () {\r\n        function DocumentCloner(context, element, options) {\r\n            this.context = context;\r\n            this.options = options;\r\n            this.scrolledElements = [];\r\n            this.referenceElement = element;\r\n            this.counters = new CounterState();\r\n            this.quoteDepth = 0;\r\n            if (!element.ownerDocument) {\r\n                throw new Error('Cloned element does not have an owner document');\r\n            }\r\n            this.documentElement = this.cloneNode(element.ownerDocument.documentElement, false);\r\n        }\r\n        DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) {\r\n            var _this = this;\r\n            var iframe = createIFrameContainer(ownerDocument, windowSize);\r\n            if (!iframe.contentWindow) {\r\n                return Promise.reject(\"Unable to find iframe window\");\r\n            }\r\n            var scrollX = ownerDocument.defaultView.pageXOffset;\r\n            var scrollY = ownerDocument.defaultView.pageYOffset;\r\n            var cloneWindow = iframe.contentWindow;\r\n            var documentClone = cloneWindow.document;\r\n            /* Chrome doesn't detect relative background-images assigned in inline <style> sheets when fetched through getComputedStyle\r\n             if window url is about:blank, we can assign the url to current by writing onto the document\r\n             */\r\n            var iframeLoad = iframeLoader(iframe).then(function () { return __awaiter(_this, void 0, void 0, function () {\r\n                var onclone, referenceElement;\r\n                return __generator(this, function (_a) {\r\n                    switch (_a.label) {\r\n                        case 0:\r\n                            this.scrolledElements.forEach(restoreNodeScroll);\r\n                            if (cloneWindow) {\r\n                                cloneWindow.scrollTo(windowSize.left, windowSize.top);\r\n                                if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent) &&\r\n                                    (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)) {\r\n                                    this.context.logger.warn('Unable to restore scroll position for cloned document');\r\n                                    this.context.windowBounds = this.context.windowBounds.add(cloneWindow.scrollX - windowSize.left, cloneWindow.scrollY - windowSize.top, 0, 0);\r\n                                }\r\n                            }\r\n                            onclone = this.options.onclone;\r\n                            referenceElement = this.clonedReferenceElement;\r\n                            if (typeof referenceElement === 'undefined') {\r\n                                return [2 /*return*/, Promise.reject(\"Error finding the \" + this.referenceElement.nodeName + \" in the cloned document\")];\r\n                            }\r\n                            if (!(documentClone.fonts && documentClone.fonts.ready)) return [3 /*break*/, 2];\r\n                            return [4 /*yield*/, documentClone.fonts.ready];\r\n                        case 1:\r\n                            _a.sent();\r\n                            _a.label = 2;\r\n                        case 2:\r\n                            if (!/(AppleWebKit)/g.test(navigator.userAgent)) return [3 /*break*/, 4];\r\n                            return [4 /*yield*/, imagesReady(documentClone)];\r\n                        case 3:\r\n                            _a.sent();\r\n                            _a.label = 4;\r\n                        case 4:\r\n                            if (typeof onclone === 'function') {\r\n                                return [2 /*return*/, Promise.resolve()\r\n                                        .then(function () { return onclone(documentClone, referenceElement); })\r\n                                        .then(function () { return iframe; })];\r\n                            }\r\n                            return [2 /*return*/, iframe];\r\n                    }\r\n                });\r\n            }); });\r\n            documentClone.open();\r\n            documentClone.write(serializeDoctype(document.doctype));\r\n            // Chrome scrolls the parent document for some reason after the write to the cloned window???\r\n            restoreOwnerScroll(this.referenceElement.ownerDocument, scrollX, scrollY);\r\n            documentClone.replaceChild(documentClone.adoptNode(this.documentElement), documentClone.documentElement);\r\n            documentClone.close();\r\n            return iframeLoad;\r\n        };\r\n        DocumentCloner.prototype.createElementClone = function (node) {\r\n            if (isDebugging(node, 2 /* CLONE */)) {\r\n                debugger;\r\n            }\r\n            if (isCanvasElement(node)) {\r\n                return this.createCanvasClone(node);\r\n            }\r\n            if (isVideoElement(node)) {\r\n                return this.createVideoClone(node);\r\n            }\r\n            if (isStyleElement(node)) {\r\n                return this.createStyleClone(node);\r\n            }\r\n            var clone = node.cloneNode(false);\r\n            if (isImageElement(clone)) {\r\n                if (isImageElement(node) && node.currentSrc && node.currentSrc !== node.src) {\r\n                    clone.src = node.currentSrc;\r\n                    clone.srcset = '';\r\n                }\r\n                if (clone.loading === 'lazy') {\r\n                    clone.loading = 'eager';\r\n                }\r\n            }\r\n            if (isCustomElement(clone)) {\r\n                return this.createCustomElementClone(clone);\r\n            }\r\n            return clone;\r\n        };\r\n        DocumentCloner.prototype.createCustomElementClone = function (node) {\r\n            var clone = document.createElement('html2canvascustomelement');\r\n            copyCSSStyles(node.style, clone);\r\n            return clone;\r\n        };\r\n        DocumentCloner.prototype.createStyleClone = function (node) {\r\n            try {\r\n                var sheet = node.sheet;\r\n                if (sheet && sheet.cssRules) {\r\n                    var css = [].slice.call(sheet.cssRules, 0).reduce(function (css, rule) {\r\n                        if (rule && typeof rule.cssText === 'string') {\r\n                            return css + rule.cssText;\r\n                        }\r\n                        return css;\r\n                    }, '');\r\n                    var style = node.cloneNode(false);\r\n                    style.textContent = css;\r\n                    return style;\r\n                }\r\n            }\r\n            catch (e) {\r\n                // accessing node.sheet.cssRules throws a DOMException\r\n                this.context.logger.error('Unable to access cssRules property', e);\r\n                if (e.name !== 'SecurityError') {\r\n                    throw e;\r\n                }\r\n            }\r\n            return node.cloneNode(false);\r\n        };\r\n        DocumentCloner.prototype.createCanvasClone = function (canvas) {\r\n            var _a;\r\n            if (this.options.inlineImages && canvas.ownerDocument) {\r\n                var img = canvas.ownerDocument.createElement('img');\r\n                try {\r\n                    img.src = canvas.toDataURL();\r\n                    return img;\r\n                }\r\n                catch (e) {\r\n                    this.context.logger.info(\"Unable to inline canvas contents, canvas is tainted\", canvas);\r\n                }\r\n            }\r\n            var clonedCanvas = canvas.cloneNode(false);\r\n            try {\r\n                clonedCanvas.width = canvas.width;\r\n                clonedCanvas.height = canvas.height;\r\n                var ctx = canvas.getContext('2d');\r\n                var clonedCtx = clonedCanvas.getContext('2d');\r\n                if (clonedCtx) {\r\n                    if (!this.options.allowTaint && ctx) {\r\n                        clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0);\r\n                    }\r\n                    else {\r\n                        var gl = (_a = canvas.getContext('webgl2')) !== null && _a !== void 0 ? _a : canvas.getContext('webgl');\r\n                        if (gl) {\r\n                            var attribs = gl.getContextAttributes();\r\n                            if ((attribs === null || attribs === void 0 ? void 0 : attribs.preserveDrawingBuffer) === false) {\r\n                                this.context.logger.warn('Unable to clone WebGL context as it has preserveDrawingBuffer=false', canvas);\r\n                            }\r\n                        }\r\n                        clonedCtx.drawImage(canvas, 0, 0);\r\n                    }\r\n                }\r\n                return clonedCanvas;\r\n            }\r\n            catch (e) {\r\n                this.context.logger.info(\"Unable to clone canvas as it is tainted\", canvas);\r\n            }\r\n            return clonedCanvas;\r\n        };\r\n        DocumentCloner.prototype.createVideoClone = function (video) {\r\n            var canvas = video.ownerDocument.createElement('canvas');\r\n            canvas.width = video.offsetWidth;\r\n            canvas.height = video.offsetHeight;\r\n            var ctx = canvas.getContext('2d');\r\n            try {\r\n                if (ctx) {\r\n                    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n                    if (!this.options.allowTaint) {\r\n                        ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n                    }\r\n                }\r\n                return canvas;\r\n            }\r\n            catch (e) {\r\n                this.context.logger.info(\"Unable to clone video as it is tainted\", video);\r\n            }\r\n            var blankCanvas = video.ownerDocument.createElement('canvas');\r\n            blankCanvas.width = video.offsetWidth;\r\n            blankCanvas.height = video.offsetHeight;\r\n            return blankCanvas;\r\n        };\r\n        DocumentCloner.prototype.appendChildNode = function (clone, child, copyStyles) {\r\n            if (!isElementNode(child) ||\r\n                (!isScriptElement(child) &&\r\n                    !child.hasAttribute(IGNORE_ATTRIBUTE) &&\r\n                    (typeof this.options.ignoreElements !== 'function' || !this.options.ignoreElements(child)))) {\r\n                if (!this.options.copyStyles || !isElementNode(child) || !isStyleElement(child)) {\r\n                    clone.appendChild(this.cloneNode(child, copyStyles));\r\n                }\r\n            }\r\n        };\r\n        DocumentCloner.prototype.cloneChildNodes = function (node, clone, copyStyles) {\r\n            var _this = this;\r\n            for (var child = node.shadowRoot ? node.shadowRoot.firstChild : node.firstChild; child; child = child.nextSibling) {\r\n                if (isElementNode(child) && isSlotElement(child) && typeof child.assignedNodes === 'function') {\r\n                    var assignedNodes = child.assignedNodes();\r\n                    if (assignedNodes.length) {\r\n                        assignedNodes.forEach(function (assignedNode) { return _this.appendChildNode(clone, assignedNode, copyStyles); });\r\n                    }\r\n                }\r\n                else {\r\n                    this.appendChildNode(clone, child, copyStyles);\r\n                }\r\n            }\r\n        };\r\n        DocumentCloner.prototype.cloneNode = function (node, copyStyles) {\r\n            if (isTextNode(node)) {\r\n                return document.createTextNode(node.data);\r\n            }\r\n            if (!node.ownerDocument) {\r\n                return node.cloneNode(false);\r\n            }\r\n            var window = node.ownerDocument.defaultView;\r\n            if (window && isElementNode(node) && (isHTMLElementNode(node) || isSVGElementNode(node))) {\r\n                var clone = this.createElementClone(node);\r\n                clone.style.transitionProperty = 'none';\r\n                var style = window.getComputedStyle(node);\r\n                var styleBefore = window.getComputedStyle(node, ':before');\r\n                var styleAfter = window.getComputedStyle(node, ':after');\r\n                if (this.referenceElement === node && isHTMLElementNode(clone)) {\r\n                    this.clonedReferenceElement = clone;\r\n                }\r\n                if (isBodyElement(clone)) {\r\n                    createPseudoHideStyles(clone);\r\n                }\r\n                var counters = this.counters.parse(new CSSParsedCounterDeclaration(this.context, style));\r\n                var before = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE);\r\n                if (isCustomElement(node)) {\r\n                    copyStyles = true;\r\n                }\r\n                if (!isVideoElement(node)) {\r\n                    this.cloneChildNodes(node, clone, copyStyles);\r\n                }\r\n                if (before) {\r\n                    clone.insertBefore(before, clone.firstChild);\r\n                }\r\n                var after = this.resolvePseudoContent(node, clone, styleAfter, PseudoElementType.AFTER);\r\n                if (after) {\r\n                    clone.appendChild(after);\r\n                }\r\n                this.counters.pop(counters);\r\n                if ((style && (this.options.copyStyles || isSVGElementNode(node)) && !isIFrameElement(node)) ||\r\n                    copyStyles) {\r\n                    copyCSSStyles(style, clone);\r\n                }\r\n                if (node.scrollTop !== 0 || node.scrollLeft !== 0) {\r\n                    this.scrolledElements.push([clone, node.scrollLeft, node.scrollTop]);\r\n                }\r\n                if ((isTextareaElement(node) || isSelectElement(node)) &&\r\n                    (isTextareaElement(clone) || isSelectElement(clone))) {\r\n                    clone.value = node.value;\r\n                }\r\n                return clone;\r\n            }\r\n            return node.cloneNode(false);\r\n        };\r\n        DocumentCloner.prototype.resolvePseudoContent = function (node, clone, style, pseudoElt) {\r\n            var _this = this;\r\n            if (!style) {\r\n                return;\r\n            }\r\n            var value = style.content;\r\n            var document = clone.ownerDocument;\r\n            if (!document || !value || value === 'none' || value === '-moz-alt-content' || style.display === 'none') {\r\n                return;\r\n            }\r\n            this.counters.parse(new CSSParsedCounterDeclaration(this.context, style));\r\n            var declaration = new CSSParsedPseudoDeclaration(this.context, style);\r\n            var anonymousReplacedElement = document.createElement('html2canvaspseudoelement');\r\n            copyCSSStyles(style, anonymousReplacedElement);\r\n            declaration.content.forEach(function (token) {\r\n                if (token.type === 0 /* STRING_TOKEN */) {\r\n                    anonymousReplacedElement.appendChild(document.createTextNode(token.value));\r\n                }\r\n                else if (token.type === 22 /* URL_TOKEN */) {\r\n                    var img = document.createElement('img');\r\n                    img.src = token.value;\r\n                    img.style.opacity = '1';\r\n                    anonymousReplacedElement.appendChild(img);\r\n                }\r\n                else if (token.type === 18 /* FUNCTION */) {\r\n                    if (token.name === 'attr') {\r\n                        var attr = token.values.filter(isIdentToken);\r\n                        if (attr.length) {\r\n                            anonymousReplacedElement.appendChild(document.createTextNode(node.getAttribute(attr[0].value) || ''));\r\n                        }\r\n                    }\r\n                    else if (token.name === 'counter') {\r\n                        var _a = token.values.filter(nonFunctionArgSeparator), counter = _a[0], counterStyle = _a[1];\r\n                        if (counter && isIdentToken(counter)) {\r\n                            var counterState = _this.counters.getCounterValue(counter.value);\r\n                            var counterType = counterStyle && isIdentToken(counterStyle)\r\n                                ? listStyleType.parse(_this.context, counterStyle.value)\r\n                                : 3 /* DECIMAL */;\r\n                            anonymousReplacedElement.appendChild(document.createTextNode(createCounterText(counterState, counterType, false)));\r\n                        }\r\n                    }\r\n                    else if (token.name === 'counters') {\r\n                        var _b = token.values.filter(nonFunctionArgSeparator), counter = _b[0], delim = _b[1], counterStyle = _b[2];\r\n                        if (counter && isIdentToken(counter)) {\r\n                            var counterStates = _this.counters.getCounterValues(counter.value);\r\n                            var counterType_1 = counterStyle && isIdentToken(counterStyle)\r\n                                ? listStyleType.parse(_this.context, counterStyle.value)\r\n                                : 3 /* DECIMAL */;\r\n                            var separator = delim && delim.type === 0 /* STRING_TOKEN */ ? delim.value : '';\r\n                            var text = counterStates\r\n                                .map(function (value) { return createCounterText(value, counterType_1, false); })\r\n                                .join(separator);\r\n                            anonymousReplacedElement.appendChild(document.createTextNode(text));\r\n                        }\r\n                    }\r\n                    else ;\r\n                }\r\n                else if (token.type === 20 /* IDENT_TOKEN */) {\r\n                    switch (token.value) {\r\n                        case 'open-quote':\r\n                            anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, _this.quoteDepth++, true)));\r\n                            break;\r\n                        case 'close-quote':\r\n                            anonymousReplacedElement.appendChild(document.createTextNode(getQuote(declaration.quotes, --_this.quoteDepth, false)));\r\n                            break;\r\n                        default:\r\n                            // safari doesn't parse string tokens correctly because of lack of quotes\r\n                            anonymousReplacedElement.appendChild(document.createTextNode(token.value));\r\n                    }\r\n                }\r\n            });\r\n            anonymousReplacedElement.className = PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + \" \" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;\r\n            var newClassName = pseudoElt === PseudoElementType.BEFORE\r\n                ? \" \" + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE\r\n                : \" \" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER;\r\n            if (isSVGElementNode(clone)) {\r\n                clone.className.baseValue += newClassName;\r\n            }\r\n            else {\r\n                clone.className += newClassName;\r\n            }\r\n            return anonymousReplacedElement;\r\n        };\r\n        DocumentCloner.destroy = function (container) {\r\n            if (container.parentNode) {\r\n                container.parentNode.removeChild(container);\r\n                return true;\r\n            }\r\n            return false;\r\n        };\r\n        return DocumentCloner;\r\n    }());\r\n    var PseudoElementType;\r\n    (function (PseudoElementType) {\r\n        PseudoElementType[PseudoElementType[\"BEFORE\"] = 0] = \"BEFORE\";\r\n        PseudoElementType[PseudoElementType[\"AFTER\"] = 1] = \"AFTER\";\r\n    })(PseudoElementType || (PseudoElementType = {}));\r\n    var createIFrameContainer = function (ownerDocument, bounds) {\r\n        var cloneIframeContainer = ownerDocument.createElement('iframe');\r\n        cloneIframeContainer.className = 'html2canvas-container';\r\n        cloneIframeContainer.style.visibility = 'hidden';\r\n        cloneIframeContainer.style.position = 'fixed';\r\n        cloneIframeContainer.style.left = '-10000px';\r\n        cloneIframeContainer.style.top = '0px';\r\n        cloneIframeContainer.style.border = '0';\r\n        cloneIframeContainer.width = bounds.width.toString();\r\n        cloneIframeContainer.height = bounds.height.toString();\r\n        cloneIframeContainer.scrolling = 'no'; // ios won't scroll without it\r\n        cloneIframeContainer.setAttribute(IGNORE_ATTRIBUTE, 'true');\r\n        ownerDocument.body.appendChild(cloneIframeContainer);\r\n        return cloneIframeContainer;\r\n    };\r\n    var imageReady = function (img) {\r\n        return new Promise(function (resolve) {\r\n            if (img.complete) {\r\n                resolve();\r\n                return;\r\n            }\r\n            if (!img.src) {\r\n                resolve();\r\n                return;\r\n            }\r\n            img.onload = resolve;\r\n            img.onerror = resolve;\r\n        });\r\n    };\r\n    var imagesReady = function (document) {\r\n        return Promise.all([].slice.call(document.images, 0).map(imageReady));\r\n    };\r\n    var iframeLoader = function (iframe) {\r\n        return new Promise(function (resolve, reject) {\r\n            var cloneWindow = iframe.contentWindow;\r\n            if (!cloneWindow) {\r\n                return reject(\"No window assigned for iframe\");\r\n            }\r\n            var documentClone = cloneWindow.document;\r\n            cloneWindow.onload = iframe.onload = function () {\r\n                cloneWindow.onload = iframe.onload = null;\r\n                var interval = setInterval(function () {\r\n                    if (documentClone.body.childNodes.length > 0 && documentClone.readyState === 'complete') {\r\n                        clearInterval(interval);\r\n                        resolve(iframe);\r\n                    }\r\n                }, 50);\r\n            };\r\n        });\r\n    };\r\n    var ignoredStyleProperties = [\r\n        'all',\r\n        'd',\r\n        'content' // Safari shows pseudoelements if content is set\r\n    ];\r\n    var copyCSSStyles = function (style, target) {\r\n        // Edge does not provide value for cssText\r\n        for (var i = style.length - 1; i >= 0; i--) {\r\n            var property = style.item(i);\r\n            if (ignoredStyleProperties.indexOf(property) === -1) {\r\n                target.style.setProperty(property, style.getPropertyValue(property));\r\n            }\r\n        }\r\n        return target;\r\n    };\r\n    var restoreOwnerScroll = function (ownerDocument, x, y) {\r\n        if (ownerDocument &&\r\n            ownerDocument.defaultView &&\r\n            (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)) {\r\n            ownerDocument.defaultView.scrollTo(x, y);\r\n        }\r\n    };\r\n    var restoreNodeScroll = function (_a) {\r\n        var element = _a[0], x = _a[1], y = _a[2];\r\n        element.scrollLeft = x;\r\n        element.scrollTop = y;\r\n    };\r\n    var PSEUDO_BEFORE = ':before';\r\n    var PSEUDO_AFTER = ':after';\r\n    var PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = '___html2canvas___pseudoelement_before';\r\n    var PSEUDO_HIDE_ELEMENT_CLASS_AFTER = '___html2canvas___pseudoelement_after';\r\n    var PSEUDO_HIDE_ELEMENT_STYLE = \"{\\n    content: \\\"\\\" !important;\\n    display: none !important;\\n}\";\r\n    var createPseudoHideStyles = function (body) {\r\n        createStyles(body, \".\" + PSEUDO_HIDE_ELEMENT_CLASS_BEFORE + PSEUDO_BEFORE + PSEUDO_HIDE_ELEMENT_STYLE + \"\\n         .\" + PSEUDO_HIDE_ELEMENT_CLASS_AFTER + PSEUDO_AFTER + PSEUDO_HIDE_ELEMENT_STYLE);\r\n    };\r\n    var createStyles = function (body, styles) {\r\n        var document = body.ownerDocument;\r\n        if (document) {\r\n            var style = document.createElement('style');\r\n            style.textContent = styles;\r\n            body.appendChild(style);\r\n        }\r\n    };\n\n    var CacheStorage = /** @class */ (function () {\r\n        function CacheStorage() {\r\n        }\r\n        CacheStorage.getOrigin = function (url) {\r\n            var link = CacheStorage._link;\r\n            if (!link) {\r\n                return 'about:blank';\r\n            }\r\n            link.href = url;\r\n            link.href = link.href; // IE9, LOL! - http://jsfiddle.net/niklasvh/2e48b/\r\n            return link.protocol + link.hostname + link.port;\r\n        };\r\n        CacheStorage.isSameOrigin = function (src) {\r\n            return CacheStorage.getOrigin(src) === CacheStorage._origin;\r\n        };\r\n        CacheStorage.setContext = function (window) {\r\n            CacheStorage._link = window.document.createElement('a');\r\n            CacheStorage._origin = CacheStorage.getOrigin(window.location.href);\r\n        };\r\n        CacheStorage._origin = 'about:blank';\r\n        return CacheStorage;\r\n    }());\r\n    var Cache = /** @class */ (function () {\r\n        function Cache(context, _options) {\r\n            this.context = context;\r\n            this._options = _options;\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            this._cache = {};\r\n        }\r\n        Cache.prototype.addImage = function (src) {\r\n            var result = Promise.resolve();\r\n            if (this.has(src)) {\r\n                return result;\r\n            }\r\n            if (isBlobImage(src) || isRenderable(src)) {\r\n                (this._cache[src] = this.loadImage(src)).catch(function () {\r\n                    // prevent unhandled rejection\r\n                });\r\n                return result;\r\n            }\r\n            return result;\r\n        };\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        Cache.prototype.match = function (src) {\r\n            return this._cache[src];\r\n        };\r\n        Cache.prototype.loadImage = function (key) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                var isSameOrigin, useCORS, useProxy, src;\r\n                var _this = this;\r\n                return __generator(this, function (_a) {\r\n                    switch (_a.label) {\r\n                        case 0:\r\n                            isSameOrigin = CacheStorage.isSameOrigin(key);\r\n                            useCORS = !isInlineImage(key) && this._options.useCORS === true && FEATURES.SUPPORT_CORS_IMAGES && !isSameOrigin;\r\n                            useProxy = !isInlineImage(key) &&\r\n                                !isSameOrigin &&\r\n                                !isBlobImage(key) &&\r\n                                typeof this._options.proxy === 'string' &&\r\n                                FEATURES.SUPPORT_CORS_XHR &&\r\n                                !useCORS;\r\n                            if (!isSameOrigin &&\r\n                                this._options.allowTaint === false &&\r\n                                !isInlineImage(key) &&\r\n                                !isBlobImage(key) &&\r\n                                !useProxy &&\r\n                                !useCORS) {\r\n                                return [2 /*return*/];\r\n                            }\r\n                            src = key;\r\n                            if (!useProxy) return [3 /*break*/, 2];\r\n                            return [4 /*yield*/, this.proxy(src)];\r\n                        case 1:\r\n                            src = _a.sent();\r\n                            _a.label = 2;\r\n                        case 2:\r\n                            this.context.logger.debug(\"Added image \" + key.substring(0, 256));\r\n                            return [4 /*yield*/, new Promise(function (resolve, reject) {\r\n                                    var img = new Image();\r\n                                    img.onload = function () { return resolve(img); };\r\n                                    img.onerror = reject;\r\n                                    //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous\r\n                                    if (isInlineBase64Image(src) || useCORS) {\r\n                                        img.crossOrigin = 'anonymous';\r\n                                    }\r\n                                    img.src = src;\r\n                                    if (img.complete === true) {\r\n                                        // Inline XML images may fail to parse, throwing an Error later on\r\n                                        setTimeout(function () { return resolve(img); }, 500);\r\n                                    }\r\n                                    if (_this._options.imageTimeout > 0) {\r\n                                        setTimeout(function () { return reject(\"Timed out (\" + _this._options.imageTimeout + \"ms) loading image\"); }, _this._options.imageTimeout);\r\n                                    }\r\n                                })];\r\n                        case 3: return [2 /*return*/, _a.sent()];\r\n                    }\r\n                });\r\n            });\r\n        };\r\n        Cache.prototype.has = function (key) {\r\n            return typeof this._cache[key] !== 'undefined';\r\n        };\r\n        Cache.prototype.keys = function () {\r\n            return Promise.resolve(Object.keys(this._cache));\r\n        };\r\n        Cache.prototype.proxy = function (src) {\r\n            var _this = this;\r\n            var proxy = this._options.proxy;\r\n            if (!proxy) {\r\n                throw new Error('No proxy defined');\r\n            }\r\n            var key = src.substring(0, 256);\r\n            return new Promise(function (resolve, reject) {\r\n                var responseType = FEATURES.SUPPORT_RESPONSE_TYPE ? 'blob' : 'text';\r\n                var xhr = new XMLHttpRequest();\r\n                xhr.onload = function () {\r\n                    if (xhr.status === 200) {\r\n                        if (responseType === 'text') {\r\n                            resolve(xhr.response);\r\n                        }\r\n                        else {\r\n                            var reader_1 = new FileReader();\r\n                            reader_1.addEventListener('load', function () { return resolve(reader_1.result); }, false);\r\n                            reader_1.addEventListener('error', function (e) { return reject(e); }, false);\r\n                            reader_1.readAsDataURL(xhr.response);\r\n                        }\r\n                    }\r\n                    else {\r\n                        reject(\"Failed to proxy resource \" + key + \" with status code \" + xhr.status);\r\n                    }\r\n                };\r\n                xhr.onerror = reject;\r\n                var queryString = proxy.indexOf('?') > -1 ? '&' : '?';\r\n                xhr.open('GET', \"\" + proxy + queryString + \"url=\" + encodeURIComponent(src) + \"&responseType=\" + responseType);\r\n                if (responseType !== 'text' && xhr instanceof XMLHttpRequest) {\r\n                    xhr.responseType = responseType;\r\n                }\r\n                if (_this._options.imageTimeout) {\r\n                    var timeout_1 = _this._options.imageTimeout;\r\n                    xhr.timeout = timeout_1;\r\n                    xhr.ontimeout = function () { return reject(\"Timed out (\" + timeout_1 + \"ms) proxying \" + key); };\r\n                }\r\n                xhr.send();\r\n            });\r\n        };\r\n        return Cache;\r\n    }());\r\n    var INLINE_SVG = /^data:image\\/svg\\+xml/i;\r\n    var INLINE_BASE64 = /^data:image\\/.*;base64,/i;\r\n    var INLINE_IMG = /^data:image\\/.*/i;\r\n    var isRenderable = function (src) { return FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src); };\r\n    var isInlineImage = function (src) { return INLINE_IMG.test(src); };\r\n    var isInlineBase64Image = function (src) { return INLINE_BASE64.test(src); };\r\n    var isBlobImage = function (src) { return src.substr(0, 4) === 'blob'; };\r\n    var isSVG = function (src) { return src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src); };\n\n    var Vector = /** @class */ (function () {\r\n        function Vector(x, y) {\r\n            this.type = 0 /* VECTOR */;\r\n            this.x = x;\r\n            this.y = y;\r\n        }\r\n        Vector.prototype.add = function (deltaX, deltaY) {\r\n            return new Vector(this.x + deltaX, this.y + deltaY);\r\n        };\r\n        return Vector;\r\n    }());\n\n    var lerp = function (a, b, t) {\r\n        return new Vector(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);\r\n    };\r\n    var BezierCurve = /** @class */ (function () {\r\n        function BezierCurve(start, startControl, endControl, end) {\r\n            this.type = 1 /* BEZIER_CURVE */;\r\n            this.start = start;\r\n            this.startControl = startControl;\r\n            this.endControl = endControl;\r\n            this.end = end;\r\n        }\r\n        BezierCurve.prototype.subdivide = function (t, firstHalf) {\r\n            var ab = lerp(this.start, this.startControl, t);\r\n            var bc = lerp(this.startControl, this.endControl, t);\r\n            var cd = lerp(this.endControl, this.end, t);\r\n            var abbc = lerp(ab, bc, t);\r\n            var bccd = lerp(bc, cd, t);\r\n            var dest = lerp(abbc, bccd, t);\r\n            return firstHalf ? new BezierCurve(this.start, ab, abbc, dest) : new BezierCurve(dest, bccd, cd, this.end);\r\n        };\r\n        BezierCurve.prototype.add = function (deltaX, deltaY) {\r\n            return new BezierCurve(this.start.add(deltaX, deltaY), this.startControl.add(deltaX, deltaY), this.endControl.add(deltaX, deltaY), this.end.add(deltaX, deltaY));\r\n        };\r\n        BezierCurve.prototype.reverse = function () {\r\n            return new BezierCurve(this.end, this.endControl, this.startControl, this.start);\r\n        };\r\n        return BezierCurve;\r\n    }());\r\n    var isBezierCurve = function (path) { return path.type === 1 /* BEZIER_CURVE */; };\n\n    var BoundCurves = /** @class */ (function () {\r\n        function BoundCurves(element) {\r\n            var styles = element.styles;\r\n            var bounds = element.bounds;\r\n            var _a = getAbsoluteValueForTuple(styles.borderTopLeftRadius, bounds.width, bounds.height), tlh = _a[0], tlv = _a[1];\r\n            var _b = getAbsoluteValueForTuple(styles.borderTopRightRadius, bounds.width, bounds.height), trh = _b[0], trv = _b[1];\r\n            var _c = getAbsoluteValueForTuple(styles.borderBottomRightRadius, bounds.width, bounds.height), brh = _c[0], brv = _c[1];\r\n            var _d = getAbsoluteValueForTuple(styles.borderBottomLeftRadius, bounds.width, bounds.height), blh = _d[0], blv = _d[1];\r\n            var factors = [];\r\n            factors.push((tlh + trh) / bounds.width);\r\n            factors.push((blh + brh) / bounds.width);\r\n            factors.push((tlv + blv) / bounds.height);\r\n            factors.push((trv + brv) / bounds.height);\r\n            var maxFactor = Math.max.apply(Math, factors);\r\n            if (maxFactor > 1) {\r\n                tlh /= maxFactor;\r\n                tlv /= maxFactor;\r\n                trh /= maxFactor;\r\n                trv /= maxFactor;\r\n                brh /= maxFactor;\r\n                brv /= maxFactor;\r\n                blh /= maxFactor;\r\n                blv /= maxFactor;\r\n            }\r\n            var topWidth = bounds.width - trh;\r\n            var rightHeight = bounds.height - brv;\r\n            var bottomWidth = bounds.width - brh;\r\n            var leftHeight = bounds.height - blv;\r\n            var borderTopWidth = styles.borderTopWidth;\r\n            var borderRightWidth = styles.borderRightWidth;\r\n            var borderBottomWidth = styles.borderBottomWidth;\r\n            var borderLeftWidth = styles.borderLeftWidth;\r\n            var paddingTop = getAbsoluteValue(styles.paddingTop, element.bounds.width);\r\n            var paddingRight = getAbsoluteValue(styles.paddingRight, element.bounds.width);\r\n            var paddingBottom = getAbsoluteValue(styles.paddingBottom, element.bounds.width);\r\n            var paddingLeft = getAbsoluteValue(styles.paddingLeft, element.bounds.width);\r\n            this.topLeftBorderDoubleOuterBox =\r\n                tlh > 0 || tlv > 0\r\n                    ? getCurvePoints(bounds.left + borderLeftWidth / 3, bounds.top + borderTopWidth / 3, tlh - borderLeftWidth / 3, tlv - borderTopWidth / 3, CORNER.TOP_LEFT)\r\n                    : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + borderTopWidth / 3);\r\n            this.topRightBorderDoubleOuterBox =\r\n                tlh > 0 || tlv > 0\r\n                    ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth / 3, trh - borderRightWidth / 3, trv - borderTopWidth / 3, CORNER.TOP_RIGHT)\r\n                    : new Vector(bounds.left + bounds.width - borderRightWidth / 3, bounds.top + borderTopWidth / 3);\r\n            this.bottomRightBorderDoubleOuterBox =\r\n                brh > 0 || brv > 0\r\n                    ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth / 3, brv - borderBottomWidth / 3, CORNER.BOTTOM_RIGHT)\r\n                    : new Vector(bounds.left + bounds.width - borderRightWidth / 3, bounds.top + bounds.height - borderBottomWidth / 3);\r\n            this.bottomLeftBorderDoubleOuterBox =\r\n                blh > 0 || blv > 0\r\n                    ? getCurvePoints(bounds.left + borderLeftWidth / 3, bounds.top + leftHeight, blh - borderLeftWidth / 3, blv - borderBottomWidth / 3, CORNER.BOTTOM_LEFT)\r\n                    : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + bounds.height - borderBottomWidth / 3);\r\n            this.topLeftBorderDoubleInnerBox =\r\n                tlh > 0 || tlv > 0\r\n                    ? getCurvePoints(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3, tlh - (borderLeftWidth * 2) / 3, tlv - (borderTopWidth * 2) / 3, CORNER.TOP_LEFT)\r\n                    : new Vector(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3);\r\n            this.topRightBorderDoubleInnerBox =\r\n                tlh > 0 || tlv > 0\r\n                    ? getCurvePoints(bounds.left + topWidth, bounds.top + (borderTopWidth * 2) / 3, trh - (borderRightWidth * 2) / 3, trv - (borderTopWidth * 2) / 3, CORNER.TOP_RIGHT)\r\n                    : new Vector(bounds.left + bounds.width - (borderRightWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3);\r\n            this.bottomRightBorderDoubleInnerBox =\r\n                brh > 0 || brv > 0\r\n                    ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - (borderRightWidth * 2) / 3, brv - (borderBottomWidth * 2) / 3, CORNER.BOTTOM_RIGHT)\r\n                    : new Vector(bounds.left + bounds.width - (borderRightWidth * 2) / 3, bounds.top + bounds.height - (borderBottomWidth * 2) / 3);\r\n            this.bottomLeftBorderDoubleInnerBox =\r\n                blh > 0 || blv > 0\r\n                    ? getCurvePoints(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + leftHeight, blh - (borderLeftWidth * 2) / 3, blv - (borderBottomWidth * 2) / 3, CORNER.BOTTOM_LEFT)\r\n                    : new Vector(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + bounds.height - (borderBottomWidth * 2) / 3);\r\n            this.topLeftBorderStroke =\r\n                tlh > 0 || tlv > 0\r\n                    ? getCurvePoints(bounds.left + borderLeftWidth / 2, bounds.top + borderTopWidth / 2, tlh - borderLeftWidth / 2, tlv - borderTopWidth / 2, CORNER.TOP_LEFT)\r\n                    : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + borderTopWidth / 2);\r\n            this.topRightBorderStroke =\r\n                tlh > 0 || tlv > 0\r\n                    ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth / 2, trh - borderRightWidth / 2, trv - borderTopWidth / 2, CORNER.TOP_RIGHT)\r\n                    : new Vector(bounds.left + bounds.width - borderRightWidth / 2, bounds.top + borderTopWidth / 2);\r\n            this.bottomRightBorderStroke =\r\n                brh > 0 || brv > 0\r\n                    ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth / 2, brv - borderBottomWidth / 2, CORNER.BOTTOM_RIGHT)\r\n                    : new Vector(bounds.left + bounds.width - borderRightWidth / 2, bounds.top + bounds.height - borderBottomWidth / 2);\r\n            this.bottomLeftBorderStroke =\r\n                blh > 0 || blv > 0\r\n                    ? getCurvePoints(bounds.left + borderLeftWidth / 2, bounds.top + leftHeight, blh - borderLeftWidth / 2, blv - borderBottomWidth / 2, CORNER.BOTTOM_LEFT)\r\n                    : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + bounds.height - borderBottomWidth / 2);\r\n            this.topLeftBorderBox =\r\n                tlh > 0 || tlv > 0\r\n                    ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT)\r\n                    : new Vector(bounds.left, bounds.top);\r\n            this.topRightBorderBox =\r\n                trh > 0 || trv > 0\r\n                    ? getCurvePoints(bounds.left + topWidth, bounds.top, trh, trv, CORNER.TOP_RIGHT)\r\n                    : new Vector(bounds.left + bounds.width, bounds.top);\r\n            this.bottomRightBorderBox =\r\n                brh > 0 || brv > 0\r\n                    ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh, brv, CORNER.BOTTOM_RIGHT)\r\n                    : new Vector(bounds.left + bounds.width, bounds.top + bounds.height);\r\n            this.bottomLeftBorderBox =\r\n                blh > 0 || blv > 0\r\n                    ? getCurvePoints(bounds.left, bounds.top + leftHeight, blh, blv, CORNER.BOTTOM_LEFT)\r\n                    : new Vector(bounds.left, bounds.top + bounds.height);\r\n            this.topLeftPaddingBox =\r\n                tlh > 0 || tlv > 0\r\n                    ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + borderTopWidth, Math.max(0, tlh - borderLeftWidth), Math.max(0, tlv - borderTopWidth), CORNER.TOP_LEFT)\r\n                    : new Vector(bounds.left + borderLeftWidth, bounds.top + borderTopWidth);\r\n            this.topRightPaddingBox =\r\n                trh > 0 || trv > 0\r\n                    ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width - borderRightWidth), bounds.top + borderTopWidth, topWidth > bounds.width + borderRightWidth ? 0 : Math.max(0, trh - borderRightWidth), Math.max(0, trv - borderTopWidth), CORNER.TOP_RIGHT)\r\n                    : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + borderTopWidth);\r\n            this.bottomRightPaddingBox =\r\n                brh > 0 || brv > 0\r\n                    ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - borderLeftWidth), bounds.top + Math.min(rightHeight, bounds.height - borderBottomWidth), Math.max(0, brh - borderRightWidth), Math.max(0, brv - borderBottomWidth), CORNER.BOTTOM_RIGHT)\r\n                    : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + bounds.height - borderBottomWidth);\r\n            this.bottomLeftPaddingBox =\r\n                blh > 0 || blv > 0\r\n                    ? getCurvePoints(bounds.left + borderLeftWidth, bounds.top + Math.min(leftHeight, bounds.height - borderBottomWidth), Math.max(0, blh - borderLeftWidth), Math.max(0, blv - borderBottomWidth), CORNER.BOTTOM_LEFT)\r\n                    : new Vector(bounds.left + borderLeftWidth, bounds.top + bounds.height - borderBottomWidth);\r\n            this.topLeftContentBox =\r\n                tlh > 0 || tlv > 0\r\n                    ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop, Math.max(0, tlh - (borderLeftWidth + paddingLeft)), Math.max(0, tlv - (borderTopWidth + paddingTop)), CORNER.TOP_LEFT)\r\n                    : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop);\r\n            this.topRightContentBox =\r\n                trh > 0 || trv > 0\r\n                    ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth + paddingLeft), bounds.top + borderTopWidth + paddingTop, topWidth > bounds.width + borderLeftWidth + paddingLeft ? 0 : trh - borderLeftWidth + paddingLeft, trv - (borderTopWidth + paddingTop), CORNER.TOP_RIGHT)\r\n                    : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + borderTopWidth + paddingTop);\r\n            this.bottomRightContentBox =\r\n                brh > 0 || brv > 0\r\n                    ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - (borderLeftWidth + paddingLeft)), bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth + paddingTop), Math.max(0, brh - (borderRightWidth + paddingRight)), brv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_RIGHT)\r\n                    : new Vector(bounds.left + bounds.width - (borderRightWidth + paddingRight), bounds.top + bounds.height - (borderBottomWidth + paddingBottom));\r\n            this.bottomLeftContentBox =\r\n                blh > 0 || blv > 0\r\n                    ? getCurvePoints(bounds.left + borderLeftWidth + paddingLeft, bounds.top + leftHeight, Math.max(0, blh - (borderLeftWidth + paddingLeft)), blv - (borderBottomWidth + paddingBottom), CORNER.BOTTOM_LEFT)\r\n                    : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + bounds.height - (borderBottomWidth + paddingBottom));\r\n        }\r\n        return BoundCurves;\r\n    }());\r\n    var CORNER;\r\n    (function (CORNER) {\r\n        CORNER[CORNER[\"TOP_LEFT\"] = 0] = \"TOP_LEFT\";\r\n        CORNER[CORNER[\"TOP_RIGHT\"] = 1] = \"TOP_RIGHT\";\r\n        CORNER[CORNER[\"BOTTOM_RIGHT\"] = 2] = \"BOTTOM_RIGHT\";\r\n        CORNER[CORNER[\"BOTTOM_LEFT\"] = 3] = \"BOTTOM_LEFT\";\r\n    })(CORNER || (CORNER = {}));\r\n    var getCurvePoints = function (x, y, r1, r2, position) {\r\n        var kappa = 4 * ((Math.sqrt(2) - 1) / 3);\r\n        var ox = r1 * kappa; // control point offset horizontal\r\n        var oy = r2 * kappa; // control point offset vertical\r\n        var xm = x + r1; // x-middle\r\n        var ym = y + r2; // y-middle\r\n        switch (position) {\r\n            case CORNER.TOP_LEFT:\r\n                return new BezierCurve(new Vector(x, ym), new Vector(x, ym - oy), new Vector(xm - ox, y), new Vector(xm, y));\r\n            case CORNER.TOP_RIGHT:\r\n                return new BezierCurve(new Vector(x, y), new Vector(x + ox, y), new Vector(xm, ym - oy), new Vector(xm, ym));\r\n            case CORNER.BOTTOM_RIGHT:\r\n                return new BezierCurve(new Vector(xm, y), new Vector(xm, y + oy), new Vector(x + ox, ym), new Vector(x, ym));\r\n            case CORNER.BOTTOM_LEFT:\r\n            default:\r\n                return new BezierCurve(new Vector(xm, ym), new Vector(xm - ox, ym), new Vector(x, y + oy), new Vector(x, y));\r\n        }\r\n    };\r\n    var calculateBorderBoxPath = function (curves) {\r\n        return [curves.topLeftBorderBox, curves.topRightBorderBox, curves.bottomRightBorderBox, curves.bottomLeftBorderBox];\r\n    };\r\n    var calculateContentBoxPath = function (curves) {\r\n        return [\r\n            curves.topLeftContentBox,\r\n            curves.topRightContentBox,\r\n            curves.bottomRightContentBox,\r\n            curves.bottomLeftContentBox\r\n        ];\r\n    };\r\n    var calculatePaddingBoxPath = function (curves) {\r\n        return [\r\n            curves.topLeftPaddingBox,\r\n            curves.topRightPaddingBox,\r\n            curves.bottomRightPaddingBox,\r\n            curves.bottomLeftPaddingBox\r\n        ];\r\n    };\n\n    var TransformEffect = /** @class */ (function () {\r\n        function TransformEffect(offsetX, offsetY, matrix) {\r\n            this.offsetX = offsetX;\r\n            this.offsetY = offsetY;\r\n            this.matrix = matrix;\r\n            this.type = 0 /* TRANSFORM */;\r\n            this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */;\r\n        }\r\n        return TransformEffect;\r\n    }());\r\n    var ClipEffect = /** @class */ (function () {\r\n        function ClipEffect(path, target) {\r\n            this.path = path;\r\n            this.target = target;\r\n            this.type = 1 /* CLIP */;\r\n        }\r\n        return ClipEffect;\r\n    }());\r\n    var OpacityEffect = /** @class */ (function () {\r\n        function OpacityEffect(opacity) {\r\n            this.opacity = opacity;\r\n            this.type = 2 /* OPACITY */;\r\n            this.target = 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */;\r\n        }\r\n        return OpacityEffect;\r\n    }());\r\n    var isTransformEffect = function (effect) {\r\n        return effect.type === 0 /* TRANSFORM */;\r\n    };\r\n    var isClipEffect = function (effect) { return effect.type === 1 /* CLIP */; };\r\n    var isOpacityEffect = function (effect) { return effect.type === 2 /* OPACITY */; };\n\n    var equalPath = function (a, b) {\r\n        if (a.length === b.length) {\r\n            return a.some(function (v, i) { return v === b[i]; });\r\n        }\r\n        return false;\r\n    };\r\n    var transformPath = function (path, deltaX, deltaY, deltaW, deltaH) {\r\n        return path.map(function (point, index) {\r\n            switch (index) {\r\n                case 0:\r\n                    return point.add(deltaX, deltaY);\r\n                case 1:\r\n                    return point.add(deltaX + deltaW, deltaY);\r\n                case 2:\r\n                    return point.add(deltaX + deltaW, deltaY + deltaH);\r\n                case 3:\r\n                    return point.add(deltaX, deltaY + deltaH);\r\n            }\r\n            return point;\r\n        });\r\n    };\n\n    var StackingContext = /** @class */ (function () {\r\n        function StackingContext(container) {\r\n            this.element = container;\r\n            this.inlineLevel = [];\r\n            this.nonInlineLevel = [];\r\n            this.negativeZIndex = [];\r\n            this.zeroOrAutoZIndexOrTransformedOrOpacity = [];\r\n            this.positiveZIndex = [];\r\n            this.nonPositionedFloats = [];\r\n            this.nonPositionedInlineLevel = [];\r\n        }\r\n        return StackingContext;\r\n    }());\r\n    var ElementPaint = /** @class */ (function () {\r\n        function ElementPaint(container, parent) {\r\n            this.container = container;\r\n            this.parent = parent;\r\n            this.effects = [];\r\n            this.curves = new BoundCurves(this.container);\r\n            if (this.container.styles.opacity < 1) {\r\n                this.effects.push(new OpacityEffect(this.container.styles.opacity));\r\n            }\r\n            if (this.container.styles.transform !== null) {\r\n                var offsetX = this.container.bounds.left + this.container.styles.transformOrigin[0].number;\r\n                var offsetY = this.container.bounds.top + this.container.styles.transformOrigin[1].number;\r\n                var matrix = this.container.styles.transform;\r\n                this.effects.push(new TransformEffect(offsetX, offsetY, matrix));\r\n            }\r\n            if (this.container.styles.overflowX !== 0 /* VISIBLE */) {\r\n                var borderBox = calculateBorderBoxPath(this.curves);\r\n                var paddingBox = calculatePaddingBoxPath(this.curves);\r\n                if (equalPath(borderBox, paddingBox)) {\r\n                    this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */));\r\n                }\r\n                else {\r\n                    this.effects.push(new ClipEffect(borderBox, 2 /* BACKGROUND_BORDERS */));\r\n                    this.effects.push(new ClipEffect(paddingBox, 4 /* CONTENT */));\r\n                }\r\n            }\r\n        }\r\n        ElementPaint.prototype.getEffects = function (target) {\r\n            var inFlow = [2 /* ABSOLUTE */, 3 /* FIXED */].indexOf(this.container.styles.position) === -1;\r\n            var parent = this.parent;\r\n            var effects = this.effects.slice(0);\r\n            while (parent) {\r\n                var croplessEffects = parent.effects.filter(function (effect) { return !isClipEffect(effect); });\r\n                if (inFlow || parent.container.styles.position !== 0 /* STATIC */ || !parent.parent) {\r\n                    effects.unshift.apply(effects, croplessEffects);\r\n                    inFlow = [2 /* ABSOLUTE */, 3 /* FIXED */].indexOf(parent.container.styles.position) === -1;\r\n                    if (parent.container.styles.overflowX !== 0 /* VISIBLE */) {\r\n                        var borderBox = calculateBorderBoxPath(parent.curves);\r\n                        var paddingBox = calculatePaddingBoxPath(parent.curves);\r\n                        if (!equalPath(borderBox, paddingBox)) {\r\n                            effects.unshift(new ClipEffect(paddingBox, 2 /* BACKGROUND_BORDERS */ | 4 /* CONTENT */));\r\n                        }\r\n                    }\r\n                }\r\n                else {\r\n                    effects.unshift.apply(effects, croplessEffects);\r\n                }\r\n                parent = parent.parent;\r\n            }\r\n            return effects.filter(function (effect) { return contains(effect.target, target); });\r\n        };\r\n        return ElementPaint;\r\n    }());\r\n    var parseStackTree = function (parent, stackingContext, realStackingContext, listItems) {\r\n        parent.container.elements.forEach(function (child) {\r\n            var treatAsRealStackingContext = contains(child.flags, 4 /* CREATES_REAL_STACKING_CONTEXT */);\r\n            var createsStackingContext = contains(child.flags, 2 /* CREATES_STACKING_CONTEXT */);\r\n            var paintContainer = new ElementPaint(child, parent);\r\n            if (contains(child.styles.display, 2048 /* LIST_ITEM */)) {\r\n                listItems.push(paintContainer);\r\n            }\r\n            var listOwnerItems = contains(child.flags, 8 /* IS_LIST_OWNER */) ? [] : listItems;\r\n            if (treatAsRealStackingContext || createsStackingContext) {\r\n                var parentStack = treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext;\r\n                var stack = new StackingContext(paintContainer);\r\n                if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) {\r\n                    var order_1 = child.styles.zIndex.order;\r\n                    if (order_1 < 0) {\r\n                        var index_1 = 0;\r\n                        parentStack.negativeZIndex.some(function (current, i) {\r\n                            if (order_1 > current.element.container.styles.zIndex.order) {\r\n                                index_1 = i;\r\n                                return false;\r\n                            }\r\n                            else if (index_1 > 0) {\r\n                                return true;\r\n                            }\r\n                            return false;\r\n                        });\r\n                        parentStack.negativeZIndex.splice(index_1, 0, stack);\r\n                    }\r\n                    else if (order_1 > 0) {\r\n                        var index_2 = 0;\r\n                        parentStack.positiveZIndex.some(function (current, i) {\r\n                            if (order_1 >= current.element.container.styles.zIndex.order) {\r\n                                index_2 = i + 1;\r\n                                return false;\r\n                            }\r\n                            else if (index_2 > 0) {\r\n                                return true;\r\n                            }\r\n                            return false;\r\n                        });\r\n                        parentStack.positiveZIndex.splice(index_2, 0, stack);\r\n                    }\r\n                    else {\r\n                        parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack);\r\n                    }\r\n                }\r\n                else {\r\n                    if (child.styles.isFloating()) {\r\n                        parentStack.nonPositionedFloats.push(stack);\r\n                    }\r\n                    else {\r\n                        parentStack.nonPositionedInlineLevel.push(stack);\r\n                    }\r\n                }\r\n                parseStackTree(paintContainer, stack, treatAsRealStackingContext ? stack : realStackingContext, listOwnerItems);\r\n            }\r\n            else {\r\n                if (child.styles.isInlineLevel()) {\r\n                    stackingContext.inlineLevel.push(paintContainer);\r\n                }\r\n                else {\r\n                    stackingContext.nonInlineLevel.push(paintContainer);\r\n                }\r\n                parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems);\r\n            }\r\n            if (contains(child.flags, 8 /* IS_LIST_OWNER */)) {\r\n                processListItems(child, listOwnerItems);\r\n            }\r\n        });\r\n    };\r\n    var processListItems = function (owner, elements) {\r\n        var numbering = owner instanceof OLElementContainer ? owner.start : 1;\r\n        var reversed = owner instanceof OLElementContainer ? owner.reversed : false;\r\n        for (var i = 0; i < elements.length; i++) {\r\n            var item = elements[i];\r\n            if (item.container instanceof LIElementContainer &&\r\n                typeof item.container.value === 'number' &&\r\n                item.container.value !== 0) {\r\n                numbering = item.container.value;\r\n            }\r\n            item.listValue = createCounterText(numbering, item.container.styles.listStyleType, true);\r\n            numbering += reversed ? -1 : 1;\r\n        }\r\n    };\r\n    var parseStackingContexts = function (container) {\r\n        var paintContainer = new ElementPaint(container, null);\r\n        var root = new StackingContext(paintContainer);\r\n        var listItems = [];\r\n        parseStackTree(paintContainer, root, root, listItems);\r\n        processListItems(paintContainer.container, listItems);\r\n        return root;\r\n    };\n\n    var parsePathForBorder = function (curves, borderSide) {\r\n        switch (borderSide) {\r\n            case 0:\r\n                return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftPaddingBox, curves.topRightBorderBox, curves.topRightPaddingBox);\r\n            case 1:\r\n                return createPathFromCurves(curves.topRightBorderBox, curves.topRightPaddingBox, curves.bottomRightBorderBox, curves.bottomRightPaddingBox);\r\n            case 2:\r\n                return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox);\r\n            case 3:\r\n            default:\r\n                return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox, curves.topLeftBorderBox, curves.topLeftPaddingBox);\r\n        }\r\n    };\r\n    var parsePathForBorderDoubleOuter = function (curves, borderSide) {\r\n        switch (borderSide) {\r\n            case 0:\r\n                return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftBorderDoubleOuterBox, curves.topRightBorderBox, curves.topRightBorderDoubleOuterBox);\r\n            case 1:\r\n                return createPathFromCurves(curves.topRightBorderBox, curves.topRightBorderDoubleOuterBox, curves.bottomRightBorderBox, curves.bottomRightBorderDoubleOuterBox);\r\n            case 2:\r\n                return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightBorderDoubleOuterBox, curves.bottomLeftBorderBox, curves.bottomLeftBorderDoubleOuterBox);\r\n            case 3:\r\n            default:\r\n                return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftBorderDoubleOuterBox, curves.topLeftBorderBox, curves.topLeftBorderDoubleOuterBox);\r\n        }\r\n    };\r\n    var parsePathForBorderDoubleInner = function (curves, borderSide) {\r\n        switch (borderSide) {\r\n            case 0:\r\n                return createPathFromCurves(curves.topLeftBorderDoubleInnerBox, curves.topLeftPaddingBox, curves.topRightBorderDoubleInnerBox, curves.topRightPaddingBox);\r\n            case 1:\r\n                return createPathFromCurves(curves.topRightBorderDoubleInnerBox, curves.topRightPaddingBox, curves.bottomRightBorderDoubleInnerBox, curves.bottomRightPaddingBox);\r\n            case 2:\r\n                return createPathFromCurves(curves.bottomRightBorderDoubleInnerBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderDoubleInnerBox, curves.bottomLeftPaddingBox);\r\n            case 3:\r\n            default:\r\n                return createPathFromCurves(curves.bottomLeftBorderDoubleInnerBox, curves.bottomLeftPaddingBox, curves.topLeftBorderDoubleInnerBox, curves.topLeftPaddingBox);\r\n        }\r\n    };\r\n    var parsePathForBorderStroke = function (curves, borderSide) {\r\n        switch (borderSide) {\r\n            case 0:\r\n                return createStrokePathFromCurves(curves.topLeftBorderStroke, curves.topRightBorderStroke);\r\n            case 1:\r\n                return createStrokePathFromCurves(curves.topRightBorderStroke, curves.bottomRightBorderStroke);\r\n            case 2:\r\n                return createStrokePathFromCurves(curves.bottomRightBorderStroke, curves.bottomLeftBorderStroke);\r\n            case 3:\r\n            default:\r\n                return createStrokePathFromCurves(curves.bottomLeftBorderStroke, curves.topLeftBorderStroke);\r\n        }\r\n    };\r\n    var createStrokePathFromCurves = function (outer1, outer2) {\r\n        var path = [];\r\n        if (isBezierCurve(outer1)) {\r\n            path.push(outer1.subdivide(0.5, false));\r\n        }\r\n        else {\r\n            path.push(outer1);\r\n        }\r\n        if (isBezierCurve(outer2)) {\r\n            path.push(outer2.subdivide(0.5, true));\r\n        }\r\n        else {\r\n            path.push(outer2);\r\n        }\r\n        return path;\r\n    };\r\n    var createPathFromCurves = function (outer1, inner1, outer2, inner2) {\r\n        var path = [];\r\n        if (isBezierCurve(outer1)) {\r\n            path.push(outer1.subdivide(0.5, false));\r\n        }\r\n        else {\r\n            path.push(outer1);\r\n        }\r\n        if (isBezierCurve(outer2)) {\r\n            path.push(outer2.subdivide(0.5, true));\r\n        }\r\n        else {\r\n            path.push(outer2);\r\n        }\r\n        if (isBezierCurve(inner2)) {\r\n            path.push(inner2.subdivide(0.5, true).reverse());\r\n        }\r\n        else {\r\n            path.push(inner2);\r\n        }\r\n        if (isBezierCurve(inner1)) {\r\n            path.push(inner1.subdivide(0.5, false).reverse());\r\n        }\r\n        else {\r\n            path.push(inner1);\r\n        }\r\n        return path;\r\n    };\n\n    var paddingBox = function (element) {\r\n        var bounds = element.bounds;\r\n        var styles = element.styles;\r\n        return bounds.add(styles.borderLeftWidth, styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth), -(styles.borderTopWidth + styles.borderBottomWidth));\r\n    };\r\n    var contentBox = function (element) {\r\n        var styles = element.styles;\r\n        var bounds = element.bounds;\r\n        var paddingLeft = getAbsoluteValue(styles.paddingLeft, bounds.width);\r\n        var paddingRight = getAbsoluteValue(styles.paddingRight, bounds.width);\r\n        var paddingTop = getAbsoluteValue(styles.paddingTop, bounds.width);\r\n        var paddingBottom = getAbsoluteValue(styles.paddingBottom, bounds.width);\r\n        return bounds.add(paddingLeft + styles.borderLeftWidth, paddingTop + styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft + paddingRight), -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop + paddingBottom));\r\n    };\n\n    var calculateBackgroundPositioningArea = function (backgroundOrigin, element) {\r\n        if (backgroundOrigin === 0 /* BORDER_BOX */) {\r\n            return element.bounds;\r\n        }\r\n        if (backgroundOrigin === 2 /* CONTENT_BOX */) {\r\n            return contentBox(element);\r\n        }\r\n        return paddingBox(element);\r\n    };\r\n    var calculateBackgroundPaintingArea = function (backgroundClip, element) {\r\n        if (backgroundClip === 0 /* BORDER_BOX */) {\r\n            return element.bounds;\r\n        }\r\n        if (backgroundClip === 2 /* CONTENT_BOX */) {\r\n            return contentBox(element);\r\n        }\r\n        return paddingBox(element);\r\n    };\r\n    var calculateBackgroundRendering = function (container, index, intrinsicSize) {\r\n        var backgroundPositioningArea = calculateBackgroundPositioningArea(getBackgroundValueForIndex(container.styles.backgroundOrigin, index), container);\r\n        var backgroundPaintingArea = calculateBackgroundPaintingArea(getBackgroundValueForIndex(container.styles.backgroundClip, index), container);\r\n        var backgroundImageSize = calculateBackgroundSize(getBackgroundValueForIndex(container.styles.backgroundSize, index), intrinsicSize, backgroundPositioningArea);\r\n        var sizeWidth = backgroundImageSize[0], sizeHeight = backgroundImageSize[1];\r\n        var position = getAbsoluteValueForTuple(getBackgroundValueForIndex(container.styles.backgroundPosition, index), backgroundPositioningArea.width - sizeWidth, backgroundPositioningArea.height - sizeHeight);\r\n        var path = calculateBackgroundRepeatPath(getBackgroundValueForIndex(container.styles.backgroundRepeat, index), position, backgroundImageSize, backgroundPositioningArea, backgroundPaintingArea);\r\n        var offsetX = Math.round(backgroundPositioningArea.left + position[0]);\r\n        var offsetY = Math.round(backgroundPositioningArea.top + position[1]);\r\n        return [path, offsetX, offsetY, sizeWidth, sizeHeight];\r\n    };\r\n    var isAuto = function (token) { return isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO; };\r\n    var hasIntrinsicValue = function (value) { return typeof value === 'number'; };\r\n    var calculateBackgroundSize = function (size, _a, bounds) {\r\n        var intrinsicWidth = _a[0], intrinsicHeight = _a[1], intrinsicProportion = _a[2];\r\n        var first = size[0], second = size[1];\r\n        if (!first) {\r\n            return [0, 0];\r\n        }\r\n        if (isLengthPercentage(first) && second && isLengthPercentage(second)) {\r\n            return [getAbsoluteValue(first, bounds.width), getAbsoluteValue(second, bounds.height)];\r\n        }\r\n        var hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion);\r\n        if (isIdentToken(first) && (first.value === BACKGROUND_SIZE.CONTAIN || first.value === BACKGROUND_SIZE.COVER)) {\r\n            if (hasIntrinsicValue(intrinsicProportion)) {\r\n                var targetRatio = bounds.width / bounds.height;\r\n                return targetRatio < intrinsicProportion !== (first.value === BACKGROUND_SIZE.COVER)\r\n                    ? [bounds.width, bounds.width / intrinsicProportion]\r\n                    : [bounds.height * intrinsicProportion, bounds.height];\r\n            }\r\n            return [bounds.width, bounds.height];\r\n        }\r\n        var hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth);\r\n        var hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight);\r\n        var hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight;\r\n        // If the background-size is auto or auto auto:\r\n        if (isAuto(first) && (!second || isAuto(second))) {\r\n            // If the image has both horizontal and vertical intrinsic dimensions, it's rendered at that size.\r\n            if (hasIntrinsicWidth && hasIntrinsicHeight) {\r\n                return [intrinsicWidth, intrinsicHeight];\r\n            }\r\n            // If the image has no intrinsic dimensions and has no intrinsic proportions,\r\n            // it's rendered at the size of the background positioning area.\r\n            if (!hasIntrinsicProportion && !hasIntrinsicDimensions) {\r\n                return [bounds.width, bounds.height];\r\n            }\r\n            // TODO If the image has no intrinsic dimensions but has intrinsic proportions, it's rendered as if contain had been specified instead.\r\n            // If the image has only one intrinsic dimension and has intrinsic proportions, it's rendered at the size corresponding to that one dimension.\r\n            // The other dimension is computed using the specified dimension and the intrinsic proportions.\r\n            if (hasIntrinsicDimensions && hasIntrinsicProportion) {\r\n                var width_1 = hasIntrinsicWidth\r\n                    ? intrinsicWidth\r\n                    : intrinsicHeight * intrinsicProportion;\r\n                var height_1 = hasIntrinsicHeight\r\n                    ? intrinsicHeight\r\n                    : intrinsicWidth / intrinsicProportion;\r\n                return [width_1, height_1];\r\n            }\r\n            // If the image has only one intrinsic dimension but has no intrinsic proportions,\r\n            // it's rendered using the specified dimension and the other dimension of the background positioning area.\r\n            var width_2 = hasIntrinsicWidth ? intrinsicWidth : bounds.width;\r\n            var height_2 = hasIntrinsicHeight ? intrinsicHeight : bounds.height;\r\n            return [width_2, height_2];\r\n        }\r\n        // If the image has intrinsic proportions, it's stretched to the specified dimension.\r\n        // The unspecified dimension is computed using the specified dimension and the intrinsic proportions.\r\n        if (hasIntrinsicProportion) {\r\n            var width_3 = 0;\r\n            var height_3 = 0;\r\n            if (isLengthPercentage(first)) {\r\n                width_3 = getAbsoluteValue(first, bounds.width);\r\n            }\r\n            else if (isLengthPercentage(second)) {\r\n                height_3 = getAbsoluteValue(second, bounds.height);\r\n            }\r\n            if (isAuto(first)) {\r\n                width_3 = height_3 * intrinsicProportion;\r\n            }\r\n            else if (!second || isAuto(second)) {\r\n                height_3 = width_3 / intrinsicProportion;\r\n            }\r\n            return [width_3, height_3];\r\n        }\r\n        // If the image has no intrinsic proportions, it's stretched to the specified dimension.\r\n        // The unspecified dimension is computed using the image's corresponding intrinsic dimension,\r\n        // if there is one. If there is no such intrinsic dimension,\r\n        // it becomes the corresponding dimension of the background positioning area.\r\n        var width = null;\r\n        var height = null;\r\n        if (isLengthPercentage(first)) {\r\n            width = getAbsoluteValue(first, bounds.width);\r\n        }\r\n        else if (second && isLengthPercentage(second)) {\r\n            height = getAbsoluteValue(second, bounds.height);\r\n        }\r\n        if (width !== null && (!second || isAuto(second))) {\r\n            height =\r\n                hasIntrinsicWidth && hasIntrinsicHeight\r\n                    ? (width / intrinsicWidth) * intrinsicHeight\r\n                    : bounds.height;\r\n        }\r\n        if (height !== null && isAuto(first)) {\r\n            width =\r\n                hasIntrinsicWidth && hasIntrinsicHeight\r\n                    ? (height / intrinsicHeight) * intrinsicWidth\r\n                    : bounds.width;\r\n        }\r\n        if (width !== null && height !== null) {\r\n            return [width, height];\r\n        }\r\n        throw new Error(\"Unable to calculate background-size for element\");\r\n    };\r\n    var getBackgroundValueForIndex = function (values, index) {\r\n        var value = values[index];\r\n        if (typeof value === 'undefined') {\r\n            return values[0];\r\n        }\r\n        return value;\r\n    };\r\n    var calculateBackgroundRepeatPath = function (repeat, _a, _b, backgroundPositioningArea, backgroundPaintingArea) {\r\n        var x = _a[0], y = _a[1];\r\n        var width = _b[0], height = _b[1];\r\n        switch (repeat) {\r\n            case 2 /* REPEAT_X */:\r\n                return [\r\n                    new Vector(Math.round(backgroundPositioningArea.left), Math.round(backgroundPositioningArea.top + y)),\r\n                    new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(backgroundPositioningArea.top + y)),\r\n                    new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(height + backgroundPositioningArea.top + y)),\r\n                    new Vector(Math.round(backgroundPositioningArea.left), Math.round(height + backgroundPositioningArea.top + y))\r\n                ];\r\n            case 3 /* REPEAT_Y */:\r\n                return [\r\n                    new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top)),\r\n                    new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top)),\r\n                    new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)),\r\n                    new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top))\r\n                ];\r\n            case 1 /* NO_REPEAT */:\r\n                return [\r\n                    new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y)),\r\n                    new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y)),\r\n                    new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y + height)),\r\n                    new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y + height))\r\n                ];\r\n            default:\r\n                return [\r\n                    new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.top)),\r\n                    new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.top)),\r\n                    new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)),\r\n                    new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top))\r\n                ];\r\n        }\r\n    };\n\n    var SMALL_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n    var SAMPLE_TEXT = 'Hidden Text';\r\n    var FontMetrics = /** @class */ (function () {\r\n        function FontMetrics(document) {\r\n            this._data = {};\r\n            this._document = document;\r\n        }\r\n        FontMetrics.prototype.parseMetrics = function (fontFamily, fontSize) {\r\n            var container = this._document.createElement('div');\r\n            var img = this._document.createElement('img');\r\n            var span = this._document.createElement('span');\r\n            var body = this._document.body;\r\n            container.style.visibility = 'hidden';\r\n            container.style.fontFamily = fontFamily;\r\n            container.style.fontSize = fontSize;\r\n            container.style.margin = '0';\r\n            container.style.padding = '0';\r\n            container.style.whiteSpace = 'nowrap';\r\n            body.appendChild(container);\r\n            img.src = SMALL_IMAGE;\r\n            img.width = 1;\r\n            img.height = 1;\r\n            img.style.margin = '0';\r\n            img.style.padding = '0';\r\n            img.style.verticalAlign = 'baseline';\r\n            span.style.fontFamily = fontFamily;\r\n            span.style.fontSize = fontSize;\r\n            span.style.margin = '0';\r\n            span.style.padding = '0';\r\n            span.appendChild(this._document.createTextNode(SAMPLE_TEXT));\r\n            container.appendChild(span);\r\n            container.appendChild(img);\r\n            var baseline = img.offsetTop - span.offsetTop + 2;\r\n            container.removeChild(span);\r\n            container.appendChild(this._document.createTextNode(SAMPLE_TEXT));\r\n            container.style.lineHeight = 'normal';\r\n            img.style.verticalAlign = 'super';\r\n            var middle = img.offsetTop - container.offsetTop + 2;\r\n            body.removeChild(container);\r\n            return { baseline: baseline, middle: middle };\r\n        };\r\n        FontMetrics.prototype.getMetrics = function (fontFamily, fontSize) {\r\n            var key = fontFamily + \" \" + fontSize;\r\n            if (typeof this._data[key] === 'undefined') {\r\n                this._data[key] = this.parseMetrics(fontFamily, fontSize);\r\n            }\r\n            return this._data[key];\r\n        };\r\n        return FontMetrics;\r\n    }());\n\n    var Renderer = /** @class */ (function () {\r\n        function Renderer(context, options) {\r\n            this.context = context;\r\n            this.options = options;\r\n        }\r\n        return Renderer;\r\n    }());\n\n    var MASK_OFFSET = 10000;\r\n    var CanvasRenderer = /** @class */ (function (_super) {\r\n        __extends(CanvasRenderer, _super);\r\n        function CanvasRenderer(context, options) {\r\n            var _this = _super.call(this, context, options) || this;\r\n            _this._activeEffects = [];\r\n            _this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\r\n            _this.ctx = _this.canvas.getContext('2d');\r\n            if (!options.canvas) {\r\n                _this.canvas.width = Math.floor(options.width * options.scale);\r\n                _this.canvas.height = Math.floor(options.height * options.scale);\r\n                _this.canvas.style.width = options.width + \"px\";\r\n                _this.canvas.style.height = options.height + \"px\";\r\n            }\r\n            _this.fontMetrics = new FontMetrics(document);\r\n            _this.ctx.scale(_this.options.scale, _this.options.scale);\r\n            _this.ctx.translate(-options.x, -options.y);\r\n            _this.ctx.textBaseline = 'bottom';\r\n            _this._activeEffects = [];\r\n            _this.context.logger.debug(\"Canvas renderer initialized (\" + options.width + \"x\" + options.height + \") with scale \" + options.scale);\r\n            return _this;\r\n        }\r\n        CanvasRenderer.prototype.applyEffects = function (effects) {\r\n            var _this = this;\r\n            while (this._activeEffects.length) {\r\n                this.popEffect();\r\n            }\r\n            effects.forEach(function (effect) { return _this.applyEffect(effect); });\r\n        };\r\n        CanvasRenderer.prototype.applyEffect = function (effect) {\r\n            this.ctx.save();\r\n            if (isOpacityEffect(effect)) {\r\n                this.ctx.globalAlpha = effect.opacity;\r\n            }\r\n            if (isTransformEffect(effect)) {\r\n                this.ctx.translate(effect.offsetX, effect.offsetY);\r\n                this.ctx.transform(effect.matrix[0], effect.matrix[1], effect.matrix[2], effect.matrix[3], effect.matrix[4], effect.matrix[5]);\r\n                this.ctx.translate(-effect.offsetX, -effect.offsetY);\r\n            }\r\n            if (isClipEffect(effect)) {\r\n                this.path(effect.path);\r\n                this.ctx.clip();\r\n            }\r\n            this._activeEffects.push(effect);\r\n        };\r\n        CanvasRenderer.prototype.popEffect = function () {\r\n            this._activeEffects.pop();\r\n            this.ctx.restore();\r\n        };\r\n        CanvasRenderer.prototype.renderStack = function (stack) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                var styles;\r\n                return __generator(this, function (_a) {\r\n                    switch (_a.label) {\r\n                        case 0:\r\n                            styles = stack.element.container.styles;\r\n                            if (!styles.isVisible()) return [3 /*break*/, 2];\r\n                            return [4 /*yield*/, this.renderStackContent(stack)];\r\n                        case 1:\r\n                            _a.sent();\r\n                            _a.label = 2;\r\n                        case 2: return [2 /*return*/];\r\n                    }\r\n                });\r\n            });\r\n        };\r\n        CanvasRenderer.prototype.renderNode = function (paint) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                return __generator(this, function (_a) {\r\n                    switch (_a.label) {\r\n                        case 0:\r\n                            if (contains(paint.container.flags, 16 /* DEBUG_RENDER */)) {\r\n                                debugger;\r\n                            }\r\n                            if (!paint.container.styles.isVisible()) return [3 /*break*/, 3];\r\n                            return [4 /*yield*/, this.renderNodeBackgroundAndBorders(paint)];\r\n                        case 1:\r\n                            _a.sent();\r\n                            return [4 /*yield*/, this.renderNodeContent(paint)];\r\n                        case 2:\r\n                            _a.sent();\r\n                            _a.label = 3;\r\n                        case 3: return [2 /*return*/];\r\n                    }\r\n                });\r\n            });\r\n        };\r\n        CanvasRenderer.prototype.renderTextWithLetterSpacing = function (text, letterSpacing, baseline) {\r\n            var _this = this;\r\n            if (letterSpacing === 0) {\r\n                this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + baseline);\r\n            }\r\n            else {\r\n                var letters = segmentGraphemes(text.text);\r\n                letters.reduce(function (left, letter) {\r\n                    _this.ctx.fillText(letter, left, text.bounds.top + baseline);\r\n                    return left + _this.ctx.measureText(letter).width;\r\n                }, text.bounds.left);\r\n            }\r\n        };\r\n        CanvasRenderer.prototype.createFontStyle = function (styles) {\r\n            var fontVariant = styles.fontVariant\r\n                .filter(function (variant) { return variant === 'normal' || variant === 'small-caps'; })\r\n                .join('');\r\n            var fontFamily = fixIOSSystemFonts(styles.fontFamily).join(', ');\r\n            var fontSize = isDimensionToken(styles.fontSize)\r\n                ? \"\" + styles.fontSize.number + styles.fontSize.unit\r\n                : styles.fontSize.number + \"px\";\r\n            return [\r\n                [styles.fontStyle, fontVariant, styles.fontWeight, fontSize, fontFamily].join(' '),\r\n                fontFamily,\r\n                fontSize\r\n            ];\r\n        };\r\n        CanvasRenderer.prototype.renderTextNode = function (text, styles) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                var _a, font, fontFamily, fontSize, _b, baseline, middle, paintOrder;\r\n                var _this = this;\r\n                return __generator(this, function (_c) {\r\n                    _a = this.createFontStyle(styles), font = _a[0], fontFamily = _a[1], fontSize = _a[2];\r\n                    this.ctx.font = font;\r\n                    this.ctx.direction = styles.direction === 1 /* RTL */ ? 'rtl' : 'ltr';\r\n                    this.ctx.textAlign = 'left';\r\n                    this.ctx.textBaseline = 'alphabetic';\r\n                    _b = this.fontMetrics.getMetrics(fontFamily, fontSize), baseline = _b.baseline, middle = _b.middle;\r\n                    paintOrder = styles.paintOrder;\r\n                    text.textBounds.forEach(function (text) {\r\n                        paintOrder.forEach(function (paintOrderLayer) {\r\n                            switch (paintOrderLayer) {\r\n                                case 0 /* FILL */:\r\n                                    _this.ctx.fillStyle = asString(styles.color);\r\n                                    _this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline);\r\n                                    var textShadows = styles.textShadow;\r\n                                    if (textShadows.length && text.text.trim().length) {\r\n                                        textShadows\r\n                                            .slice(0)\r\n                                            .reverse()\r\n                                            .forEach(function (textShadow) {\r\n                                            _this.ctx.shadowColor = asString(textShadow.color);\r\n                                            _this.ctx.shadowOffsetX = textShadow.offsetX.number * _this.options.scale;\r\n                                            _this.ctx.shadowOffsetY = textShadow.offsetY.number * _this.options.scale;\r\n                                            _this.ctx.shadowBlur = textShadow.blur.number;\r\n                                            _this.renderTextWithLetterSpacing(text, styles.letterSpacing, baseline);\r\n                                        });\r\n                                        _this.ctx.shadowColor = '';\r\n                                        _this.ctx.shadowOffsetX = 0;\r\n                                        _this.ctx.shadowOffsetY = 0;\r\n                                        _this.ctx.shadowBlur = 0;\r\n                                    }\r\n                                    if (styles.textDecorationLine.length) {\r\n                                        _this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color);\r\n                                        styles.textDecorationLine.forEach(function (textDecorationLine) {\r\n                                            switch (textDecorationLine) {\r\n                                                case 1 /* UNDERLINE */:\r\n                                                    // Draws a line at the baseline of the font\r\n                                                    // TODO As some browsers display the line as more than 1px if the font-size is big,\r\n                                                    // need to take that into account both in position and size\r\n                                                    _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top + baseline), text.bounds.width, 1);\r\n                                                    break;\r\n                                                case 2 /* OVERLINE */:\r\n                                                    _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top), text.bounds.width, 1);\r\n                                                    break;\r\n                                                case 3 /* LINE_THROUGH */:\r\n                                                    // TODO try and find exact position for line-through\r\n                                                    _this.ctx.fillRect(text.bounds.left, Math.ceil(text.bounds.top + middle), text.bounds.width, 1);\r\n                                                    break;\r\n                                            }\r\n                                        });\r\n                                    }\r\n                                    break;\r\n                                case 1 /* STROKE */:\r\n                                    if (styles.webkitTextStrokeWidth && text.text.trim().length) {\r\n                                        _this.ctx.strokeStyle = asString(styles.webkitTextStrokeColor);\r\n                                        _this.ctx.lineWidth = styles.webkitTextStrokeWidth;\r\n                                        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                                        _this.ctx.lineJoin = !!window.chrome ? 'miter' : 'round';\r\n                                        _this.ctx.strokeText(text.text, text.bounds.left, text.bounds.top + baseline);\r\n                                    }\r\n                                    _this.ctx.strokeStyle = '';\r\n                                    _this.ctx.lineWidth = 0;\r\n                                    _this.ctx.lineJoin = 'miter';\r\n                                    break;\r\n                            }\r\n                        });\r\n                    });\r\n                    return [2 /*return*/];\r\n                });\r\n            });\r\n        };\r\n        CanvasRenderer.prototype.renderReplacedElement = function (container, curves, image) {\r\n            if (image && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) {\r\n                var box = contentBox(container);\r\n                var path = calculatePaddingBoxPath(curves);\r\n                this.path(path);\r\n                this.ctx.save();\r\n                this.ctx.clip();\r\n                this.ctx.drawImage(image, 0, 0, container.intrinsicWidth, container.intrinsicHeight, box.left, box.top, box.width, box.height);\r\n                this.ctx.restore();\r\n            }\r\n        };\r\n        CanvasRenderer.prototype.renderNodeContent = function (paint) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                var container, curves, styles, _i, _a, child, image, image, iframeRenderer, canvas, size, _b, fontFamily, fontSize, baseline, bounds, x, textBounds, img, image, url, fontFamily, bounds;\r\n                return __generator(this, function (_c) {\r\n                    switch (_c.label) {\r\n                        case 0:\r\n                            this.applyEffects(paint.getEffects(4 /* CONTENT */));\r\n                            container = paint.container;\r\n                            curves = paint.curves;\r\n                            styles = container.styles;\r\n                            _i = 0, _a = container.textNodes;\r\n                            _c.label = 1;\r\n                        case 1:\r\n                            if (!(_i < _a.length)) return [3 /*break*/, 4];\r\n                            child = _a[_i];\r\n                            return [4 /*yield*/, this.renderTextNode(child, styles)];\r\n                        case 2:\r\n                            _c.sent();\r\n                            _c.label = 3;\r\n                        case 3:\r\n                            _i++;\r\n                            return [3 /*break*/, 1];\r\n                        case 4:\r\n                            if (!(container instanceof ImageElementContainer)) return [3 /*break*/, 8];\r\n                            _c.label = 5;\r\n                        case 5:\r\n                            _c.trys.push([5, 7, , 8]);\r\n                            return [4 /*yield*/, this.context.cache.match(container.src)];\r\n                        case 6:\r\n                            image = _c.sent();\r\n                            this.renderReplacedElement(container, curves, image);\r\n                            return [3 /*break*/, 8];\r\n                        case 7:\r\n                            _c.sent();\r\n                            this.context.logger.error(\"Error loading image \" + container.src);\r\n                            return [3 /*break*/, 8];\r\n                        case 8:\r\n                            if (container instanceof CanvasElementContainer) {\r\n                                this.renderReplacedElement(container, curves, container.canvas);\r\n                            }\r\n                            if (!(container instanceof SVGElementContainer)) return [3 /*break*/, 12];\r\n                            _c.label = 9;\r\n                        case 9:\r\n                            _c.trys.push([9, 11, , 12]);\r\n                            return [4 /*yield*/, this.context.cache.match(container.svg)];\r\n                        case 10:\r\n                            image = _c.sent();\r\n                            this.renderReplacedElement(container, curves, image);\r\n                            return [3 /*break*/, 12];\r\n                        case 11:\r\n                            _c.sent();\r\n                            this.context.logger.error(\"Error loading svg \" + container.svg.substring(0, 255));\r\n                            return [3 /*break*/, 12];\r\n                        case 12:\r\n                            if (!(container instanceof IFrameElementContainer && container.tree)) return [3 /*break*/, 14];\r\n                            iframeRenderer = new CanvasRenderer(this.context, {\r\n                                scale: this.options.scale,\r\n                                backgroundColor: container.backgroundColor,\r\n                                x: 0,\r\n                                y: 0,\r\n                                width: container.width,\r\n                                height: container.height\r\n                            });\r\n                            return [4 /*yield*/, iframeRenderer.render(container.tree)];\r\n                        case 13:\r\n                            canvas = _c.sent();\r\n                            if (container.width && container.height) {\r\n                                this.ctx.drawImage(canvas, 0, 0, container.width, container.height, container.bounds.left, container.bounds.top, container.bounds.width, container.bounds.height);\r\n                            }\r\n                            _c.label = 14;\r\n                        case 14:\r\n                            if (container instanceof InputElementContainer) {\r\n                                size = Math.min(container.bounds.width, container.bounds.height);\r\n                                if (container.type === CHECKBOX) {\r\n                                    if (container.checked) {\r\n                                        this.ctx.save();\r\n                                        this.path([\r\n                                            new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79),\r\n                                            new Vector(container.bounds.left + size * 0.16, container.bounds.top + size * 0.5549),\r\n                                            new Vector(container.bounds.left + size * 0.27347, container.bounds.top + size * 0.44071),\r\n                                            new Vector(container.bounds.left + size * 0.39694, container.bounds.top + size * 0.5649),\r\n                                            new Vector(container.bounds.left + size * 0.72983, container.bounds.top + size * 0.23),\r\n                                            new Vector(container.bounds.left + size * 0.84, container.bounds.top + size * 0.34085),\r\n                                            new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79)\r\n                                        ]);\r\n                                        this.ctx.fillStyle = asString(INPUT_COLOR);\r\n                                        this.ctx.fill();\r\n                                        this.ctx.restore();\r\n                                    }\r\n                                }\r\n                                else if (container.type === RADIO) {\r\n                                    if (container.checked) {\r\n                                        this.ctx.save();\r\n                                        this.ctx.beginPath();\r\n                                        this.ctx.arc(container.bounds.left + size / 2, container.bounds.top + size / 2, size / 4, 0, Math.PI * 2, true);\r\n                                        this.ctx.fillStyle = asString(INPUT_COLOR);\r\n                                        this.ctx.fill();\r\n                                        this.ctx.restore();\r\n                                    }\r\n                                }\r\n                            }\r\n                            if (isTextInputElement(container) && container.value.length) {\r\n                                _b = this.createFontStyle(styles), fontFamily = _b[0], fontSize = _b[1];\r\n                                baseline = this.fontMetrics.getMetrics(fontFamily, fontSize).baseline;\r\n                                this.ctx.font = fontFamily;\r\n                                this.ctx.fillStyle = asString(styles.color);\r\n                                this.ctx.textBaseline = 'alphabetic';\r\n                                this.ctx.textAlign = canvasTextAlign(container.styles.textAlign);\r\n                                bounds = contentBox(container);\r\n                                x = 0;\r\n                                switch (container.styles.textAlign) {\r\n                                    case 1 /* CENTER */:\r\n                                        x += bounds.width / 2;\r\n                                        break;\r\n                                    case 2 /* RIGHT */:\r\n                                        x += bounds.width;\r\n                                        break;\r\n                                }\r\n                                textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1);\r\n                                this.ctx.save();\r\n                                this.path([\r\n                                    new Vector(bounds.left, bounds.top),\r\n                                    new Vector(bounds.left + bounds.width, bounds.top),\r\n                                    new Vector(bounds.left + bounds.width, bounds.top + bounds.height),\r\n                                    new Vector(bounds.left, bounds.top + bounds.height)\r\n                                ]);\r\n                                this.ctx.clip();\r\n                                this.renderTextWithLetterSpacing(new TextBounds(container.value, textBounds), styles.letterSpacing, baseline);\r\n                                this.ctx.restore();\r\n                                this.ctx.textBaseline = 'alphabetic';\r\n                                this.ctx.textAlign = 'left';\r\n                            }\r\n                            if (!contains(container.styles.display, 2048 /* LIST_ITEM */)) return [3 /*break*/, 20];\r\n                            if (!(container.styles.listStyleImage !== null)) return [3 /*break*/, 19];\r\n                            img = container.styles.listStyleImage;\r\n                            if (!(img.type === 0 /* URL */)) return [3 /*break*/, 18];\r\n                            image = void 0;\r\n                            url = img.url;\r\n                            _c.label = 15;\r\n                        case 15:\r\n                            _c.trys.push([15, 17, , 18]);\r\n                            return [4 /*yield*/, this.context.cache.match(url)];\r\n                        case 16:\r\n                            image = _c.sent();\r\n                            this.ctx.drawImage(image, container.bounds.left - (image.width + 10), container.bounds.top);\r\n                            return [3 /*break*/, 18];\r\n                        case 17:\r\n                            _c.sent();\r\n                            this.context.logger.error(\"Error loading list-style-image \" + url);\r\n                            return [3 /*break*/, 18];\r\n                        case 18: return [3 /*break*/, 20];\r\n                        case 19:\r\n                            if (paint.listValue && container.styles.listStyleType !== -1 /* NONE */) {\r\n                                fontFamily = this.createFontStyle(styles)[0];\r\n                                this.ctx.font = fontFamily;\r\n                                this.ctx.fillStyle = asString(styles.color);\r\n                                this.ctx.textBaseline = 'middle';\r\n                                this.ctx.textAlign = 'right';\r\n                                bounds = new Bounds(container.bounds.left, container.bounds.top + getAbsoluteValue(container.styles.paddingTop, container.bounds.width), container.bounds.width, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 1);\r\n                                this.renderTextWithLetterSpacing(new TextBounds(paint.listValue, bounds), styles.letterSpacing, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 2);\r\n                                this.ctx.textBaseline = 'bottom';\r\n                                this.ctx.textAlign = 'left';\r\n                            }\r\n                            _c.label = 20;\r\n                        case 20: return [2 /*return*/];\r\n                    }\r\n                });\r\n            });\r\n        };\r\n        CanvasRenderer.prototype.renderStackContent = function (stack) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                var _i, _a, child, _b, _c, child, _d, _e, child, _f, _g, child, _h, _j, child, _k, _l, child, _m, _o, child;\r\n                return __generator(this, function (_p) {\r\n                    switch (_p.label) {\r\n                        case 0:\r\n                            if (contains(stack.element.container.flags, 16 /* DEBUG_RENDER */)) {\r\n                                debugger;\r\n                            }\r\n                            // https://www.w3.org/TR/css-position-3/#painting-order\r\n                            // 1. the background and borders of the element forming the stacking context.\r\n                            return [4 /*yield*/, this.renderNodeBackgroundAndBorders(stack.element)];\r\n                        case 1:\r\n                            // https://www.w3.org/TR/css-position-3/#painting-order\r\n                            // 1. the background and borders of the element forming the stacking context.\r\n                            _p.sent();\r\n                            _i = 0, _a = stack.negativeZIndex;\r\n                            _p.label = 2;\r\n                        case 2:\r\n                            if (!(_i < _a.length)) return [3 /*break*/, 5];\r\n                            child = _a[_i];\r\n                            return [4 /*yield*/, this.renderStack(child)];\r\n                        case 3:\r\n                            _p.sent();\r\n                            _p.label = 4;\r\n                        case 4:\r\n                            _i++;\r\n                            return [3 /*break*/, 2];\r\n                        case 5: \r\n                        // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\r\n                        return [4 /*yield*/, this.renderNodeContent(stack.element)];\r\n                        case 6:\r\n                            // 3. For all its in-flow, non-positioned, block-level descendants in tree order:\r\n                            _p.sent();\r\n                            _b = 0, _c = stack.nonInlineLevel;\r\n                            _p.label = 7;\r\n                        case 7:\r\n                            if (!(_b < _c.length)) return [3 /*break*/, 10];\r\n                            child = _c[_b];\r\n                            return [4 /*yield*/, this.renderNode(child)];\r\n                        case 8:\r\n                            _p.sent();\r\n                            _p.label = 9;\r\n                        case 9:\r\n                            _b++;\r\n                            return [3 /*break*/, 7];\r\n                        case 10:\r\n                            _d = 0, _e = stack.nonPositionedFloats;\r\n                            _p.label = 11;\r\n                        case 11:\r\n                            if (!(_d < _e.length)) return [3 /*break*/, 14];\r\n                            child = _e[_d];\r\n                            return [4 /*yield*/, this.renderStack(child)];\r\n                        case 12:\r\n                            _p.sent();\r\n                            _p.label = 13;\r\n                        case 13:\r\n                            _d++;\r\n                            return [3 /*break*/, 11];\r\n                        case 14:\r\n                            _f = 0, _g = stack.nonPositionedInlineLevel;\r\n                            _p.label = 15;\r\n                        case 15:\r\n                            if (!(_f < _g.length)) return [3 /*break*/, 18];\r\n                            child = _g[_f];\r\n                            return [4 /*yield*/, this.renderStack(child)];\r\n                        case 16:\r\n                            _p.sent();\r\n                            _p.label = 17;\r\n                        case 17:\r\n                            _f++;\r\n                            return [3 /*break*/, 15];\r\n                        case 18:\r\n                            _h = 0, _j = stack.inlineLevel;\r\n                            _p.label = 19;\r\n                        case 19:\r\n                            if (!(_h < _j.length)) return [3 /*break*/, 22];\r\n                            child = _j[_h];\r\n                            return [4 /*yield*/, this.renderNode(child)];\r\n                        case 20:\r\n                            _p.sent();\r\n                            _p.label = 21;\r\n                        case 21:\r\n                            _h++;\r\n                            return [3 /*break*/, 19];\r\n                        case 22:\r\n                            _k = 0, _l = stack.zeroOrAutoZIndexOrTransformedOrOpacity;\r\n                            _p.label = 23;\r\n                        case 23:\r\n                            if (!(_k < _l.length)) return [3 /*break*/, 26];\r\n                            child = _l[_k];\r\n                            return [4 /*yield*/, this.renderStack(child)];\r\n                        case 24:\r\n                            _p.sent();\r\n                            _p.label = 25;\r\n                        case 25:\r\n                            _k++;\r\n                            return [3 /*break*/, 23];\r\n                        case 26:\r\n                            _m = 0, _o = stack.positiveZIndex;\r\n                            _p.label = 27;\r\n                        case 27:\r\n                            if (!(_m < _o.length)) return [3 /*break*/, 30];\r\n                            child = _o[_m];\r\n                            return [4 /*yield*/, this.renderStack(child)];\r\n                        case 28:\r\n                            _p.sent();\r\n                            _p.label = 29;\r\n                        case 29:\r\n                            _m++;\r\n                            return [3 /*break*/, 27];\r\n                        case 30: return [2 /*return*/];\r\n                    }\r\n                });\r\n            });\r\n        };\r\n        CanvasRenderer.prototype.mask = function (paths) {\r\n            this.ctx.beginPath();\r\n            this.ctx.moveTo(0, 0);\r\n            this.ctx.lineTo(this.canvas.width, 0);\r\n            this.ctx.lineTo(this.canvas.width, this.canvas.height);\r\n            this.ctx.lineTo(0, this.canvas.height);\r\n            this.ctx.lineTo(0, 0);\r\n            this.formatPath(paths.slice(0).reverse());\r\n            this.ctx.closePath();\r\n        };\r\n        CanvasRenderer.prototype.path = function (paths) {\r\n            this.ctx.beginPath();\r\n            this.formatPath(paths);\r\n            this.ctx.closePath();\r\n        };\r\n        CanvasRenderer.prototype.formatPath = function (paths) {\r\n            var _this = this;\r\n            paths.forEach(function (point, index) {\r\n                var start = isBezierCurve(point) ? point.start : point;\r\n                if (index === 0) {\r\n                    _this.ctx.moveTo(start.x, start.y);\r\n                }\r\n                else {\r\n                    _this.ctx.lineTo(start.x, start.y);\r\n                }\r\n                if (isBezierCurve(point)) {\r\n                    _this.ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y);\r\n                }\r\n            });\r\n        };\r\n        CanvasRenderer.prototype.renderRepeat = function (path, pattern, offsetX, offsetY) {\r\n            this.path(path);\r\n            this.ctx.fillStyle = pattern;\r\n            this.ctx.translate(offsetX, offsetY);\r\n            this.ctx.fill();\r\n            this.ctx.translate(-offsetX, -offsetY);\r\n        };\r\n        CanvasRenderer.prototype.resizeImage = function (image, width, height) {\r\n            var _a;\r\n            if (image.width === width && image.height === height) {\r\n                return image;\r\n            }\r\n            var ownerDocument = (_a = this.canvas.ownerDocument) !== null && _a !== void 0 ? _a : document;\r\n            var canvas = ownerDocument.createElement('canvas');\r\n            canvas.width = Math.max(1, width);\r\n            canvas.height = Math.max(1, height);\r\n            var ctx = canvas.getContext('2d');\r\n            ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, width, height);\r\n            return canvas;\r\n        };\r\n        CanvasRenderer.prototype.renderBackgroundImage = function (container) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                var index, _loop_1, this_1, _i, _a, backgroundImage;\r\n                return __generator(this, function (_b) {\r\n                    switch (_b.label) {\r\n                        case 0:\r\n                            index = container.styles.backgroundImage.length - 1;\r\n                            _loop_1 = function (backgroundImage) {\r\n                                var image, url, _c, path, x, y, width, height, pattern, _d, path, x, y, width, height, _e, lineLength, x0, x1, y0, y1, canvas, ctx, gradient_1, pattern, _f, path, left, top_1, width, height, position, x, y, _g, rx, ry, radialGradient_1, midX, midY, f, invF;\r\n                                return __generator(this, function (_h) {\r\n                                    switch (_h.label) {\r\n                                        case 0:\r\n                                            if (!(backgroundImage.type === 0 /* URL */)) return [3 /*break*/, 5];\r\n                                            image = void 0;\r\n                                            url = backgroundImage.url;\r\n                                            _h.label = 1;\r\n                                        case 1:\r\n                                            _h.trys.push([1, 3, , 4]);\r\n                                            return [4 /*yield*/, this_1.context.cache.match(url)];\r\n                                        case 2:\r\n                                            image = _h.sent();\r\n                                            return [3 /*break*/, 4];\r\n                                        case 3:\r\n                                            _h.sent();\r\n                                            this_1.context.logger.error(\"Error loading background-image \" + url);\r\n                                            return [3 /*break*/, 4];\r\n                                        case 4:\r\n                                            if (image) {\r\n                                                _c = calculateBackgroundRendering(container, index, [\r\n                                                    image.width,\r\n                                                    image.height,\r\n                                                    image.width / image.height\r\n                                                ]), path = _c[0], x = _c[1], y = _c[2], width = _c[3], height = _c[4];\r\n                                                pattern = this_1.ctx.createPattern(this_1.resizeImage(image, width, height), 'repeat');\r\n                                                this_1.renderRepeat(path, pattern, x, y);\r\n                                            }\r\n                                            return [3 /*break*/, 6];\r\n                                        case 5:\r\n                                            if (isLinearGradient(backgroundImage)) {\r\n                                                _d = calculateBackgroundRendering(container, index, [null, null, null]), path = _d[0], x = _d[1], y = _d[2], width = _d[3], height = _d[4];\r\n                                                _e = calculateGradientDirection(backgroundImage.angle, width, height), lineLength = _e[0], x0 = _e[1], x1 = _e[2], y0 = _e[3], y1 = _e[4];\r\n                                                canvas = document.createElement('canvas');\r\n                                                canvas.width = width;\r\n                                                canvas.height = height;\r\n                                                ctx = canvas.getContext('2d');\r\n                                                gradient_1 = ctx.createLinearGradient(x0, y0, x1, y1);\r\n                                                processColorStops(backgroundImage.stops, lineLength).forEach(function (colorStop) {\r\n                                                    return gradient_1.addColorStop(colorStop.stop, asString(colorStop.color));\r\n                                                });\r\n                                                ctx.fillStyle = gradient_1;\r\n                                                ctx.fillRect(0, 0, width, height);\r\n                                                if (width > 0 && height > 0) {\r\n                                                    pattern = this_1.ctx.createPattern(canvas, 'repeat');\r\n                                                    this_1.renderRepeat(path, pattern, x, y);\r\n                                                }\r\n                                            }\r\n                                            else if (isRadialGradient(backgroundImage)) {\r\n                                                _f = calculateBackgroundRendering(container, index, [\r\n                                                    null,\r\n                                                    null,\r\n                                                    null\r\n                                                ]), path = _f[0], left = _f[1], top_1 = _f[2], width = _f[3], height = _f[4];\r\n                                                position = backgroundImage.position.length === 0 ? [FIFTY_PERCENT] : backgroundImage.position;\r\n                                                x = getAbsoluteValue(position[0], width);\r\n                                                y = getAbsoluteValue(position[position.length - 1], height);\r\n                                                _g = calculateRadius(backgroundImage, x, y, width, height), rx = _g[0], ry = _g[1];\r\n                                                if (rx > 0 && ry > 0) {\r\n                                                    radialGradient_1 = this_1.ctx.createRadialGradient(left + x, top_1 + y, 0, left + x, top_1 + y, rx);\r\n                                                    processColorStops(backgroundImage.stops, rx * 2).forEach(function (colorStop) {\r\n                                                        return radialGradient_1.addColorStop(colorStop.stop, asString(colorStop.color));\r\n                                                    });\r\n                                                    this_1.path(path);\r\n                                                    this_1.ctx.fillStyle = radialGradient_1;\r\n                                                    if (rx !== ry) {\r\n                                                        midX = container.bounds.left + 0.5 * container.bounds.width;\r\n                                                        midY = container.bounds.top + 0.5 * container.bounds.height;\r\n                                                        f = ry / rx;\r\n                                                        invF = 1 / f;\r\n                                                        this_1.ctx.save();\r\n                                                        this_1.ctx.translate(midX, midY);\r\n                                                        this_1.ctx.transform(1, 0, 0, f, 0, 0);\r\n                                                        this_1.ctx.translate(-midX, -midY);\r\n                                                        this_1.ctx.fillRect(left, invF * (top_1 - midY) + midY, width, height * invF);\r\n                                                        this_1.ctx.restore();\r\n                                                    }\r\n                                                    else {\r\n                                                        this_1.ctx.fill();\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                            _h.label = 6;\r\n                                        case 6:\r\n                                            index--;\r\n                                            return [2 /*return*/];\r\n                                    }\r\n                                });\r\n                            };\r\n                            this_1 = this;\r\n                            _i = 0, _a = container.styles.backgroundImage.slice(0).reverse();\r\n                            _b.label = 1;\r\n                        case 1:\r\n                            if (!(_i < _a.length)) return [3 /*break*/, 4];\r\n                            backgroundImage = _a[_i];\r\n                            return [5 /*yield**/, _loop_1(backgroundImage)];\r\n                        case 2:\r\n                            _b.sent();\r\n                            _b.label = 3;\r\n                        case 3:\r\n                            _i++;\r\n                            return [3 /*break*/, 1];\r\n                        case 4: return [2 /*return*/];\r\n                    }\r\n                });\r\n            });\r\n        };\r\n        CanvasRenderer.prototype.renderSolidBorder = function (color, side, curvePoints) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                return __generator(this, function (_a) {\r\n                    this.path(parsePathForBorder(curvePoints, side));\r\n                    this.ctx.fillStyle = asString(color);\r\n                    this.ctx.fill();\r\n                    return [2 /*return*/];\r\n                });\r\n            });\r\n        };\r\n        CanvasRenderer.prototype.renderDoubleBorder = function (color, width, side, curvePoints) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                var outerPaths, innerPaths;\r\n                return __generator(this, function (_a) {\r\n                    switch (_a.label) {\r\n                        case 0:\r\n                            if (!(width < 3)) return [3 /*break*/, 2];\r\n                            return [4 /*yield*/, this.renderSolidBorder(color, side, curvePoints)];\r\n                        case 1:\r\n                            _a.sent();\r\n                            return [2 /*return*/];\r\n                        case 2:\r\n                            outerPaths = parsePathForBorderDoubleOuter(curvePoints, side);\r\n                            this.path(outerPaths);\r\n                            this.ctx.fillStyle = asString(color);\r\n                            this.ctx.fill();\r\n                            innerPaths = parsePathForBorderDoubleInner(curvePoints, side);\r\n                            this.path(innerPaths);\r\n                            this.ctx.fill();\r\n                            return [2 /*return*/];\r\n                    }\r\n                });\r\n            });\r\n        };\r\n        CanvasRenderer.prototype.renderNodeBackgroundAndBorders = function (paint) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                var styles, hasBackground, borders, backgroundPaintingArea, side, _i, borders_1, border;\r\n                var _this = this;\r\n                return __generator(this, function (_a) {\r\n                    switch (_a.label) {\r\n                        case 0:\r\n                            this.applyEffects(paint.getEffects(2 /* BACKGROUND_BORDERS */));\r\n                            styles = paint.container.styles;\r\n                            hasBackground = !isTransparent(styles.backgroundColor) || styles.backgroundImage.length;\r\n                            borders = [\r\n                                { style: styles.borderTopStyle, color: styles.borderTopColor, width: styles.borderTopWidth },\r\n                                { style: styles.borderRightStyle, color: styles.borderRightColor, width: styles.borderRightWidth },\r\n                                { style: styles.borderBottomStyle, color: styles.borderBottomColor, width: styles.borderBottomWidth },\r\n                                { style: styles.borderLeftStyle, color: styles.borderLeftColor, width: styles.borderLeftWidth }\r\n                            ];\r\n                            backgroundPaintingArea = calculateBackgroundCurvedPaintingArea(getBackgroundValueForIndex(styles.backgroundClip, 0), paint.curves);\r\n                            if (!(hasBackground || styles.boxShadow.length)) return [3 /*break*/, 2];\r\n                            this.ctx.save();\r\n                            this.path(backgroundPaintingArea);\r\n                            this.ctx.clip();\r\n                            if (!isTransparent(styles.backgroundColor)) {\r\n                                this.ctx.fillStyle = asString(styles.backgroundColor);\r\n                                this.ctx.fill();\r\n                            }\r\n                            return [4 /*yield*/, this.renderBackgroundImage(paint.container)];\r\n                        case 1:\r\n                            _a.sent();\r\n                            this.ctx.restore();\r\n                            styles.boxShadow\r\n                                .slice(0)\r\n                                .reverse()\r\n                                .forEach(function (shadow) {\r\n                                _this.ctx.save();\r\n                                var borderBoxArea = calculateBorderBoxPath(paint.curves);\r\n                                var maskOffset = shadow.inset ? 0 : MASK_OFFSET;\r\n                                var shadowPaintingArea = transformPath(borderBoxArea, -maskOffset + (shadow.inset ? 1 : -1) * shadow.spread.number, (shadow.inset ? 1 : -1) * shadow.spread.number, shadow.spread.number * (shadow.inset ? -2 : 2), shadow.spread.number * (shadow.inset ? -2 : 2));\r\n                                if (shadow.inset) {\r\n                                    _this.path(borderBoxArea);\r\n                                    _this.ctx.clip();\r\n                                    _this.mask(shadowPaintingArea);\r\n                                }\r\n                                else {\r\n                                    _this.mask(borderBoxArea);\r\n                                    _this.ctx.clip();\r\n                                    _this.path(shadowPaintingArea);\r\n                                }\r\n                                _this.ctx.shadowOffsetX = shadow.offsetX.number + maskOffset;\r\n                                _this.ctx.shadowOffsetY = shadow.offsetY.number;\r\n                                _this.ctx.shadowColor = asString(shadow.color);\r\n                                _this.ctx.shadowBlur = shadow.blur.number;\r\n                                _this.ctx.fillStyle = shadow.inset ? asString(shadow.color) : 'rgba(0,0,0,1)';\r\n                                _this.ctx.fill();\r\n                                _this.ctx.restore();\r\n                            });\r\n                            _a.label = 2;\r\n                        case 2:\r\n                            side = 0;\r\n                            _i = 0, borders_1 = borders;\r\n                            _a.label = 3;\r\n                        case 3:\r\n                            if (!(_i < borders_1.length)) return [3 /*break*/, 13];\r\n                            border = borders_1[_i];\r\n                            if (!(border.style !== 0 /* NONE */ && !isTransparent(border.color) && border.width > 0)) return [3 /*break*/, 11];\r\n                            if (!(border.style === 2 /* DASHED */)) return [3 /*break*/, 5];\r\n                            return [4 /*yield*/, this.renderDashedDottedBorder(border.color, border.width, side, paint.curves, 2 /* DASHED */)];\r\n                        case 4:\r\n                            _a.sent();\r\n                            return [3 /*break*/, 11];\r\n                        case 5:\r\n                            if (!(border.style === 3 /* DOTTED */)) return [3 /*break*/, 7];\r\n                            return [4 /*yield*/, this.renderDashedDottedBorder(border.color, border.width, side, paint.curves, 3 /* DOTTED */)];\r\n                        case 6:\r\n                            _a.sent();\r\n                            return [3 /*break*/, 11];\r\n                        case 7:\r\n                            if (!(border.style === 4 /* DOUBLE */)) return [3 /*break*/, 9];\r\n                            return [4 /*yield*/, this.renderDoubleBorder(border.color, border.width, side, paint.curves)];\r\n                        case 8:\r\n                            _a.sent();\r\n                            return [3 /*break*/, 11];\r\n                        case 9: return [4 /*yield*/, this.renderSolidBorder(border.color, side, paint.curves)];\r\n                        case 10:\r\n                            _a.sent();\r\n                            _a.label = 11;\r\n                        case 11:\r\n                            side++;\r\n                            _a.label = 12;\r\n                        case 12:\r\n                            _i++;\r\n                            return [3 /*break*/, 3];\r\n                        case 13: return [2 /*return*/];\r\n                    }\r\n                });\r\n            });\r\n        };\r\n        CanvasRenderer.prototype.renderDashedDottedBorder = function (color, width, side, curvePoints, style) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                var strokePaths, boxPaths, startX, startY, endX, endY, length, dashLength, spaceLength, useLineDash, multiplier, numberOfDashes, minSpace, maxSpace, path1, path2, path1, path2;\r\n                return __generator(this, function (_a) {\r\n                    this.ctx.save();\r\n                    strokePaths = parsePathForBorderStroke(curvePoints, side);\r\n                    boxPaths = parsePathForBorder(curvePoints, side);\r\n                    if (style === 2 /* DASHED */) {\r\n                        this.path(boxPaths);\r\n                        this.ctx.clip();\r\n                    }\r\n                    if (isBezierCurve(boxPaths[0])) {\r\n                        startX = boxPaths[0].start.x;\r\n                        startY = boxPaths[0].start.y;\r\n                    }\r\n                    else {\r\n                        startX = boxPaths[0].x;\r\n                        startY = boxPaths[0].y;\r\n                    }\r\n                    if (isBezierCurve(boxPaths[1])) {\r\n                        endX = boxPaths[1].end.x;\r\n                        endY = boxPaths[1].end.y;\r\n                    }\r\n                    else {\r\n                        endX = boxPaths[1].x;\r\n                        endY = boxPaths[1].y;\r\n                    }\r\n                    if (side === 0 || side === 2) {\r\n                        length = Math.abs(startX - endX);\r\n                    }\r\n                    else {\r\n                        length = Math.abs(startY - endY);\r\n                    }\r\n                    this.ctx.beginPath();\r\n                    if (style === 3 /* DOTTED */) {\r\n                        this.formatPath(strokePaths);\r\n                    }\r\n                    else {\r\n                        this.formatPath(boxPaths.slice(0, 2));\r\n                    }\r\n                    dashLength = width < 3 ? width * 3 : width * 2;\r\n                    spaceLength = width < 3 ? width * 2 : width;\r\n                    if (style === 3 /* DOTTED */) {\r\n                        dashLength = width;\r\n                        spaceLength = width;\r\n                    }\r\n                    useLineDash = true;\r\n                    if (length <= dashLength * 2) {\r\n                        useLineDash = false;\r\n                    }\r\n                    else if (length <= dashLength * 2 + spaceLength) {\r\n                        multiplier = length / (2 * dashLength + spaceLength);\r\n                        dashLength *= multiplier;\r\n                        spaceLength *= multiplier;\r\n                    }\r\n                    else {\r\n                        numberOfDashes = Math.floor((length + spaceLength) / (dashLength + spaceLength));\r\n                        minSpace = (length - numberOfDashes * dashLength) / (numberOfDashes - 1);\r\n                        maxSpace = (length - (numberOfDashes + 1) * dashLength) / numberOfDashes;\r\n                        spaceLength =\r\n                            maxSpace <= 0 || Math.abs(spaceLength - minSpace) < Math.abs(spaceLength - maxSpace)\r\n                                ? minSpace\r\n                                : maxSpace;\r\n                    }\r\n                    if (useLineDash) {\r\n                        if (style === 3 /* DOTTED */) {\r\n                            this.ctx.setLineDash([0, dashLength + spaceLength]);\r\n                        }\r\n                        else {\r\n                            this.ctx.setLineDash([dashLength, spaceLength]);\r\n                        }\r\n                    }\r\n                    if (style === 3 /* DOTTED */) {\r\n                        this.ctx.lineCap = 'round';\r\n                        this.ctx.lineWidth = width;\r\n                    }\r\n                    else {\r\n                        this.ctx.lineWidth = width * 2 + 1.1;\r\n                    }\r\n                    this.ctx.strokeStyle = asString(color);\r\n                    this.ctx.stroke();\r\n                    this.ctx.setLineDash([]);\r\n                    // dashed round edge gap\r\n                    if (style === 2 /* DASHED */) {\r\n                        if (isBezierCurve(boxPaths[0])) {\r\n                            path1 = boxPaths[3];\r\n                            path2 = boxPaths[0];\r\n                            this.ctx.beginPath();\r\n                            this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]);\r\n                            this.ctx.stroke();\r\n                        }\r\n                        if (isBezierCurve(boxPaths[1])) {\r\n                            path1 = boxPaths[1];\r\n                            path2 = boxPaths[2];\r\n                            this.ctx.beginPath();\r\n                            this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]);\r\n                            this.ctx.stroke();\r\n                        }\r\n                    }\r\n                    this.ctx.restore();\r\n                    return [2 /*return*/];\r\n                });\r\n            });\r\n        };\r\n        CanvasRenderer.prototype.render = function (element) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                var stack;\r\n                return __generator(this, function (_a) {\r\n                    switch (_a.label) {\r\n                        case 0:\r\n                            if (this.options.backgroundColor) {\r\n                                this.ctx.fillStyle = asString(this.options.backgroundColor);\r\n                                this.ctx.fillRect(this.options.x, this.options.y, this.options.width, this.options.height);\r\n                            }\r\n                            stack = parseStackingContexts(element);\r\n                            return [4 /*yield*/, this.renderStack(stack)];\r\n                        case 1:\r\n                            _a.sent();\r\n                            this.applyEffects([]);\r\n                            return [2 /*return*/, this.canvas];\r\n                    }\r\n                });\r\n            });\r\n        };\r\n        return CanvasRenderer;\r\n    }(Renderer));\r\n    var isTextInputElement = function (container) {\r\n        if (container instanceof TextareaElementContainer) {\r\n            return true;\r\n        }\r\n        else if (container instanceof SelectElementContainer) {\r\n            return true;\r\n        }\r\n        else if (container instanceof InputElementContainer && container.type !== RADIO && container.type !== CHECKBOX) {\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    var calculateBackgroundCurvedPaintingArea = function (clip, curves) {\r\n        switch (clip) {\r\n            case 0 /* BORDER_BOX */:\r\n                return calculateBorderBoxPath(curves);\r\n            case 2 /* CONTENT_BOX */:\r\n                return calculateContentBoxPath(curves);\r\n            case 1 /* PADDING_BOX */:\r\n            default:\r\n                return calculatePaddingBoxPath(curves);\r\n        }\r\n    };\r\n    var canvasTextAlign = function (textAlign) {\r\n        switch (textAlign) {\r\n            case 1 /* CENTER */:\r\n                return 'center';\r\n            case 2 /* RIGHT */:\r\n                return 'right';\r\n            case 0 /* LEFT */:\r\n            default:\r\n                return 'left';\r\n        }\r\n    };\r\n    // see https://github.com/niklasvh/html2canvas/pull/2645\r\n    var iOSBrokenFonts = ['-apple-system', 'system-ui'];\r\n    var fixIOSSystemFonts = function (fontFamilies) {\r\n        return /iPhone OS 15_(0|1)/.test(window.navigator.userAgent)\r\n            ? fontFamilies.filter(function (fontFamily) { return iOSBrokenFonts.indexOf(fontFamily) === -1; })\r\n            : fontFamilies;\r\n    };\n\n    var ForeignObjectRenderer = /** @class */ (function (_super) {\r\n        __extends(ForeignObjectRenderer, _super);\r\n        function ForeignObjectRenderer(context, options) {\r\n            var _this = _super.call(this, context, options) || this;\r\n            _this.canvas = options.canvas ? options.canvas : document.createElement('canvas');\r\n            _this.ctx = _this.canvas.getContext('2d');\r\n            _this.options = options;\r\n            _this.canvas.width = Math.floor(options.width * options.scale);\r\n            _this.canvas.height = Math.floor(options.height * options.scale);\r\n            _this.canvas.style.width = options.width + \"px\";\r\n            _this.canvas.style.height = options.height + \"px\";\r\n            _this.ctx.scale(_this.options.scale, _this.options.scale);\r\n            _this.ctx.translate(-options.x, -options.y);\r\n            _this.context.logger.debug(\"EXPERIMENTAL ForeignObject renderer initialized (\" + options.width + \"x\" + options.height + \" at \" + options.x + \",\" + options.y + \") with scale \" + options.scale);\r\n            return _this;\r\n        }\r\n        ForeignObjectRenderer.prototype.render = function (element) {\r\n            return __awaiter(this, void 0, void 0, function () {\r\n                var svg, img;\r\n                return __generator(this, function (_a) {\r\n                    switch (_a.label) {\r\n                        case 0:\r\n                            svg = createForeignObjectSVG(this.options.width * this.options.scale, this.options.height * this.options.scale, this.options.scale, this.options.scale, element);\r\n                            return [4 /*yield*/, loadSerializedSVG(svg)];\r\n                        case 1:\r\n                            img = _a.sent();\r\n                            if (this.options.backgroundColor) {\r\n                                this.ctx.fillStyle = asString(this.options.backgroundColor);\r\n                                this.ctx.fillRect(0, 0, this.options.width * this.options.scale, this.options.height * this.options.scale);\r\n                            }\r\n                            this.ctx.drawImage(img, -this.options.x * this.options.scale, -this.options.y * this.options.scale);\r\n                            return [2 /*return*/, this.canvas];\r\n                    }\r\n                });\r\n            });\r\n        };\r\n        return ForeignObjectRenderer;\r\n    }(Renderer));\r\n    var loadSerializedSVG = function (svg) {\r\n        return new Promise(function (resolve, reject) {\r\n            var img = new Image();\r\n            img.onload = function () {\r\n                resolve(img);\r\n            };\r\n            img.onerror = reject;\r\n            img.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(new XMLSerializer().serializeToString(svg));\r\n        });\r\n    };\n\n    var Logger = /** @class */ (function () {\r\n        function Logger(_a) {\r\n            var id = _a.id, enabled = _a.enabled;\r\n            this.id = id;\r\n            this.enabled = enabled;\r\n            this.start = Date.now();\r\n        }\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        Logger.prototype.debug = function () {\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments[_i];\r\n            }\r\n            if (this.enabled) {\r\n                // eslint-disable-next-line no-console\r\n                if (typeof window !== 'undefined' && window.console && typeof console.debug === 'function') {\r\n                    // eslint-disable-next-line no-console\r\n                    console.debug.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\r\n                }\r\n                else {\r\n                    this.info.apply(this, args);\r\n                }\r\n            }\r\n        };\r\n        Logger.prototype.getTime = function () {\r\n            return Date.now() - this.start;\r\n        };\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        Logger.prototype.info = function () {\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments[_i];\r\n            }\r\n            if (this.enabled) {\r\n                // eslint-disable-next-line no-console\r\n                if (typeof window !== 'undefined' && window.console && typeof console.info === 'function') {\r\n                    // eslint-disable-next-line no-console\r\n                    console.info.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\r\n                }\r\n            }\r\n        };\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        Logger.prototype.warn = function () {\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments[_i];\r\n            }\r\n            if (this.enabled) {\r\n                // eslint-disable-next-line no-console\r\n                if (typeof window !== 'undefined' && window.console && typeof console.warn === 'function') {\r\n                    // eslint-disable-next-line no-console\r\n                    console.warn.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\r\n                }\r\n                else {\r\n                    this.info.apply(this, args);\r\n                }\r\n            }\r\n        };\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        Logger.prototype.error = function () {\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments[_i];\r\n            }\r\n            if (this.enabled) {\r\n                // eslint-disable-next-line no-console\r\n                if (typeof window !== 'undefined' && window.console && typeof console.error === 'function') {\r\n                    // eslint-disable-next-line no-console\r\n                    console.error.apply(console, __spreadArray([this.id, this.getTime() + \"ms\"], args));\r\n                }\r\n                else {\r\n                    this.info.apply(this, args);\r\n                }\r\n            }\r\n        };\r\n        Logger.instances = {};\r\n        return Logger;\r\n    }());\n\n    var Context = /** @class */ (function () {\r\n        function Context(options, windowBounds) {\r\n            var _a;\r\n            this.windowBounds = windowBounds;\r\n            this.instanceName = \"#\" + Context.instanceCount++;\r\n            this.logger = new Logger({ id: this.instanceName, enabled: options.logging });\r\n            this.cache = (_a = options.cache) !== null && _a !== void 0 ? _a : new Cache(this, options);\r\n        }\r\n        Context.instanceCount = 1;\r\n        return Context;\r\n    }());\n\n    var html2canvas = function (element, options) {\r\n        if (options === void 0) { options = {}; }\r\n        return renderElement(element, options);\r\n    };\r\n    if (typeof window !== 'undefined') {\r\n        CacheStorage.setContext(window);\r\n    }\r\n    var renderElement = function (element, opts) { return __awaiter(void 0, void 0, void 0, function () {\r\n        var ownerDocument, defaultView, resourceOptions, contextOptions, windowOptions, windowBounds, context, foreignObjectRendering, cloneOptions, documentCloner, clonedElement, container, _a, width, height, left, top, backgroundColor, renderOptions, canvas, renderer, root, renderer;\r\n        var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;\r\n        return __generator(this, function (_u) {\r\n            switch (_u.label) {\r\n                case 0:\r\n                    if (!element || typeof element !== 'object') {\r\n                        return [2 /*return*/, Promise.reject('Invalid element provided as first argument')];\r\n                    }\r\n                    ownerDocument = element.ownerDocument;\r\n                    if (!ownerDocument) {\r\n                        throw new Error(\"Element is not attached to a Document\");\r\n                    }\r\n                    defaultView = ownerDocument.defaultView;\r\n                    if (!defaultView) {\r\n                        throw new Error(\"Document is not attached to a Window\");\r\n                    }\r\n                    resourceOptions = {\r\n                        allowTaint: (_b = opts.allowTaint) !== null && _b !== void 0 ? _b : false,\r\n                        imageTimeout: (_c = opts.imageTimeout) !== null && _c !== void 0 ? _c : 15000,\r\n                        proxy: opts.proxy,\r\n                        useCORS: (_d = opts.useCORS) !== null && _d !== void 0 ? _d : false\r\n                    };\r\n                    contextOptions = __assign({ logging: (_e = opts.logging) !== null && _e !== void 0 ? _e : true, cache: opts.cache }, resourceOptions);\r\n                    windowOptions = {\r\n                        windowWidth: (_f = opts.windowWidth) !== null && _f !== void 0 ? _f : defaultView.innerWidth,\r\n                        windowHeight: (_g = opts.windowHeight) !== null && _g !== void 0 ? _g : defaultView.innerHeight,\r\n                        scrollX: (_h = opts.scrollX) !== null && _h !== void 0 ? _h : defaultView.pageXOffset,\r\n                        scrollY: (_j = opts.scrollY) !== null && _j !== void 0 ? _j : defaultView.pageYOffset\r\n                    };\r\n                    windowBounds = new Bounds(windowOptions.scrollX, windowOptions.scrollY, windowOptions.windowWidth, windowOptions.windowHeight);\r\n                    context = new Context(contextOptions, windowBounds);\r\n                    foreignObjectRendering = (_k = opts.foreignObjectRendering) !== null && _k !== void 0 ? _k : false;\r\n                    cloneOptions = {\r\n                        allowTaint: (_l = opts.allowTaint) !== null && _l !== void 0 ? _l : false,\r\n                        onclone: opts.onclone,\r\n                        ignoreElements: opts.ignoreElements,\r\n                        inlineImages: foreignObjectRendering,\r\n                        copyStyles: foreignObjectRendering\r\n                    };\r\n                    context.logger.debug(\"Starting document clone with size \" + windowBounds.width + \"x\" + windowBounds.height + \" scrolled to \" + -windowBounds.left + \",\" + -windowBounds.top);\r\n                    documentCloner = new DocumentCloner(context, element, cloneOptions);\r\n                    clonedElement = documentCloner.clonedReferenceElement;\r\n                    if (!clonedElement) {\r\n                        return [2 /*return*/, Promise.reject(\"Unable to find element in cloned iframe\")];\r\n                    }\r\n                    return [4 /*yield*/, documentCloner.toIFrame(ownerDocument, windowBounds)];\r\n                case 1:\r\n                    container = _u.sent();\r\n                    _a = isBodyElement(clonedElement) || isHTMLElement(clonedElement)\r\n                        ? parseDocumentSize(clonedElement.ownerDocument)\r\n                        : parseBounds(context, clonedElement), width = _a.width, height = _a.height, left = _a.left, top = _a.top;\r\n                    backgroundColor = parseBackgroundColor(context, clonedElement, opts.backgroundColor);\r\n                    renderOptions = {\r\n                        canvas: opts.canvas,\r\n                        backgroundColor: backgroundColor,\r\n                        scale: (_o = (_m = opts.scale) !== null && _m !== void 0 ? _m : defaultView.devicePixelRatio) !== null && _o !== void 0 ? _o : 1,\r\n                        x: ((_p = opts.x) !== null && _p !== void 0 ? _p : 0) + left,\r\n                        y: ((_q = opts.y) !== null && _q !== void 0 ? _q : 0) + top,\r\n                        width: (_r = opts.width) !== null && _r !== void 0 ? _r : Math.ceil(width),\r\n                        height: (_s = opts.height) !== null && _s !== void 0 ? _s : Math.ceil(height)\r\n                    };\r\n                    if (!foreignObjectRendering) return [3 /*break*/, 3];\r\n                    context.logger.debug(\"Document cloned, using foreign object rendering\");\r\n                    renderer = new ForeignObjectRenderer(context, renderOptions);\r\n                    return [4 /*yield*/, renderer.render(clonedElement)];\r\n                case 2:\r\n                    canvas = _u.sent();\r\n                    return [3 /*break*/, 5];\r\n                case 3:\r\n                    context.logger.debug(\"Document cloned, element located at \" + left + \",\" + top + \" with size \" + width + \"x\" + height + \" using computed rendering\");\r\n                    context.logger.debug(\"Starting DOM parsing\");\r\n                    root = parseTree(context, clonedElement);\r\n                    if (backgroundColor === root.styles.backgroundColor) {\r\n                        root.styles.backgroundColor = COLORS.TRANSPARENT;\r\n                    }\r\n                    context.logger.debug(\"Starting renderer for element at \" + renderOptions.x + \",\" + renderOptions.y + \" with size \" + renderOptions.width + \"x\" + renderOptions.height);\r\n                    renderer = new CanvasRenderer(context, renderOptions);\r\n                    return [4 /*yield*/, renderer.render(root)];\r\n                case 4:\r\n                    canvas = _u.sent();\r\n                    _u.label = 5;\r\n                case 5:\r\n                    if ((_t = opts.removeContainer) !== null && _t !== void 0 ? _t : true) {\r\n                        if (!DocumentCloner.destroy(container)) {\r\n                            context.logger.error(\"Cannot detach cloned iframe as it is not in the DOM anymore\");\r\n                        }\r\n                    }\r\n                    context.logger.debug(\"Finished rendering\");\r\n                    return [2 /*return*/, canvas];\r\n            }\r\n        });\r\n    }); };\r\n    var parseBackgroundColor = function (context, element, backgroundColorOverride) {\r\n        var ownerDocument = element.ownerDocument;\r\n        // http://www.w3.org/TR/css3-background/#special-backgrounds\r\n        var documentBackgroundColor = ownerDocument.documentElement\r\n            ? parseColor(context, getComputedStyle(ownerDocument.documentElement).backgroundColor)\r\n            : COLORS.TRANSPARENT;\r\n        var bodyBackgroundColor = ownerDocument.body\r\n            ? parseColor(context, getComputedStyle(ownerDocument.body).backgroundColor)\r\n            : COLORS.TRANSPARENT;\r\n        var defaultBackgroundColor = typeof backgroundColorOverride === 'string'\r\n            ? parseColor(context, backgroundColorOverride)\r\n            : backgroundColorOverride === null\r\n                ? COLORS.TRANSPARENT\r\n                : 0xffffffff;\r\n        return element === ownerDocument.documentElement\r\n            ? isTransparent(documentBackgroundColor)\r\n                ? isTransparent(bodyBackgroundColor)\r\n                    ? defaultBackgroundColor\r\n                    : bodyBackgroundColor\r\n                : documentBackgroundColor\r\n            : defaultBackgroundColor;\r\n    };\n\n    return html2canvas;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcz82ZGJlIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL2xheW91dC9ib3VuZHMudHM/YWVmYSIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3NyYy9VdGlsLnRzP2Y2NTAiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy9jc3MtbGluZS1icmVhay9ub2RlX21vZHVsZXMvc3JjL1V0aWwudHM/YzM4MyIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL2Nzcy1saW5lLWJyZWFrL25vZGVfbW9kdWxlcy9zcmMvVHJpZS50cz9lNzhhIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvY3NzLWxpbmUtYnJlYWsvbm9kZV9tb2R1bGVzL3V0cmllL25vZGVfbW9kdWxlcy9zcmMvaW5kZXgudHM/OWJjOCIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3NyYy9saW5lYnJlYWstdHJpZS50cz8zODBhIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvc3JjL0xpbmVCcmVhay50cz9mZWMzIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3N5bnRheC90b2tlbml6ZXIudHM/YzlkMSIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9zeW50YXgvcGFyc2VyLnRzPzQ2YTgiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jc3MvdHlwZXMvbGVuZ3RoLnRzP2I5YmQiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jc3MvdHlwZXMvbGVuZ3RoLXBlcmNlbnRhZ2UudHM/ZjJjZCIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy90eXBlcy9hbmdsZS50cz9hMDk3Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3R5cGVzL2NvbG9yLnRzP2FkMTkiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvYmFja2dyb3VuZC1jbGlwLnRzPzBkMWEiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvYmFja2dyb3VuZC1jb2xvci50cz8xYzZjIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3R5cGVzL2Z1bmN0aW9ucy9ncmFkaWVudC50cz83YjVjIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3R5cGVzL2Z1bmN0aW9ucy9saW5lYXItZ3JhZGllbnQudHM/MGU1NCIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy90eXBlcy9mdW5jdGlvbnMvLXByZWZpeC1saW5lYXItZ3JhZGllbnQudHM/MzFjZSIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy90eXBlcy9mdW5jdGlvbnMvLXdlYmtpdC1ncmFkaWVudC50cz8xZjk4Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3R5cGVzL2Z1bmN0aW9ucy9yYWRpYWwtZ3JhZGllbnQudHM/OTU3MSIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy90eXBlcy9mdW5jdGlvbnMvLXByZWZpeC1yYWRpYWwtZ3JhZGllbnQudHM/MTUxMiIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy90eXBlcy9pbWFnZS50cz81NzNmIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JhY2tncm91bmQtaW1hZ2UudHM/MTkzMCIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9iYWNrZ3JvdW5kLW9yaWdpbi50cz82Y2Q0Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JhY2tncm91bmQtcG9zaXRpb24udHM/N2FjNiIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9iYWNrZ3JvdW5kLXJlcGVhdC50cz8yYTNkIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JhY2tncm91bmQtc2l6ZS50cz9mNzNjIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JvcmRlci1jb2xvci50cz9kYWQyIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JvcmRlci1yYWRpdXMudHM/N2JjNCIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9ib3JkZXItc3R5bGUudHM/NmFiYiIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9ib3JkZXItd2lkdGgudHM/MDQxZSIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9jb2xvci50cz82M2ZjIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2RpcmVjdGlvbi50cz82YTE2Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2Rpc3BsYXkudHM/N2Y3YiIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9mbG9hdC50cz80ODY0Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2xldHRlci1zcGFjaW5nLnRzPzBjNDEiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvbGluZS1icmVhay50cz9iYjZlIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2xpbmUtaGVpZ2h0LnRzP2M5NzQiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvbGlzdC1zdHlsZS1pbWFnZS50cz9hNWI2Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2xpc3Qtc3R5bGUtcG9zaXRpb24udHM/MDhmZSIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9saXN0LXN0eWxlLXR5cGUudHM/NWM5YyIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9tYXJnaW4udHM/YTBlYyIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9vdmVyZmxvdy50cz8wN2ZjIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL292ZXJmbG93LXdyYXAudHM/OGVhMyIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9wYWRkaW5nLnRzP2RlOTciLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvdGV4dC1hbGlnbi50cz9hMzM3Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3Bvc2l0aW9uLnRzP2RlYmMiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvdGV4dC1zaGFkb3cudHM/NGY3OCIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy90ZXh0LXRyYW5zZm9ybS50cz9iYmQ0Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3RyYW5zZm9ybS50cz81Zjk4Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3RyYW5zZm9ybS1vcmlnaW4udHM/MzAzMyIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy92aXNpYmlsaXR5LnRzP2NmNDUiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvd29yZC1icmVhay50cz9mZGJlIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3otaW5kZXgudHM/OGVmYyIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy90eXBlcy90aW1lLnRzP2Q3N2UiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvb3BhY2l0eS50cz9mZmNkIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3RleHQtZGVjb3JhdGlvbi1jb2xvci50cz8zMzE0Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3RleHQtZGVjb3JhdGlvbi1saW5lLnRzPzBjNzEiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvZm9udC1mYW1pbHkudHM/OWIyNCIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9mb250LXNpemUudHM/ZGZhYSIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9mb250LXdlaWdodC50cz9jMzI4Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2ZvbnQtdmFyaWFudC50cz80ZjUwIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2ZvbnQtc3R5bGUudHM/YjUwYiIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2NvcmUvYml0d2lzZS50cz9jOTk4Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2NvbnRlbnQudHM/YWVkYiIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9jb3VudGVyLWluY3JlbWVudC50cz9mMmM4Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2NvdW50ZXItcmVzZXQudHM/ZGYxNyIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9kdXJhdGlvbi50cz9lZWM4Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3F1b3Rlcy50cz84NWEyIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JveC1zaGFkb3cudHM/N2ZhMSIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9wYWludC1vcmRlci50cz9kNmE3Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3dlYmtpdC10ZXh0LXN0cm9rZS1jb2xvci50cz85OTM5Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3dlYmtpdC10ZXh0LXN0cm9rZS13aWR0aC50cz8xMGNkIiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL2luZGV4LnRzP2U2YTQiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jb3JlL2RlYnVnZ2VyLnRzPzhkMDgiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9kb20vZWxlbWVudC1jb250YWluZXIudHM/YTgxMiIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3NyYy9ncmFwaGVtZS1icmVhay10cmllLnRzPzNlYzAiLCJ3ZWJwYWNrOi8vLy4uL25vZGVfbW9kdWxlcy90ZXh0LXNlZ21lbnRhdGlvbi9ub2RlX21vZHVsZXMvc3JjL1V0aWwudHM/ZTUzNiIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3RleHQtc2VnbWVudGF0aW9uL25vZGVfbW9kdWxlcy9zcmMvVHJpZS50cz8xMDlmIiwid2VicGFjazovLy8uLi9ub2RlX21vZHVsZXMvdGV4dC1zZWdtZW50YXRpb24vbm9kZV9tb2R1bGVzL3V0cmllL25vZGVfbW9kdWxlcy9zcmMvaW5kZXgudHM/ZmY0YiIsIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL3NyYy9HcmFwaGVtZUJyZWFrLnRzPzJjOTQiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jb3JlL2ZlYXR1cmVzLnRzPzRhYTgiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jc3MvbGF5b3V0L3RleHQudHM/ZGFjNCIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2RvbS90ZXh0LWNvbnRhaW5lci50cz8zNDdiIiwid2VicGFjazovLy8uLi8uLi9zcmMvZG9tL3JlcGxhY2VkLWVsZW1lbnRzL2ltYWdlLWVsZW1lbnQtY29udGFpbmVyLnRzPzdiZDIiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9kb20vcmVwbGFjZWQtZWxlbWVudHMvY2FudmFzLWVsZW1lbnQtY29udGFpbmVyLnRzP2M2MjMiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9kb20vcmVwbGFjZWQtZWxlbWVudHMvc3ZnLWVsZW1lbnQtY29udGFpbmVyLnRzP2E5ZjciLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9kb20vZWxlbWVudHMvbGktZWxlbWVudC1jb250YWluZXIudHM/ZWRkYSIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2RvbS9lbGVtZW50cy9vbC1lbGVtZW50LWNvbnRhaW5lci50cz9jNDAxIiwid2VicGFjazovLy8uLi8uLi9zcmMvZG9tL3JlcGxhY2VkLWVsZW1lbnRzL2lucHV0LWVsZW1lbnQtY29udGFpbmVyLnRzPzAyNzciLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9kb20vZWxlbWVudHMvc2VsZWN0LWVsZW1lbnQtY29udGFpbmVyLnRzP2I0MmYiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9kb20vZWxlbWVudHMvdGV4dGFyZWEtZWxlbWVudC1jb250YWluZXIudHM/MDYwYiIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2RvbS9yZXBsYWNlZC1lbGVtZW50cy9pZnJhbWUtZWxlbWVudC1jb250YWluZXIudHM/OGQyZCIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2RvbS9ub2RlLXBhcnNlci50cz9kYTU0Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY3NzL3R5cGVzL2Z1bmN0aW9ucy9jb3VudGVyLnRzPzAwNzMiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9kb20vc2VyaWFsaXplLWRvY3R5cGUudHM/ZTRkNiIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2RvbS9kb2N1bWVudC1jbG9uZXIudHM/MTNmOCIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2NvcmUvY2FjaGUtc3RvcmFnZS50cz82OTdiIiwid2VicGFjazovLy8uLi8uLi9zcmMvcmVuZGVyL3ZlY3Rvci50cz9iYTU2Iiwid2VicGFjazovLy8uLi8uLi9zcmMvcmVuZGVyL2Jlemllci1jdXJ2ZS50cz84Nzc0Iiwid2VicGFjazovLy8uLi8uLi9zcmMvcmVuZGVyL2JvdW5kLWN1cnZlcy50cz82ZjI5Iiwid2VicGFjazovLy8uLi8uLi9zcmMvcmVuZGVyL2VmZmVjdHMudHM/M2YyNiIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL3JlbmRlci9wYXRoLnRzPzJhMmYiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9yZW5kZXIvc3RhY2tpbmctY29udGV4dC50cz9iODhkIiwid2VicGFjazovLy8uLi8uLi9zcmMvcmVuZGVyL2JvcmRlci50cz9iOTExIiwid2VicGFjazovLy8uLi8uLi9zcmMvcmVuZGVyL2JveC1zaXppbmcudHM/MTcwYiIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL3JlbmRlci9iYWNrZ3JvdW5kLnRzPzRiYWQiLCJ3ZWJwYWNrOi8vLy4uLy4uL3NyYy9jb3JlL3V0aWwudHM/ZWNmMyIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL3JlbmRlci9mb250LW1ldHJpY3MudHM/ODU4MSIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL3JlbmRlci9yZW5kZXJlci50cz83OGE5Iiwid2VicGFjazovLy8uLi8uLi9zcmMvcmVuZGVyL2NhbnZhcy9jYW52YXMtcmVuZGVyZXIudHM/NWFmZiIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL3JlbmRlci9jYW52YXMvZm9yZWlnbm9iamVjdC1yZW5kZXJlci50cz9kOGM1Iiwid2VicGFjazovLy8uLi8uLi9zcmMvY29yZS9sb2dnZXIudHM/YTA5OCIsIndlYnBhY2s6Ly8vLi4vLi4vc3JjL2NvcmUvY29udGV4dC50cz8zN2VkIiwid2VicGFjazovLy8uLi8uLi9zcmMvaW5kZXgudHM/MGUzZSJdLCJuYW1lcyI6WyJ0b0NvZGVQb2ludHMiLCJmcm9tQ29kZVBvaW50IiwiY2hhcnMiLCJsb29rdXAiLCJpIiwiZGVjb2RlIiwicG9seVVpbnQxNkFycmF5IiwicG9seVVpbnQzMkFycmF5IiwiVVRSSUUyX1NISUZUXzIiLCJVVFJJRTJfU0hJRlRfMSIsIlVUUklFMl9JTkRFWF9TSElGVCIsIlVUUklFMl9TSElGVF8xXzIiLCJVVFJJRTJfTFNDUF9JTkRFWF8yX09GRlNFVCIsIlVUUklFMl9EQVRBX0JMT0NLX0xFTkdUSCIsIlVUUklFMl9EQVRBX01BU0siLCJVVFJJRTJfTFNDUF9JTkRFWF8yX0xFTkdUSCIsIlVUUklFMl9JTkRFWF8yX0JNUF9MRU5HVEgiLCJVVFJJRTJfVVRGOF8yQl9JTkRFWF8yX09GRlNFVCIsIlVUUklFMl9VVEY4XzJCX0lOREVYXzJfTEVOR1RIIiwiVVRSSUUyX0lOREVYXzFfT0ZGU0VUIiwiVVRSSUUyX09NSVRURURfQk1QX0lOREVYXzFfTEVOR1RIIiwiVVRSSUUyX0lOREVYXzJfQkxPQ0tfTEVOR1RIIiwiVVRSSUUyX0lOREVYXzJfTUFTSyIsInNsaWNlMTYiLCJzbGljZTMyIiwiY3JlYXRlVHJpZUZyb21CYXNlNjQiLCJUcmllIiwiYmFzZTY0IiwiQ1IiLCJMRiIsIlpXSiIsIlJJIiwiQlJFQUtfTk9UX0FMTE9XRUQiLCJCUkVBS19BTExPV0VEIiwiVW5pY29kZVRyaWUiLCJTUEFDRSIsImNvbG9yIiwiY29sb3JUeXBlIiwiYW5nbGUiLCJhbmdsZVR5cGUiLCJ0cmFuc2Zvcm0iLCJsb2FkU2VyaWFsaXplZFNWRyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztJQUFBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtBQUNBO0lBQ0EsSUFBSSxhQUFhLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ25DLElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjO0lBQ3pDLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFlBQVksS0FBSyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNwRixRQUFRLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMxRyxJQUFJLE9BQU8sYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDLENBQUM7QUFDRjtJQUNPLFNBQVMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFVBQVUsSUFBSSxDQUFDLEtBQUssSUFBSTtJQUM3QyxRQUFRLE1BQU0sSUFBSSxTQUFTLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLCtCQUErQixDQUFDLENBQUM7SUFDbEcsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLElBQUksU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQzNDLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RixDQUFDO0FBQ0Q7SUFDTyxJQUFJLFFBQVEsR0FBRyxXQUFXO0lBQ2pDLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksU0FBUyxRQUFRLENBQUMsQ0FBQyxFQUFFO0lBQ3JELFFBQVEsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDN0QsWUFBWSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLFlBQVksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsU0FBUztJQUNULFFBQVEsT0FBTyxDQUFDLENBQUM7SUFDakIsTUFBSztJQUNMLElBQUksT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzQyxFQUFDO0FBNEJEO0lBQ08sU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFO0lBQzdELElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLFlBQVksQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ2hILElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0lBQy9ELFFBQVEsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUNuRyxRQUFRLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUN0RyxRQUFRLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtJQUN0SCxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RSxLQUFLLENBQUMsQ0FBQztJQUNQLENBQUM7QUFDRDtJQUNPLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDM0MsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JILElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sTUFBTSxLQUFLLFVBQVUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0osSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN0RSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRTtJQUN0QixRQUFRLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUN0RSxRQUFRLE9BQU8sQ0FBQyxFQUFFLElBQUk7SUFDdEIsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxF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LENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3RDLElBQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdEMsSUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDakY7Z0JBRUQsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQzFCLElBQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdEMsSUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0QyxJQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3RDLElBQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7aUJBQ3pHO2dCQUVELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUMxQixJQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3RDLElBQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdEMsSUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDckU7Z0JBRUQsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQzFCLElBQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdEMsSUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN0QyxJQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3RDLElBQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxF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RSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSxVQUFVO1FBQ25CLElBQUksRUFBRSxVQUFVO1FBQ2hCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLGFBQWEsRUFBRSxVQUFVO1FBQ3pCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLFdBQVcsRUFBRSxVQUFVO1FBQ3ZCLGNBQWMsRUFBRSxVQUFVO1FBQzFCLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLE9BQU8sRUFBRSxVQUFVO1FBQ25CLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFlBQVksRUFBRSxVQUFVO1FBQ3hCLGFBQWEsRUFBRSxVQUFVO1FBQ3pCLGFBQWEsRUFBRSxVQUFVO1FBQ3pCLGFBQWEsRUFBRSxVQUFVO1FBQ3pCLGFBQWEsRUFBRSxVQUFVO1FBQ3pCLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLFdBQVcsRUFBRSxVQUFVO1FBQ3ZCLE9BQU8sRUFBRSxVQUFVO1FBQ25CLE9BQU8sRUFBRSxVQUFVO1FBQ25CLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLFdBQVcsRUFBRSxVQUFVO1FBQ3ZCLFdBQVcsRUFBRSxVQUFVO1FBQ3ZCLE9BQU8sRUFBRSxVQUFVO1FBQ25CLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLElBQUksRUFBRSxVQUFVO1FBQ2hCLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSxVQUFVO1FBQ2pCLFdBQVcsRUFBRSxVQUFVO1FBQ3ZCLElBQUksRUFBRSxVQUFVO1FBQ2hCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSxVQUFVO1FBQ25CLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLE1BQU0sRUFBRSxVQUFVO1FBQ2xCLEtBQUss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LENBQUM7WUFDdkYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsYUFB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QUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1NBQ047S0FDSixDQUFDO0lBRUYsSUFBTSxNQUFNLEdBQW1CO1FBQzNCLFFBQVEsRUFBRTtZQUNOLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDL0csRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ3BEO1FBQ0QsTUFBTSxFQUFFO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLEdBQUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztZQUNILElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztZQUNILEdBQUc7WUFD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QUUsdUJBQXVCLENBQUM7Y0FDNUMsdUJBQXVCLEtBQUssSUFBSTtrQkFDaEMsTUFBTSxDQUFDLFdBQVc7a0JBQ2xCLFVBQVUsQ0FBQztRQUVyQixPQUFPLE9BQU8sS0FBSyxhQUFhLENBQUMsZUFBZTtjQUMxQyxhQUFhLENBQUMsdUJBQXVCLENBQUM7a0JBQ2xDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQztzQkFDOUIsc0JBQXNCO3NCQUN0QixtQkFBbUI7a0JBQ3ZCLHVCQUF1QjtjQUMzQixzQkFBc0IsQ0FBQztJQUNqQyxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0BrYXJhbmtlc3dhbmk5OS9odG1sMmNhbnZhcy9kaXN0L2h0bWwyY2FudmFzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBmcm9tKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcbiIsImltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBjbGFzcyBCb3VuZHMge1xyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgbGVmdDogbnVtYmVyLCByZWFkb25seSB0b3A6IG51bWJlciwgcmVhZG9ubHkgd2lkdGg6IG51bWJlciwgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXIpIHt9XHJcblxyXG4gICAgYWRkKHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcik6IEJvdW5kcyB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCb3VuZHModGhpcy5sZWZ0ICsgeCwgdGhpcy50b3AgKyB5LCB0aGlzLndpZHRoICsgdywgdGhpcy5oZWlnaHQgKyBoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbUNsaWVudFJlY3QoY29udGV4dDogQ29udGV4dCwgY2xpZW50UmVjdDogQ2xpZW50UmVjdCk6IEJvdW5kcyB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCb3VuZHMoXHJcbiAgICAgICAgICAgIGNsaWVudFJlY3QubGVmdCArIGNvbnRleHQud2luZG93Qm91bmRzLmxlZnQsXHJcbiAgICAgICAgICAgIGNsaWVudFJlY3QudG9wICsgY29udGV4dC53aW5kb3dCb3VuZHMudG9wLFxyXG4gICAgICAgICAgICBjbGllbnRSZWN0LndpZHRoLFxyXG4gICAgICAgICAgICBjbGllbnRSZWN0LmhlaWdodFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21ET01SZWN0TGlzdChjb250ZXh0OiBDb250ZXh0LCBkb21SZWN0TGlzdDogRE9NUmVjdExpc3QpOiBCb3VuZHMge1xyXG4gICAgICAgIGNvbnN0IGRvbVJlY3QgPSBBcnJheS5mcm9tKGRvbVJlY3RMaXN0KS5maW5kKChyZWN0KSA9PiByZWN0LndpZHRoICE9PSAwKTtcclxuICAgICAgICByZXR1cm4gZG9tUmVjdFxyXG4gICAgICAgICAgICA/IG5ldyBCb3VuZHMoXHJcbiAgICAgICAgICAgICAgICAgIGRvbVJlY3QubGVmdCArIGNvbnRleHQud2luZG93Qm91bmRzLmxlZnQsXHJcbiAgICAgICAgICAgICAgICAgIGRvbVJlY3QudG9wICsgY29udGV4dC53aW5kb3dCb3VuZHMudG9wLFxyXG4gICAgICAgICAgICAgICAgICBkb21SZWN0LndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICBkb21SZWN0LmhlaWdodFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOiBCb3VuZHMuRU1QVFk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIEVNUFRZID0gbmV3IEJvdW5kcygwLCAwLCAwLCAwKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHBhcnNlQm91bmRzID0gKGNvbnRleHQ6IENvbnRleHQsIG5vZGU6IEVsZW1lbnQpOiBCb3VuZHMgPT4ge1xyXG4gICAgcmV0dXJuIEJvdW5kcy5mcm9tQ2xpZW50UmVjdChjb250ZXh0LCBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBwYXJzZURvY3VtZW50U2l6ZSA9IChkb2N1bWVudDogRG9jdW1lbnQpOiBCb3VuZHMgPT4ge1xyXG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XHJcbiAgICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKCFib2R5IHx8ICFkb2N1bWVudEVsZW1lbnQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBnZXQgZG9jdW1lbnQgc2l6ZWApO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heChcclxuICAgICAgICBNYXRoLm1heChib2R5LnNjcm9sbFdpZHRoLCBkb2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGgpLFxyXG4gICAgICAgIE1hdGgubWF4KGJvZHkub2Zmc2V0V2lkdGgsIGRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCksXHJcbiAgICAgICAgTWF0aC5tYXgoYm9keS5jbGllbnRXaWR0aCwgZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heChcclxuICAgICAgICBNYXRoLm1heChib2R5LnNjcm9sbEhlaWdodCwgZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCksXHJcbiAgICAgICAgTWF0aC5tYXgoYm9keS5vZmZzZXRIZWlnaHQsIGRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQpLFxyXG4gICAgICAgIE1hdGgubWF4KGJvZHkuY2xpZW50SGVpZ2h0LCBkb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IEJvdW5kcygwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxufTtcclxuIiwiZXhwb3J0IGNvbnN0IHRvQ29kZVBvaW50cyA9IChzdHI6IHN0cmluZyk6IG51bWJlcltdID0+IHtcbiAgICBjb25zdCBjb2RlUG9pbnRzID0gW107XG4gICAgbGV0IGkgPSAwO1xuICAgIGNvbnN0IGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgICBpZiAodmFsdWUgPj0gMHhkODAwICYmIHZhbHVlIDw9IDB4ZGJmZiAmJiBpIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBleHRyYSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICAgICAgICBpZiAoKGV4dHJhICYgMHhmYzAwKSA9PT0gMHhkYzAwKSB7XG4gICAgICAgICAgICAgICAgY29kZVBvaW50cy5wdXNoKCgodmFsdWUgJiAweDNmZikgPDwgMTApICsgKGV4dHJhICYgMHgzZmYpICsgMHgxMDAwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvZGVQb2ludHMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29kZVBvaW50cy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29kZVBvaW50cztcbn07XG5cbmV4cG9ydCBjb25zdCBmcm9tQ29kZVBvaW50ID0gKC4uLmNvZGVQb2ludHM6IG51bWJlcltdKTogc3RyaW5nID0+IHtcbiAgICBpZiAoU3RyaW5nLmZyb21Db2RlUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmNvZGVQb2ludHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IGNvZGVQb2ludHMubGVuZ3RoO1xuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBjb2RlVW5pdHMgPSBbXTtcblxuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGxldCByZXN1bHQgPSAnJztcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBsZXQgY29kZVBvaW50ID0gY29kZVBvaW50c1tpbmRleF07XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhmZmZmKSB7XG4gICAgICAgICAgICBjb2RlVW5pdHMucHVzaChjb2RlUG9pbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29kZVBvaW50IC09IDB4MTAwMDA7XG4gICAgICAgICAgICBjb2RlVW5pdHMucHVzaCgoY29kZVBvaW50ID4+IDEwKSArIDB4ZDgwMCwgKGNvZGVQb2ludCAlIDB4NDAwKSArIDB4ZGMwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gbGVuZ3RoIHx8IGNvZGVVbml0cy5sZW5ndGggPiAweDQwMDApIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmNvZGVVbml0cyk7XG4gICAgICAgICAgICBjb2RlVW5pdHMubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cbi8vIFVzZSBhIGxvb2t1cCB0YWJsZSB0byBmaW5kIHRoZSBpbmRleC5cbmNvbnN0IGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbmZvciAobGV0IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpO1xufVxuXG5leHBvcnQgY29uc3QgZGVjb2RlID0gKGJhc2U2NDogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCBudW1iZXJbXSA9PiB7XG4gICAgbGV0IGJ1ZmZlckxlbmd0aCA9IGJhc2U2NC5sZW5ndGggKiAwLjc1LFxuICAgICAgICBsZW4gPSBiYXNlNjQubGVuZ3RoLFxuICAgICAgICBpLFxuICAgICAgICBwID0gMCxcbiAgICAgICAgZW5jb2RlZDEsXG4gICAgICAgIGVuY29kZWQyLFxuICAgICAgICBlbmNvZGVkMyxcbiAgICAgICAgZW5jb2RlZDQ7XG5cbiAgICBpZiAoYmFzZTY0W2Jhc2U2NC5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICBpZiAoYmFzZTY0W2Jhc2U2NC5sZW5ndGggLSAyXSA9PT0gJz0nKSB7XG4gICAgICAgICAgICBidWZmZXJMZW5ndGgtLTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9XG4gICAgICAgIHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5zbGljZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gbmV3IEFycmF5QnVmZmVyKGJ1ZmZlckxlbmd0aClcbiAgICAgICAgICAgIDogbmV3IEFycmF5KGJ1ZmZlckxlbmd0aCk7XG4gICAgY29uc3QgYnl0ZXMgPSBBcnJheS5pc0FycmF5KGJ1ZmZlcikgPyBidWZmZXIgOiBuZXcgVWludDhBcnJheShidWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgICAgIGVuY29kZWQxID0gbG9va3VwW2Jhc2U2NC5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgZW5jb2RlZDIgPSBsb29rdXBbYmFzZTY0LmNoYXJDb2RlQXQoaSArIDEpXTtcbiAgICAgICAgZW5jb2RlZDMgPSBsb29rdXBbYmFzZTY0LmNoYXJDb2RlQXQoaSArIDIpXTtcbiAgICAgICAgZW5jb2RlZDQgPSBsb29rdXBbYmFzZTY0LmNoYXJDb2RlQXQoaSArIDMpXTtcblxuICAgICAgICBieXRlc1twKytdID0gKGVuY29kZWQxIDw8IDIpIHwgKGVuY29kZWQyID4+IDQpO1xuICAgICAgICBieXRlc1twKytdID0gKChlbmNvZGVkMiAmIDE1KSA8PCA0KSB8IChlbmNvZGVkMyA+PiAyKTtcbiAgICAgICAgYnl0ZXNbcCsrXSA9ICgoZW5jb2RlZDMgJiAzKSA8PCA2KSB8IChlbmNvZGVkNCAmIDYzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvbHlVaW50MTZBcnJheSA9IChidWZmZXI6IG51bWJlcltdKTogbnVtYmVyW10gPT4ge1xuICAgIGNvbnN0IGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY29uc3QgYnl0ZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIGJ5dGVzLnB1c2goKGJ1ZmZlcltpICsgMV0gPDwgOCkgfCBidWZmZXJbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXM7XG59O1xuXG5leHBvcnQgY29uc3QgcG9seVVpbnQzMkFycmF5ID0gKGJ1ZmZlcjogbnVtYmVyW10pOiBudW1iZXJbXSA9PiB7XG4gICAgY29uc3QgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICBjb25zdCBieXRlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgYnl0ZXMucHVzaCgoYnVmZmVyW2kgKyAzXSA8PCAyNCkgfCAoYnVmZmVyW2kgKyAyXSA8PCAxNikgfCAoYnVmZmVyW2kgKyAxXSA8PCA4KSB8IGJ1ZmZlcltpXSk7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbn07XG4iLCJjb25zdCBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxuLy8gVXNlIGEgbG9va3VwIHRhYmxlIHRvIGZpbmQgdGhlIGluZGV4LlxuY29uc3QgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gW10gOiBuZXcgVWludDhBcnJheSgyNTYpO1xuZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xuICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7XG59XG5cbmV4cG9ydCBjb25zdCBkZWNvZGUgPSAoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB8IG51bWJlcltdID0+IHtcbiAgICBsZXQgYnVmZmVyTGVuZ3RoID0gYmFzZTY0Lmxlbmd0aCAqIDAuNzUsXG4gICAgICAgIGxlbiA9IGJhc2U2NC5sZW5ndGgsXG4gICAgICAgIGksXG4gICAgICAgIHAgPSAwLFxuICAgICAgICBlbmNvZGVkMSxcbiAgICAgICAgZW5jb2RlZDIsXG4gICAgICAgIGVuY29kZWQzLFxuICAgICAgICBlbmNvZGVkNDtcblxuICAgIGlmIChiYXNlNjRbYmFzZTY0Lmxlbmd0aCAtIDFdID09PSAnPScpIHtcbiAgICAgICAgYnVmZmVyTGVuZ3RoLS07XG4gICAgICAgIGlmIChiYXNlNjRbYmFzZTY0Lmxlbmd0aCAtIDJdID09PSAnPScpIHtcbiAgICAgICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID1cbiAgICAgICAgdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNsaWNlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBuZXcgQXJyYXlCdWZmZXIoYnVmZmVyTGVuZ3RoKVxuICAgICAgICAgICAgOiBuZXcgQXJyYXkoYnVmZmVyTGVuZ3RoKTtcbiAgICBjb25zdCBieXRlcyA9IEFycmF5LmlzQXJyYXkoYnVmZmVyKSA/IGJ1ZmZlciA6IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICAgICAgZW5jb2RlZDEgPSBsb29rdXBbYmFzZTY0LmNoYXJDb2RlQXQoaSldO1xuICAgICAgICBlbmNvZGVkMiA9IGxvb2t1cFtiYXNlNjQuY2hhckNvZGVBdChpICsgMSldO1xuICAgICAgICBlbmNvZGVkMyA9IGxvb2t1cFtiYXNlNjQuY2hhckNvZGVBdChpICsgMildO1xuICAgICAgICBlbmNvZGVkNCA9IGxvb2t1cFtiYXNlNjQuY2hhckNvZGVBdChpICsgMyldO1xuXG4gICAgICAgIGJ5dGVzW3ArK10gPSAoZW5jb2RlZDEgPDwgMikgfCAoZW5jb2RlZDIgPj4gNCk7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoKGVuY29kZWQyICYgMTUpIDw8IDQpIHwgKGVuY29kZWQzID4+IDIpO1xuICAgICAgICBieXRlc1twKytdID0gKChlbmNvZGVkMyAmIDMpIDw8IDYpIHwgKGVuY29kZWQ0ICYgNjMpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXI7XG59O1xuXG5leHBvcnQgY29uc3QgcG9seVVpbnQxNkFycmF5ID0gKGJ1ZmZlcjogbnVtYmVyW10pOiBudW1iZXJbXSA9PiB7XG4gICAgY29uc3QgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICBjb25zdCBieXRlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgYnl0ZXMucHVzaCgoYnVmZmVyW2kgKyAxXSA8PCA4KSB8IGJ1ZmZlcltpXSk7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwb2x5VWludDMyQXJyYXkgPSAoYnVmZmVyOiBudW1iZXJbXSk6IG51bWJlcltdID0+IHtcbiAgICBjb25zdCBsZW5ndGggPSBidWZmZXIubGVuZ3RoO1xuICAgIGNvbnN0IGJ5dGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICBieXRlcy5wdXNoKChidWZmZXJbaSArIDNdIDw8IDI0KSB8IChidWZmZXJbaSArIDJdIDw8IDE2KSB8IChidWZmZXJbaSArIDFdIDw8IDgpIHwgYnVmZmVyW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ5dGVzO1xufTtcbiIsImltcG9ydCB7ZGVjb2RlLCBwb2x5VWludDE2QXJyYXksIHBvbHlVaW50MzJBcnJheX0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IHR5cGUgaW50ID0gbnVtYmVyO1xuXG4vKiogU2hpZnQgc2l6ZSBmb3IgZ2V0dGluZyB0aGUgaW5kZXgtMiB0YWJsZSBvZmZzZXQuICovXG5leHBvcnQgY29uc3QgVVRSSUUyX1NISUZUXzIgPSA1O1xuXG4vKiogU2hpZnQgc2l6ZSBmb3IgZ2V0dGluZyB0aGUgaW5kZXgtMSB0YWJsZSBvZmZzZXQuICovXG5leHBvcnQgY29uc3QgVVRSSUUyX1NISUZUXzEgPSA2ICsgNTtcblxuLyoqXG4gKiBTaGlmdCBzaXplIGZvciBzaGlmdGluZyBsZWZ0IHRoZSBpbmRleCBhcnJheSB2YWx1ZXMuXG4gKiBJbmNyZWFzZXMgcG9zc2libGUgZGF0YSBzaXplIHdpdGggMTYtYml0IGluZGV4IHZhbHVlcyBhdCB0aGUgY29zdFxuICogb2YgY29tcGFjdGFiaWxpdHkuXG4gKiBUaGlzIHJlcXVpcmVzIGRhdGEgYmxvY2tzIHRvIGJlIGFsaWduZWQgYnkgVVRSSUUyX0RBVEFfR1JBTlVMQVJJVFkuXG4gKi9cbmV4cG9ydCBjb25zdCBVVFJJRTJfSU5ERVhfU0hJRlQgPSAyO1xuXG4vKipcbiAqIERpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIHNoaWZ0IHNpemVzLFxuICogZm9yIGdldHRpbmcgYW4gaW5kZXgtMSBvZmZzZXQgZnJvbSBhbiBpbmRleC0yIG9mZnNldC4gNj0xMS01XG4gKi9cbmV4cG9ydCBjb25zdCBVVFJJRTJfU0hJRlRfMV8yID0gVVRSSUUyX1NISUZUXzEgLSBVVFJJRTJfU0hJRlRfMjtcblxuLyoqXG4gKiBUaGUgcGFydCBvZiB0aGUgaW5kZXgtMiB0YWJsZSBmb3IgVStEODAwLi5VK0RCRkYgc3RvcmVzIHZhbHVlcyBmb3JcbiAqIGxlYWQgc3Vycm9nYXRlIGNvZGUgX3VuaXRzXyBub3QgY29kZSBfcG9pbnRzXy5cbiAqIFZhbHVlcyBmb3IgbGVhZCBzdXJyb2dhdGUgY29kZSBfcG9pbnRzXyBhcmUgaW5kZXhlZCB3aXRoIHRoaXMgcG9ydGlvbiBvZiB0aGUgdGFibGUuXG4gKiBMZW5ndGg9MzI9MHgyMD0weDQwMD4+VVRSSUUyX1NISUZUXzIuIChUaGVyZSBhcmUgMTAyND0weDQwMCBsZWFkIHN1cnJvZ2F0ZXMuKVxuICovXG5leHBvcnQgY29uc3QgVVRSSUUyX0xTQ1BfSU5ERVhfMl9PRkZTRVQgPSAweDEwMDAwID4+IFVUUklFMl9TSElGVF8yO1xuXG4vKiogTnVtYmVyIG9mIGVudHJpZXMgaW4gYSBkYXRhIGJsb2NrLiAzMj0weDIwICovXG5leHBvcnQgY29uc3QgVVRSSUUyX0RBVEFfQkxPQ0tfTEVOR1RIID0gMSA8PCBVVFJJRTJfU0hJRlRfMjtcbi8qKiBNYXNrIGZvciBnZXR0aW5nIHRoZSBsb3dlciBiaXRzIGZvciB0aGUgaW4tZGF0YS1ibG9jayBvZmZzZXQuICovXG5leHBvcnQgY29uc3QgVVRSSUUyX0RBVEFfTUFTSyA9IFVUUklFMl9EQVRBX0JMT0NLX0xFTkdUSCAtIDE7XG5cbmV4cG9ydCBjb25zdCBVVFJJRTJfTFNDUF9JTkRFWF8yX0xFTkdUSCA9IDB4NDAwID4+IFVUUklFMl9TSElGVF8yO1xuLyoqIENvdW50IHRoZSBsZW5ndGhzIG9mIGJvdGggQk1QIHBpZWNlcy4gMjA4MD0weDgyMCAqL1xuZXhwb3J0IGNvbnN0IFVUUklFMl9JTkRFWF8yX0JNUF9MRU5HVEggPSBVVFJJRTJfTFNDUF9JTkRFWF8yX09GRlNFVCArIFVUUklFMl9MU0NQX0lOREVYXzJfTEVOR1RIO1xuLyoqXG4gKiBUaGUgMi1ieXRlIFVURi04IHZlcnNpb24gb2YgdGhlIGluZGV4LTIgdGFibGUgZm9sbG93cyBhdCBvZmZzZXQgMjA4MD0weDgyMC5cbiAqIExlbmd0aCAzMj0weDIwIGZvciBsZWFkIGJ5dGVzIEMwLi5ERiwgcmVnYXJkbGVzcyBvZiBVVFJJRTJfU0hJRlRfMi5cbiAqL1xuZXhwb3J0IGNvbnN0IFVUUklFMl9VVEY4XzJCX0lOREVYXzJfT0ZGU0VUID0gVVRSSUUyX0lOREVYXzJfQk1QX0xFTkdUSDtcbmV4cG9ydCBjb25zdCBVVFJJRTJfVVRGOF8yQl9JTkRFWF8yX0xFTkdUSCA9IDB4ODAwID4+IDY7IC8qIFUrMDgwMCBpcyB0aGUgZmlyc3QgY29kZSBwb2ludCBhZnRlciAyLWJ5dGUgVVRGLTggKi9cbi8qKlxuICogVGhlIGluZGV4LTEgdGFibGUsIG9ubHkgdXNlZCBmb3Igc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50cywgYXQgb2Zmc2V0IDIxMTI9MHg4NDAuXG4gKiBWYXJpYWJsZSBsZW5ndGgsIGZvciBjb2RlIHBvaW50cyB1cCB0byBoaWdoU3RhcnQsIHdoZXJlIHRoZSBsYXN0IHNpbmdsZS12YWx1ZSByYW5nZSBzdGFydHMuXG4gKiBNYXhpbXVtIGxlbmd0aCA1MTI9MHgyMDA9MHgxMDAwMDA+PlVUUklFMl9TSElGVF8xLlxuICogKEZvciAweDEwMDAwMCBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnRzIFUrMTAwMDAuLlUrMTBmZmZmLilcbiAqXG4gKiBUaGUgcGFydCBvZiB0aGUgaW5kZXgtMiB0YWJsZSBmb3Igc3VwcGxlbWVudGFyeSBjb2RlIHBvaW50cyBzdGFydHNcbiAqIGFmdGVyIHRoaXMgaW5kZXgtMSB0YWJsZS5cbiAqXG4gKiBCb3RoIHRoZSBpbmRleC0xIHRhYmxlIGFuZCB0aGUgZm9sbG93aW5nIHBhcnQgb2YgdGhlIGluZGV4LTIgdGFibGVcbiAqIGFyZSBvbWl0dGVkIGNvbXBsZXRlbHkgaWYgdGhlcmUgaXMgb25seSBCTVAgZGF0YS5cbiAqL1xuZXhwb3J0IGNvbnN0IFVUUklFMl9JTkRFWF8xX09GRlNFVCA9IFVUUklFMl9VVEY4XzJCX0lOREVYXzJfT0ZGU0VUICsgVVRSSUUyX1VURjhfMkJfSU5ERVhfMl9MRU5HVEg7XG5cbi8qKlxuICogTnVtYmVyIG9mIGluZGV4LTEgZW50cmllcyBmb3IgdGhlIEJNUC4gMzI9MHgyMFxuICogVGhpcyBwYXJ0IG9mIHRoZSBpbmRleC0xIHRhYmxlIGlzIG9taXR0ZWQgZnJvbSB0aGUgc2VyaWFsaXplZCBmb3JtLlxuICovXG5leHBvcnQgY29uc3QgVVRSSUUyX09NSVRURURfQk1QX0lOREVYXzFfTEVOR1RIID0gMHgxMDAwMCA+PiBVVFJJRTJfU0hJRlRfMTtcblxuLyoqIE51bWJlciBvZiBlbnRyaWVzIGluIGFuIGluZGV4LTIgYmxvY2suIDY0PTB4NDAgKi9cbmV4cG9ydCBjb25zdCBVVFJJRTJfSU5ERVhfMl9CTE9DS19MRU5HVEggPSAxIDw8IFVUUklFMl9TSElGVF8xXzI7XG4vKiogTWFzayBmb3IgZ2V0dGluZyB0aGUgbG93ZXIgYml0cyBmb3IgdGhlIGluLWluZGV4LTItYmxvY2sgb2Zmc2V0LiAqL1xuZXhwb3J0IGNvbnN0IFVUUklFMl9JTkRFWF8yX01BU0sgPSBVVFJJRTJfSU5ERVhfMl9CTE9DS19MRU5HVEggLSAxO1xuXG5jb25zdCBzbGljZTE2ID0gKHZpZXc6IG51bWJlcltdIHwgVWludDE2QXJyYXksIHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcikgPT4ge1xuICAgIGlmICh2aWV3LnNsaWNlKSB7XG4gICAgICAgIHJldHVybiB2aWV3LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVWludDE2QXJyYXkoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodmlldywgc3RhcnQsIGVuZCkpO1xufTtcblxuY29uc3Qgc2xpY2UzMiA9ICh2aWV3OiBudW1iZXJbXSB8IFVpbnQzMkFycmF5LCBzdGFydDogbnVtYmVyLCBlbmQ/OiBudW1iZXIpID0+IHtcbiAgICBpZiAodmlldy5zbGljZSkge1xuICAgICAgICByZXR1cm4gdmlldy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFVpbnQzMkFycmF5KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHZpZXcsIHN0YXJ0LCBlbmQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVUcmllRnJvbUJhc2U2NCA9IChiYXNlNjQ6IHN0cmluZywgX2J5dGVMZW5ndGg6IG51bWJlcik6IFRyaWUgPT4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGRlY29kZShiYXNlNjQpO1xuICAgIGNvbnN0IHZpZXczMiA9IEFycmF5LmlzQXJyYXkoYnVmZmVyKSA/IHBvbHlVaW50MzJBcnJheShidWZmZXIpIDogbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XG4gICAgY29uc3QgdmlldzE2ID0gQXJyYXkuaXNBcnJheShidWZmZXIpID8gcG9seVVpbnQxNkFycmF5KGJ1ZmZlcikgOiBuZXcgVWludDE2QXJyYXkoYnVmZmVyKTtcbiAgICBjb25zdCBoZWFkZXJMZW5ndGggPSAyNDtcblxuICAgIGNvbnN0IGluZGV4ID0gc2xpY2UxNih2aWV3MTYsIGhlYWRlckxlbmd0aCAvIDIsIHZpZXczMls0XSAvIDIpO1xuICAgIGNvbnN0IGRhdGEgPVxuICAgICAgICB2aWV3MzJbNV0gPT09IDJcbiAgICAgICAgICAgID8gc2xpY2UxNih2aWV3MTYsIChoZWFkZXJMZW5ndGggKyB2aWV3MzJbNF0pIC8gMilcbiAgICAgICAgICAgIDogc2xpY2UzMih2aWV3MzIsIE1hdGguY2VpbCgoaGVhZGVyTGVuZ3RoICsgdmlldzMyWzRdKSAvIDQpKTtcblxuICAgIHJldHVybiBuZXcgVHJpZSh2aWV3MzJbMF0sIHZpZXczMlsxXSwgdmlldzMyWzJdLCB2aWV3MzJbM10sIGluZGV4LCBkYXRhKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBUcmllIHtcbiAgICBpbml0aWFsVmFsdWU6IGludDtcbiAgICBlcnJvclZhbHVlOiBpbnQ7XG4gICAgaGlnaFN0YXJ0OiBpbnQ7XG4gICAgaGlnaFZhbHVlSW5kZXg6IGludDtcbiAgICBpbmRleDogVWludDE2QXJyYXkgfCBudW1iZXJbXTtcbiAgICBkYXRhOiBVaW50MzJBcnJheSB8IFVpbnQxNkFycmF5IHwgbnVtYmVyW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBpbnQsXG4gICAgICAgIGVycm9yVmFsdWU6IGludCxcbiAgICAgICAgaGlnaFN0YXJ0OiBpbnQsXG4gICAgICAgIGhpZ2hWYWx1ZUluZGV4OiBpbnQsXG4gICAgICAgIGluZGV4OiBVaW50MTZBcnJheSB8IG51bWJlcltdLFxuICAgICAgICBkYXRhOiBVaW50MzJBcnJheSB8IFVpbnQxNkFycmF5IHwgbnVtYmVyW11cbiAgICApIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgICAgIHRoaXMuZXJyb3JWYWx1ZSA9IGVycm9yVmFsdWU7XG4gICAgICAgIHRoaXMuaGlnaFN0YXJ0ID0gaGlnaFN0YXJ0O1xuICAgICAgICB0aGlzLmhpZ2hWYWx1ZUluZGV4ID0gaGlnaFZhbHVlSW5kZXg7XG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHZhbHVlIGZvciBhIGNvZGUgcG9pbnQgYXMgc3RvcmVkIGluIHRoZSBUcmllLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvZGVQb2ludCB0aGUgY29kZSBwb2ludFxuICAgICAqIEByZXR1cm4gdGhlIHZhbHVlXG4gICAgICovXG4gICAgZ2V0KGNvZGVQb2ludDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGl4O1xuICAgICAgICBpZiAoY29kZVBvaW50ID49IDApIHtcbiAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPCAweDBkODAwIHx8IChjb2RlUG9pbnQgPiAweDBkYmZmICYmIGNvZGVQb2ludCA8PSAweDBmZmZmKSkge1xuICAgICAgICAgICAgICAgIC8vIE9yZGluYXJ5IEJNUCBjb2RlIHBvaW50LCBleGNsdWRpbmcgbGVhZGluZyBzdXJyb2dhdGVzLlxuICAgICAgICAgICAgICAgIC8vIEJNUCB1c2VzIGEgc2luZ2xlIGxldmVsIGxvb2t1cC4gIEJNUCBpbmRleCBzdGFydHMgYXQgb2Zmc2V0IDAgaW4gdGhlIFRyaWUyIGluZGV4LlxuICAgICAgICAgICAgICAgIC8vIDE2IGJpdCBkYXRhIGlzIHN0b3JlZCBpbiB0aGUgaW5kZXggYXJyYXkgaXRzZWxmLlxuICAgICAgICAgICAgICAgIGl4ID0gdGhpcy5pbmRleFtjb2RlUG9pbnQgPj4gVVRSSUUyX1NISUZUXzJdO1xuICAgICAgICAgICAgICAgIGl4ID0gKGl4IDw8IFVUUklFMl9JTkRFWF9TSElGVCkgKyAoY29kZVBvaW50ICYgVVRSSUUyX0RBVEFfTUFTSyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtpeF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhmZmZmKSB7XG4gICAgICAgICAgICAgICAgLy8gTGVhZCBTdXJyb2dhdGUgQ29kZSBQb2ludC4gIEEgU2VwYXJhdGUgaW5kZXggc2VjdGlvbiBpcyBzdG9yZWQgZm9yXG4gICAgICAgICAgICAgICAgLy8gbGVhZCBzdXJyb2dhdGUgY29kZSB1bml0cyBhbmQgY29kZSBwb2ludHMuXG4gICAgICAgICAgICAgICAgLy8gICBUaGUgbWFpbiBpbmRleCBoYXMgdGhlIGNvZGUgdW5pdCBkYXRhLlxuICAgICAgICAgICAgICAgIC8vICAgRm9yIHRoaXMgZnVuY3Rpb24sIHdlIG5lZWQgdGhlIGNvZGUgcG9pbnQgZGF0YS5cbiAgICAgICAgICAgICAgICAvLyBOb3RlOiB0aGlzIGV4cHJlc3Npb24gY291bGQgYmUgcmVmYWN0b3JlZCBmb3Igc2xpZ2h0bHkgaW1wcm92ZWQgZWZmaWNpZW5jeSwgYnV0XG4gICAgICAgICAgICAgICAgLy8gICAgICAgc3Vycm9nYXRlIGNvZGUgcG9pbnRzIHdpbGwgYmUgc28gcmFyZSBpbiBwcmFjdGljZSB0aGF0IGl0J3Mgbm90IHdvcnRoIGl0LlxuICAgICAgICAgICAgICAgIGl4ID0gdGhpcy5pbmRleFtVVFJJRTJfTFNDUF9JTkRFWF8yX09GRlNFVCArICgoY29kZVBvaW50IC0gMHhkODAwKSA+PiBVVFJJRTJfU0hJRlRfMildO1xuICAgICAgICAgICAgICAgIGl4ID0gKGl4IDw8IFVUUklFMl9JTkRFWF9TSElGVCkgKyAoY29kZVBvaW50ICYgVVRSSUUyX0RBVEFfTUFTSyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtpeF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPCB0aGlzLmhpZ2hTdGFydCkge1xuICAgICAgICAgICAgICAgIC8vIFN1cHBsZW1lbnRhbCBjb2RlIHBvaW50LCB1c2UgdHdvLWxldmVsIGxvb2t1cC5cbiAgICAgICAgICAgICAgICBpeCA9IFVUUklFMl9JTkRFWF8xX09GRlNFVCAtIFVUUklFMl9PTUlUVEVEX0JNUF9JTkRFWF8xX0xFTkdUSCArIChjb2RlUG9pbnQgPj4gVVRSSUUyX1NISUZUXzEpO1xuICAgICAgICAgICAgICAgIGl4ID0gdGhpcy5pbmRleFtpeF07XG4gICAgICAgICAgICAgICAgaXggKz0gKGNvZGVQb2ludCA+PiBVVFJJRTJfU0hJRlRfMikgJiBVVFJJRTJfSU5ERVhfMl9NQVNLO1xuICAgICAgICAgICAgICAgIGl4ID0gdGhpcy5pbmRleFtpeF07XG4gICAgICAgICAgICAgICAgaXggPSAoaXggPDwgVVRSSUUyX0lOREVYX1NISUZUKSArIChjb2RlUG9pbnQgJiBVVFJJRTJfREFUQV9NQVNLKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhW2l4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHgxMGZmZmYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhW3RoaXMuaGlnaFZhbHVlSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoLiAgVGhlIGNvZGUgcG9pbnQgaXMgb3V0c2lkZSBvZiB0aGUgbGVnYWwgcmFuZ2Ugb2YgMC4uMHgxMGZmZmYuXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yVmFsdWU7XG4gICAgfVxufVxuIiwiY29uc3QgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cbi8vIFVzZSBhIGxvb2t1cCB0YWJsZSB0byBmaW5kIHRoZSBpbmRleC5cbmNvbnN0IGxvb2t1cCA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbmZvciAobGV0IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpO1xufVxuXG5leHBvcnQgY29uc3QgZW5jb2RlID0gKGFycmF5YnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyA9PiB7XG4gICAgbGV0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpLFxuICAgICAgICBpLFxuICAgICAgICBsZW4gPSBieXRlcy5sZW5ndGgsXG4gICAgICAgIGJhc2U2NCA9ICcnO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAzKSB7XG4gICAgICAgIGJhc2U2NCArPSBjaGFyc1tieXRlc1tpXSA+PiAyXTtcbiAgICAgICAgYmFzZTY0ICs9IGNoYXJzWygoYnl0ZXNbaV0gJiAzKSA8PCA0KSB8IChieXRlc1tpICsgMV0gPj4gNCldO1xuICAgICAgICBiYXNlNjQgKz0gY2hhcnNbKChieXRlc1tpICsgMV0gJiAxNSkgPDwgMikgfCAoYnl0ZXNbaSArIDJdID4+IDYpXTtcbiAgICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kgKyAyXSAmIDYzXTtcbiAgICB9XG5cbiAgICBpZiAobGVuICUgMyA9PT0gMikge1xuICAgICAgICBiYXNlNjQgPSBiYXNlNjQuc3Vic3RyaW5nKDAsIGJhc2U2NC5sZW5ndGggLSAxKSArICc9JztcbiAgICB9IGVsc2UgaWYgKGxlbiAlIDMgPT09IDEpIHtcbiAgICAgICAgYmFzZTY0ID0gYmFzZTY0LnN1YnN0cmluZygwLCBiYXNlNjQubGVuZ3RoIC0gMikgKyAnPT0nO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlNjQ7XG59O1xuXG5leHBvcnQgY29uc3QgZGVjb2RlID0gKGJhc2U2NDogc3RyaW5nKTogQXJyYXlCdWZmZXIgPT4ge1xuICAgIGxldCBidWZmZXJMZW5ndGggPSBiYXNlNjQubGVuZ3RoICogMC43NSxcbiAgICAgICAgbGVuID0gYmFzZTY0Lmxlbmd0aCxcbiAgICAgICAgaSxcbiAgICAgICAgcCA9IDAsXG4gICAgICAgIGVuY29kZWQxLFxuICAgICAgICBlbmNvZGVkMixcbiAgICAgICAgZW5jb2RlZDMsXG4gICAgICAgIGVuY29kZWQ0O1xuXG4gICAgaWYgKGJhc2U2NFtiYXNlNjQubGVuZ3RoIC0gMV0gPT09ICc9Jykge1xuICAgICAgICBidWZmZXJMZW5ndGgtLTtcbiAgICAgICAgaWYgKGJhc2U2NFtiYXNlNjQubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICAgICAgYnVmZmVyTGVuZ3RoLS07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhcnJheWJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihidWZmZXJMZW5ndGgpLFxuICAgICAgICBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgICAgICBlbmNvZGVkMSA9IGxvb2t1cFtiYXNlNjQuY2hhckNvZGVBdChpKV07XG4gICAgICAgIGVuY29kZWQyID0gbG9va3VwW2Jhc2U2NC5jaGFyQ29kZUF0KGkgKyAxKV07XG4gICAgICAgIGVuY29kZWQzID0gbG9va3VwW2Jhc2U2NC5jaGFyQ29kZUF0KGkgKyAyKV07XG4gICAgICAgIGVuY29kZWQ0ID0gbG9va3VwW2Jhc2U2NC5jaGFyQ29kZUF0KGkgKyAzKV07XG5cbiAgICAgICAgYnl0ZXNbcCsrXSA9IChlbmNvZGVkMSA8PCAyKSB8IChlbmNvZGVkMiA+PiA0KTtcbiAgICAgICAgYnl0ZXNbcCsrXSA9ICgoZW5jb2RlZDIgJiAxNSkgPDwgNCkgfCAoZW5jb2RlZDMgPj4gMik7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoKGVuY29kZWQzICYgMykgPDwgNikgfCAoZW5jb2RlZDQgJiA2Myk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5YnVmZmVyO1xufTtcbiIsImV4cG9ydCBjb25zdCBiYXNlNjQgPVxuICAgICdLd0FBQUFBQUFBQUFDQTRBVUQwQUFEQWdBQUFDQUFBQUFBQUlBQkFBR0FCQUFFZ0FVQUJZQUdBQWFBQmdBR2dBWWdCcUFGOEFad0JnQUdnQWNRQjVBSFVBZlFDRkFJMEFsUUNkQUtJQXFnQ3lBTG9BWUFCb0FHQUFhQUJnQUdnQXdnREtBR0FBYUFER0FNNEEwd0RiQU9FQTZRRHhBUGtBQVFFSkFROEJGd0YxQUgwQUhBRWtBU3dCTkFFNkFVSUJRUUZKQVZFQldRRmhBV2dCY0FGNEFUQUFnQUdHQVk0QmxRR1hBWjhCcHdHdkFiVUJ2UUhGQWMwQjB3SGJBZU1CNndIeEFma0JBUUlKQXZFQkVRSVpBaUVDS1FJeEFqZ0NRQUpHQWs0Q1ZnSmVBbVFDYkFKMEFud0NnUUtKQXBFQ21RS2dBcWdDc0FLNEFyd0N4QUl3QU13QzB3TGJBakFBNHdMckF2TUMrQUlBQXdjRER3TXdBQmNESFFNbEF5MEROUU4xQUQwRFFRTkpBMGtEU1FOUkExRURWd05aQTFrRGRRQjFBR0VEZFFCcEEyMERkUU4xQUhzRGRRQ0JBNGtEa1FOMUFIVUFtUU9oQTNVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUtZRHJnTjFBSFVBdGdPK0E4WUR6Z1BXQXhjRDNnUGpBK3NEOHdOMUFIVUErd01EQkFrRWRRQU5CQlVFSFFRbEJDb0VGd015QkRnRVlBQkFCQmNEU0FSUUJGZ0VZQVJvQkRBQWNBUXpBWGdFZ0FTSUJKQUVkUUNYQkhVQW53U25CSzRFdGdTNkJNSUV5QVIxQUhVQWRRQjFBSFVBZFFDVkFOQUVZQUJnQUdBQVlBQmdBR0FBWUFCZ0FOZ0VZQURjQk9RRVlBRHNCUFFFL0FRRUJRd0ZGQVVjQlNRRkxBVTBCV1FFUEFWRUJVc0ZVd1ZiQldBQVlnVmdBR29GY2dWNkJZSUZpZ1dSQldBQW1RV2ZCYVlGWUFCZ0FHQUFZQUJnQUtvRllBQ3hCYkFGdVFXNkJjRUZ3UVhIQmNFRndRWFBCZE1GMndYakJlb0Y4Z1g2QlFJR0NnWVNCaG9HSWdZcUJqSUdPZ1pnQUQ0R1JnWk1CbUFBVXdaYUJtQUFZQUJnQUdBQVlBQmdBR0FBWUFCZ0FHQUFZQUJnQUdJR1lBQnBCbkFHWUFCZ0FHQUFZQUJnQUdBQVlBQmdBR0FBWUFCNEJuOEdoUVpnQUdBQVlBQjFBSGNERlFTTEJtQUFZQUJnQUpNR2RRQTlBM1VBbXdhakJxc0dxd2FWQUxNR3V3YkRCakFBeXdiU0J0SUcxUWJTQnRJRzBnYlNCdElHMGdiZEJ1TUc2d2J6QnZzR0F3Y0xCeE1IQXdjYkJ5TUhKd2NzQnl3SE1RY3NCOUlHT0FkQUIwZ0hUZ2ZTQmtnSFZnZlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCaXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBZGdBR0FBTEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBZGJCMk1ITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCMmtIMGdad0I2NEVkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUhmUWRnQUlVSGpRZDFBSFVBbFFlZEIyQUFZQUNsQjZzSFlBQ3pCN1lIdmdmR0IzVUF6Z2ZXQnpNQjNnZm1CMUVCN2dmMUIvMEhsUUVOQVFVSURRaDFBQlVJSFFnbENCY0RMUWcxQ0QwSVJRaE5DRUVEVXdoMUFIVUFkUUJiQ0dNSVpBaGxDR1lJWndob0NHa0lZd2hrQ0dVSVpnaG5DR2dJYVFoakNHUUlaUWhtQ0djSWFBaHBDR01JWkFobENHWUlad2hvQ0drSVl3aGtDR1VJWmdobkNHZ0lhUWhqQ0dRSVpRaG1DR2NJYUFocENHTUlaQWhsQ0dZSVp3aG9DR2tJWXdoa0NHVUlaZ2huQ0dnSWFRaGpDR1FJWlFobUNHY0lhQWhwQ0dNSVpBaGxDR1lJWndob0NHa0lZd2hrQ0dVSVpnaG5DR2dJYVFoakNHUUlaUWhtQ0djSWFBaHBDR01JWkFobENHWUlad2hvQ0drSVl3aGtDR1VJWmdobkNHZ0lhUWhqQ0dRSVpRaG1DR2NJYUFocENHTUlaQWhsQ0dZSVp3aG9DR2tJWXdoa0NHVUlaZ2huQ0dnSWFRaGpDR1FJWlFobUNHY0lhQWhwQ0dNSVpBaGxDR1lJWndob0NHa0lZd2hrQ0dVSVpnaG5DR2dJYVFoakNHUUlaUWhtQ0djSWFBaHBDR01JWkFobENHWUlad2hvQ0drSVl3aGtDR1VJWmdobkNHZ0lhUWhqQ0dRSVpRaG1DR2NJYUFocENHTUlaQWhsQ0dZSVp3aG9DR2tJWXdoa0NHVUlaZ2huQ0dnSWFRaGpDR1FJWlFobUNHY0lhQWhwQ0dNSVpBaGxDR1lJWndob0NHa0lZd2hrQ0dVSVpnaG5DR2dJYVFoakNHUUlaUWhtQ0djSWFBaHBDR01JWkFobENHWUlad2hvQ0drSVl3aGtDR1VJWmdobkNHZ0lhUWhqQ0dRSVpRaG1DR2NJYUFocENHTUlaQWhsQ0dZSVp3aG9DR2tJWXdoa0NHVUlaZ2huQ0dnSWFRaGpDR1FJWlFobUNHY0lhQWhwQ0dNSVpBaGxDR1lJWndob0NHa0lZd2hrQ0dVSVpnaG5DR2dJYVFoakNHUUlaUWhtQ0djSWFBaHBDR01JWkFobENHWUlad2hvQ0drSVl3aGtDR1VJWmdobkNHZ0lhUWhqQ0dRSVpRaG1DR2NJYUFocENHTUlaQWhsQ0dZSVp3aG9DR2tJWXdoa0NHVUlaZ2huQ0dnSWFRaGpDR1FJWlFobUNHY0lhQWhwQ0dNSVpBaGxDR1lJWndob0NHa0lZd2hrQ0dVSVpnaG5DR2dJYVFoakNHUUlaUWhtQ0djSWFBaHBDR01JWkFobENHWUlad2hvQ0drSVl3aGtDR1VJWmdobkNHZ0ljQWgzQ0hvSU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnZ3dBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0I0b0lMQWNzQjQ0STBnYVdDSjRJcGdoMUFIVUFxZ2l5Q0hVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQXR3aDhBWFVBdndoMUFNVUl5UWpSQ05rSTRBam9DSFVBZFFCMUFPNEk5Z2orQ0FZSkRna1RDUzBIR3drakNZSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUNDSUlJZ2dpQ0NJSUlnZ2lDQ0lJSWdnaUFBSUFBQUFGQUFZQUJnQUdJQVh3QmdBSEVBZFFCRkFKVUFvZ0N5QUtBQVlBQmdBRUlBNEFCR0FOTUE0UUR4QU1FQkR3RTFBRndCTEFFNkFRRUJVUUY0UWtoQ21FS29RcmhDZ0FISVFzQUIwTUxBQWNBQndBSEFBZURDNkFCb0FIREN3TU1BQWNBQndBSEFBZERER01NQUFjQUI2TU00d3dqRFdNTm93M2pEYUFCb0FHZ0FhQUJvQUdnQWFBQm9BR2dBYUFCb0FHZ0FhQUJvQUdnQWFBQm9BR2dBYUFCb0FFakRxQUJXdzZiRHFBQnBnNmdBYUFCb0FIY0R2d09QQStnQWFBQmZBLzhEdndPL0E3OER2d08vQTc4RHZ3Ty9BNzhEdndPL0E3OER2d08vQTc4RHZ3Ty9BNzhEdndPL0E3OER2d08vQTc4RHZ3Ty9BNzhEcGNQQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQjljUEt3a3lDVG9KTUFCMUFIVUFkUUJDQ1VvSlRRbDFBRlVKWEFsakNXY0phd2t3QURBQU1BQXdBSE1KZFFCMkNYNEpkUUNFQ1lvSmpnbVdDWFVBbmdrd0FHQUFZQUJ4QUhVQXBnbjNBNjRKdEFsMUFMa0pkUURBQ1RBQU1BQXdBREFBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBb3dZTkJNVUlNQUF3QURBQU1BRElDY3NKMHduWkNSVUU0UWt3QU9rSjhBbjRDVEFBTUFCMUFBQUt2d2gxQUFnS0R3b1hDaDhLZFFBd0FDY0tMZ3AxQURZS3FBbUlDVDRLUmdvd0FEQUFkUUIxQUU0S01BQjFBRllLZFFCZUNuVUFaUW93QURBQU1BQXdBREFBTUFBd0FEQUFNQUFWQkhVQWJRb3dBREFBZFFDNUNYVUtNQUF3QUh3QnhBaWpCb2dFTWdGOUNvUUtpQVNNQ3BRS21ncUlCS0lLcWdxdUNvZ0VEUUcyQ3I0S3hnckxDakFBTUFEVEN0c0tDZ0hqQ3VzSzhRcjVDZ0VMTUFBd0FEQUFNQUIxQUlzRUNRc1JDM1VBTkFFWkN6QUFNQUF3QURBQU1BQjFBQ0VMS1Fzd0FIVUFOQUV4Q3prTGRRQkJDMGtMTUFCUkMxa0xNQUF3QURBQU1BQXdBREFBZFFCaEN6QUFNQUF3QUdBQVlBQnBDM0VMZHd0L0N6QUFNQUNIQzRzTGt3dWJDNThMcHd0MUFLNEx0Z3QxQVBzRE1BQXdBREFBTUFBd0FEQUFNQUF3QUw0THd3dkxDOUlMMXd2ZEN6QUFNQURsQytrTDhRdjVDLzhMU1Fzd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBSEREQUFNQUF3QURBQU1BQU9EQllNSGd4MUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFDWU1NQUF3QURBQWRRQjFBSFVBTGd4MUFIVUFkUUIxQUhVQWRRQTJEREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFENE1kUUJHREhVQWRRQjFBSFVBZFFCMUFFa01kUUIxQUhVQWRRQjFBRkFNTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCWURIVUFkUUIxQUY4TU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBK3dNVkJHY01NQUF3QUh3QmJ3eDFBSGNNZnd5SERJOE1NQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQVlBQmdBSmNNTUFBd0FEQUFkUUIxQUo4TWxRQ2xEREFBTUFDdERDd0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0I3VU1MQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdIZFFCMUFIVUFkUUIxQUhVQWRRQjFBSFVBZFFCMUFIVUFkUUIxQUEwRU1BQzlEREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUFzQnl3SExBY3NCeXdITEFjc0J5d0hMUWN3QU1FTXlBd3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdIekF3d0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QUhVQWRRQjFBTlFNMlF6aEREQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFCZ0FHQUFZQUJnQUdBQVlBQmdBT2tNWUFEeERHQUErQXdBRFFZTllBQmhDV0FBWUFBT0RUQUFNQUF3QURBQUZnMWdBR0FBSGczN0F6QUFNQUF3QURBQVlBQmdBQ1lOWUFBc0RUUU5QQTFnQUVNTlBnMUxEV0FBWUFCZ0FHQUFZQUJnQUdBQVlBQmdBR0FBVWcxYURZc0dWZ2xoRFYwTmNRQm5EVzBOZFExNURXQUFZQUJnQUdBQVlBQmdBR0FBWUFCZ0FHQUFZQUJnQUdBQVlBQmdBR0FBbFFDQkRaVUFpQTJQRFpjTk1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFudzJuRFRBQU1BQXdBREFBTUFBd0FIVUFydzIzRFRBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQjFBTDhOTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUIxQUhVQWRRQjFBSFVBZFFESERUQUFZQUJnQU04Tk1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUExdzExQU53Tk1BQXdBRDBCNUEwd0FEQUFNQUF3QURBQU1BRHNEZlFOL0EwRURnd09GQTR3QUJzT01BQXdBREFBTUFBd0FEQUFNQUF3QU5JRzBnYlNCdElHMGdiU0J0SUcwZ1lqRGlnT3dRVXVEc0VGTXc3U0Jqb08wZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJR1FnNUtEbElPVmc3U0J0SUdYZzVsRG0wT2RRN1NCdElHZlE2RURvb09qUTZVRHRJR21nNmhEdElHMGdhb0Rxd08wZ2EwRHJ3TzBnWmdBR0FBWUFERURtQUFZQUFrQnRJR3pBNWdBTklPWUFEYURva08wZ2JTQnQ4TzV3N1NCdThPMGdiMUR2d08wZ1pnQUdBQXhBN1NCdElHMGdiU0J0SUdZQUJnQUdBQVlBQUVEMkFBc0FVTUQ5SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJR0ZBOHNCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY2NEOUlHTEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hKQThzQnl3SExBY3NCeXdITEFjY0R5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d1BMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBYzBEOUlHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHTEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY2NEOUlHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHRkE4c0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdITEFjc0J5d0hMQWNzQnl3SExBY3NCeXdIUEEvU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdiU0J0SUcwZ2JTQnRJRzBnYlNCdElHMGdZVUQwUVBsUUNWQUpVQU1BQXdBREFBTUFDVkFKVUFsUUNWQUpVQWxRQ1ZBRXdQTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUEvLzhFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFOQUFNQUFRQUJBQUlBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQ2dBVEFCY0FIZ0FiQUJvQUhnQVhBQllBRWdBZUFCc0FHQUFQQUJnQUhBQkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBQmdBR0FBZUFCNEFIZ0FUQUI0QVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUJZQUd3QVNBQjRBSGdBZUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBV0FBMEFFUUFlQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQVFBQkFBRUFBUUFCQUFGQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFKQUJZQUdnQWJBQnNBR3dBZUFCMEFIUUFlQUU4QUZ3QWVBQTBBSGdBZUFCb0FHd0JQQUU4QURnQlFBQjBBSFFBZEFFOEFUd0FYQUU4QVR3QlBBQllBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUIwQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZEFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUZBQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQWVBQjRBSGdBZUFGQUFUd0JBQUU4QVR3QlBBRUFBVHdCUUFGQUFUd0JRQUI0QUhnQWVBQjRBSGdBZUFCMEFIUUFkQUIwQUhnQWRBQjRBRGdCUUFGQUFVQUJRQUZBQUhnQWVBQjRBSGdBZUFCNEFIZ0JRQUI0QVVBQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBSkFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFrQUNRQUpBQWtBQ1FBSkFBa0FCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQWVBQjRBSGdBZUFGQUFIZ0FlQUI0QUt3QXJBRkFBVUFCUUFGQUFHQUJRQUNzQUt3QXJBQ3NBSGdBZUFGQUFIZ0JRQUZBQVVBQXJBRkFBS3dBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFLd0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBQkFBRUFBUUFCQUFFQUFRQUJBQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBVUFBZUFCNEFIZ0FlQUI0QUhnQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFZQUEwQUt3QXJBQjRBSGdBYkFDc0FCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFEUUFFQUI0QUJBQUVBQjRBQkFBRUFCTUFCQUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FWZ0JXQUZZQVZnQldBRllBVmdCV0FGWUFWZ0JXQUZZQVZnQldBRllBVmdCV0FGWUFWZ0JXQUZZQVZnQldBRllBVmdCV0FGWUFLd0FyQUNzQUt3QldBRllBVmdCV0FCNEFIZ0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUdnQWFBQm9BR0FBWUFCNEFIZ0FFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUV3QUVBQ3NBRXdBVEFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUJMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUJvQUdRQVpBQjRBVUFCUUFBUUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQk1BVUFBRUFBUUFCQUFFQUFRQUJBQUVBQjRBSGdBRUFBUUFCQUFFQUFRQUJBQlFBRkFBQkFBRUFCNEFCQUFFQUFRQUJBQlFBRkFBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCUUFGQUFVQUFlQUI0QVVBQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFLd0FlQUZBQUJBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUZBQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBVUFCUUFCNEFIZ0FZQUJNQVVBQXJBQ3NBQkFBYkFCc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBRUFGQUFCQUFFQUFRQUJBQUVBRkFBQkFBRUFBUUFVQUFFQUFRQUJBQUVBQVFBS3dBckFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBckFDc0FIZ0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUI0QUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBUUFCQUFFQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQVVBQUVBQVFBQkFBRUFBUUFCQUFFQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUJBQUVBQTBBRFFCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFCNEFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBRUFBUUFCQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQVVBQlFBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUNzQVVBQXJBQ3NBS3dCUUFGQUFVQUJRQUNzQUt3QUVBRkFBQkFBRUFBUUFCQUFFQUFRQUJBQXJBQ3NBQkFBRUFDc0FLd0FFQUFRQUJBQlFBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QUVBQ3NBS3dBckFDc0FVQUJRQUNzQVVBQlFBRkFBQkFBRUFDc0FLd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUZBQVVBQWFBQm9BVUFCUUFGQUFVQUJRQUV3QUhnQWJBRkFBSGdBRUFDc0FLd0FFQUFRQUJBQXJBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBVUFCUUFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBVUFCUUFDc0FVQUJRQUNzQVVBQlFBQ3NBS3dBRUFDc0FCQUFFQUFRQUJBQUVBQ3NBS3dBckFDc0FCQUFFQUNzQUt3QUVBQVFBQkFBckFDc0FLd0FFQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQXJBRkFBS3dBckFDc0FLd0FyQUNzQUt3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBQVFBQkFCUUFGQUFVQUFFQUI0QUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QUVBQVFBQkFBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUJRQUNzQVVBQlFBRkFBVUFCUUFDc0FLd0FFQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUNzQUJBQUVBQVFBS3dBRUFBUUFCQUFyQUNzQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JRQUZBQUJBQUVBQ3NBS3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFCNEFHd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFCQUFFQUFRQUJBQUVBQVFBS3dBRUFBUUFCQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQVVBQlFBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFRQUJBQUVBQVFBQkFBckFDc0FCQUFFQUNzQUt3QUVBQVFBQkFBckFDc0FLd0FyQUNzQUt3QXJBQVFBQkFBRUFDc0FLd0FyQUNzQVVBQlFBQ3NBVUFCUUFGQUFCQUFFQUNzQUt3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBQjRBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQVFBVUFBckFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFGQUFVQUJRQUNzQVVBQlFBRkFBVUFBckFDc0FLd0JRQUZBQUt3QlFBQ3NBVUFCUUFDc0FLd0FyQUZBQVVBQXJBQ3NBS3dCUUFGQUFVQUFyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUFRQUJBQUVBQVFBQkFBckFDc0FLd0FFQUFRQUJBQXJBQVFBQkFBRUFBUUFLd0FyQUZBQUt3QXJBQ3NBS3dBckFDc0FCQUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVVBQlFBRkFBSGdBZUFCNEFIZ0FlQUI0QUd3QWVBQ3NBS3dBckFDc0FLd0FFQUFRQUJBQUVBQVFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBVUFCUUFGQUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFDc0FVQUFFQUFRQUJBQUVBQVFBQkFBRUFDc0FCQUFFQUFRQUt3QUVBQVFBQkFBRUFDc0FLd0FyQUNzQUt3QXJBQ3NBQkFBRUFDc0FVQUJRQUZBQUt3QXJBQ3NBS3dBckFGQUFVQUFFQUFRQUt3QXJBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBS3dBckFDc0FLd0FyQUNzQUt3QU9BRkFBVUFCUUFGQUFVQUJRQUZBQUhnQlFBQVFBQkFBRUFBNEFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFLd0FyQUFRQVVBQUVBQVFBQkFBRUFBUUFCQUFFQUNzQUJBQUVBQVFBS3dBRUFBUUFCQUFFQUNzQUt3QXJBQ3NBS3dBckFDc0FCQUFFQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUFyQUZBQVVBQUVBQVFBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0JRQUZBQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBRUFBUUFCQUFFQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQVVBQlFBRkFBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFyQUFRQUJBQUVBQ3NBQkFBRUFBUUFCQUJRQUI0QUt3QXJBQ3NBS3dCUUFGQUFVQUFFQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUJBQUVBQ3NBS3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFCb0FVQUJRQUZBQVVBQlFBRkFBS3dBRUFBUUFCQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUFyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QUVBQ3NBS3dBckFDc0FCQUFFQUFRQUJBQUVBQVFBS3dBRUFDc0FCQUFFQUFRQUJBQUVBQVFBQkFBRUFDc0FLd0FyQUNzQUt3QXJBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBS3dBckFBUUFCQUFlQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUFxQUZ3QVhBQXFBQ29BS2dBcUFDb0FLZ0FxQUNzQUt3QXJBQ3NBR3dCY0FGd0FYQUJjQUZ3QVhBQmNBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQWVBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBRFFBTkFDc0FLd0FyQUNzQUt3QmNBRndBS3dCY0FDc0FYQUJjQUZ3QVhBQmNBQ3NBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FDc0FYQUFyQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QUtnQmNBRndBS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BWEFBckFDc0FYQUJjQUZ3QVhBQmNBQ3NBWEFBckFDb0FLZ0FxQUNvQUtnQXFBQ3NBS3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFDc0FLd0JjQUZ3QVhBQmNBRkFBRGdBT0FBNEFEZ0FlQUE0QURnQUpBQTRBRGdBTkFBa0FFd0FUQUJNQUV3QVRBQWtBSGdBVEFCNEFIZ0FlQUFRQUJBQWVBQjRBSGdBZUFCNEFIZ0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQURRQUVBQjRBQkFBZUFBUUFGZ0FSQUJZQUVRQUVBQVFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QXJBQ3NBS3dBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQURRQUVBQVFBQkFBRUFBUUFEUUFFQUFRQVVBQlFBRkFBVUFCUUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFyQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBckFBMEFEUUFlQUI0QUhnQWVBQjRBSGdBRUFCNEFIZ0FlQUI0QUhnQWVBQ3NBSGdBZUFBNEFEZ0FOQUE0QUhnQWVBQjRBSGdBZUFBa0FDUUFyQUNzQUt3QXJBQ3NBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dCY0FFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FEUUFOQUI0QUhnQWVBQjRBWEFCY0FGd0FYQUJjQUZ3QUtnQXFBQ29BS2dCY0FGd0FYQUJjQUNvQUtnQXFBRndBS2dBcUFDb0FYQUJjQUNvQUtnQXFBQ29BS2dBcUFDb0FYQUJjQUZ3QUtnQXFBQ29BS2dCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBRndBS2dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFDb0FLZ0FxQUNvQUtnQXFBRkFBVUFCUUFGQUFVQUJRQUNzQVVBQXJBQ3NBS3dBckFDc0FVQUFyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUhnQlFBRkFBVUFCUUFGZ0FXQUJZQUZnQVdBQllBRmdBV0FCWUFGZ0FXQUJZQUZnQVdBQllBRmdBV0FCWUFGZ0FXQUJZQUZnQVdBQllBRmdBV0FCWUFGZ0FXQUJZQUZnQVdBQlpBRmtBV1FCWkFGa0FXUUJaQUZrQVdRQlpBRmtBV1FCWkFGa0FXUUJaQUZrQVdRQlpBRmtBV1FCWkFGa0FXUUJaQUZrQVdRQlpBRmtBV1FCWkFGa0FXZ0JhQUZvQVdnQmFBRm9BV2dCYUFGb0FXZ0JhQUZvQVdnQmFBRm9BV2dCYUFGb0FXZ0JhQUZvQVdnQmFBRm9BV2dCYUFGb0FXZ0JhQUZvQVdnQmFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBVUFCUUFGQUFVQUFyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQUt3QlFBRkFBVUFCUUFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQlFBRkFBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFGQUFVQUJRQUZBQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBQ3NBVUFCUUFGQUFVQUFyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0JRQUZBQVVBQlFBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FCQUFFQUFRQUhnQU5BQjRBSGdBZUFCNEFIZ0FlQUI0QVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0JRQUZBQVVBQlFBRkFBVUFBckFDc0FEUUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBSGdBZUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBTkFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBV0FCRUFLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQTBBRFFBTkFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFBUUFCQUFFQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBTkFBMEFLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0JRQUZBQVVBQXJBQVFBQkFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQTBBRFFBVkFGd0FEUUFlQUEwQUd3QmNBQ29BS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0FyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QWVBQjRBRXdBVEFBMEFEUUFPQUI0QUV3QVRBQjRBQkFBRUFBUUFDUUFyQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUFFQUFRQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFRQVVBQXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0FFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQXJBQ3NBS3dBckFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUNzQUt3QXJBQ3NBSGdBckFDc0FLd0FUQUJNQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQXJBQ3NBWEFCY0FGd0FYQUJjQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFBckFDc0FLd0FyQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUNzQUt3QXJBQ3NBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FYQUFyQUNzQUt3QXFBQ29BVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFRQUJBQUVBQVFBQkFBckFDc0FIZ0FlQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS3dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLd0FyQUFRQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QXJBQ3NBS3dBckFDc0FLd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUNzQUt3QXJBQ3NBS3dBckFDb0FLZ0FxQUNvQUtnQXFBQ29BWEFBcUFDb0FLZ0FxQUNvQUtnQXJBQ3NBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FCQUFFQUFRQUJBQUVBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQVFBQkFBRUFBUUFCQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUNzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QU5BQTBBSGdBTkFBMEFEUUFOQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUt3QXJBQ3NBQkFBRUFBUUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFCUUFGQUFTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QWVBQjRBSGdBZUFGQUFVQUJRQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQ3NBS3dBckFBMEFEUUFOQUEwQURRQkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBQ3NBS3dBckFGQUFVQUJRQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBMEFEUUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0JRQUZBQVVBQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUt3QXJBQ3NBS3dBckFDc0FLd0FyQUFRQUJBQUVBQjRBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUJRQUZBQVVBQlFBQVFBVUFCUUFGQUFVQUJRQUZBQUJBQlFBRkFBQkFBRUFBUUFVQUFyQUNzQUt3QXJBQ3NBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQ3NBQkFBRUFBUUFCQUFFQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBS3dBckFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dCUUFDc0FVQUFyQUZBQUt3QWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFDc0FLd0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQXJBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQlFBQjRBSGdBZUFGQUFVQUJRQUNzQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQlFBRkFBVUFCUUFDc0FLd0FlQUI0QUhnQWVBQjRBSGdBckFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFLd0FyQUZBQVVBQlFBQ3NBSGdBZUFCNEFIZ0FlQUI0QUhnQU9BQjRBS3dBTkFBMEFEUUFOQUEwQURRQU5BQWtBRFFBTkFBMEFDQUFFQUFzQUJBQUVBQTBBQ1FBTkFBMEFEQUFkQUIwQUhnQVhBQmNBRmdBWEFCY0FGd0FXQUJjQUhRQWRBQjRBSGdBVUFCUUFGQUFOQUFFQUFRQUVBQVFBQkFBRUFBUUFDUUFhQUJvQUdnQWFBQm9BR2dBYUFCb0FIZ0FYQUJjQUhRQVZBQlVBSGdBZUFCNEFIZ0FlQUI0QUdBQVdBQkVBRlFBVkFCVUFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QURRQWVBQTBBRFFBTkFBMEFIZ0FOQUEwQURRQUhBQjRBSGdBZUFCNEFLd0FFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUZBQVVBQXJBQ3NBVHdCUUFGQUFVQUJRQUZBQUhnQWVBQjRBRmdBUkFFOEFVQUJQQUU4QVR3QlBBRkFBVUFCUUFGQUFVQUFlQUI0QUhnQVdBQkVBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQnNBR3dBYkFCc0FHd0FiQUJzQUdnQWJBQnNBR3dBYkFCc0FHd0FiQUJzQUd3QWJBQnNBR3dBYkFCc0FHZ0FiQUJzQUd3QWJBQm9BR3dBYkFCb0FHd0FiQUJzQUd3QWJBQnNBR3dBYkFCc0FHd0FiQUJzQUd3QWJBQnNBR3dBYkFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBSGdBZUFGQUFHZ0FlQUIwQUhnQlFBQjRBR2dBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdCUEFCNEFVQUFiQUI0QUhnQlFBRkFBVUFCUUFGQUFIZ0FlQUI0QUhRQWRBQjRBVUFBZUFGQUFIZ0JRQUI0QVVBQlBBRkFBVUFBZUFCNEFIZ0FlQUI0QUhnQWVBRkFBVUFCUUFGQUFVQUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFGQUFIZ0JRQUZBQVVBQlFBRThBVHdCUUFGQUFVQUJRQUZBQVR3QlFBRkFBVHdCUUFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUZBQVVBQlFBRkFBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBZUFCNEFVQUJRQUZBQVVBQlBBQjRBSGdBckFDc0FLd0FyQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjBBSGdBZEFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FkQUI0QUhRQWRBQjRBSGdBZUFCMEFIUUFlQUI0QUhRQWVBQjRBSGdBZEFCNEFIUUFiQUJzQUhnQWRBQjRBSGdBZUFCNEFIUUFlQUI0QUhRQWRBQjBBSFFBZUFCNEFIUUFlQUIwQUhnQWRBQjBBSFFBZEFCMEFIUUFlQUIwQUhnQWVBQjRBSGdBZUFCMEFIUUFkQUIwQUhnQWVBQjRBSGdBZEFCMEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FkQUI0QUhnQWVBQjBBSGdBZUFCNEFIZ0FlQUIwQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZEFCMEFIZ0FlQUIwQUhRQWRBQjBBSGdBZUFCMEFIUUFlQUI0QUhRQWRBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjBBSFFBZUFCNEFIUUFkQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSFFBZUFCNEFIZ0FkQUI0QUhnQWVBQjRBSGdBZUFCNEFIUUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCMEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBRkFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQllBRVFBV0FCRUFIZ0FlQUI0QUhnQWVBQjRBSFFBZUFCNEFIZ0FlQUI0QUhnQWVBQ1VBSlFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBV0FCRUFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUpRQWxBQ1VBSlFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFGQUFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhnQWVBQjRBSGdBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFlQUI0QUhRQWRBQjBBSFFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCMEFIUUFlQUIwQUhRQWRBQjBBSFFBZEFCMEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCMEFIUUFlQUI0QUhRQWRBQjRBSGdBZUFCNEFIUUFkQUI0QUhnQWVBQjRBSFFBZEFCMEFIZ0FlQUIwQUhnQWVBQjBBSFFBZEFCMEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZEFCMEFIUUFkQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUIwQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FsQUNVQUpRQWxBQjRBSFFBZEFCNEFIZ0FkQUI0QUhnQWVBQjRBSFFBZEFCNEFIZ0FlQUI0QUpRQWxBQjBBSFFBbEFCNEFKUUFsQUNVQUlBQWxBQ1VBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWxBQ1VBSlFBZUFCNEFIZ0FlQUIwQUhnQWRBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZEFCMEFIZ0FkQUIwQUhRQWVBQjBBSlFBZEFCMEFIZ0FkQUIwQUhnQWRBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUNVQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSFFBZEFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWRBQjBBSFFBZEFDVUFIZ0FsQUNVQUpRQWRBQ1VBSlFBZEFCMEFIUUFsQUNVQUhRQWRBQ1VBSFFBZEFDVUFKUUFsQUI0QUhRQWVBQjRBSGdBZUFCMEFIUUFsQUIwQUhRQWRBQjBBSFFBZEFDVUFKUUFsQUNVQUpRQWRBQ1VBSlFBZ0FDVUFIUUFkQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFlQUI0QUhnQWxBQ1VBSUFBZ0FDQUFJQUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCMEFIZ0FlQUI0QUZ3QVhBQmNBRndBWEFCY0FIZ0FUQUJNQUpRQWVBQjRBSGdBV0FCRUFGZ0FSQUJZQUVRQVdBQkVBRmdBUkFCWUFFUUFXQUJFQVR3QlBBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUJZQUVRQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQVdBQkVBRmdBUkFCWUFFUUFXQUJFQUZnQVJBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBRmdBUkFCWUFFUUFXQUJFQUZnQVJBQllBRVFBV0FCRUFGZ0FSQUJZQUVRQVdBQkVBRmdBUkFCWUFFUUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FXQUJFQUZnQVJBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBRmdBUkFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWRBQjBBSFFBZEFCMEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQXJBQ3NBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUt3QWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBVUFCUUFGQUFVQUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBRUFBUUFCQUFlQUI0QUt3QXJBQ3NBS3dBckFCTUFEUUFOQUEwQVVBQVRBQTBBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFDc0FLd0FyQUNzQVVBQU5BQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FFQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQXJBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUNzQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFBMEFEUUFOQUEwQURRQU5BQTBBRFFBZUFBMEFGZ0FOQUI0QUhnQVhBQmNBSGdBZUFCY0FGd0FXQUJFQUZnQVJBQllBRVFBV0FCRUFEUUFOQUEwQURRQVRBRkFBRFFBTkFCNEFEUUFOQUI0QUhnQWVBQjRBSGdBTUFBd0FEUUFOQUEwQUhnQU5BQTBBRmdBTkFBMEFEUUFOQUEwQURRQU5BQTBBSGdBTkFCNEFEUUFOQUI0QUhnQWVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDc0FKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBckFDc0FLd0FyQUEwQUVRQVJBQ1VBSlFCSEFGY0FWd0FXQUJFQUZnQVJBQllBRVFBV0FCRUFGZ0FSQUNVQUpRQVdBQkVBRmdBUkFCWUFFUUFXQUJFQUZRQVdBQkVBRVFBbEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFBUUFCQUFFQUFRQUJBQUVBQ1VBVndCWEFGY0FWd0EyQUNVQUpRQlhBRmNBVndCSEFFY0FKUUFsQUNVQUt3QlJBRmNBVVFCWEFGRUFWd0JSQUZjQVVRQlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZFQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCUkFGY0FVUUJYQUZFQVZ3QlhBRmNBVndCWEFGY0FVUUJYQUZjQVZ3QlhBRmNBVndCUkFGRUFLd0FyQUFRQUJBQVZBQlVBUndCSEFGY0FGUUJSQUZjQVVRQlhBRkVBVndCUkFGY0FVUUJYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGRUFWd0JSQUZjQVVRQlhBRmNBVndCWEFGY0FWd0JSQUZjQVZ3QlhBRmNBVndCWEFGRUFVUUJYQUZjQVZ3QlhBQlVBVVFCSEFFY0FWd0FyQUNzQUt3QXJBQ3NBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBS3dCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FLd0FsQUNVQVZ3QlhBRmNBVndBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUZFQVVRQlJBRkVBVVFCUkFGRUFVUUJSQUZFQVVRQlJBRkVBVVFCUkFGRUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQXJBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUJQQUU4QVR3QlBBRThBVHdCUEFFOEFKUUJYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUNVQUpRQWxBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFFY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBS3dBckFDc0FKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFEUUFUQUEwQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUZBQUJBQUVBQVFBQkFBZUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFIZ0JRQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QVVBQlFBQVFBQkFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQVFBQkFBZUFBMEFEUUFOQUEwQURRQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBVUFBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQlFBQjRBSGdBZUFCNEFIZ0FlQUZBQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FyQUNzQUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBZUFCNEFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFRQVVBQlFBRkFBQkFCUUFGQUFVQUJRQUFRQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBUUFCQUFFQUFRQUJBQWVBQjRBSGdBZUFBUUFLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFIZ0FlQUJvQUhnQXJBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQURnQU9BQk1BRXdBckFDc0FLd0FyQUNzQUt3QXJBQ3NBQkFBRUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFRQUJBQUVBQVFBQkFBRUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBTkFBMEFTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0FyQUNzQUt3QXJBQ3NBS3dBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFCUUFGQUFVQUJRQUZBQVVBQWVBQjRBSGdCUUFBNEFVQUJRQUFRQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBMEFEUUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFCNEFXQUJZQUZnQVdBQllBRmdBV0FCWUFGZ0FXQUJZQUZnQVdBQllBRmdBV0FCWUFGZ0FXQUJZQUZnQVdBQllBRmdBV0FCWUFGZ0FXQUJZQUNzQUt3QXJBQVFBSGdBZUFCNEFIZ0FlQUI0QURRQU5BQTBBSGdBZUFCNEFIZ0FyQUZBQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QXJBQ3NBS3dBckFCNEFIZ0JjQUZ3QVhBQmNBRndBS2dCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FYQUJjQUZ3QVhBQmNBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBQVFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQVFBQkFBckFDc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0FyQUNzQUhnQU5BQTBBRFFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QUtnQXFBQ29BWEFBcUFDb0FLZ0JjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUFxQUZ3QUtnQXFBQ29BWEFCY0FDb0FLZ0JjQUZ3QVhBQmNBRndBS2dBcUFGd0FLZ0JjQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGd0FYQUJjQUNvQUtnQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQkFBRUFBUUFCQUFFQUEwQURRQlFBRkFBVUFBRUFBUUFLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFBckFDc0FVQUJRQUZBQVVBQlFBRkFBS3dBckFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUhnQWVBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFEUUFFQUFRQUt3QXJBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBS3dBckFDc0FLd0FyQUNzQVZBQlZBRlVBVlFCVkFGVUFWUUJWQUZVQVZRQlZBRlVBVlFCVkFGVUFWUUJWQUZVQVZRQlZBRlVBVlFCVkFGVUFWUUJWQUZVQVZRQlVBRlVBVlFCVkFGVUFWUUJWQUZVQVZRQlZBRlVBVlFCVkFGVUFWUUJWQUZVQVZRQlZBRlVBVlFCVkFGVUFWUUJWQUZVQVZRQlZBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGa0FXUUJaQUZrQVdRQlpBRmtBV1FCWkFGa0FXUUJaQUZrQVdRQlpBRmtBV1FCWkFGa0FLd0FyQUNzQUt3QmFBRm9BV2dCYUFGb0FXZ0JhQUZvQVdnQmFBRm9BV2dCYUFGb0FXZ0JhQUZvQVdnQmFBRm9BV2dCYUFGb0FXZ0JhQUZvQVdnQmFBRm9BS3dBckFDc0FLd0FHQUFZQUJnQUdBQVlBQmdBR0FBWUFCZ0FHQUFZQUJnQUdBQVlBQmdBR0FBWUFCZ0FHQUFZQUJnQUdBQVlBQmdBR0FBWUFCZ0FHQUFZQUJnQUdBQVlBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUNVQUpRQlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQUpRQWxBQ1VBSlFBbEFDVUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBS3dBckFDc0FLd0FyQUZZQUJBQldBRllBVmdCV0FGWUFWZ0JXQUZZQVZnQldBQjRBVmdCV0FGWUFWZ0JXQUZZQVZnQldBRllBVmdCV0FGWUFWZ0FyQUZZQVZnQldBRllBVmdBckFGWUFLd0JXQUZZQUt3QldBRllBS3dCV0FGWUFWZ0JXQUZZQVZnQldBRllBVmdCV0FGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFFUUFXQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBYUFCNEFLd0FyQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFHQUFSQUJFQUdBQVlBQk1BRXdBV0FCRUFGQUFyQUNzQUt3QXJBQ3NBS3dBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQ1VBSlFBbEFDVUFKUUFXQUJFQUZnQVJBQllBRVFBV0FCRUFGZ0FSQUJZQUVRQWxBQ1VBRmdBUkFDVUFKUUFsQUNVQUpRQWxBQ1VBRVFBbEFCRUFLd0FWQUJVQUV3QVRBQ1VBRmdBUkFCWUFFUUFXQUJFQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNzQUpRQWJBQm9BSlFBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QXJBQWNBS3dBVEFDVUFKUUFiQUJvQUpRQWxBQllBRVFBbEFDVUFFUUFsQUJFQUpRQlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBQlVBRlFBbEFDVUFKUUFUQUNVQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUJZQUpRQVJBQ1VBSlFBbEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndBV0FDVUFFUUFsQUJZQUVRQVJBQllBRVFBUkFCVUFWd0JSQUZFQVVRQlJBRkVBVVFCUkFGRUFVUUJSQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFFY0FSd0FyQUNzQVZ3QlhBRmNBVndCWEFGY0FLd0FyQUZjQVZ3QlhBRmNBVndCWEFDc0FLd0JYQUZjQVZ3QlhBRmNBVndBckFDc0FWd0JYQUZjQUt3QXJBQ3NBR2dBYkFDVUFKUUFsQUJzQUd3QXJBQjRBSGdBZUFCNEFIZ0FlQUI0QUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QUVBQVFBQkFBUUFCMEFLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FEUUFOQUEwQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0JRQUZBQUhnQWVBQjRBS3dBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFBUUFLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FFQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQkFBRUFBUUFCQUFFQUNzQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUEwQVVBQlFBRkFBVUFBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFOQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FlQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBS3dBckFGQUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFGQUFVQUFyQUNzQUt3QlFBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QU5BRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFlQUI0QVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFGQUFVQUFyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUEwQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBS3dBZUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBQVFBQkFBRUFDc0FCQUFFQUNzQUt3QXJBQ3NBS3dBRUFBUUFCQUFFQUZBQVVBQlFBRkFBS3dCUUFGQUFVQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0FyQUFRQUJBQUVBQ3NBS3dBckFDc0FCQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBS3dBckFBMEFEUUFOQUEwQURRQU5BQTBBRFFBZUFDc0FLd0FyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFlQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFlQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBUUFCQUFyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUFOQUEwQURRQU5BQTBBRFFBVUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QXJBQ3NBRFFBTkFBMEFEUUFOQUEwQURRQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUI0QUhnQWVBQjRBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUFRQUJBQUVBQVFBS3dBckFDc0FLd0FyQUNzQUt3QXJBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQVFBQkFBTkFDc0FLd0JRQUZBQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFCUUFGQUFVQUJRQUI0QUhnQWVBQjRBSGdBckFDc0FLd0FyQUNzQUt3QUVBQVFBQkFBRUFBUUFCQUFFQUEwQURRQWVBQjRBSGdBZUFCNEFLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FCQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFlQUI0QUhnQU5BQTBBRFFBTkFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FlQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QXJBQ3NBS3dBckFDc0FLd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUNzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QU5BQTBBRFFBTkFGQUFCQUFFQUZBQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUJBQWVBQTRBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBRUFGQUFVQUJRQUZBQURRQU5BQjRBRFFBRUFBUUFCQUFFQUI0QUJBQUVBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBVUFBT0FGQUFEUUFOQUEwQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBTkFBMEFIZ0FOQUEwQUhnQUVBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQXJBRkFBS3dCUUFGQUFVQUJRQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUEwQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFLd0FyQUNzQUt3QXJBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBS3dBckFDc0FLd0FyQUNzQUJBQUVBQVFBQkFBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FVQUJRQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUJRQUNzQVVBQlFBRkFBVUFCUUFDc0FCQUFFQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFyQUNzQUJBQUVBQ3NBS3dBRUFBUUFCQUFyQUNzQVVBQXJBQ3NBS3dBckFDc0FLd0FFQUNzQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQUJBQUVBQ3NBS3dBRUFBUUFCQUFFQUFRQUJBQUVBQ3NBS3dBckFBUUFCQUFFQUFRQUJBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBQkFBRUFBUUFCQUFFQUFRQUJBQlFBRkFBVUFCUUFBMEFEUUFOQUEwQUhnQkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBQTBBRFFBckFCNEFCQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBRUFBUUFCQUFFQUZBQVVBQWVBRkFBS3dBckFDc0FLd0FyQUNzQUt3QXJBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUFRQUJBQUVBQVFBQkFBckFDc0FCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFEZ0FOQUEwQUV3QVRBQjRBSGdBZUFBMEFEUUFOQUEwQURRQU5BQTBBRFFBTkFBMEFEUUFOQUEwQURRQU5BRkFBVUFCUUFGQUFCQUFFQUNzQUt3QUVBQTBBRFFBZUFGQUFLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQUt3QXJBQ3NBS3dBckFDc0FEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUZBQUt3QXJBQ3NBS3dBckFDc0FLd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBWEFCY0FGd0FYQUJjQUZ3QVhBQmNBRndBS3dBckFDb0FLZ0FxQUNvQUtnQXFBQ29BS2dBcUFDb0FLZ0FxQUNvQUtnQXFBQ3NBS3dBckFDc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JjQUZ3QURRQU5BQTBBS2dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBZUFDc0FLd0FyQUNzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBckFGQUFLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUJBQUVBQVFBQkFBRUFBUUFLd0FFQUFRQUt3QXJBQVFBQkFBRUFBUUFVQUFFQUZBQUJBQUVBQTBBRFFBTkFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0FyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUJBQUVBQVFBQkFBRUFBUUFCQUFyQUNzQUJBQUVBQVFBQkFBRUFBUUFCQUJRQUE0QVVBQUVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBRUFBUUFCQUFFQUZBQUJBQUVBQVFBQkFBT0FCNEFEUUFOQUEwQURRQU9BQjRBQkFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBVUFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBMEFEUUFOQUZBQURnQU9BQTRBRFFBTkFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFDc0FCQUFFQUFRQUJBQUVBQVFBQkFBRUFGQUFEUUFOQUEwQURRQU5BQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBT0FCTUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0FyQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBckFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUNzQVVBQlFBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFFQUFRQUJBQUVBQVFBQkFBckFDc0FLd0FFQUNzQUJBQUVBQ3NBQkFBRUFBUUFCQUFFQUFRQUJBQlFBQVFBS3dBckFDc0FLd0FyQUNzQUt3QXJBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFLd0JRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFFQUFRQUJBQUVBQVFBS3dBRUFBUUFLd0FFQUFRQUJBQUVBQVFBVUFBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQkFBRUFBUUFCQUFlQUI0QUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWFBQm9BR2dBYUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUEwQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBS3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQ3NBRFFBTkFBMEFEUUFOQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBU0FCSUFFZ0FRd0JEQUVNQVVBQlFBRkFBVUFCREFGQUFVQUJRQUVnQVF3QklBRU1BVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBU0FCREFFTUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dBSkFBa0FDUUFKQUFrQUNRQUpBQllBRVFBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJJQUVNQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQUt3QXJBQ3NBS3dBTkFBMEFLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QXJBQVFBQkFBRUFBUUFCQUFOQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFFQUFRQUJBQUVBQVFBQkFBRUFBMEFEUUFOQUI0QUhnQWVBQjRBSGdBZUFGQUFVQUJRQUZBQURRQWVBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dBckFGQUFVQUJRQUZBQVVBQlFBRkFBS3dCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFOQUEwQUhnQWVBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QXJBQ3NBS3dBRUFGQUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBS3dBckFDc0FLd0FyQUNzQUt3QUVBQVFBQkFBRUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVJ3QkhBQlVBUndBSkFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FFQUFRQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FVUUJSQUZFQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dCUkFGRUFVUUJSQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0FyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFDc0FIZ0FFQUFRQURRQUVBQVFBQkFBRUFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQjRBSGdBZUFCNEFIZ0FlQUI0QUt3QXJBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUFRQUJBQUVBQVFBQkFBZUFCNEFIZ0FFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQjRBSGdBRUFBUUFCQUFFQUFRQUJBQUVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFCQUFFQUFRQUJBQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBQkFBRUFBUUFIZ0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQXJBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFLd0JRQUZBQUt3QXJBRkFBS3dBckFGQUFVQUFyQUNzQVVBQlFBRkFBVUFBckFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUNzQVVBQXJBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBS3dCUUFGQUFVQUJRQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUNzQUhnQWVBRkFBVUFCUUFGQUFVQUFyQUZBQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUhnQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQ3NBS3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFlQUI0QUhnQWVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFCQUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUFRQUhnQWVBQTBBRFFBTkFBMEFIZ0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBRUFBUUFCQUFFQUFRQUt3QUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFBUUFCQUFFQUFRQUJBQUVBQVFBS3dBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBS3dBckFBUUFCQUFFQUFRQUJBQUVBQVFBS3dBRUFBUUFLd0FFQUFRQUJBQUVBQVFBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBRUFBUUFCQUFFQUFRQUJBQUVBRkFBVUFCUUFGQUFVQUJRQUZBQUt3QXJBRXNBU3dCTEFFc0FTd0JMQUVzQVN3QkxBRXNBS3dBckFDc0FLd0JRQUI0QUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBRUFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0FyQUNzQUt3QXJBQnNBVUFCUUFGQUFVQUJRQUNzQUt3QlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUVBQVFBQkFBRUFBUUFCQUFFQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUI0QUhnQWVBQjRBQkFBRUFBUUFCQUFFQUFRQUJBQlFBQ3NBS3dBckFDc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FTd0FyQUNzQUt3QXJBQllBRmdBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQUdnQlFBRkFBVUFBYUFGQUFVQUJRQUZBQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFlQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFDc0FLd0JRQUZBQVVBQlFBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBS3dCUUFGQUFLd0JRQUNzQUt3QlFBQ3NBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBckFGQUFVQUJRQUZBQUt3QlFBQ3NBVUFBckFDc0FLd0FyQUNzQUt3QlFBQ3NBS3dBckFDc0FVQUFyQUZBQUt3QlFBQ3NBVUFCUUFGQUFLd0JRQUZBQUt3QlFBQ3NBS3dCUUFDc0FVQUFyQUZBQUt3QlFBQ3NBVUFBckFGQUFVQUFyQUZBQUt3QXJBRkFBVUFCUUFGQUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFDc0FVQUJRQUZBQVVBQXJBRkFBVUFCUUFGQUFLd0JRQUNzQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQXJBQ3NBS3dBckFDc0FVQUJRQUZBQUt3QlFBRkFBVUFCUUFGQUFLd0JRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBZUFCNEFLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBRThBVHdCUEFFOEFUd0JQQUU4QVR3QlBBRThBVHdCUEFFOEFKUUFsQUNVQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhnQWVBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjRBSGdBZUFDVUFKUUFsQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQXBBQ2tBS1FBcEFDa0FLUUFwQUNrQUtRQXBBQ2tBS1FBcEFDa0FLUUFwQUNrQUtRQXBBQ2tBS1FBcEFDa0FLUUFwQUNrQUpRQWxBQ1VBSlFBbEFDQUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWVBQjRBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUI0QUhnQWxBQ1VBSlFBbEFDVUFIZ0FsQUNVQUpRQWxBQ1VBSUFBZ0FDQUFKUUFsQUNBQUpRQWxBQ0FBSUFBZ0FDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNFQUlRQWhBQ0VBSVFBbEFDVUFJQUFnQUNVQUpRQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSlFBbEFDVUFJQUFsQUNVQUpRQWxBQ0FBSUFBZ0FDVUFJQUFnQUNBQUpRQWxBQ1VBSlFBbEFDVUFKUUFnQUNVQUlBQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFIZ0FsQUI0QUpRQWVBQ1VBSlFBbEFDVUFKUUFnQUNVQUpRQWxBQ1VBSGdBbEFCNEFIZ0FsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQjRBSGdBZUFCNEFIZ0FlQUI0QUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDQUFJQUFsQUNVQUpRQWxBQ0FBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ0FBSlFBbEFDVUFKUUFnQUNBQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBZUFCNEFIZ0FlQUI0QUhnQWxBQ1VBSlFBbEFDVUFKUUFsQUNBQUlBQWdBQ1VBSlFBbEFDQUFJQUFnQUNBQUlBQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCY0FGd0FYQUJVQUZRQVZBQjRBSGdBZUFCNEFKUUFsQUNVQUlBQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNBQUlBQWdBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ0FBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDQUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFKUUFsQUNVQUpRQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUNVQUpRQWxBQ1VBSlFBbEFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWdBQ1VBSlFBZ0FDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSlFBbEFDVUFKUUFsQUNVQUlBQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ1VBSlFBZ0FDQUFJQUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBZ0FDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNBQUlBQWxBQ0FBSUFBbEFDQUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWdBQ0FBSUFBbEFDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUpRQWxBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBS3dBZUFCNEFIZ0FlQUI0QUhnQWVBQjRBSGdBZUFCNEFIZ0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFFc0FTd0JMQUVzQVN3QkxBRXNBU3dCTEFFc0FLd0FyQUNzQUt3QXJBQ3NBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFLd0FyQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBQ1VBSlFCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0FsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQVZ3QlhBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUJYQUZjQVZ3QlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBVndCWEFGY0FKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQlhBRmNBVndCWEFGY0FWd0JYQUZjQVZ3QlhBRmNBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFKUUFsQUNVQUpRQWxBQ1VBSlFBbEFDVUFLd0FFQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQ3NBS3dBckFDc0FLd0FyQUNzQUt3QXJBQT09JztcbmV4cG9ydCBjb25zdCBieXRlTGVuZ3RoID0gMzk2NjQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7Y3JlYXRlVHJpZUZyb21CYXNlNjR9IGZyb20gJ3V0cmllJztcbmltcG9ydCB7YmFzZTY0LCBieXRlTGVuZ3RofSBmcm9tICcuL2xpbmVicmVhay10cmllJztcbmltcG9ydCB7ZnJvbUNvZGVQb2ludCwgdG9Db2RlUG9pbnRzfSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgY29uc3QgTEVUVEVSX05VTUJFUl9NT0RJRklFUiA9IDUwO1xuXG4vLyBOb24tdGFpbG9yYWJsZSBMaW5lIEJyZWFraW5nIENsYXNzZXNcbmNvbnN0IEJLID0gMTsgLy8gIENhdXNlIGEgbGluZSBicmVhayAoYWZ0ZXIpXG5jb25zdCBDUiA9IDI7IC8vICBDYXVzZSBhIGxpbmUgYnJlYWsgKGFmdGVyKSwgZXhjZXB0IGJldHdlZW4gQ1IgYW5kIExGXG5jb25zdCBMRiA9IDM7IC8vICBDYXVzZSBhIGxpbmUgYnJlYWsgKGFmdGVyKVxuY29uc3QgQ00gPSA0OyAvLyAgUHJvaGliaXQgYSBsaW5lIGJyZWFrIGJldHdlZW4gdGhlIGNoYXJhY3RlciBhbmQgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXJcbmNvbnN0IE5MID0gNTsgLy8gIENhdXNlIGEgbGluZSBicmVhayAoYWZ0ZXIpXG5jb25zdCBTRyA9IDY7IC8vICBEbyBub3Qgb2NjdXIgaW4gd2VsbC1mb3JtZWQgdGV4dFxuY29uc3QgV0ogPSA3OyAvLyAgUHJvaGliaXQgbGluZSBicmVha3MgYmVmb3JlIGFuZCBhZnRlclxuY29uc3QgWlcgPSA4OyAvLyAgUHJvdmlkZSBhIGJyZWFrIG9wcG9ydHVuaXR5XG5jb25zdCBHTCA9IDk7IC8vICBQcm9oaWJpdCBsaW5lIGJyZWFrcyBiZWZvcmUgYW5kIGFmdGVyXG5jb25zdCBTUCA9IDEwOyAvLyBFbmFibGUgaW5kaXJlY3QgbGluZSBicmVha3NcbmNvbnN0IFpXSiA9IDExOyAvLyBQcm9oaWJpdCBsaW5lIGJyZWFrcyB3aXRoaW4gam9pbmVyIHNlcXVlbmNlc1xuLy8gQnJlYWsgT3Bwb3J0dW5pdGllc1xuY29uc3QgQjIgPSAxMjsgLy8gIFByb3ZpZGUgYSBsaW5lIGJyZWFrIG9wcG9ydHVuaXR5IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNoYXJhY3RlclxuY29uc3QgQkEgPSAxMzsgLy8gIEdlbmVyYWxseSBwcm92aWRlIGEgbGluZSBicmVhayBvcHBvcnR1bml0eSBhZnRlciB0aGUgY2hhcmFjdGVyXG5jb25zdCBCQiA9IDE0OyAvLyAgR2VuZXJhbGx5IHByb3ZpZGUgYSBsaW5lIGJyZWFrIG9wcG9ydHVuaXR5IGJlZm9yZSB0aGUgY2hhcmFjdGVyXG5jb25zdCBIWSA9IDE1OyAvLyAgUHJvdmlkZSBhIGxpbmUgYnJlYWsgb3Bwb3J0dW5pdHkgYWZ0ZXIgdGhlIGNoYXJhY3RlciwgZXhjZXB0IGluIG51bWVyaWMgY29udGV4dFxuY29uc3QgQ0IgPSAxNjsgLy8gICBQcm92aWRlIGEgbGluZSBicmVhayBvcHBvcnR1bml0eSBjb250aW5nZW50IG9uIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbi8vIENoYXJhY3RlcnMgUHJvaGliaXRpbmcgQ2VydGFpbiBCcmVha3NcbmNvbnN0IENMID0gMTc7IC8vICBQcm9oaWJpdCBsaW5lIGJyZWFrcyBiZWZvcmVcbmNvbnN0IENQID0gMTg7IC8vICBQcm9oaWJpdCBsaW5lIGJyZWFrcyBiZWZvcmVcbmNvbnN0IEVYID0gMTk7IC8vICBQcm9oaWJpdCBsaW5lIGJyZWFrcyBiZWZvcmVcbmNvbnN0IElOID0gMjA7IC8vICBBbGxvdyBvbmx5IGluZGlyZWN0IGxpbmUgYnJlYWtzIGJldHdlZW4gcGFpcnNcbmNvbnN0IE5TID0gMjE7IC8vICBBbGxvdyBvbmx5IGluZGlyZWN0IGxpbmUgYnJlYWtzIGJlZm9yZVxuY29uc3QgT1AgPSAyMjsgLy8gIFByb2hpYml0IGxpbmUgYnJlYWtzIGFmdGVyXG5jb25zdCBRVSA9IDIzOyAvLyAgQWN0IGxpa2UgdGhleSBhcmUgYm90aCBvcGVuaW5nIGFuZCBjbG9zaW5nXG4vLyBOdW1lcmljIENvbnRleHRcbmNvbnN0IElTID0gMjQ7IC8vICBQcmV2ZW50IGJyZWFrcyBhZnRlciBhbnkgYW5kIGJlZm9yZSBudW1lcmljXG5jb25zdCBOVSA9IDI1OyAvLyAgRm9ybSBudW1lcmljIGV4cHJlc3Npb25zIGZvciBsaW5lIGJyZWFraW5nIHB1cnBvc2VzXG5jb25zdCBQTyA9IDI2OyAvLyAgRG8gbm90IGJyZWFrIGZvbGxvd2luZyBhIG51bWVyaWMgZXhwcmVzc2lvblxuY29uc3QgUFIgPSAyNzsgLy8gIERvIG5vdCBicmVhayBpbiBmcm9udCBvZiBhIG51bWVyaWMgZXhwcmVzc2lvblxuY29uc3QgU1kgPSAyODsgLy8gIFByZXZlbnQgYSBicmVhayBiZWZvcmU7IGFuZCBhbGxvdyBhIGJyZWFrIGFmdGVyXG4vLyBPdGhlciBDaGFyYWN0ZXJzXG5jb25zdCBBSSA9IDI5OyAvLyAgQWN0IGxpa2UgQUwgd2hlbiB0aGUgcmVzb2x2ZWRFQVcgaXMgTjsgb3RoZXJ3aXNlOyBhY3QgYXMgSURcbmNvbnN0IEFMID0gMzA7IC8vICBBcmUgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIG9yIHN5bWJvbHMgdGhhdCBhcmUgdXNlZCB3aXRoIGFscGhhYmV0aWMgY2hhcmFjdGVyc1xuY29uc3QgQ0ogPSAzMTsgLy8gIFRyZWF0IGFzIE5TIG9yIElEIGZvciBzdHJpY3Qgb3Igbm9ybWFsIGJyZWFraW5nLlxuY29uc3QgRUIgPSAzMjsgLy8gIERvIG5vdCBicmVhayBmcm9tIGZvbGxvd2luZyBFbW9qaSBNb2RpZmllclxuY29uc3QgRU0gPSAzMzsgLy8gIERvIG5vdCBicmVhayBmcm9tIHByZWNlZGluZyBFbW9qaSBCYXNlXG5jb25zdCBIMiA9IDM0OyAvLyAgRm9ybSBLb3JlYW4gc3lsbGFibGUgYmxvY2tzXG5jb25zdCBIMyA9IDM1OyAvLyAgRm9ybSBLb3JlYW4gc3lsbGFibGUgYmxvY2tzXG5jb25zdCBITCA9IDM2OyAvLyAgRG8gbm90IGJyZWFrIGFyb3VuZCBhIGZvbGxvd2luZyBoeXBoZW47IG90aGVyd2lzZSBhY3QgYXMgQWxwaGFiZXRpY1xuY29uc3QgSUQgPSAzNzsgLy8gIEJyZWFrIGJlZm9yZSBvciBhZnRlcjsgZXhjZXB0IGluIHNvbWUgbnVtZXJpYyBjb250ZXh0XG5jb25zdCBKTCA9IDM4OyAvLyAgRm9ybSBLb3JlYW4gc3lsbGFibGUgYmxvY2tzXG5jb25zdCBKViA9IDM5OyAvLyAgRm9ybSBLb3JlYW4gc3lsbGFibGUgYmxvY2tzXG5jb25zdCBKVCA9IDQwOyAvLyAgRm9ybSBLb3JlYW4gc3lsbGFibGUgYmxvY2tzXG5jb25zdCBSSSA9IDQxOyAvLyAgS2VlcCBwYWlycyB0b2dldGhlci4gRm9yIHBhaXJzOyBicmVhayBiZWZvcmUgYW5kIGFmdGVyIG90aGVyIGNsYXNzZXNcbmNvbnN0IFNBID0gNDI7IC8vICBQcm92aWRlIGEgbGluZSBicmVhayBvcHBvcnR1bml0eSBjb250aW5nZW50IG9uIGFkZGl0aW9uYWwsIGxhbmd1YWdlLXNwZWNpZmljIGNvbnRleHQgYW5hbHlzaXNcbmNvbnN0IFhYID0gNDM7IC8vICBIYXZlIGFzIHlldCB1bmtub3duIGxpbmUgYnJlYWtpbmcgYmVoYXZpb3Igb3IgdW5hc3NpZ25lZCBjb2RlIHBvc2l0aW9uc1xuXG5jb25zdCBlYV9PUCA9IFsweDIzMjksIDB4ZmYwOF07XG5cbmV4cG9ydCBjb25zdCBjbGFzc2VzOiB7W2tleTogc3RyaW5nXTogbnVtYmVyfSA9IHtcbiAgICBCSyxcbiAgICBDUixcbiAgICBMRixcbiAgICBDTSxcbiAgICBOTCxcbiAgICBTRyxcbiAgICBXSixcbiAgICBaVyxcbiAgICBHTCxcbiAgICBTUCxcbiAgICBaV0osXG4gICAgQjIsXG4gICAgQkEsXG4gICAgQkIsXG4gICAgSFksXG4gICAgQ0IsXG4gICAgQ0wsXG4gICAgQ1AsXG4gICAgRVgsXG4gICAgSU4sXG4gICAgTlMsXG4gICAgT1AsXG4gICAgUVUsXG4gICAgSVMsXG4gICAgTlUsXG4gICAgUE8sXG4gICAgUFIsXG4gICAgU1ksXG4gICAgQUksXG4gICAgQUwsXG4gICAgQ0osXG4gICAgRUIsXG4gICAgRU0sXG4gICAgSDIsXG4gICAgSDMsXG4gICAgSEwsXG4gICAgSUQsXG4gICAgSkwsXG4gICAgSlYsXG4gICAgSlQsXG4gICAgUkksXG4gICAgU0EsXG4gICAgWFgsXG59O1xuXG5leHBvcnQgY29uc3QgQlJFQUtfTUFOREFUT1JZID0gJyEnO1xuZXhwb3J0IGNvbnN0IEJSRUFLX05PVF9BTExPV0VEID0gJ8OXJztcbmV4cG9ydCBjb25zdCBCUkVBS19BTExPV0VEID0gJ8O3JztcbmV4cG9ydCBjb25zdCBVbmljb2RlVHJpZSA9IGNyZWF0ZVRyaWVGcm9tQmFzZTY0KGJhc2U2NCwgYnl0ZUxlbmd0aCk7XG5cbmNvbnN0IEFMUEhBQkVUSUNTID0gW0FMLCBITF07XG5jb25zdCBIQVJEX0xJTkVfQlJFQUtTID0gW0JLLCBDUiwgTEYsIE5MXTtcbmNvbnN0IFNQQUNFID0gW1NQLCBaV107XG5jb25zdCBQUkVGSVhfUE9TVEZJWCA9IFtQUiwgUE9dO1xuY29uc3QgTElORV9CUkVBS1MgPSBIQVJEX0xJTkVfQlJFQUtTLmNvbmNhdChTUEFDRSk7XG5jb25zdCBLT1JFQU5fU1lMTEFCTEVfQkxPQ0sgPSBbSkwsIEpWLCBKVCwgSDIsIEgzXTtcbmNvbnN0IEhZUEhFTiA9IFtIWSwgQkFdO1xuXG5leHBvcnQgY29uc3QgY29kZVBvaW50c1RvQ2hhcmFjdGVyQ2xhc3NlcyA9IChcbiAgICBjb2RlUG9pbnRzOiBudW1iZXJbXSxcbiAgICBsaW5lQnJlYWs6IHN0cmluZyA9ICdzdHJpY3QnXG4pOiBbbnVtYmVyW10sIG51bWJlcltdLCBib29sZWFuW11dID0+IHtcbiAgICBjb25zdCB0eXBlczogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCBpbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IGNhdGVnb3JpZXM6IGJvb2xlYW5bXSA9IFtdO1xuICAgIGNvZGVQb2ludHMuZm9yRWFjaCgoY29kZVBvaW50LCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgY2xhc3NUeXBlID0gVW5pY29kZVRyaWUuZ2V0KGNvZGVQb2ludCk7XG4gICAgICAgIGlmIChjbGFzc1R5cGUgPiBMRVRURVJfTlVNQkVSX01PRElGSUVSKSB7XG4gICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2godHJ1ZSk7XG4gICAgICAgICAgICBjbGFzc1R5cGUgLT0gTEVUVEVSX05VTUJFUl9NT0RJRklFUjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoWydub3JtYWwnLCAnYXV0bycsICdsb29zZSddLmluZGV4T2YobGluZUJyZWFrKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIFUrMjAxMCwg4oCTIFUrMjAxMywg44CcIFUrMzAxQywg44KgIFUrMzBBMFxuICAgICAgICAgICAgaWYgKFsweDIwMTAsIDB4MjAxMywgMHgzMDFjLCAweDMwYTBdLmluZGV4T2YoY29kZVBvaW50KSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlcy5wdXNoKENCKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbGFzc1R5cGUgPT09IENNIHx8IGNsYXNzVHlwZSA9PT0gWldKKSB7XG4gICAgICAgICAgICAvLyBMQjEwIFRyZWF0IGFueSByZW1haW5pbmcgY29tYmluaW5nIG1hcmsgb3IgWldKIGFzIEFMLlxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZXMucHVzaChBTCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIExCOSBEbyBub3QgYnJlYWsgYSBjb21iaW5pbmcgY2hhcmFjdGVyIHNlcXVlbmNlOyB0cmVhdCBpdCBhcyBpZiBpdCBoYXMgdGhlIGxpbmUgYnJlYWtpbmcgY2xhc3Mgb2ZcbiAgICAgICAgICAgIC8vIHRoZSBiYXNlIGNoYXJhY3RlciBpbiBhbGwgb2YgdGhlIGZvbGxvd2luZyBydWxlcy4gVHJlYXQgWldKIGFzIGlmIGl0IHdlcmUgQ00uXG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gdHlwZXNbaW5kZXggLSAxXTtcbiAgICAgICAgICAgIGlmIChMSU5FX0JSRUFLUy5pbmRleE9mKHByZXYpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGluZGljZXMucHVzaChpbmRpY2VzW2luZGV4IC0gMV0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlcy5wdXNoKHByZXYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlcy5wdXNoKEFMKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGljZXMucHVzaChpbmRleCk7XG5cbiAgICAgICAgaWYgKGNsYXNzVHlwZSA9PT0gQ0opIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlcy5wdXNoKGxpbmVCcmVhayA9PT0gJ3N0cmljdCcgPyBOUyA6IElEKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbGFzc1R5cGUgPT09IFNBKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZXMucHVzaChBTCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xhc3NUeXBlID09PSBBSSkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVzLnB1c2goQUwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycywgYSB1c2VmdWwgZGVmYXVsdCBpcyB0byB0cmVhdCBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSAxMDAwMC4uMUZGRkQgYXMgQUxcbiAgICAgICAgLy8gYW5kIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlcyAyMDAwMC4uMkZGRkQgYW5kIDMwMDAwLi4zRkZGRCBhcyBJRCwgdW50aWwgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBiZSByZXZpc2VkXG4gICAgICAgIC8vIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBhY3R1YWwgbGluZSBicmVha2luZyBwcm9wZXJ0aWVzIGZvciB0aGVzZSBjaGFyYWN0ZXJzLlxuICAgICAgICBpZiAoY2xhc3NUeXBlID09PSBYWCkge1xuICAgICAgICAgICAgaWYgKChjb2RlUG9pbnQgPj0gMHgyMDAwMCAmJiBjb2RlUG9pbnQgPD0gMHgyZmZmZCkgfHwgKGNvZGVQb2ludCA+PSAweDMwMDAwICYmIGNvZGVQb2ludCA8PSAweDNmZmZkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlcy5wdXNoKElEKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVzLnB1c2goQUwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHlwZXMucHVzaChjbGFzc1R5cGUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIFtpbmRpY2VzLCB0eXBlcywgY2F0ZWdvcmllc107XG59O1xuXG5jb25zdCBpc0FkamFjZW50V2l0aFNwYWNlSWdub3JlZCA9IChcbiAgICBhOiBudW1iZXJbXSB8IG51bWJlcixcbiAgICBiOiBudW1iZXIsXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gICAgY2xhc3NUeXBlczogbnVtYmVyW11cbik6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBjbGFzc1R5cGVzW2N1cnJlbnRJbmRleF07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkgPyBhLmluZGV4T2YoY3VycmVudCkgIT09IC0xIDogYSA9PT0gY3VycmVudCkge1xuICAgICAgICBsZXQgaSA9IGN1cnJlbnRJbmRleDtcbiAgICAgICAgd2hpbGUgKGkgPD0gY2xhc3NUeXBlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGxldCBuZXh0ID0gY2xhc3NUeXBlc1tpXTtcblxuICAgICAgICAgICAgaWYgKG5leHQgPT09IGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5leHQgIT09IFNQKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY3VycmVudCA9PT0gU1ApIHtcbiAgICAgICAgbGV0IGkgPSBjdXJyZW50SW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKGkgPiAwKSB7XG4gICAgICAgICAgICBpLS07XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gY2xhc3NUeXBlc1tpXTtcblxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkgPyBhLmluZGV4T2YocHJldikgIT09IC0xIDogYSA9PT0gcHJldikge1xuICAgICAgICAgICAgICAgIGxldCBuID0gY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIHdoaWxlIChuIDw9IGNsYXNzVHlwZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG4rKztcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBjbGFzc1R5cGVzW25dO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09PSBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9PSBTUCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwcmV2ICE9PSBTUCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IHByZXZpb3VzTm9uU3BhY2VDbGFzc1R5cGUgPSAoY3VycmVudEluZGV4OiBudW1iZXIsIGNsYXNzVHlwZXM6IG51bWJlcltdKTogbnVtYmVyID0+IHtcbiAgICBsZXQgaSA9IGN1cnJlbnRJbmRleDtcbiAgICB3aGlsZSAoaSA+PSAwKSB7XG4gICAgICAgIGxldCB0eXBlID0gY2xhc3NUeXBlc1tpXTtcbiAgICAgICAgaWYgKHR5cGUgPT09IFNQKSB7XG4gICAgICAgICAgICBpLS07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbn07XG5cbmV4cG9ydCB0eXBlIEJSRUFLX09QUE9SVFVOSVRJRVMgPSB0eXBlb2YgQlJFQUtfTk9UX0FMTE9XRUQgfCB0eXBlb2YgQlJFQUtfQUxMT1dFRCB8IHR5cGVvZiBCUkVBS19NQU5EQVRPUlk7XG5cbmNvbnN0IF9saW5lQnJlYWtBdEluZGV4ID0gKFxuICAgIGNvZGVQb2ludHM6IG51bWJlcltdLFxuICAgIGNsYXNzVHlwZXM6IG51bWJlcltdLFxuICAgIGluZGljaWVzOiBudW1iZXJbXSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGZvcmJpZGRlbkJyZWFrcz86IGJvb2xlYW5bXVxuKTogQlJFQUtfT1BQT1JUVU5JVElFUyA9PiB7XG4gICAgaWYgKGluZGljaWVzW2luZGV4XSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IGluZGV4IC0gMTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JiaWRkZW5CcmVha3MpICYmIGZvcmJpZGRlbkJyZWFrc1tjdXJyZW50SW5kZXhdID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICBsZXQgYmVmb3JlSW5kZXggPSBjdXJyZW50SW5kZXggLSAxO1xuICAgIGxldCBhZnRlckluZGV4ID0gY3VycmVudEluZGV4ICsgMTtcbiAgICBsZXQgY3VycmVudCA9IGNsYXNzVHlwZXNbY3VycmVudEluZGV4XTtcblxuICAgIC8vIExCNCBBbHdheXMgYnJlYWsgYWZ0ZXIgaGFyZCBsaW5lIGJyZWFrcy5cbiAgICAvLyBMQjUgVHJlYXQgQ1IgZm9sbG93ZWQgYnkgTEYsIGFzIHdlbGwgYXMgQ1IsIExGLCBhbmQgTkwgYXMgaGFyZCBsaW5lIGJyZWFrcy5cbiAgICBsZXQgYmVmb3JlID0gYmVmb3JlSW5kZXggPj0gMCA/IGNsYXNzVHlwZXNbYmVmb3JlSW5kZXhdIDogMDtcbiAgICBsZXQgbmV4dCA9IGNsYXNzVHlwZXNbYWZ0ZXJJbmRleF07XG5cbiAgICBpZiAoY3VycmVudCA9PT0gQ1IgJiYgbmV4dCA9PT0gTEYpIHtcbiAgICAgICAgcmV0dXJuIEJSRUFLX05PVF9BTExPV0VEO1xuICAgIH1cblxuICAgIGlmIChIQVJEX0xJTkVfQlJFQUtTLmluZGV4T2YoY3VycmVudCkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19NQU5EQVRPUlk7XG4gICAgfVxuXG4gICAgLy8gTEI2IERvIG5vdCBicmVhayBiZWZvcmUgaGFyZCBsaW5lIGJyZWFrcy5cbiAgICBpZiAoSEFSRF9MSU5FX0JSRUFLUy5pbmRleE9mKG5leHQpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgfVxuXG4gICAgLy8gTEI3IERvIG5vdCBicmVhayBiZWZvcmUgc3BhY2VzIG9yIHplcm8gd2lkdGggc3BhY2UuXG4gICAgaWYgKFNQQUNFLmluZGV4T2YobmV4dCkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjggQnJlYWsgYmVmb3JlIGFueSBjaGFyYWN0ZXIgZm9sbG93aW5nIGEgemVyby13aWR0aCBzcGFjZSwgZXZlbiBpZiBvbmUgb3IgbW9yZSBzcGFjZXMgaW50ZXJ2ZW5lLlxuICAgIGlmIChwcmV2aW91c05vblNwYWNlQ2xhc3NUeXBlKGN1cnJlbnRJbmRleCwgY2xhc3NUeXBlcykgPT09IFpXKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19BTExPV0VEO1xuICAgIH1cblxuICAgIC8vIExCOGEgRG8gbm90IGJyZWFrIGFmdGVyIGEgemVybyB3aWR0aCBqb2luZXIuXG4gICAgaWYgKFVuaWNvZGVUcmllLmdldChjb2RlUG9pbnRzW2N1cnJlbnRJbmRleF0pID09PSBaV0opIHtcbiAgICAgICAgcmV0dXJuIEJSRUFLX05PVF9BTExPV0VEO1xuICAgIH1cblxuICAgIC8vIHp3aiBlbW9qaXNcbiAgICBpZiAoKGN1cnJlbnQgPT09IEVCIHx8IGN1cnJlbnQgPT09IEVNKSAmJiBVbmljb2RlVHJpZS5nZXQoY29kZVBvaW50c1thZnRlckluZGV4XSkgPT09IFpXSikge1xuICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgfVxuXG4gICAgLy8gTEIxMSBEbyBub3QgYnJlYWsgYmVmb3JlIG9yIGFmdGVyIFdvcmQgam9pbmVyIGFuZCByZWxhdGVkIGNoYXJhY3RlcnMuXG4gICAgaWYgKGN1cnJlbnQgPT09IFdKIHx8IG5leHQgPT09IFdKKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjEyIERvIG5vdCBicmVhayBhZnRlciBOQlNQIGFuZCByZWxhdGVkIGNoYXJhY3RlcnMuXG4gICAgaWYgKGN1cnJlbnQgPT09IEdMKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjEyYSBEbyBub3QgYnJlYWsgYmVmb3JlIE5CU1AgYW5kIHJlbGF0ZWQgY2hhcmFjdGVycywgZXhjZXB0IGFmdGVyIHNwYWNlcyBhbmQgaHlwaGVucy5cbiAgICBpZiAoW1NQLCBCQSwgSFldLmluZGV4T2YoY3VycmVudCkgPT09IC0xICYmIG5leHQgPT09IEdMKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjEzIERvIG5vdCBicmVhayBiZWZvcmUg4oCYXeKAmSBvciDigJgh4oCZIG9yIOKAmDvigJkgb3Ig4oCYL+KAmSwgZXZlbiBhZnRlciBzcGFjZXMuXG4gICAgaWYgKFtDTCwgQ1AsIEVYLCBJUywgU1ldLmluZGV4T2YobmV4dCkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjE0IERvIG5vdCBicmVhayBhZnRlciDigJhb4oCZLCBldmVuIGFmdGVyIHNwYWNlcy5cbiAgICBpZiAocHJldmlvdXNOb25TcGFjZUNsYXNzVHlwZShjdXJyZW50SW5kZXgsIGNsYXNzVHlwZXMpID09PSBPUCkge1xuICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgfVxuXG4gICAgLy8gTEIxNSBEbyBub3QgYnJlYWsgd2l0aGluIOKAmOKAnVvigJksIGV2ZW4gd2l0aCBpbnRlcnZlbmluZyBzcGFjZXMuXG4gICAgaWYgKGlzQWRqYWNlbnRXaXRoU3BhY2VJZ25vcmVkKFFVLCBPUCwgY3VycmVudEluZGV4LCBjbGFzc1R5cGVzKSkge1xuICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgfVxuXG4gICAgLy8gTEIxNiBEbyBub3QgYnJlYWsgYmV0d2VlbiBjbG9zaW5nIHB1bmN0dWF0aW9uIGFuZCBhIG5vbnN0YXJ0ZXIgKGxiPU5TKSwgZXZlbiB3aXRoIGludGVydmVuaW5nIHNwYWNlcy5cbiAgICBpZiAoaXNBZGphY2VudFdpdGhTcGFjZUlnbm9yZWQoW0NMLCBDUF0sIE5TLCBjdXJyZW50SW5kZXgsIGNsYXNzVHlwZXMpKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjE3IERvIG5vdCBicmVhayB3aXRoaW4g4oCY4oCU4oCU4oCZLCBldmVuIHdpdGggaW50ZXJ2ZW5pbmcgc3BhY2VzLlxuICAgIGlmIChpc0FkamFjZW50V2l0aFNwYWNlSWdub3JlZChCMiwgQjIsIGN1cnJlbnRJbmRleCwgY2xhc3NUeXBlcykpIHtcbiAgICAgICAgcmV0dXJuIEJSRUFLX05PVF9BTExPV0VEO1xuICAgIH1cblxuICAgIC8vIExCMTggQnJlYWsgYWZ0ZXIgc3BhY2VzLlxuICAgIGlmIChjdXJyZW50ID09PSBTUCkge1xuICAgICAgICByZXR1cm4gQlJFQUtfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjE5IERvIG5vdCBicmVhayBiZWZvcmUgb3IgYWZ0ZXIgcXVvdGF0aW9uIG1hcmtzLCBzdWNoIGFzIOKAmCDigJ0g4oCZLlxuICAgIGlmIChjdXJyZW50ID09PSBRVSB8fCBuZXh0ID09PSBRVSkge1xuICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgfVxuXG4gICAgLy8gTEIyMCBCcmVhayBiZWZvcmUgYW5kIGFmdGVyIHVucmVzb2x2ZWQgQ0IuXG4gICAgaWYgKG5leHQgPT09IENCIHx8IGN1cnJlbnQgPT09IENCKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19BTExPV0VEO1xuICAgIH1cblxuICAgIC8vIExCMjEgRG8gbm90IGJyZWFrIGJlZm9yZSBoeXBoZW4tbWludXMsIG90aGVyIGh5cGhlbnMsIGZpeGVkLXdpZHRoIHNwYWNlcywgc21hbGwga2FuYSwgYW5kIG90aGVyIG5vbi1zdGFydGVycywgb3IgYWZ0ZXIgYWN1dGUgYWNjZW50cy5cbiAgICBpZiAoW0JBLCBIWSwgTlNdLmluZGV4T2YobmV4dCkgIT09IC0xIHx8IGN1cnJlbnQgPT09IEJCKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjIxYSBEb24ndCBicmVhayBhZnRlciBIZWJyZXcgKyBIeXBoZW4uXG4gICAgaWYgKGJlZm9yZSA9PT0gSEwgJiYgSFlQSEVOLmluZGV4T2YoY3VycmVudCkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjIxYiBEb27igJl0IGJyZWFrIGJldHdlZW4gU29saWR1cyBhbmQgSGVicmV3IGxldHRlcnMuXG4gICAgaWYgKGN1cnJlbnQgPT09IFNZICYmIG5leHQgPT09IEhMKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjIyIERvIG5vdCBicmVhayBiZWZvcmUgZWxsaXBzaXMuXG4gICAgaWYgKG5leHQgPT09IElOKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjIzIERvIG5vdCBicmVhayBiZXR3ZWVuIGRpZ2l0cyBhbmQgbGV0dGVycy5cbiAgICBpZiAoKEFMUEhBQkVUSUNTLmluZGV4T2YobmV4dCkgIT09IC0xICYmIGN1cnJlbnQgPT09IE5VKSB8fCAoQUxQSEFCRVRJQ1MuaW5kZXhPZihjdXJyZW50KSAhPT0gLTEgJiYgbmV4dCA9PT0gTlUpKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjIzYSBEbyBub3QgYnJlYWsgYmV0d2VlbiBudW1lcmljIHByZWZpeGVzIGFuZCBpZGVvZ3JhcGhzLCBvciBiZXR3ZWVuIGlkZW9ncmFwaHMgYW5kIG51bWVyaWMgcG9zdGZpeGVzLlxuICAgIGlmIChcbiAgICAgICAgKGN1cnJlbnQgPT09IFBSICYmIFtJRCwgRUIsIEVNXS5pbmRleE9mKG5leHQpICE9PSAtMSkgfHxcbiAgICAgICAgKFtJRCwgRUIsIEVNXS5pbmRleE9mKGN1cnJlbnQpICE9PSAtMSAmJiBuZXh0ID09PSBQTylcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIEJSRUFLX05PVF9BTExPV0VEO1xuICAgIH1cblxuICAgIC8vIExCMjQgRG8gbm90IGJyZWFrIGJldHdlZW4gbnVtZXJpYyBwcmVmaXgvcG9zdGZpeCBhbmQgbGV0dGVycywgb3IgYmV0d2VlbiBsZXR0ZXJzIGFuZCBwcmVmaXgvcG9zdGZpeC5cbiAgICBpZiAoXG4gICAgICAgIChBTFBIQUJFVElDUy5pbmRleE9mKGN1cnJlbnQpICE9PSAtMSAmJiBQUkVGSVhfUE9TVEZJWC5pbmRleE9mKG5leHQpICE9PSAtMSkgfHxcbiAgICAgICAgKFBSRUZJWF9QT1NURklYLmluZGV4T2YoY3VycmVudCkgIT09IC0xICYmIEFMUEhBQkVUSUNTLmluZGV4T2YobmV4dCkgIT09IC0xKVxuICAgICkge1xuICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgfVxuXG4gICAgLy8gTEIyNSBEbyBub3QgYnJlYWsgYmV0d2VlbiB0aGUgZm9sbG93aW5nIHBhaXJzIG9mIGNsYXNzZXMgcmVsZXZhbnQgdG8gbnVtYmVyczpcbiAgICBpZiAoXG4gICAgICAgIC8vIChQUiB8IFBPKSDDlyAoIE9QIHwgSFkgKT8gTlVcbiAgICAgICAgKFtQUiwgUE9dLmluZGV4T2YoY3VycmVudCkgIT09IC0xICYmXG4gICAgICAgICAgICAobmV4dCA9PT0gTlUgfHwgKFtPUCwgSFldLmluZGV4T2YobmV4dCkgIT09IC0xICYmIGNsYXNzVHlwZXNbYWZ0ZXJJbmRleCArIDFdID09PSBOVSkpKSB8fFxuICAgICAgICAvLyAoIE9QIHwgSFkgKSDDlyBOVVxuICAgICAgICAoW09QLCBIWV0uaW5kZXhPZihjdXJyZW50KSAhPT0gLTEgJiYgbmV4dCA9PT0gTlUpIHx8XG4gICAgICAgIC8vIE5VIMOXXHQoTlUgfCBTWSB8IElTKVxuICAgICAgICAoY3VycmVudCA9PT0gTlUgJiYgW05VLCBTWSwgSVNdLmluZGV4T2YobmV4dCkgIT09IC0xKVxuICAgICkge1xuICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgfVxuXG4gICAgLy8gTlUgKE5VIHwgU1kgfCBJUykqIMOXIChOVSB8IFNZIHwgSVMgfCBDTCB8IENQKVxuICAgIGlmIChbTlUsIFNZLCBJUywgQ0wsIENQXS5pbmRleE9mKG5leHQpICE9PSAtMSkge1xuICAgICAgICBsZXQgcHJldkluZGV4ID0gY3VycmVudEluZGV4O1xuICAgICAgICB3aGlsZSAocHJldkluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gY2xhc3NUeXBlc1twcmV2SW5kZXhdO1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09IE5VKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJSRUFLX05PVF9BTExPV0VEO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChbU1ksIElTXS5pbmRleE9mKHR5cGUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHByZXZJbmRleC0tO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5VIChOVSB8IFNZIHwgSVMpKiAoQ0wgfCBDUCk/IMOXIChQTyB8IFBSKSlcbiAgICBpZiAoW1BSLCBQT10uaW5kZXhPZihuZXh0KSAhPT0gLTEpIHtcbiAgICAgICAgbGV0IHByZXZJbmRleCA9IFtDTCwgQ1BdLmluZGV4T2YoY3VycmVudCkgIT09IC0xID8gYmVmb3JlSW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICAgIHdoaWxlIChwcmV2SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSBjbGFzc1R5cGVzW3ByZXZJbmRleF07XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gTlUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFtTWSwgSVNdLmluZGV4T2YodHlwZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcHJldkluZGV4LS07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTEIyNiBEbyBub3QgYnJlYWsgYSBLb3JlYW4gc3lsbGFibGUuXG4gICAgaWYgKFxuICAgICAgICAoSkwgPT09IGN1cnJlbnQgJiYgW0pMLCBKViwgSDIsIEgzXS5pbmRleE9mKG5leHQpICE9PSAtMSkgfHxcbiAgICAgICAgKFtKViwgSDJdLmluZGV4T2YoY3VycmVudCkgIT09IC0xICYmIFtKViwgSlRdLmluZGV4T2YobmV4dCkgIT09IC0xKSB8fFxuICAgICAgICAoW0pULCBIM10uaW5kZXhPZihjdXJyZW50KSAhPT0gLTEgJiYgbmV4dCA9PT0gSlQpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjI3IFRyZWF0IGEgS29yZWFuIFN5bGxhYmxlIEJsb2NrIHRoZSBzYW1lIGFzIElELlxuICAgIGlmIChcbiAgICAgICAgKEtPUkVBTl9TWUxMQUJMRV9CTE9DSy5pbmRleE9mKGN1cnJlbnQpICE9PSAtMSAmJiBbSU4sIFBPXS5pbmRleE9mKG5leHQpICE9PSAtMSkgfHxcbiAgICAgICAgKEtPUkVBTl9TWUxMQUJMRV9CTE9DSy5pbmRleE9mKG5leHQpICE9PSAtMSAmJiBjdXJyZW50ID09PSBQUilcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIEJSRUFLX05PVF9BTExPV0VEO1xuICAgIH1cblxuICAgIC8vIExCMjggRG8gbm90IGJyZWFrIGJldHdlZW4gYWxwaGFiZXRpY3MgKOKAnGF04oCdKS5cbiAgICBpZiAoQUxQSEFCRVRJQ1MuaW5kZXhPZihjdXJyZW50KSAhPT0gLTEgJiYgQUxQSEFCRVRJQ1MuaW5kZXhPZihuZXh0KSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIEJSRUFLX05PVF9BTExPV0VEO1xuICAgIH1cblxuICAgIC8vIExCMjkgRG8gbm90IGJyZWFrIGJldHdlZW4gbnVtZXJpYyBwdW5jdHVhdGlvbiBhbmQgYWxwaGFiZXRpY3MgKOKAnGUuZy7igJ0pLlxuICAgIGlmIChjdXJyZW50ID09PSBJUyAmJiBBTFBIQUJFVElDUy5pbmRleE9mKG5leHQpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgfVxuXG4gICAgLy8gTEIzMCBEbyBub3QgYnJlYWsgYmV0d2VlbiBsZXR0ZXJzLCBudW1iZXJzLCBvciBvcmRpbmFyeSBzeW1ib2xzIGFuZCBvcGVuaW5nIG9yIGNsb3NpbmcgcGFyZW50aGVzZXMuXG4gICAgaWYgKFxuICAgICAgICAoQUxQSEFCRVRJQ1MuY29uY2F0KE5VKS5pbmRleE9mKGN1cnJlbnQpICE9PSAtMSAmJlxuICAgICAgICAgICAgbmV4dCA9PT0gT1AgJiZcbiAgICAgICAgICAgIGVhX09QLmluZGV4T2YoY29kZVBvaW50c1thZnRlckluZGV4XSkgPT09IC0xKSB8fFxuICAgICAgICAoQUxQSEFCRVRJQ1MuY29uY2F0KE5VKS5pbmRleE9mKG5leHQpICE9PSAtMSAmJiBjdXJyZW50ID09PSBDUClcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIEJSRUFLX05PVF9BTExPV0VEO1xuICAgIH1cblxuICAgIC8vIExCMzBhIEJyZWFrIGJldHdlZW4gdHdvIHJlZ2lvbmFsIGluZGljYXRvciBzeW1ib2xzIGlmIGFuZCBvbmx5IGlmIHRoZXJlIGFyZSBhbiBldmVuIG51bWJlciBvZiByZWdpb25hbFxuICAgIC8vIGluZGljYXRvcnMgcHJlY2VkaW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgYnJlYWsuXG4gICAgaWYgKGN1cnJlbnQgPT09IFJJICYmIG5leHQgPT09IFJJKSB7XG4gICAgICAgIGxldCBpID0gaW5kaWNpZXNbY3VycmVudEluZGV4XTtcbiAgICAgICAgbGV0IGNvdW50ID0gMTtcbiAgICAgICAgd2hpbGUgKGkgPiAwKSB7XG4gICAgICAgICAgICBpLS07XG4gICAgICAgICAgICBpZiAoY2xhc3NUeXBlc1tpXSA9PT0gUkkpIHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnQgJSAyICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMQjMwYiBEbyBub3QgYnJlYWsgYmV0d2VlbiBhbiBlbW9qaSBiYXNlIGFuZCBhbiBlbW9qaSBtb2RpZmllci5cbiAgICBpZiAoY3VycmVudCA9PT0gRUIgJiYgbmV4dCA9PT0gRU0pIHtcbiAgICAgICAgcmV0dXJuIEJSRUFLX05PVF9BTExPV0VEO1xuICAgIH1cblxuICAgIHJldHVybiBCUkVBS19BTExPV0VEO1xufTtcblxuZXhwb3J0IGNvbnN0IGxpbmVCcmVha0F0SW5kZXggPSAoY29kZVBvaW50czogbnVtYmVyW10sIGluZGV4OiBudW1iZXIpOiBCUkVBS19PUFBPUlRVTklUSUVTID0+IHtcbiAgICAvLyBMQjIgTmV2ZXIgYnJlYWsgYXQgdGhlIHN0YXJ0IG9mIHRleHQuXG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBMQjMgQWx3YXlzIGJyZWFrIGF0IHRoZSBlbmQgb2YgdGV4dC5cbiAgICBpZiAoaW5kZXggPj0gY29kZVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIEJSRUFLX01BTkRBVE9SWTtcbiAgICB9XG5cbiAgICBjb25zdCBbaW5kaWNlcywgY2xhc3NUeXBlc10gPSBjb2RlUG9pbnRzVG9DaGFyYWN0ZXJDbGFzc2VzKGNvZGVQb2ludHMpO1xuXG4gICAgcmV0dXJuIF9saW5lQnJlYWtBdEluZGV4KGNvZGVQb2ludHMsIGNsYXNzVHlwZXMsIGluZGljZXMsIGluZGV4KTtcbn07XG5cbmV4cG9ydCB0eXBlIExJTkVfQlJFQUsgPSAnYXV0bycgfCAnbm9ybWFsJyB8ICdzdHJpY3QnO1xuZXhwb3J0IHR5cGUgV09SRF9CUkVBSyA9ICdub3JtYWwnIHwgJ2JyZWFrLWFsbCcgfCAnYnJlYWstd29yZCcgfCAna2VlcC1hbGwnO1xuXG5pbnRlcmZhY2UgSU9wdGlvbnMge1xuICAgIGxpbmVCcmVhaz86IExJTkVfQlJFQUs7XG4gICAgd29yZEJyZWFrPzogV09SRF9CUkVBSztcbn1cblxuY29uc3QgY3NzRm9ybWF0dGVkQ2xhc3NlcyA9IChjb2RlUG9pbnRzOiBudW1iZXJbXSwgb3B0aW9ucz86IElPcHRpb25zKTogW251bWJlcltdLCBudW1iZXJbXSwgYm9vbGVhbltdIHwgdW5kZWZpbmVkXSA9PiB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7bGluZUJyZWFrOiAnbm9ybWFsJywgd29yZEJyZWFrOiAnbm9ybWFsJ307XG4gICAgfVxuICAgIGxldCBbaW5kaWNpZXMsIGNsYXNzVHlwZXMsIGlzTGV0dGVyTnVtYmVyXSA9IGNvZGVQb2ludHNUb0NoYXJhY3RlckNsYXNzZXMoY29kZVBvaW50cywgb3B0aW9ucy5saW5lQnJlYWspO1xuXG4gICAgaWYgKG9wdGlvbnMud29yZEJyZWFrID09PSAnYnJlYWstYWxsJyB8fCBvcHRpb25zLndvcmRCcmVhayA9PT0gJ2JyZWFrLXdvcmQnKSB7XG4gICAgICAgIGNsYXNzVHlwZXMgPSBjbGFzc1R5cGVzLm1hcCgodHlwZSkgPT4gKFtOVSwgQUwsIFNBXS5pbmRleE9mKHR5cGUpICE9PSAtMSA/IElEIDogdHlwZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcmJpZGRlbkJyZWFrcG9pbnRzID1cbiAgICAgICAgb3B0aW9ucy53b3JkQnJlYWsgPT09ICdrZWVwLWFsbCdcbiAgICAgICAgICAgID8gaXNMZXR0ZXJOdW1iZXIubWFwKChsZXR0ZXJOdW1iZXIsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBsZXR0ZXJOdW1iZXIgJiYgY29kZVBvaW50c1tpXSA+PSAweDRlMDAgJiYgY29kZVBvaW50c1tpXSA8PSAweDlmZmY7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBbaW5kaWNpZXMsIGNsYXNzVHlwZXMsIGZvcmJpZGRlbkJyZWFrcG9pbnRzXTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbmxpbmVCcmVha09wcG9ydHVuaXRpZXMgPSAoc3RyOiBzdHJpbmcsIG9wdGlvbnM/OiBJT3B0aW9ucyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgY29kZVBvaW50cyA9IHRvQ29kZVBvaW50cyhzdHIpO1xuICAgIGxldCBvdXRwdXQgPSBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICBjb25zdCBbaW5kaWNpZXMsIGNsYXNzVHlwZXMsIGZvcmJpZGRlbkJyZWFrcG9pbnRzXSA9IGNzc0Zvcm1hdHRlZENsYXNzZXMoY29kZVBvaW50cywgb3B0aW9ucyk7XG5cbiAgICBjb2RlUG9pbnRzLmZvckVhY2goKGNvZGVQb2ludCwgaSkgPT4ge1xuICAgICAgICBvdXRwdXQgKz1cbiAgICAgICAgICAgIGZyb21Db2RlUG9pbnQoY29kZVBvaW50KSArXG4gICAgICAgICAgICAoaSA+PSBjb2RlUG9pbnRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICA/IEJSRUFLX01BTkRBVE9SWVxuICAgICAgICAgICAgICAgIDogX2xpbmVCcmVha0F0SW5kZXgoY29kZVBvaW50cywgY2xhc3NUeXBlcywgaW5kaWNpZXMsIGkgKyAxLCBmb3JiaWRkZW5CcmVha3BvaW50cykpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG91dHB1dDtcbn07XG5cbmNsYXNzIEJyZWFrIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvZGVQb2ludHM6IG51bWJlcltdO1xuICAgIHJlYWRvbmx5IHJlcXVpcmVkOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHN0YXJ0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgZW5kOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb2RlUG9pbnRzOiBudW1iZXJbXSwgbGluZUJyZWFrOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY29kZVBvaW50cyA9IGNvZGVQb2ludHM7XG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSBsaW5lQnJlYWsgPT09IEJSRUFLX01BTkRBVE9SWTtcbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgICAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICB9XG5cbiAgICBzbGljZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZnJvbUNvZGVQb2ludCguLi50aGlzLmNvZGVQb2ludHMuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5lbmQpKTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIExpbmVCcmVhayA9XG4gICAgfCB7XG4gICAgICAgICAgZG9uZTogdHJ1ZTtcbiAgICAgICAgICB2YWx1ZTogbnVsbDtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgICBkb25lOiBmYWxzZTtcbiAgICAgICAgICB2YWx1ZTogQnJlYWs7XG4gICAgICB9O1xuXG5pbnRlcmZhY2UgSUxpbmVCcmVha0l0ZXJhdG9yIHtcbiAgICBuZXh0OiAoKSA9PiBMaW5lQnJlYWs7XG59XG5cbmV4cG9ydCBjb25zdCBMaW5lQnJlYWtlciA9IChzdHI6IHN0cmluZywgb3B0aW9ucz86IElPcHRpb25zKTogSUxpbmVCcmVha0l0ZXJhdG9yID0+IHtcbiAgICBjb25zdCBjb2RlUG9pbnRzID0gdG9Db2RlUG9pbnRzKHN0cik7XG4gICAgY29uc3QgW2luZGljaWVzLCBjbGFzc1R5cGVzLCBmb3JiaWRkZW5CcmVha3BvaW50c10gPSBjc3NGb3JtYXR0ZWRDbGFzc2VzKGNvZGVQb2ludHMsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGxlbmd0aCA9IGNvZGVQb2ludHMubGVuZ3RoO1xuICAgIGxldCBsYXN0RW5kID0gMDtcbiAgICBsZXQgbmV4dEluZGV4ID0gMDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXh0SW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtkb25lOiB0cnVlLCB2YWx1ZTogbnVsbH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGluZUJyZWFrID0gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICAgICAgbmV4dEluZGV4IDwgbGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgKGxpbmVCcmVhayA9IF9saW5lQnJlYWtBdEluZGV4KGNvZGVQb2ludHMsIGNsYXNzVHlwZXMsIGluZGljaWVzLCArK25leHRJbmRleCwgZm9yYmlkZGVuQnJlYWtwb2ludHMpKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgQlJFQUtfTk9UX0FMTE9XRURcbiAgICAgICAgICAgICkge31cblxuICAgICAgICAgICAgaWYgKGxpbmVCcmVhayAhPT0gQlJFQUtfTk9UX0FMTE9XRUQgfHwgbmV4dEluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG5ldyBCcmVhayhjb2RlUG9pbnRzLCBsaW5lQnJlYWssIGxhc3RFbmQsIG5leHRJbmRleCk7XG4gICAgICAgICAgICAgICAgbGFzdEVuZCA9IG5leHRJbmRleDtcbiAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlLCBkb25lOiBmYWxzZX07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7ZG9uZTogdHJ1ZSwgdmFsdWU6IG51bGx9O1xuICAgICAgICB9LFxuICAgIH07XG59O1xuIiwiLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtM1xyXG5cclxuaW1wb3J0IHtmcm9tQ29kZVBvaW50LCB0b0NvZGVQb2ludHN9IGZyb20gJ2Nzcy1saW5lLWJyZWFrJztcclxuXHJcbmV4cG9ydCBjb25zdCBlbnVtIFRva2VuVHlwZSB7XHJcbiAgICBTVFJJTkdfVE9LRU4sXHJcbiAgICBCQURfU1RSSU5HX1RPS0VOLFxyXG4gICAgTEVGVF9QQVJFTlRIRVNJU19UT0tFTixcclxuICAgIFJJR0hUX1BBUkVOVEhFU0lTX1RPS0VOLFxyXG4gICAgQ09NTUFfVE9LRU4sXHJcbiAgICBIQVNIX1RPS0VOLFxyXG4gICAgREVMSU1fVE9LRU4sXHJcbiAgICBBVF9LRVlXT1JEX1RPS0VOLFxyXG4gICAgUFJFRklYX01BVENIX1RPS0VOLFxyXG4gICAgREFTSF9NQVRDSF9UT0tFTixcclxuICAgIElOQ0xVREVfTUFUQ0hfVE9LRU4sXHJcbiAgICBMRUZUX0NVUkxZX0JSQUNLRVRfVE9LRU4sXHJcbiAgICBSSUdIVF9DVVJMWV9CUkFDS0VUX1RPS0VOLFxyXG4gICAgU1VGRklYX01BVENIX1RPS0VOLFxyXG4gICAgU1VCU1RSSU5HX01BVENIX1RPS0VOLFxyXG4gICAgRElNRU5TSU9OX1RPS0VOLFxyXG4gICAgUEVSQ0VOVEFHRV9UT0tFTixcclxuICAgIE5VTUJFUl9UT0tFTixcclxuICAgIEZVTkNUSU9OLFxyXG4gICAgRlVOQ1RJT05fVE9LRU4sXHJcbiAgICBJREVOVF9UT0tFTixcclxuICAgIENPTFVNTl9UT0tFTixcclxuICAgIFVSTF9UT0tFTixcclxuICAgIEJBRF9VUkxfVE9LRU4sXHJcbiAgICBDRENfVE9LRU4sXHJcbiAgICBDRE9fVE9LRU4sXHJcbiAgICBDT0xPTl9UT0tFTixcclxuICAgIFNFTUlDT0xPTl9UT0tFTixcclxuICAgIExFRlRfU1FVQVJFX0JSQUNLRVRfVE9LRU4sXHJcbiAgICBSSUdIVF9TUVVBUkVfQlJBQ0tFVF9UT0tFTixcclxuICAgIFVOSUNPREVfUkFOR0VfVE9LRU4sXHJcbiAgICBXSElURVNQQUNFX1RPS0VOLFxyXG4gICAgRU9GX1RPS0VOXHJcbn1cclxuXHJcbmludGVyZmFjZSBJVG9rZW4ge1xyXG4gICAgdHlwZTogVG9rZW5UeXBlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuIGV4dGVuZHMgSVRva2VuIHtcclxuICAgIHR5cGU6XHJcbiAgICAgICAgfCBUb2tlblR5cGUuQkFEX1VSTF9UT0tFTlxyXG4gICAgICAgIHwgVG9rZW5UeXBlLkJBRF9TVFJJTkdfVE9LRU5cclxuICAgICAgICB8IFRva2VuVHlwZS5MRUZUX1BBUkVOVEhFU0lTX1RPS0VOXHJcbiAgICAgICAgfCBUb2tlblR5cGUuUklHSFRfUEFSRU5USEVTSVNfVE9LRU5cclxuICAgICAgICB8IFRva2VuVHlwZS5DT01NQV9UT0tFTlxyXG4gICAgICAgIHwgVG9rZW5UeXBlLlNVQlNUUklOR19NQVRDSF9UT0tFTlxyXG4gICAgICAgIHwgVG9rZW5UeXBlLlBSRUZJWF9NQVRDSF9UT0tFTlxyXG4gICAgICAgIHwgVG9rZW5UeXBlLlNVRkZJWF9NQVRDSF9UT0tFTlxyXG4gICAgICAgIHwgVG9rZW5UeXBlLkNPTE9OX1RPS0VOXHJcbiAgICAgICAgfCBUb2tlblR5cGUuU0VNSUNPTE9OX1RPS0VOXHJcbiAgICAgICAgfCBUb2tlblR5cGUuTEVGVF9TUVVBUkVfQlJBQ0tFVF9UT0tFTlxyXG4gICAgICAgIHwgVG9rZW5UeXBlLlJJR0hUX1NRVUFSRV9CUkFDS0VUX1RPS0VOXHJcbiAgICAgICAgfCBUb2tlblR5cGUuTEVGVF9DVVJMWV9CUkFDS0VUX1RPS0VOXHJcbiAgICAgICAgfCBUb2tlblR5cGUuUklHSFRfQ1VSTFlfQlJBQ0tFVF9UT0tFTlxyXG4gICAgICAgIHwgVG9rZW5UeXBlLkRBU0hfTUFUQ0hfVE9LRU5cclxuICAgICAgICB8IFRva2VuVHlwZS5JTkNMVURFX01BVENIX1RPS0VOXHJcbiAgICAgICAgfCBUb2tlblR5cGUuQ09MVU1OX1RPS0VOXHJcbiAgICAgICAgfCBUb2tlblR5cGUuV0hJVEVTUEFDRV9UT0tFTlxyXG4gICAgICAgIHwgVG9rZW5UeXBlLkNEQ19UT0tFTlxyXG4gICAgICAgIHwgVG9rZW5UeXBlLkNET19UT0tFTlxyXG4gICAgICAgIHwgVG9rZW5UeXBlLkVPRl9UT0tFTjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdWYWx1ZVRva2VuIGV4dGVuZHMgSVRva2VuIHtcclxuICAgIHR5cGU6XHJcbiAgICAgICAgfCBUb2tlblR5cGUuU1RSSU5HX1RPS0VOXHJcbiAgICAgICAgfCBUb2tlblR5cGUuREVMSU1fVE9LRU5cclxuICAgICAgICB8IFRva2VuVHlwZS5GVU5DVElPTl9UT0tFTlxyXG4gICAgICAgIHwgVG9rZW5UeXBlLklERU5UX1RPS0VOXHJcbiAgICAgICAgfCBUb2tlblR5cGUuVVJMX1RPS0VOXHJcbiAgICAgICAgfCBUb2tlblR5cGUuQVRfS0VZV09SRF9UT0tFTjtcclxuICAgIHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSGFzaFRva2VuIGV4dGVuZHMgSVRva2VuIHtcclxuICAgIHR5cGU6IFRva2VuVHlwZS5IQVNIX1RPS0VOO1xyXG4gICAgZmxhZ3M6IG51bWJlcjtcclxuICAgIHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTnVtYmVyVmFsdWVUb2tlbiBleHRlbmRzIElUb2tlbiB7XHJcbiAgICB0eXBlOiBUb2tlblR5cGUuUEVSQ0VOVEFHRV9UT0tFTiB8IFRva2VuVHlwZS5OVU1CRVJfVE9LRU47XHJcbiAgICBmbGFnczogbnVtYmVyO1xyXG4gICAgbnVtYmVyOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGltZW5zaW9uVG9rZW4gZXh0ZW5kcyBJVG9rZW4ge1xyXG4gICAgdHlwZTogVG9rZW5UeXBlLkRJTUVOU0lPTl9UT0tFTjtcclxuICAgIGZsYWdzOiBudW1iZXI7XHJcbiAgICB1bml0OiBzdHJpbmc7XHJcbiAgICBudW1iZXI6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVbmljb2RlUmFuZ2VUb2tlbiBleHRlbmRzIElUb2tlbiB7XHJcbiAgICB0eXBlOiBUb2tlblR5cGUuVU5JQ09ERV9SQU5HRV9UT0tFTjtcclxuICAgIHN0YXJ0OiBudW1iZXI7XHJcbiAgICBlbmQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQ1NTVG9rZW4gPSBUb2tlbiB8IFN0cmluZ1ZhbHVlVG9rZW4gfCBOdW1iZXJWYWx1ZVRva2VuIHwgRGltZW5zaW9uVG9rZW4gfCBVbmljb2RlUmFuZ2VUb2tlbiB8IEhhc2hUb2tlbjtcclxuXHJcbmV4cG9ydCBjb25zdCBGTEFHX1VOUkVTVFJJQ1RFRCA9IDEgPDwgMDtcclxuZXhwb3J0IGNvbnN0IEZMQUdfSUQgPSAxIDw8IDE7XHJcbmV4cG9ydCBjb25zdCBGTEFHX0lOVEVHRVIgPSAxIDw8IDI7XHJcbmV4cG9ydCBjb25zdCBGTEFHX05VTUJFUiA9IDEgPDwgMztcclxuXHJcbmNvbnN0IExJTkVfRkVFRCA9IDB4MDAwYTtcclxuY29uc3QgU09MSURVUyA9IDB4MDAyZjtcclxuY29uc3QgUkVWRVJTRV9TT0xJRFVTID0gMHgwMDVjO1xyXG5jb25zdCBDSEFSQUNURVJfVEFCVUxBVElPTiA9IDB4MDAwOTtcclxuY29uc3QgU1BBQ0UgPSAweDAwMjA7XHJcbmNvbnN0IFFVT1RBVElPTl9NQVJLID0gMHgwMDIyO1xyXG5jb25zdCBFUVVBTFNfU0lHTiA9IDB4MDAzZDtcclxuY29uc3QgTlVNQkVSX1NJR04gPSAweDAwMjM7XHJcbmNvbnN0IERPTExBUl9TSUdOID0gMHgwMDI0O1xyXG5jb25zdCBQRVJDRU5UQUdFX1NJR04gPSAweDAwMjU7XHJcbmNvbnN0IEFQT1NUUk9QSEUgPSAweDAwMjc7XHJcbmNvbnN0IExFRlRfUEFSRU5USEVTSVMgPSAweDAwMjg7XHJcbmNvbnN0IFJJR0hUX1BBUkVOVEhFU0lTID0gMHgwMDI5O1xyXG5jb25zdCBMT1dfTElORSA9IDB4MDA1ZjtcclxuY29uc3QgSFlQSEVOX01JTlVTID0gMHgwMDJkO1xyXG5jb25zdCBFWENMQU1BVElPTl9NQVJLID0gMHgwMDIxO1xyXG5jb25zdCBMRVNTX1RIQU5fU0lHTiA9IDB4MDAzYztcclxuY29uc3QgR1JFQVRFUl9USEFOX1NJR04gPSAweDAwM2U7XHJcbmNvbnN0IENPTU1FUkNJQUxfQVQgPSAweDAwNDA7XHJcbmNvbnN0IExFRlRfU1FVQVJFX0JSQUNLRVQgPSAweDAwNWI7XHJcbmNvbnN0IFJJR0hUX1NRVUFSRV9CUkFDS0VUID0gMHgwMDVkO1xyXG5jb25zdCBDSVJDVU1GTEVYX0FDQ0VOVCA9IDB4MDAzZDtcclxuY29uc3QgTEVGVF9DVVJMWV9CUkFDS0VUID0gMHgwMDdiO1xyXG5jb25zdCBRVUVTVElPTl9NQVJLID0gMHgwMDNmO1xyXG5jb25zdCBSSUdIVF9DVVJMWV9CUkFDS0VUID0gMHgwMDdkO1xyXG5jb25zdCBWRVJUSUNBTF9MSU5FID0gMHgwMDdjO1xyXG5jb25zdCBUSUxERSA9IDB4MDA3ZTtcclxuY29uc3QgQ09OVFJPTCA9IDB4MDA4MDtcclxuY29uc3QgUkVQTEFDRU1FTlRfQ0hBUkFDVEVSID0gMHhmZmZkO1xyXG5jb25zdCBBU1RFUklTSyA9IDB4MDAyYTtcclxuY29uc3QgUExVU19TSUdOID0gMHgwMDJiO1xyXG5jb25zdCBDT01NQSA9IDB4MDAyYztcclxuY29uc3QgQ09MT04gPSAweDAwM2E7XHJcbmNvbnN0IFNFTUlDT0xPTiA9IDB4MDAzYjtcclxuY29uc3QgRlVMTF9TVE9QID0gMHgwMDJlO1xyXG5jb25zdCBOVUxMID0gMHgwMDAwO1xyXG5jb25zdCBCQUNLU1BBQ0UgPSAweDAwMDg7XHJcbmNvbnN0IExJTkVfVEFCVUxBVElPTiA9IDB4MDAwYjtcclxuY29uc3QgU0hJRlRfT1VUID0gMHgwMDBlO1xyXG5jb25zdCBJTkZPUk1BVElPTl9TRVBBUkFUT1JfT05FID0gMHgwMDFmO1xyXG5jb25zdCBERUxFVEUgPSAweDAwN2Y7XHJcbmNvbnN0IEVPRiA9IC0xO1xyXG5jb25zdCBaRVJPID0gMHgwMDMwO1xyXG5jb25zdCBhID0gMHgwMDYxO1xyXG5jb25zdCBlID0gMHgwMDY1O1xyXG5jb25zdCBmID0gMHgwMDY2O1xyXG5jb25zdCB1ID0gMHgwMDc1O1xyXG5jb25zdCB6ID0gMHgwMDdhO1xyXG5jb25zdCBBID0gMHgwMDQxO1xyXG5jb25zdCBFID0gMHgwMDQ1O1xyXG5jb25zdCBGID0gMHgwMDQ2O1xyXG5jb25zdCBVID0gMHgwMDU1O1xyXG5jb25zdCBaID0gMHgwMDVhO1xyXG5cclxuY29uc3QgaXNEaWdpdCA9IChjb2RlUG9pbnQ6IG51bWJlcikgPT4gY29kZVBvaW50ID49IFpFUk8gJiYgY29kZVBvaW50IDw9IDB4MDAzOTtcclxuY29uc3QgaXNTdXJyb2dhdGVDb2RlUG9pbnQgPSAoY29kZVBvaW50OiBudW1iZXIpID0+IGNvZGVQb2ludCA+PSAweGQ4MDAgJiYgY29kZVBvaW50IDw9IDB4ZGZmZjtcclxuY29uc3QgaXNIZXggPSAoY29kZVBvaW50OiBudW1iZXIpID0+XHJcbiAgICBpc0RpZ2l0KGNvZGVQb2ludCkgfHwgKGNvZGVQb2ludCA+PSBBICYmIGNvZGVQb2ludCA8PSBGKSB8fCAoY29kZVBvaW50ID49IGEgJiYgY29kZVBvaW50IDw9IGYpO1xyXG5jb25zdCBpc0xvd2VyQ2FzZUxldHRlciA9IChjb2RlUG9pbnQ6IG51bWJlcikgPT4gY29kZVBvaW50ID49IGEgJiYgY29kZVBvaW50IDw9IHo7XHJcbmNvbnN0IGlzVXBwZXJDYXNlTGV0dGVyID0gKGNvZGVQb2ludDogbnVtYmVyKSA9PiBjb2RlUG9pbnQgPj0gQSAmJiBjb2RlUG9pbnQgPD0gWjtcclxuY29uc3QgaXNMZXR0ZXIgPSAoY29kZVBvaW50OiBudW1iZXIpID0+IGlzTG93ZXJDYXNlTGV0dGVyKGNvZGVQb2ludCkgfHwgaXNVcHBlckNhc2VMZXR0ZXIoY29kZVBvaW50KTtcclxuY29uc3QgaXNOb25BU0NJSUNvZGVQb2ludCA9IChjb2RlUG9pbnQ6IG51bWJlcikgPT4gY29kZVBvaW50ID49IENPTlRST0w7XHJcbmNvbnN0IGlzV2hpdGVTcGFjZSA9IChjb2RlUG9pbnQ6IG51bWJlcik6IGJvb2xlYW4gPT5cclxuICAgIGNvZGVQb2ludCA9PT0gTElORV9GRUVEIHx8IGNvZGVQb2ludCA9PT0gQ0hBUkFDVEVSX1RBQlVMQVRJT04gfHwgY29kZVBvaW50ID09PSBTUEFDRTtcclxuY29uc3QgaXNOYW1lU3RhcnRDb2RlUG9pbnQgPSAoY29kZVBvaW50OiBudW1iZXIpOiBib29sZWFuID0+XHJcbiAgICBpc0xldHRlcihjb2RlUG9pbnQpIHx8IGlzTm9uQVNDSUlDb2RlUG9pbnQoY29kZVBvaW50KSB8fCBjb2RlUG9pbnQgPT09IExPV19MSU5FO1xyXG5jb25zdCBpc05hbWVDb2RlUG9pbnQgPSAoY29kZVBvaW50OiBudW1iZXIpOiBib29sZWFuID0+XHJcbiAgICBpc05hbWVTdGFydENvZGVQb2ludChjb2RlUG9pbnQpIHx8IGlzRGlnaXQoY29kZVBvaW50KSB8fCBjb2RlUG9pbnQgPT09IEhZUEhFTl9NSU5VUztcclxuY29uc3QgaXNOb25QcmludGFibGVDb2RlUG9pbnQgPSAoY29kZVBvaW50OiBudW1iZXIpOiBib29sZWFuID0+IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgKGNvZGVQb2ludCA+PSBOVUxMICYmIGNvZGVQb2ludCA8PSBCQUNLU1BBQ0UpIHx8XHJcbiAgICAgICAgY29kZVBvaW50ID09PSBMSU5FX1RBQlVMQVRJT04gfHxcclxuICAgICAgICAoY29kZVBvaW50ID49IFNISUZUX09VVCAmJiBjb2RlUG9pbnQgPD0gSU5GT1JNQVRJT05fU0VQQVJBVE9SX09ORSkgfHxcclxuICAgICAgICBjb2RlUG9pbnQgPT09IERFTEVURVxyXG4gICAgKTtcclxufTtcclxuY29uc3QgaXNWYWxpZEVzY2FwZSA9IChjMTogbnVtYmVyLCBjMjogbnVtYmVyKTogYm9vbGVhbiA9PiB7XHJcbiAgICBpZiAoYzEgIT09IFJFVkVSU0VfU09MSURVUykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYzIgIT09IExJTkVfRkVFRDtcclxufTtcclxuY29uc3QgaXNJZGVudGlmaWVyU3RhcnQgPSAoYzE6IG51bWJlciwgYzI6IG51bWJlciwgYzM6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xyXG4gICAgaWYgKGMxID09PSBIWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICByZXR1cm4gaXNOYW1lU3RhcnRDb2RlUG9pbnQoYzIpIHx8IGlzVmFsaWRFc2NhcGUoYzIsIGMzKTtcclxuICAgIH0gZWxzZSBpZiAoaXNOYW1lU3RhcnRDb2RlUG9pbnQoYzEpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKGMxID09PSBSRVZFUlNFX1NPTElEVVMgJiYgaXNWYWxpZEVzY2FwZShjMSwgYzIpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn07XHJcblxyXG5jb25zdCBpc051bWJlclN0YXJ0ID0gKGMxOiBudW1iZXIsIGMyOiBudW1iZXIsIGMzOiBudW1iZXIpOiBib29sZWFuID0+IHtcclxuICAgIGlmIChjMSA9PT0gUExVU19TSUdOIHx8IGMxID09PSBIWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICBpZiAoaXNEaWdpdChjMikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYzIgPT09IEZVTExfU1RPUCAmJiBpc0RpZ2l0KGMzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYzEgPT09IEZVTExfU1RPUCkge1xyXG4gICAgICAgIHJldHVybiBpc0RpZ2l0KGMyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXNEaWdpdChjMSk7XHJcbn07XHJcblxyXG5jb25zdCBzdHJpbmdUb051bWJlciA9IChjb2RlUG9pbnRzOiBudW1iZXJbXSk6IG51bWJlciA9PiB7XHJcbiAgICBsZXQgYyA9IDA7XHJcbiAgICBsZXQgc2lnbiA9IDE7XHJcbiAgICBpZiAoY29kZVBvaW50c1tjXSA9PT0gUExVU19TSUdOIHx8IGNvZGVQb2ludHNbY10gPT09IEhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIGlmIChjb2RlUG9pbnRzW2NdID09PSBIWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICAgICAgc2lnbiA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjKys7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW50ZWdlcnMgPSBbXTtcclxuXHJcbiAgICB3aGlsZSAoaXNEaWdpdChjb2RlUG9pbnRzW2NdKSkge1xyXG4gICAgICAgIGludGVnZXJzLnB1c2goY29kZVBvaW50c1tjKytdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnQgPSBpbnRlZ2Vycy5sZW5ndGggPyBwYXJzZUludChmcm9tQ29kZVBvaW50KC4uLmludGVnZXJzKSwgMTApIDogMDtcclxuXHJcbiAgICBpZiAoY29kZVBvaW50c1tjXSA9PT0gRlVMTF9TVE9QKSB7XHJcbiAgICAgICAgYysrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZyYWN0aW9uID0gW107XHJcbiAgICB3aGlsZSAoaXNEaWdpdChjb2RlUG9pbnRzW2NdKSkge1xyXG4gICAgICAgIGZyYWN0aW9uLnB1c2goY29kZVBvaW50c1tjKytdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmcmFjZCA9IGZyYWN0aW9uLmxlbmd0aDtcclxuICAgIGNvbnN0IGZyYWMgPSBmcmFjZCA/IHBhcnNlSW50KGZyb21Db2RlUG9pbnQoLi4uZnJhY3Rpb24pLCAxMCkgOiAwO1xyXG5cclxuICAgIGlmIChjb2RlUG9pbnRzW2NdID09PSBFIHx8IGNvZGVQb2ludHNbY10gPT09IGUpIHtcclxuICAgICAgICBjKys7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGV4cHNpZ24gPSAxO1xyXG5cclxuICAgIGlmIChjb2RlUG9pbnRzW2NdID09PSBQTFVTX1NJR04gfHwgY29kZVBvaW50c1tjXSA9PT0gSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgaWYgKGNvZGVQb2ludHNbY10gPT09IEhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgICAgICBleHBzaWduID0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGMrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBleHBvbmVudCA9IFtdO1xyXG5cclxuICAgIHdoaWxlIChpc0RpZ2l0KGNvZGVQb2ludHNbY10pKSB7XHJcbiAgICAgICAgZXhwb25lbnQucHVzaChjb2RlUG9pbnRzW2MrK10pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGV4cCA9IGV4cG9uZW50Lmxlbmd0aCA/IHBhcnNlSW50KGZyb21Db2RlUG9pbnQoLi4uZXhwb25lbnQpLCAxMCkgOiAwO1xyXG5cclxuICAgIHJldHVybiBzaWduICogKGludCArIGZyYWMgKiBNYXRoLnBvdygxMCwgLWZyYWNkKSkgKiBNYXRoLnBvdygxMCwgZXhwc2lnbiAqIGV4cCk7XHJcbn07XHJcblxyXG5jb25zdCBMRUZUX1BBUkVOVEhFU0lTX1RPS0VOOiBUb2tlbiA9IHtcclxuICAgIHR5cGU6IFRva2VuVHlwZS5MRUZUX1BBUkVOVEhFU0lTX1RPS0VOXHJcbn07XHJcbmNvbnN0IFJJR0hUX1BBUkVOVEhFU0lTX1RPS0VOOiBUb2tlbiA9IHtcclxuICAgIHR5cGU6IFRva2VuVHlwZS5SSUdIVF9QQVJFTlRIRVNJU19UT0tFTlxyXG59O1xyXG5jb25zdCBDT01NQV9UT0tFTjogVG9rZW4gPSB7dHlwZTogVG9rZW5UeXBlLkNPTU1BX1RPS0VOfTtcclxuY29uc3QgU1VGRklYX01BVENIX1RPS0VOOiBUb2tlbiA9IHt0eXBlOiBUb2tlblR5cGUuU1VGRklYX01BVENIX1RPS0VOfTtcclxuY29uc3QgUFJFRklYX01BVENIX1RPS0VOOiBUb2tlbiA9IHt0eXBlOiBUb2tlblR5cGUuUFJFRklYX01BVENIX1RPS0VOfTtcclxuY29uc3QgQ09MVU1OX1RPS0VOOiBUb2tlbiA9IHt0eXBlOiBUb2tlblR5cGUuQ09MVU1OX1RPS0VOfTtcclxuY29uc3QgREFTSF9NQVRDSF9UT0tFTjogVG9rZW4gPSB7dHlwZTogVG9rZW5UeXBlLkRBU0hfTUFUQ0hfVE9LRU59O1xyXG5jb25zdCBJTkNMVURFX01BVENIX1RPS0VOOiBUb2tlbiA9IHt0eXBlOiBUb2tlblR5cGUuSU5DTFVERV9NQVRDSF9UT0tFTn07XHJcbmNvbnN0IExFRlRfQ1VSTFlfQlJBQ0tFVF9UT0tFTjogVG9rZW4gPSB7XHJcbiAgICB0eXBlOiBUb2tlblR5cGUuTEVGVF9DVVJMWV9CUkFDS0VUX1RPS0VOXHJcbn07XHJcbmNvbnN0IFJJR0hUX0NVUkxZX0JSQUNLRVRfVE9LRU46IFRva2VuID0ge1xyXG4gICAgdHlwZTogVG9rZW5UeXBlLlJJR0hUX0NVUkxZX0JSQUNLRVRfVE9LRU5cclxufTtcclxuY29uc3QgU1VCU1RSSU5HX01BVENIX1RPS0VOOiBUb2tlbiA9IHt0eXBlOiBUb2tlblR5cGUuU1VCU1RSSU5HX01BVENIX1RPS0VOfTtcclxuY29uc3QgQkFEX1VSTF9UT0tFTjogVG9rZW4gPSB7dHlwZTogVG9rZW5UeXBlLkJBRF9VUkxfVE9LRU59O1xyXG5jb25zdCBCQURfU1RSSU5HX1RPS0VOOiBUb2tlbiA9IHt0eXBlOiBUb2tlblR5cGUuQkFEX1NUUklOR19UT0tFTn07XHJcbmNvbnN0IENET19UT0tFTjogVG9rZW4gPSB7dHlwZTogVG9rZW5UeXBlLkNET19UT0tFTn07XHJcbmNvbnN0IENEQ19UT0tFTjogVG9rZW4gPSB7dHlwZTogVG9rZW5UeXBlLkNEQ19UT0tFTn07XHJcbmNvbnN0IENPTE9OX1RPS0VOOiBUb2tlbiA9IHt0eXBlOiBUb2tlblR5cGUuQ09MT05fVE9LRU59O1xyXG5jb25zdCBTRU1JQ09MT05fVE9LRU46IFRva2VuID0ge3R5cGU6IFRva2VuVHlwZS5TRU1JQ09MT05fVE9LRU59O1xyXG5jb25zdCBMRUZUX1NRVUFSRV9CUkFDS0VUX1RPS0VOOiBUb2tlbiA9IHtcclxuICAgIHR5cGU6IFRva2VuVHlwZS5MRUZUX1NRVUFSRV9CUkFDS0VUX1RPS0VOXHJcbn07XHJcbmNvbnN0IFJJR0hUX1NRVUFSRV9CUkFDS0VUX1RPS0VOOiBUb2tlbiA9IHtcclxuICAgIHR5cGU6IFRva2VuVHlwZS5SSUdIVF9TUVVBUkVfQlJBQ0tFVF9UT0tFTlxyXG59O1xyXG5jb25zdCBXSElURVNQQUNFX1RPS0VOOiBUb2tlbiA9IHt0eXBlOiBUb2tlblR5cGUuV0hJVEVTUEFDRV9UT0tFTn07XHJcbmV4cG9ydCBjb25zdCBFT0ZfVE9LRU46IFRva2VuID0ge3R5cGU6IFRva2VuVHlwZS5FT0ZfVE9LRU59O1xyXG5cclxuZXhwb3J0IGNsYXNzIFRva2VuaXplciB7XHJcbiAgICBwcml2YXRlIF92YWx1ZTogbnVtYmVyW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZShjaHVuazogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl92YWx1ZS5jb25jYXQodG9Db2RlUG9pbnRzKGNodW5rKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVhZCgpOiBDU1NUb2tlbltdIHtcclxuICAgICAgICBjb25zdCB0b2tlbnMgPSBbXTtcclxuICAgICAgICBsZXQgdG9rZW4gPSB0aGlzLmNvbnN1bWVUb2tlbigpO1xyXG4gICAgICAgIHdoaWxlICh0b2tlbiAhPT0gRU9GX1RPS0VOKSB7XHJcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcclxuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmNvbnN1bWVUb2tlbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG9rZW5zO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29uc3VtZVRva2VuKCk6IENTU1Rva2VuIHtcclxuICAgICAgICBjb25zdCBjb2RlUG9pbnQgPSB0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChjb2RlUG9pbnQpIHtcclxuICAgICAgICAgICAgY2FzZSBRVU9UQVRJT05fTUFSSzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVTdHJpbmdUb2tlbihRVU9UQVRJT05fTUFSSyk7XHJcbiAgICAgICAgICAgIGNhc2UgTlVNQkVSX1NJR046XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjMSA9IHRoaXMucGVla0NvZGVQb2ludCgwKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGMyID0gdGhpcy5wZWVrQ29kZVBvaW50KDEpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYzMgPSB0aGlzLnBlZWtDb2RlUG9pbnQoMik7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOYW1lQ29kZVBvaW50KGMxKSB8fCBpc1ZhbGlkRXNjYXBlKGMyLCBjMykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmbGFncyA9IGlzSWRlbnRpZmllclN0YXJ0KGMxLCBjMiwgYzMpID8gRkxBR19JRCA6IEZMQUdfVU5SRVNUUklDVEVEO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb25zdW1lTmFtZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3R5cGU6IFRva2VuVHlwZS5IQVNIX1RPS0VOLCB2YWx1ZSwgZmxhZ3N9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRE9MTEFSX1NJR046XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZWVrQ29kZVBvaW50KDApID09PSBFUVVBTFNfU0lHTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTVUZGSVhfTUFUQ0hfVE9LRU47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBBUE9TVFJPUEhFOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZVN0cmluZ1Rva2VuKEFQT1NUUk9QSEUpO1xyXG4gICAgICAgICAgICBjYXNlIExFRlRfUEFSRU5USEVTSVM6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTEVGVF9QQVJFTlRIRVNJU19UT0tFTjtcclxuICAgICAgICAgICAgY2FzZSBSSUdIVF9QQVJFTlRIRVNJUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBSSUdIVF9QQVJFTlRIRVNJU19UT0tFTjtcclxuICAgICAgICAgICAgY2FzZSBBU1RFUklTSzpcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlZWtDb2RlUG9pbnQoMCkgPT09IEVRVUFMU19TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lQ29kZVBvaW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNVQlNUUklOR19NQVRDSF9UT0tFTjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFBMVVNfU0lHTjpcclxuICAgICAgICAgICAgICAgIGlmIChpc051bWJlclN0YXJ0KGNvZGVQb2ludCwgdGhpcy5wZWVrQ29kZVBvaW50KDApLCB0aGlzLnBlZWtDb2RlUG9pbnQoMSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbnN1bWVDb2RlUG9pbnQoY29kZVBvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lTnVtZXJpY1Rva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDT01NQTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBDT01NQV9UT0tFTjtcclxuICAgICAgICAgICAgY2FzZSBIWVBIRU5fTUlOVVM6XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlMSA9IGNvZGVQb2ludDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGUyID0gdGhpcy5wZWVrQ29kZVBvaW50KDApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZTMgPSB0aGlzLnBlZWtDb2RlUG9pbnQoMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3RhcnQoZTEsIGUyLCBlMykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29uc3VtZUNvZGVQb2ludChjb2RlUG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVOdW1lcmljVG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoZTEsIGUyLCBlMykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29uc3VtZUNvZGVQb2ludChjb2RlUG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVJZGVudExpa2VUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlMiA9PT0gSFlQSEVOX01JTlVTICYmIGUzID09PSBHUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDRENfVE9LRU47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgRlVMTF9TVE9QOlxyXG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyU3RhcnQoY29kZVBvaW50LCB0aGlzLnBlZWtDb2RlUG9pbnQoMCksIHRoaXMucGVla0NvZGVQb2ludCgxKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29uc3VtZUNvZGVQb2ludChjb2RlUG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVOdW1lcmljVG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNPTElEVVM6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZWVrQ29kZVBvaW50KDApID09PSBBU1RFUklTSykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjID0gdGhpcy5jb25zdW1lQ29kZVBvaW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBBU1RFUklTSykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IFNPTElEVVMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lVG9rZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gRU9GKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lVG9rZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIENPTE9OOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIENPTE9OX1RPS0VOO1xyXG4gICAgICAgICAgICBjYXNlIFNFTUlDT0xPTjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBTRU1JQ09MT05fVE9LRU47XHJcbiAgICAgICAgICAgIGNhc2UgTEVTU19USEFOX1NJR046XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZWVrQ29kZVBvaW50KDApID09PSBFWENMQU1BVElPTl9NQVJLICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZWVrQ29kZVBvaW50KDEpID09PSBIWVBIRU5fTUlOVVMgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlZWtDb2RlUG9pbnQoMikgPT09IEhZUEhFTl9NSU5VU1xyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lQ29kZVBvaW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lQ29kZVBvaW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENET19UT0tFTjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIENPTU1FUkNJQUxfQVQ6XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhMSA9IHRoaXMucGVla0NvZGVQb2ludCgwKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGEyID0gdGhpcy5wZWVrQ29kZVBvaW50KDEpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYTMgPSB0aGlzLnBlZWtDb2RlUG9pbnQoMik7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoYTEsIGEyLCBhMykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29uc3VtZU5hbWUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3R5cGU6IFRva2VuVHlwZS5BVF9LRVlXT1JEX1RPS0VOLCB2YWx1ZX07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBMRUZUX1NRVUFSRV9CUkFDS0VUOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExFRlRfU1FVQVJFX0JSQUNLRVRfVE9LRU47XHJcbiAgICAgICAgICAgIGNhc2UgUkVWRVJTRV9TT0xJRFVTOlxyXG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRFc2NhcGUoY29kZVBvaW50LCB0aGlzLnBlZWtDb2RlUG9pbnQoMCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbnN1bWVDb2RlUG9pbnQoY29kZVBvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lSWRlbnRMaWtlVG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFJJR0hUX1NRVUFSRV9CUkFDS0VUOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJJR0hUX1NRVUFSRV9CUkFDS0VUX1RPS0VOO1xyXG4gICAgICAgICAgICBjYXNlIENJUkNVTUZMRVhfQUNDRU5UOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVla0NvZGVQb2ludCgwKSA9PT0gRVFVQUxTX1NJR04pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUFJFRklYX01BVENIX1RPS0VOO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgTEVGVF9DVVJMWV9CUkFDS0VUOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExFRlRfQ1VSTFlfQlJBQ0tFVF9UT0tFTjtcclxuICAgICAgICAgICAgY2FzZSBSSUdIVF9DVVJMWV9CUkFDS0VUOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJJR0hUX0NVUkxZX0JSQUNLRVRfVE9LRU47XHJcbiAgICAgICAgICAgIGNhc2UgdTpcclxuICAgICAgICAgICAgY2FzZSBVOlxyXG4gICAgICAgICAgICAgICAgY29uc3QgdTEgPSB0aGlzLnBlZWtDb2RlUG9pbnQoMCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1MiA9IHRoaXMucGVla0NvZGVQb2ludCgxKTtcclxuICAgICAgICAgICAgICAgIGlmICh1MSA9PT0gUExVU19TSUdOICYmIChpc0hleCh1MikgfHwgdTIgPT09IFFVRVNUSU9OX01BUkspKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lQ29kZVBvaW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lVW5pY29kZVJhbmdlVG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucmVjb25zdW1lQ29kZVBvaW50KGNvZGVQb2ludCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lSWRlbnRMaWtlVG9rZW4oKTtcclxuICAgICAgICAgICAgY2FzZSBWRVJUSUNBTF9MSU5FOlxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVla0NvZGVQb2ludCgwKSA9PT0gRVFVQUxTX1NJR04pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gREFTSF9NQVRDSF9UT0tFTjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlZWtDb2RlUG9pbnQoMCkgPT09IFZFUlRJQ0FMX0xJTkUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ09MVU1OX1RPS0VOO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVElMREU6XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZWVrQ29kZVBvaW50KDApID09PSBFUVVBTFNfU0lHTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTkNMVURFX01BVENIX1RPS0VOO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRU9GOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVPRl9UT0tFTjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc1doaXRlU3BhY2UoY29kZVBvaW50KSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnN1bWVXaGl0ZVNwYWNlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBXSElURVNQQUNFX1RPS0VOO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzRGlnaXQoY29kZVBvaW50KSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlY29uc3VtZUNvZGVQb2ludChjb2RlUG9pbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lTnVtZXJpY1Rva2VuKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNOYW1lU3RhcnRDb2RlUG9pbnQoY29kZVBvaW50KSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlY29uc3VtZUNvZGVQb2ludChjb2RlUG9pbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lSWRlbnRMaWtlVG9rZW4oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLkRFTElNX1RPS0VOLCB2YWx1ZTogZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnN1bWVDb2RlUG9pbnQoKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3ZhbHVlLnNoaWZ0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnID8gLTEgOiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlY29uc3VtZUNvZGVQb2ludChjb2RlUG9pbnQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlLnVuc2hpZnQoY29kZVBvaW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBlZWtDb2RlUG9pbnQoZGVsdGE6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGRlbHRhID49IHRoaXMuX3ZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVbZGVsdGFdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29uc3VtZVVuaWNvZGVSYW5nZVRva2VuKCk6IFVuaWNvZGVSYW5nZVRva2VuIHtcclxuICAgICAgICBjb25zdCBkaWdpdHMgPSBbXTtcclxuICAgICAgICBsZXQgY29kZVBvaW50ID0gdGhpcy5jb25zdW1lQ29kZVBvaW50KCk7XHJcbiAgICAgICAgd2hpbGUgKGlzSGV4KGNvZGVQb2ludCkgJiYgZGlnaXRzLmxlbmd0aCA8IDYpIHtcclxuICAgICAgICAgICAgZGlnaXRzLnB1c2goY29kZVBvaW50KTtcclxuICAgICAgICAgICAgY29kZVBvaW50ID0gdGhpcy5jb25zdW1lQ29kZVBvaW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBxdWVzdGlvbk1hcmtzID0gZmFsc2U7XHJcbiAgICAgICAgd2hpbGUgKGNvZGVQb2ludCA9PT0gUVVFU1RJT05fTUFSSyAmJiBkaWdpdHMubGVuZ3RoIDwgNikge1xyXG4gICAgICAgICAgICBkaWdpdHMucHVzaChjb2RlUG9pbnQpO1xyXG4gICAgICAgICAgICBjb2RlUG9pbnQgPSB0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtcclxuICAgICAgICAgICAgcXVlc3Rpb25NYXJrcyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocXVlc3Rpb25NYXJrcykge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHBhcnNlSW50KFxyXG4gICAgICAgICAgICAgICAgZnJvbUNvZGVQb2ludCguLi5kaWdpdHMubWFwKChkaWdpdCkgPT4gKGRpZ2l0ID09PSBRVUVTVElPTl9NQVJLID8gWkVSTyA6IGRpZ2l0KSkpLFxyXG4gICAgICAgICAgICAgICAgMTZcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gcGFyc2VJbnQoZnJvbUNvZGVQb2ludCguLi5kaWdpdHMubWFwKChkaWdpdCkgPT4gKGRpZ2l0ID09PSBRVUVTVElPTl9NQVJLID8gRiA6IGRpZ2l0KSkpLCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLlVOSUNPREVfUkFOR0VfVE9LRU4sIHN0YXJ0LCBlbmR9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYXJzZUludChmcm9tQ29kZVBvaW50KC4uLmRpZ2l0cyksIDE2KTtcclxuICAgICAgICBpZiAodGhpcy5wZWVrQ29kZVBvaW50KDApID09PSBIWVBIRU5fTUlOVVMgJiYgaXNIZXgodGhpcy5wZWVrQ29kZVBvaW50KDEpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtcclxuICAgICAgICAgICAgY29kZVBvaW50ID0gdGhpcy5jb25zdW1lQ29kZVBvaW50KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZERpZ2l0cyA9IFtdO1xyXG4gICAgICAgICAgICB3aGlsZSAoaXNIZXgoY29kZVBvaW50KSAmJiBlbmREaWdpdHMubGVuZ3RoIDwgNikge1xyXG4gICAgICAgICAgICAgICAgZW5kRGlnaXRzLnB1c2goY29kZVBvaW50KTtcclxuICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHBhcnNlSW50KGZyb21Db2RlUG9pbnQoLi4uZW5kRGlnaXRzKSwgMTYpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiBUb2tlblR5cGUuVU5JQ09ERV9SQU5HRV9UT0tFTiwgc3RhcnQsIGVuZH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiBUb2tlblR5cGUuVU5JQ09ERV9SQU5HRV9UT0tFTiwgc3RhcnQsIGVuZDogc3RhcnR9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnN1bWVJZGVudExpa2VUb2tlbigpOiBTdHJpbmdWYWx1ZVRva2VuIHwgVG9rZW4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb25zdW1lTmFtZSgpO1xyXG4gICAgICAgIGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndXJsJyAmJiB0aGlzLnBlZWtDb2RlUG9pbnQoMCkgPT09IExFRlRfUEFSRU5USEVTSVMpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25zdW1lQ29kZVBvaW50KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN1bWVVcmxUb2tlbigpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wZWVrQ29kZVBvaW50KDApID09PSBMRUZUX1BBUkVOVEhFU0lTKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgICAgICByZXR1cm4ge3R5cGU6IFRva2VuVHlwZS5GVU5DVElPTl9UT0tFTiwgdmFsdWV9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHt0eXBlOiBUb2tlblR5cGUuSURFTlRfVE9LRU4sIHZhbHVlfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnN1bWVVcmxUb2tlbigpOiBTdHJpbmdWYWx1ZVRva2VuIHwgVG9rZW4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gW107XHJcbiAgICAgICAgdGhpcy5jb25zdW1lV2hpdGVTcGFjZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wZWVrQ29kZVBvaW50KDApID09PSBFT0YpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiBUb2tlblR5cGUuVVJMX1RPS0VOLCB2YWx1ZTogJyd9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMucGVla0NvZGVQb2ludCgwKTtcclxuICAgICAgICBpZiAobmV4dCA9PT0gQVBPU1RST1BIRSB8fCBuZXh0ID09PSBRVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgICAgICBjb25zdCBzdHJpbmdUb2tlbiA9IHRoaXMuY29uc3VtZVN0cmluZ1Rva2VuKHRoaXMuY29uc3VtZUNvZGVQb2ludCgpKTtcclxuICAgICAgICAgICAgaWYgKHN0cmluZ1Rva2VuLnR5cGUgPT09IFRva2VuVHlwZS5TVFJJTkdfVE9LRU4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZVdoaXRlU3BhY2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZWVrQ29kZVBvaW50KDApID09PSBFT0YgfHwgdGhpcy5wZWVrQ29kZVBvaW50KDApID09PSBSSUdIVF9QQVJFTlRIRVNJUykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLlVSTF9UT0tFTiwgdmFsdWU6IHN0cmluZ1Rva2VuLnZhbHVlfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25zdW1lQmFkVXJsUmVtbmFudHMoKTtcclxuICAgICAgICAgICAgcmV0dXJuIEJBRF9VUkxfVE9LRU47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlUG9pbnQgPSB0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtcclxuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA9PT0gRU9GIHx8IGNvZGVQb2ludCA9PT0gUklHSFRfUEFSRU5USEVTSVMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLlVSTF9UT0tFTiwgdmFsdWU6IGZyb21Db2RlUG9pbnQoLi4udmFsdWUpfTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1doaXRlU3BhY2UoY29kZVBvaW50KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lV2hpdGVTcGFjZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVla0NvZGVQb2ludCgwKSA9PT0gRU9GIHx8IHRoaXMucGVla0NvZGVQb2ludCgwKSA9PT0gUklHSFRfUEFSRU5USEVTSVMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3R5cGU6IFRva2VuVHlwZS5VUkxfVE9LRU4sIHZhbHVlOiBmcm9tQ29kZVBvaW50KC4uLnZhbHVlKX07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVCYWRVcmxSZW1uYW50cygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJBRF9VUkxfVE9LRU47XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPT09IFFVT1RBVElPTl9NQVJLIHx8XHJcbiAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPT09IEFQT1NUUk9QSEUgfHxcclxuICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9PT0gTEVGVF9QQVJFTlRIRVNJUyB8fFxyXG4gICAgICAgICAgICAgICAgaXNOb25QcmludGFibGVDb2RlUG9pbnQoY29kZVBvaW50KVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUJhZFVybFJlbW5hbnRzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQkFEX1VSTF9UT0tFTjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPT09IFJFVkVSU0VfU09MSURVUykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRFc2NhcGUoY29kZVBvaW50LCB0aGlzLnBlZWtDb2RlUG9pbnQoMCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUucHVzaCh0aGlzLmNvbnN1bWVFc2NhcGVkQ29kZVBvaW50KCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVCYWRVcmxSZW1uYW50cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCQURfVVJMX1RPS0VOO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUucHVzaChjb2RlUG9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29uc3VtZVdoaXRlU3BhY2UoKTogdm9pZCB7XHJcbiAgICAgICAgd2hpbGUgKGlzV2hpdGVTcGFjZSh0aGlzLnBlZWtDb2RlUG9pbnQoMCkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnN1bWVCYWRVcmxSZW1uYW50cygpOiB2b2lkIHtcclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlUG9pbnQgPSB0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKTtcclxuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA9PT0gUklHSFRfUEFSRU5USEVTSVMgfHwgY29kZVBvaW50ID09PSBFT0YpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlzVmFsaWRFc2NhcGUoY29kZVBvaW50LCB0aGlzLnBlZWtDb2RlUG9pbnQoMCkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVFc2NhcGVkQ29kZVBvaW50KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb25zdW1lU3RyaW5nU2xpY2UoY291bnQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgU0xJQ0VfU1RBQ0tfU0laRSA9IDUwMDAwO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICcnO1xyXG4gICAgICAgIHdoaWxlIChjb3VudCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgYW1vdW50ID0gTWF0aC5taW4oU0xJQ0VfU1RBQ0tfU0laRSwgY291bnQpO1xyXG4gICAgICAgICAgICB2YWx1ZSArPSBmcm9tQ29kZVBvaW50KC4uLnRoaXMuX3ZhbHVlLnNwbGljZSgwLCBhbW91bnQpKTtcclxuICAgICAgICAgICAgY291bnQgLT0gYW1vdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl92YWx1ZS5zaGlmdCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb25zdW1lU3RyaW5nVG9rZW4oZW5kaW5nQ29kZVBvaW50OiBudW1iZXIpOiBTdHJpbmdWYWx1ZVRva2VuIHwgVG9rZW4ge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICcnO1xyXG4gICAgICAgIGxldCBpID0gMDtcclxuXHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlUG9pbnQgPSB0aGlzLl92YWx1ZVtpXTtcclxuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA9PT0gRU9GIHx8IGNvZGVQb2ludCA9PT0gdW5kZWZpbmVkIHx8IGNvZGVQb2ludCA9PT0gZW5kaW5nQ29kZVBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSB0aGlzLmNvbnN1bWVTdHJpbmdTbGljZShpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLlNUUklOR19UT0tFTiwgdmFsdWV9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29kZVBvaW50ID09PSBMSU5FX0ZFRUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnNwbGljZSgwLCBpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBCQURfU1RSSU5HX1RPS0VOO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29kZVBvaW50ID09PSBSRVZFUlNFX1NPTElEVVMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLl92YWx1ZVtpICsgMV07XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gRU9GICYmIG5leHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09PSBMSU5FX0ZFRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdGhpcy5jb25zdW1lU3RyaW5nU2xpY2UoaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzVmFsaWRFc2NhcGUoY29kZVBvaW50LCBuZXh0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSB0aGlzLmNvbnN1bWVTdHJpbmdTbGljZShpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gZnJvbUNvZGVQb2ludCh0aGlzLmNvbnN1bWVFc2NhcGVkQ29kZVBvaW50KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpKys7XHJcbiAgICAgICAgfSB3aGlsZSAodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb25zdW1lTnVtYmVyKCkge1xyXG4gICAgICAgIGNvbnN0IHJlcHIgPSBbXTtcclxuICAgICAgICBsZXQgdHlwZSA9IEZMQUdfSU5URUdFUjtcclxuICAgICAgICBsZXQgYzEgPSB0aGlzLnBlZWtDb2RlUG9pbnQoMCk7XHJcbiAgICAgICAgaWYgKGMxID09PSBQTFVTX1NJR04gfHwgYzEgPT09IEhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgICAgICByZXByLnB1c2godGhpcy5jb25zdW1lQ29kZVBvaW50KCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGlzRGlnaXQodGhpcy5wZWVrQ29kZVBvaW50KDApKSkge1xyXG4gICAgICAgICAgICByZXByLnB1c2godGhpcy5jb25zdW1lQ29kZVBvaW50KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjMSA9IHRoaXMucGVla0NvZGVQb2ludCgwKTtcclxuICAgICAgICBsZXQgYzIgPSB0aGlzLnBlZWtDb2RlUG9pbnQoMSk7XHJcbiAgICAgICAgaWYgKGMxID09PSBGVUxMX1NUT1AgJiYgaXNEaWdpdChjMikpIHtcclxuICAgICAgICAgICAgcmVwci5wdXNoKHRoaXMuY29uc3VtZUNvZGVQb2ludCgpLCB0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKSk7XHJcbiAgICAgICAgICAgIHR5cGUgPSBGTEFHX05VTUJFUjtcclxuICAgICAgICAgICAgd2hpbGUgKGlzRGlnaXQodGhpcy5wZWVrQ29kZVBvaW50KDApKSkge1xyXG4gICAgICAgICAgICAgICAgcmVwci5wdXNoKHRoaXMuY29uc3VtZUNvZGVQb2ludCgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYzEgPSB0aGlzLnBlZWtDb2RlUG9pbnQoMCk7XHJcbiAgICAgICAgYzIgPSB0aGlzLnBlZWtDb2RlUG9pbnQoMSk7XHJcbiAgICAgICAgY29uc3QgYzMgPSB0aGlzLnBlZWtDb2RlUG9pbnQoMik7XHJcbiAgICAgICAgaWYgKChjMSA9PT0gRSB8fCBjMSA9PT0gZSkgJiYgKCgoYzIgPT09IFBMVVNfU0lHTiB8fCBjMiA9PT0gSFlQSEVOX01JTlVTKSAmJiBpc0RpZ2l0KGMzKSkgfHwgaXNEaWdpdChjMikpKSB7XHJcbiAgICAgICAgICAgIHJlcHIucHVzaCh0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKSwgdGhpcy5jb25zdW1lQ29kZVBvaW50KCkpO1xyXG4gICAgICAgICAgICB0eXBlID0gRkxBR19OVU1CRVI7XHJcbiAgICAgICAgICAgIHdoaWxlIChpc0RpZ2l0KHRoaXMucGVla0NvZGVQb2ludCgwKSkpIHtcclxuICAgICAgICAgICAgICAgIHJlcHIucHVzaCh0aGlzLmNvbnN1bWVDb2RlUG9pbnQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbc3RyaW5nVG9OdW1iZXIocmVwciksIHR5cGVdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29uc3VtZU51bWVyaWNUb2tlbigpOiBOdW1iZXJWYWx1ZVRva2VuIHwgRGltZW5zaW9uVG9rZW4ge1xyXG4gICAgICAgIGNvbnN0IFtudW1iZXIsIGZsYWdzXSA9IHRoaXMuY29uc3VtZU51bWJlcigpO1xyXG4gICAgICAgIGNvbnN0IGMxID0gdGhpcy5wZWVrQ29kZVBvaW50KDApO1xyXG4gICAgICAgIGNvbnN0IGMyID0gdGhpcy5wZWVrQ29kZVBvaW50KDEpO1xyXG4gICAgICAgIGNvbnN0IGMzID0gdGhpcy5wZWVrQ29kZVBvaW50KDIpO1xyXG5cclxuICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoYzEsIGMyLCBjMykpIHtcclxuICAgICAgICAgICAgY29uc3QgdW5pdCA9IHRoaXMuY29uc3VtZU5hbWUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiBUb2tlblR5cGUuRElNRU5TSU9OX1RPS0VOLCBudW1iZXIsIGZsYWdzLCB1bml0fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjMSA9PT0gUEVSQ0VOVEFHRV9TSUdOKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgICAgICByZXR1cm4ge3R5cGU6IFRva2VuVHlwZS5QRVJDRU5UQUdFX1RPS0VOLCBudW1iZXIsIGZsYWdzfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7dHlwZTogVG9rZW5UeXBlLk5VTUJFUl9UT0tFTiwgbnVtYmVyLCBmbGFnc307XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb25zdW1lRXNjYXBlZENvZGVQb2ludCgpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG5cclxuICAgICAgICBpZiAoaXNIZXgoY29kZVBvaW50KSkge1xyXG4gICAgICAgICAgICBsZXQgaGV4ID0gZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xyXG4gICAgICAgICAgICB3aGlsZSAoaXNIZXgodGhpcy5wZWVrQ29kZVBvaW50KDApKSAmJiBoZXgubGVuZ3RoIDwgNikge1xyXG4gICAgICAgICAgICAgICAgaGV4ICs9IGZyb21Db2RlUG9pbnQodGhpcy5jb25zdW1lQ29kZVBvaW50KCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlKHRoaXMucGVla0NvZGVQb2ludCgwKSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBoZXhDb2RlUG9pbnQgPSBwYXJzZUludChoZXgsIDE2KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChoZXhDb2RlUG9pbnQgPT09IDAgfHwgaXNTdXJyb2dhdGVDb2RlUG9pbnQoaGV4Q29kZVBvaW50KSB8fCBoZXhDb2RlUG9pbnQgPiAweDEwZmZmZikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGhleENvZGVQb2ludDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb2RlUG9pbnQgPT09IEVPRikge1xyXG4gICAgICAgICAgICByZXR1cm4gUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvZGVQb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnN1bWVOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IHRoaXMuY29uc3VtZUNvZGVQb2ludCgpO1xyXG4gICAgICAgICAgICBpZiAoaXNOYW1lQ29kZVBvaW50KGNvZGVQb2ludCkpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNWYWxpZEVzY2FwZShjb2RlUG9pbnQsIHRoaXMucGVla0NvZGVQb2ludCgwKSkpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmcm9tQ29kZVBvaW50KHRoaXMuY29uc3VtZUVzY2FwZWRDb2RlUG9pbnQoKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29uc3VtZUNvZGVQb2ludChjb2RlUG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG4gICAgQ1NTVG9rZW4sXHJcbiAgICBEaW1lbnNpb25Ub2tlbixcclxuICAgIEVPRl9UT0tFTixcclxuICAgIE51bWJlclZhbHVlVG9rZW4sXHJcbiAgICBTdHJpbmdWYWx1ZVRva2VuLFxyXG4gICAgVG9rZW5pemVyLFxyXG4gICAgVG9rZW5UeXBlXHJcbn0gZnJvbSAnLi90b2tlbml6ZXInO1xyXG5cclxuZXhwb3J0IHR5cGUgQ1NTQmxvY2tUeXBlID1cclxuICAgIHwgVG9rZW5UeXBlLkxFRlRfUEFSRU5USEVTSVNfVE9LRU5cclxuICAgIHwgVG9rZW5UeXBlLkxFRlRfU1FVQVJFX0JSQUNLRVRfVE9LRU5cclxuICAgIHwgVG9rZW5UeXBlLkxFRlRfQ1VSTFlfQlJBQ0tFVF9UT0tFTjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ1NTQmxvY2sge1xyXG4gICAgdHlwZTogQ1NTQmxvY2tUeXBlO1xyXG4gICAgdmFsdWVzOiBDU1NWYWx1ZVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENTU0Z1bmN0aW9uIHtcclxuICAgIHR5cGU6IFRva2VuVHlwZS5GVU5DVElPTjtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHZhbHVlczogQ1NTVmFsdWVbXTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQ1NTVmFsdWUgPSBDU1NGdW5jdGlvbiB8IENTU1Rva2VuIHwgQ1NTQmxvY2s7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFyc2VyIHtcclxuICAgIHByaXZhdGUgX3Rva2VuczogQ1NTVG9rZW5bXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0b2tlbnM6IENTU1Rva2VuW10pIHtcclxuICAgICAgICB0aGlzLl90b2tlbnMgPSB0b2tlbnM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNyZWF0ZSh2YWx1ZTogc3RyaW5nKTogUGFyc2VyIHtcclxuICAgICAgICBjb25zdCB0b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKCk7XHJcbiAgICAgICAgdG9rZW5pemVyLndyaXRlKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gbmV3IFBhcnNlcih0b2tlbml6ZXIucmVhZCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcGFyc2VWYWx1ZSh2YWx1ZTogc3RyaW5nKTogQ1NTVmFsdWUge1xyXG4gICAgICAgIHJldHVybiBQYXJzZXIuY3JlYXRlKHZhbHVlKS5wYXJzZUNvbXBvbmVudFZhbHVlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHBhcnNlVmFsdWVzKHZhbHVlOiBzdHJpbmcpOiBDU1NWYWx1ZVtdIHtcclxuICAgICAgICByZXR1cm4gUGFyc2VyLmNyZWF0ZSh2YWx1ZSkucGFyc2VDb21wb25lbnRWYWx1ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZUNvbXBvbmVudFZhbHVlKCk6IENTU1ZhbHVlIHtcclxuICAgICAgICBsZXQgdG9rZW4gPSB0aGlzLmNvbnN1bWVUb2tlbigpO1xyXG4gICAgICAgIHdoaWxlICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuV0hJVEVTUEFDRV9UT0tFTikge1xyXG4gICAgICAgICAgICB0b2tlbiA9IHRoaXMuY29uc3VtZVRva2VuKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkVPRl9UT0tFTikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYEVycm9yIHBhcnNpbmcgQ1NTIGNvbXBvbmVudCB2YWx1ZSwgdW5leHBlY3RlZCBFT0ZgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVjb25zdW1lVG9rZW4odG9rZW4pO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb25zdW1lQ29tcG9uZW50VmFsdWUoKTtcclxuXHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICB0b2tlbiA9IHRoaXMuY29uc3VtZVRva2VuKCk7XHJcbiAgICAgICAgfSB3aGlsZSAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLldISVRFU1BBQ0VfVE9LRU4pO1xyXG5cclxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkVPRl9UT0tFTikge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYEVycm9yIHBhcnNpbmcgQ1NTIGNvbXBvbmVudCB2YWx1ZSwgbXVsdGlwbGUgdmFsdWVzIGZvdW5kIHdoZW4gZXhwZWN0aW5nIG9ubHkgb25lYCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VDb21wb25lbnRWYWx1ZXMoKTogQ1NTVmFsdWVbXSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gW107XHJcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnN1bWVDb21wb25lbnRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gVG9rZW5UeXBlLkVPRl9UT0tFTikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29uc3VtZUNvbXBvbmVudFZhbHVlKCk6IENTU1ZhbHVlIHtcclxuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY29uc3VtZVRva2VuKCk7XHJcblxyXG4gICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5MRUZUX0NVUkxZX0JSQUNLRVRfVE9LRU46XHJcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkxFRlRfU1FVQVJFX0JSQUNLRVRfVE9LRU46XHJcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkxFRlRfUEFSRU5USEVTSVNfVE9LRU46XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lU2ltcGxlQmxvY2sodG9rZW4udHlwZSk7XHJcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkZVTkNUSU9OX1RPS0VOOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZUZ1bmN0aW9uKHRva2VuKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0b2tlbjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnN1bWVTaW1wbGVCbG9jayh0eXBlOiBDU1NCbG9ja1R5cGUpOiBDU1NCbG9jayB7XHJcbiAgICAgICAgY29uc3QgYmxvY2s6IENTU0Jsb2NrID0ge3R5cGUsIHZhbHVlczogW119O1xyXG5cclxuICAgICAgICBsZXQgdG9rZW4gPSB0aGlzLmNvbnN1bWVUb2tlbigpO1xyXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuRU9GX1RPS0VOIHx8IGlzRW5kaW5nVG9rZW5Gb3IodG9rZW4sIHR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2s7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVjb25zdW1lVG9rZW4odG9rZW4pO1xyXG4gICAgICAgICAgICBibG9jay52YWx1ZXMucHVzaCh0aGlzLmNvbnN1bWVDb21wb25lbnRWYWx1ZSgpKTtcclxuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmNvbnN1bWVUb2tlbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnN1bWVGdW5jdGlvbihmdW5jdGlvblRva2VuOiBTdHJpbmdWYWx1ZVRva2VuKTogQ1NTRnVuY3Rpb24ge1xyXG4gICAgICAgIGNvbnN0IGNzc0Z1bmN0aW9uOiBDU1NGdW5jdGlvbiA9IHtcclxuICAgICAgICAgICAgbmFtZTogZnVuY3Rpb25Ub2tlbi52YWx1ZSxcclxuICAgICAgICAgICAgdmFsdWVzOiBbXSxcclxuICAgICAgICAgICAgdHlwZTogVG9rZW5UeXBlLkZVTkNUSU9OXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmNvbnN1bWVUb2tlbigpO1xyXG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkVPRl9UT0tFTiB8fCB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUklHSFRfUEFSRU5USEVTSVNfVE9LRU4pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjc3NGdW5jdGlvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5yZWNvbnN1bWVUb2tlbih0b2tlbik7XHJcbiAgICAgICAgICAgIGNzc0Z1bmN0aW9uLnZhbHVlcy5wdXNoKHRoaXMuY29uc3VtZUNvbXBvbmVudFZhbHVlKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnN1bWVUb2tlbigpOiBDU1NUb2tlbiB7XHJcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLl90b2tlbnMuc2hpZnQoKTtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHRva2VuID09PSAndW5kZWZpbmVkJyA/IEVPRl9UT0tFTiA6IHRva2VuO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVjb25zdW1lVG9rZW4odG9rZW46IENTU1Rva2VuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdG9rZW5zLnVuc2hpZnQodG9rZW4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNEaW1lbnNpb25Ub2tlbiA9ICh0b2tlbjogQ1NTVmFsdWUpOiB0b2tlbiBpcyBEaW1lbnNpb25Ub2tlbiA9PiB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuRElNRU5TSU9OX1RPS0VOO1xyXG5leHBvcnQgY29uc3QgaXNOdW1iZXJUb2tlbiA9ICh0b2tlbjogQ1NTVmFsdWUpOiB0b2tlbiBpcyBOdW1iZXJWYWx1ZVRva2VuID0+IHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5OVU1CRVJfVE9LRU47XHJcbmV4cG9ydCBjb25zdCBpc0lkZW50VG9rZW4gPSAodG9rZW46IENTU1ZhbHVlKTogdG9rZW4gaXMgU3RyaW5nVmFsdWVUb2tlbiA9PiB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuSURFTlRfVE9LRU47XHJcbmV4cG9ydCBjb25zdCBpc1N0cmluZ1Rva2VuID0gKHRva2VuOiBDU1NWYWx1ZSk6IHRva2VuIGlzIFN0cmluZ1ZhbHVlVG9rZW4gPT4gdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlNUUklOR19UT0tFTjtcclxuZXhwb3J0IGNvbnN0IGlzSWRlbnRXaXRoVmFsdWUgPSAodG9rZW46IENTU1ZhbHVlLCB2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiA9PlxyXG4gICAgaXNJZGVudFRva2VuKHRva2VuKSAmJiB0b2tlbi52YWx1ZSA9PT0gdmFsdWU7XHJcblxyXG5leHBvcnQgY29uc3Qgbm9uV2hpdGVTcGFjZSA9ICh0b2tlbjogQ1NTVmFsdWUpOiBib29sZWFuID0+IHRva2VuLnR5cGUgIT09IFRva2VuVHlwZS5XSElURVNQQUNFX1RPS0VOO1xyXG5leHBvcnQgY29uc3Qgbm9uRnVuY3Rpb25BcmdTZXBhcmF0b3IgPSAodG9rZW46IENTU1ZhbHVlKTogYm9vbGVhbiA9PlxyXG4gICAgdG9rZW4udHlwZSAhPT0gVG9rZW5UeXBlLldISVRFU1BBQ0VfVE9LRU4gJiYgdG9rZW4udHlwZSAhPT0gVG9rZW5UeXBlLkNPTU1BX1RPS0VOO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBhcnNlRnVuY3Rpb25BcmdzID0gKHRva2VuczogQ1NTVmFsdWVbXSk6IENTU1ZhbHVlW11bXSA9PiB7XHJcbiAgICBjb25zdCBhcmdzOiBDU1NWYWx1ZVtdW10gPSBbXTtcclxuICAgIGxldCBhcmc6IENTU1ZhbHVlW10gPSBbXTtcclxuICAgIHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xyXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuQ09NTUFfVE9LRU4pIHtcclxuICAgICAgICAgICAgaWYgKGFyZy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgcGFyc2luZyBmdW5jdGlvbiBhcmdzLCB6ZXJvIHRva2VucyBmb3IgYXJnYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XHJcbiAgICAgICAgICAgIGFyZyA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW5UeXBlLldISVRFU1BBQ0VfVE9LRU4pIHtcclxuICAgICAgICAgICAgYXJnLnB1c2godG9rZW4pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKGFyZy5sZW5ndGgpIHtcclxuICAgICAgICBhcmdzLnB1c2goYXJnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJncztcclxufTtcclxuXHJcbmNvbnN0IGlzRW5kaW5nVG9rZW5Gb3IgPSAodG9rZW46IENTU1Rva2VuLCB0eXBlOiBDU1NCbG9ja1R5cGUpOiBib29sZWFuID0+IHtcclxuICAgIGlmICh0eXBlID09PSBUb2tlblR5cGUuTEVGVF9DVVJMWV9CUkFDS0VUX1RPS0VOICYmIHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5SSUdIVF9DVVJMWV9CUkFDS0VUX1RPS0VOKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gVG9rZW5UeXBlLkxFRlRfU1FVQVJFX0JSQUNLRVRfVE9LRU4gJiYgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJJR0hUX1NRVUFSRV9CUkFDS0VUX1RPS0VOKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGUgPT09IFRva2VuVHlwZS5MRUZUX1BBUkVOVEhFU0lTX1RPS0VOICYmIHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5SSUdIVF9QQVJFTlRIRVNJU19UT0tFTjtcclxufTtcclxuIiwiaW1wb3J0IHtDU1NWYWx1ZX0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7RGltZW5zaW9uVG9rZW4sIE51bWJlclZhbHVlVG9rZW4sIFRva2VuVHlwZX0gZnJvbSAnLi4vc3ludGF4L3Rva2VuaXplcic7XHJcblxyXG5leHBvcnQgdHlwZSBMZW5ndGggPSBEaW1lbnNpb25Ub2tlbiB8IE51bWJlclZhbHVlVG9rZW47XHJcblxyXG5leHBvcnQgY29uc3QgaXNMZW5ndGggPSAodG9rZW46IENTU1ZhbHVlKTogdG9rZW4gaXMgTGVuZ3RoID0+XHJcbiAgICB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuTlVNQkVSX1RPS0VOIHx8IHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5ESU1FTlNJT05fVE9LRU47XHJcbiIsImltcG9ydCB7RGltZW5zaW9uVG9rZW4sIEZMQUdfSU5URUdFUiwgTnVtYmVyVmFsdWVUb2tlbiwgVG9rZW5UeXBlfSBmcm9tICcuLi9zeW50YXgvdG9rZW5pemVyJztcclxuaW1wb3J0IHtDU1NWYWx1ZSwgaXNEaW1lbnNpb25Ub2tlbn0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7aXNMZW5ndGh9IGZyb20gJy4vbGVuZ3RoJztcclxuZXhwb3J0IHR5cGUgTGVuZ3RoUGVyY2VudGFnZSA9IERpbWVuc2lvblRva2VuIHwgTnVtYmVyVmFsdWVUb2tlbjtcclxuZXhwb3J0IHR5cGUgTGVuZ3RoUGVyY2VudGFnZVR1cGxlID0gW0xlbmd0aFBlcmNlbnRhZ2VdIHwgW0xlbmd0aFBlcmNlbnRhZ2UsIExlbmd0aFBlcmNlbnRhZ2VdO1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzTGVuZ3RoUGVyY2VudGFnZSA9ICh0b2tlbjogQ1NTVmFsdWUpOiB0b2tlbiBpcyBMZW5ndGhQZXJjZW50YWdlID0+XHJcbiAgICB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUEVSQ0VOVEFHRV9UT0tFTiB8fCBpc0xlbmd0aCh0b2tlbik7XHJcbmV4cG9ydCBjb25zdCBwYXJzZUxlbmd0aFBlcmNlbnRhZ2VUdXBsZSA9ICh0b2tlbnM6IExlbmd0aFBlcmNlbnRhZ2VbXSk6IExlbmd0aFBlcmNlbnRhZ2VUdXBsZSA9PlxyXG4gICAgdG9rZW5zLmxlbmd0aCA+IDEgPyBbdG9rZW5zWzBdLCB0b2tlbnNbMV1dIDogW3Rva2Vuc1swXV07XHJcbmV4cG9ydCBjb25zdCBaRVJPX0xFTkdUSDogTnVtYmVyVmFsdWVUb2tlbiA9IHtcclxuICAgIHR5cGU6IFRva2VuVHlwZS5OVU1CRVJfVE9LRU4sXHJcbiAgICBudW1iZXI6IDAsXHJcbiAgICBmbGFnczogRkxBR19JTlRFR0VSXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgRklGVFlfUEVSQ0VOVDogTnVtYmVyVmFsdWVUb2tlbiA9IHtcclxuICAgIHR5cGU6IFRva2VuVHlwZS5QRVJDRU5UQUdFX1RPS0VOLFxyXG4gICAgbnVtYmVyOiA1MCxcclxuICAgIGZsYWdzOiBGTEFHX0lOVEVHRVJcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBIVU5EUkVEX1BFUkNFTlQ6IE51bWJlclZhbHVlVG9rZW4gPSB7XHJcbiAgICB0eXBlOiBUb2tlblR5cGUuUEVSQ0VOVEFHRV9UT0tFTixcclxuICAgIG51bWJlcjogMTAwLFxyXG4gICAgZmxhZ3M6IEZMQUdfSU5URUdFUlxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldEFic29sdXRlVmFsdWVGb3JUdXBsZSA9IChcclxuICAgIHR1cGxlOiBMZW5ndGhQZXJjZW50YWdlVHVwbGUsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXJcclxuKTogW251bWJlciwgbnVtYmVyXSA9PiB7XHJcbiAgICBjb25zdCBbeCwgeV0gPSB0dXBsZTtcclxuICAgIHJldHVybiBbZ2V0QWJzb2x1dGVWYWx1ZSh4LCB3aWR0aCksIGdldEFic29sdXRlVmFsdWUodHlwZW9mIHkgIT09ICd1bmRlZmluZWQnID8geSA6IHgsIGhlaWdodCldO1xyXG59O1xyXG5leHBvcnQgY29uc3QgZ2V0QWJzb2x1dGVWYWx1ZSA9ICh0b2tlbjogTGVuZ3RoUGVyY2VudGFnZSwgcGFyZW50OiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5QRVJDRU5UQUdFX1RPS0VOKSB7XHJcbiAgICAgICAgcmV0dXJuICh0b2tlbi5udW1iZXIgLyAxMDApICogcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0RpbWVuc2lvblRva2VuKHRva2VuKSkge1xyXG4gICAgICAgIHN3aXRjaCAodG9rZW4udW5pdCkge1xyXG4gICAgICAgICAgICBjYXNlICdyZW0nOlxyXG4gICAgICAgICAgICBjYXNlICdlbSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTYgKiB0b2tlbi5udW1iZXI7IC8vIFRPRE8gdXNlIGNvcnJlY3QgZm9udC1zaXplXHJcbiAgICAgICAgICAgIGNhc2UgJ3B4JzpcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbi5udW1iZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b2tlbi5udW1iZXI7XHJcbn07XHJcbiIsImltcG9ydCB7Q1NTVmFsdWUsIGlzSWRlbnRUb2tlbn0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7VG9rZW5UeXBlfSBmcm9tICcuLi9zeW50YXgvdG9rZW5pemVyJztcclxuaW1wb3J0IHtJVHlwZURlc2NyaXB0b3J9IGZyb20gJy4uL0lUeXBlRGVzY3JpcHRvcic7XHJcbmltcG9ydCB7SFVORFJFRF9QRVJDRU5ULCBaRVJPX0xFTkdUSH0gZnJvbSAnLi9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmltcG9ydCB7R3JhZGllbnRDb3JuZXJ9IGZyb20gJy4vaW1hZ2UnO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcblxyXG5jb25zdCBERUcgPSAnZGVnJztcclxuY29uc3QgR1JBRCA9ICdncmFkJztcclxuY29uc3QgUkFEID0gJ3JhZCc7XHJcbmNvbnN0IFRVUk4gPSAndHVybic7XHJcblxyXG5leHBvcnQgY29uc3QgYW5nbGU6IElUeXBlRGVzY3JpcHRvcjxudW1iZXI+ID0ge1xyXG4gICAgbmFtZTogJ2FuZ2xlJyxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIHZhbHVlOiBDU1NWYWx1ZSk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09IFRva2VuVHlwZS5ESU1FTlNJT05fVE9LRU4pIHtcclxuICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS51bml0KSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIERFRzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE1hdGguUEkgKiB2YWx1ZS5udW1iZXIpIC8gMTgwO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBHUkFEOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoTWF0aC5QSSAvIDIwMCkgKiB2YWx1ZS5udW1iZXI7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJBRDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUubnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBUVVJOOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLlBJICogMiAqIHZhbHVlLm51bWJlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBhbmdsZSB0eXBlYCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNBbmdsZSA9ICh2YWx1ZTogQ1NTVmFsdWUpOiBib29sZWFuID0+IHtcclxuICAgIGlmICh2YWx1ZS50eXBlID09PSBUb2tlblR5cGUuRElNRU5TSU9OX1RPS0VOKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlLnVuaXQgPT09IERFRyB8fCB2YWx1ZS51bml0ID09PSBHUkFEIHx8IHZhbHVlLnVuaXQgPT09IFJBRCB8fCB2YWx1ZS51bml0ID09PSBUVVJOKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBwYXJzZU5hbWVkU2lkZSA9ICh0b2tlbnM6IENTU1ZhbHVlW10pOiBudW1iZXIgfCBHcmFkaWVudENvcm5lciA9PiB7XHJcbiAgICBjb25zdCBzaWRlT3JDb3JuZXIgPSB0b2tlbnNcclxuICAgICAgICAuZmlsdGVyKGlzSWRlbnRUb2tlbilcclxuICAgICAgICAubWFwKChpZGVudCkgPT4gaWRlbnQudmFsdWUpXHJcbiAgICAgICAgLmpvaW4oJyAnKTtcclxuXHJcbiAgICBzd2l0Y2ggKHNpZGVPckNvcm5lcikge1xyXG4gICAgICAgIGNhc2UgJ3RvIGJvdHRvbSByaWdodCc6XHJcbiAgICAgICAgY2FzZSAndG8gcmlnaHQgYm90dG9tJzpcclxuICAgICAgICBjYXNlICdsZWZ0IHRvcCc6XHJcbiAgICAgICAgY2FzZSAndG9wIGxlZnQnOlxyXG4gICAgICAgICAgICByZXR1cm4gW1pFUk9fTEVOR1RILCBaRVJPX0xFTkdUSF07XHJcbiAgICAgICAgY2FzZSAndG8gdG9wJzpcclxuICAgICAgICBjYXNlICdib3R0b20nOlxyXG4gICAgICAgICAgICByZXR1cm4gZGVnKDApO1xyXG4gICAgICAgIGNhc2UgJ3RvIGJvdHRvbSBsZWZ0JzpcclxuICAgICAgICBjYXNlICd0byBsZWZ0IGJvdHRvbSc6XHJcbiAgICAgICAgY2FzZSAncmlnaHQgdG9wJzpcclxuICAgICAgICBjYXNlICd0b3AgcmlnaHQnOlxyXG4gICAgICAgICAgICByZXR1cm4gW1pFUk9fTEVOR1RILCBIVU5EUkVEX1BFUkNFTlRdO1xyXG4gICAgICAgIGNhc2UgJ3RvIHJpZ2h0JzpcclxuICAgICAgICBjYXNlICdsZWZ0JzpcclxuICAgICAgICAgICAgcmV0dXJuIGRlZyg5MCk7XHJcbiAgICAgICAgY2FzZSAndG8gdG9wIGxlZnQnOlxyXG4gICAgICAgIGNhc2UgJ3RvIGxlZnQgdG9wJzpcclxuICAgICAgICBjYXNlICdyaWdodCBib3R0b20nOlxyXG4gICAgICAgIGNhc2UgJ2JvdHRvbSByaWdodCc6XHJcbiAgICAgICAgICAgIHJldHVybiBbSFVORFJFRF9QRVJDRU5ULCBIVU5EUkVEX1BFUkNFTlRdO1xyXG4gICAgICAgIGNhc2UgJ3RvIGJvdHRvbSc6XHJcbiAgICAgICAgY2FzZSAndG9wJzpcclxuICAgICAgICAgICAgcmV0dXJuIGRlZygxODApO1xyXG4gICAgICAgIGNhc2UgJ3RvIHRvcCByaWdodCc6XHJcbiAgICAgICAgY2FzZSAndG8gcmlnaHQgdG9wJzpcclxuICAgICAgICBjYXNlICdsZWZ0IGJvdHRvbSc6XHJcbiAgICAgICAgY2FzZSAnYm90dG9tIGxlZnQnOlxyXG4gICAgICAgICAgICByZXR1cm4gW0hVTkRSRURfUEVSQ0VOVCwgWkVST19MRU5HVEhdO1xyXG4gICAgICAgIGNhc2UgJ3RvIGxlZnQnOlxyXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcclxuICAgICAgICAgICAgcmV0dXJuIGRlZygyNzApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZyA9IChkZWc6IG51bWJlcik6IG51bWJlciA9PiAoTWF0aC5QSSAqIGRlZykgLyAxODA7XHJcbiIsImltcG9ydCB7Q1NTVmFsdWUsIG5vbkZ1bmN0aW9uQXJnU2VwYXJhdG9yLCBQYXJzZXJ9IGZyb20gJy4uL3N5bnRheC9wYXJzZXInO1xyXG5pbXBvcnQge1Rva2VuVHlwZX0gZnJvbSAnLi4vc3ludGF4L3Rva2VuaXplcic7XHJcbmltcG9ydCB7SVR5cGVEZXNjcmlwdG9yfSBmcm9tICcuLi9JVHlwZURlc2NyaXB0b3InO1xyXG5pbXBvcnQge2FuZ2xlLCBkZWd9IGZyb20gJy4vYW5nbGUnO1xyXG5pbXBvcnQge2dldEFic29sdXRlVmFsdWUsIGlzTGVuZ3RoUGVyY2VudGFnZX0gZnJvbSAnLi9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuZXhwb3J0IHR5cGUgQ29sb3IgPSBudW1iZXI7XHJcblxyXG5leHBvcnQgY29uc3QgY29sb3I6IElUeXBlRGVzY3JpcHRvcjxDb2xvcj4gPSB7XHJcbiAgICBuYW1lOiAnY29sb3InLFxyXG4gICAgcGFyc2U6IChjb250ZXh0OiBDb250ZXh0LCB2YWx1ZTogQ1NTVmFsdWUpOiBDb2xvciA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09IFRva2VuVHlwZS5GVU5DVElPTikge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvckZ1bmN0aW9uID0gU1VQUE9SVEVEX0NPTE9SX0ZVTkNUSU9OU1t2YWx1ZS5uYW1lXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2xvckZ1bmN0aW9uID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0aW5nIHRvIHBhcnNlIGFuIHVuc3VwcG9ydGVkIGNvbG9yIGZ1bmN0aW9uIFwiJHt2YWx1ZS5uYW1lfVwiYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yRnVuY3Rpb24oY29udGV4dCwgdmFsdWUudmFsdWVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS50eXBlID09PSBUb2tlblR5cGUuSEFTSF9UT0tFTikge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUudmFsdWUubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByID0gdmFsdWUudmFsdWUuc3Vic3RyaW5nKDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZyA9IHZhbHVlLnZhbHVlLnN1YnN0cmluZygxLCAyKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGIgPSB2YWx1ZS52YWx1ZS5zdWJzdHJpbmcoMiwgMyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFjayhwYXJzZUludChyICsgciwgMTYpLCBwYXJzZUludChnICsgZywgMTYpLCBwYXJzZUludChiICsgYiwgMTYpLCAxKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVlLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHZhbHVlLnZhbHVlLnN1YnN0cmluZygwLCAxKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSB2YWx1ZS52YWx1ZS5zdWJzdHJpbmcoMSwgMik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiID0gdmFsdWUudmFsdWUuc3Vic3RyaW5nKDIsIDMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYSA9IHZhbHVlLnZhbHVlLnN1YnN0cmluZygzLCA0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYWNrKHBhcnNlSW50KHIgKyByLCAxNiksIHBhcnNlSW50KGcgKyBnLCAxNiksIHBhcnNlSW50KGIgKyBiLCAxNiksIHBhcnNlSW50KGEgKyBhLCAxNikgLyAyNTUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUudmFsdWUubGVuZ3RoID09PSA2KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByID0gdmFsdWUudmFsdWUuc3Vic3RyaW5nKDAsIDIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZyA9IHZhbHVlLnZhbHVlLnN1YnN0cmluZygyLCA0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGIgPSB2YWx1ZS52YWx1ZS5zdWJzdHJpbmcoNCwgNik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFjayhwYXJzZUludChyLCAxNiksIHBhcnNlSW50KGcsIDE2KSwgcGFyc2VJbnQoYiwgMTYpLCAxKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVlLmxlbmd0aCA9PT0gOCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHZhbHVlLnZhbHVlLnN1YnN0cmluZygwLCAyKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSB2YWx1ZS52YWx1ZS5zdWJzdHJpbmcoMiwgNCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiID0gdmFsdWUudmFsdWUuc3Vic3RyaW5nKDQsIDYpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYSA9IHZhbHVlLnZhbHVlLnN1YnN0cmluZyg2LCA4KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYWNrKHBhcnNlSW50KHIsIDE2KSwgcGFyc2VJbnQoZywgMTYpLCBwYXJzZUludChiLCAxNiksIHBhcnNlSW50KGEsIDE2KSAvIDI1NSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS50eXBlID09PSBUb2tlblR5cGUuSURFTlRfVE9LRU4pIHtcclxuICAgICAgICAgICAgY29uc3QgbmFtZWRDb2xvciA9IENPTE9SU1t2YWx1ZS52YWx1ZS50b1VwcGVyQ2FzZSgpXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuYW1lZENvbG9yICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVkQ29sb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBDT0xPUlMuVFJBTlNQQVJFTlQ7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNUcmFuc3BhcmVudCA9IChjb2xvcjogQ29sb3IpOiBib29sZWFuID0+ICgweGZmICYgY29sb3IpID09PSAwO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFzU3RyaW5nID0gKGNvbG9yOiBDb2xvcik6IHN0cmluZyA9PiB7XHJcbiAgICBjb25zdCBhbHBoYSA9IDB4ZmYgJiBjb2xvcjtcclxuICAgIGNvbnN0IGJsdWUgPSAweGZmICYgKGNvbG9yID4+IDgpO1xyXG4gICAgY29uc3QgZ3JlZW4gPSAweGZmICYgKGNvbG9yID4+IDE2KTtcclxuICAgIGNvbnN0IHJlZCA9IDB4ZmYgJiAoY29sb3IgPj4gMjQpO1xyXG4gICAgcmV0dXJuIGFscGhhIDwgMjU1ID8gYHJnYmEoJHtyZWR9LCR7Z3JlZW59LCR7Ymx1ZX0sJHthbHBoYSAvIDI1NX0pYCA6IGByZ2IoJHtyZWR9LCR7Z3JlZW59LCR7Ymx1ZX0pYDtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBwYWNrID0gKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIsIGE6IG51bWJlcik6IENvbG9yID0+XHJcbiAgICAoKHIgPDwgMjQpIHwgKGcgPDwgMTYpIHwgKGIgPDwgOCkgfCAoTWF0aC5yb3VuZChhICogMjU1KSA8PCAwKSkgPj4+IDA7XHJcblxyXG5jb25zdCBnZXRUb2tlbkNvbG9yVmFsdWUgPSAodG9rZW46IENTU1ZhbHVlLCBpOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5OVU1CRVJfVE9LRU4pIHtcclxuICAgICAgICByZXR1cm4gdG9rZW4ubnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUEVSQ0VOVEFHRV9UT0tFTikge1xyXG4gICAgICAgIGNvbnN0IG1heCA9IGkgPT09IDMgPyAxIDogMjU1O1xyXG4gICAgICAgIHJldHVybiBpID09PSAzID8gKHRva2VuLm51bWJlciAvIDEwMCkgKiBtYXggOiBNYXRoLnJvdW5kKCh0b2tlbi5udW1iZXIgLyAxMDApICogbWF4KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gMDtcclxufTtcclxuXHJcbmNvbnN0IHJnYiA9IChfY29udGV4dDogQ29udGV4dCwgYXJnczogQ1NTVmFsdWVbXSk6IG51bWJlciA9PiB7XHJcbiAgICBjb25zdCB0b2tlbnMgPSBhcmdzLmZpbHRlcihub25GdW5jdGlvbkFyZ1NlcGFyYXRvcik7XHJcblxyXG4gICAgaWYgKHRva2Vucy5sZW5ndGggPT09IDMpIHtcclxuICAgICAgICBjb25zdCBbciwgZywgYl0gPSB0b2tlbnMubWFwKGdldFRva2VuQ29sb3JWYWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHBhY2sociwgZywgYiwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRva2Vucy5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICBjb25zdCBbciwgZywgYiwgYV0gPSB0b2tlbnMubWFwKGdldFRva2VuQ29sb3JWYWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHBhY2sociwgZywgYiwgYSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIDA7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBodWUycmdiKHQxOiBudW1iZXIsIHQyOiBudW1iZXIsIGh1ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmIChodWUgPCAwKSB7XHJcbiAgICAgICAgaHVlICs9IDE7XHJcbiAgICB9XHJcbiAgICBpZiAoaHVlID49IDEpIHtcclxuICAgICAgICBodWUgLT0gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaHVlIDwgMSAvIDYpIHtcclxuICAgICAgICByZXR1cm4gKHQyIC0gdDEpICogaHVlICogNiArIHQxO1xyXG4gICAgfSBlbHNlIGlmIChodWUgPCAxIC8gMikge1xyXG4gICAgICAgIHJldHVybiB0MjtcclxuICAgIH0gZWxzZSBpZiAoaHVlIDwgMiAvIDMpIHtcclxuICAgICAgICByZXR1cm4gKHQyIC0gdDEpICogNiAqICgyIC8gMyAtIGh1ZSkgKyB0MTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHQxO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBoc2wgPSAoY29udGV4dDogQ29udGV4dCwgYXJnczogQ1NTVmFsdWVbXSk6IG51bWJlciA9PiB7XHJcbiAgICBjb25zdCB0b2tlbnMgPSBhcmdzLmZpbHRlcihub25GdW5jdGlvbkFyZ1NlcGFyYXRvcik7XHJcbiAgICBjb25zdCBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHRva2VucztcclxuXHJcbiAgICBjb25zdCBoID0gKGh1ZS50eXBlID09PSBUb2tlblR5cGUuTlVNQkVSX1RPS0VOID8gZGVnKGh1ZS5udW1iZXIpIDogYW5nbGUucGFyc2UoY29udGV4dCwgaHVlKSkgLyAoTWF0aC5QSSAqIDIpO1xyXG4gICAgY29uc3QgcyA9IGlzTGVuZ3RoUGVyY2VudGFnZShzYXR1cmF0aW9uKSA/IHNhdHVyYXRpb24ubnVtYmVyIC8gMTAwIDogMDtcclxuICAgIGNvbnN0IGwgPSBpc0xlbmd0aFBlcmNlbnRhZ2UobGlnaHRuZXNzKSA/IGxpZ2h0bmVzcy5udW1iZXIgLyAxMDAgOiAwO1xyXG4gICAgY29uc3QgYSA9IHR5cGVvZiBhbHBoYSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNMZW5ndGhQZXJjZW50YWdlKGFscGhhKSA/IGdldEFic29sdXRlVmFsdWUoYWxwaGEsIDEpIDogMTtcclxuXHJcbiAgICBpZiAocyA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBwYWNrKGwgKiAyNTUsIGwgKiAyNTUsIGwgKiAyNTUsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHQyID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gbCAqIHM7XHJcblxyXG4gICAgY29uc3QgdDEgPSBsICogMiAtIHQyO1xyXG4gICAgY29uc3QgciA9IGh1ZTJyZ2IodDEsIHQyLCBoICsgMSAvIDMpO1xyXG4gICAgY29uc3QgZyA9IGh1ZTJyZ2IodDEsIHQyLCBoKTtcclxuICAgIGNvbnN0IGIgPSBodWUycmdiKHQxLCB0MiwgaCAtIDEgLyAzKTtcclxuICAgIHJldHVybiBwYWNrKHIgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIGEpO1xyXG59O1xyXG5cclxuY29uc3QgU1VQUE9SVEVEX0NPTE9SX0ZVTkNUSU9OUzoge1xyXG4gICAgW2tleTogc3RyaW5nXTogKGNvbnRleHQ6IENvbnRleHQsIGFyZ3M6IENTU1ZhbHVlW10pID0+IG51bWJlcjtcclxufSA9IHtcclxuICAgIGhzbDogaHNsLFxyXG4gICAgaHNsYTogaHNsLFxyXG4gICAgcmdiOiByZ2IsXHJcbiAgICByZ2JhOiByZ2JcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBwYXJzZUNvbG9yID0gKGNvbnRleHQ6IENvbnRleHQsIHZhbHVlOiBzdHJpbmcpOiBDb2xvciA9PlxyXG4gICAgY29sb3IucGFyc2UoY29udGV4dCwgUGFyc2VyLmNyZWF0ZSh2YWx1ZSkucGFyc2VDb21wb25lbnRWYWx1ZSgpKTtcclxuXHJcbmV4cG9ydCBjb25zdCBDT0xPUlM6IHtba2V5OiBzdHJpbmddOiBDb2xvcn0gPSB7XHJcbiAgICBBTElDRUJMVUU6IDB4ZjBmOGZmZmYsXHJcbiAgICBBTlRJUVVFV0hJVEU6IDB4ZmFlYmQ3ZmYsXHJcbiAgICBBUVVBOiAweDAwZmZmZmZmLFxyXG4gICAgQVFVQU1BUklORTogMHg3ZmZmZDRmZixcclxuICAgIEFaVVJFOiAweGYwZmZmZmZmLFxyXG4gICAgQkVJR0U6IDB4ZjVmNWRjZmYsXHJcbiAgICBCSVNRVUU6IDB4ZmZlNGM0ZmYsXHJcbiAgICBCTEFDSzogMHgwMDAwMDBmZixcclxuICAgIEJMQU5DSEVEQUxNT05EOiAweGZmZWJjZGZmLFxyXG4gICAgQkxVRTogMHgwMDAwZmZmZixcclxuICAgIEJMVUVWSU9MRVQ6IDB4OGEyYmUyZmYsXHJcbiAgICBCUk9XTjogMHhhNTJhMmFmZixcclxuICAgIEJVUkxZV09PRDogMHhkZWI4ODdmZixcclxuICAgIENBREVUQkxVRTogMHg1ZjllYTBmZixcclxuICAgIENIQVJUUkVVU0U6IDB4N2ZmZjAwZmYsXHJcbiAgICBDSE9DT0xBVEU6IDB4ZDI2OTFlZmYsXHJcbiAgICBDT1JBTDogMHhmZjdmNTBmZixcclxuICAgIENPUk5GTE9XRVJCTFVFOiAweDY0OTVlZGZmLFxyXG4gICAgQ09STlNJTEs6IDB4ZmZmOGRjZmYsXHJcbiAgICBDUklNU09OOiAweGRjMTQzY2ZmLFxyXG4gICAgQ1lBTjogMHgwMGZmZmZmZixcclxuICAgIERBUktCTFVFOiAweDAwMDA4YmZmLFxyXG4gICAgREFSS0NZQU46IDB4MDA4YjhiZmYsXHJcbiAgICBEQVJLR09MREVOUk9EOiAweGI4ODZiYmZmLFxyXG4gICAgREFSS0dSQVk6IDB4YTlhOWE5ZmYsXHJcbiAgICBEQVJLR1JFRU46IDB4MDA2NDAwZmYsXHJcbiAgICBEQVJLR1JFWTogMHhhOWE5YTlmZixcclxuICAgIERBUktLSEFLSTogMHhiZGI3NmJmZixcclxuICAgIERBUktNQUdFTlRBOiAweDhiMDA4YmZmLFxyXG4gICAgREFSS09MSVZFR1JFRU46IDB4NTU2YjJmZmYsXHJcbiAgICBEQVJLT1JBTkdFOiAweGZmOGMwMGZmLFxyXG4gICAgREFSS09SQ0hJRDogMHg5OTMyY2NmZixcclxuICAgIERBUktSRUQ6IDB4OGIwMDAwZmYsXHJcbiAgICBEQVJLU0FMTU9OOiAweGU5OTY3YWZmLFxyXG4gICAgREFSS1NFQUdSRUVOOiAweDhmYmM4ZmZmLFxyXG4gICAgREFSS1NMQVRFQkxVRTogMHg0ODNkOGJmZixcclxuICAgIERBUktTTEFURUdSQVk6IDB4MmY0ZjRmZmYsXHJcbiAgICBEQVJLU0xBVEVHUkVZOiAweDJmNGY0ZmZmLFxyXG4gICAgREFSS1RVUlFVT0lTRTogMHgwMGNlZDFmZixcclxuICAgIERBUktWSU9MRVQ6IDB4OTQwMGQzZmYsXHJcbiAgICBERUVQUElOSzogMHhmZjE0OTNmZixcclxuICAgIERFRVBTS1lCTFVFOiAweDAwYmZmZmZmLFxyXG4gICAgRElNR1JBWTogMHg2OTY5NjlmZixcclxuICAgIERJTUdSRVk6IDB4Njk2OTY5ZmYsXHJcbiAgICBET0RHRVJCTFVFOiAweDFlOTBmZmZmLFxyXG4gICAgRklSRUJSSUNLOiAweGIyMjIyMmZmLFxyXG4gICAgRkxPUkFMV0hJVEU6IDB4ZmZmYWYwZmYsXHJcbiAgICBGT1JFU1RHUkVFTjogMHgyMjhiMjJmZixcclxuICAgIEZVQ0hTSUE6IDB4ZmYwMGZmZmYsXHJcbiAgICBHQUlOU0JPUk86IDB4ZGNkY2RjZmYsXHJcbiAgICBHSE9TVFdISVRFOiAweGY4ZjhmZmZmLFxyXG4gICAgR09MRDogMHhmZmQ3MDBmZixcclxuICAgIEdPTERFTlJPRDogMHhkYWE1MjBmZixcclxuICAgIEdSQVk6IDB4ODA4MDgwZmYsXHJcbiAgICBHUkVFTjogMHgwMDgwMDBmZixcclxuICAgIEdSRUVOWUVMTE9XOiAweGFkZmYyZmZmLFxyXG4gICAgR1JFWTogMHg4MDgwODBmZixcclxuICAgIEhPTkVZREVXOiAweGYwZmZmMGZmLFxyXG4gICAgSE9UUElOSzogMHhmZjY5YjRmZixcclxuICAgIElORElBTlJFRDogMHhjZDVjNWNmZixcclxuICAgIElORElHTzogMHg0YjAwODJmZixcclxuICAgIElWT1JZOiAweGZmZmZmMGZmLFxyXG4gICAgS0hBS0k6IDB4ZjBlNjhjZmYsXHJcbiAgICBMQVZFTkRFUjogMHhlNmU2ZmFmZixcclxuICAgIExBVkVOREVSQkxVU0g6IDB4ZmZmMGY1ZmYsXHJcbiAgICBMQVdOR1JFRU46IDB4N2NmYzAwZmYsXHJcbiAgICBMRU1PTkNISUZGT046IDB4ZmZmYWNkZmYsXHJcbiAgICBMSUdIVEJMVUU6IDB4YWRkOGU2ZmYsXHJcbiAgICBMSUdIVENPUkFMOiAweGYwODA4MGZmLFxyXG4gICAgTElHSFRDWUFOOiAweGUwZmZmZmZmLFxyXG4gICAgTElHSFRHT0xERU5ST0RZRUxMT1c6IDB4ZmFmYWQyZmYsXHJcbiAgICBMSUdIVEdSQVk6IDB4ZDNkM2QzZmYsXHJcbiAgICBMSUdIVEdSRUVOOiAweDkwZWU5MGZmLFxyXG4gICAgTElHSFRHUkVZOiAweGQzZDNkM2ZmLFxyXG4gICAgTElHSFRQSU5LOiAweGZmYjZjMWZmLFxyXG4gICAgTElHSFRTQUxNT046IDB4ZmZhMDdhZmYsXHJcbiAgICBMSUdIVFNFQUdSRUVOOiAweDIwYjJhYWZmLFxyXG4gICAgTElHSFRTS1lCTFVFOiAweDg3Y2VmYWZmLFxyXG4gICAgTElHSFRTTEFURUdSQVk6IDB4Nzc4ODk5ZmYsXHJcbiAgICBMSUdIVFNMQVRFR1JFWTogMHg3Nzg4OTlmZixcclxuICAgIExJR0hUU1RFRUxCTFVFOiAweGIwYzRkZWZmLFxyXG4gICAgTElHSFRZRUxMT1c6IDB4ZmZmZmUwZmYsXHJcbiAgICBMSU1FOiAweDAwZmYwMGZmLFxyXG4gICAgTElNRUdSRUVOOiAweDMyY2QzMmZmLFxyXG4gICAgTElORU46IDB4ZmFmMGU2ZmYsXHJcbiAgICBNQUdFTlRBOiAweGZmMDBmZmZmLFxyXG4gICAgTUFST09OOiAweDgwMDAwMGZmLFxyXG4gICAgTUVESVVNQVFVQU1BUklORTogMHg2NmNkYWFmZixcclxuICAgIE1FRElVTUJMVUU6IDB4MDAwMGNkZmYsXHJcbiAgICBNRURJVU1PUkNISUQ6IDB4YmE1NWQzZmYsXHJcbiAgICBNRURJVU1QVVJQTEU6IDB4OTM3MGRiZmYsXHJcbiAgICBNRURJVU1TRUFHUkVFTjogMHgzY2IzNzFmZixcclxuICAgIE1FRElVTVNMQVRFQkxVRTogMHg3YjY4ZWVmZixcclxuICAgIE1FRElVTVNQUklOR0dSRUVOOiAweDAwZmE5YWZmLFxyXG4gICAgTUVESVVNVFVSUVVPSVNFOiAweDQ4ZDFjY2ZmLFxyXG4gICAgTUVESVVNVklPTEVUUkVEOiAweGM3MTU4NWZmLFxyXG4gICAgTUlETklHSFRCTFVFOiAweDE5MTk3MGZmLFxyXG4gICAgTUlOVENSRUFNOiAweGY1ZmZmYWZmLFxyXG4gICAgTUlTVFlST1NFOiAweGZmZTRlMWZmLFxyXG4gICAgTU9DQ0FTSU46IDB4ZmZlNGI1ZmYsXHJcbiAgICBOQVZBSk9XSElURTogMHhmZmRlYWRmZixcclxuICAgIE5BVlk6IDB4MDAwMDgwZmYsXHJcbiAgICBPTERMQUNFOiAweGZkZjVlNmZmLFxyXG4gICAgT0xJVkU6IDB4ODA4MDAwZmYsXHJcbiAgICBPTElWRURSQUI6IDB4NmI4ZTIzZmYsXHJcbiAgICBPUkFOR0U6IDB4ZmZhNTAwZmYsXHJcbiAgICBPUkFOR0VSRUQ6IDB4ZmY0NTAwZmYsXHJcbiAgICBPUkNISUQ6IDB4ZGE3MGQ2ZmYsXHJcbiAgICBQQUxFR09MREVOUk9EOiAweGVlZThhYWZmLFxyXG4gICAgUEFMRUdSRUVOOiAweDk4ZmI5OGZmLFxyXG4gICAgUEFMRVRVUlFVT0lTRTogMHhhZmVlZWVmZixcclxuICAgIFBBTEVWSU9MRVRSRUQ6IDB4ZGI3MDkzZmYsXHJcbiAgICBQQVBBWUFXSElQOiAweGZmZWZkNWZmLFxyXG4gICAgUEVBQ0hQVUZGOiAweGZmZGFiOWZmLFxyXG4gICAgUEVSVTogMHhjZDg1M2ZmZixcclxuICAgIFBJTks6IDB4ZmZjMGNiZmYsXHJcbiAgICBQTFVNOiAweGRkYTBkZGZmLFxyXG4gICAgUE9XREVSQkxVRTogMHhiMGUwZTZmZixcclxuICAgIFBVUlBMRTogMHg4MDAwODBmZixcclxuICAgIFJFQkVDQ0FQVVJQTEU6IDB4NjYzMzk5ZmYsXHJcbiAgICBSRUQ6IDB4ZmYwMDAwZmYsXHJcbiAgICBST1NZQlJPV046IDB4YmM4ZjhmZmYsXHJcbiAgICBST1lBTEJMVUU6IDB4NDE2OWUxZmYsXHJcbiAgICBTQURETEVCUk9XTjogMHg4YjQ1MTNmZixcclxuICAgIFNBTE1PTjogMHhmYTgwNzJmZixcclxuICAgIFNBTkRZQlJPV046IDB4ZjRhNDYwZmYsXHJcbiAgICBTRUFHUkVFTjogMHgyZThiNTdmZixcclxuICAgIFNFQVNIRUxMOiAweGZmZjVlZWZmLFxyXG4gICAgU0lFTk5BOiAweGEwNTIyZGZmLFxyXG4gICAgU0lMVkVSOiAweGMwYzBjMGZmLFxyXG4gICAgU0tZQkxVRTogMHg4N2NlZWJmZixcclxuICAgIFNMQVRFQkxVRTogMHg2YTVhY2RmZixcclxuICAgIFNMQVRFR1JBWTogMHg3MDgwOTBmZixcclxuICAgIFNMQVRFR1JFWTogMHg3MDgwOTBmZixcclxuICAgIFNOT1c6IDB4ZmZmYWZhZmYsXHJcbiAgICBTUFJJTkdHUkVFTjogMHgwMGZmN2ZmZixcclxuICAgIFNURUVMQkxVRTogMHg0NjgyYjRmZixcclxuICAgIFRBTjogMHhkMmI0OGNmZixcclxuICAgIFRFQUw6IDB4MDA4MDgwZmYsXHJcbiAgICBUSElTVExFOiAweGQ4YmZkOGZmLFxyXG4gICAgVE9NQVRPOiAweGZmNjM0N2ZmLFxyXG4gICAgVFJBTlNQQVJFTlQ6IDB4MDAwMDAwMDAsXHJcbiAgICBUVVJRVU9JU0U6IDB4NDBlMGQwZmYsXHJcbiAgICBWSU9MRVQ6IDB4ZWU4MmVlZmYsXHJcbiAgICBXSEVBVDogMHhmNWRlYjNmZixcclxuICAgIFdISVRFOiAweGZmZmZmZmZmLFxyXG4gICAgV0hJVEVTTU9LRTogMHhmNWY1ZjVmZixcclxuICAgIFlFTExPVzogMHhmZmZmMDBmZixcclxuICAgIFlFTExPV0dSRUVOOiAweDlhY2QzMmZmXHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5TGlzdERlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDU1NWYWx1ZSwgaXNJZGVudFRva2VufSBmcm9tICcuLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgY29uc3QgZW51bSBCQUNLR1JPVU5EX0NMSVAge1xyXG4gICAgQk9SREVSX0JPWCA9IDAsXHJcbiAgICBQQURESU5HX0JPWCA9IDEsXHJcbiAgICBDT05URU5UX0JPWCA9IDJcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQmFja2dyb3VuZENsaXAgPSBCQUNLR1JPVU5EX0NMSVBbXTtcclxuXHJcbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kQ2xpcDogSVByb3BlcnR5TGlzdERlc2NyaXB0b3I8QmFja2dyb3VuZENsaXA+ID0ge1xyXG4gICAgbmFtZTogJ2JhY2tncm91bmQtY2xpcCcsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdib3JkZXItYm94JyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5MSVNULFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgdG9rZW5zOiBDU1NWYWx1ZVtdKTogQmFja2dyb3VuZENsaXAgPT4ge1xyXG4gICAgICAgIHJldHVybiB0b2tlbnMubWFwKCh0b2tlbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNJZGVudFRva2VuKHRva2VuKSkge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BhZGRpbmctYm94JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJBQ0tHUk9VTkRfQ0xJUC5QQURESU5HX0JPWDtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdjb250ZW50LWJveCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCQUNLR1JPVU5EX0NMSVAuQ09OVEVOVF9CT1g7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIEJBQ0tHUk9VTkRfQ0xJUC5CT1JERVJfQk9YO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eVR5cGVWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuXHJcbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kQ29sb3I6IElQcm9wZXJ0eVR5cGVWYWx1ZURlc2NyaXB0b3IgPSB7XHJcbiAgICBuYW1lOiBgYmFja2dyb3VuZC1jb2xvcmAsXHJcbiAgICBpbml0aWFsVmFsdWU6ICd0cmFuc3BhcmVudCcsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuVFlQRV9WQUxVRSxcclxuICAgIGZvcm1hdDogJ2NvbG9yJ1xyXG59O1xyXG4iLCJpbXBvcnQge0NTU1ZhbHVlfSBmcm9tICcuLi8uLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtcclxuICAgIENTU1JhZGlhbEV4dGVudCxcclxuICAgIENTU1JhZGlhbEdyYWRpZW50SW1hZ2UsXHJcbiAgICBDU1NSYWRpYWxTaGFwZSxcclxuICAgIEdyYWRpZW50Q29sb3JTdG9wLFxyXG4gICAgR3JhZGllbnRDb3JuZXIsXHJcbiAgICBVbnByb2Nlc3NlZEdyYWRpZW50Q29sb3JTdG9wXHJcbn0gZnJvbSAnLi4vaW1hZ2UnO1xyXG5pbXBvcnQge2NvbG9yIGFzIGNvbG9yVHlwZX0gZnJvbSAnLi4vY29sb3InO1xyXG5pbXBvcnQge2dldEFic29sdXRlVmFsdWUsIEhVTkRSRURfUEVSQ0VOVCwgaXNMZW5ndGhQZXJjZW50YWdlLCBaRVJPX0xFTkdUSH0gZnJvbSAnLi4vbGVuZ3RoLXBlcmNlbnRhZ2UnO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29udGV4dCc7XHJcblxyXG5leHBvcnQgY29uc3QgcGFyc2VDb2xvclN0b3AgPSAoY29udGV4dDogQ29udGV4dCwgYXJnczogQ1NTVmFsdWVbXSk6IFVucHJvY2Vzc2VkR3JhZGllbnRDb2xvclN0b3AgPT4ge1xyXG4gICAgY29uc3QgY29sb3IgPSBjb2xvclR5cGUucGFyc2UoY29udGV4dCwgYXJnc1swXSk7XHJcbiAgICBjb25zdCBzdG9wID0gYXJnc1sxXTtcclxuICAgIHJldHVybiBzdG9wICYmIGlzTGVuZ3RoUGVyY2VudGFnZShzdG9wKSA/IHtjb2xvciwgc3RvcH0gOiB7Y29sb3IsIHN0b3A6IG51bGx9O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHByb2Nlc3NDb2xvclN0b3BzID0gKHN0b3BzOiBVbnByb2Nlc3NlZEdyYWRpZW50Q29sb3JTdG9wW10sIGxpbmVMZW5ndGg6IG51bWJlcik6IEdyYWRpZW50Q29sb3JTdG9wW10gPT4ge1xyXG4gICAgY29uc3QgZmlyc3QgPSBzdG9wc1swXTtcclxuICAgIGNvbnN0IGxhc3QgPSBzdG9wc1tzdG9wcy5sZW5ndGggLSAxXTtcclxuICAgIGlmIChmaXJzdC5zdG9wID09PSBudWxsKSB7XHJcbiAgICAgICAgZmlyc3Quc3RvcCA9IFpFUk9fTEVOR1RIO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsYXN0LnN0b3AgPT09IG51bGwpIHtcclxuICAgICAgICBsYXN0LnN0b3AgPSBIVU5EUkVEX1BFUkNFTlQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJvY2Vzc1N0b3BzOiAobnVtYmVyIHwgbnVsbClbXSA9IFtdO1xyXG4gICAgbGV0IHByZXZpb3VzID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBzdG9wID0gc3RvcHNbaV0uc3RvcDtcclxuICAgICAgICBpZiAoc3RvcCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZVZhbHVlID0gZ2V0QWJzb2x1dGVWYWx1ZShzdG9wLCBsaW5lTGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKGFic29sdXRlVmFsdWUgPiBwcmV2aW91cykge1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1N0b3BzLnB1c2goYWJzb2x1dGVWYWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzU3RvcHMucHVzaChwcmV2aW91cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldmlvdXMgPSBhYnNvbHV0ZVZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHByb2Nlc3NTdG9wcy5wdXNoKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgZ2FwQmVnaW4gPSBudWxsO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9jZXNzU3RvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBzdG9wID0gcHJvY2Vzc1N0b3BzW2ldO1xyXG4gICAgICAgIGlmIChzdG9wID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChnYXBCZWdpbiA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgZ2FwQmVnaW4gPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChnYXBCZWdpbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBnYXBMZW5ndGggPSBpIC0gZ2FwQmVnaW47XHJcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZUdhcCA9IHByb2Nlc3NTdG9wc1tnYXBCZWdpbiAtIDFdIGFzIG51bWJlcjtcclxuICAgICAgICAgICAgY29uc3QgZ2FwVmFsdWUgPSAoc3RvcCAtIGJlZm9yZUdhcCkgLyAoZ2FwTGVuZ3RoICsgMSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGcgPSAxOyBnIDw9IGdhcExlbmd0aDsgZysrKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzU3RvcHNbZ2FwQmVnaW4gKyBnIC0gMV0gPSBnYXBWYWx1ZSAqIGc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2FwQmVnaW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RvcHMubWFwKCh7Y29sb3J9LCBpKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtjb2xvciwgc3RvcDogTWF0aC5tYXgoTWF0aC5taW4oMSwgKHByb2Nlc3NTdG9wc1tpXSBhcyBudW1iZXIpIC8gbGluZUxlbmd0aCksIDApfTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0QW5nbGVGcm9tQ29ybmVyID0gKGNvcm5lcjogR3JhZGllbnRDb3JuZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuICAgIGNvbnN0IGNlbnRlclggPSB3aWR0aCAvIDI7XHJcbiAgICBjb25zdCBjZW50ZXJZID0gaGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IHggPSBnZXRBYnNvbHV0ZVZhbHVlKGNvcm5lclswXSwgd2lkdGgpIC0gY2VudGVyWDtcclxuICAgIGNvbnN0IHkgPSBjZW50ZXJZIC0gZ2V0QWJzb2x1dGVWYWx1ZShjb3JuZXJbMV0sIGhlaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIChNYXRoLmF0YW4yKHksIHgpICsgTWF0aC5QSSAqIDIpICUgKE1hdGguUEkgKiAyKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVHcmFkaWVudERpcmVjdGlvbiA9IChcclxuICAgIGFuZ2xlOiBudW1iZXIgfCBHcmFkaWVudENvcm5lcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlclxyXG4pOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcclxuICAgIGNvbnN0IHJhZGlhbiA9IHR5cGVvZiBhbmdsZSA9PT0gJ251bWJlcicgPyBhbmdsZSA6IGdldEFuZ2xlRnJvbUNvcm5lcihhbmdsZSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgY29uc3QgbGluZUxlbmd0aCA9IE1hdGguYWJzKHdpZHRoICogTWF0aC5zaW4ocmFkaWFuKSkgKyBNYXRoLmFicyhoZWlnaHQgKiBNYXRoLmNvcyhyYWRpYW4pKTtcclxuXHJcbiAgICBjb25zdCBoYWxmV2lkdGggPSB3aWR0aCAvIDI7XHJcbiAgICBjb25zdCBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IGhhbGZMaW5lTGVuZ3RoID0gbGluZUxlbmd0aCAvIDI7XHJcblxyXG4gICAgY29uc3QgeURpZmYgPSBNYXRoLnNpbihyYWRpYW4gLSBNYXRoLlBJIC8gMikgKiBoYWxmTGluZUxlbmd0aDtcclxuICAgIGNvbnN0IHhEaWZmID0gTWF0aC5jb3MocmFkaWFuIC0gTWF0aC5QSSAvIDIpICogaGFsZkxpbmVMZW5ndGg7XHJcblxyXG4gICAgcmV0dXJuIFtsaW5lTGVuZ3RoLCBoYWxmV2lkdGggLSB4RGlmZiwgaGFsZldpZHRoICsgeERpZmYsIGhhbGZIZWlnaHQgLSB5RGlmZiwgaGFsZkhlaWdodCArIHlEaWZmXTtcclxufTtcclxuXHJcbmNvbnN0IGRpc3RhbmNlID0gKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyID0+IE1hdGguc3FydChhICogYSArIGIgKiBiKTtcclxuXHJcbmNvbnN0IGZpbmRDb3JuZXIgPSAod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyLCBjbG9zZXN0OiBib29sZWFuKTogW251bWJlciwgbnVtYmVyXSA9PiB7XHJcbiAgICBjb25zdCBjb3JuZXJzID0gW1xyXG4gICAgICAgIFswLCAwXSxcclxuICAgICAgICBbMCwgaGVpZ2h0XSxcclxuICAgICAgICBbd2lkdGgsIDBdLFxyXG4gICAgICAgIFt3aWR0aCwgaGVpZ2h0XVxyXG4gICAgXTtcclxuXHJcbiAgICByZXR1cm4gY29ybmVycy5yZWR1Y2UoXHJcbiAgICAgICAgKHN0YXQsIGNvcm5lcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBbY3gsIGN5XSA9IGNvcm5lcjtcclxuICAgICAgICAgICAgY29uc3QgZCA9IGRpc3RhbmNlKHggLSBjeCwgeSAtIGN5KTtcclxuICAgICAgICAgICAgaWYgKGNsb3Nlc3QgPyBkIDwgc3RhdC5vcHRpbXVtRGlzdGFuY2UgOiBkID4gc3RhdC5vcHRpbXVtRGlzdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW11bUNvcm5lcjogY29ybmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGltdW1EaXN0YW5jZTogZFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHN0YXQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG9wdGltdW1EaXN0YW5jZTogY2xvc2VzdCA/IEluZmluaXR5IDogLUluZmluaXR5LFxyXG4gICAgICAgICAgICBvcHRpbXVtQ29ybmVyOiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgKS5vcHRpbXVtQ29ybmVyIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlUmFkaXVzID0gKFxyXG4gICAgZ3JhZGllbnQ6IENTU1JhZGlhbEdyYWRpZW50SW1hZ2UsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXJcclxuKTogW251bWJlciwgbnVtYmVyXSA9PiB7XHJcbiAgICBsZXQgcnggPSAwO1xyXG4gICAgbGV0IHJ5ID0gMDtcclxuXHJcbiAgICBzd2l0Y2ggKGdyYWRpZW50LnNpemUpIHtcclxuICAgICAgICBjYXNlIENTU1JhZGlhbEV4dGVudC5DTE9TRVNUX1NJREU6XHJcbiAgICAgICAgICAgIC8vIFRoZSBlbmRpbmcgc2hhcGUgaXMgc2l6ZWQgc28gdGhhdCB0aGF0IGl0IGV4YWN0bHkgbWVldHMgdGhlIHNpZGUgb2YgdGhlIGdyYWRpZW50IGJveCBjbG9zZXN0IHRvIHRoZSBncmFkaWVudOKAmXMgY2VudGVyLlxyXG4gICAgICAgICAgICAvLyBJZiB0aGUgc2hhcGUgaXMgYW4gZWxsaXBzZSwgaXQgZXhhY3RseSBtZWV0cyB0aGUgY2xvc2VzdCBzaWRlIGluIGVhY2ggZGltZW5zaW9uLlxyXG4gICAgICAgICAgICBpZiAoZ3JhZGllbnQuc2hhcGUgPT09IENTU1JhZGlhbFNoYXBlLkNJUkNMRSkge1xyXG4gICAgICAgICAgICAgICAgcnggPSByeSA9IE1hdGgubWluKE1hdGguYWJzKHgpLCBNYXRoLmFicyh4IC0gd2lkdGgpLCBNYXRoLmFicyh5KSwgTWF0aC5hYnMoeSAtIGhlaWdodCkpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdyYWRpZW50LnNoYXBlID09PSBDU1NSYWRpYWxTaGFwZS5FTExJUFNFKSB7XHJcbiAgICAgICAgICAgICAgICByeCA9IE1hdGgubWluKE1hdGguYWJzKHgpLCBNYXRoLmFicyh4IC0gd2lkdGgpKTtcclxuICAgICAgICAgICAgICAgIHJ5ID0gTWF0aC5taW4oTWF0aC5hYnMoeSksIE1hdGguYWJzKHkgLSBoZWlnaHQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDU1NSYWRpYWxFeHRlbnQuQ0xPU0VTVF9DT1JORVI6XHJcbiAgICAgICAgICAgIC8vIFRoZSBlbmRpbmcgc2hhcGUgaXMgc2l6ZWQgc28gdGhhdCB0aGF0IGl0IHBhc3NlcyB0aHJvdWdoIHRoZSBjb3JuZXIgb2YgdGhlIGdyYWRpZW50IGJveCBjbG9zZXN0IHRvIHRoZSBncmFkaWVudOKAmXMgY2VudGVyLlxyXG4gICAgICAgICAgICAvLyBJZiB0aGUgc2hhcGUgaXMgYW4gZWxsaXBzZSwgdGhlIGVuZGluZyBzaGFwZSBpcyBnaXZlbiB0aGUgc2FtZSBhc3BlY3QtcmF0aW8gaXQgd291bGQgaGF2ZSBpZiBjbG9zZXN0LXNpZGUgd2VyZSBzcGVjaWZpZWQuXHJcbiAgICAgICAgICAgIGlmIChncmFkaWVudC5zaGFwZSA9PT0gQ1NTUmFkaWFsU2hhcGUuQ0lSQ0xFKSB7XHJcbiAgICAgICAgICAgICAgICByeCA9IHJ5ID0gTWF0aC5taW4oXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UoeCwgeSksXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UoeCwgeSAtIGhlaWdodCksXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UoeCAtIHdpZHRoLCB5KSxcclxuICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSh4IC0gd2lkdGgsIHkgLSBoZWlnaHQpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdyYWRpZW50LnNoYXBlID09PSBDU1NSYWRpYWxTaGFwZS5FTExJUFNFKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSByYXRpbyByeS9yeCAod2hpY2ggaXMgdG8gYmUgdGhlIHNhbWUgYXMgZm9yIFwiY2xvc2VzdC1zaWRlXCIpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gTWF0aC5taW4oTWF0aC5hYnMoeSksIE1hdGguYWJzKHkgLSBoZWlnaHQpKSAvIE1hdGgubWluKE1hdGguYWJzKHgpLCBNYXRoLmFicyh4IC0gd2lkdGgpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtjeCwgY3ldID0gZmluZENvcm5lcih3aWR0aCwgaGVpZ2h0LCB4LCB5LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJ4ID0gZGlzdGFuY2UoY3ggLSB4LCAoY3kgLSB5KSAvIGMpO1xyXG4gICAgICAgICAgICAgICAgcnkgPSBjICogcng7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ1NTUmFkaWFsRXh0ZW50LkZBUlRIRVNUX1NJREU6XHJcbiAgICAgICAgICAgIC8vIFNhbWUgYXMgY2xvc2VzdC1zaWRlLCBleGNlcHQgdGhlIGVuZGluZyBzaGFwZSBpcyBzaXplZCBiYXNlZCBvbiB0aGUgZmFydGhlc3Qgc2lkZShzKVxyXG4gICAgICAgICAgICBpZiAoZ3JhZGllbnQuc2hhcGUgPT09IENTU1JhZGlhbFNoYXBlLkNJUkNMRSkge1xyXG4gICAgICAgICAgICAgICAgcnggPSByeSA9IE1hdGgubWF4KE1hdGguYWJzKHgpLCBNYXRoLmFicyh4IC0gd2lkdGgpLCBNYXRoLmFicyh5KSwgTWF0aC5hYnMoeSAtIGhlaWdodCkpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdyYWRpZW50LnNoYXBlID09PSBDU1NSYWRpYWxTaGFwZS5FTExJUFNFKSB7XHJcbiAgICAgICAgICAgICAgICByeCA9IE1hdGgubWF4KE1hdGguYWJzKHgpLCBNYXRoLmFicyh4IC0gd2lkdGgpKTtcclxuICAgICAgICAgICAgICAgIHJ5ID0gTWF0aC5tYXgoTWF0aC5hYnMoeSksIE1hdGguYWJzKHkgLSBoZWlnaHQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDU1NSYWRpYWxFeHRlbnQuRkFSVEhFU1RfQ09STkVSOlxyXG4gICAgICAgICAgICAvLyBTYW1lIGFzIGNsb3Nlc3QtY29ybmVyLCBleGNlcHQgdGhlIGVuZGluZyBzaGFwZSBpcyBzaXplZCBiYXNlZCBvbiB0aGUgZmFydGhlc3QgY29ybmVyLlxyXG4gICAgICAgICAgICAvLyBJZiB0aGUgc2hhcGUgaXMgYW4gZWxsaXBzZSwgdGhlIGVuZGluZyBzaGFwZSBpcyBnaXZlbiB0aGUgc2FtZSBhc3BlY3QgcmF0aW8gaXQgd291bGQgaGF2ZSBpZiBmYXJ0aGVzdC1zaWRlIHdlcmUgc3BlY2lmaWVkLlxyXG4gICAgICAgICAgICBpZiAoZ3JhZGllbnQuc2hhcGUgPT09IENTU1JhZGlhbFNoYXBlLkNJUkNMRSkge1xyXG4gICAgICAgICAgICAgICAgcnggPSByeSA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlKHgsIHkpLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlKHgsIHkgLSBoZWlnaHQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlKHggLSB3aWR0aCwgeSksXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UoeCAtIHdpZHRoLCB5IC0gaGVpZ2h0KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChncmFkaWVudC5zaGFwZSA9PT0gQ1NTUmFkaWFsU2hhcGUuRUxMSVBTRSkge1xyXG4gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcmF0aW8gcnkvcnggKHdoaWNoIGlzIHRvIGJlIHRoZSBzYW1lIGFzIGZvciBcImZhcnRoZXN0LXNpZGVcIilcclxuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBNYXRoLm1heChNYXRoLmFicyh5KSwgTWF0aC5hYnMoeSAtIGhlaWdodCkpIC8gTWF0aC5tYXgoTWF0aC5hYnMoeCksIE1hdGguYWJzKHggLSB3aWR0aCkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2N4LCBjeV0gPSBmaW5kQ29ybmVyKHdpZHRoLCBoZWlnaHQsIHgsIHksIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHJ4ID0gZGlzdGFuY2UoY3ggLSB4LCAoY3kgLSB5KSAvIGMpO1xyXG4gICAgICAgICAgICAgICAgcnkgPSBjICogcng7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZ3JhZGllbnQuc2l6ZSkpIHtcclxuICAgICAgICByeCA9IGdldEFic29sdXRlVmFsdWUoZ3JhZGllbnQuc2l6ZVswXSwgd2lkdGgpO1xyXG4gICAgICAgIHJ5ID0gZ3JhZGllbnQuc2l6ZS5sZW5ndGggPT09IDIgPyBnZXRBYnNvbHV0ZVZhbHVlKGdyYWRpZW50LnNpemVbMV0sIGhlaWdodCkgOiByeDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW3J4LCByeV07XHJcbn07XHJcbiIsImltcG9ydCB7Q1NTVmFsdWUsIHBhcnNlRnVuY3Rpb25BcmdzfSBmcm9tICcuLi8uLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtUb2tlblR5cGV9IGZyb20gJy4uLy4uL3N5bnRheC90b2tlbml6ZXInO1xyXG5pbXBvcnQge2lzQW5nbGUsIGFuZ2xlIGFzIGFuZ2xlVHlwZSwgcGFyc2VOYW1lZFNpZGUsIGRlZ30gZnJvbSAnLi4vYW5nbGUnO1xyXG5pbXBvcnQge0NTU0ltYWdlVHlwZSwgQ1NTTGluZWFyR3JhZGllbnRJbWFnZSwgR3JhZGllbnRDb3JuZXIsIFVucHJvY2Vzc2VkR3JhZGllbnRDb2xvclN0b3B9IGZyb20gJy4uL2ltYWdlJztcclxuaW1wb3J0IHtwYXJzZUNvbG9yU3RvcH0gZnJvbSAnLi9ncmFkaWVudCc7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBjb25zdCBsaW5lYXJHcmFkaWVudCA9IChjb250ZXh0OiBDb250ZXh0LCB0b2tlbnM6IENTU1ZhbHVlW10pOiBDU1NMaW5lYXJHcmFkaWVudEltYWdlID0+IHtcclxuICAgIGxldCBhbmdsZTogbnVtYmVyIHwgR3JhZGllbnRDb3JuZXIgPSBkZWcoMTgwKTtcclxuICAgIGNvbnN0IHN0b3BzOiBVbnByb2Nlc3NlZEdyYWRpZW50Q29sb3JTdG9wW10gPSBbXTtcclxuXHJcbiAgICBwYXJzZUZ1bmN0aW9uQXJncyh0b2tlbnMpLmZvckVhY2goKGFyZywgaSkgPT4ge1xyXG4gICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0VG9rZW4gPSBhcmdbMF07XHJcbiAgICAgICAgICAgIGlmIChmaXJzdFRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5JREVOVF9UT0tFTiAmJiBmaXJzdFRva2VuLnZhbHVlID09PSAndG8nKSB7XHJcbiAgICAgICAgICAgICAgICBhbmdsZSA9IHBhcnNlTmFtZWRTaWRlKGFyZyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBbmdsZShmaXJzdFRva2VuKSkge1xyXG4gICAgICAgICAgICAgICAgYW5nbGUgPSBhbmdsZVR5cGUucGFyc2UoY29udGV4dCwgZmlyc3RUb2tlbik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sb3JTdG9wID0gcGFyc2VDb2xvclN0b3AoY29udGV4dCwgYXJnKTtcclxuICAgICAgICBzdG9wcy5wdXNoKGNvbG9yU3RvcCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ge2FuZ2xlLCBzdG9wcywgdHlwZTogQ1NTSW1hZ2VUeXBlLkxJTkVBUl9HUkFESUVOVH07XHJcbn07XHJcbiIsImltcG9ydCB7Q1NTVmFsdWUsIHBhcnNlRnVuY3Rpb25BcmdzfSBmcm9tICcuLi8uLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtDU1NJbWFnZVR5cGUsIENTU0xpbmVhckdyYWRpZW50SW1hZ2UsIEdyYWRpZW50Q29ybmVyLCBVbnByb2Nlc3NlZEdyYWRpZW50Q29sb3JTdG9wfSBmcm9tICcuLi9pbWFnZSc7XHJcbmltcG9ydCB7VG9rZW5UeXBlfSBmcm9tICcuLi8uLi9zeW50YXgvdG9rZW5pemVyJztcclxuaW1wb3J0IHtpc0FuZ2xlLCBhbmdsZSBhcyBhbmdsZVR5cGUsIHBhcnNlTmFtZWRTaWRlLCBkZWd9IGZyb20gJy4uL2FuZ2xlJztcclxuaW1wb3J0IHtwYXJzZUNvbG9yU3RvcH0gZnJvbSAnLi9ncmFkaWVudCc7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBjb25zdCBwcmVmaXhMaW5lYXJHcmFkaWVudCA9IChjb250ZXh0OiBDb250ZXh0LCB0b2tlbnM6IENTU1ZhbHVlW10pOiBDU1NMaW5lYXJHcmFkaWVudEltYWdlID0+IHtcclxuICAgIGxldCBhbmdsZTogbnVtYmVyIHwgR3JhZGllbnRDb3JuZXIgPSBkZWcoMTgwKTtcclxuICAgIGNvbnN0IHN0b3BzOiBVbnByb2Nlc3NlZEdyYWRpZW50Q29sb3JTdG9wW10gPSBbXTtcclxuXHJcbiAgICBwYXJzZUZ1bmN0aW9uQXJncyh0b2tlbnMpLmZvckVhY2goKGFyZywgaSkgPT4ge1xyXG4gICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0VG9rZW4gPSBhcmdbMF07XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGZpcnN0VG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLklERU5UX1RPS0VOICYmXHJcbiAgICAgICAgICAgICAgICBbJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0JywgJ2JvdHRvbSddLmluZGV4T2YoZmlyc3RUb2tlbi52YWx1ZSkgIT09IC0xXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgYW5nbGUgPSBwYXJzZU5hbWVkU2lkZShhcmcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQW5nbGUoZmlyc3RUb2tlbikpIHtcclxuICAgICAgICAgICAgICAgIGFuZ2xlID0gKGFuZ2xlVHlwZS5wYXJzZShjb250ZXh0LCBmaXJzdFRva2VuKSArIGRlZygyNzApKSAlIGRlZygzNjApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbG9yU3RvcCA9IHBhcnNlQ29sb3JTdG9wKGNvbnRleHQsIGFyZyk7XHJcbiAgICAgICAgc3RvcHMucHVzaChjb2xvclN0b3ApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBhbmdsZSxcclxuICAgICAgICBzdG9wcyxcclxuICAgICAgICB0eXBlOiBDU1NJbWFnZVR5cGUuTElORUFSX0dSQURJRU5UXHJcbiAgICB9O1xyXG59O1xyXG4iLCJpbXBvcnQge0NTU1ZhbHVlLCBpc0lkZW50VG9rZW4sIGlzTnVtYmVyVG9rZW4sIG5vbkZ1bmN0aW9uQXJnU2VwYXJhdG9yLCBwYXJzZUZ1bmN0aW9uQXJnc30gZnJvbSAnLi4vLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7XHJcbiAgICBDU1NJbWFnZVR5cGUsXHJcbiAgICBDU1NMaW5lYXJHcmFkaWVudEltYWdlLFxyXG4gICAgQ1NTUmFkaWFsRXh0ZW50LFxyXG4gICAgQ1NTUmFkaWFsR3JhZGllbnRJbWFnZSxcclxuICAgIENTU1JhZGlhbFNoYXBlLFxyXG4gICAgQ1NTUmFkaWFsU2l6ZSxcclxuICAgIFVucHJvY2Vzc2VkR3JhZGllbnRDb2xvclN0b3BcclxufSBmcm9tICcuLi9pbWFnZSc7XHJcbmltcG9ydCB7ZGVnfSBmcm9tICcuLi9hbmdsZSc7XHJcbmltcG9ydCB7VG9rZW5UeXBlfSBmcm9tICcuLi8uLi9zeW50YXgvdG9rZW5pemVyJztcclxuaW1wb3J0IHtjb2xvciBhcyBjb2xvclR5cGV9IGZyb20gJy4uL2NvbG9yJztcclxuaW1wb3J0IHtIVU5EUkVEX1BFUkNFTlQsIExlbmd0aFBlcmNlbnRhZ2UsIFpFUk9fTEVOR1RIfSBmcm9tICcuLi9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBjb25zdCB3ZWJraXRHcmFkaWVudCA9IChcclxuICAgIGNvbnRleHQ6IENvbnRleHQsXHJcbiAgICB0b2tlbnM6IENTU1ZhbHVlW11cclxuKTogQ1NTTGluZWFyR3JhZGllbnRJbWFnZSB8IENTU1JhZGlhbEdyYWRpZW50SW1hZ2UgPT4ge1xyXG4gICAgY29uc3QgYW5nbGUgPSBkZWcoMTgwKTtcclxuICAgIGNvbnN0IHN0b3BzOiBVbnByb2Nlc3NlZEdyYWRpZW50Q29sb3JTdG9wW10gPSBbXTtcclxuICAgIGxldCB0eXBlID0gQ1NTSW1hZ2VUeXBlLkxJTkVBUl9HUkFESUVOVDtcclxuICAgIGNvbnN0IHNoYXBlOiBDU1NSYWRpYWxTaGFwZSA9IENTU1JhZGlhbFNoYXBlLkNJUkNMRTtcclxuICAgIGNvbnN0IHNpemU6IENTU1JhZGlhbFNpemUgPSBDU1NSYWRpYWxFeHRlbnQuRkFSVEhFU1RfQ09STkVSO1xyXG4gICAgY29uc3QgcG9zaXRpb246IExlbmd0aFBlcmNlbnRhZ2VbXSA9IFtdO1xyXG4gICAgcGFyc2VGdW5jdGlvbkFyZ3ModG9rZW5zKS5mb3JFYWNoKChhcmcsIGkpID0+IHtcclxuICAgICAgICBjb25zdCBmaXJzdFRva2VuID0gYXJnWzBdO1xyXG4gICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0lkZW50VG9rZW4oZmlyc3RUb2tlbikgJiYgZmlyc3RUb2tlbi52YWx1ZSA9PT0gJ2xpbmVhcicpIHtcclxuICAgICAgICAgICAgICAgIHR5cGUgPSBDU1NJbWFnZVR5cGUuTElORUFSX0dSQURJRU5UO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSWRlbnRUb2tlbihmaXJzdFRva2VuKSAmJiBmaXJzdFRva2VuLnZhbHVlID09PSAncmFkaWFsJykge1xyXG4gICAgICAgICAgICAgICAgdHlwZSA9IENTU0ltYWdlVHlwZS5SQURJQUxfR1JBRElFTlQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaXJzdFRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5GVU5DVElPTikge1xyXG4gICAgICAgICAgICBpZiAoZmlyc3RUb2tlbi5uYW1lID09PSAnZnJvbScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JUeXBlLnBhcnNlKGNvbnRleHQsIGZpcnN0VG9rZW4udmFsdWVzWzBdKTtcclxuICAgICAgICAgICAgICAgIHN0b3BzLnB1c2goe3N0b3A6IFpFUk9fTEVOR1RILCBjb2xvcn0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0VG9rZW4ubmFtZSA9PT0gJ3RvJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSBjb2xvclR5cGUucGFyc2UoY29udGV4dCwgZmlyc3RUb2tlbi52YWx1ZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgc3RvcHMucHVzaCh7c3RvcDogSFVORFJFRF9QRVJDRU5ULCBjb2xvcn0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0VG9rZW4ubmFtZSA9PT0gJ2NvbG9yLXN0b3AnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBmaXJzdFRva2VuLnZhbHVlcy5maWx0ZXIobm9uRnVuY3Rpb25BcmdTZXBhcmF0b3IpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvciA9IGNvbG9yVHlwZS5wYXJzZShjb250ZXh0LCB2YWx1ZXNbMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3AgPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyVG9rZW4oc3RvcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wOiB7dHlwZTogVG9rZW5UeXBlLlBFUkNFTlRBR0VfVE9LRU4sIG51bWJlcjogc3RvcC5udW1iZXIgKiAxMDAsIGZsYWdzOiBzdG9wLmZsYWdzfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0eXBlID09PSBDU1NJbWFnZVR5cGUuTElORUFSX0dSQURJRU5UXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgYW5nbGU6IChhbmdsZSArIGRlZygxODApKSAlIGRlZygzNjApLFxyXG4gICAgICAgICAgICAgIHN0b3BzLFxyXG4gICAgICAgICAgICAgIHR5cGVcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IHtzaXplLCBzaGFwZSwgc3RvcHMsIHBvc2l0aW9uLCB0eXBlfTtcclxufTtcclxuIiwiaW1wb3J0IHtDU1NWYWx1ZSwgaXNJZGVudFRva2VuLCBwYXJzZUZ1bmN0aW9uQXJnc30gZnJvbSAnLi4vLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7XHJcbiAgICBDU1NJbWFnZVR5cGUsXHJcbiAgICBDU1NSYWRpYWxFeHRlbnQsXHJcbiAgICBDU1NSYWRpYWxHcmFkaWVudEltYWdlLFxyXG4gICAgQ1NTUmFkaWFsU2hhcGUsXHJcbiAgICBDU1NSYWRpYWxTaXplLFxyXG4gICAgVW5wcm9jZXNzZWRHcmFkaWVudENvbG9yU3RvcFxyXG59IGZyb20gJy4uL2ltYWdlJztcclxuaW1wb3J0IHtwYXJzZUNvbG9yU3RvcH0gZnJvbSAnLi9ncmFkaWVudCc7XHJcbmltcG9ydCB7RklGVFlfUEVSQ0VOVCwgSFVORFJFRF9QRVJDRU5ULCBpc0xlbmd0aFBlcmNlbnRhZ2UsIExlbmd0aFBlcmNlbnRhZ2UsIFpFUk9fTEVOR1RIfSBmcm9tICcuLi9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmltcG9ydCB7aXNMZW5ndGh9IGZyb20gJy4uL2xlbmd0aCc7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb250ZXh0JztcclxuZXhwb3J0IGNvbnN0IENMT1NFU1RfU0lERSA9ICdjbG9zZXN0LXNpZGUnO1xyXG5leHBvcnQgY29uc3QgRkFSVEhFU1RfU0lERSA9ICdmYXJ0aGVzdC1zaWRlJztcclxuZXhwb3J0IGNvbnN0IENMT1NFU1RfQ09STkVSID0gJ2Nsb3Nlc3QtY29ybmVyJztcclxuZXhwb3J0IGNvbnN0IEZBUlRIRVNUX0NPUk5FUiA9ICdmYXJ0aGVzdC1jb3JuZXInO1xyXG5leHBvcnQgY29uc3QgQ0lSQ0xFID0gJ2NpcmNsZSc7XHJcbmV4cG9ydCBjb25zdCBFTExJUFNFID0gJ2VsbGlwc2UnO1xyXG5leHBvcnQgY29uc3QgQ09WRVIgPSAnY292ZXInO1xyXG5leHBvcnQgY29uc3QgQ09OVEFJTiA9ICdjb250YWluJztcclxuXHJcbmV4cG9ydCBjb25zdCByYWRpYWxHcmFkaWVudCA9IChjb250ZXh0OiBDb250ZXh0LCB0b2tlbnM6IENTU1ZhbHVlW10pOiBDU1NSYWRpYWxHcmFkaWVudEltYWdlID0+IHtcclxuICAgIGxldCBzaGFwZTogQ1NTUmFkaWFsU2hhcGUgPSBDU1NSYWRpYWxTaGFwZS5DSVJDTEU7XHJcbiAgICBsZXQgc2l6ZTogQ1NTUmFkaWFsU2l6ZSA9IENTU1JhZGlhbEV4dGVudC5GQVJUSEVTVF9DT1JORVI7XHJcbiAgICBjb25zdCBzdG9wczogVW5wcm9jZXNzZWRHcmFkaWVudENvbG9yU3RvcFtdID0gW107XHJcbiAgICBjb25zdCBwb3NpdGlvbjogTGVuZ3RoUGVyY2VudGFnZVtdID0gW107XHJcbiAgICBwYXJzZUZ1bmN0aW9uQXJncyh0b2tlbnMpLmZvckVhY2goKGFyZywgaSkgPT4ge1xyXG4gICAgICAgIGxldCBpc0NvbG9yU3RvcCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGkgPT09IDApIHtcclxuICAgICAgICAgICAgbGV0IGlzQXRQb3NpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpc0NvbG9yU3RvcCA9IGFyZy5yZWR1Y2UoKGFjYywgdG9rZW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0F0UG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJZGVudFRva2VuKHRva2VuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjZW50ZXInOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnB1c2goRklGVFlfUEVSQ0VOVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsZWZ0JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi5wdXNoKFpFUk9fTEVOR1RIKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYm90dG9tJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi5wdXNoKEhVTkRSRURfUEVSQ0VOVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMZW5ndGhQZXJjZW50YWdlKHRva2VuKSB8fCBpc0xlbmd0aCh0b2tlbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ucHVzaCh0b2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0lkZW50VG9rZW4odG9rZW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENJUkNMRTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlID0gQ1NTUmFkaWFsU2hhcGUuQ0lSQ0xFO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVMTElQU0U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSA9IENTU1JhZGlhbFNoYXBlLkVMTElQU0U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2F0JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXRQb3NpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ0xPU0VTVF9TSURFOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IENTU1JhZGlhbEV4dGVudC5DTE9TRVNUX1NJREU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09WRVI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRkFSVEhFU1RfU0lERTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBDU1NSYWRpYWxFeHRlbnQuRkFSVEhFU1RfU0lERTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDT05UQUlOOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENMT1NFU1RfQ09STkVSOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IENTU1JhZGlhbEV4dGVudC5DTE9TRVNUX0NPUk5FUjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGQVJUSEVTVF9DT1JORVI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gQ1NTUmFkaWFsRXh0ZW50LkZBUlRIRVNUX0NPUk5FUjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGVuZ3RoKHRva2VuKSB8fCBpc0xlbmd0aFBlcmNlbnRhZ2UodG9rZW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNpemUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZS5wdXNoKHRva2VuKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgICB9LCBpc0NvbG9yU3RvcCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNDb2xvclN0b3ApIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3JTdG9wID0gcGFyc2VDb2xvclN0b3AoY29udGV4dCwgYXJnKTtcclxuICAgICAgICAgICAgc3RvcHMucHVzaChjb2xvclN0b3ApO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7c2l6ZSwgc2hhcGUsIHN0b3BzLCBwb3NpdGlvbiwgdHlwZTogQ1NTSW1hZ2VUeXBlLlJBRElBTF9HUkFESUVOVH07XHJcbn07XHJcbiIsImltcG9ydCB7Q1NTVmFsdWUsIGlzSWRlbnRUb2tlbiwgcGFyc2VGdW5jdGlvbkFyZ3N9IGZyb20gJy4uLy4uL3N5bnRheC9wYXJzZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQ1NTSW1hZ2VUeXBlLFxyXG4gICAgQ1NTUmFkaWFsRXh0ZW50LFxyXG4gICAgQ1NTUmFkaWFsR3JhZGllbnRJbWFnZSxcclxuICAgIENTU1JhZGlhbFNoYXBlLFxyXG4gICAgQ1NTUmFkaWFsU2l6ZSxcclxuICAgIFVucHJvY2Vzc2VkR3JhZGllbnRDb2xvclN0b3BcclxufSBmcm9tICcuLi9pbWFnZSc7XHJcbmltcG9ydCB7cGFyc2VDb2xvclN0b3B9IGZyb20gJy4vZ3JhZGllbnQnO1xyXG5pbXBvcnQge0ZJRlRZX1BFUkNFTlQsIEhVTkRSRURfUEVSQ0VOVCwgaXNMZW5ndGhQZXJjZW50YWdlLCBMZW5ndGhQZXJjZW50YWdlLCBaRVJPX0xFTkdUSH0gZnJvbSAnLi4vbGVuZ3RoLXBlcmNlbnRhZ2UnO1xyXG5pbXBvcnQge2lzTGVuZ3RofSBmcm9tICcuLi9sZW5ndGgnO1xyXG5pbXBvcnQge1xyXG4gICAgQ0lSQ0xFLFxyXG4gICAgQ0xPU0VTVF9DT1JORVIsXHJcbiAgICBDTE9TRVNUX1NJREUsXHJcbiAgICBDT05UQUlOLFxyXG4gICAgQ09WRVIsXHJcbiAgICBFTExJUFNFLFxyXG4gICAgRkFSVEhFU1RfQ09STkVSLFxyXG4gICAgRkFSVEhFU1RfU0lERVxyXG59IGZyb20gJy4vcmFkaWFsLWdyYWRpZW50JztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IHByZWZpeFJhZGlhbEdyYWRpZW50ID0gKGNvbnRleHQ6IENvbnRleHQsIHRva2VuczogQ1NTVmFsdWVbXSk6IENTU1JhZGlhbEdyYWRpZW50SW1hZ2UgPT4ge1xyXG4gICAgbGV0IHNoYXBlOiBDU1NSYWRpYWxTaGFwZSA9IENTU1JhZGlhbFNoYXBlLkNJUkNMRTtcclxuICAgIGxldCBzaXplOiBDU1NSYWRpYWxTaXplID0gQ1NTUmFkaWFsRXh0ZW50LkZBUlRIRVNUX0NPUk5FUjtcclxuICAgIGNvbnN0IHN0b3BzOiBVbnByb2Nlc3NlZEdyYWRpZW50Q29sb3JTdG9wW10gPSBbXTtcclxuICAgIGNvbnN0IHBvc2l0aW9uOiBMZW5ndGhQZXJjZW50YWdlW10gPSBbXTtcclxuXHJcbiAgICBwYXJzZUZ1bmN0aW9uQXJncyh0b2tlbnMpLmZvckVhY2goKGFyZywgaSkgPT4ge1xyXG4gICAgICAgIGxldCBpc0NvbG9yU3RvcCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGkgPT09IDApIHtcclxuICAgICAgICAgICAgaXNDb2xvclN0b3AgPSBhcmcucmVkdWNlKChhY2MsIHRva2VuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNJZGVudFRva2VuKHRva2VuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY2VudGVyJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnB1c2goRklGVFlfUEVSQ0VOVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ucHVzaChaRVJPX0xFTkdUSCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYm90dG9tJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnB1c2goSFVORFJFRF9QRVJDRU5UKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGVuZ3RoUGVyY2VudGFnZSh0b2tlbikgfHwgaXNMZW5ndGgodG9rZW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ucHVzaCh0b2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICAgIH0sIGlzQ29sb3JTdG9wKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDEpIHtcclxuICAgICAgICAgICAgaXNDb2xvclN0b3AgPSBhcmcucmVkdWNlKChhY2MsIHRva2VuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNJZGVudFRva2VuKHRva2VuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDSVJDTEU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSA9IENTU1JhZGlhbFNoYXBlLkNJUkNMRTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFTExJUFNFOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUgPSBDU1NSYWRpYWxTaGFwZS5FTExJUFNFO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENPTlRBSU46XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ0xPU0VTVF9TSURFOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IENTU1JhZGlhbEV4dGVudC5DTE9TRVNUX1NJREU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRkFSVEhFU1RfU0lERTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBDU1NSYWRpYWxFeHRlbnQuRkFSVEhFU1RfU0lERTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDTE9TRVNUX0NPUk5FUjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBDU1NSYWRpYWxFeHRlbnQuQ0xPU0VTVF9DT1JORVI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09WRVI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRkFSVEhFU1RfQ09STkVSOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IENTU1JhZGlhbEV4dGVudC5GQVJUSEVTVF9DT1JORVI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xlbmd0aCh0b2tlbikgfHwgaXNMZW5ndGhQZXJjZW50YWdlKHRva2VuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzaXplKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNpemUucHVzaCh0b2tlbik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICAgIH0sIGlzQ29sb3JTdG9wKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0NvbG9yU3RvcCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvclN0b3AgPSBwYXJzZUNvbG9yU3RvcChjb250ZXh0LCBhcmcpO1xyXG4gICAgICAgICAgICBzdG9wcy5wdXNoKGNvbG9yU3RvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHtzaXplLCBzaGFwZSwgc3RvcHMsIHBvc2l0aW9uLCB0eXBlOiBDU1NJbWFnZVR5cGUuUkFESUFMX0dSQURJRU5UfTtcclxufTtcclxuIiwiaW1wb3J0IHtDU1NWYWx1ZX0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7VG9rZW5UeXBlfSBmcm9tICcuLi9zeW50YXgvdG9rZW5pemVyJztcclxuaW1wb3J0IHtDb2xvcn0gZnJvbSAnLi9jb2xvcic7XHJcbmltcG9ydCB7bGluZWFyR3JhZGllbnR9IGZyb20gJy4vZnVuY3Rpb25zL2xpbmVhci1ncmFkaWVudCc7XHJcbmltcG9ydCB7cHJlZml4TGluZWFyR3JhZGllbnR9IGZyb20gJy4vZnVuY3Rpb25zLy1wcmVmaXgtbGluZWFyLWdyYWRpZW50JztcclxuaW1wb3J0IHtJVHlwZURlc2NyaXB0b3J9IGZyb20gJy4uL0lUeXBlRGVzY3JpcHRvcic7XHJcbmltcG9ydCB7TGVuZ3RoUGVyY2VudGFnZX0gZnJvbSAnLi9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmltcG9ydCB7d2Via2l0R3JhZGllbnR9IGZyb20gJy4vZnVuY3Rpb25zLy13ZWJraXQtZ3JhZGllbnQnO1xyXG5pbXBvcnQge3JhZGlhbEdyYWRpZW50fSBmcm9tICcuL2Z1bmN0aW9ucy9yYWRpYWwtZ3JhZGllbnQnO1xyXG5pbXBvcnQge3ByZWZpeFJhZGlhbEdyYWRpZW50fSBmcm9tICcuL2Z1bmN0aW9ucy8tcHJlZml4LXJhZGlhbC1ncmFkaWVudCc7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBjb25zdCBlbnVtIENTU0ltYWdlVHlwZSB7XHJcbiAgICBVUkwsXHJcbiAgICBMSU5FQVJfR1JBRElFTlQsXHJcbiAgICBSQURJQUxfR1JBRElFTlRcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzTGluZWFyR3JhZGllbnQgPSAoYmFja2dyb3VuZDogSUNTU0ltYWdlKTogYmFja2dyb3VuZCBpcyBDU1NMaW5lYXJHcmFkaWVudEltYWdlID0+IHtcclxuICAgIHJldHVybiBiYWNrZ3JvdW5kLnR5cGUgPT09IENTU0ltYWdlVHlwZS5MSU5FQVJfR1JBRElFTlQ7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNSYWRpYWxHcmFkaWVudCA9IChiYWNrZ3JvdW5kOiBJQ1NTSW1hZ2UpOiBiYWNrZ3JvdW5kIGlzIENTU1JhZGlhbEdyYWRpZW50SW1hZ2UgPT4ge1xyXG4gICAgcmV0dXJuIGJhY2tncm91bmQudHlwZSA9PT0gQ1NTSW1hZ2VUeXBlLlJBRElBTF9HUkFESUVOVDtcclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVW5wcm9jZXNzZWRHcmFkaWVudENvbG9yU3RvcCB7XHJcbiAgICBjb2xvcjogQ29sb3I7XHJcbiAgICBzdG9wOiBMZW5ndGhQZXJjZW50YWdlIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcmFkaWVudENvbG9yU3RvcCB7XHJcbiAgICBjb2xvcjogQ29sb3I7XHJcbiAgICBzdG9wOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNTU0ltYWdlIHtcclxuICAgIHR5cGU6IENTU0ltYWdlVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDU1NVUkxJbWFnZSBleHRlbmRzIElDU1NJbWFnZSB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIHR5cGU6IENTU0ltYWdlVHlwZS5VUkw7XHJcbn1cclxuXHJcbi8vIGludGVyZmFjZSBJQ1NTR2VuZXJhdGVkSW1hZ2UgZXh0ZW5kcyBJQ1NTSW1hZ2Uge31cclxuXHJcbmV4cG9ydCB0eXBlIEdyYWRpZW50Q29ybmVyID0gW0xlbmd0aFBlcmNlbnRhZ2UsIExlbmd0aFBlcmNlbnRhZ2VdO1xyXG5cclxuaW50ZXJmYWNlIElDU1NHcmFkaWVudEltYWdlIGV4dGVuZHMgSUNTU0ltYWdlIHtcclxuICAgIHN0b3BzOiBVbnByb2Nlc3NlZEdyYWRpZW50Q29sb3JTdG9wW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ1NTTGluZWFyR3JhZGllbnRJbWFnZSBleHRlbmRzIElDU1NHcmFkaWVudEltYWdlIHtcclxuICAgIGFuZ2xlOiBudW1iZXIgfCBHcmFkaWVudENvcm5lcjtcclxuICAgIHR5cGU6IENTU0ltYWdlVHlwZS5MSU5FQVJfR1JBRElFTlQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBlbnVtIENTU1JhZGlhbFNoYXBlIHtcclxuICAgIENJUkNMRSxcclxuICAgIEVMTElQU0VcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gQ1NTUmFkaWFsRXh0ZW50IHtcclxuICAgIENMT1NFU1RfU0lERSxcclxuICAgIEZBUlRIRVNUX1NJREUsXHJcbiAgICBDTE9TRVNUX0NPUk5FUixcclxuICAgIEZBUlRIRVNUX0NPUk5FUlxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDU1NSYWRpYWxTaXplID0gQ1NTUmFkaWFsRXh0ZW50IHwgTGVuZ3RoUGVyY2VudGFnZVtdO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDU1NSYWRpYWxHcmFkaWVudEltYWdlIGV4dGVuZHMgSUNTU0dyYWRpZW50SW1hZ2Uge1xyXG4gICAgdHlwZTogQ1NTSW1hZ2VUeXBlLlJBRElBTF9HUkFESUVOVDtcclxuICAgIHNoYXBlOiBDU1NSYWRpYWxTaGFwZTtcclxuICAgIHNpemU6IENTU1JhZGlhbFNpemU7XHJcbiAgICBwb3NpdGlvbjogTGVuZ3RoUGVyY2VudGFnZVtdO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaW1hZ2U6IElUeXBlRGVzY3JpcHRvcjxJQ1NTSW1hZ2U+ID0ge1xyXG4gICAgbmFtZTogJ2ltYWdlJyxcclxuICAgIHBhcnNlOiAoY29udGV4dDogQ29udGV4dCwgdmFsdWU6IENTU1ZhbHVlKTogSUNTU0ltYWdlID0+IHtcclxuICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gVG9rZW5UeXBlLlVSTF9UT0tFTikge1xyXG4gICAgICAgICAgICBjb25zdCBpbWFnZTogQ1NTVVJMSW1hZ2UgPSB7dXJsOiB2YWx1ZS52YWx1ZSwgdHlwZTogQ1NTSW1hZ2VUeXBlLlVSTH07XHJcbiAgICAgICAgICAgIGNvbnRleHQuY2FjaGUuYWRkSW1hZ2UodmFsdWUudmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gaW1hZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gVG9rZW5UeXBlLkZVTkNUSU9OKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGltYWdlRnVuY3Rpb24gPSBTVVBQT1JURURfSU1BR0VfRlVOQ1RJT05TW3ZhbHVlLm5hbWVdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGltYWdlRnVuY3Rpb24gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHRpbmcgdG8gcGFyc2UgYW4gdW5zdXBwb3J0ZWQgaW1hZ2UgZnVuY3Rpb24gXCIke3ZhbHVlLm5hbWV9XCJgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gaW1hZ2VGdW5jdGlvbihjb250ZXh0LCB2YWx1ZS52YWx1ZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlICR7dmFsdWUudHlwZX1gKTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1N1cHBvcnRlZEltYWdlKHZhbHVlOiBDU1NWYWx1ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICAhKHZhbHVlLnR5cGUgPT09IFRva2VuVHlwZS5JREVOVF9UT0tFTiAmJiB2YWx1ZS52YWx1ZSA9PT0gJ25vbmUnKSAmJlxyXG4gICAgICAgICh2YWx1ZS50eXBlICE9PSBUb2tlblR5cGUuRlVOQ1RJT04gfHwgISFTVVBQT1JURURfSU1BR0VfRlVOQ1RJT05TW3ZhbHVlLm5hbWVdKVxyXG4gICAgKTtcclxufVxyXG5cclxuY29uc3QgU1VQUE9SVEVEX0lNQUdFX0ZVTkNUSU9OUzogUmVjb3JkPHN0cmluZywgKGNvbnRleHQ6IENvbnRleHQsIGFyZ3M6IENTU1ZhbHVlW10pID0+IElDU1NJbWFnZT4gPSB7XHJcbiAgICAnbGluZWFyLWdyYWRpZW50JzogbGluZWFyR3JhZGllbnQsXHJcbiAgICAnLW1vei1saW5lYXItZ3JhZGllbnQnOiBwcmVmaXhMaW5lYXJHcmFkaWVudCxcclxuICAgICctbXMtbGluZWFyLWdyYWRpZW50JzogcHJlZml4TGluZWFyR3JhZGllbnQsXHJcbiAgICAnLW8tbGluZWFyLWdyYWRpZW50JzogcHJlZml4TGluZWFyR3JhZGllbnQsXHJcbiAgICAnLXdlYmtpdC1saW5lYXItZ3JhZGllbnQnOiBwcmVmaXhMaW5lYXJHcmFkaWVudCxcclxuICAgICdyYWRpYWwtZ3JhZGllbnQnOiByYWRpYWxHcmFkaWVudCxcclxuICAgICctbW96LXJhZGlhbC1ncmFkaWVudCc6IHByZWZpeFJhZGlhbEdyYWRpZW50LFxyXG4gICAgJy1tcy1yYWRpYWwtZ3JhZGllbnQnOiBwcmVmaXhSYWRpYWxHcmFkaWVudCxcclxuICAgICctby1yYWRpYWwtZ3JhZGllbnQnOiBwcmVmaXhSYWRpYWxHcmFkaWVudCxcclxuICAgICctd2Via2l0LXJhZGlhbC1ncmFkaWVudCc6IHByZWZpeFJhZGlhbEdyYWRpZW50LFxyXG4gICAgJy13ZWJraXQtZ3JhZGllbnQnOiB3ZWJraXRHcmFkaWVudFxyXG59O1xyXG4iLCJpbXBvcnQge1Rva2VuVHlwZX0gZnJvbSAnLi4vc3ludGF4L3Rva2VuaXplcic7XHJcbmltcG9ydCB7SUNTU0ltYWdlLCBpbWFnZSwgaXNTdXBwb3J0ZWRJbWFnZX0gZnJvbSAnLi4vdHlwZXMvaW1hZ2UnO1xyXG5pbXBvcnQge0lQcm9wZXJ0eUxpc3REZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZX0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q1NTVmFsdWUsIG5vbkZ1bmN0aW9uQXJnU2VwYXJhdG9yfSBmcm9tICcuLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRJbWFnZTogSVByb3BlcnR5TGlzdERlc2NyaXB0b3I8SUNTU0ltYWdlW10+ID0ge1xyXG4gICAgbmFtZTogJ2JhY2tncm91bmQtaW1hZ2UnLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnbm9uZScsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5MSVNULFxyXG4gICAgcHJlZml4OiBmYWxzZSxcclxuICAgIHBhcnNlOiAoY29udGV4dDogQ29udGV4dCwgdG9rZW5zOiBDU1NWYWx1ZVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlyc3QgPSB0b2tlbnNbMF07XHJcblxyXG4gICAgICAgIGlmIChmaXJzdC50eXBlID09PSBUb2tlblR5cGUuSURFTlRfVE9LRU4gJiYgZmlyc3QudmFsdWUgPT09ICdub25lJykge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdG9rZW5zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiBub25GdW5jdGlvbkFyZ1NlcGFyYXRvcih2YWx1ZSkgJiYgaXNTdXBwb3J0ZWRJbWFnZSh2YWx1ZSkpXHJcbiAgICAgICAgICAgIC5tYXAoKHZhbHVlKSA9PiBpbWFnZS5wYXJzZShjb250ZXh0LCB2YWx1ZSkpO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eUxpc3REZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZX0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q1NTVmFsdWUsIGlzSWRlbnRUb2tlbn0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBjb25zdCBlbnVtIEJBQ0tHUk9VTkRfT1JJR0lOIHtcclxuICAgIEJPUkRFUl9CT1ggPSAwLFxyXG4gICAgUEFERElOR19CT1ggPSAxLFxyXG4gICAgQ09OVEVOVF9CT1ggPSAyXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEJhY2tncm91bmRPcmlnaW4gPSBCQUNLR1JPVU5EX09SSUdJTltdO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRPcmlnaW46IElQcm9wZXJ0eUxpc3REZXNjcmlwdG9yPEJhY2tncm91bmRPcmlnaW4+ID0ge1xyXG4gICAgbmFtZTogJ2JhY2tncm91bmQtb3JpZ2luJyxcclxuICAgIGluaXRpYWxWYWx1ZTogJ2JvcmRlci1ib3gnLFxyXG4gICAgcHJlZml4OiBmYWxzZSxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLkxJU1QsXHJcbiAgICBwYXJzZTogKF9jb250ZXh0OiBDb250ZXh0LCB0b2tlbnM6IENTU1ZhbHVlW10pOiBCYWNrZ3JvdW5kT3JpZ2luID0+IHtcclxuICAgICAgICByZXR1cm4gdG9rZW5zLm1hcCgodG9rZW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzSWRlbnRUb2tlbih0b2tlbikpIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdwYWRkaW5nLWJveCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCQUNLR1JPVU5EX09SSUdJTi5QQURESU5HX0JPWDtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdjb250ZW50LWJveCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCQUNLR1JPVU5EX09SSUdJTi5DT05URU5UX0JPWDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gQkFDS0dST1VORF9PUklHSU4uQk9SREVSX0JPWDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZSwgSVByb3BlcnR5TGlzdERlc2NyaXB0b3J9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NTU1ZhbHVlLCBwYXJzZUZ1bmN0aW9uQXJnc30gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7aXNMZW5ndGhQZXJjZW50YWdlLCBMZW5ndGhQZXJjZW50YWdlVHVwbGUsIHBhcnNlTGVuZ3RoUGVyY2VudGFnZVR1cGxlfSBmcm9tICcuLi90eXBlcy9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuZXhwb3J0IHR5cGUgQmFja2dyb3VuZFBvc2l0aW9uID0gQmFja2dyb3VuZEltYWdlUG9zaXRpb25bXTtcclxuXHJcbmV4cG9ydCB0eXBlIEJhY2tncm91bmRJbWFnZVBvc2l0aW9uID0gTGVuZ3RoUGVyY2VudGFnZVR1cGxlO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRQb3NpdGlvbjogSVByb3BlcnR5TGlzdERlc2NyaXB0b3I8QmFja2dyb3VuZFBvc2l0aW9uPiA9IHtcclxuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLXBvc2l0aW9uJyxcclxuICAgIGluaXRpYWxWYWx1ZTogJzAlIDAlJyxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLkxJU1QsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgdG9rZW5zOiBDU1NWYWx1ZVtdKTogQmFja2dyb3VuZFBvc2l0aW9uID0+IHtcclxuICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkFyZ3ModG9rZW5zKVxyXG4gICAgICAgICAgICAubWFwKCh2YWx1ZXM6IENTU1ZhbHVlW10pID0+IHZhbHVlcy5maWx0ZXIoaXNMZW5ndGhQZXJjZW50YWdlKSlcclxuICAgICAgICAgICAgLm1hcChwYXJzZUxlbmd0aFBlcmNlbnRhZ2VUdXBsZSk7XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5TGlzdERlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDU1NWYWx1ZSwgaXNJZGVudFRva2VuLCBwYXJzZUZ1bmN0aW9uQXJnc30gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuZXhwb3J0IHR5cGUgQmFja2dyb3VuZFJlcGVhdCA9IEJBQ0tHUk9VTkRfUkVQRUFUW107XHJcblxyXG5leHBvcnQgY29uc3QgZW51bSBCQUNLR1JPVU5EX1JFUEVBVCB7XHJcbiAgICBSRVBFQVQgPSAwLFxyXG4gICAgTk9fUkVQRUFUID0gMSxcclxuICAgIFJFUEVBVF9YID0gMixcclxuICAgIFJFUEVBVF9ZID0gM1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgYmFja2dyb3VuZFJlcGVhdDogSVByb3BlcnR5TGlzdERlc2NyaXB0b3I8QmFja2dyb3VuZFJlcGVhdD4gPSB7XHJcbiAgICBuYW1lOiAnYmFja2dyb3VuZC1yZXBlYXQnLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAncmVwZWF0JyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5MSVNULFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgdG9rZW5zOiBDU1NWYWx1ZVtdKTogQmFja2dyb3VuZFJlcGVhdCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25BcmdzKHRva2VucylcclxuICAgICAgICAgICAgLm1hcCgodmFsdWVzKSA9PlxyXG4gICAgICAgICAgICAgICAgdmFsdWVzXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihpc0lkZW50VG9rZW4pXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgodG9rZW4pID0+IHRva2VuLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcgJylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAubWFwKHBhcnNlQmFja2dyb3VuZFJlcGVhdCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5jb25zdCBwYXJzZUJhY2tncm91bmRSZXBlYXQgPSAodmFsdWU6IHN0cmluZyk6IEJBQ0tHUk9VTkRfUkVQRUFUID0+IHtcclxuICAgIHN3aXRjaCAodmFsdWUpIHtcclxuICAgICAgICBjYXNlICduby1yZXBlYXQnOlxyXG4gICAgICAgICAgICByZXR1cm4gQkFDS0dST1VORF9SRVBFQVQuTk9fUkVQRUFUO1xyXG4gICAgICAgIGNhc2UgJ3JlcGVhdC14JzpcclxuICAgICAgICBjYXNlICdyZXBlYXQgbm8tcmVwZWF0JzpcclxuICAgICAgICAgICAgcmV0dXJuIEJBQ0tHUk9VTkRfUkVQRUFULlJFUEVBVF9YO1xyXG4gICAgICAgIGNhc2UgJ3JlcGVhdC15JzpcclxuICAgICAgICBjYXNlICduby1yZXBlYXQgcmVwZWF0JzpcclxuICAgICAgICAgICAgcmV0dXJuIEJBQ0tHUk9VTkRfUkVQRUFULlJFUEVBVF9ZO1xyXG4gICAgICAgIGNhc2UgJ3JlcGVhdCc6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIEJBQ0tHUk9VTkRfUkVQRUFULlJFUEVBVDtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtJUHJvcGVydHlMaXN0RGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NTU1ZhbHVlLCBpc0lkZW50VG9rZW4sIHBhcnNlRnVuY3Rpb25BcmdzfSBmcm9tICcuLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtpc0xlbmd0aFBlcmNlbnRhZ2UsIExlbmd0aFBlcmNlbnRhZ2V9IGZyb20gJy4uL3R5cGVzL2xlbmd0aC1wZXJjZW50YWdlJztcclxuaW1wb3J0IHtTdHJpbmdWYWx1ZVRva2VufSBmcm9tICcuLi9zeW50YXgvdG9rZW5pemVyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5cclxuZXhwb3J0IGVudW0gQkFDS0dST1VORF9TSVpFIHtcclxuICAgIEFVVE8gPSAnYXV0bycsXHJcbiAgICBDT05UQUlOID0gJ2NvbnRhaW4nLFxyXG4gICAgQ09WRVIgPSAnY292ZXInXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEJhY2tncm91bmRTaXplSW5mbyA9IExlbmd0aFBlcmNlbnRhZ2UgfCBTdHJpbmdWYWx1ZVRva2VuO1xyXG5leHBvcnQgdHlwZSBCYWNrZ3JvdW5kU2l6ZSA9IEJhY2tncm91bmRTaXplSW5mb1tdW107XHJcblxyXG5leHBvcnQgY29uc3QgYmFja2dyb3VuZFNpemU6IElQcm9wZXJ0eUxpc3REZXNjcmlwdG9yPEJhY2tncm91bmRTaXplPiA9IHtcclxuICAgIG5hbWU6ICdiYWNrZ3JvdW5kLXNpemUnLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnMCcsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuTElTVCxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIHRva2VuczogQ1NTVmFsdWVbXSk6IEJhY2tncm91bmRTaXplID0+IHtcclxuICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkFyZ3ModG9rZW5zKS5tYXAoKHZhbHVlcykgPT4gdmFsdWVzLmZpbHRlcihpc0JhY2tncm91bmRTaXplSW5mb1Rva2VuKSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5jb25zdCBpc0JhY2tncm91bmRTaXplSW5mb1Rva2VuID0gKHZhbHVlOiBDU1NWYWx1ZSk6IHZhbHVlIGlzIEJhY2tncm91bmRTaXplSW5mbyA9PlxyXG4gICAgaXNJZGVudFRva2VuKHZhbHVlKSB8fCBpc0xlbmd0aFBlcmNlbnRhZ2UodmFsdWUpO1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eVR5cGVWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuY29uc3QgYm9yZGVyQ29sb3JGb3JTaWRlID0gKHNpZGU6IHN0cmluZyk6IElQcm9wZXJ0eVR5cGVWYWx1ZURlc2NyaXB0b3IgPT4gKHtcclxuICAgIG5hbWU6IGBib3JkZXItJHtzaWRlfS1jb2xvcmAsXHJcbiAgICBpbml0aWFsVmFsdWU6ICd0cmFuc3BhcmVudCcsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuVFlQRV9WQUxVRSxcclxuICAgIGZvcm1hdDogJ2NvbG9yJ1xyXG59KTtcclxuXHJcbmV4cG9ydCBjb25zdCBib3JkZXJUb3BDb2xvcjogSVByb3BlcnR5VHlwZVZhbHVlRGVzY3JpcHRvciA9IGJvcmRlckNvbG9yRm9yU2lkZSgndG9wJyk7XHJcbmV4cG9ydCBjb25zdCBib3JkZXJSaWdodENvbG9yOiBJUHJvcGVydHlUeXBlVmFsdWVEZXNjcmlwdG9yID0gYm9yZGVyQ29sb3JGb3JTaWRlKCdyaWdodCcpO1xyXG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tQ29sb3I6IElQcm9wZXJ0eVR5cGVWYWx1ZURlc2NyaXB0b3IgPSBib3JkZXJDb2xvckZvclNpZGUoJ2JvdHRvbScpO1xyXG5leHBvcnQgY29uc3QgYm9yZGVyTGVmdENvbG9yOiBJUHJvcGVydHlUeXBlVmFsdWVEZXNjcmlwdG9yID0gYm9yZGVyQ29sb3JGb3JTaWRlKCdsZWZ0Jyk7XHJcbiIsImltcG9ydCB7SVByb3BlcnR5TGlzdERlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDU1NWYWx1ZX0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7aXNMZW5ndGhQZXJjZW50YWdlLCBMZW5ndGhQZXJjZW50YWdlVHVwbGUsIHBhcnNlTGVuZ3RoUGVyY2VudGFnZVR1cGxlfSBmcm9tICcuLi90eXBlcy9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuZXhwb3J0IHR5cGUgQm9yZGVyUmFkaXVzID0gTGVuZ3RoUGVyY2VudGFnZVR1cGxlO1xyXG5cclxuY29uc3QgYm9yZGVyUmFkaXVzRm9yU2lkZSA9IChzaWRlOiBzdHJpbmcpOiBJUHJvcGVydHlMaXN0RGVzY3JpcHRvcjxCb3JkZXJSYWRpdXM+ID0+ICh7XHJcbiAgICBuYW1lOiBgYm9yZGVyLXJhZGl1cy0ke3NpZGV9YCxcclxuICAgIGluaXRpYWxWYWx1ZTogJzAgMCcsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuTElTVCxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIHRva2VuczogQ1NTVmFsdWVbXSk6IEJvcmRlclJhZGl1cyA9PlxyXG4gICAgICAgIHBhcnNlTGVuZ3RoUGVyY2VudGFnZVR1cGxlKHRva2Vucy5maWx0ZXIoaXNMZW5ndGhQZXJjZW50YWdlKSlcclxufSk7XHJcblxyXG5leHBvcnQgY29uc3QgYm9yZGVyVG9wTGVmdFJhZGl1czogSVByb3BlcnR5TGlzdERlc2NyaXB0b3I8Qm9yZGVyUmFkaXVzPiA9IGJvcmRlclJhZGl1c0ZvclNpZGUoJ3RvcC1sZWZ0Jyk7XHJcbmV4cG9ydCBjb25zdCBib3JkZXJUb3BSaWdodFJhZGl1czogSVByb3BlcnR5TGlzdERlc2NyaXB0b3I8Qm9yZGVyUmFkaXVzPiA9IGJvcmRlclJhZGl1c0ZvclNpZGUoJ3RvcC1yaWdodCcpO1xyXG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IElQcm9wZXJ0eUxpc3REZXNjcmlwdG9yPEJvcmRlclJhZGl1cz4gPSBib3JkZXJSYWRpdXNGb3JTaWRlKCdib3R0b20tcmlnaHQnKTtcclxuZXhwb3J0IGNvbnN0IGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6IElQcm9wZXJ0eUxpc3REZXNjcmlwdG9yPEJvcmRlclJhZGl1cz4gPSBib3JkZXJSYWRpdXNGb3JTaWRlKCdib3R0b20tbGVmdCcpO1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eUlkZW50VmFsdWVEZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZX0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuZXhwb3J0IGNvbnN0IGVudW0gQk9SREVSX1NUWUxFIHtcclxuICAgIE5PTkUgPSAwLFxyXG4gICAgU09MSUQgPSAxLFxyXG4gICAgREFTSEVEID0gMixcclxuICAgIERPVFRFRCA9IDMsXHJcbiAgICBET1VCTEUgPSA0XHJcbn1cclxuXHJcbmNvbnN0IGJvcmRlclN0eWxlRm9yU2lkZSA9IChzaWRlOiBzdHJpbmcpOiBJUHJvcGVydHlJZGVudFZhbHVlRGVzY3JpcHRvcjxCT1JERVJfU1RZTEU+ID0+ICh7XHJcbiAgICBuYW1lOiBgYm9yZGVyLSR7c2lkZX0tc3R5bGVgLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnc29saWQnLFxyXG4gICAgcHJlZml4OiBmYWxzZSxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLklERU5UX1ZBTFVFLFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgc3R5bGU6IHN0cmluZyk6IEJPUkRFUl9TVFlMRSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChzdHlsZSkge1xyXG4gICAgICAgICAgICBjYXNlICdub25lJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBCT1JERVJfU1RZTEUuTk9ORTtcclxuICAgICAgICAgICAgY2FzZSAnZGFzaGVkJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBCT1JERVJfU1RZTEUuREFTSEVEO1xyXG4gICAgICAgICAgICBjYXNlICdkb3R0ZWQnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJPUkRFUl9TVFlMRS5ET1RURUQ7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQk9SREVSX1NUWUxFLkRPVUJMRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEJPUkRFUl9TVFlMRS5TT0xJRDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgY29uc3QgYm9yZGVyVG9wU3R5bGU6IElQcm9wZXJ0eUlkZW50VmFsdWVEZXNjcmlwdG9yPEJPUkRFUl9TVFlMRT4gPSBib3JkZXJTdHlsZUZvclNpZGUoJ3RvcCcpO1xyXG5leHBvcnQgY29uc3QgYm9yZGVyUmlnaHRTdHlsZTogSVByb3BlcnR5SWRlbnRWYWx1ZURlc2NyaXB0b3I8Qk9SREVSX1NUWUxFPiA9IGJvcmRlclN0eWxlRm9yU2lkZSgncmlnaHQnKTtcclxuZXhwb3J0IGNvbnN0IGJvcmRlckJvdHRvbVN0eWxlOiBJUHJvcGVydHlJZGVudFZhbHVlRGVzY3JpcHRvcjxCT1JERVJfU1RZTEU+ID0gYm9yZGVyU3R5bGVGb3JTaWRlKCdib3R0b20nKTtcclxuZXhwb3J0IGNvbnN0IGJvcmRlckxlZnRTdHlsZTogSVByb3BlcnR5SWRlbnRWYWx1ZURlc2NyaXB0b3I8Qk9SREVSX1NUWUxFPiA9IGJvcmRlclN0eWxlRm9yU2lkZSgnbGVmdCcpO1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eVZhbHVlRGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NTU1ZhbHVlLCBpc0RpbWVuc2lvblRva2VufSBmcm9tICcuLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5jb25zdCBib3JkZXJXaWR0aEZvclNpZGUgPSAoc2lkZTogc3RyaW5nKTogSVByb3BlcnR5VmFsdWVEZXNjcmlwdG9yPG51bWJlcj4gPT4gKHtcclxuICAgIG5hbWU6IGBib3JkZXItJHtzaWRlfS13aWR0aGAsXHJcbiAgICBpbml0aWFsVmFsdWU6ICcwJyxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLlZBTFVFLFxyXG4gICAgcHJlZml4OiBmYWxzZSxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIHRva2VuOiBDU1NWYWx1ZSk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGltZW5zaW9uVG9rZW4odG9rZW4pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b2tlbi5udW1iZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBjb25zdCBib3JkZXJUb3BXaWR0aDogSVByb3BlcnR5VmFsdWVEZXNjcmlwdG9yPG51bWJlcj4gPSBib3JkZXJXaWR0aEZvclNpZGUoJ3RvcCcpO1xyXG5leHBvcnQgY29uc3QgYm9yZGVyUmlnaHRXaWR0aDogSVByb3BlcnR5VmFsdWVEZXNjcmlwdG9yPG51bWJlcj4gPSBib3JkZXJXaWR0aEZvclNpZGUoJ3JpZ2h0Jyk7XHJcbmV4cG9ydCBjb25zdCBib3JkZXJCb3R0b21XaWR0aDogSVByb3BlcnR5VmFsdWVEZXNjcmlwdG9yPG51bWJlcj4gPSBib3JkZXJXaWR0aEZvclNpZGUoJ2JvdHRvbScpO1xyXG5leHBvcnQgY29uc3QgYm9yZGVyTGVmdFdpZHRoOiBJUHJvcGVydHlWYWx1ZURlc2NyaXB0b3I8bnVtYmVyPiA9IGJvcmRlcldpZHRoRm9yU2lkZSgnbGVmdCcpO1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eVR5cGVWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuXHJcbmV4cG9ydCBjb25zdCBjb2xvcjogSVByb3BlcnR5VHlwZVZhbHVlRGVzY3JpcHRvciA9IHtcclxuICAgIG5hbWU6IGBjb2xvcmAsXHJcbiAgICBpbml0aWFsVmFsdWU6ICd0cmFuc3BhcmVudCcsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuVFlQRV9WQUxVRSxcclxuICAgIGZvcm1hdDogJ2NvbG9yJ1xyXG59O1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eUlkZW50VmFsdWVEZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZX0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBjb25zdCBlbnVtIERJUkVDVElPTiB7XHJcbiAgICBMVFIgPSAwLFxyXG4gICAgUlRMID0gMVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGlyZWN0aW9uOiBJUHJvcGVydHlJZGVudFZhbHVlRGVzY3JpcHRvcjxESVJFQ1RJT04+ID0ge1xyXG4gICAgbmFtZTogJ2RpcmVjdGlvbicsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdsdHInLFxyXG4gICAgcHJlZml4OiBmYWxzZSxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLklERU5UX1ZBTFVFLFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgZGlyZWN0aW9uOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xyXG4gICAgICAgICAgICBjYXNlICdydGwnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIERJUkVDVElPTi5SVEw7XHJcbiAgICAgICAgICAgIGNhc2UgJ2x0cic6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRElSRUNUSU9OLkxUUjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5TGlzdERlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDU1NWYWx1ZSwgaXNJZGVudFRva2VufSBmcm9tICcuLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgY29uc3QgZW51bSBESVNQTEFZIHtcclxuICAgIE5PTkUgPSAwLFxyXG4gICAgQkxPQ0sgPSAxIDw8IDEsXHJcbiAgICBJTkxJTkUgPSAxIDw8IDIsXHJcbiAgICBSVU5fSU4gPSAxIDw8IDMsXHJcbiAgICBGTE9XID0gMSA8PCA0LFxyXG4gICAgRkxPV19ST09UID0gMSA8PCA1LFxyXG4gICAgVEFCTEUgPSAxIDw8IDYsXHJcbiAgICBGTEVYID0gMSA8PCA3LFxyXG4gICAgR1JJRCA9IDEgPDwgOCxcclxuICAgIFJVQlkgPSAxIDw8IDksXHJcbiAgICBTVUJHUklEID0gMSA8PCAxMCxcclxuICAgIExJU1RfSVRFTSA9IDEgPDwgMTEsXHJcbiAgICBUQUJMRV9ST1dfR1JPVVAgPSAxIDw8IDEyLFxyXG4gICAgVEFCTEVfSEVBREVSX0dST1VQID0gMSA8PCAxMyxcclxuICAgIFRBQkxFX0ZPT1RFUl9HUk9VUCA9IDEgPDwgMTQsXHJcbiAgICBUQUJMRV9ST1cgPSAxIDw8IDE1LFxyXG4gICAgVEFCTEVfQ0VMTCA9IDEgPDwgMTYsXHJcbiAgICBUQUJMRV9DT0xVTU5fR1JPVVAgPSAxIDw8IDE3LFxyXG4gICAgVEFCTEVfQ09MVU1OID0gMSA8PCAxOCxcclxuICAgIFRBQkxFX0NBUFRJT04gPSAxIDw8IDE5LFxyXG4gICAgUlVCWV9CQVNFID0gMSA8PCAyMCxcclxuICAgIFJVQllfVEVYVCA9IDEgPDwgMjEsXHJcbiAgICBSVUJZX0JBU0VfQ09OVEFJTkVSID0gMSA8PCAyMixcclxuICAgIFJVQllfVEVYVF9DT05UQUlORVIgPSAxIDw8IDIzLFxyXG4gICAgQ09OVEVOVFMgPSAxIDw8IDI0LFxyXG4gICAgSU5MSU5FX0JMT0NLID0gMSA8PCAyNSxcclxuICAgIElOTElORV9MSVNUX0lURU0gPSAxIDw8IDI2LFxyXG4gICAgSU5MSU5FX1RBQkxFID0gMSA8PCAyNyxcclxuICAgIElOTElORV9GTEVYID0gMSA8PCAyOCxcclxuICAgIElOTElORV9HUklEID0gMSA8PCAyOVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBEaXNwbGF5ID0gbnVtYmVyO1xyXG5cclxuZXhwb3J0IGNvbnN0IGRpc3BsYXk6IElQcm9wZXJ0eUxpc3REZXNjcmlwdG9yPERpc3BsYXk+ID0ge1xyXG4gICAgbmFtZTogJ2Rpc3BsYXknLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnaW5saW5lLWJsb2NrJyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5MSVNULFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgdG9rZW5zOiBDU1NWYWx1ZVtdKTogRGlzcGxheSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRva2Vucy5maWx0ZXIoaXNJZGVudFRva2VuKS5yZWR1Y2UoKGJpdCwgdG9rZW4pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGJpdCB8IHBhcnNlRGlzcGxheVZhbHVlKHRva2VuLnZhbHVlKTtcclxuICAgICAgICB9LCBESVNQTEFZLk5PTkUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuY29uc3QgcGFyc2VEaXNwbGF5VmFsdWUgPSAoZGlzcGxheTogc3RyaW5nKTogRGlzcGxheSA9PiB7XHJcbiAgICBzd2l0Y2ggKGRpc3BsYXkpIHtcclxuICAgICAgICBjYXNlICdibG9jayc6XHJcbiAgICAgICAgY2FzZSAnLXdlYmtpdC1ib3gnOlxyXG4gICAgICAgICAgICByZXR1cm4gRElTUExBWS5CTE9DSztcclxuICAgICAgICBjYXNlICdpbmxpbmUnOlxyXG4gICAgICAgICAgICByZXR1cm4gRElTUExBWS5JTkxJTkU7XHJcbiAgICAgICAgY2FzZSAncnVuLWluJzpcclxuICAgICAgICAgICAgcmV0dXJuIERJU1BMQVkuUlVOX0lOO1xyXG4gICAgICAgIGNhc2UgJ2Zsb3cnOlxyXG4gICAgICAgICAgICByZXR1cm4gRElTUExBWS5GTE9XO1xyXG4gICAgICAgIGNhc2UgJ2Zsb3ctcm9vdCc6XHJcbiAgICAgICAgICAgIHJldHVybiBESVNQTEFZLkZMT1dfUk9PVDtcclxuICAgICAgICBjYXNlICd0YWJsZSc6XHJcbiAgICAgICAgICAgIHJldHVybiBESVNQTEFZLlRBQkxFO1xyXG4gICAgICAgIGNhc2UgJ2ZsZXgnOlxyXG4gICAgICAgIGNhc2UgJy13ZWJraXQtZmxleCc6XHJcbiAgICAgICAgICAgIHJldHVybiBESVNQTEFZLkZMRVg7XHJcbiAgICAgICAgY2FzZSAnZ3JpZCc6XHJcbiAgICAgICAgY2FzZSAnLW1zLWdyaWQnOlxyXG4gICAgICAgICAgICByZXR1cm4gRElTUExBWS5HUklEO1xyXG4gICAgICAgIGNhc2UgJ3J1YnknOlxyXG4gICAgICAgICAgICByZXR1cm4gRElTUExBWS5SVUJZO1xyXG4gICAgICAgIGNhc2UgJ3N1YmdyaWQnOlxyXG4gICAgICAgICAgICByZXR1cm4gRElTUExBWS5TVUJHUklEO1xyXG4gICAgICAgIGNhc2UgJ2xpc3QtaXRlbSc6XHJcbiAgICAgICAgICAgIHJldHVybiBESVNQTEFZLkxJU1RfSVRFTTtcclxuICAgICAgICBjYXNlICd0YWJsZS1yb3ctZ3JvdXAnOlxyXG4gICAgICAgICAgICByZXR1cm4gRElTUExBWS5UQUJMRV9ST1dfR1JPVVA7XHJcbiAgICAgICAgY2FzZSAndGFibGUtaGVhZGVyLWdyb3VwJzpcclxuICAgICAgICAgICAgcmV0dXJuIERJU1BMQVkuVEFCTEVfSEVBREVSX0dST1VQO1xyXG4gICAgICAgIGNhc2UgJ3RhYmxlLWZvb3Rlci1ncm91cCc6XHJcbiAgICAgICAgICAgIHJldHVybiBESVNQTEFZLlRBQkxFX0ZPT1RFUl9HUk9VUDtcclxuICAgICAgICBjYXNlICd0YWJsZS1yb3cnOlxyXG4gICAgICAgICAgICByZXR1cm4gRElTUExBWS5UQUJMRV9ST1c7XHJcbiAgICAgICAgY2FzZSAndGFibGUtY2VsbCc6XHJcbiAgICAgICAgICAgIHJldHVybiBESVNQTEFZLlRBQkxFX0NFTEw7XHJcbiAgICAgICAgY2FzZSAndGFibGUtY29sdW1uLWdyb3VwJzpcclxuICAgICAgICAgICAgcmV0dXJuIERJU1BMQVkuVEFCTEVfQ09MVU1OX0dST1VQO1xyXG4gICAgICAgIGNhc2UgJ3RhYmxlLWNvbHVtbic6XHJcbiAgICAgICAgICAgIHJldHVybiBESVNQTEFZLlRBQkxFX0NPTFVNTjtcclxuICAgICAgICBjYXNlICd0YWJsZS1jYXB0aW9uJzpcclxuICAgICAgICAgICAgcmV0dXJuIERJU1BMQVkuVEFCTEVfQ0FQVElPTjtcclxuICAgICAgICBjYXNlICdydWJ5LWJhc2UnOlxyXG4gICAgICAgICAgICByZXR1cm4gRElTUExBWS5SVUJZX0JBU0U7XHJcbiAgICAgICAgY2FzZSAncnVieS10ZXh0JzpcclxuICAgICAgICAgICAgcmV0dXJuIERJU1BMQVkuUlVCWV9URVhUO1xyXG4gICAgICAgIGNhc2UgJ3J1YnktYmFzZS1jb250YWluZXInOlxyXG4gICAgICAgICAgICByZXR1cm4gRElTUExBWS5SVUJZX0JBU0VfQ09OVEFJTkVSO1xyXG4gICAgICAgIGNhc2UgJ3J1YnktdGV4dC1jb250YWluZXInOlxyXG4gICAgICAgICAgICByZXR1cm4gRElTUExBWS5SVUJZX1RFWFRfQ09OVEFJTkVSO1xyXG4gICAgICAgIGNhc2UgJ2NvbnRlbnRzJzpcclxuICAgICAgICAgICAgcmV0dXJuIERJU1BMQVkuQ09OVEVOVFM7XHJcbiAgICAgICAgY2FzZSAnaW5saW5lLWJsb2NrJzpcclxuICAgICAgICAgICAgcmV0dXJuIERJU1BMQVkuSU5MSU5FX0JMT0NLO1xyXG4gICAgICAgIGNhc2UgJ2lubGluZS1saXN0LWl0ZW0nOlxyXG4gICAgICAgICAgICByZXR1cm4gRElTUExBWS5JTkxJTkVfTElTVF9JVEVNO1xyXG4gICAgICAgIGNhc2UgJ2lubGluZS10YWJsZSc6XHJcbiAgICAgICAgICAgIHJldHVybiBESVNQTEFZLklOTElORV9UQUJMRTtcclxuICAgICAgICBjYXNlICdpbmxpbmUtZmxleCc6XHJcbiAgICAgICAgICAgIHJldHVybiBESVNQTEFZLklOTElORV9GTEVYO1xyXG4gICAgICAgIGNhc2UgJ2lubGluZS1ncmlkJzpcclxuICAgICAgICAgICAgcmV0dXJuIERJU1BMQVkuSU5MSU5FX0dSSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIERJU1BMQVkuTk9ORTtcclxufTtcclxuIiwiaW1wb3J0IHtJUHJvcGVydHlJZGVudFZhbHVlRGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcbmV4cG9ydCBjb25zdCBlbnVtIEZMT0FUIHtcclxuICAgIE5PTkUgPSAwLFxyXG4gICAgTEVGVCA9IDEsXHJcbiAgICBSSUdIVCA9IDIsXHJcbiAgICBJTkxJTkVfU1RBUlQgPSAzLFxyXG4gICAgSU5MSU5FX0VORCA9IDRcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGZsb2F0OiBJUHJvcGVydHlJZGVudFZhbHVlRGVzY3JpcHRvcjxGTE9BVD4gPSB7XHJcbiAgICBuYW1lOiAnZmxvYXQnLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnbm9uZScsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuSURFTlRfVkFMVUUsXHJcbiAgICBwYXJzZTogKF9jb250ZXh0OiBDb250ZXh0LCBmbG9hdDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChmbG9hdCkge1xyXG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBGTE9BVC5MRUZUO1xyXG4gICAgICAgICAgICBjYXNlICdyaWdodCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRkxPQVQuUklHSFQ7XHJcbiAgICAgICAgICAgIGNhc2UgJ2lubGluZS1zdGFydCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRkxPQVQuSU5MSU5FX1NUQVJUO1xyXG4gICAgICAgICAgICBjYXNlICdpbmxpbmUtZW5kJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBGTE9BVC5JTkxJTkVfRU5EO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gRkxPQVQuTk9ORTtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtJUHJvcGVydHlWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDU1NWYWx1ZX0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7VG9rZW5UeXBlfSBmcm9tICcuLi9zeW50YXgvdG9rZW5pemVyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgY29uc3QgbGV0dGVyU3BhY2luZzogSVByb3BlcnR5VmFsdWVEZXNjcmlwdG9yPG51bWJlcj4gPSB7XHJcbiAgICBuYW1lOiAnbGV0dGVyLXNwYWNpbmcnLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnMCcsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuVkFMVUUsXHJcbiAgICBwYXJzZTogKF9jb250ZXh0OiBDb250ZXh0LCB0b2tlbjogQ1NTVmFsdWUpID0+IHtcclxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLklERU5UX1RPS0VOICYmIHRva2VuLnZhbHVlID09PSAnbm9ybWFsJykge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuTlVNQkVSX1RPS0VOKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b2tlbi5udW1iZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkRJTUVOU0lPTl9UT0tFTikge1xyXG4gICAgICAgICAgICByZXR1cm4gdG9rZW4ubnVtYmVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5SWRlbnRWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgZW51bSBMSU5FX0JSRUFLIHtcclxuICAgIE5PUk1BTCA9ICdub3JtYWwnLFxyXG4gICAgU1RSSUNUID0gJ3N0cmljdCdcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGxpbmVCcmVhazogSVByb3BlcnR5SWRlbnRWYWx1ZURlc2NyaXB0b3I8TElORV9CUkVBSz4gPSB7XHJcbiAgICBuYW1lOiAnbGluZS1icmVhaycsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdub3JtYWwnLFxyXG4gICAgcHJlZml4OiBmYWxzZSxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLklERU5UX1ZBTFVFLFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgbGluZUJyZWFrOiBzdHJpbmcpOiBMSU5FX0JSRUFLID0+IHtcclxuICAgICAgICBzd2l0Y2ggKGxpbmVCcmVhaykge1xyXG4gICAgICAgICAgICBjYXNlICdzdHJpY3QnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJTkVfQlJFQUsuU1RSSUNUO1xyXG4gICAgICAgICAgICBjYXNlICdub3JtYWwnOlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJTkVfQlJFQUsuTk9STUFMO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtJUHJvcGVydHlUb2tlblZhbHVlRGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NTU1ZhbHVlLCBpc0lkZW50VG9rZW59IGZyb20gJy4uL3N5bnRheC9wYXJzZXInO1xyXG5pbXBvcnQge1Rva2VuVHlwZX0gZnJvbSAnLi4vc3ludGF4L3Rva2VuaXplcic7XHJcbmltcG9ydCB7Z2V0QWJzb2x1dGVWYWx1ZSwgaXNMZW5ndGhQZXJjZW50YWdlfSBmcm9tICcuLi90eXBlcy9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmV4cG9ydCBjb25zdCBsaW5lSGVpZ2h0OiBJUHJvcGVydHlUb2tlblZhbHVlRGVzY3JpcHRvciA9IHtcclxuICAgIG5hbWU6ICdsaW5lLWhlaWdodCcsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdub3JtYWwnLFxyXG4gICAgcHJlZml4OiBmYWxzZSxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLlRPS0VOX1ZBTFVFXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY29tcHV0ZUxpbmVIZWlnaHQgPSAodG9rZW46IENTU1ZhbHVlLCBmb250U2l6ZTogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuICAgIGlmIChpc0lkZW50VG9rZW4odG9rZW4pICYmIHRva2VuLnZhbHVlID09PSAnbm9ybWFsJykge1xyXG4gICAgICAgIHJldHVybiAxLjIgKiBmb250U2l6ZTtcclxuICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLk5VTUJFUl9UT0tFTikge1xyXG4gICAgICAgIHJldHVybiBmb250U2l6ZSAqIHRva2VuLm51bWJlcjtcclxuICAgIH0gZWxzZSBpZiAoaXNMZW5ndGhQZXJjZW50YWdlKHRva2VuKSkge1xyXG4gICAgICAgIHJldHVybiBnZXRBYnNvbHV0ZVZhbHVlKHRva2VuLCBmb250U2l6ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvbnRTaXplO1xyXG59O1xyXG4iLCJpbXBvcnQge1Rva2VuVHlwZX0gZnJvbSAnLi4vc3ludGF4L3Rva2VuaXplcic7XHJcbmltcG9ydCB7SUNTU0ltYWdlLCBpbWFnZX0gZnJvbSAnLi4vdHlwZXMvaW1hZ2UnO1xyXG5pbXBvcnQge0lQcm9wZXJ0eVZhbHVlRGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NTU1ZhbHVlfSBmcm9tICcuLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGxpc3RTdHlsZUltYWdlOiBJUHJvcGVydHlWYWx1ZURlc2NyaXB0b3I8SUNTU0ltYWdlIHwgbnVsbD4gPSB7XHJcbiAgICBuYW1lOiAnbGlzdC1zdHlsZS1pbWFnZScsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdub25lJyxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLlZBTFVFLFxyXG4gICAgcHJlZml4OiBmYWxzZSxcclxuICAgIHBhcnNlOiAoY29udGV4dDogQ29udGV4dCwgdG9rZW46IENTU1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5JREVOVF9UT0tFTiAmJiB0b2tlbi52YWx1ZSA9PT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGltYWdlLnBhcnNlKGNvbnRleHQsIHRva2VuKTtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtJUHJvcGVydHlJZGVudFZhbHVlRGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcbmV4cG9ydCBjb25zdCBlbnVtIExJU1RfU1RZTEVfUE9TSVRJT04ge1xyXG4gICAgSU5TSURFID0gMCxcclxuICAgIE9VVFNJREUgPSAxXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBsaXN0U3R5bGVQb3NpdGlvbjogSVByb3BlcnR5SWRlbnRWYWx1ZURlc2NyaXB0b3I8TElTVF9TVFlMRV9QT1NJVElPTj4gPSB7XHJcbiAgICBuYW1lOiAnbGlzdC1zdHlsZS1wb3NpdGlvbicsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdvdXRzaWRlJyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5JREVOVF9WQUxVRSxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIHBvc2l0aW9uOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2luc2lkZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9QT1NJVElPTi5JTlNJREU7XHJcbiAgICAgICAgICAgIGNhc2UgJ291dHNpZGUnOlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfUE9TSVRJT04uT1VUU0lERTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5SWRlbnRWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgY29uc3QgZW51bSBMSVNUX1NUWUxFX1RZUEUge1xyXG4gICAgTk9ORSA9IC0xLFxyXG4gICAgRElTQyA9IDAsXHJcbiAgICBDSVJDTEUgPSAxLFxyXG4gICAgU1FVQVJFID0gMixcclxuICAgIERFQ0lNQUwgPSAzLFxyXG4gICAgQ0pLX0RFQ0lNQUwgPSA0LFxyXG4gICAgREVDSU1BTF9MRUFESU5HX1pFUk8gPSA1LFxyXG4gICAgTE9XRVJfUk9NQU4gPSA2LFxyXG4gICAgVVBQRVJfUk9NQU4gPSA3LFxyXG4gICAgTE9XRVJfR1JFRUsgPSA4LFxyXG4gICAgTE9XRVJfQUxQSEEgPSA5LFxyXG4gICAgVVBQRVJfQUxQSEEgPSAxMCxcclxuICAgIEFSQUJJQ19JTkRJQyA9IDExLFxyXG4gICAgQVJNRU5JQU4gPSAxMixcclxuICAgIEJFTkdBTEkgPSAxMyxcclxuICAgIENBTUJPRElBTiA9IDE0LFxyXG4gICAgQ0pLX0VBUlRITFlfQlJBTkNIID0gMTUsXHJcbiAgICBDSktfSEVBVkVOTFlfU1RFTSA9IDE2LFxyXG4gICAgQ0pLX0lERU9HUkFQSElDID0gMTcsXHJcbiAgICBERVZBTkFHQVJJID0gMTgsXHJcbiAgICBFVEhJT1BJQ19OVU1FUklDID0gMTksXHJcbiAgICBHRU9SR0lBTiA9IDIwLFxyXG4gICAgR1VKQVJBVEkgPSAyMSxcclxuICAgIEdVUk1VS0hJID0gMjIsXHJcbiAgICBIRUJSRVcgPSAyMixcclxuICAgIEhJUkFHQU5BID0gMjMsXHJcbiAgICBISVJBR0FOQV9JUk9IQSA9IDI0LFxyXG4gICAgSkFQQU5FU0VfRk9STUFMID0gMjUsXHJcbiAgICBKQVBBTkVTRV9JTkZPUk1BTCA9IDI2LFxyXG4gICAgS0FOTkFEQSA9IDI3LFxyXG4gICAgS0FUQUtBTkEgPSAyOCxcclxuICAgIEtBVEFLQU5BX0lST0hBID0gMjksXHJcbiAgICBLSE1FUiA9IDMwLFxyXG4gICAgS09SRUFOX0hBTkdVTF9GT1JNQUwgPSAzMSxcclxuICAgIEtPUkVBTl9IQU5KQV9GT1JNQUwgPSAzMixcclxuICAgIEtPUkVBTl9IQU5KQV9JTkZPUk1BTCA9IDMzLFxyXG4gICAgTEFPID0gMzQsXHJcbiAgICBMT1dFUl9BUk1FTklBTiA9IDM1LFxyXG4gICAgTUFMQVlBTEFNID0gMzYsXHJcbiAgICBNT05HT0xJQU4gPSAzNyxcclxuICAgIE1ZQU5NQVIgPSAzOCxcclxuICAgIE9SSVlBID0gMzksXHJcbiAgICBQRVJTSUFOID0gNDAsXHJcbiAgICBTSU1QX0NISU5FU0VfRk9STUFMID0gNDEsXHJcbiAgICBTSU1QX0NISU5FU0VfSU5GT1JNQUwgPSA0MixcclxuICAgIFRBTUlMID0gNDMsXHJcbiAgICBURUxVR1UgPSA0NCxcclxuICAgIFRIQUkgPSA0NSxcclxuICAgIFRJQkVUQU4gPSA0NixcclxuICAgIFRSQURfQ0hJTkVTRV9GT1JNQUwgPSA0NyxcclxuICAgIFRSQURfQ0hJTkVTRV9JTkZPUk1BTCA9IDQ4LFxyXG4gICAgVVBQRVJfQVJNRU5JQU4gPSA0OSxcclxuICAgIERJU0NMT1NVUkVfT1BFTiA9IDUwLFxyXG4gICAgRElTQ0xPU1VSRV9DTE9TRUQgPSA1MVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbGlzdFN0eWxlVHlwZTogSVByb3BlcnR5SWRlbnRWYWx1ZURlc2NyaXB0b3I8TElTVF9TVFlMRV9UWVBFPiA9IHtcclxuICAgIG5hbWU6ICdsaXN0LXN0eWxlLXR5cGUnLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnbm9uZScsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuSURFTlRfVkFMVUUsXHJcbiAgICBwYXJzZTogKF9jb250ZXh0OiBDb250ZXh0LCB0eXBlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnZGlzYyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLkRJU0M7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NpcmNsZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLkNJUkNMRTtcclxuICAgICAgICAgICAgY2FzZSAnc3F1YXJlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuU1FVQVJFO1xyXG4gICAgICAgICAgICBjYXNlICdkZWNpbWFsJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuREVDSU1BTDtcclxuICAgICAgICAgICAgY2FzZSAnY2prLWRlY2ltYWwnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5DSktfREVDSU1BTDtcclxuICAgICAgICAgICAgY2FzZSAnZGVjaW1hbC1sZWFkaW5nLXplcm8nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5ERUNJTUFMX0xFQURJTkdfWkVSTztcclxuICAgICAgICAgICAgY2FzZSAnbG93ZXItcm9tYW4nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5MT1dFUl9ST01BTjtcclxuICAgICAgICAgICAgY2FzZSAndXBwZXItcm9tYW4nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5VUFBFUl9ST01BTjtcclxuICAgICAgICAgICAgY2FzZSAnbG93ZXItZ3JlZWsnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5MT1dFUl9HUkVFSztcclxuICAgICAgICAgICAgY2FzZSAnbG93ZXItYWxwaGEnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5MT1dFUl9BTFBIQTtcclxuICAgICAgICAgICAgY2FzZSAndXBwZXItYWxwaGEnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5VUFBFUl9BTFBIQTtcclxuICAgICAgICAgICAgY2FzZSAnYXJhYmljLWluZGljJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuQVJBQklDX0lORElDO1xyXG4gICAgICAgICAgICBjYXNlICdhcm1lbmlhbic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLkFSTUVOSUFOO1xyXG4gICAgICAgICAgICBjYXNlICdiZW5nYWxpJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuQkVOR0FMSTtcclxuICAgICAgICAgICAgY2FzZSAnY2FtYm9kaWFuJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuQ0FNQk9ESUFOO1xyXG4gICAgICAgICAgICBjYXNlICdjamstZWFydGhseS1icmFuY2gnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5DSktfRUFSVEhMWV9CUkFOQ0g7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Nqay1oZWF2ZW5seS1zdGVtJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuQ0pLX0hFQVZFTkxZX1NURU07XHJcbiAgICAgICAgICAgIGNhc2UgJ2Nqay1pZGVvZ3JhcGhpYyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLkNKS19JREVPR1JBUEhJQztcclxuICAgICAgICAgICAgY2FzZSAnZGV2YW5hZ2FyaSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLkRFVkFOQUdBUkk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2V0aGlvcGljLW51bWVyaWMnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5FVEhJT1BJQ19OVU1FUklDO1xyXG4gICAgICAgICAgICBjYXNlICdnZW9yZ2lhbic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLkdFT1JHSUFOO1xyXG4gICAgICAgICAgICBjYXNlICdndWphcmF0aSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLkdVSkFSQVRJO1xyXG4gICAgICAgICAgICBjYXNlICdndXJtdWtoaSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLkdVUk1VS0hJO1xyXG4gICAgICAgICAgICBjYXNlICdoZWJyZXcnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5IRUJSRVc7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hpcmFnYW5hJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuSElSQUdBTkE7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hpcmFnYW5hLWlyb2hhJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuSElSQUdBTkFfSVJPSEE7XHJcbiAgICAgICAgICAgIGNhc2UgJ2phcGFuZXNlLWZvcm1hbCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLkpBUEFORVNFX0ZPUk1BTDtcclxuICAgICAgICAgICAgY2FzZSAnamFwYW5lc2UtaW5mb3JtYWwnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5KQVBBTkVTRV9JTkZPUk1BTDtcclxuICAgICAgICAgICAgY2FzZSAna2FubmFkYSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLktBTk5BREE7XHJcbiAgICAgICAgICAgIGNhc2UgJ2thdGFrYW5hJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuS0FUQUtBTkE7XHJcbiAgICAgICAgICAgIGNhc2UgJ2thdGFrYW5hLWlyb2hhJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuS0FUQUtBTkFfSVJPSEE7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tobWVyJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuS0hNRVI7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tvcmVhbi1oYW5ndWwtZm9ybWFsJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuS09SRUFOX0hBTkdVTF9GT1JNQUw7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tvcmVhbi1oYW5qYS1mb3JtYWwnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5LT1JFQU5fSEFOSkFfRk9STUFMO1xyXG4gICAgICAgICAgICBjYXNlICdrb3JlYW4taGFuamEtaW5mb3JtYWwnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5LT1JFQU5fSEFOSkFfSU5GT1JNQUw7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xhbyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLkxBTztcclxuICAgICAgICAgICAgY2FzZSAnbG93ZXItYXJtZW5pYW4nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5MT1dFUl9BUk1FTklBTjtcclxuICAgICAgICAgICAgY2FzZSAnbWFsYXlhbGFtJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuTUFMQVlBTEFNO1xyXG4gICAgICAgICAgICBjYXNlICdtb25nb2xpYW4nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5NT05HT0xJQU47XHJcbiAgICAgICAgICAgIGNhc2UgJ215YW5tYXInOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5NWUFOTUFSO1xyXG4gICAgICAgICAgICBjYXNlICdvcml5YSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLk9SSVlBO1xyXG4gICAgICAgICAgICBjYXNlICdwZXJzaWFuJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuUEVSU0lBTjtcclxuICAgICAgICAgICAgY2FzZSAnc2ltcC1jaGluZXNlLWZvcm1hbCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLlNJTVBfQ0hJTkVTRV9GT1JNQUw7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NpbXAtY2hpbmVzZS1pbmZvcm1hbCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLlNJTVBfQ0hJTkVTRV9JTkZPUk1BTDtcclxuICAgICAgICAgICAgY2FzZSAndGFtaWwnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5UQU1JTDtcclxuICAgICAgICAgICAgY2FzZSAndGVsdWd1JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuVEVMVUdVO1xyXG4gICAgICAgICAgICBjYXNlICd0aGFpJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuVEhBSTtcclxuICAgICAgICAgICAgY2FzZSAndGliZXRhbic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLlRJQkVUQU47XHJcbiAgICAgICAgICAgIGNhc2UgJ3RyYWQtY2hpbmVzZS1mb3JtYWwnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5UUkFEX0NISU5FU0VfRk9STUFMO1xyXG4gICAgICAgICAgICBjYXNlICd0cmFkLWNoaW5lc2UtaW5mb3JtYWwnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5UUkFEX0NISU5FU0VfSU5GT1JNQUw7XHJcbiAgICAgICAgICAgIGNhc2UgJ3VwcGVyLWFybWVuaWFuJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBMSVNUX1NUWUxFX1RZUEUuVVBQRVJfQVJNRU5JQU47XHJcbiAgICAgICAgICAgIGNhc2UgJ2Rpc2Nsb3N1cmUtb3Blbic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLkRJU0NMT1NVUkVfT1BFTjtcclxuICAgICAgICAgICAgY2FzZSAnZGlzY2xvc3VyZS1jbG9zZWQnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExJU1RfU1RZTEVfVFlQRS5ESVNDTE9TVVJFX0NMT1NFRDtcclxuICAgICAgICAgICAgY2FzZSAnbm9uZSc6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTElTVF9TVFlMRV9UWVBFLk5PTkU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eVRva2VuVmFsdWVEZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZX0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcblxyXG5jb25zdCBtYXJnaW5Gb3JTaWRlID0gKHNpZGU6IHN0cmluZyk6IElQcm9wZXJ0eVRva2VuVmFsdWVEZXNjcmlwdG9yID0+ICh7XHJcbiAgICBuYW1lOiBgbWFyZ2luLSR7c2lkZX1gLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnMCcsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuVE9LRU5fVkFMVUVcclxufSk7XHJcblxyXG5leHBvcnQgY29uc3QgbWFyZ2luVG9wOiBJUHJvcGVydHlUb2tlblZhbHVlRGVzY3JpcHRvciA9IG1hcmdpbkZvclNpZGUoJ3RvcCcpO1xyXG5leHBvcnQgY29uc3QgbWFyZ2luUmlnaHQ6IElQcm9wZXJ0eVRva2VuVmFsdWVEZXNjcmlwdG9yID0gbWFyZ2luRm9yU2lkZSgncmlnaHQnKTtcclxuZXhwb3J0IGNvbnN0IG1hcmdpbkJvdHRvbTogSVByb3BlcnR5VG9rZW5WYWx1ZURlc2NyaXB0b3IgPSBtYXJnaW5Gb3JTaWRlKCdib3R0b20nKTtcclxuZXhwb3J0IGNvbnN0IG1hcmdpbkxlZnQ6IElQcm9wZXJ0eVRva2VuVmFsdWVEZXNjcmlwdG9yID0gbWFyZ2luRm9yU2lkZSgnbGVmdCcpO1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eUxpc3REZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZX0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q1NTVmFsdWUsIGlzSWRlbnRUb2tlbn0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuZXhwb3J0IGNvbnN0IGVudW0gT1ZFUkZMT1cge1xyXG4gICAgVklTSUJMRSA9IDAsXHJcbiAgICBISURERU4gPSAxLFxyXG4gICAgU0NST0xMID0gMixcclxuICAgIENMSVAgPSAzLFxyXG4gICAgQVVUTyA9IDRcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IG92ZXJmbG93OiBJUHJvcGVydHlMaXN0RGVzY3JpcHRvcjxPVkVSRkxPV1tdPiA9IHtcclxuICAgIG5hbWU6ICdvdmVyZmxvdycsXHJcbiAgICBpbml0aWFsVmFsdWU6ICd2aXNpYmxlJyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5MSVNULFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgdG9rZW5zOiBDU1NWYWx1ZVtdKTogT1ZFUkZMT1dbXSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRva2Vucy5maWx0ZXIoaXNJZGVudFRva2VuKS5tYXAoKG92ZXJmbG93KSA9PiB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3ZlcmZsb3cudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2hpZGRlbic6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9WRVJGTE9XLkhJRERFTjtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3Njcm9sbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9WRVJGTE9XLlNDUk9MTDtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2NsaXAnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPVkVSRkxPVy5DTElQO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnYXV0byc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9WRVJGTE9XLkFVVE87XHJcbiAgICAgICAgICAgICAgICBjYXNlICd2aXNpYmxlJzpcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9WRVJGTE9XLlZJU0lCTEU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtJUHJvcGVydHlJZGVudFZhbHVlRGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcbmV4cG9ydCBjb25zdCBlbnVtIE9WRVJGTE9XX1dSQVAge1xyXG4gICAgTk9STUFMID0gJ25vcm1hbCcsXHJcbiAgICBCUkVBS19XT1JEID0gJ2JyZWFrLXdvcmQnXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBvdmVyZmxvd1dyYXA6IElQcm9wZXJ0eUlkZW50VmFsdWVEZXNjcmlwdG9yPE9WRVJGTE9XX1dSQVA+ID0ge1xyXG4gICAgbmFtZTogJ292ZXJmbG93LXdyYXAnLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnbm9ybWFsJyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5JREVOVF9WQUxVRSxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIG92ZXJmbG93OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKG92ZXJmbG93KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JyZWFrLXdvcmQnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9WRVJGTE9XX1dSQVAuQlJFQUtfV09SRDtcclxuICAgICAgICAgICAgY2FzZSAnbm9ybWFsJzpcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBPVkVSRkxPV19XUkFQLk5PUk1BTDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5VHlwZVZhbHVlRGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5cclxuY29uc3QgcGFkZGluZ0ZvclNpZGUgPSAoc2lkZTogc3RyaW5nKTogSVByb3BlcnR5VHlwZVZhbHVlRGVzY3JpcHRvciA9PiAoe1xyXG4gICAgbmFtZTogYHBhZGRpbmctJHtzaWRlfWAsXHJcbiAgICBpbml0aWFsVmFsdWU6ICcwJyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5UWVBFX1ZBTFVFLFxyXG4gICAgZm9ybWF0OiAnbGVuZ3RoLXBlcmNlbnRhZ2UnXHJcbn0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBhZGRpbmdUb3A6IElQcm9wZXJ0eVR5cGVWYWx1ZURlc2NyaXB0b3IgPSBwYWRkaW5nRm9yU2lkZSgndG9wJyk7XHJcbmV4cG9ydCBjb25zdCBwYWRkaW5nUmlnaHQ6IElQcm9wZXJ0eVR5cGVWYWx1ZURlc2NyaXB0b3IgPSBwYWRkaW5nRm9yU2lkZSgncmlnaHQnKTtcclxuZXhwb3J0IGNvbnN0IHBhZGRpbmdCb3R0b206IElQcm9wZXJ0eVR5cGVWYWx1ZURlc2NyaXB0b3IgPSBwYWRkaW5nRm9yU2lkZSgnYm90dG9tJyk7XHJcbmV4cG9ydCBjb25zdCBwYWRkaW5nTGVmdDogSVByb3BlcnR5VHlwZVZhbHVlRGVzY3JpcHRvciA9IHBhZGRpbmdGb3JTaWRlKCdsZWZ0Jyk7XHJcbiIsImltcG9ydCB7SVByb3BlcnR5SWRlbnRWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgY29uc3QgZW51bSBURVhUX0FMSUdOIHtcclxuICAgIExFRlQgPSAwLFxyXG4gICAgQ0VOVEVSID0gMSxcclxuICAgIFJJR0hUID0gMlxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdGV4dEFsaWduOiBJUHJvcGVydHlJZGVudFZhbHVlRGVzY3JpcHRvcjxURVhUX0FMSUdOPiA9IHtcclxuICAgIG5hbWU6ICd0ZXh0LWFsaWduJyxcclxuICAgIGluaXRpYWxWYWx1ZTogJ2xlZnQnLFxyXG4gICAgcHJlZml4OiBmYWxzZSxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLklERU5UX1ZBTFVFLFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgdGV4dEFsaWduOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHRleHRBbGlnbikge1xyXG4gICAgICAgICAgICBjYXNlICdyaWdodCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gVEVYVF9BTElHTi5SSUdIVDtcclxuICAgICAgICAgICAgY2FzZSAnY2VudGVyJzpcclxuICAgICAgICAgICAgY2FzZSAnanVzdGlmeSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gVEVYVF9BTElHTi5DRU5URVI7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFRFWFRfQUxJR04uTEVGVDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5SWRlbnRWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgY29uc3QgZW51bSBQT1NJVElPTiB7XHJcbiAgICBTVEFUSUMgPSAwLFxyXG4gICAgUkVMQVRJVkUgPSAxLFxyXG4gICAgQUJTT0xVVEUgPSAyLFxyXG4gICAgRklYRUQgPSAzLFxyXG4gICAgU1RJQ0tZID0gNFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcG9zaXRpb246IElQcm9wZXJ0eUlkZW50VmFsdWVEZXNjcmlwdG9yPFBPU0lUSU9OPiA9IHtcclxuICAgIG5hbWU6ICdwb3NpdGlvbicsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdzdGF0aWMnLFxyXG4gICAgcHJlZml4OiBmYWxzZSxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLklERU5UX1ZBTFVFLFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgcG9zaXRpb246IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAocG9zaXRpb24pIHtcclxuICAgICAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBPU0lUSU9OLlJFTEFUSVZFO1xyXG4gICAgICAgICAgICBjYXNlICdhYnNvbHV0ZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUE9TSVRJT04uQUJTT0xVVEU7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZpeGVkJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBQT1NJVElPTi5GSVhFRDtcclxuICAgICAgICAgICAgY2FzZSAnc3RpY2t5JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBQT1NJVElPTi5TVElDS1k7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUE9TSVRJT04uU1RBVElDO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge1Byb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLCBJUHJvcGVydHlMaXN0RGVzY3JpcHRvcn0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q1NTVmFsdWUsIGlzSWRlbnRXaXRoVmFsdWUsIHBhcnNlRnVuY3Rpb25BcmdzfSBmcm9tICcuLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtaRVJPX0xFTkdUSH0gZnJvbSAnLi4vdHlwZXMvbGVuZ3RoLXBlcmNlbnRhZ2UnO1xyXG5pbXBvcnQge2NvbG9yLCBDb2xvciwgQ09MT1JTfSBmcm9tICcuLi90eXBlcy9jb2xvcic7XHJcbmltcG9ydCB7aXNMZW5ndGgsIExlbmd0aH0gZnJvbSAnLi4vdHlwZXMvbGVuZ3RoJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5cclxuZXhwb3J0IHR5cGUgVGV4dFNoYWRvdyA9IFRleHRTaGFkb3dJdGVtW107XHJcbmludGVyZmFjZSBUZXh0U2hhZG93SXRlbSB7XHJcbiAgICBjb2xvcjogQ29sb3I7XHJcbiAgICBvZmZzZXRYOiBMZW5ndGg7XHJcbiAgICBvZmZzZXRZOiBMZW5ndGg7XHJcbiAgICBibHVyOiBMZW5ndGg7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB0ZXh0U2hhZG93OiBJUHJvcGVydHlMaXN0RGVzY3JpcHRvcjxUZXh0U2hhZG93PiA9IHtcclxuICAgIG5hbWU6ICd0ZXh0LXNoYWRvdycsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdub25lJyxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLkxJU1QsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgcGFyc2U6IChjb250ZXh0OiBDb250ZXh0LCB0b2tlbnM6IENTU1ZhbHVlW10pOiBUZXh0U2hhZG93ID0+IHtcclxuICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMSAmJiBpc0lkZW50V2l0aFZhbHVlKHRva2Vuc1swXSwgJ25vbmUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkFyZ3ModG9rZW5zKS5tYXAoKHZhbHVlczogQ1NTVmFsdWVbXSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzaGFkb3c6IFRleHRTaGFkb3dJdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5UUkFOU1BBUkVOVCxcclxuICAgICAgICAgICAgICAgIG9mZnNldFg6IFpFUk9fTEVOR1RILFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WTogWkVST19MRU5HVEgsXHJcbiAgICAgICAgICAgICAgICBibHVyOiBaRVJPX0xFTkdUSFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBsZXQgYyA9IDA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHZhbHVlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0xlbmd0aCh0b2tlbikpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3cub2Zmc2V0WCA9IHRva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3cub2Zmc2V0WSA9IHRva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvdy5ibHVyID0gdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGMrKztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93LmNvbG9yID0gY29sb3IucGFyc2UoY29udGV4dCwgdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzaGFkb3c7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5SWRlbnRWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgY29uc3QgZW51bSBURVhUX1RSQU5TRk9STSB7XHJcbiAgICBOT05FID0gMCxcclxuICAgIExPV0VSQ0FTRSA9IDEsXHJcbiAgICBVUFBFUkNBU0UgPSAyLFxyXG4gICAgQ0FQSVRBTElaRSA9IDNcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHRleHRUcmFuc2Zvcm06IElQcm9wZXJ0eUlkZW50VmFsdWVEZXNjcmlwdG9yPFRFWFRfVFJBTlNGT1JNPiA9IHtcclxuICAgIG5hbWU6ICd0ZXh0LXRyYW5zZm9ybScsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdub25lJyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5JREVOVF9WQUxVRSxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIHRleHRUcmFuc2Zvcm06IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAodGV4dFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICBjYXNlICd1cHBlcmNhc2UnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFRFWFRfVFJBTlNGT1JNLlVQUEVSQ0FTRTtcclxuICAgICAgICAgICAgY2FzZSAnbG93ZXJjYXNlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBURVhUX1RSQU5TRk9STS5MT1dFUkNBU0U7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NhcGl0YWxpemUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFRFWFRfVFJBTlNGT1JNLkNBUElUQUxJWkU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gVEVYVF9UUkFOU0ZPUk0uTk9ORTtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtJUHJvcGVydHlWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDU1NWYWx1ZX0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7TnVtYmVyVmFsdWVUb2tlbiwgVG9rZW5UeXBlfSBmcm9tICcuLi9zeW50YXgvdG9rZW5pemVyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgdHlwZSBNYXRyaXggPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XHJcbmV4cG9ydCB0eXBlIFRyYW5zZm9ybSA9IE1hdHJpeCB8IG51bGw7XHJcblxyXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtOiBJUHJvcGVydHlWYWx1ZURlc2NyaXB0b3I8VHJhbnNmb3JtPiA9IHtcclxuICAgIG5hbWU6ICd0cmFuc2Zvcm0nLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnbm9uZScsXHJcbiAgICBwcmVmaXg6IHRydWUsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5WQUxVRSxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIHRva2VuOiBDU1NWYWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuSURFTlRfVE9LRU4gJiYgdG9rZW4udmFsdWUgPT09ICdub25lJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuRlVOQ1RJT04pIHtcclxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtRnVuY3Rpb24gPSBTVVBQT1JURURfVFJBTlNGT1JNX0ZVTkNUSU9OU1t0b2tlbi5uYW1lXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1GdW5jdGlvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXR0ZW1wdGluZyB0byBwYXJzZSBhbiB1bnN1cHBvcnRlZCB0cmFuc2Zvcm0gZnVuY3Rpb24gXCIke3Rva2VuLm5hbWV9XCJgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtRnVuY3Rpb24odG9rZW4udmFsdWVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59O1xyXG5cclxuY29uc3QgbWF0cml4ID0gKGFyZ3M6IENTU1ZhbHVlW10pOiBUcmFuc2Zvcm0gPT4ge1xyXG4gICAgY29uc3QgdmFsdWVzID0gYXJncy5maWx0ZXIoKGFyZykgPT4gYXJnLnR5cGUgPT09IFRva2VuVHlwZS5OVU1CRVJfVE9LRU4pLm1hcCgoYXJnOiBOdW1iZXJWYWx1ZVRva2VuKSA9PiBhcmcubnVtYmVyKTtcclxuXHJcbiAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA9PT0gNiA/ICh2YWx1ZXMgYXMgTWF0cml4KSA6IG51bGw7XHJcbn07XHJcblxyXG4vLyBkb2Vzbid0IHN1cHBvcnQgM0QgdHJhbnNmb3JtcyBhdCB0aGUgbW9tZW50XHJcbmNvbnN0IG1hdHJpeDNkID0gKGFyZ3M6IENTU1ZhbHVlW10pOiBUcmFuc2Zvcm0gPT4ge1xyXG4gICAgY29uc3QgdmFsdWVzID0gYXJncy5maWx0ZXIoKGFyZykgPT4gYXJnLnR5cGUgPT09IFRva2VuVHlwZS5OVU1CRVJfVE9LRU4pLm1hcCgoYXJnOiBOdW1iZXJWYWx1ZVRva2VuKSA9PiBhcmcubnVtYmVyKTtcclxuXHJcbiAgICBjb25zdCBbYTEsIGIxLCB7fSwge30sIGEyLCBiMiwge30sIHt9LCB7fSwge30sIHt9LCB7fSwgYTQsIGI0LCB7fSwge31dID0gdmFsdWVzO1xyXG5cclxuICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoID09PSAxNiA/IFthMSwgYjEsIGEyLCBiMiwgYTQsIGI0XSA6IG51bGw7XHJcbn07XHJcblxyXG5jb25zdCBTVVBQT1JURURfVFJBTlNGT1JNX0ZVTkNUSU9OUzoge1xyXG4gICAgW2tleTogc3RyaW5nXTogKGFyZ3M6IENTU1ZhbHVlW10pID0+IFRyYW5zZm9ybTtcclxufSA9IHtcclxuICAgIG1hdHJpeDogbWF0cml4LFxyXG4gICAgbWF0cml4M2Q6IG1hdHJpeDNkXHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5TGlzdERlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDU1NWYWx1ZX0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7aXNMZW5ndGhQZXJjZW50YWdlLCBMZW5ndGhQZXJjZW50YWdlfSBmcm9tICcuLi90eXBlcy9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmltcG9ydCB7RkxBR19JTlRFR0VSLCBUb2tlblR5cGV9IGZyb20gJy4uL3N5bnRheC90b2tlbml6ZXInO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcbmV4cG9ydCB0eXBlIFRyYW5zZm9ybU9yaWdpbiA9IFtMZW5ndGhQZXJjZW50YWdlLCBMZW5ndGhQZXJjZW50YWdlXTtcclxuXHJcbmNvbnN0IERFRkFVTFRfVkFMVUU6IExlbmd0aFBlcmNlbnRhZ2UgPSB7XHJcbiAgICB0eXBlOiBUb2tlblR5cGUuUEVSQ0VOVEFHRV9UT0tFTixcclxuICAgIG51bWJlcjogNTAsXHJcbiAgICBmbGFnczogRkxBR19JTlRFR0VSXHJcbn07XHJcbmNvbnN0IERFRkFVTFQ6IFRyYW5zZm9ybU9yaWdpbiA9IFtERUZBVUxUX1ZBTFVFLCBERUZBVUxUX1ZBTFVFXTtcclxuXHJcbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1PcmlnaW46IElQcm9wZXJ0eUxpc3REZXNjcmlwdG9yPFRyYW5zZm9ybU9yaWdpbj4gPSB7XHJcbiAgICBuYW1lOiAndHJhbnNmb3JtLW9yaWdpbicsXHJcbiAgICBpbml0aWFsVmFsdWU6ICc1MCUgNTAlJyxcclxuICAgIHByZWZpeDogdHJ1ZSxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLkxJU1QsXHJcbiAgICBwYXJzZTogKF9jb250ZXh0OiBDb250ZXh0LCB0b2tlbnM6IENTU1ZhbHVlW10pID0+IHtcclxuICAgICAgICBjb25zdCBvcmlnaW5zOiBMZW5ndGhQZXJjZW50YWdlW10gPSB0b2tlbnMuZmlsdGVyKGlzTGVuZ3RoUGVyY2VudGFnZSk7XHJcblxyXG4gICAgICAgIGlmIChvcmlnaW5zLmxlbmd0aCAhPT0gMikge1xyXG4gICAgICAgICAgICByZXR1cm4gREVGQVVMVDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbb3JpZ2luc1swXSwgb3JpZ2luc1sxXV07XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5SWRlbnRWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgY29uc3QgZW51bSBWSVNJQklMSVRZIHtcclxuICAgIFZJU0lCTEUgPSAwLFxyXG4gICAgSElEREVOID0gMSxcclxuICAgIENPTExBUFNFID0gMlxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdmlzaWJpbGl0eTogSVByb3BlcnR5SWRlbnRWYWx1ZURlc2NyaXB0b3I8VklTSUJJTElUWT4gPSB7XHJcbiAgICBuYW1lOiAndmlzaWJsZScsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdub25lJyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5JREVOVF9WQUxVRSxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIHZpc2liaWxpdHk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAodmlzaWJpbGl0eSkge1xyXG4gICAgICAgICAgICBjYXNlICdoaWRkZW4nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFZJU0lCSUxJVFkuSElEREVOO1xyXG4gICAgICAgICAgICBjYXNlICdjb2xsYXBzZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gVklTSUJJTElUWS5DT0xMQVBTRTtcclxuICAgICAgICAgICAgY2FzZSAndmlzaWJsZSc6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gVklTSUJJTElUWS5WSVNJQkxFO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtJUHJvcGVydHlJZGVudFZhbHVlRGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcbmV4cG9ydCBlbnVtIFdPUkRfQlJFQUsge1xyXG4gICAgTk9STUFMID0gJ25vcm1hbCcsXHJcbiAgICBCUkVBS19BTEwgPSAnYnJlYWstYWxsJyxcclxuICAgIEtFRVBfQUxMID0gJ2tlZXAtYWxsJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgd29yZEJyZWFrOiBJUHJvcGVydHlJZGVudFZhbHVlRGVzY3JpcHRvcjxXT1JEX0JSRUFLPiA9IHtcclxuICAgIG5hbWU6ICd3b3JkLWJyZWFrJyxcclxuICAgIGluaXRpYWxWYWx1ZTogJ25vcm1hbCcsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuSURFTlRfVkFMVUUsXHJcbiAgICBwYXJzZTogKF9jb250ZXh0OiBDb250ZXh0LCB3b3JkQnJlYWs6IHN0cmluZyk6IFdPUkRfQlJFQUsgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAod29yZEJyZWFrKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2JyZWFrLWFsbCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gV09SRF9CUkVBSy5CUkVBS19BTEw7XHJcbiAgICAgICAgICAgIGNhc2UgJ2tlZXAtYWxsJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBXT1JEX0JSRUFLLktFRVBfQUxMO1xyXG4gICAgICAgICAgICBjYXNlICdub3JtYWwnOlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFdPUkRfQlJFQUsuTk9STUFMO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtJUHJvcGVydHlWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDU1NWYWx1ZSwgaXNOdW1iZXJUb2tlbn0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7VG9rZW5UeXBlfSBmcm9tICcuLi9zeW50YXgvdG9rZW5pemVyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5cclxuaW50ZXJmYWNlIHpJbmRleCB7XHJcbiAgICBvcmRlcjogbnVtYmVyO1xyXG4gICAgYXV0bzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHpJbmRleDogSVByb3BlcnR5VmFsdWVEZXNjcmlwdG9yPHpJbmRleD4gPSB7XHJcbiAgICBuYW1lOiAnei1pbmRleCcsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdhdXRvJyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5WQUxVRSxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIHRva2VuOiBDU1NWYWx1ZSk6IHpJbmRleCA9PiB7XHJcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5JREVOVF9UT0tFTikge1xyXG4gICAgICAgICAgICByZXR1cm4ge2F1dG86IHRydWUsIG9yZGVyOiAwfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc051bWJlclRva2VuKHRva2VuKSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge2F1dG86IGZhbHNlLCBvcmRlcjogdG9rZW4ubnVtYmVyfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB6LWluZGV4IG51bWJlciBwYXJzZWRgKTtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtDU1NWYWx1ZX0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7VG9rZW5UeXBlfSBmcm9tICcuLi9zeW50YXgvdG9rZW5pemVyJztcclxuaW1wb3J0IHtJVHlwZURlc2NyaXB0b3J9IGZyb20gJy4uL0lUeXBlRGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBjb25zdCB0aW1lOiBJVHlwZURlc2NyaXB0b3I8bnVtYmVyPiA9IHtcclxuICAgIG5hbWU6ICd0aW1lJyxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIHZhbHVlOiBDU1NWYWx1ZSk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09IFRva2VuVHlwZS5ESU1FTlNJT05fVE9LRU4pIHtcclxuICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS51bml0LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxMDAwICogdmFsdWUubnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnbXMnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5udW1iZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdGltZSB0eXBlYCk7XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5VmFsdWVEZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZX0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q1NTVmFsdWUsIGlzTnVtYmVyVG9rZW59IGZyb20gJy4uL3N5bnRheC9wYXJzZXInO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcbmV4cG9ydCBjb25zdCBvcGFjaXR5OiBJUHJvcGVydHlWYWx1ZURlc2NyaXB0b3I8bnVtYmVyPiA9IHtcclxuICAgIG5hbWU6ICdvcGFjaXR5JyxcclxuICAgIGluaXRpYWxWYWx1ZTogJzEnLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuVkFMVUUsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgdG9rZW46IENTU1ZhbHVlKTogbnVtYmVyID0+IHtcclxuICAgICAgICBpZiAoaXNOdW1iZXJUb2tlbih0b2tlbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRva2VuLm51bWJlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5VHlwZVZhbHVlRGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5cclxuZXhwb3J0IGNvbnN0IHRleHREZWNvcmF0aW9uQ29sb3I6IElQcm9wZXJ0eVR5cGVWYWx1ZURlc2NyaXB0b3IgPSB7XHJcbiAgICBuYW1lOiBgdGV4dC1kZWNvcmF0aW9uLWNvbG9yYCxcclxuICAgIGluaXRpYWxWYWx1ZTogJ3RyYW5zcGFyZW50JyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5UWVBFX1ZBTFVFLFxyXG4gICAgZm9ybWF0OiAnY29sb3InXHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5TGlzdERlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDU1NWYWx1ZSwgaXNJZGVudFRva2VufSBmcm9tICcuLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gVEVYVF9ERUNPUkFUSU9OX0xJTkUge1xyXG4gICAgTk9ORSA9IDAsXHJcbiAgICBVTkRFUkxJTkUgPSAxLFxyXG4gICAgT1ZFUkxJTkUgPSAyLFxyXG4gICAgTElORV9USFJPVUdIID0gMyxcclxuICAgIEJMSU5LID0gNFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBUZXh0RGVjb3JhdGlvbkxpbmUgPSBURVhUX0RFQ09SQVRJT05fTElORVtdO1xyXG5cclxuZXhwb3J0IGNvbnN0IHRleHREZWNvcmF0aW9uTGluZTogSVByb3BlcnR5TGlzdERlc2NyaXB0b3I8VGV4dERlY29yYXRpb25MaW5lPiA9IHtcclxuICAgIG5hbWU6ICd0ZXh0LWRlY29yYXRpb24tbGluZScsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdub25lJyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5MSVNULFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgdG9rZW5zOiBDU1NWYWx1ZVtdKTogVGV4dERlY29yYXRpb25MaW5lID0+IHtcclxuICAgICAgICByZXR1cm4gdG9rZW5zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoaXNJZGVudFRva2VuKVxyXG4gICAgICAgICAgICAubWFwKCh0b2tlbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3VuZGVybGluZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBURVhUX0RFQ09SQVRJT05fTElORS5VTkRFUkxJTkU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnb3ZlcmxpbmUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVEVYVF9ERUNPUkFUSU9OX0xJTkUuT1ZFUkxJTkU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGluZS10aHJvdWdoJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRFWFRfREVDT1JBVElPTl9MSU5FLkxJTkVfVEhST1VHSDtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdub25lJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRFWFRfREVDT1JBVElPTl9MSU5FLkJMSU5LO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFRFWFRfREVDT1JBVElPTl9MSU5FLk5PTkU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUgIT09IFRFWFRfREVDT1JBVElPTl9MSU5FLk5PTkUpO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eUxpc3REZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZX0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q1NTVmFsdWV9IGZyb20gJy4uL3N5bnRheC9wYXJzZXInO1xyXG5pbXBvcnQge1Rva2VuVHlwZX0gZnJvbSAnLi4vc3ludGF4L3Rva2VuaXplcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCB0eXBlIEZPTlRfRkFNSUxZID0gc3RyaW5nO1xyXG5cclxuZXhwb3J0IHR5cGUgRm9udEZhbWlseSA9IEZPTlRfRkFNSUxZW107XHJcblxyXG5leHBvcnQgY29uc3QgZm9udEZhbWlseTogSVByb3BlcnR5TGlzdERlc2NyaXB0b3I8Rm9udEZhbWlseT4gPSB7XHJcbiAgICBuYW1lOiBgZm9udC1mYW1pbHlgLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnJyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5MSVNULFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgdG9rZW5zOiBDU1NWYWx1ZVtdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYWNjdW11bGF0b3I6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgY29uc3QgcmVzdWx0czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHtcclxuICAgICAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5JREVOVF9UT0tFTjpcclxuICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLlNUUklOR19UT0tFTjpcclxuICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvci5wdXNoKHRva2VuLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLk5VTUJFUl9UT0tFTjpcclxuICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvci5wdXNoKHRva2VuLm51bWJlci50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkNPTU1BX1RPS0VOOlxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChhY2N1bXVsYXRvci5qb2luKCcgJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoYWNjdW11bGF0b3IubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChhY2N1bXVsYXRvci5qb2luKCcgJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gKHJlc3VsdC5pbmRleE9mKCcgJykgPT09IC0xID8gcmVzdWx0IDogYCcke3Jlc3VsdH0nYCkpO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eVR5cGVWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuXHJcbmV4cG9ydCBjb25zdCBmb250U2l6ZTogSVByb3BlcnR5VHlwZVZhbHVlRGVzY3JpcHRvciA9IHtcclxuICAgIG5hbWU6IGBmb250LXNpemVgLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnMCcsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuVFlQRV9WQUxVRSxcclxuICAgIGZvcm1hdDogJ2xlbmd0aCdcclxufTtcclxuIiwiaW1wb3J0IHtJUHJvcGVydHlWYWx1ZURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDU1NWYWx1ZSwgaXNJZGVudFRva2VuLCBpc051bWJlclRva2VufSBmcm9tICcuLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgY29uc3QgZm9udFdlaWdodDogSVByb3BlcnR5VmFsdWVEZXNjcmlwdG9yPG51bWJlcj4gPSB7XHJcbiAgICBuYW1lOiAnZm9udC13ZWlnaHQnLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnbm9ybWFsJyxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLlZBTFVFLFxyXG4gICAgcHJlZml4OiBmYWxzZSxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIHRva2VuOiBDU1NWYWx1ZSk6IG51bWJlciA9PiB7XHJcbiAgICAgICAgaWYgKGlzTnVtYmVyVG9rZW4odG9rZW4pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b2tlbi5udW1iZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNJZGVudFRva2VuKHRva2VuKSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdib2xkJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gNzAwO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnbm9ybWFsJzpcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQwMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDQwMDtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtJUHJvcGVydHlMaXN0RGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NTU1ZhbHVlLCBpc0lkZW50VG9rZW59IGZyb20gJy4uL3N5bnRheC9wYXJzZXInO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcbmV4cG9ydCBjb25zdCBmb250VmFyaWFudDogSVByb3BlcnR5TGlzdERlc2NyaXB0b3I8c3RyaW5nW10+ID0ge1xyXG4gICAgbmFtZTogJ2ZvbnQtdmFyaWFudCcsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdub25lJyxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLkxJU1QsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgdG9rZW5zOiBDU1NWYWx1ZVtdKTogc3RyaW5nW10gPT4ge1xyXG4gICAgICAgIHJldHVybiB0b2tlbnMuZmlsdGVyKGlzSWRlbnRUb2tlbikubWFwKCh0b2tlbikgPT4gdG9rZW4udmFsdWUpO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eUlkZW50VmFsdWVEZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZX0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuZXhwb3J0IGNvbnN0IGVudW0gRk9OVF9TVFlMRSB7XHJcbiAgICBOT1JNQUwgPSAnbm9ybWFsJyxcclxuICAgIElUQUxJQyA9ICdpdGFsaWMnLFxyXG4gICAgT0JMSVFVRSA9ICdvYmxpcXVlJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZm9udFN0eWxlOiBJUHJvcGVydHlJZGVudFZhbHVlRGVzY3JpcHRvcjxGT05UX1NUWUxFPiA9IHtcclxuICAgIG5hbWU6ICdmb250LXN0eWxlJyxcclxuICAgIGluaXRpYWxWYWx1ZTogJ25vcm1hbCcsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuSURFTlRfVkFMVUUsXHJcbiAgICBwYXJzZTogKF9jb250ZXh0OiBDb250ZXh0LCBvdmVyZmxvdzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChvdmVyZmxvdykge1xyXG4gICAgICAgICAgICBjYXNlICdvYmxpcXVlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBGT05UX1NUWUxFLk9CTElRVUU7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0YWxpYyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRk9OVF9TVFlMRS5JVEFMSUM7XHJcbiAgICAgICAgICAgIGNhc2UgJ25vcm1hbCc6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRk9OVF9TVFlMRS5OT1JNQUw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4iLCJleHBvcnQgY29uc3QgY29udGFpbnMgPSAoYml0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiBib29sZWFuID0+IChiaXQgJiB2YWx1ZSkgIT09IDA7XHJcbiIsImltcG9ydCB7VG9rZW5UeXBlfSBmcm9tICcuLi9zeW50YXgvdG9rZW5pemVyJztcclxuaW1wb3J0IHtJUHJvcGVydHlMaXN0RGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NTU1ZhbHVlfSBmcm9tICcuLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5cclxuZXhwb3J0IHR5cGUgQ29udGVudCA9IENTU1ZhbHVlW107XHJcblxyXG5leHBvcnQgY29uc3QgY29udGVudDogSVByb3BlcnR5TGlzdERlc2NyaXB0b3I8Q29udGVudD4gPSB7XHJcbiAgICBuYW1lOiAnY29udGVudCcsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdub25lJyxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLkxJU1QsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgcGFyc2U6IChfY29udGV4dDogQ29udGV4dCwgdG9rZW5zOiBDU1NWYWx1ZVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlyc3QgPSB0b2tlbnNbMF07XHJcblxyXG4gICAgICAgIGlmIChmaXJzdC50eXBlID09PSBUb2tlblR5cGUuSURFTlRfVE9LRU4gJiYgZmlyc3QudmFsdWUgPT09ICdub25lJykge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdG9rZW5zO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eUxpc3REZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZX0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q1NTVmFsdWUsIGlzTnVtYmVyVG9rZW4sIG5vbldoaXRlU3BhY2V9IGZyb20gJy4uL3N5bnRheC9wYXJzZXInO1xyXG5pbXBvcnQge1Rva2VuVHlwZX0gZnJvbSAnLi4vc3ludGF4L3Rva2VuaXplcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ09VTlRFUl9JTkNSRU1FTlQge1xyXG4gICAgY291bnRlcjogc3RyaW5nO1xyXG4gICAgaW5jcmVtZW50OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIENvdW50ZXJJbmNyZW1lbnQgPSBDT1VOVEVSX0lOQ1JFTUVOVFtdIHwgbnVsbDtcclxuXHJcbmV4cG9ydCBjb25zdCBjb3VudGVySW5jcmVtZW50OiBJUHJvcGVydHlMaXN0RGVzY3JpcHRvcjxDb3VudGVySW5jcmVtZW50PiA9IHtcclxuICAgIG5hbWU6ICdjb3VudGVyLWluY3JlbWVudCcsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdub25lJyxcclxuICAgIHByZWZpeDogdHJ1ZSxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLkxJU1QsXHJcbiAgICBwYXJzZTogKF9jb250ZXh0OiBDb250ZXh0LCB0b2tlbnM6IENTU1ZhbHVlW10pID0+IHtcclxuICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0ID0gdG9rZW5zWzBdO1xyXG5cclxuICAgICAgICBpZiAoZmlyc3QudHlwZSA9PT0gVG9rZW5UeXBlLklERU5UX1RPS0VOICYmIGZpcnN0LnZhbHVlID09PSAnbm9uZScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpbmNyZW1lbnRzID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB0b2tlbnMuZmlsdGVyKG5vbldoaXRlU3BhY2UpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcmVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ZXIgPSBmaWx0ZXJlZFtpXTtcclxuICAgICAgICAgICAgY29uc3QgbmV4dCA9IGZpbHRlcmVkW2kgKyAxXTtcclxuICAgICAgICAgICAgaWYgKGNvdW50ZXIudHlwZSA9PT0gVG9rZW5UeXBlLklERU5UX1RPS0VOKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSBuZXh0ICYmIGlzTnVtYmVyVG9rZW4obmV4dCkgPyBuZXh0Lm51bWJlciA6IDE7XHJcbiAgICAgICAgICAgICAgICBpbmNyZW1lbnRzLnB1c2goe2NvdW50ZXI6IGNvdW50ZXIudmFsdWUsIGluY3JlbWVudH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaW5jcmVtZW50cztcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtJUHJvcGVydHlMaXN0RGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NTU1ZhbHVlLCBpc0lkZW50VG9rZW4sIGlzTnVtYmVyVG9rZW4sIG5vbldoaXRlU3BhY2V9IGZyb20gJy4uL3N5bnRheC9wYXJzZXInO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENPVU5URVJfUkVTRVQge1xyXG4gICAgY291bnRlcjogc3RyaW5nO1xyXG4gICAgcmVzZXQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQ291bnRlclJlc2V0ID0gQ09VTlRFUl9SRVNFVFtdO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvdW50ZXJSZXNldDogSVByb3BlcnR5TGlzdERlc2NyaXB0b3I8Q291bnRlclJlc2V0PiA9IHtcclxuICAgIG5hbWU6ICdjb3VudGVyLXJlc2V0JyxcclxuICAgIGluaXRpYWxWYWx1ZTogJ25vbmUnLFxyXG4gICAgcHJlZml4OiB0cnVlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuTElTVCxcclxuICAgIHBhcnNlOiAoX2NvbnRleHQ6IENvbnRleHQsIHRva2VuczogQ1NTVmFsdWVbXSkgPT4ge1xyXG4gICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc2V0cyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gdG9rZW5zLmZpbHRlcihub25XaGl0ZVNwYWNlKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJlZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjb3VudGVyID0gZmlsdGVyZWRbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBmaWx0ZXJlZFtpICsgMV07XHJcbiAgICAgICAgICAgIGlmIChpc0lkZW50VG9rZW4oY291bnRlcikgJiYgY291bnRlci52YWx1ZSAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNldCA9IG5leHQgJiYgaXNOdW1iZXJUb2tlbihuZXh0KSA/IG5leHQubnVtYmVyIDogMDtcclxuICAgICAgICAgICAgICAgIHJlc2V0cy5wdXNoKHtjb3VudGVyOiBjb3VudGVyLnZhbHVlLCByZXNldH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzZXRzO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eUxpc3REZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZX0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuaW1wb3J0IHtDU1NWYWx1ZSwgaXNEaW1lbnNpb25Ub2tlbn0gZnJvbSAnLi4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7dGltZX0gZnJvbSAnLi4vdHlwZXMvdGltZSc7XHJcblxyXG5leHBvcnQgY29uc3QgZHVyYXRpb246IElQcm9wZXJ0eUxpc3REZXNjcmlwdG9yPG51bWJlcltdPiA9IHtcclxuICAgIG5hbWU6ICdkdXJhdGlvbicsXHJcbiAgICBpbml0aWFsVmFsdWU6ICcwcycsXHJcbiAgICBwcmVmaXg6IGZhbHNlLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuTElTVCxcclxuICAgIHBhcnNlOiAoY29udGV4dDogQ29udGV4dCwgdG9rZW5zOiBDU1NWYWx1ZVtdKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRva2Vucy5maWx0ZXIoaXNEaW1lbnNpb25Ub2tlbikubWFwKCh0b2tlbikgPT4gdGltZS5wYXJzZShjb250ZXh0LCB0b2tlbikpO1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0lQcm9wZXJ0eUxpc3REZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZX0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q1NTVmFsdWUsIGlzU3RyaW5nVG9rZW59IGZyb20gJy4uL3N5bnRheC9wYXJzZXInO1xyXG5pbXBvcnQge1Rva2VuVHlwZX0gZnJvbSAnLi4vc3ludGF4L3Rva2VuaXplcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUVVPVEUge1xyXG4gICAgb3Blbjogc3RyaW5nO1xyXG4gICAgY2xvc2U6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUXVvdGVzID0gUVVPVEVbXSB8IG51bGw7XHJcblxyXG5leHBvcnQgY29uc3QgcXVvdGVzOiBJUHJvcGVydHlMaXN0RGVzY3JpcHRvcjxRdW90ZXM+ID0ge1xyXG4gICAgbmFtZTogJ3F1b3RlcycsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdub25lJyxcclxuICAgIHByZWZpeDogdHJ1ZSxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLkxJU1QsXHJcbiAgICBwYXJzZTogKF9jb250ZXh0OiBDb250ZXh0LCB0b2tlbnM6IENTU1ZhbHVlW10pID0+IHtcclxuICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0ID0gdG9rZW5zWzBdO1xyXG5cclxuICAgICAgICBpZiAoZmlyc3QudHlwZSA9PT0gVG9rZW5UeXBlLklERU5UX1RPS0VOICYmIGZpcnN0LnZhbHVlID09PSAnbm9uZScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBxdW90ZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRva2Vucy5maWx0ZXIoaXNTdHJpbmdUb2tlbik7XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXJlZC5sZW5ndGggJSAyICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJlZC5sZW5ndGg7IGkgKz0gMikge1xyXG4gICAgICAgICAgICBjb25zdCBvcGVuID0gZmlsdGVyZWRbaV0udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsb3NlID0gZmlsdGVyZWRbaSArIDFdLnZhbHVlO1xyXG4gICAgICAgICAgICBxdW90ZXMucHVzaCh7b3BlbiwgY2xvc2V9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBxdW90ZXM7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0UXVvdGUgPSAocXVvdGVzOiBRdW90ZXMsIGRlcHRoOiBudW1iZXIsIG9wZW46IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xyXG4gICAgaWYgKCFxdW90ZXMpIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcXVvdGUgPSBxdW90ZXNbTWF0aC5taW4oZGVwdGgsIHF1b3Rlcy5sZW5ndGggLSAxKV07XHJcbiAgICBpZiAoIXF1b3RlKSB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvcGVuID8gcXVvdGUub3BlbiA6IHF1b3RlLmNsb3NlO1xyXG59O1xyXG4iLCJpbXBvcnQge1Byb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLCBJUHJvcGVydHlMaXN0RGVzY3JpcHRvcn0gZnJvbSAnLi4vSVByb3BlcnR5RGVzY3JpcHRvcic7XHJcbmltcG9ydCB7Q1NTVmFsdWUsIGlzSWRlbnRXaXRoVmFsdWUsIHBhcnNlRnVuY3Rpb25BcmdzfSBmcm9tICcuLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtaRVJPX0xFTkdUSH0gZnJvbSAnLi4vdHlwZXMvbGVuZ3RoLXBlcmNlbnRhZ2UnO1xyXG5pbXBvcnQge2NvbG9yLCBDb2xvcn0gZnJvbSAnLi4vdHlwZXMvY29sb3InO1xyXG5pbXBvcnQge2lzTGVuZ3RoLCBMZW5ndGh9IGZyb20gJy4uL3R5cGVzL2xlbmd0aCc7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCB0eXBlIEJveFNoYWRvdyA9IEJveFNoYWRvd0l0ZW1bXTtcclxuaW50ZXJmYWNlIEJveFNoYWRvd0l0ZW0ge1xyXG4gICAgaW5zZXQ6IGJvb2xlYW47XHJcbiAgICBjb2xvcjogQ29sb3I7XHJcbiAgICBvZmZzZXRYOiBMZW5ndGg7XHJcbiAgICBvZmZzZXRZOiBMZW5ndGg7XHJcbiAgICBibHVyOiBMZW5ndGg7XHJcbiAgICBzcHJlYWQ6IExlbmd0aDtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGJveFNoYWRvdzogSVByb3BlcnR5TGlzdERlc2NyaXB0b3I8Qm94U2hhZG93PiA9IHtcclxuICAgIG5hbWU6ICdib3gtc2hhZG93JyxcclxuICAgIGluaXRpYWxWYWx1ZTogJ25vbmUnLFxyXG4gICAgdHlwZTogUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGUuTElTVCxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICBwYXJzZTogKGNvbnRleHQ6IENvbnRleHQsIHRva2VuczogQ1NTVmFsdWVbXSk6IEJveFNoYWRvdyA9PiB7XHJcbiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT09IDEgJiYgaXNJZGVudFdpdGhWYWx1ZSh0b2tlbnNbMF0sICdub25lJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25BcmdzKHRva2VucykubWFwKCh2YWx1ZXM6IENTU1ZhbHVlW10pID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2hhZG93OiBCb3hTaGFkb3dJdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IDB4MDAwMDAwZmYsXHJcbiAgICAgICAgICAgICAgICBvZmZzZXRYOiBaRVJPX0xFTkdUSCxcclxuICAgICAgICAgICAgICAgIG9mZnNldFk6IFpFUk9fTEVOR1RILFxyXG4gICAgICAgICAgICAgICAgYmx1cjogWkVST19MRU5HVEgsXHJcbiAgICAgICAgICAgICAgICBzcHJlYWQ6IFpFUk9fTEVOR1RILFxyXG4gICAgICAgICAgICAgICAgaW5zZXQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGxldCBjID0gMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzSWRlbnRXaXRoVmFsdWUodG9rZW4sICdpbnNldCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93Lmluc2V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMZW5ndGgodG9rZW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93Lm9mZnNldFggPSB0b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93Lm9mZnNldFkgPSB0b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93LmJsdXIgPSB0b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3cuc3ByZWFkID0gdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGMrKztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93LmNvbG9yID0gY29sb3IucGFyc2UoY29udGV4dCwgdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzaGFkb3c7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5TGlzdERlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuLi9JUHJvcGVydHlEZXNjcmlwdG9yJztcclxuaW1wb3J0IHtDU1NWYWx1ZSwgaXNJZGVudFRva2VufSBmcm9tICcuLi9zeW50YXgvcGFyc2VyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgY29uc3QgZW51bSBQQUlOVF9PUkRFUl9MQVlFUiB7XHJcbiAgICBGSUxMLFxyXG4gICAgU1RST0tFLFxyXG4gICAgTUFSS0VSU1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQYWludE9yZGVyID0gUEFJTlRfT1JERVJfTEFZRVJbXTtcclxuXHJcbmV4cG9ydCBjb25zdCBwYWludE9yZGVyOiBJUHJvcGVydHlMaXN0RGVzY3JpcHRvcjxQYWludE9yZGVyPiA9IHtcclxuICAgIG5hbWU6ICdwYWludC1vcmRlcicsXHJcbiAgICBpbml0aWFsVmFsdWU6ICdub3JtYWwnLFxyXG4gICAgcHJlZml4OiBmYWxzZSxcclxuICAgIHR5cGU6IFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLkxJU1QsXHJcbiAgICBwYXJzZTogKF9jb250ZXh0OiBDb250ZXh0LCB0b2tlbnM6IENTU1ZhbHVlW10pOiBQYWludE9yZGVyID0+IHtcclxuICAgICAgICBjb25zdCBERUZBVUxUX1ZBTFVFID0gW1BBSU5UX09SREVSX0xBWUVSLkZJTEwsIFBBSU5UX09SREVSX0xBWUVSLlNUUk9LRSwgUEFJTlRfT1JERVJfTEFZRVIuTUFSS0VSU107XHJcbiAgICAgICAgY29uc3QgbGF5ZXJzOiBQYWludE9yZGVyID0gW107XHJcblxyXG4gICAgICAgIHRva2Vucy5maWx0ZXIoaXNJZGVudFRva2VuKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJva2UnOlxyXG4gICAgICAgICAgICAgICAgICAgIGxheWVycy5wdXNoKFBBSU5UX09SREVSX0xBWUVSLlNUUk9LRSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdmaWxsJzpcclxuICAgICAgICAgICAgICAgICAgICBsYXllcnMucHVzaChQQUlOVF9PUkRFUl9MQVlFUi5GSUxMKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ21hcmtlcnMnOlxyXG4gICAgICAgICAgICAgICAgICAgIGxheWVycy5wdXNoKFBBSU5UX09SREVSX0xBWUVSLk1BUktFUlMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgREVGQVVMVF9WQUxVRS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAobGF5ZXJzLmluZGV4T2YodmFsdWUpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbGF5ZXJzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBsYXllcnM7XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SVByb3BlcnR5VHlwZVZhbHVlRGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5leHBvcnQgY29uc3Qgd2Via2l0VGV4dFN0cm9rZUNvbG9yOiBJUHJvcGVydHlUeXBlVmFsdWVEZXNjcmlwdG9yID0ge1xyXG4gICAgbmFtZTogYC13ZWJraXQtdGV4dC1zdHJva2UtY29sb3JgLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnY3VycmVudGNvbG9yJyxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5UWVBFX1ZBTFVFLFxyXG4gICAgZm9ybWF0OiAnY29sb3InXHJcbn07XHJcbiIsImltcG9ydCB7Q1NTVmFsdWUsIGlzRGltZW5zaW9uVG9rZW59IGZyb20gJy4uL3N5bnRheC9wYXJzZXInO1xyXG5pbXBvcnQge0lQcm9wZXJ0eVZhbHVlRGVzY3JpcHRvciwgUHJvcGVydHlEZXNjcmlwdG9yUGFyc2luZ1R5cGV9IGZyb20gJy4uL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcbmV4cG9ydCBjb25zdCB3ZWJraXRUZXh0U3Ryb2tlV2lkdGg6IElQcm9wZXJ0eVZhbHVlRGVzY3JpcHRvcjxudW1iZXI+ID0ge1xyXG4gICAgbmFtZTogYC13ZWJraXQtdGV4dC1zdHJva2Utd2lkdGhgLFxyXG4gICAgaW5pdGlhbFZhbHVlOiAnMCcsXHJcbiAgICB0eXBlOiBQcm9wZXJ0eURlc2NyaXB0b3JQYXJzaW5nVHlwZS5WQUxVRSxcclxuICAgIHByZWZpeDogZmFsc2UsXHJcbiAgICBwYXJzZTogKF9jb250ZXh0OiBDb250ZXh0LCB0b2tlbjogQ1NTVmFsdWUpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgIGlmIChpc0RpbWVuc2lvblRva2VuKHRva2VuKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdG9rZW4ubnVtYmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtDU1NQcm9wZXJ0eURlc2NyaXB0b3IsIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlfSBmcm9tICcuL0lQcm9wZXJ0eURlc2NyaXB0b3InO1xyXG5pbXBvcnQge2JhY2tncm91bmRDbGlwfSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JhY2tncm91bmQtY2xpcCc7XHJcbmltcG9ydCB7YmFja2dyb3VuZENvbG9yfSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JhY2tncm91bmQtY29sb3InO1xyXG5pbXBvcnQge2JhY2tncm91bmRJbWFnZX0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9iYWNrZ3JvdW5kLWltYWdlJztcclxuaW1wb3J0IHtiYWNrZ3JvdW5kT3JpZ2lufSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JhY2tncm91bmQtb3JpZ2luJztcclxuaW1wb3J0IHtiYWNrZ3JvdW5kUG9zaXRpb259IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvYmFja2dyb3VuZC1wb3NpdGlvbic7XHJcbmltcG9ydCB7YmFja2dyb3VuZFJlcGVhdH0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9iYWNrZ3JvdW5kLXJlcGVhdCc7XHJcbmltcG9ydCB7YmFja2dyb3VuZFNpemV9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvYmFja2dyb3VuZC1zaXplJztcclxuaW1wb3J0IHtcclxuICAgIGJvcmRlckJvdHRvbUNvbG9yLFxyXG4gICAgYm9yZGVyTGVmdENvbG9yLFxyXG4gICAgYm9yZGVyUmlnaHRDb2xvcixcclxuICAgIGJvcmRlclRvcENvbG9yXHJcbn0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9ib3JkZXItY29sb3InO1xyXG5pbXBvcnQge1xyXG4gICAgYm9yZGVyQm90dG9tTGVmdFJhZGl1cyxcclxuICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLFxyXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1cyxcclxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzXHJcbn0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9ib3JkZXItcmFkaXVzJztcclxuaW1wb3J0IHtcclxuICAgIGJvcmRlckJvdHRvbVN0eWxlLFxyXG4gICAgYm9yZGVyTGVmdFN0eWxlLFxyXG4gICAgYm9yZGVyUmlnaHRTdHlsZSxcclxuICAgIGJvcmRlclRvcFN0eWxlXHJcbn0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9ib3JkZXItc3R5bGUnO1xyXG5pbXBvcnQge1xyXG4gICAgYm9yZGVyQm90dG9tV2lkdGgsXHJcbiAgICBib3JkZXJMZWZ0V2lkdGgsXHJcbiAgICBib3JkZXJSaWdodFdpZHRoLFxyXG4gICAgYm9yZGVyVG9wV2lkdGhcclxufSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JvcmRlci13aWR0aCc7XHJcbmltcG9ydCB7Y29sb3J9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvY29sb3InO1xyXG5pbXBvcnQge2RpcmVjdGlvbn0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9kaXJlY3Rpb24nO1xyXG5pbXBvcnQge2Rpc3BsYXksIERJU1BMQVl9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvZGlzcGxheSc7XHJcbmltcG9ydCB7ZmxvYXQsIEZMT0FUfSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2Zsb2F0JztcclxuaW1wb3J0IHtsZXR0ZXJTcGFjaW5nfSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2xldHRlci1zcGFjaW5nJztcclxuaW1wb3J0IHtsaW5lQnJlYWt9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvbGluZS1icmVhayc7XHJcbmltcG9ydCB7bGluZUhlaWdodH0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9saW5lLWhlaWdodCc7XHJcbmltcG9ydCB7bGlzdFN0eWxlSW1hZ2V9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvbGlzdC1zdHlsZS1pbWFnZSc7XHJcbmltcG9ydCB7bGlzdFN0eWxlUG9zaXRpb259IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvbGlzdC1zdHlsZS1wb3NpdGlvbic7XHJcbmltcG9ydCB7bGlzdFN0eWxlVHlwZX0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9saXN0LXN0eWxlLXR5cGUnO1xyXG5pbXBvcnQge21hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdCwgbWFyZ2luUmlnaHQsIG1hcmdpblRvcH0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9tYXJnaW4nO1xyXG5pbXBvcnQge292ZXJmbG93LCBPVkVSRkxPV30gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9vdmVyZmxvdyc7XHJcbmltcG9ydCB7b3ZlcmZsb3dXcmFwfSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL292ZXJmbG93LXdyYXAnO1xyXG5pbXBvcnQge3BhZGRpbmdCb3R0b20sIHBhZGRpbmdMZWZ0LCBwYWRkaW5nUmlnaHQsIHBhZGRpbmdUb3B9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvcGFkZGluZyc7XHJcbmltcG9ydCB7dGV4dEFsaWdufSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3RleHQtYWxpZ24nO1xyXG5pbXBvcnQge3Bvc2l0aW9uLCBQT1NJVElPTn0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9wb3NpdGlvbic7XHJcbmltcG9ydCB7dGV4dFNoYWRvd30gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy90ZXh0LXNoYWRvdyc7XHJcbmltcG9ydCB7dGV4dFRyYW5zZm9ybX0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy90ZXh0LXRyYW5zZm9ybSc7XHJcbmltcG9ydCB7dHJhbnNmb3JtfSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3RyYW5zZm9ybSc7XHJcbmltcG9ydCB7dHJhbnNmb3JtT3JpZ2lufSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3RyYW5zZm9ybS1vcmlnaW4nO1xyXG5pbXBvcnQge3Zpc2liaWxpdHksIFZJU0lCSUxJVFl9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvdmlzaWJpbGl0eSc7XHJcbmltcG9ydCB7d29yZEJyZWFrfSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3dvcmQtYnJlYWsnO1xyXG5pbXBvcnQge3pJbmRleH0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy96LWluZGV4JztcclxuaW1wb3J0IHtDU1NWYWx1ZSwgaXNJZGVudFRva2VuLCBQYXJzZXJ9IGZyb20gJy4vc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7VG9rZW5pemVyfSBmcm9tICcuL3N5bnRheC90b2tlbml6ZXInO1xyXG5pbXBvcnQge0NvbG9yLCBjb2xvciBhcyBjb2xvclR5cGUsIGlzVHJhbnNwYXJlbnR9IGZyb20gJy4vdHlwZXMvY29sb3InO1xyXG5pbXBvcnQge2FuZ2xlfSBmcm9tICcuL3R5cGVzL2FuZ2xlJztcclxuaW1wb3J0IHtpbWFnZX0gZnJvbSAnLi90eXBlcy9pbWFnZSc7XHJcbmltcG9ydCB7dGltZX0gZnJvbSAnLi90eXBlcy90aW1lJztcclxuaW1wb3J0IHtvcGFjaXR5fSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL29wYWNpdHknO1xyXG5pbXBvcnQge3RleHREZWNvcmF0aW9uQ29sb3J9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvdGV4dC1kZWNvcmF0aW9uLWNvbG9yJztcclxuaW1wb3J0IHt0ZXh0RGVjb3JhdGlvbkxpbmV9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvdGV4dC1kZWNvcmF0aW9uLWxpbmUnO1xyXG5pbXBvcnQge2lzTGVuZ3RoUGVyY2VudGFnZSwgTGVuZ3RoUGVyY2VudGFnZSwgWkVST19MRU5HVEh9IGZyb20gJy4vdHlwZXMvbGVuZ3RoLXBlcmNlbnRhZ2UnO1xyXG5pbXBvcnQge2ZvbnRGYW1pbHl9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvZm9udC1mYW1pbHknO1xyXG5pbXBvcnQge2ZvbnRTaXplfSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2ZvbnQtc2l6ZSc7XHJcbmltcG9ydCB7aXNMZW5ndGh9IGZyb20gJy4vdHlwZXMvbGVuZ3RoJztcclxuaW1wb3J0IHtmb250V2VpZ2h0fSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2ZvbnQtd2VpZ2h0JztcclxuaW1wb3J0IHtmb250VmFyaWFudH0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9mb250LXZhcmlhbnQnO1xyXG5pbXBvcnQge2ZvbnRTdHlsZX0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9mb250LXN0eWxlJztcclxuaW1wb3J0IHtjb250YWluc30gZnJvbSAnLi4vY29yZS9iaXR3aXNlJztcclxuaW1wb3J0IHtjb250ZW50fSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2NvbnRlbnQnO1xyXG5pbXBvcnQge2NvdW50ZXJJbmNyZW1lbnR9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvY291bnRlci1pbmNyZW1lbnQnO1xyXG5pbXBvcnQge2NvdW50ZXJSZXNldH0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9jb3VudGVyLXJlc2V0JztcclxuaW1wb3J0IHtkdXJhdGlvbn0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9kdXJhdGlvbic7XHJcbmltcG9ydCB7cXVvdGVzfSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3F1b3Rlcyc7XHJcbmltcG9ydCB7Ym94U2hhZG93fSBmcm9tICcuL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JveC1zaGFkb3cnO1xyXG5pbXBvcnQge3BhaW50T3JkZXJ9IGZyb20gJy4vcHJvcGVydHktZGVzY3JpcHRvcnMvcGFpbnQtb3JkZXInO1xyXG5pbXBvcnQge3dlYmtpdFRleHRTdHJva2VDb2xvcn0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy93ZWJraXQtdGV4dC1zdHJva2UtY29sb3InO1xyXG5pbXBvcnQge3dlYmtpdFRleHRTdHJva2VXaWR0aH0gZnJvbSAnLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy93ZWJraXQtdGV4dC1zdHJva2Utd2lkdGgnO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uL2NvcmUvY29udGV4dCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ1NTUGFyc2VkRGVjbGFyYXRpb24ge1xyXG4gICAgYW5pbWF0aW9uRHVyYXRpb246IFJldHVyblR5cGU8dHlwZW9mIGR1cmF0aW9uLnBhcnNlPjtcclxuICAgIGJhY2tncm91bmRDbGlwOiBSZXR1cm5UeXBlPHR5cGVvZiBiYWNrZ3JvdW5kQ2xpcC5wYXJzZT47XHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IENvbG9yO1xyXG4gICAgYmFja2dyb3VuZEltYWdlOiBSZXR1cm5UeXBlPHR5cGVvZiBiYWNrZ3JvdW5kSW1hZ2UucGFyc2U+O1xyXG4gICAgYmFja2dyb3VuZE9yaWdpbjogUmV0dXJuVHlwZTx0eXBlb2YgYmFja2dyb3VuZE9yaWdpbi5wYXJzZT47XHJcbiAgICBiYWNrZ3JvdW5kUG9zaXRpb246IFJldHVyblR5cGU8dHlwZW9mIGJhY2tncm91bmRQb3NpdGlvbi5wYXJzZT47XHJcbiAgICBiYWNrZ3JvdW5kUmVwZWF0OiBSZXR1cm5UeXBlPHR5cGVvZiBiYWNrZ3JvdW5kUmVwZWF0LnBhcnNlPjtcclxuICAgIGJhY2tncm91bmRTaXplOiBSZXR1cm5UeXBlPHR5cGVvZiBiYWNrZ3JvdW5kU2l6ZS5wYXJzZT47XHJcbiAgICBib3JkZXJUb3BDb2xvcjogQ29sb3I7XHJcbiAgICBib3JkZXJSaWdodENvbG9yOiBDb2xvcjtcclxuICAgIGJvcmRlckJvdHRvbUNvbG9yOiBDb2xvcjtcclxuICAgIGJvcmRlckxlZnRDb2xvcjogQ29sb3I7XHJcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiBSZXR1cm5UeXBlPHR5cGVvZiBib3JkZXJUb3BMZWZ0UmFkaXVzLnBhcnNlPjtcclxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiBSZXR1cm5UeXBlPHR5cGVvZiBib3JkZXJUb3BSaWdodFJhZGl1cy5wYXJzZT47XHJcbiAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogUmV0dXJuVHlwZTx0eXBlb2YgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMucGFyc2U+O1xyXG4gICAgYm9yZGVyQm90dG9tTGVmdFJhZGl1czogUmV0dXJuVHlwZTx0eXBlb2YgYm9yZGVyQm90dG9tTGVmdFJhZGl1cy5wYXJzZT47XHJcbiAgICBib3JkZXJUb3BTdHlsZTogUmV0dXJuVHlwZTx0eXBlb2YgYm9yZGVyVG9wU3R5bGUucGFyc2U+O1xyXG4gICAgYm9yZGVyUmlnaHRTdHlsZTogUmV0dXJuVHlwZTx0eXBlb2YgYm9yZGVyUmlnaHRTdHlsZS5wYXJzZT47XHJcbiAgICBib3JkZXJCb3R0b21TdHlsZTogUmV0dXJuVHlwZTx0eXBlb2YgYm9yZGVyQm90dG9tU3R5bGUucGFyc2U+O1xyXG4gICAgYm9yZGVyTGVmdFN0eWxlOiBSZXR1cm5UeXBlPHR5cGVvZiBib3JkZXJMZWZ0U3R5bGUucGFyc2U+O1xyXG4gICAgYm9yZGVyVG9wV2lkdGg6IFJldHVyblR5cGU8dHlwZW9mIGJvcmRlclRvcFdpZHRoLnBhcnNlPjtcclxuICAgIGJvcmRlclJpZ2h0V2lkdGg6IFJldHVyblR5cGU8dHlwZW9mIGJvcmRlclJpZ2h0V2lkdGgucGFyc2U+O1xyXG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IFJldHVyblR5cGU8dHlwZW9mIGJvcmRlckJvdHRvbVdpZHRoLnBhcnNlPjtcclxuICAgIGJvcmRlckxlZnRXaWR0aDogUmV0dXJuVHlwZTx0eXBlb2YgYm9yZGVyTGVmdFdpZHRoLnBhcnNlPjtcclxuICAgIGJveFNoYWRvdzogUmV0dXJuVHlwZTx0eXBlb2YgYm94U2hhZG93LnBhcnNlPjtcclxuICAgIGNvbG9yOiBDb2xvcjtcclxuICAgIGRpcmVjdGlvbjogUmV0dXJuVHlwZTx0eXBlb2YgZGlyZWN0aW9uLnBhcnNlPjtcclxuICAgIGRpc3BsYXk6IFJldHVyblR5cGU8dHlwZW9mIGRpc3BsYXkucGFyc2U+O1xyXG4gICAgZmxvYXQ6IFJldHVyblR5cGU8dHlwZW9mIGZsb2F0LnBhcnNlPjtcclxuICAgIGZvbnRGYW1pbHk6IFJldHVyblR5cGU8dHlwZW9mIGZvbnRGYW1pbHkucGFyc2U+O1xyXG4gICAgZm9udFNpemU6IExlbmd0aFBlcmNlbnRhZ2U7XHJcbiAgICBmb250U3R5bGU6IFJldHVyblR5cGU8dHlwZW9mIGZvbnRTdHlsZS5wYXJzZT47XHJcbiAgICBmb250VmFyaWFudDogUmV0dXJuVHlwZTx0eXBlb2YgZm9udFZhcmlhbnQucGFyc2U+O1xyXG4gICAgZm9udFdlaWdodDogUmV0dXJuVHlwZTx0eXBlb2YgZm9udFdlaWdodC5wYXJzZT47XHJcbiAgICBsZXR0ZXJTcGFjaW5nOiBSZXR1cm5UeXBlPHR5cGVvZiBsZXR0ZXJTcGFjaW5nLnBhcnNlPjtcclxuICAgIGxpbmVCcmVhazogUmV0dXJuVHlwZTx0eXBlb2YgbGluZUJyZWFrLnBhcnNlPjtcclxuICAgIGxpbmVIZWlnaHQ6IENTU1ZhbHVlO1xyXG4gICAgbGlzdFN0eWxlSW1hZ2U6IFJldHVyblR5cGU8dHlwZW9mIGxpc3RTdHlsZUltYWdlLnBhcnNlPjtcclxuICAgIGxpc3RTdHlsZVBvc2l0aW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBsaXN0U3R5bGVQb3NpdGlvbi5wYXJzZT47XHJcbiAgICBsaXN0U3R5bGVUeXBlOiBSZXR1cm5UeXBlPHR5cGVvZiBsaXN0U3R5bGVUeXBlLnBhcnNlPjtcclxuICAgIG1hcmdpblRvcDogQ1NTVmFsdWU7XHJcbiAgICBtYXJnaW5SaWdodDogQ1NTVmFsdWU7XHJcbiAgICBtYXJnaW5Cb3R0b206IENTU1ZhbHVlO1xyXG4gICAgbWFyZ2luTGVmdDogQ1NTVmFsdWU7XHJcbiAgICBvcGFjaXR5OiBSZXR1cm5UeXBlPHR5cGVvZiBvcGFjaXR5LnBhcnNlPjtcclxuICAgIG92ZXJmbG93WDogT1ZFUkZMT1c7XHJcbiAgICBvdmVyZmxvd1k6IE9WRVJGTE9XO1xyXG4gICAgb3ZlcmZsb3dXcmFwOiBSZXR1cm5UeXBlPHR5cGVvZiBvdmVyZmxvd1dyYXAucGFyc2U+O1xyXG4gICAgcGFkZGluZ1RvcDogTGVuZ3RoUGVyY2VudGFnZTtcclxuICAgIHBhZGRpbmdSaWdodDogTGVuZ3RoUGVyY2VudGFnZTtcclxuICAgIHBhZGRpbmdCb3R0b206IExlbmd0aFBlcmNlbnRhZ2U7XHJcbiAgICBwYWRkaW5nTGVmdDogTGVuZ3RoUGVyY2VudGFnZTtcclxuICAgIHBhaW50T3JkZXI6IFJldHVyblR5cGU8dHlwZW9mIHBhaW50T3JkZXIucGFyc2U+O1xyXG4gICAgcG9zaXRpb246IFJldHVyblR5cGU8dHlwZW9mIHBvc2l0aW9uLnBhcnNlPjtcclxuICAgIHRleHRBbGlnbjogUmV0dXJuVHlwZTx0eXBlb2YgdGV4dEFsaWduLnBhcnNlPjtcclxuICAgIHRleHREZWNvcmF0aW9uQ29sb3I6IENvbG9yO1xyXG4gICAgdGV4dERlY29yYXRpb25MaW5lOiBSZXR1cm5UeXBlPHR5cGVvZiB0ZXh0RGVjb3JhdGlvbkxpbmUucGFyc2U+O1xyXG4gICAgdGV4dFNoYWRvdzogUmV0dXJuVHlwZTx0eXBlb2YgdGV4dFNoYWRvdy5wYXJzZT47XHJcbiAgICB0ZXh0VHJhbnNmb3JtOiBSZXR1cm5UeXBlPHR5cGVvZiB0ZXh0VHJhbnNmb3JtLnBhcnNlPjtcclxuICAgIHRyYW5zZm9ybTogUmV0dXJuVHlwZTx0eXBlb2YgdHJhbnNmb3JtLnBhcnNlPjtcclxuICAgIHRyYW5zZm9ybU9yaWdpbjogUmV0dXJuVHlwZTx0eXBlb2YgdHJhbnNmb3JtT3JpZ2luLnBhcnNlPjtcclxuICAgIHZpc2liaWxpdHk6IFJldHVyblR5cGU8dHlwZW9mIHZpc2liaWxpdHkucGFyc2U+O1xyXG4gICAgd2Via2l0VGV4dFN0cm9rZUNvbG9yOiBDb2xvcjtcclxuICAgIHdlYmtpdFRleHRTdHJva2VXaWR0aDogUmV0dXJuVHlwZTx0eXBlb2Ygd2Via2l0VGV4dFN0cm9rZVdpZHRoLnBhcnNlPjtcclxuICAgIHdvcmRCcmVhazogUmV0dXJuVHlwZTx0eXBlb2Ygd29yZEJyZWFrLnBhcnNlPjtcclxuICAgIHpJbmRleDogUmV0dXJuVHlwZTx0eXBlb2YgekluZGV4LnBhcnNlPjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBkZWNsYXJhdGlvbjogQ1NTU3R5bGVEZWNsYXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uRHVyYXRpb24gPSBwYXJzZShjb250ZXh0LCBkdXJhdGlvbiwgZGVjbGFyYXRpb24uYW5pbWF0aW9uRHVyYXRpb24pO1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZENsaXAgPSBwYXJzZShjb250ZXh0LCBiYWNrZ3JvdW5kQ2xpcCwgZGVjbGFyYXRpb24uYmFja2dyb3VuZENsaXApO1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gcGFyc2UoY29udGV4dCwgYmFja2dyb3VuZENvbG9yLCBkZWNsYXJhdGlvbi5iYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZEltYWdlID0gcGFyc2UoY29udGV4dCwgYmFja2dyb3VuZEltYWdlLCBkZWNsYXJhdGlvbi5iYWNrZ3JvdW5kSW1hZ2UpO1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZE9yaWdpbiA9IHBhcnNlKGNvbnRleHQsIGJhY2tncm91bmRPcmlnaW4sIGRlY2xhcmF0aW9uLmJhY2tncm91bmRPcmlnaW4pO1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZFBvc2l0aW9uID0gcGFyc2UoY29udGV4dCwgYmFja2dyb3VuZFBvc2l0aW9uLCBkZWNsYXJhdGlvbi5iYWNrZ3JvdW5kUG9zaXRpb24pO1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZFJlcGVhdCA9IHBhcnNlKGNvbnRleHQsIGJhY2tncm91bmRSZXBlYXQsIGRlY2xhcmF0aW9uLmJhY2tncm91bmRSZXBlYXQpO1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZFNpemUgPSBwYXJzZShjb250ZXh0LCBiYWNrZ3JvdW5kU2l6ZSwgZGVjbGFyYXRpb24uYmFja2dyb3VuZFNpemUpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyVG9wQ29sb3IgPSBwYXJzZShjb250ZXh0LCBib3JkZXJUb3BDb2xvciwgZGVjbGFyYXRpb24uYm9yZGVyVG9wQ29sb3IpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyUmlnaHRDb2xvciA9IHBhcnNlKGNvbnRleHQsIGJvcmRlclJpZ2h0Q29sb3IsIGRlY2xhcmF0aW9uLmJvcmRlclJpZ2h0Q29sb3IpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyQm90dG9tQ29sb3IgPSBwYXJzZShjb250ZXh0LCBib3JkZXJCb3R0b21Db2xvciwgZGVjbGFyYXRpb24uYm9yZGVyQm90dG9tQ29sb3IpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyTGVmdENvbG9yID0gcGFyc2UoY29udGV4dCwgYm9yZGVyTGVmdENvbG9yLCBkZWNsYXJhdGlvbi5ib3JkZXJMZWZ0Q29sb3IpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyVG9wTGVmdFJhZGl1cyA9IHBhcnNlKGNvbnRleHQsIGJvcmRlclRvcExlZnRSYWRpdXMsIGRlY2xhcmF0aW9uLmJvcmRlclRvcExlZnRSYWRpdXMpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyVG9wUmlnaHRSYWRpdXMgPSBwYXJzZShjb250ZXh0LCBib3JkZXJUb3BSaWdodFJhZGl1cywgZGVjbGFyYXRpb24uYm9yZGVyVG9wUmlnaHRSYWRpdXMpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMgPSBwYXJzZShjb250ZXh0LCBib3JkZXJCb3R0b21SaWdodFJhZGl1cywgZGVjbGFyYXRpb24uYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IHBhcnNlKGNvbnRleHQsIGJvcmRlckJvdHRvbUxlZnRSYWRpdXMsIGRlY2xhcmF0aW9uLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyVG9wU3R5bGUgPSBwYXJzZShjb250ZXh0LCBib3JkZXJUb3BTdHlsZSwgZGVjbGFyYXRpb24uYm9yZGVyVG9wU3R5bGUpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyUmlnaHRTdHlsZSA9IHBhcnNlKGNvbnRleHQsIGJvcmRlclJpZ2h0U3R5bGUsIGRlY2xhcmF0aW9uLmJvcmRlclJpZ2h0U3R5bGUpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyQm90dG9tU3R5bGUgPSBwYXJzZShjb250ZXh0LCBib3JkZXJCb3R0b21TdHlsZSwgZGVjbGFyYXRpb24uYm9yZGVyQm90dG9tU3R5bGUpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyTGVmdFN0eWxlID0gcGFyc2UoY29udGV4dCwgYm9yZGVyTGVmdFN0eWxlLCBkZWNsYXJhdGlvbi5ib3JkZXJMZWZ0U3R5bGUpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyVG9wV2lkdGggPSBwYXJzZShjb250ZXh0LCBib3JkZXJUb3BXaWR0aCwgZGVjbGFyYXRpb24uYm9yZGVyVG9wV2lkdGgpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyUmlnaHRXaWR0aCA9IHBhcnNlKGNvbnRleHQsIGJvcmRlclJpZ2h0V2lkdGgsIGRlY2xhcmF0aW9uLmJvcmRlclJpZ2h0V2lkdGgpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyQm90dG9tV2lkdGggPSBwYXJzZShjb250ZXh0LCBib3JkZXJCb3R0b21XaWR0aCwgZGVjbGFyYXRpb24uYm9yZGVyQm90dG9tV2lkdGgpO1xyXG4gICAgICAgIHRoaXMuYm9yZGVyTGVmdFdpZHRoID0gcGFyc2UoY29udGV4dCwgYm9yZGVyTGVmdFdpZHRoLCBkZWNsYXJhdGlvbi5ib3JkZXJMZWZ0V2lkdGgpO1xyXG4gICAgICAgIHRoaXMuYm94U2hhZG93ID0gcGFyc2UoY29udGV4dCwgYm94U2hhZG93LCBkZWNsYXJhdGlvbi5ib3hTaGFkb3cpO1xyXG4gICAgICAgIHRoaXMuY29sb3IgPSBwYXJzZShjb250ZXh0LCBjb2xvciwgZGVjbGFyYXRpb24uY29sb3IpO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gcGFyc2UoY29udGV4dCwgZGlyZWN0aW9uLCBkZWNsYXJhdGlvbi5kaXJlY3Rpb24pO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheSA9IHBhcnNlKGNvbnRleHQsIGRpc3BsYXksIGRlY2xhcmF0aW9uLmRpc3BsYXkpO1xyXG4gICAgICAgIHRoaXMuZmxvYXQgPSBwYXJzZShjb250ZXh0LCBmbG9hdCwgZGVjbGFyYXRpb24uY3NzRmxvYXQpO1xyXG4gICAgICAgIHRoaXMuZm9udEZhbWlseSA9IHBhcnNlKGNvbnRleHQsIGZvbnRGYW1pbHksIGRlY2xhcmF0aW9uLmZvbnRGYW1pbHkpO1xyXG4gICAgICAgIHRoaXMuZm9udFNpemUgPSBwYXJzZShjb250ZXh0LCBmb250U2l6ZSwgZGVjbGFyYXRpb24uZm9udFNpemUpO1xyXG4gICAgICAgIHRoaXMuZm9udFN0eWxlID0gcGFyc2UoY29udGV4dCwgZm9udFN0eWxlLCBkZWNsYXJhdGlvbi5mb250U3R5bGUpO1xyXG4gICAgICAgIHRoaXMuZm9udFZhcmlhbnQgPSBwYXJzZShjb250ZXh0LCBmb250VmFyaWFudCwgZGVjbGFyYXRpb24uZm9udFZhcmlhbnQpO1xyXG4gICAgICAgIHRoaXMuZm9udFdlaWdodCA9IHBhcnNlKGNvbnRleHQsIGZvbnRXZWlnaHQsIGRlY2xhcmF0aW9uLmZvbnRXZWlnaHQpO1xyXG4gICAgICAgIHRoaXMubGV0dGVyU3BhY2luZyA9IHBhcnNlKGNvbnRleHQsIGxldHRlclNwYWNpbmcsIGRlY2xhcmF0aW9uLmxldHRlclNwYWNpbmcpO1xyXG4gICAgICAgIHRoaXMubGluZUJyZWFrID0gcGFyc2UoY29udGV4dCwgbGluZUJyZWFrLCBkZWNsYXJhdGlvbi5saW5lQnJlYWspO1xyXG4gICAgICAgIHRoaXMubGluZUhlaWdodCA9IHBhcnNlKGNvbnRleHQsIGxpbmVIZWlnaHQsIGRlY2xhcmF0aW9uLmxpbmVIZWlnaHQpO1xyXG4gICAgICAgIHRoaXMubGlzdFN0eWxlSW1hZ2UgPSBwYXJzZShjb250ZXh0LCBsaXN0U3R5bGVJbWFnZSwgZGVjbGFyYXRpb24ubGlzdFN0eWxlSW1hZ2UpO1xyXG4gICAgICAgIHRoaXMubGlzdFN0eWxlUG9zaXRpb24gPSBwYXJzZShjb250ZXh0LCBsaXN0U3R5bGVQb3NpdGlvbiwgZGVjbGFyYXRpb24ubGlzdFN0eWxlUG9zaXRpb24pO1xyXG4gICAgICAgIHRoaXMubGlzdFN0eWxlVHlwZSA9IHBhcnNlKGNvbnRleHQsIGxpc3RTdHlsZVR5cGUsIGRlY2xhcmF0aW9uLmxpc3RTdHlsZVR5cGUpO1xyXG4gICAgICAgIHRoaXMubWFyZ2luVG9wID0gcGFyc2UoY29udGV4dCwgbWFyZ2luVG9wLCBkZWNsYXJhdGlvbi5tYXJnaW5Ub3ApO1xyXG4gICAgICAgIHRoaXMubWFyZ2luUmlnaHQgPSBwYXJzZShjb250ZXh0LCBtYXJnaW5SaWdodCwgZGVjbGFyYXRpb24ubWFyZ2luUmlnaHQpO1xyXG4gICAgICAgIHRoaXMubWFyZ2luQm90dG9tID0gcGFyc2UoY29udGV4dCwgbWFyZ2luQm90dG9tLCBkZWNsYXJhdGlvbi5tYXJnaW5Cb3R0b20pO1xyXG4gICAgICAgIHRoaXMubWFyZ2luTGVmdCA9IHBhcnNlKGNvbnRleHQsIG1hcmdpbkxlZnQsIGRlY2xhcmF0aW9uLm1hcmdpbkxlZnQpO1xyXG4gICAgICAgIHRoaXMub3BhY2l0eSA9IHBhcnNlKGNvbnRleHQsIG9wYWNpdHksIGRlY2xhcmF0aW9uLm9wYWNpdHkpO1xyXG4gICAgICAgIGNvbnN0IG92ZXJmbG93VHVwbGUgPSBwYXJzZShjb250ZXh0LCBvdmVyZmxvdywgZGVjbGFyYXRpb24ub3ZlcmZsb3cpO1xyXG4gICAgICAgIHRoaXMub3ZlcmZsb3dYID0gb3ZlcmZsb3dUdXBsZVswXTtcclxuICAgICAgICB0aGlzLm92ZXJmbG93WSA9IG92ZXJmbG93VHVwbGVbb3ZlcmZsb3dUdXBsZS5sZW5ndGggPiAxID8gMSA6IDBdO1xyXG4gICAgICAgIHRoaXMub3ZlcmZsb3dXcmFwID0gcGFyc2UoY29udGV4dCwgb3ZlcmZsb3dXcmFwLCBkZWNsYXJhdGlvbi5vdmVyZmxvd1dyYXApO1xyXG4gICAgICAgIHRoaXMucGFkZGluZ1RvcCA9IHBhcnNlKGNvbnRleHQsIHBhZGRpbmdUb3AsIGRlY2xhcmF0aW9uLnBhZGRpbmdUb3ApO1xyXG4gICAgICAgIHRoaXMucGFkZGluZ1JpZ2h0ID0gcGFyc2UoY29udGV4dCwgcGFkZGluZ1JpZ2h0LCBkZWNsYXJhdGlvbi5wYWRkaW5nUmlnaHQpO1xyXG4gICAgICAgIHRoaXMucGFkZGluZ0JvdHRvbSA9IHBhcnNlKGNvbnRleHQsIHBhZGRpbmdCb3R0b20sIGRlY2xhcmF0aW9uLnBhZGRpbmdCb3R0b20pO1xyXG4gICAgICAgIHRoaXMucGFkZGluZ0xlZnQgPSBwYXJzZShjb250ZXh0LCBwYWRkaW5nTGVmdCwgZGVjbGFyYXRpb24ucGFkZGluZ0xlZnQpO1xyXG4gICAgICAgIHRoaXMucGFpbnRPcmRlciA9IHBhcnNlKGNvbnRleHQsIHBhaW50T3JkZXIsIGRlY2xhcmF0aW9uLnBhaW50T3JkZXIpO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBwYXJzZShjb250ZXh0LCBwb3NpdGlvbiwgZGVjbGFyYXRpb24ucG9zaXRpb24pO1xyXG4gICAgICAgIHRoaXMudGV4dEFsaWduID0gcGFyc2UoY29udGV4dCwgdGV4dEFsaWduLCBkZWNsYXJhdGlvbi50ZXh0QWxpZ24pO1xyXG4gICAgICAgIHRoaXMudGV4dERlY29yYXRpb25Db2xvciA9IHBhcnNlKFxyXG4gICAgICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbkNvbG9yLFxyXG4gICAgICAgICAgICBkZWNsYXJhdGlvbi50ZXh0RGVjb3JhdGlvbkNvbG9yID8/IGRlY2xhcmF0aW9uLmNvbG9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnRleHREZWNvcmF0aW9uTGluZSA9IHBhcnNlKFxyXG4gICAgICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbkxpbmUsXHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uLnRleHREZWNvcmF0aW9uTGluZSA/PyBkZWNsYXJhdGlvbi50ZXh0RGVjb3JhdGlvblxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy50ZXh0U2hhZG93ID0gcGFyc2UoY29udGV4dCwgdGV4dFNoYWRvdywgZGVjbGFyYXRpb24udGV4dFNoYWRvdyk7XHJcbiAgICAgICAgdGhpcy50ZXh0VHJhbnNmb3JtID0gcGFyc2UoY29udGV4dCwgdGV4dFRyYW5zZm9ybSwgZGVjbGFyYXRpb24udGV4dFRyYW5zZm9ybSk7XHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSBwYXJzZShjb250ZXh0LCB0cmFuc2Zvcm0sIGRlY2xhcmF0aW9uLnRyYW5zZm9ybSk7XHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1PcmlnaW4gPSBwYXJzZShjb250ZXh0LCB0cmFuc2Zvcm1PcmlnaW4sIGRlY2xhcmF0aW9uLnRyYW5zZm9ybU9yaWdpbik7XHJcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5ID0gcGFyc2UoY29udGV4dCwgdmlzaWJpbGl0eSwgZGVjbGFyYXRpb24udmlzaWJpbGl0eSk7XHJcbiAgICAgICAgdGhpcy53ZWJraXRUZXh0U3Ryb2tlQ29sb3IgPSBwYXJzZShjb250ZXh0LCB3ZWJraXRUZXh0U3Ryb2tlQ29sb3IsIGRlY2xhcmF0aW9uLndlYmtpdFRleHRTdHJva2VDb2xvcik7XHJcbiAgICAgICAgdGhpcy53ZWJraXRUZXh0U3Ryb2tlV2lkdGggPSBwYXJzZShjb250ZXh0LCB3ZWJraXRUZXh0U3Ryb2tlV2lkdGgsIGRlY2xhcmF0aW9uLndlYmtpdFRleHRTdHJva2VXaWR0aCk7XHJcbiAgICAgICAgdGhpcy53b3JkQnJlYWsgPSBwYXJzZShjb250ZXh0LCB3b3JkQnJlYWssIGRlY2xhcmF0aW9uLndvcmRCcmVhayk7XHJcbiAgICAgICAgdGhpcy56SW5kZXggPSBwYXJzZShjb250ZXh0LCB6SW5kZXgsIGRlY2xhcmF0aW9uLnpJbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXkgPiAwICYmIHRoaXMub3BhY2l0eSA+IDAgJiYgdGhpcy52aXNpYmlsaXR5ID09PSBWSVNJQklMSVRZLlZJU0lCTEU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNUcmFuc3BhcmVudCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gaXNUcmFuc3BhcmVudCh0aGlzLmJhY2tncm91bmRDb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgaXNUcmFuc2Zvcm1lZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0gIT09IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaXNQb3NpdGlvbmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uICE9PSBQT1NJVElPTi5TVEFUSUM7XHJcbiAgICB9XHJcblxyXG4gICAgaXNQb3NpdGlvbmVkV2l0aFpJbmRleCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1Bvc2l0aW9uZWQoKSAmJiAhdGhpcy56SW5kZXguYXV0bztcclxuICAgIH1cclxuXHJcbiAgICBpc0Zsb2F0aW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZsb2F0ICE9PSBGTE9BVC5OT05FO1xyXG4gICAgfVxyXG5cclxuICAgIGlzSW5saW5lTGV2ZWwoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgY29udGFpbnModGhpcy5kaXNwbGF5LCBESVNQTEFZLklOTElORSkgfHxcclxuICAgICAgICAgICAgY29udGFpbnModGhpcy5kaXNwbGF5LCBESVNQTEFZLklOTElORV9CTE9DSykgfHxcclxuICAgICAgICAgICAgY29udGFpbnModGhpcy5kaXNwbGF5LCBESVNQTEFZLklOTElORV9GTEVYKSB8fFxyXG4gICAgICAgICAgICBjb250YWlucyh0aGlzLmRpc3BsYXksIERJU1BMQVkuSU5MSU5FX0dSSUQpIHx8XHJcbiAgICAgICAgICAgIGNvbnRhaW5zKHRoaXMuZGlzcGxheSwgRElTUExBWS5JTkxJTkVfTElTVF9JVEVNKSB8fFxyXG4gICAgICAgICAgICBjb250YWlucyh0aGlzLmRpc3BsYXksIERJU1BMQVkuSU5MSU5FX1RBQkxFKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDU1NQYXJzZWRQc2V1ZG9EZWNsYXJhdGlvbiB7XHJcbiAgICBjb250ZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBjb250ZW50LnBhcnNlPjtcclxuICAgIHF1b3RlczogUmV0dXJuVHlwZTx0eXBlb2YgcXVvdGVzLnBhcnNlPjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBkZWNsYXJhdGlvbjogQ1NTU3R5bGVEZWNsYXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuY29udGVudCA9IHBhcnNlKGNvbnRleHQsIGNvbnRlbnQsIGRlY2xhcmF0aW9uLmNvbnRlbnQpO1xyXG4gICAgICAgIHRoaXMucXVvdGVzID0gcGFyc2UoY29udGV4dCwgcXVvdGVzLCBkZWNsYXJhdGlvbi5xdW90ZXMpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ1NTUGFyc2VkQ291bnRlckRlY2xhcmF0aW9uIHtcclxuICAgIGNvdW50ZXJJbmNyZW1lbnQ6IFJldHVyblR5cGU8dHlwZW9mIGNvdW50ZXJJbmNyZW1lbnQucGFyc2U+O1xyXG4gICAgY291bnRlclJlc2V0OiBSZXR1cm5UeXBlPHR5cGVvZiBjb3VudGVyUmVzZXQucGFyc2U+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGRlY2xhcmF0aW9uOiBDU1NTdHlsZURlY2xhcmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5jb3VudGVySW5jcmVtZW50ID0gcGFyc2UoY29udGV4dCwgY291bnRlckluY3JlbWVudCwgZGVjbGFyYXRpb24uY291bnRlckluY3JlbWVudCk7XHJcbiAgICAgICAgdGhpcy5jb3VudGVyUmVzZXQgPSBwYXJzZShjb250ZXh0LCBjb3VudGVyUmVzZXQsIGRlY2xhcmF0aW9uLmNvdW50ZXJSZXNldCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbmNvbnN0IHBhcnNlID0gKGNvbnRleHQ6IENvbnRleHQsIGRlc2NyaXB0b3I6IENTU1Byb3BlcnR5RGVzY3JpcHRvcjxhbnk+LCBzdHlsZT86IHN0cmluZyB8IG51bGwpID0+IHtcclxuICAgIGNvbnN0IHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoKTtcclxuICAgIGNvbnN0IHZhbHVlID0gc3R5bGUgIT09IG51bGwgJiYgdHlwZW9mIHN0eWxlICE9PSAndW5kZWZpbmVkJyA/IHN0eWxlLnRvU3RyaW5nKCkgOiBkZXNjcmlwdG9yLmluaXRpYWxWYWx1ZTtcclxuICAgIHRva2VuaXplci53cml0ZSh2YWx1ZSk7XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKHRva2VuaXplci5yZWFkKCkpO1xyXG4gICAgc3dpdGNoIChkZXNjcmlwdG9yLnR5cGUpIHtcclxuICAgICAgICBjYXNlIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLklERU5UX1ZBTFVFOlxyXG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHBhcnNlci5wYXJzZUNvbXBvbmVudFZhbHVlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yLnBhcnNlKGNvbnRleHQsIGlzSWRlbnRUb2tlbih0b2tlbikgPyB0b2tlbi52YWx1ZSA6IGRlc2NyaXB0b3IuaW5pdGlhbFZhbHVlKTtcclxuICAgICAgICBjYXNlIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLlZBTFVFOlxyXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5wYXJzZShjb250ZXh0LCBwYXJzZXIucGFyc2VDb21wb25lbnRWYWx1ZSgpKTtcclxuICAgICAgICBjYXNlIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLkxJU1Q6XHJcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yLnBhcnNlKGNvbnRleHQsIHBhcnNlci5wYXJzZUNvbXBvbmVudFZhbHVlcygpKTtcclxuICAgICAgICBjYXNlIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLlRPS0VOX1ZBTFVFOlxyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlQ29tcG9uZW50VmFsdWUoKTtcclxuICAgICAgICBjYXNlIFByb3BlcnR5RGVzY3JpcHRvclBhcnNpbmdUeXBlLlRZUEVfVkFMVUU6XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZGVzY3JpcHRvci5mb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2FuZ2xlJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW5nbGUucGFyc2UoY29udGV4dCwgcGFyc2VyLnBhcnNlQ29tcG9uZW50VmFsdWUoKSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdjb2xvcic6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yVHlwZS5wYXJzZShjb250ZXh0LCBwYXJzZXIucGFyc2VDb21wb25lbnRWYWx1ZSgpKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2UucGFyc2UoY29udGV4dCwgcGFyc2VyLnBhcnNlQ29tcG9uZW50VmFsdWUoKSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdsZW5ndGgnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHBhcnNlci5wYXJzZUNvbXBvbmVudFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTGVuZ3RoKGxlbmd0aCkgPyBsZW5ndGggOiBaRVJPX0xFTkdUSDtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2xlbmd0aC1wZXJjZW50YWdlJzpcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlci5wYXJzZUNvbXBvbmVudFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTGVuZ3RoUGVyY2VudGFnZSh2YWx1ZSkgPyB2YWx1ZSA6IFpFUk9fTEVOR1RIO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndGltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWUucGFyc2UoY29udGV4dCwgcGFyc2VyLnBhcnNlQ29tcG9uZW50VmFsdWUoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcbiIsImNvbnN0IGVsZW1lbnREZWJ1Z2dlckF0dHJpYnV0ZSA9ICdkYXRhLWh0bWwyY2FudmFzLWRlYnVnJztcclxuZXhwb3J0IGNvbnN0IGVudW0gRGVidWdnZXJUeXBlIHtcclxuICAgIE5PTkUsXHJcbiAgICBBTEwsXHJcbiAgICBDTE9ORSxcclxuICAgIFBBUlNFLFxyXG4gICAgUkVOREVSXHJcbn1cclxuXHJcbmNvbnN0IGdldEVsZW1lbnREZWJ1Z1R5cGUgPSAoZWxlbWVudDogRWxlbWVudCk6IERlYnVnZ2VyVHlwZSA9PiB7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShlbGVtZW50RGVidWdnZXJBdHRyaWJ1dGUpO1xyXG4gICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlICdhbGwnOlxyXG4gICAgICAgICAgICByZXR1cm4gRGVidWdnZXJUeXBlLkFMTDtcclxuICAgICAgICBjYXNlICdjbG9uZSc6XHJcbiAgICAgICAgICAgIHJldHVybiBEZWJ1Z2dlclR5cGUuQ0xPTkU7XHJcbiAgICAgICAgY2FzZSAncGFyc2UnOlxyXG4gICAgICAgICAgICByZXR1cm4gRGVidWdnZXJUeXBlLlBBUlNFO1xyXG4gICAgICAgIGNhc2UgJ3JlbmRlcic6XHJcbiAgICAgICAgICAgIHJldHVybiBEZWJ1Z2dlclR5cGUuUkVOREVSO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBEZWJ1Z2dlclR5cGUuTk9ORTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc0RlYnVnZ2luZyA9IChlbGVtZW50OiBFbGVtZW50LCB0eXBlOiBPbWl0PERlYnVnZ2VyVHlwZSwgRGVidWdnZXJUeXBlLk5PTkU+KTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IGdldEVsZW1lbnREZWJ1Z1R5cGUoZWxlbWVudCk7XHJcbiAgICByZXR1cm4gZWxlbWVudFR5cGUgPT09IERlYnVnZ2VyVHlwZS5BTEwgfHwgdHlwZSA9PT0gZWxlbWVudFR5cGU7XHJcbn07XHJcbiIsImltcG9ydCB7Q1NTUGFyc2VkRGVjbGFyYXRpb259IGZyb20gJy4uL2Nzcy9pbmRleCc7XHJcbmltcG9ydCB7VGV4dENvbnRhaW5lcn0gZnJvbSAnLi90ZXh0LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7Qm91bmRzLCBwYXJzZUJvdW5kc30gZnJvbSAnLi4vY3NzL2xheW91dC9ib3VuZHMnO1xyXG5pbXBvcnQge2lzSFRNTEVsZW1lbnROb2RlfSBmcm9tICcuL25vZGUtcGFyc2VyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi9jb3JlL2NvbnRleHQnO1xyXG5pbXBvcnQge0RlYnVnZ2VyVHlwZSwgaXNEZWJ1Z2dpbmd9IGZyb20gJy4uL2NvcmUvZGVidWdnZXInO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gRkxBR1Mge1xyXG4gICAgQ1JFQVRFU19TVEFDS0lOR19DT05URVhUID0gMSA8PCAxLFxyXG4gICAgQ1JFQVRFU19SRUFMX1NUQUNLSU5HX0NPTlRFWFQgPSAxIDw8IDIsXHJcbiAgICBJU19MSVNUX09XTkVSID0gMSA8PCAzLFxyXG4gICAgREVCVUdfUkVOREVSID0gMSA8PCA0XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFbGVtZW50Q29udGFpbmVyIHtcclxuICAgIHJlYWRvbmx5IHN0eWxlczogQ1NTUGFyc2VkRGVjbGFyYXRpb247XHJcbiAgICByZWFkb25seSB0ZXh0Tm9kZXM6IFRleHRDb250YWluZXJbXSA9IFtdO1xyXG4gICAgcmVhZG9ubHkgZWxlbWVudHM6IEVsZW1lbnRDb250YWluZXJbXSA9IFtdO1xyXG4gICAgYm91bmRzOiBCb3VuZHM7XHJcbiAgICBmbGFncyA9IDA7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRleHQ6IENvbnRleHQsIGVsZW1lbnQ6IEVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoaXNEZWJ1Z2dpbmcoZWxlbWVudCwgRGVidWdnZXJUeXBlLlBBUlNFKSkge1xyXG4gICAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3R5bGVzID0gbmV3IENTU1BhcnNlZERlY2xhcmF0aW9uKGNvbnRleHQsIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpKTtcclxuXHJcbiAgICAgICAgaWYgKGlzSFRNTEVsZW1lbnROb2RlKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0eWxlcy5hbmltYXRpb25EdXJhdGlvbi5zb21lKChkdXJhdGlvbikgPT4gZHVyYXRpb24gPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5hbmltYXRpb25EdXJhdGlvbiA9ICcwcyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0eWxlcy50cmFuc2Zvcm0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCB0YWtlcyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRzID0gcGFyc2VCb3VuZHModGhpcy5jb250ZXh0LCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKGlzRGVidWdnaW5nKGVsZW1lbnQsIERlYnVnZ2VyVHlwZS5SRU5ERVIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmxhZ3MgfD0gRkxBR1MuREVCVUdfUkVOREVSO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY29uc3QgYmFzZTY0ID1cbiAgICAnQUFBQUFBQUFBQUFBRUE0QUdCa0FBRkFhQUFBQ0FBQUFBQUFJQUJBQUdBQXdBRGdBQ0FBUUFBZ0FFQUFJQUJBQUNBQVFBQWdBRUFBSUFCQUFDQUFRQUFnQUVBQUlBQkFBUUFCSUFFUUFUQUFJQUJBQUNBQVFBQWdBRUFBSUFCQUFWQUJjQUFnQUVBQUlBQkFBQ0FBUUFHQUFhQUJ3QUhnQWdBQ0lBSTRBbGdBSUFCQUFtd0NqQUtnQXNBQzJBTDRBdlFERkFNb0EwZ0JQQVZZQldnRUlBQWdBQ0FDTUFOb0FZZ0ZrQVd3QmRBRjhBWDBCaFFHTkFaVUJsZ0dlQWFNQmxRR1dBYXNCc3dGOEFic0J3d0YwQWNzQll3SFRBUWdBMndHL0FPTUJkQUY4QWVrQjhRRjBBZmtCK3dIaUFIUUJmQUVJQUFNQzVnUUlBQXNDRWdJSUFBZ0FGZ0llQWdnQUlnSXBBZ2dBTVFJNUFrQUN5Z0VJQUFnQVNBSlFBbGdDWUFJSUFBZ0FDQUFLQlFvRkNnVVRCUk1GR1FVckJTc0ZDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUJkQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQm9BbWdDcndHdkFRZ0FiZ0oyQWdnQUhnRUlBQWdBQ0FEbkFYc0NDQUFJQUFnQWd3SUlBQWdBQ0FBSUFBZ0FDQUNLQWdnQWtRS1pBZ2dBUEFESkFBZ0FvUUtrQXF3Q3NnSzZBc0lDQ0FESkFnZ0EwQUlJQUFnQUNBQUlBTllDM2dJSUFBZ0FDQUFJQUFnQUNBQkFBT1lDQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQWtBU29CK1FJRUFBZ0FDQUE4QUVNQ0NBQkNCUWdBQ0FCSkJWQUZDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUJUQlZvRkNBQUlBRm9GQ0FCZkJXVUZDQUFJQUFnQUNBQUlBQWdBYlFVSUFBZ0FDQUFJQUFnQUNBQnpCWHNGZlFXRkJZb0ZpZ1dLQlpFRmlnV0tCWW9GbUFXZkJhWUZyZ1d4QmJrRkNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBTUVGQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQU1nRkNBRFFCUWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFPNENDQUFJQUFnQWlRQUlBQWdBQ0FCQUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FEMEFnZ0FDQUQ4QWdnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFOWUZDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBTUR2d0FJQUFnQUpBSUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUN3TVRBd2dBQ0FCOUJPc0VHd01qQXdnQUt3TXlBd3NGWWdFM0EvTUVQd01JQUVVRFRRTlJBd2dBV1FPc0FHRURDQUFJQUFnQUNBQUlBQWdBQ0FCcEF6UUZOUVUyQlRjRk9BVTVCVG9GTkFVMUJUWUZOd1U0QlRrRk9nVTBCVFVGTmdVM0JUZ0ZPUVU2QlRRRk5RVTJCVGNGT0FVNUJUb0ZOQVUxQlRZRk53VTRCVGtGT2dVMEJUVUZOZ1UzQlRnRk9RVTZCVFFGTlFVMkJUY0ZPQVU1QlRvRk5BVTFCVFlGTndVNEJUa0ZPZ1UwQlRVRk5nVTNCVGdGT1FVNkJUUUZOUVUyQlRjRk9BVTVCVG9GTkFVMUJUWUZOd1U0QlRrRk9nVTBCVFVGTmdVM0JUZ0ZPUVU2QlRRRk5RVTJCVGNGT0FVNUJUb0ZOQVUxQlRZRk53VTRCVGtGT2dVMEJUVUZOZ1UzQlRnRk9RVTZCVFFGTlFVMkJUY0ZPQVU1QlRvRk5BVTFCVFlGTndVNEJUa0ZPZ1UwQlRVRk5nVTNCVGdGT1FVNkJUUUZOUVUyQlRjRk9BVTVCVG9GTkFVMUJUWUZOd1U0QlRrRk9nVTBCVFVGTmdVM0JUZ0ZPUVU2QlRRRk5RVTJCVGNGT0FVNUJUb0ZOQVUxQlRZRk53VTRCVGtGT2dVMEJUVUZOZ1UzQlRnRk9RVTZCVFFGTlFVMkJUY0ZPQVU1QlRvRk5BVTFCVFlGTndVNEJUa0ZPZ1UwQlRVRk5nVTNCVGdGT1FVNkJUUUZOUVUyQlRjRk9BVTVCVG9GTkFVMUJUWUZOd1U0QlRrRk9nVTBCVFVGTmdVM0JUZ0ZPUVU2QlRRRk5RVTJCVGNGT0FVNUJUb0ZOQVUxQlRZRk53VTRCVGtGT2dVMEJUVUZOZ1UzQlRnRk9RVTZCVFFGTlFVMkJUY0ZPQVU1QlRvRk5BVTFCVFlGTndVNEJUa0ZPZ1UwQlRVRk5nVTNCVGdGT1FVNkJUUUZOUVUyQlRjRk9BVTVCVG9GTkFVMUJUWUZOd1U0QlRrRk9nVTBCVFVGTmdVM0JUZ0ZPUVU2QlRRRk5RVTJCVGNGT0FVNUJUb0ZOQVUxQlRZRk53VTRCVGtGT2dVMEJUVUZOZ1UzQlRnRk9RVTZCVFFGTlFVMkJUY0ZPQVU1QlRvRk5BVTFCVFlGTndVNEJUa0ZPZ1UwQlRVRk5nVTNCVGdGT1FVNkJUUUZOUVUyQlRjRk9BVTVCVG9GTkFVMUJUWUZOd1U0QlRrRk9nVTBCVFVGTmdVM0JUZ0ZPUVU2QlRRRk5RVTJCVGNGT0FVNUJUb0ZOQVUxQlRZRk53VTRCVGtGSVFVb0JTd0ZDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUJ0QXdnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FCTUFFd0FDQUFJQUFnQUNBQUlBQmdBQ0FBSUFBZ0FDQUMvQUFnQUNBQXlBUWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUNBQUlBQXdBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQUFBUkFCSUFBZ0FDQUFJQUJRQVNBQUlBQWdBSUFCd0FFQUFqZ0NJQUJzQXFBQzJBTDBBaWdEUUF0d0MrSUpJUXFWQVpVQldRcVZBWlVCbFFHVkFaVUJsUUdyQzVVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVhzS2xRR1ZBYkFLNndzckRHVU1wUXpsREpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFaVUJsUUdWQVpVQmxRR1ZBWlVCbFFHVkFmQUtBQXVaQTY0QXR3Q0pBTG9DNkFEd0FBZ0F1QUNnQS9vRXBnTzZBcXNEK0FBSUFBZ0Fzd01JQUFnQUNBQUlBSWtBdXdQNUFmc0J3d1BMQXdnQUNBQUlBQWdBQ0FEUkE5a0RDQUFJQU9FRDZRTUlBQWdBQ0FBSUFBZ0FDQUR1QS9ZRENBQUlBUDREeVFBSUFBZ0FCZ1FJQUFnQVhRQU9CQWdBQ0FBSUFBZ0FDQUFJQUJNRUNBQUlBQWdBQ0FBSUFBZ0FDQUQ4QUFRQkNBQUlBQWdBR2dRaUJDb0VDQUV4QkFnQUVBRUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBNEJBZ0FDQUJBQkVZRUNBQUlBQWdBVEFRWUFRZ0FWQVFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUZvRUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FPUUVJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUIrQkFjQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUVBQmhnU01CQWdBQ0FBSUFBZ0FsQVFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUF3QUVBQVFBQkFBREFBTUFBd0FEQUFRQUJBQUVBQVFBQkFBRUFBUUFCSEFUQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBZFFNSUFBZ0FDQUFJQUFnQUNBQUlBTWtBQ0FBSUFBZ0FmUU1JQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUNGQTRrRENBQUlBQWdBQ0FBSUFPY0JDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFJY0RDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUpFRENBQUlBQWdBQ0FERkFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQmdCQWdBWmdRSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQWJBUUNCWElFQ0FBSUFIa0VDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FCQUFKd0VRQUNqQktvRXNnUUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUM2Qk1JRUNBQUlBQWdBQ0FBSUFBZ0FDQUJtQkFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBeHdRSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUdZRUNBQUlBQWdBemdRSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBaWdXS0JZb0ZpZ1dLQllvRmlnV0tCZDBGWHdVSUFPSUY2Z1h4QllvRjNnVDVCUUFHQ0FhS0JZb0ZpZ1dLQllvRmlnV0tCWW9GaWdXS0JZb0ZpZ1hXQklvRmlnV0tCWW9GaWdXS0JZb0ZpZ1dLQllzRkVBYUtCWW9GaWdXS0JZb0ZpZ1dLQlJRR0NBQ0tCWW9GaWdXS0JRZ0FDQUFJQU5FRUNBQUlBQmdHaWdVZ0JnZ0FKZ1lJQUM0R013YUtCWW9GMHdRM0JqNEdpZ1dLQllvRmlnV0tCWW9GaWdXS0JZb0ZpZ1dLQllvRmlnVUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQWlnV0tCWW9GaWdXS0JZb0ZpZ1dLQllvRmlnV0tCWW9GaWdXS0JZb0ZpZ1dLQllvRmlnV0tCWW9GaWdXS0JZb0ZpZ1dLQllvRmlnV0tCWW9GaWdXTEJmLy8vLy8vL3dRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUF3QUVBQVFBQWdBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPQUFBQUFBQUFBQVFBRGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFGQUFVQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBVUFBQUFGQUFVQUFBQUZBQVVBQUFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFFQUFRQUJBQUVBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFGQUFVQUFRQUFBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUZBQVVBQUFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBQUFBQUFGQUFVQUFRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQndBRkFBVUFCUUFGQUFBQUJ3QUhBQWNBQUFBSEFBY0FCd0FGQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIQUFjQUJ3QUZBQVVBQlFBRkFBY0FCd0FGQUFVQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUhBQUFBQVFBQkFBQUFBQUFBQUFBQUFBQUZBQVVBQlFBRkFBQUFCd0FGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFIQUFjQUJ3QUhBQWNBQUFBSEFBY0FBQUFBQUFVQUJRQUhBQVVBQVFBSEFBRUFCd0FGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFGQUFVQUJ3QUJBQVVBQlFBRkFBVUFBQUFBQUFBQUFBQUFBQUVBQVFBQkFBRUFBUUFCQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQndBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFGQUFVQUFRQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUJRQU5BQVFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQkFBRUFBUUFCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFIQUFVQUJRQUZBQUFBQUFBQUFBY0FCUUFGQUFVQUJRQUZBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFBQUFGQUFVQUJRQUZBQVVBQUFBRkFBVUFCUUFBQUFVQUJRQUZBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFBQUFBQUFBQUFBQVVBQlFBRkFBY0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUhBQVVBQUFBSEFBY0FCd0FGQUFVQUJRQUZBQVVBQlFBRkFBVUFCd0FIQUFjQUJ3QUZBQWNBQndBQUFBVUFCUUFGQUFVQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJ3QUhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBVUFCd0FIQUFVQUJRQUZBQVVBQUFBQUFBY0FCd0FBQUFBQUJ3QUhBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFBQUFBQUJRQUZBQWNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBQUFCd0FIQUFjQUJRQUZBQUFBQUFBQUFBQUFCUUFGQUFBQUFBQUZBQVVBQlFBQUFBQUFBQUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUFBQUFBQUFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCd0FGQUFVQUJRQUZBQVVBQUFBRkFBVUFCd0FBQUFjQUJ3QUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUFBQUZBQVVBQndBRkFBVUFCUUFGQUFBQUFBQUhBQWNBQUFBQUFBY0FCd0FGQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBY0FCd0FBQUFBQUFBQUhBQWNBQndBQUFBY0FCd0FIQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUhBQWNBQndBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCd0FIQUFjQUJ3QUFBQVVBQlFBRkFBQUFCUUFGQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBY0FCUUFIQUFjQUJRQUhBQWNBQUFBRkFBY0FCd0FBQUFjQUJ3QUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBY0FCd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBQUFBVUFCd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUFBQUFBQUFBQUFBRkFBY0FCd0FGQUFVQUJRQUFBQVVBQUFBSEFBY0FCd0FIQUFjQUJ3QUhBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQUFBSEFBVUFCUUFGQUFVQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQUFBQndBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUFBQVVBQUFBRkFBQUFBQUFBQUFBQUJ3QUhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCd0FGQUFVQUJRQUZBQVVBQUFBRkFBVUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUZBQVVBQndBRkFBVUFCUUFGQUFVQUJRQUFBQVVBQlFBSEFBY0FCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSEFBY0FCUUFGQUFBQUFBQUFBQUFBQlFBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBY0FCUUFGQUFBQUFBQUFBQUFBQUFBQUFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFIQUFVQUJRQUZBQVVBQlFBRkFBVUFCd0FIQUFjQUJ3QUhBQWNBQndBSEFBVUFCd0FIQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJ3QUhBQWNBQndBRkFBVUFCd0FIQUFjQUFBQUFBQUFBQUFBSEFBY0FCUUFIQUFjQUJ3QUhBQWNBQndBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBY0FCd0FGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQlFBSEFBVUFCUUFGQUFVQUJRQUZBQVVBQUFBRkFBQUFCUUFBQUFBQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFjQUJ3QUhBQWNBQndBSEFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFBQUFBQUFVQUJRQUZBQVVBQlFBSEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFGQUFVQUJRQUZBQVVBQndBRkFBY0FCd0FIQUFjQUJ3QUZBQWNBQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIQUFVQUJRQUZBQVVBQndBSEFBVUFCUUFIQUFVQUJRQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBY0FCUUFGQUFjQUJ3QUhBQVVBQndBRkFBVUFCUUFIQUFjQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUhBQWNBQlFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFBQUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQWNBQlFBRkFBVUFCUUFGQUFVQUJRQUFBQUFBQUFBQUFBVUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBQUFCd0FGQUFVQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQUFCUUFGQUFVQUJRQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUZBQVVBQlFBRkFBVUFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFBQUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFGQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJ3QUhBQVVBQlFBSEFBQUFBQUFBQUFBQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQndBSEFBY0FCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQUFBQUFBQUFBQUFBQUFBQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBSEFBY0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFjQUJ3QUZBQVVBQlFBRkFBY0FCd0FGQUFVQUJ3QUhBQUFBQUFBQUFBQUFBQUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUZBQVVBQlFBRkFBY0FCd0FGQUFVQUJ3QUhBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFjQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFBQUFGQUFVQUJRQUFBQUFBQlFBRkFBQUFBQUFBQUFBQUFBQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBY0FCUUFGQUFjQUJ3QUFBQUFBQUFBQUFBQUFCd0FGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQndBRkFBY0FCd0FGQUFjQUJ3QUFBQWNBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFBQUFVQUJRQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFVQUJRQUFBQUFBQUFBQUFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQlFBSEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQlFBRkFBVUFCd0FGQUFVQUJRQUZBQVVBQlFBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQndBSEFBY0FCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUhBQWNBQndBRkFBVUFCUUFIQUFjQUJRQUhBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUZBQUFBQndBSEFBY0FCUUFGQUFVQUJRQUZBQVVBQlFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJ3QUhBQWNBQndBQUFBQUFCd0FIQUFBQUFBQUhBQWNBQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCd0FIQUFBQUFBQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQVVBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSEFBY0FCd0FGQUFVQUJRQUZBQVVBQlFBRkFBVUFCd0FIQUFVQUJRQUZBQWNBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUhBQWNBQlFBRkFBVUFCUUFGQUFVQUJ3QUZBQWNBQndBRkFBY0FCUUFGQUFjQUJRQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFIQUFjQUJRQUZBQVVBQlFBQUFBQUFCd0FIQUFjQUJ3QUZBQVVBQndBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFjQUJ3QUhBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUhBQWNBQlFBSEFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVQUJ3QUZBQWNBQndBRkFBVUFCUUFGQUFVQUJRQUhBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQndBRkFBVUFCUUFGQUFjQUJRQUZBQVVBQlFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFIQUFjQUJ3QUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUhBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSEFBY0FCd0FGQUFVQUJRQUZBQUFBQUFBRkFBVUFCd0FIQUFjQUJ3QUZBQUFBQUFBQUFBY0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJRQUZBQVVBQndBSEFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBY0FCUUFGQUFVQUJRQUZBQVVBQlFBQUFBVUFCUUFGQUFVQUJRQUZBQWNBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUFBQUhBQVVBQlFBRkFBVUFCUUFGQUFVQUJ3QUZBQVVBQndBRkFBVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJRQUZBQVVBQUFBQUFBQUFCUUFBQUFVQUJRQUFBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSEFBY0FCd0FIQUFjQUFBQUZBQVVBQUFBSEFBY0FCUUFIQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQndBSEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRkFBVUFCUUFGQUFVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFBQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBY0FCd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVBQlFBQUFBVUFCUUFGQUFBQUFBQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUZBQVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVUFCUUFGQUFVQUJRQUFBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBRkFBVUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBQUFCUUFGQUFVQUJRQUZBQVVBQlFBQUFBVUFCUUFBQUFVQUJRQUZBQVVBQlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGQUFVQUJRQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRQUZBQVVBQlFBRkFBVUFCUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQUZBQVVBQlFBRkFBVUFEZ0FPQUE0QURnQU9BQTRBRHdBUEFBOEFEd0FQQUE4QUR3QVBBQThBRHdBUEFBOEFEd0FQQUE4QUR3QVBBQThBRHdBUEFBOEFEd0FQQUE4QUR3QVBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWNBQndBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCd0FIQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWNBQndBSEFBY0FCd0FIQUFjQUJ3QUhBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFBQUFBQUFBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFLQUFvQUNnQUtBQW9BQ2dBS0FBb0FDZ0FLQUFvQUNnQUtBQW9BQ2dBS0FBb0FDZ0FLQUFvQUNnQUtBQW9BQ2dBTUFBd0FEQUFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQUFBQUFBQUFBQUFLQUFvQUNnQUtBQW9BQ2dBS0FBb0FDZ0FLQUFvQUNnQUtBQW9BQ2dBS0FBb0FDZ0FLQUFvQUNnQUtBQW9BQ2dBS0FBb0FDZ0FLQUFvQUNnQUtBQW9BQ2dBQUFBQUFBQUFBQUFzQURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QUN3QU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQU1BQXdBREFBTUFBd0FEQUFNQUF3QURBQUFBQUFBRGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE0QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBNEFEZ0FPQUE0QURnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUFBQUFBQUFBQUFBRGdBT0FBNEFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURnQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBT0FBNEFEZ0FBQUE0QURnQU9BQTRBRGdBT0FBQUFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QUFBQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QUFBQUFBQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBQUFBNEFBQUFPQUFBQUFBQUFBQUFBQUFBQUFBNEFBQUFBQUFBQUFBQUFBQUFBRGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURnQUFBQUFBRGdBQUFBQUFBQUFBQUE0QUFBQU9BQUFBQUFBQUFBQUFEZ0FPQUE0QUFBQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBNEFEZ0FPQUE0QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPQUE0QURnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPQUE0QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTRBRGdBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEZ0FPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURnQUFBQUFBQUFBQUFBNEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBQUFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT0FBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNEFEZ0FPQUE0QURnQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBQUFBQUFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBQUFBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTRBQUFBQUFBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBQUFEZ0FPQUE0QURnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFBQUFBQUFBQUFBQUFBQUFBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU9BQTRBRGdBT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRGdBT0FBNEFEZ0FPQUE0QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QUFBQU9BQTRBRGdBT0FBNEFEZ0FBQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFEZ0FPQUE0QURnQU9BQTRBRGdBT0FBNEFBQUFBQUFBQUFBQT0nO1xuZXhwb3J0IGNvbnN0IGJ5dGVMZW5ndGggPSAxOTYxNjtcbiIsImNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXG4vLyBVc2UgYSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgaW5kZXguXG5jb25zdCBsb29rdXAgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBbXSA6IG5ldyBVaW50OEFycmF5KDI1Nik7XG5mb3IgKGxldCBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgbG9va3VwW2NoYXJzLmNoYXJDb2RlQXQoaSldID0gaTtcbn1cblxuZXhwb3J0IGNvbnN0IGRlY29kZSA9IChiYXNlNjQ6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgbnVtYmVyW10gPT4ge1xuICAgIGxldCBidWZmZXJMZW5ndGggPSBiYXNlNjQubGVuZ3RoICogMC43NSxcbiAgICAgICAgbGVuID0gYmFzZTY0Lmxlbmd0aCxcbiAgICAgICAgaSxcbiAgICAgICAgcCA9IDAsXG4gICAgICAgIGVuY29kZWQxLFxuICAgICAgICBlbmNvZGVkMixcbiAgICAgICAgZW5jb2RlZDMsXG4gICAgICAgIGVuY29kZWQ0O1xuXG4gICAgaWYgKGJhc2U2NFtiYXNlNjQubGVuZ3RoIC0gMV0gPT09ICc9Jykge1xuICAgICAgICBidWZmZXJMZW5ndGgtLTtcbiAgICAgICAgaWYgKGJhc2U2NFtiYXNlNjQubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICAgICAgYnVmZmVyTGVuZ3RoLS07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPVxuICAgICAgICB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuc2xpY2UgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IG5ldyBBcnJheUJ1ZmZlcihidWZmZXJMZW5ndGgpXG4gICAgICAgICAgICA6IG5ldyBBcnJheShidWZmZXJMZW5ndGgpO1xuICAgIGNvbnN0IGJ5dGVzID0gQXJyYXkuaXNBcnJheShidWZmZXIpID8gYnVmZmVyIDogbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgICAgICBlbmNvZGVkMSA9IGxvb2t1cFtiYXNlNjQuY2hhckNvZGVBdChpKV07XG4gICAgICAgIGVuY29kZWQyID0gbG9va3VwW2Jhc2U2NC5jaGFyQ29kZUF0KGkgKyAxKV07XG4gICAgICAgIGVuY29kZWQzID0gbG9va3VwW2Jhc2U2NC5jaGFyQ29kZUF0KGkgKyAyKV07XG4gICAgICAgIGVuY29kZWQ0ID0gbG9va3VwW2Jhc2U2NC5jaGFyQ29kZUF0KGkgKyAzKV07XG5cbiAgICAgICAgYnl0ZXNbcCsrXSA9IChlbmNvZGVkMSA8PCAyKSB8IChlbmNvZGVkMiA+PiA0KTtcbiAgICAgICAgYnl0ZXNbcCsrXSA9ICgoZW5jb2RlZDIgJiAxNSkgPDwgNCkgfCAoZW5jb2RlZDMgPj4gMik7XG4gICAgICAgIGJ5dGVzW3ArK10gPSAoKGVuY29kZWQzICYgMykgPDwgNikgfCAoZW5jb2RlZDQgJiA2Myk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBwb2x5VWludDE2QXJyYXkgPSAoYnVmZmVyOiBudW1iZXJbXSk6IG51bWJlcltdID0+IHtcbiAgICBjb25zdCBsZW5ndGggPSBidWZmZXIubGVuZ3RoO1xuICAgIGNvbnN0IGJ5dGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBieXRlcy5wdXNoKChidWZmZXJbaSArIDFdIDw8IDgpIHwgYnVmZmVyW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ5dGVzO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvbHlVaW50MzJBcnJheSA9IChidWZmZXI6IG51bWJlcltdKTogbnVtYmVyW10gPT4ge1xuICAgIGNvbnN0IGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY29uc3QgYnl0ZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgIGJ5dGVzLnB1c2goKGJ1ZmZlcltpICsgM10gPDwgMjQpIHwgKGJ1ZmZlcltpICsgMl0gPDwgMTYpIHwgKGJ1ZmZlcltpICsgMV0gPDwgOCkgfCBidWZmZXJbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXM7XG59O1xuIiwiaW1wb3J0IHtkZWNvZGUsIHBvbHlVaW50MTZBcnJheSwgcG9seVVpbnQzMkFycmF5fSBmcm9tICcuL1V0aWwnO1xuXG5leHBvcnQgdHlwZSBpbnQgPSBudW1iZXI7XG5cbi8qKiBTaGlmdCBzaXplIGZvciBnZXR0aW5nIHRoZSBpbmRleC0yIHRhYmxlIG9mZnNldC4gKi9cbmV4cG9ydCBjb25zdCBVVFJJRTJfU0hJRlRfMiA9IDU7XG5cbi8qKiBTaGlmdCBzaXplIGZvciBnZXR0aW5nIHRoZSBpbmRleC0xIHRhYmxlIG9mZnNldC4gKi9cbmV4cG9ydCBjb25zdCBVVFJJRTJfU0hJRlRfMSA9IDYgKyA1O1xuXG4vKipcbiAqIFNoaWZ0IHNpemUgZm9yIHNoaWZ0aW5nIGxlZnQgdGhlIGluZGV4IGFycmF5IHZhbHVlcy5cbiAqIEluY3JlYXNlcyBwb3NzaWJsZSBkYXRhIHNpemUgd2l0aCAxNi1iaXQgaW5kZXggdmFsdWVzIGF0IHRoZSBjb3N0XG4gKiBvZiBjb21wYWN0YWJpbGl0eS5cbiAqIFRoaXMgcmVxdWlyZXMgZGF0YSBibG9ja3MgdG8gYmUgYWxpZ25lZCBieSBVVFJJRTJfREFUQV9HUkFOVUxBUklUWS5cbiAqL1xuZXhwb3J0IGNvbnN0IFVUUklFMl9JTkRFWF9TSElGVCA9IDI7XG5cbi8qKlxuICogRGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gc2hpZnQgc2l6ZXMsXG4gKiBmb3IgZ2V0dGluZyBhbiBpbmRleC0xIG9mZnNldCBmcm9tIGFuIGluZGV4LTIgb2Zmc2V0LiA2PTExLTVcbiAqL1xuZXhwb3J0IGNvbnN0IFVUUklFMl9TSElGVF8xXzIgPSBVVFJJRTJfU0hJRlRfMSAtIFVUUklFMl9TSElGVF8yO1xuXG4vKipcbiAqIFRoZSBwYXJ0IG9mIHRoZSBpbmRleC0yIHRhYmxlIGZvciBVK0Q4MDAuLlUrREJGRiBzdG9yZXMgdmFsdWVzIGZvclxuICogbGVhZCBzdXJyb2dhdGUgY29kZSBfdW5pdHNfIG5vdCBjb2RlIF9wb2ludHNfLlxuICogVmFsdWVzIGZvciBsZWFkIHN1cnJvZ2F0ZSBjb2RlIF9wb2ludHNfIGFyZSBpbmRleGVkIHdpdGggdGhpcyBwb3J0aW9uIG9mIHRoZSB0YWJsZS5cbiAqIExlbmd0aD0zMj0weDIwPTB4NDAwPj5VVFJJRTJfU0hJRlRfMi4gKFRoZXJlIGFyZSAxMDI0PTB4NDAwIGxlYWQgc3Vycm9nYXRlcy4pXG4gKi9cbmV4cG9ydCBjb25zdCBVVFJJRTJfTFNDUF9JTkRFWF8yX09GRlNFVCA9IDB4MTAwMDAgPj4gVVRSSUUyX1NISUZUXzI7XG5cbi8qKiBOdW1iZXIgb2YgZW50cmllcyBpbiBhIGRhdGEgYmxvY2suIDMyPTB4MjAgKi9cbmV4cG9ydCBjb25zdCBVVFJJRTJfREFUQV9CTE9DS19MRU5HVEggPSAxIDw8IFVUUklFMl9TSElGVF8yO1xuLyoqIE1hc2sgZm9yIGdldHRpbmcgdGhlIGxvd2VyIGJpdHMgZm9yIHRoZSBpbi1kYXRhLWJsb2NrIG9mZnNldC4gKi9cbmV4cG9ydCBjb25zdCBVVFJJRTJfREFUQV9NQVNLID0gVVRSSUUyX0RBVEFfQkxPQ0tfTEVOR1RIIC0gMTtcblxuZXhwb3J0IGNvbnN0IFVUUklFMl9MU0NQX0lOREVYXzJfTEVOR1RIID0gMHg0MDAgPj4gVVRSSUUyX1NISUZUXzI7XG4vKiogQ291bnQgdGhlIGxlbmd0aHMgb2YgYm90aCBCTVAgcGllY2VzLiAyMDgwPTB4ODIwICovXG5leHBvcnQgY29uc3QgVVRSSUUyX0lOREVYXzJfQk1QX0xFTkdUSCA9IFVUUklFMl9MU0NQX0lOREVYXzJfT0ZGU0VUICsgVVRSSUUyX0xTQ1BfSU5ERVhfMl9MRU5HVEg7XG4vKipcbiAqIFRoZSAyLWJ5dGUgVVRGLTggdmVyc2lvbiBvZiB0aGUgaW5kZXgtMiB0YWJsZSBmb2xsb3dzIGF0IG9mZnNldCAyMDgwPTB4ODIwLlxuICogTGVuZ3RoIDMyPTB4MjAgZm9yIGxlYWQgYnl0ZXMgQzAuLkRGLCByZWdhcmRsZXNzIG9mIFVUUklFMl9TSElGVF8yLlxuICovXG5leHBvcnQgY29uc3QgVVRSSUUyX1VURjhfMkJfSU5ERVhfMl9PRkZTRVQgPSBVVFJJRTJfSU5ERVhfMl9CTVBfTEVOR1RIO1xuZXhwb3J0IGNvbnN0IFVUUklFMl9VVEY4XzJCX0lOREVYXzJfTEVOR1RIID0gMHg4MDAgPj4gNjsgLyogVSswODAwIGlzIHRoZSBmaXJzdCBjb2RlIHBvaW50IGFmdGVyIDItYnl0ZSBVVEYtOCAqL1xuLyoqXG4gKiBUaGUgaW5kZXgtMSB0YWJsZSwgb25seSB1c2VkIGZvciBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnRzLCBhdCBvZmZzZXQgMjExMj0weDg0MC5cbiAqIFZhcmlhYmxlIGxlbmd0aCwgZm9yIGNvZGUgcG9pbnRzIHVwIHRvIGhpZ2hTdGFydCwgd2hlcmUgdGhlIGxhc3Qgc2luZ2xlLXZhbHVlIHJhbmdlIHN0YXJ0cy5cbiAqIE1heGltdW0gbGVuZ3RoIDUxMj0weDIwMD0weDEwMDAwMD4+VVRSSUUyX1NISUZUXzEuXG4gKiAoRm9yIDB4MTAwMDAwIHN1cHBsZW1lbnRhcnkgY29kZSBwb2ludHMgVSsxMDAwMC4uVSsxMGZmZmYuKVxuICpcbiAqIFRoZSBwYXJ0IG9mIHRoZSBpbmRleC0yIHRhYmxlIGZvciBzdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnRzIHN0YXJ0c1xuICogYWZ0ZXIgdGhpcyBpbmRleC0xIHRhYmxlLlxuICpcbiAqIEJvdGggdGhlIGluZGV4LTEgdGFibGUgYW5kIHRoZSBmb2xsb3dpbmcgcGFydCBvZiB0aGUgaW5kZXgtMiB0YWJsZVxuICogYXJlIG9taXR0ZWQgY29tcGxldGVseSBpZiB0aGVyZSBpcyBvbmx5IEJNUCBkYXRhLlxuICovXG5leHBvcnQgY29uc3QgVVRSSUUyX0lOREVYXzFfT0ZGU0VUID0gVVRSSUUyX1VURjhfMkJfSU5ERVhfMl9PRkZTRVQgKyBVVFJJRTJfVVRGOF8yQl9JTkRFWF8yX0xFTkdUSDtcblxuLyoqXG4gKiBOdW1iZXIgb2YgaW5kZXgtMSBlbnRyaWVzIGZvciB0aGUgQk1QLiAzMj0weDIwXG4gKiBUaGlzIHBhcnQgb2YgdGhlIGluZGV4LTEgdGFibGUgaXMgb21pdHRlZCBmcm9tIHRoZSBzZXJpYWxpemVkIGZvcm0uXG4gKi9cbmV4cG9ydCBjb25zdCBVVFJJRTJfT01JVFRFRF9CTVBfSU5ERVhfMV9MRU5HVEggPSAweDEwMDAwID4+IFVUUklFMl9TSElGVF8xO1xuXG4vKiogTnVtYmVyIG9mIGVudHJpZXMgaW4gYW4gaW5kZXgtMiBibG9jay4gNjQ9MHg0MCAqL1xuZXhwb3J0IGNvbnN0IFVUUklFMl9JTkRFWF8yX0JMT0NLX0xFTkdUSCA9IDEgPDwgVVRSSUUyX1NISUZUXzFfMjtcbi8qKiBNYXNrIGZvciBnZXR0aW5nIHRoZSBsb3dlciBiaXRzIGZvciB0aGUgaW4taW5kZXgtMi1ibG9jayBvZmZzZXQuICovXG5leHBvcnQgY29uc3QgVVRSSUUyX0lOREVYXzJfTUFTSyA9IFVUUklFMl9JTkRFWF8yX0JMT0NLX0xFTkdUSCAtIDE7XG5cbmNvbnN0IHNsaWNlMTYgPSAodmlldzogbnVtYmVyW10gfCBVaW50MTZBcnJheSwgc3RhcnQ6IG51bWJlciwgZW5kPzogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHZpZXcuc2xpY2UpIHtcbiAgICAgICAgcmV0dXJuIHZpZXcuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBVaW50MTZBcnJheShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh2aWV3LCBzdGFydCwgZW5kKSk7XG59O1xuXG5jb25zdCBzbGljZTMyID0gKHZpZXc6IG51bWJlcltdIHwgVWludDMyQXJyYXksIHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlcikgPT4ge1xuICAgIGlmICh2aWV3LnNsaWNlKSB7XG4gICAgICAgIHJldHVybiB2aWV3LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVWludDMyQXJyYXkoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodmlldywgc3RhcnQsIGVuZCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRyaWVGcm9tQmFzZTY0ID0gKGJhc2U2NDogc3RyaW5nLCBfYnl0ZUxlbmd0aDogbnVtYmVyKTogVHJpZSA9PiB7XG4gICAgY29uc3QgYnVmZmVyID0gZGVjb2RlKGJhc2U2NCk7XG4gICAgY29uc3QgdmlldzMyID0gQXJyYXkuaXNBcnJheShidWZmZXIpID8gcG9seVVpbnQzMkFycmF5KGJ1ZmZlcikgOiBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcbiAgICBjb25zdCB2aWV3MTYgPSBBcnJheS5pc0FycmF5KGJ1ZmZlcikgPyBwb2x5VWludDE2QXJyYXkoYnVmZmVyKSA6IG5ldyBVaW50MTZBcnJheShidWZmZXIpO1xuICAgIGNvbnN0IGhlYWRlckxlbmd0aCA9IDI0O1xuXG4gICAgY29uc3QgaW5kZXggPSBzbGljZTE2KHZpZXcxNiwgaGVhZGVyTGVuZ3RoIC8gMiwgdmlldzMyWzRdIC8gMik7XG4gICAgY29uc3QgZGF0YSA9XG4gICAgICAgIHZpZXczMls1XSA9PT0gMlxuICAgICAgICAgICAgPyBzbGljZTE2KHZpZXcxNiwgKGhlYWRlckxlbmd0aCArIHZpZXczMls0XSkgLyAyKVxuICAgICAgICAgICAgOiBzbGljZTMyKHZpZXczMiwgTWF0aC5jZWlsKChoZWFkZXJMZW5ndGggKyB2aWV3MzJbNF0pIC8gNCkpO1xuXG4gICAgcmV0dXJuIG5ldyBUcmllKHZpZXczMlswXSwgdmlldzMyWzFdLCB2aWV3MzJbMl0sIHZpZXczMlszXSwgaW5kZXgsIGRhdGEpO1xufTtcblxuZXhwb3J0IGNsYXNzIFRyaWUge1xuICAgIGluaXRpYWxWYWx1ZTogaW50O1xuICAgIGVycm9yVmFsdWU6IGludDtcbiAgICBoaWdoU3RhcnQ6IGludDtcbiAgICBoaWdoVmFsdWVJbmRleDogaW50O1xuICAgIGluZGV4OiBVaW50MTZBcnJheSB8IG51bWJlcltdO1xuICAgIGRhdGE6IFVpbnQzMkFycmF5IHwgVWludDE2QXJyYXkgfCBudW1iZXJbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbml0aWFsVmFsdWU6IGludCxcbiAgICAgICAgZXJyb3JWYWx1ZTogaW50LFxuICAgICAgICBoaWdoU3RhcnQ6IGludCxcbiAgICAgICAgaGlnaFZhbHVlSW5kZXg6IGludCxcbiAgICAgICAgaW5kZXg6IFVpbnQxNkFycmF5IHwgbnVtYmVyW10sXG4gICAgICAgIGRhdGE6IFVpbnQzMkFycmF5IHwgVWludDE2QXJyYXkgfCBudW1iZXJbXVxuICAgICkge1xuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgdGhpcy5lcnJvclZhbHVlID0gZXJyb3JWYWx1ZTtcbiAgICAgICAgdGhpcy5oaWdoU3RhcnQgPSBoaWdoU3RhcnQ7XG4gICAgICAgIHRoaXMuaGlnaFZhbHVlSW5kZXggPSBoaWdoVmFsdWVJbmRleDtcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgZm9yIGEgY29kZSBwb2ludCBhcyBzdG9yZWQgaW4gdGhlIFRyaWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29kZVBvaW50IHRoZSBjb2RlIHBvaW50XG4gICAgICogQHJldHVybiB0aGUgdmFsdWVcbiAgICAgKi9cbiAgICBnZXQoY29kZVBvaW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaXg7XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPj0gMCkge1xuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8IDB4MGQ4MDAgfHwgKGNvZGVQb2ludCA+IDB4MGRiZmYgJiYgY29kZVBvaW50IDw9IDB4MGZmZmYpKSB7XG4gICAgICAgICAgICAgICAgLy8gT3JkaW5hcnkgQk1QIGNvZGUgcG9pbnQsIGV4Y2x1ZGluZyBsZWFkaW5nIHN1cnJvZ2F0ZXMuXG4gICAgICAgICAgICAgICAgLy8gQk1QIHVzZXMgYSBzaW5nbGUgbGV2ZWwgbG9va3VwLiAgQk1QIGluZGV4IHN0YXJ0cyBhdCBvZmZzZXQgMCBpbiB0aGUgVHJpZTIgaW5kZXguXG4gICAgICAgICAgICAgICAgLy8gMTYgYml0IGRhdGEgaXMgc3RvcmVkIGluIHRoZSBpbmRleCBhcnJheSBpdHNlbGYuXG4gICAgICAgICAgICAgICAgaXggPSB0aGlzLmluZGV4W2NvZGVQb2ludCA+PiBVVFJJRTJfU0hJRlRfMl07XG4gICAgICAgICAgICAgICAgaXggPSAoaXggPDwgVVRSSUUyX0lOREVYX1NISUZUKSArIChjb2RlUG9pbnQgJiBVVFJJRTJfREFUQV9NQVNLKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhW2l4XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8PSAweGZmZmYpIHtcbiAgICAgICAgICAgICAgICAvLyBMZWFkIFN1cnJvZ2F0ZSBDb2RlIFBvaW50LiAgQSBTZXBhcmF0ZSBpbmRleCBzZWN0aW9uIGlzIHN0b3JlZCBmb3JcbiAgICAgICAgICAgICAgICAvLyBsZWFkIHN1cnJvZ2F0ZSBjb2RlIHVuaXRzIGFuZCBjb2RlIHBvaW50cy5cbiAgICAgICAgICAgICAgICAvLyAgIFRoZSBtYWluIGluZGV4IGhhcyB0aGUgY29kZSB1bml0IGRhdGEuXG4gICAgICAgICAgICAgICAgLy8gICBGb3IgdGhpcyBmdW5jdGlvbiwgd2UgbmVlZCB0aGUgY29kZSBwb2ludCBkYXRhLlxuICAgICAgICAgICAgICAgIC8vIE5vdGU6IHRoaXMgZXhwcmVzc2lvbiBjb3VsZCBiZSByZWZhY3RvcmVkIGZvciBzbGlnaHRseSBpbXByb3ZlZCBlZmZpY2llbmN5LCBidXRcbiAgICAgICAgICAgICAgICAvLyAgICAgICBzdXJyb2dhdGUgY29kZSBwb2ludHMgd2lsbCBiZSBzbyByYXJlIGluIHByYWN0aWNlIHRoYXQgaXQncyBub3Qgd29ydGggaXQuXG4gICAgICAgICAgICAgICAgaXggPSB0aGlzLmluZGV4W1VUUklFMl9MU0NQX0lOREVYXzJfT0ZGU0VUICsgKChjb2RlUG9pbnQgLSAweGQ4MDApID4+IFVUUklFMl9TSElGVF8yKV07XG4gICAgICAgICAgICAgICAgaXggPSAoaXggPDwgVVRSSUUyX0lOREVYX1NISUZUKSArIChjb2RlUG9pbnQgJiBVVFJJRTJfREFUQV9NQVNLKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhW2l4XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8IHRoaXMuaGlnaFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLy8gU3VwcGxlbWVudGFsIGNvZGUgcG9pbnQsIHVzZSB0d28tbGV2ZWwgbG9va3VwLlxuICAgICAgICAgICAgICAgIGl4ID0gVVRSSUUyX0lOREVYXzFfT0ZGU0VUIC0gVVRSSUUyX09NSVRURURfQk1QX0lOREVYXzFfTEVOR1RIICsgKGNvZGVQb2ludCA+PiBVVFJJRTJfU0hJRlRfMSk7XG4gICAgICAgICAgICAgICAgaXggPSB0aGlzLmluZGV4W2l4XTtcbiAgICAgICAgICAgICAgICBpeCArPSAoY29kZVBvaW50ID4+IFVUUklFMl9TSElGVF8yKSAmIFVUUklFMl9JTkRFWF8yX01BU0s7XG4gICAgICAgICAgICAgICAgaXggPSB0aGlzLmluZGV4W2l4XTtcbiAgICAgICAgICAgICAgICBpeCA9IChpeCA8PCBVVFJJRTJfSU5ERVhfU0hJRlQpICsgKGNvZGVQb2ludCAmIFVUUklFMl9EQVRBX01BU0spO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFbaXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8PSAweDEwZmZmZikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFbdGhpcy5oaWdoVmFsdWVJbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGYWxsIHRocm91Z2guICBUaGUgY29kZSBwb2ludCBpcyBvdXRzaWRlIG9mIHRoZSBsZWdhbCByYW5nZSBvZiAwLi4weDEwZmZmZi5cbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JWYWx1ZTtcbiAgICB9XG59XG4iLCJjb25zdCBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxuLy8gVXNlIGEgbG9va3VwIHRhYmxlIHRvIGZpbmQgdGhlIGluZGV4LlxuY29uc3QgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gW10gOiBuZXcgVWludDhBcnJheSgyNTYpO1xuZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xuICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7XG59XG5cbmV4cG9ydCBjb25zdCBlbmNvZGUgPSAoYXJyYXlidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nID0+IHtcbiAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheShhcnJheWJ1ZmZlciksXG4gICAgICAgIGksXG4gICAgICAgIGxlbiA9IGJ5dGVzLmxlbmd0aCxcbiAgICAgICAgYmFzZTY0ID0gJyc7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDMpIHtcbiAgICAgICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2ldID4+IDJdO1xuICAgICAgICBiYXNlNjQgKz0gY2hhcnNbKChieXRlc1tpXSAmIDMpIDw8IDQpIHwgKGJ5dGVzW2kgKyAxXSA+PiA0KV07XG4gICAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2kgKyAxXSAmIDE1KSA8PCAyKSB8IChieXRlc1tpICsgMl0gPj4gNildO1xuICAgICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaSArIDJdICYgNjNdO1xuICAgIH1cblxuICAgIGlmIChsZW4gJSAzID09PSAyKSB7XG4gICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgJz0nO1xuICAgIH0gZWxzZSBpZiAobGVuICUgMyA9PT0gMSkge1xuICAgICAgICBiYXNlNjQgPSBiYXNlNjQuc3Vic3RyaW5nKDAsIGJhc2U2NC5sZW5ndGggLSAyKSArICc9PSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U2NDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNvZGUgPSAoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciA9PiB7XG4gICAgbGV0IGJ1ZmZlckxlbmd0aCA9IGJhc2U2NC5sZW5ndGggKiAwLjc1LFxuICAgICAgICBsZW4gPSBiYXNlNjQubGVuZ3RoLFxuICAgICAgICBpLFxuICAgICAgICBwID0gMCxcbiAgICAgICAgZW5jb2RlZDEsXG4gICAgICAgIGVuY29kZWQyLFxuICAgICAgICBlbmNvZGVkMyxcbiAgICAgICAgZW5jb2RlZDQ7XG5cbiAgICBpZiAoYmFzZTY0W2Jhc2U2NC5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICAgIGJ1ZmZlckxlbmd0aC0tO1xuICAgICAgICBpZiAoYmFzZTY0W2Jhc2U2NC5sZW5ndGggLSAyXSA9PT0gJz0nKSB7XG4gICAgICAgICAgICBidWZmZXJMZW5ndGgtLTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFycmF5YnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ1ZmZlckxlbmd0aCksXG4gICAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgICAgIGVuY29kZWQxID0gbG9va3VwW2Jhc2U2NC5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgZW5jb2RlZDIgPSBsb29rdXBbYmFzZTY0LmNoYXJDb2RlQXQoaSArIDEpXTtcbiAgICAgICAgZW5jb2RlZDMgPSBsb29rdXBbYmFzZTY0LmNoYXJDb2RlQXQoaSArIDIpXTtcbiAgICAgICAgZW5jb2RlZDQgPSBsb29rdXBbYmFzZTY0LmNoYXJDb2RlQXQoaSArIDMpXTtcblxuICAgICAgICBieXRlc1twKytdID0gKGVuY29kZWQxIDw8IDIpIHwgKGVuY29kZWQyID4+IDQpO1xuICAgICAgICBieXRlc1twKytdID0gKChlbmNvZGVkMiAmIDE1KSA8PCA0KSB8IChlbmNvZGVkMyA+PiAyKTtcbiAgICAgICAgYnl0ZXNbcCsrXSA9ICgoZW5jb2RlZDMgJiAzKSA8PCA2KSB8IChlbmNvZGVkNCAmIDYzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXlidWZmZXI7XG59O1xuIiwiaW1wb3J0IHtiYXNlNjQsIGJ5dGVMZW5ndGh9IGZyb20gJy4vZ3JhcGhlbWUtYnJlYWstdHJpZSc7XG5pbXBvcnQge2NyZWF0ZVRyaWVGcm9tQmFzZTY0fSBmcm9tICd1dHJpZSc7XG5cbmNvbnN0IE90aGVyID0gMDtcbmNvbnN0IFByZXBlbmQgPSAxO1xuY29uc3QgQ1IgPSAyO1xuY29uc3QgTEYgPSAzO1xuY29uc3QgQ29udHJvbCA9IDQ7XG5jb25zdCBFeHRlbmQgPSA1O1xuY29uc3QgUmVnaW9uYWxfSW5kaWNhdG9yID0gNjtcbmNvbnN0IFNwYWNpbmdNYXJrID0gNztcbmNvbnN0IEwgPSA4O1xuY29uc3QgViA9IDk7XG5jb25zdCBUID0gMTA7XG5jb25zdCBMViA9IDExO1xuY29uc3QgTFZUID0gMTI7XG5jb25zdCBaV0ogPSAxMztcbmNvbnN0IEV4dGVuZGVkX1BpY3RvZ3JhcGhpYyA9IDE0O1xuY29uc3QgUkkgPSAxNTtcblxuZXhwb3J0IGNvbnN0IGNsYXNzZXM6IHtba2V5OiBzdHJpbmddOiBudW1iZXJ9ID0ge1xuICAgIE90aGVyLFxuICAgIFByZXBlbmQsXG4gICAgQ1IsXG4gICAgTEYsXG4gICAgQ29udHJvbCxcbiAgICBFeHRlbmQsXG4gICAgUmVnaW9uYWxfSW5kaWNhdG9yLFxuICAgIFNwYWNpbmdNYXJrLFxuICAgIEwsXG4gICAgVixcbiAgICBULFxuICAgIExWLFxuICAgIExWVCxcbiAgICBaV0osXG4gICAgRXh0ZW5kZWRfUGljdG9ncmFwaGljLFxuICAgIFJJLFxufTtcblxuZXhwb3J0IGNvbnN0IHRvQ29kZVBvaW50cyA9IChzdHI6IHN0cmluZyk6IG51bWJlcltdID0+IHtcbiAgICBjb25zdCBjb2RlUG9pbnRzID0gW107XG4gICAgbGV0IGkgPSAwO1xuICAgIGNvbnN0IGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgICBpZiAodmFsdWUgPj0gMHhkODAwICYmIHZhbHVlIDw9IDB4ZGJmZiAmJiBpIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBleHRyYSA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICAgICAgICBpZiAoKGV4dHJhICYgMHhmYzAwKSA9PT0gMHhkYzAwKSB7XG4gICAgICAgICAgICAgICAgY29kZVBvaW50cy5wdXNoKCgodmFsdWUgJiAweDNmZikgPDwgMTApICsgKGV4dHJhICYgMHgzZmYpICsgMHgxMDAwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvZGVQb2ludHMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29kZVBvaW50cy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29kZVBvaW50cztcbn07XG5cbmV4cG9ydCBjb25zdCBmcm9tQ29kZVBvaW50ID0gKC4uLmNvZGVQb2ludHM6IG51bWJlcltdKTogc3RyaW5nID0+IHtcbiAgICBpZiAoU3RyaW5nLmZyb21Db2RlUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmNvZGVQb2ludHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IGNvZGVQb2ludHMubGVuZ3RoO1xuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBjb2RlVW5pdHMgPSBbXTtcblxuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGxldCByZXN1bHQgPSAnJztcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBsZXQgY29kZVBvaW50ID0gY29kZVBvaW50c1tpbmRleF07XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhmZmZmKSB7XG4gICAgICAgICAgICBjb2RlVW5pdHMucHVzaChjb2RlUG9pbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29kZVBvaW50IC09IDB4MTAwMDA7XG4gICAgICAgICAgICBjb2RlVW5pdHMucHVzaCgoY29kZVBvaW50ID4+IDEwKSArIDB4ZDgwMCwgKGNvZGVQb2ludCAlIDB4NDAwKSArIDB4ZGMwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gbGVuZ3RoIHx8IGNvZGVVbml0cy5sZW5ndGggPiAweDQwMDApIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmNvZGVVbml0cyk7XG4gICAgICAgICAgICBjb2RlVW5pdHMubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IFVuaWNvZGVUcmllID0gY3JlYXRlVHJpZUZyb21CYXNlNjQoYmFzZTY0LCBieXRlTGVuZ3RoKTtcblxuZXhwb3J0IGNvbnN0IEJSRUFLX05PVF9BTExPV0VEID0gJ8OXJztcbmV4cG9ydCBjb25zdCBCUkVBS19BTExPV0VEID0gJ8O3JztcblxuZXhwb3J0IHR5cGUgQlJFQUtfT1BQT1JUVU5JVElFUyA9IHR5cGVvZiBCUkVBS19OT1RfQUxMT1dFRCB8IHR5cGVvZiBCUkVBS19BTExPV0VEO1xuXG5leHBvcnQgY29uc3QgY29kZVBvaW50VG9DbGFzcyA9IChjb2RlUG9pbnQ6IG51bWJlcik6IG51bWJlciA9PiBVbmljb2RlVHJpZS5nZXQoY29kZVBvaW50KTtcblxuY29uc3QgX2dyYXBoZW1lQnJlYWtBdEluZGV4ID0gKF9jb2RlUG9pbnRzOiBudW1iZXJbXSwgY2xhc3NUeXBlczogbnVtYmVyW10sIGluZGV4OiBudW1iZXIpOiBCUkVBS19PUFBPUlRVTklUSUVTID0+IHtcbiAgICBsZXQgcHJldkluZGV4ID0gaW5kZXggLSAyO1xuICAgIGxldCBwcmV2ID0gY2xhc3NUeXBlc1twcmV2SW5kZXhdO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBjbGFzc1R5cGVzW2luZGV4IC0gMV07XG4gICAgY29uc3QgbmV4dCA9IGNsYXNzVHlwZXNbaW5kZXhdO1xuICAgIC8vIEdCMyBEbyBub3QgYnJlYWsgYmV0d2VlbiBhIENSIGFuZCBMRlxuICAgIGlmIChjdXJyZW50ID09PSBDUiAmJiBuZXh0ID09PSBMRikge1xuICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgfVxuXG4gICAgLy8gR0I0IE90aGVyd2lzZSwgYnJlYWsgYmVmb3JlIGFuZCBhZnRlciBjb250cm9scy5cbiAgICBpZiAoY3VycmVudCA9PT0gQ1IgfHwgY3VycmVudCA9PT0gTEYgfHwgY3VycmVudCA9PT0gQ29udHJvbCkge1xuICAgICAgICByZXR1cm4gQlJFQUtfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBHQjVcbiAgICBpZiAobmV4dCA9PT0gQ1IgfHwgbmV4dCA9PT0gTEYgfHwgbmV4dCA9PT0gQ29udHJvbCkge1xuICAgICAgICByZXR1cm4gQlJFQUtfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBEbyBub3QgYnJlYWsgSGFuZ3VsIHN5bGxhYmxlIHNlcXVlbmNlcy5cbiAgICAvLyBHQjZcbiAgICBpZiAoY3VycmVudCA9PT0gTCAmJiBbTCwgViwgTFYsIExWVF0uaW5kZXhPZihuZXh0KSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIEJSRUFLX05PVF9BTExPV0VEO1xuICAgIH1cblxuICAgIC8vIEdCN1xuICAgIGlmICgoY3VycmVudCA9PT0gTFYgfHwgY3VycmVudCA9PT0gVikgJiYgKG5leHQgPT09IFYgfHwgbmV4dCA9PT0gVCkpIHtcbiAgICAgICAgcmV0dXJuIEJSRUFLX05PVF9BTExPV0VEO1xuICAgIH1cblxuICAgIC8vIEdCOFxuICAgIGlmICgoY3VycmVudCA9PT0gTFZUIHx8IGN1cnJlbnQgPT09IFQpICYmIG5leHQgPT09IFQpIHtcbiAgICAgICAgcmV0dXJuIEJSRUFLX05PVF9BTExPV0VEO1xuICAgIH1cblxuICAgIC8vIEdCOSBEbyBub3QgYnJlYWsgYmVmb3JlIGV4dGVuZGluZyBjaGFyYWN0ZXJzIG9yIFpXSi5cbiAgICBpZiAobmV4dCA9PT0gWldKIHx8IG5leHQgPT09IEV4dGVuZCkge1xuICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgfVxuICAgIC8vIERvIG5vdCBicmVhayBiZWZvcmUgU3BhY2luZ01hcmtzLCBvciBhZnRlciBQcmVwZW5kIGNoYXJhY3RlcnMuXG4gICAgLy8gR0I5YVxuICAgIGlmIChuZXh0ID09PSBTcGFjaW5nTWFyaykge1xuICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgfVxuXG4gICAgLy8gR0I5YVxuICAgIGlmIChjdXJyZW50ID09PSBQcmVwZW5kKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICB9XG5cbiAgICAvLyBHQjExIERvIG5vdCBicmVhayB3aXRoaW4gZW1vamkgbW9kaWZpZXIgc2VxdWVuY2VzIG9yIGVtb2ppIHp3aiBzZXF1ZW5jZXMuXG4gICAgaWYgKGN1cnJlbnQgPT09IFpXSiAmJiBuZXh0ID09PSBFeHRlbmRlZF9QaWN0b2dyYXBoaWMpIHtcbiAgICAgICAgd2hpbGUgKHByZXYgPT09IEV4dGVuZCkge1xuICAgICAgICAgICAgcHJldiA9IGNsYXNzVHlwZXNbLS1wcmV2SW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2ID09PSBFeHRlbmRlZF9QaWN0b2dyYXBoaWMpIHtcbiAgICAgICAgICAgIHJldHVybiBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdCMTIgRG8gbm90IGJyZWFrIHdpdGhpbiBlbW9qaSBmbGFnIHNlcXVlbmNlcy5cbiAgICAvLyBUaGF0IGlzLCBkbyBub3QgYnJlYWsgYmV0d2VlbiByZWdpb25hbCBpbmRpY2F0b3IgKFJJKSBzeW1ib2xzXG4gICAgLy8gaWYgdGhlcmUgaXMgYW4gb2RkIG51bWJlciBvZiBSSSBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgYnJlYWsgcG9pbnQuXG4gICAgaWYgKGN1cnJlbnQgPT09IFJJICYmIG5leHQgPT09IFJJKSB7XG4gICAgICAgIGxldCBjb3VudFJJID0gMDtcbiAgICAgICAgd2hpbGUgKHByZXYgPT09IFJJKSB7XG4gICAgICAgICAgICBjb3VudFJJKys7XG4gICAgICAgICAgICBwcmV2ID0gY2xhc3NUeXBlc1stLXByZXZJbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvdW50UkkgJSAyID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gQlJFQUtfTk9UX0FMTE9XRUQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQlJFQUtfQUxMT1dFRDtcbn07XG5cbmV4cG9ydCBjb25zdCBncmFwaGVtZUJyZWFrQXRJbmRleCA9IChjb2RlUG9pbnRzOiBudW1iZXJbXSwgaW5kZXg6IG51bWJlcik6IEJSRUFLX09QUE9SVFVOSVRJRVMgPT4ge1xuICAgIC8vIEdCMSBCcmVhayBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0ZXh0LCB1bmxlc3MgdGhlIHRleHQgaXMgZW1wdHkuXG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCUkVBS19BTExPV0VEO1xuICAgIH1cblxuICAgIC8vIEdCMlxuICAgIGlmIChpbmRleCA+PSBjb2RlUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gQlJFQUtfQUxMT1dFRDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc1R5cGVzID0gY29kZVBvaW50cy5tYXAoY29kZVBvaW50VG9DbGFzcyk7XG4gICAgcmV0dXJuIF9ncmFwaGVtZUJyZWFrQXRJbmRleChjb2RlUG9pbnRzLCBjbGFzc1R5cGVzLCBpbmRleCk7XG59O1xuXG5leHBvcnQgY29uc3QgR3JhcGhlbWVCcmVha2VyID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgY29kZVBvaW50cyA9IHRvQ29kZVBvaW50cyhzdHIpO1xuICAgIGNvbnN0IGxlbmd0aCA9IGNvZGVQb2ludHMubGVuZ3RoO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgbGV0IGxhc3RFbmQgPSAwO1xuICAgIGNvbnN0IGNsYXNzVHlwZXMgPSBjb2RlUG9pbnRzLm1hcChjb2RlUG9pbnRUb0NsYXNzKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge2RvbmU6IHRydWUsIHZhbHVlOiBudWxsfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGdyYXBoZW1lQnJlYWsgPSBCUkVBS19OT1RfQUxMT1dFRDtcbiAgICAgICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgICAgICBpbmRleCA8IGxlbmd0aCAmJlxuICAgICAgICAgICAgICAgIChncmFwaGVtZUJyZWFrID0gX2dyYXBoZW1lQnJlYWtBdEluZGV4KGNvZGVQb2ludHMsIGNsYXNzVHlwZXMsICsraW5kZXgpKSA9PT0gQlJFQUtfTk9UX0FMTE9XRURcbiAgICAgICAgICAgICkge31cblxuICAgICAgICAgICAgaWYgKGdyYXBoZW1lQnJlYWsgIT09IEJSRUFLX05PVF9BTExPV0VEIHx8IGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZyb21Db2RlUG9pbnQuYXBwbHkobnVsbCwgY29kZVBvaW50cy5zbGljZShsYXN0RW5kLCBpbmRleCkpO1xuICAgICAgICAgICAgICAgIGxhc3RFbmQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlLCBkb25lOiBmYWxzZX07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7ZG9uZTogdHJ1ZSwgdmFsdWU6IG51bGx9O1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7fVxuXG4gICAgICAgICAgICByZXR1cm4ge2RvbmU6IHRydWUsIHZhbHVlOiBudWxsfTtcbiAgICAgICAgfSxcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNwbGl0R3JhcGhlbWVzID0gKHN0cjogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuICAgIGNvbnN0IGJyZWFrZXIgPSBHcmFwaGVtZUJyZWFrZXIoc3RyKTtcblxuICAgIGNvbnN0IGdyYXBoZW1lcyA9IFtdO1xuICAgIGxldCBiaztcblxuICAgIHdoaWxlICghKGJrID0gYnJlYWtlci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgaWYgKGJrLnZhbHVlKSB7XG4gICAgICAgICAgICBncmFwaGVtZXMucHVzaChiay52YWx1ZS5zbGljZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBncmFwaGVtZXM7XG59O1xuIiwiaW1wb3J0IHtmcm9tQ29kZVBvaW50LCB0b0NvZGVQb2ludHN9IGZyb20gJ2Nzcy1saW5lLWJyZWFrJztcclxuXHJcbmNvbnN0IHRlc3RSYW5nZUJvdW5kcyA9IChkb2N1bWVudDogRG9jdW1lbnQpID0+IHtcclxuICAgIGNvbnN0IFRFU1RfSEVJR0hUID0gMTIzO1xyXG5cclxuICAgIGlmIChkb2N1bWVudC5jcmVhdGVSYW5nZSkge1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgICBpZiAocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYm91bmR0ZXN0Jyk7XHJcbiAgICAgICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke1RFU1RfSEVJR0hUfXB4YDtcclxuICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZSh0ZXN0RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlQm91bmRzID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlSGVpZ2h0ID0gTWF0aC5yb3VuZChyYW5nZUJvdW5kcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlc3RFbGVtZW50KTtcclxuICAgICAgICAgICAgaWYgKHJhbmdlSGVpZ2h0ID09PSBURVNUX0hFSUdIVCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxuY29uc3QgdGVzdElPU0xpbmVCcmVhayA9IChkb2N1bWVudDogRG9jdW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYm91bmR0ZXN0Jyk7XHJcbiAgICB0ZXN0RWxlbWVudC5zdHlsZS53aWR0aCA9ICc1MHB4JztcclxuICAgIHRlc3RFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgdGVzdEVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSAnMTJweCc7XHJcbiAgICB0ZXN0RWxlbWVudC5zdHlsZS5sZXR0ZXJTcGFjaW5nID0gJzBweCc7XHJcbiAgICB0ZXN0RWxlbWVudC5zdHlsZS53b3JkU3BhY2luZyA9ICcwcHgnO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0RWxlbWVudCk7XHJcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcblxyXG4gICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gdHlwZW9mICcnLnJlcGVhdCA9PT0gJ2Z1bmN0aW9uJyA/ICcmIzEyODEwNDsnLnJlcGVhdCgxMCkgOiAnJztcclxuXHJcbiAgICBjb25zdCBub2RlID0gdGVzdEVsZW1lbnQuZmlyc3RDaGlsZCBhcyBUZXh0O1xyXG5cclxuICAgIGNvbnN0IHRleHRMaXN0ID0gdG9Db2RlUG9pbnRzKG5vZGUuZGF0YSkubWFwKChpKSA9PiBmcm9tQ29kZVBvaW50KGkpKTtcclxuICAgIGxldCBvZmZzZXQgPSAwO1xyXG4gICAgbGV0IHByZXY6IERPTVJlY3QgPSB7fSBhcyBET01SZWN0O1xyXG5cclxuICAgIC8vIGlvcyAxMyBkb2VzIG5vdCBoYW5kbGUgcmFuZ2UgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGxpbmUgY2hhbmdlcyBjb3JyZWN0bHkgIzIxNzdcclxuICAgIGNvbnN0IHN1cHBvcnRzID0gdGV4dExpc3QuZXZlcnkoKHRleHQsIGkpID0+IHtcclxuICAgICAgICByYW5nZS5zZXRTdGFydChub2RlLCBvZmZzZXQpO1xyXG4gICAgICAgIHJhbmdlLnNldEVuZChub2RlLCBvZmZzZXQgKyB0ZXh0Lmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgcmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICBvZmZzZXQgKz0gdGV4dC5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgYm91bmRBaGVhZCA9IHJlY3QueCA+IHByZXYueCB8fCByZWN0LnkgPiBwcmV2Lnk7XHJcblxyXG4gICAgICAgIHByZXYgPSByZWN0O1xyXG4gICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGJvdW5kQWhlYWQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlc3RFbGVtZW50KTtcclxuICAgIHJldHVybiBzdXBwb3J0cztcclxufTtcclxuXHJcbmNvbnN0IHRlc3RDT1JTID0gKCk6IGJvb2xlYW4gPT4gdHlwZW9mIG5ldyBJbWFnZSgpLmNyb3NzT3JpZ2luICE9PSAndW5kZWZpbmVkJztcclxuXHJcbmNvbnN0IHRlc3RSZXNwb25zZVR5cGUgPSAoKTogYm9vbGVhbiA9PiB0eXBlb2YgbmV3IFhNTEh0dHBSZXF1ZXN0KCkucmVzcG9uc2VUeXBlID09PSAnc3RyaW5nJztcclxuXHJcbmNvbnN0IHRlc3RTVkcgPSAoZG9jdW1lbnQ6IERvY3VtZW50KTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBpZiAoIWN0eCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpbWcuc3JjID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PC9zdmc+YDtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICBjYW52YXMudG9EYXRhVVJMKCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5jb25zdCBpc0dyZWVuUGl4ZWwgPSAoZGF0YTogVWludDhDbGFtcGVkQXJyYXkpOiBib29sZWFuID0+XHJcbiAgICBkYXRhWzBdID09PSAwICYmIGRhdGFbMV0gPT09IDI1NSAmJiBkYXRhWzJdID09PSAwICYmIGRhdGFbM10gPT09IDI1NTtcclxuXHJcbmNvbnN0IHRlc3RGb3JlaWduT2JqZWN0ID0gKGRvY3VtZW50OiBEb2N1bWVudCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xyXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjb25zdCBzaXplID0gMTAwO1xyXG4gICAgY2FudmFzLndpZHRoID0gc2l6ZTtcclxuICAgIGNhbnZhcy5oZWlnaHQgPSBzaXplO1xyXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBpZiAoIWN0eCkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBjdHguZmlsbFN0eWxlID0gJ3JnYigwLCAyNTUsIDApJztcclxuICAgIGN0eC5maWxsUmVjdCgwLCAwLCBzaXplLCBzaXplKTtcclxuXHJcbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgIGNvbnN0IGdyZWVuSW1hZ2VTcmMgPSBjYW52YXMudG9EYXRhVVJMKCk7XHJcbiAgICBpbWcuc3JjID0gZ3JlZW5JbWFnZVNyYztcclxuICAgIGNvbnN0IHN2ZyA9IGNyZWF0ZUZvcmVpZ25PYmplY3RTVkcoc2l6ZSwgc2l6ZSwgMCwgMCwgaW1nKTtcclxuICAgIGN0eC5maWxsU3R5bGUgPSAncmVkJztcclxuICAgIGN0eC5maWxsUmVjdCgwLCAwLCBzaXplLCBzaXplKTtcclxuXHJcbiAgICByZXR1cm4gbG9hZFNlcmlhbGl6ZWRTVkcoc3ZnKVxyXG4gICAgICAgIC50aGVuKChpbWc6IEhUTUxJbWFnZUVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCBzaXplLCBzaXplKS5kYXRhO1xyXG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJ3JlZCc7XHJcbiAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBzaXplLCBzaXplKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgbm9kZS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKCR7Z3JlZW5JbWFnZVNyY30pYDtcclxuICAgICAgICAgICAgbm9kZS5zdHlsZS5oZWlnaHQgPSBgJHtzaXplfXB4YDtcclxuICAgICAgICAgICAgLy8gRmlyZWZveCA1NSBkb2VzIG5vdCByZW5kZXIgaW5saW5lIDxpbWcgLz4gdGFnc1xyXG4gICAgICAgICAgICByZXR1cm4gaXNHcmVlblBpeGVsKGRhdGEpXHJcbiAgICAgICAgICAgICAgICA/IGxvYWRTZXJpYWxpemVkU1ZHKGNyZWF0ZUZvcmVpZ25PYmplY3RTVkcoc2l6ZSwgc2l6ZSwgMCwgMCwgbm9kZSkpXHJcbiAgICAgICAgICAgICAgICA6IFByb21pc2UucmVqZWN0KGZhbHNlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC50aGVuKChpbWc6IEhUTUxJbWFnZUVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xyXG4gICAgICAgICAgICAvLyBFZGdlIGRvZXMgbm90IHJlbmRlciBiYWNrZ3JvdW5kLWltYWdlc1xyXG4gICAgICAgICAgICByZXR1cm4gaXNHcmVlblBpeGVsKGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgc2l6ZSwgc2l6ZSkuZGF0YSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKCkgPT4gZmFsc2UpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUZvcmVpZ25PYmplY3RTVkcgPSAoXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBub2RlOiBOb2RlXHJcbik6IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50ID0+IHtcclxuICAgIGNvbnN0IHhtbG5zID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcclxuICAgIGNvbnN0IHN2ZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh4bWxucywgJ3N2ZycpO1xyXG4gICAgY29uc3QgZm9yZWlnbk9iamVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh4bWxucywgJ2ZvcmVpZ25PYmplY3QnKTtcclxuICAgIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnd2lkdGgnLCB3aWR0aC50b1N0cmluZygpKTtcclxuICAgIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgaGVpZ2h0LnRvU3RyaW5nKCkpO1xyXG5cclxuICAgIGZvcmVpZ25PYmplY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ3dpZHRoJywgJzEwMCUnKTtcclxuICAgIGZvcmVpZ25PYmplY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ2hlaWdodCcsICcxMDAlJyk7XHJcbiAgICBmb3JlaWduT2JqZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICd4JywgeC50b1N0cmluZygpKTtcclxuICAgIGZvcmVpZ25PYmplY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ3knLCB5LnRvU3RyaW5nKCkpO1xyXG4gICAgZm9yZWlnbk9iamVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICd0cnVlJyk7XHJcbiAgICBzdmcuYXBwZW5kQ2hpbGQoZm9yZWlnbk9iamVjdCk7XHJcblxyXG4gICAgZm9yZWlnbk9iamVjdC5hcHBlbmRDaGlsZChub2RlKTtcclxuXHJcbiAgICByZXR1cm4gc3ZnO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGxvYWRTZXJpYWxpemVkU1ZHID0gKHN2ZzogTm9kZSk6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4gPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4gcmVzb2x2ZShpbWcpO1xyXG4gICAgICAgIGltZy5vbmVycm9yID0gcmVqZWN0O1xyXG5cclxuICAgICAgICBpbWcuc3JjID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCR7ZW5jb2RlVVJJQ29tcG9uZW50KG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoc3ZnKSl9YDtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IEZFQVRVUkVTID0ge1xyXG4gICAgZ2V0IFNVUFBPUlRfUkFOR0VfQk9VTkRTKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgICd1c2Ugc3RyaWN0JztcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRlc3RSYW5nZUJvdW5kcyhkb2N1bWVudCk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZFQVRVUkVTLCAnU1VQUE9SVF9SQU5HRV9CT1VORFMnLCB7dmFsdWV9KTtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LFxyXG4gICAgZ2V0IFNVUFBPUlRfV09SRF9CUkVBS0lORygpOiBib29sZWFuIHtcclxuICAgICAgICAndXNlIHN0cmljdCc7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBGRUFUVVJFUy5TVVBQT1JUX1JBTkdFX0JPVU5EUyAmJiB0ZXN0SU9TTGluZUJyZWFrKGRvY3VtZW50KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRkVBVFVSRVMsICdTVVBQT1JUX1dPUkRfQlJFQUtJTkcnLCB7dmFsdWV9KTtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LFxyXG4gICAgZ2V0IFNVUFBPUlRfU1ZHX0RSQVdJTkcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgJ3VzZSBzdHJpY3QnO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGVzdFNWRyhkb2N1bWVudCk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZFQVRVUkVTLCAnU1VQUE9SVF9TVkdfRFJBV0lORycsIHt2YWx1ZX0pO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0sXHJcbiAgICBnZXQgU1VQUE9SVF9GT1JFSUdOT0JKRUNUX0RSQVdJTkcoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgJ3VzZSBzdHJpY3QnO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID1cclxuICAgICAgICAgICAgdHlwZW9mIEFycmF5LmZyb20gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHdpbmRvdy5mZXRjaCA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICAgICAgICAgICAgPyB0ZXN0Rm9yZWlnbk9iamVjdChkb2N1bWVudClcclxuICAgICAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRkVBVFVSRVMsICdTVVBQT1JUX0ZPUkVJR05PQkpFQ1RfRFJBV0lORycsIHt2YWx1ZX0pO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0sXHJcbiAgICBnZXQgU1VQUE9SVF9DT1JTX0lNQUdFUygpOiBib29sZWFuIHtcclxuICAgICAgICAndXNlIHN0cmljdCc7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0ZXN0Q09SUygpO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGRUFUVVJFUywgJ1NVUFBPUlRfQ09SU19JTUFHRVMnLCB7dmFsdWV9KTtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LFxyXG4gICAgZ2V0IFNVUFBPUlRfUkVTUE9OU0VfVFlQRSgpOiBib29sZWFuIHtcclxuICAgICAgICAndXNlIHN0cmljdCc7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0ZXN0UmVzcG9uc2VUeXBlKCk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZFQVRVUkVTLCAnU1VQUE9SVF9SRVNQT05TRV9UWVBFJywge3ZhbHVlfSk7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfSxcclxuICAgIGdldCBTVVBQT1JUX0NPUlNfWEhSKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgICd1c2Ugc3RyaWN0JztcclxuICAgICAgICBjb25zdCB2YWx1ZSA9ICd3aXRoQ3JlZGVudGlhbHMnIGluIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGRUFUVVJFUywgJ1NVUFBPUlRfQ09SU19YSFInLCB7dmFsdWV9KTtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LFxyXG4gICAgZ2V0IFNVUFBPUlRfTkFUSVZFX1RFWFRfU0VHTUVOVEFUSU9OKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgICd1c2Ugc3RyaWN0JztcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gISEodHlwZW9mIEludGwgIT09ICd1bmRlZmluZWQnICYmIChJbnRsIGFzIGFueSkuU2VnbWVudGVyKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRkVBVFVSRVMsICdTVVBQT1JUX05BVElWRV9URVhUX1NFR01FTlRBVElPTicsIHt2YWx1ZX0pO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtPVkVSRkxPV19XUkFQfSBmcm9tICcuLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9vdmVyZmxvdy13cmFwJztcclxuaW1wb3J0IHtDU1NQYXJzZWREZWNsYXJhdGlvbn0gZnJvbSAnLi4vaW5kZXgnO1xyXG5pbXBvcnQge2Zyb21Db2RlUG9pbnQsIExpbmVCcmVha2VyLCB0b0NvZGVQb2ludHN9IGZyb20gJ2Nzcy1saW5lLWJyZWFrJztcclxuaW1wb3J0IHtzcGxpdEdyYXBoZW1lc30gZnJvbSAndGV4dC1zZWdtZW50YXRpb24nO1xyXG5pbXBvcnQge0JvdW5kcywgcGFyc2VCb3VuZHN9IGZyb20gJy4vYm91bmRzJztcclxuaW1wb3J0IHtGRUFUVVJFU30gZnJvbSAnLi4vLi4vY29yZS9mZWF0dXJlcyc7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0Qm91bmRzIHtcclxuICAgIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcclxuICAgIHJlYWRvbmx5IGJvdW5kczogQm91bmRzO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHRleHQ6IHN0cmluZywgYm91bmRzOiBCb3VuZHMpIHtcclxuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xyXG4gICAgICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcGFyc2VUZXh0Qm91bmRzID0gKFxyXG4gICAgY29udGV4dDogQ29udGV4dCxcclxuICAgIHZhbHVlOiBzdHJpbmcsXHJcbiAgICBzdHlsZXM6IENTU1BhcnNlZERlY2xhcmF0aW9uLFxyXG4gICAgbm9kZTogVGV4dFxyXG4pOiBUZXh0Qm91bmRzW10gPT4ge1xyXG4gICAgY29uc3QgdGV4dExpc3QgPSBicmVha1RleHQodmFsdWUsIHN0eWxlcyk7XHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzOiBUZXh0Qm91bmRzW10gPSBbXTtcclxuICAgIGxldCBvZmZzZXQgPSAwO1xyXG4gICAgdGV4dExpc3QuZm9yRWFjaCgodGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChzdHlsZXMudGV4dERlY29yYXRpb25MaW5lLmxlbmd0aCB8fCB0ZXh0LnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChGRUFUVVJFUy5TVVBQT1JUX1JBTkdFX0JPVU5EUykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSBjcmVhdGVSYW5nZShub2RlLCBvZmZzZXQsIHRleHQubGVuZ3RoKS5nZXRDbGllbnRSZWN0cygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJTZWdtZW50cyA9IHNlZ21lbnRHcmFwaGVtZXModGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1Yk9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ViU2VnbWVudHMuZm9yRWFjaCgoc3ViU2VnbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Qm91bmRzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGV4dEJvdW5kcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJTZWdtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvdW5kcy5mcm9tRE9NUmVjdExpc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVJhbmdlKG5vZGUsIHN1Yk9mZnNldCArIG9mZnNldCwgc3ViU2VnbWVudC5sZW5ndGgpLmdldENsaWVudFJlY3RzKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk9mZnNldCArPSBzdWJTZWdtZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dEJvdW5kcy5wdXNoKG5ldyBUZXh0Qm91bmRzKHRleHQsIEJvdW5kcy5mcm9tRE9NUmVjdExpc3QoY29udGV4dCwgY2xpZW50UmVjdHMpKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudE5vZGUgPSBub2RlLnNwbGl0VGV4dCh0ZXh0Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0Qm91bmRzLnB1c2gobmV3IFRleHRCb3VuZHModGV4dCwgZ2V0V3JhcHBlckJvdW5kcyhjb250ZXh0LCBub2RlKSkpO1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IHJlcGxhY2VtZW50Tm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoIUZFQVRVUkVTLlNVUFBPUlRfUkFOR0VfQk9VTkRTKSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnNwbGl0VGV4dCh0ZXh0Lmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9mZnNldCArPSB0ZXh0Lmxlbmd0aDtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0ZXh0Qm91bmRzO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0V3JhcHBlckJvdW5kcyA9IChjb250ZXh0OiBDb250ZXh0LCBub2RlOiBUZXh0KTogQm91bmRzID0+IHtcclxuICAgIGNvbnN0IG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XHJcbiAgICBpZiAob3duZXJEb2N1bWVudCkge1xyXG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2h0bWwyY2FudmFzd3JhcHBlcicpO1xyXG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQobm9kZS5jbG9uZU5vZGUodHJ1ZSkpO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgcGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQod3JhcHBlciwgbm9kZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IHBhcnNlQm91bmRzKGNvbnRleHQsIHdyYXBwZXIpO1xyXG4gICAgICAgICAgICBpZiAod3JhcHBlci5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh3cmFwcGVyLmZpcnN0Q2hpbGQsIHdyYXBwZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBib3VuZHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBCb3VuZHMuRU1QVFk7XHJcbn07XHJcblxyXG5jb25zdCBjcmVhdGVSYW5nZSA9IChub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiBSYW5nZSA9PiB7XHJcbiAgICBjb25zdCBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xyXG4gICAgaWYgKCFvd25lckRvY3VtZW50KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGhhcyBubyBvd25lciBkb2N1bWVudCcpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmFuZ2UgPSBvd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICByYW5nZS5zZXRTdGFydChub2RlLCBvZmZzZXQpO1xyXG4gICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIG9mZnNldCArIGxlbmd0aCk7XHJcbiAgICByZXR1cm4gcmFuZ2U7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgc2VnbWVudEdyYXBoZW1lcyA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xyXG4gICAgaWYgKEZFQVRVUkVTLlNVUFBPUlRfTkFUSVZFX1RFWFRfU0VHTUVOVEFUSU9OKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBjb25zdCBzZWdtZW50ZXIgPSBuZXcgKEludGwgYXMgYW55KS5TZWdtZW50ZXIodm9pZCAwLCB7Z3JhbnVsYXJpdHk6ICdncmFwaGVtZSd9KTtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHNlZ21lbnRlci5zZWdtZW50KHZhbHVlKSkubWFwKChzZWdtZW50OiBhbnkpID0+IHNlZ21lbnQuc2VnbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNwbGl0R3JhcGhlbWVzKHZhbHVlKTtcclxufTtcclxuXHJcbmNvbnN0IHNlZ21lbnRXb3JkcyA9ICh2YWx1ZTogc3RyaW5nLCBzdHlsZXM6IENTU1BhcnNlZERlY2xhcmF0aW9uKTogc3RyaW5nW10gPT4ge1xyXG4gICAgaWYgKEZFQVRVUkVTLlNVUFBPUlRfTkFUSVZFX1RFWFRfU0VHTUVOVEFUSU9OKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBjb25zdCBzZWdtZW50ZXIgPSBuZXcgKEludGwgYXMgYW55KS5TZWdtZW50ZXIodm9pZCAwLCB7XHJcbiAgICAgICAgICAgIGdyYW51bGFyaXR5OiAnd29yZCdcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHNlZ21lbnRlci5zZWdtZW50KHZhbHVlKSkubWFwKChzZWdtZW50OiBhbnkpID0+IHNlZ21lbnQuc2VnbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGJyZWFrV29yZHModmFsdWUsIHN0eWxlcyk7XHJcbn07XHJcblxyXG5jb25zdCBicmVha1RleHQgPSAodmFsdWU6IHN0cmluZywgc3R5bGVzOiBDU1NQYXJzZWREZWNsYXJhdGlvbik6IHN0cmluZ1tdID0+IHtcclxuICAgIHJldHVybiBzdHlsZXMubGV0dGVyU3BhY2luZyAhPT0gMCA/IHNlZ21lbnRHcmFwaGVtZXModmFsdWUpIDogc2VnbWVudFdvcmRzKHZhbHVlLCBzdHlsZXMpO1xyXG59O1xyXG5cclxuLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10ZXh0LyN3b3JkLXNlcGFyYXRvclxyXG5jb25zdCB3b3JkU2VwYXJhdG9ycyA9IFsweDAwMjAsIDB4MDBhMCwgMHgxMzYxLCAweDEwMTAwLCAweDEwMTAxLCAweDEwMzksIDB4MTA5MV07XHJcblxyXG5jb25zdCBicmVha1dvcmRzID0gKHN0cjogc3RyaW5nLCBzdHlsZXM6IENTU1BhcnNlZERlY2xhcmF0aW9uKTogc3RyaW5nW10gPT4ge1xyXG4gICAgY29uc3QgYnJlYWtlciA9IExpbmVCcmVha2VyKHN0ciwge1xyXG4gICAgICAgIGxpbmVCcmVhazogc3R5bGVzLmxpbmVCcmVhayxcclxuICAgICAgICB3b3JkQnJlYWs6IHN0eWxlcy5vdmVyZmxvd1dyYXAgPT09IE9WRVJGTE9XX1dSQVAuQlJFQUtfV09SRCA/ICdicmVhay13b3JkJyA6IHN0eWxlcy53b3JkQnJlYWtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHdvcmRzID0gW107XHJcbiAgICBsZXQgYms7XHJcblxyXG4gICAgd2hpbGUgKCEoYmsgPSBicmVha2VyLm5leHQoKSkuZG9uZSkge1xyXG4gICAgICAgIGlmIChiay52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGJrLnZhbHVlLnNsaWNlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVQb2ludHMgPSB0b0NvZGVQb2ludHModmFsdWUpO1xyXG4gICAgICAgICAgICBsZXQgd29yZCA9ICcnO1xyXG4gICAgICAgICAgICBjb2RlUG9pbnRzLmZvckVhY2goKGNvZGVQb2ludCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdvcmRTZXBhcmF0b3JzLmluZGV4T2YoY29kZVBvaW50KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB3b3JkICs9IGZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRzLnB1c2god29yZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHdvcmRzLnB1c2goZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpKTtcclxuICAgICAgICAgICAgICAgICAgICB3b3JkID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHdvcmQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB3b3Jkcy5wdXNoKHdvcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB3b3JkcztcclxufTtcclxuIiwiaW1wb3J0IHtDU1NQYXJzZWREZWNsYXJhdGlvbn0gZnJvbSAnLi4vY3NzL2luZGV4JztcclxuaW1wb3J0IHtURVhUX1RSQU5TRk9STX0gZnJvbSAnLi4vY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3RleHQtdHJhbnNmb3JtJztcclxuaW1wb3J0IHtwYXJzZVRleHRCb3VuZHMsIFRleHRCb3VuZHN9IGZyb20gJy4uL2Nzcy9sYXlvdXQvdGV4dCc7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vY29yZS9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBjbGFzcyBUZXh0Q29udGFpbmVyIHtcclxuICAgIHRleHQ6IHN0cmluZztcclxuICAgIHRleHRCb3VuZHM6IFRleHRCb3VuZHNbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBub2RlOiBUZXh0LCBzdHlsZXM6IENTU1BhcnNlZERlY2xhcmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0ID0gdHJhbnNmb3JtKG5vZGUuZGF0YSwgc3R5bGVzLnRleHRUcmFuc2Zvcm0pO1xyXG4gICAgICAgIHRoaXMudGV4dEJvdW5kcyA9IHBhcnNlVGV4dEJvdW5kcyhjb250ZXh0LCB0aGlzLnRleHQsIHN0eWxlcywgbm9kZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IHRyYW5zZm9ybSA9ICh0ZXh0OiBzdHJpbmcsIHRyYW5zZm9ybTogVEVYVF9UUkFOU0ZPUk0pID0+IHtcclxuICAgIHN3aXRjaCAodHJhbnNmb3JtKSB7XHJcbiAgICAgICAgY2FzZSBURVhUX1RSQU5TRk9STS5MT1dFUkNBU0U6XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgY2FzZSBURVhUX1RSQU5TRk9STS5DQVBJVEFMSVpFOlxyXG4gICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKENBUElUQUxJWkUsIGNhcGl0YWxpemUpO1xyXG4gICAgICAgIGNhc2UgVEVYVF9UUkFOU0ZPUk0uVVBQRVJDQVNFOlxyXG4gICAgICAgICAgICByZXR1cm4gdGV4dC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuY29uc3QgQ0FQSVRBTElaRSA9IC8oXnxcXHN8OnwtfFxcKHxcXCkpKFthLXpdKS9nO1xyXG5cclxuY29uc3QgY2FwaXRhbGl6ZSA9IChtOiBzdHJpbmcsIHAxOiBzdHJpbmcsIHAyOiBzdHJpbmcpID0+IHtcclxuICAgIGlmIChtLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gcDEgKyBwMi50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtO1xyXG59O1xyXG4iLCJpbXBvcnQge0VsZW1lbnRDb250YWluZXJ9IGZyb20gJy4uL2VsZW1lbnQtY29udGFpbmVyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEltYWdlRWxlbWVudENvbnRhaW5lciBleHRlbmRzIEVsZW1lbnRDb250YWluZXIge1xyXG4gICAgc3JjOiBzdHJpbmc7XHJcbiAgICBpbnRyaW5zaWNXaWR0aDogbnVtYmVyO1xyXG4gICAgaW50cmluc2ljSGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSB7XHJcbiAgICAgICAgc3VwZXIoY29udGV4dCwgaW1nKTtcclxuICAgICAgICB0aGlzLnNyYyA9IGltZy5jdXJyZW50U3JjIHx8IGltZy5zcmM7XHJcbiAgICAgICAgdGhpcy5pbnRyaW5zaWNXaWR0aCA9IGltZy5uYXR1cmFsV2lkdGg7XHJcbiAgICAgICAgdGhpcy5pbnRyaW5zaWNIZWlnaHQgPSBpbWcubmF0dXJhbEhlaWdodDtcclxuICAgICAgICB0aGlzLmNvbnRleHQuY2FjaGUuYWRkSW1hZ2UodGhpcy5zcmMpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7RWxlbWVudENvbnRhaW5lcn0gZnJvbSAnLi4vZWxlbWVudC1jb250YWluZXInO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FudmFzRWxlbWVudENvbnRhaW5lciBleHRlbmRzIEVsZW1lbnRDb250YWluZXIge1xyXG4gICAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuICAgIGludHJpbnNpY1dpZHRoOiBudW1iZXI7XHJcbiAgICBpbnRyaW5zaWNIZWlnaHQ6IG51bWJlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KSB7XHJcbiAgICAgICAgc3VwZXIoY29udGV4dCwgY2FudmFzKTtcclxuICAgICAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcclxuICAgICAgICB0aGlzLmludHJpbnNpY1dpZHRoID0gY2FudmFzLndpZHRoO1xyXG4gICAgICAgIHRoaXMuaW50cmluc2ljSGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0VsZW1lbnRDb250YWluZXJ9IGZyb20gJy4uL2VsZW1lbnQtY29udGFpbmVyJztcclxuaW1wb3J0IHtwYXJzZUJvdW5kc30gZnJvbSAnLi4vLi4vY3NzL2xheW91dC9ib3VuZHMnO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcblxyXG5leHBvcnQgY2xhc3MgU1ZHRWxlbWVudENvbnRhaW5lciBleHRlbmRzIEVsZW1lbnRDb250YWluZXIge1xyXG4gICAgc3ZnOiBzdHJpbmc7XHJcbiAgICBpbnRyaW5zaWNXaWR0aDogbnVtYmVyO1xyXG4gICAgaW50cmluc2ljSGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgaW1nOiBTVkdTVkdFbGVtZW50KSB7XHJcbiAgICAgICAgc3VwZXIoY29udGV4dCwgaW1nKTtcclxuICAgICAgICBjb25zdCBzID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcclxuICAgICAgICBjb25zdCBib3VuZHMgPSBwYXJzZUJvdW5kcyhjb250ZXh0LCBpbWcpO1xyXG4gICAgICAgIGltZy5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7Ym91bmRzLndpZHRofXB4YCk7XHJcbiAgICAgICAgaW1nLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgYCR7Ym91bmRzLmhlaWdodH1weGApO1xyXG5cclxuICAgICAgICB0aGlzLnN2ZyA9IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQocy5zZXJpYWxpemVUb1N0cmluZyhpbWcpKX1gO1xyXG4gICAgICAgIHRoaXMuaW50cmluc2ljV2lkdGggPSBpbWcud2lkdGguYmFzZVZhbC52YWx1ZTtcclxuICAgICAgICB0aGlzLmludHJpbnNpY0hlaWdodCA9IGltZy5oZWlnaHQuYmFzZVZhbC52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmNhY2hlLmFkZEltYWdlKHRoaXMuc3ZnKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0VsZW1lbnRDb250YWluZXJ9IGZyb20gJy4uL2VsZW1lbnQtY29udGFpbmVyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgY2xhc3MgTElFbGVtZW50Q29udGFpbmVyIGV4dGVuZHMgRWxlbWVudENvbnRhaW5lciB7XHJcbiAgICByZWFkb25seSB2YWx1ZTogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGVsZW1lbnQ6IEhUTUxMSUVsZW1lbnQpIHtcclxuICAgICAgICBzdXBlcihjb250ZXh0LCBlbGVtZW50KTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gZWxlbWVudC52YWx1ZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0VsZW1lbnRDb250YWluZXJ9IGZyb20gJy4uL2VsZW1lbnQtY29udGFpbmVyJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5leHBvcnQgY2xhc3MgT0xFbGVtZW50Q29udGFpbmVyIGV4dGVuZHMgRWxlbWVudENvbnRhaW5lciB7XHJcbiAgICByZWFkb25seSBzdGFydDogbnVtYmVyO1xyXG4gICAgcmVhZG9ubHkgcmV2ZXJzZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgZWxlbWVudDogSFRNTE9MaXN0RWxlbWVudCkge1xyXG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSBlbGVtZW50LnN0YXJ0O1xyXG4gICAgICAgIHRoaXMucmV2ZXJzZWQgPSB0eXBlb2YgZWxlbWVudC5yZXZlcnNlZCA9PT0gJ2Jvb2xlYW4nICYmIGVsZW1lbnQucmV2ZXJzZWQgPT09IHRydWU7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtFbGVtZW50Q29udGFpbmVyfSBmcm9tICcuLi9lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7Qk9SREVSX1NUWUxFfSBmcm9tICcuLi8uLi9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvYm9yZGVyLXN0eWxlJztcclxuaW1wb3J0IHtCQUNLR1JPVU5EX0NMSVB9IGZyb20gJy4uLy4uL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9iYWNrZ3JvdW5kLWNsaXAnO1xyXG5pbXBvcnQge0JBQ0tHUk9VTkRfT1JJR0lOfSBmcm9tICcuLi8uLi9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvYmFja2dyb3VuZC1vcmlnaW4nO1xyXG5pbXBvcnQge1Rva2VuVHlwZX0gZnJvbSAnLi4vLi4vY3NzL3N5bnRheC90b2tlbml6ZXInO1xyXG5pbXBvcnQge0xlbmd0aFBlcmNlbnRhZ2VUdXBsZX0gZnJvbSAnLi4vLi4vY3NzL3R5cGVzL2xlbmd0aC1wZXJjZW50YWdlJztcclxuaW1wb3J0IHtCb3VuZHN9IGZyb20gJy4uLy4uL2Nzcy9sYXlvdXQvYm91bmRzJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi8uLi9jb3JlL2NvbnRleHQnO1xyXG5cclxuY29uc3QgQ0hFQ0tCT1hfQk9SREVSX1JBRElVUzogTGVuZ3RoUGVyY2VudGFnZVR1cGxlID0gW1xyXG4gICAge1xyXG4gICAgICAgIHR5cGU6IFRva2VuVHlwZS5ESU1FTlNJT05fVE9LRU4sXHJcbiAgICAgICAgZmxhZ3M6IDAsXHJcbiAgICAgICAgdW5pdDogJ3B4JyxcclxuICAgICAgICBudW1iZXI6IDNcclxuICAgIH1cclxuXTtcclxuXHJcbmNvbnN0IFJBRElPX0JPUkRFUl9SQURJVVM6IExlbmd0aFBlcmNlbnRhZ2VUdXBsZSA9IFtcclxuICAgIHtcclxuICAgICAgICB0eXBlOiBUb2tlblR5cGUuUEVSQ0VOVEFHRV9UT0tFTixcclxuICAgICAgICBmbGFnczogMCxcclxuICAgICAgICBudW1iZXI6IDUwXHJcbiAgICB9XHJcbl07XHJcblxyXG5jb25zdCByZWZvcm1hdElucHV0Qm91bmRzID0gKGJvdW5kczogQm91bmRzKTogQm91bmRzID0+IHtcclxuICAgIGlmIChib3VuZHMud2lkdGggPiBib3VuZHMuaGVpZ2h0KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCb3VuZHMoYm91bmRzLmxlZnQgKyAoYm91bmRzLndpZHRoIC0gYm91bmRzLmhlaWdodCkgLyAyLCBib3VuZHMudG9wLCBib3VuZHMuaGVpZ2h0LCBib3VuZHMuaGVpZ2h0KTtcclxuICAgIH0gZWxzZSBpZiAoYm91bmRzLndpZHRoIDwgYm91bmRzLmhlaWdodCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQm91bmRzKGJvdW5kcy5sZWZ0LCBib3VuZHMudG9wICsgKGJvdW5kcy5oZWlnaHQgLSBib3VuZHMud2lkdGgpIC8gMiwgYm91bmRzLndpZHRoLCBib3VuZHMud2lkdGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJvdW5kcztcclxufTtcclxuXHJcbmNvbnN0IGdldElucHV0VmFsdWUgPSAobm9kZTogSFRNTElucHV0RWxlbWVudCk6IHN0cmluZyA9PiB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IG5vZGUudHlwZSA9PT0gUEFTU1dPUkQgPyBuZXcgQXJyYXkobm9kZS52YWx1ZS5sZW5ndGggKyAxKS5qb2luKCdcXHUyMDIyJykgOiBub2RlLnZhbHVlO1xyXG5cclxuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPT09IDAgPyBub2RlLnBsYWNlaG9sZGVyIHx8ICcnIDogdmFsdWU7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgQ0hFQ0tCT1ggPSAnY2hlY2tib3gnO1xyXG5leHBvcnQgY29uc3QgUkFESU8gPSAncmFkaW8nO1xyXG5leHBvcnQgY29uc3QgUEFTU1dPUkQgPSAncGFzc3dvcmQnO1xyXG5leHBvcnQgY29uc3QgSU5QVVRfQ09MT1IgPSAweDJhMmEyYWZmO1xyXG5cclxuZXhwb3J0IGNsYXNzIElucHV0RWxlbWVudENvbnRhaW5lciBleHRlbmRzIEVsZW1lbnRDb250YWluZXIge1xyXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xyXG4gICAgcmVhZG9ubHkgY2hlY2tlZDogYm9vbGVhbjtcclxuICAgIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcclxuICAgICAgICBzdXBlcihjb250ZXh0LCBpbnB1dCk7XHJcbiAgICAgICAgdGhpcy50eXBlID0gaW5wdXQudHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IGdldElucHV0VmFsdWUoaW5wdXQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50eXBlID09PSBDSEVDS0JPWCB8fCB0aGlzLnR5cGUgPT09IFJBRElPKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3R5bGVzLmJhY2tncm91bmRDb2xvciA9IDB4ZGVkZWRlZmY7XHJcbiAgICAgICAgICAgIHRoaXMuc3R5bGVzLmJvcmRlclRvcENvbG9yID1cclxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVzLmJvcmRlclJpZ2h0Q29sb3IgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZXMuYm9yZGVyQm90dG9tQ29sb3IgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZXMuYm9yZGVyTGVmdENvbG9yID1cclxuICAgICAgICAgICAgICAgICAgICAweGE1YTVhNWZmO1xyXG4gICAgICAgICAgICB0aGlzLnN0eWxlcy5ib3JkZXJUb3BXaWR0aCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlcy5ib3JkZXJSaWdodFdpZHRoID1cclxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVzLmJvcmRlckJvdHRvbVdpZHRoID1cclxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVzLmJvcmRlckxlZnRXaWR0aCA9XHJcbiAgICAgICAgICAgICAgICAgICAgMTtcclxuICAgICAgICAgICAgdGhpcy5zdHlsZXMuYm9yZGVyVG9wU3R5bGUgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZXMuYm9yZGVyUmlnaHRTdHlsZSA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlcy5ib3JkZXJCb3R0b21TdHlsZSA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlcy5ib3JkZXJMZWZ0U3R5bGUgPVxyXG4gICAgICAgICAgICAgICAgICAgIEJPUkRFUl9TVFlMRS5TT0xJRDtcclxuICAgICAgICAgICAgdGhpcy5zdHlsZXMuYmFja2dyb3VuZENsaXAgPSBbQkFDS0dST1VORF9DTElQLkJPUkRFUl9CT1hdO1xyXG4gICAgICAgICAgICB0aGlzLnN0eWxlcy5iYWNrZ3JvdW5kT3JpZ2luID0gW0JBQ0tHUk9VTkRfT1JJR0lOLkJPUkRFUl9CT1hdO1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kcyA9IHJlZm9ybWF0SW5wdXRCb3VuZHModGhpcy5ib3VuZHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBDSEVDS0JPWDpcclxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVzLmJvcmRlclRvcFJpZ2h0UmFkaXVzID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlcy5ib3JkZXJUb3BMZWZ0UmFkaXVzID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlcy5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZXMuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLQk9YX0JPUkRFUl9SQURJVVM7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBSQURJTzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVzLmJvcmRlclRvcFJpZ2h0UmFkaXVzID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlcy5ib3JkZXJUb3BMZWZ0UmFkaXVzID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlcy5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZXMuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJBRElPX0JPUkRFUl9SQURJVVM7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtFbGVtZW50Q29udGFpbmVyfSBmcm9tICcuLi9lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuZXhwb3J0IGNsYXNzIFNlbGVjdEVsZW1lbnRDb250YWluZXIgZXh0ZW5kcyBFbGVtZW50Q29udGFpbmVyIHtcclxuICAgIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBlbGVtZW50OiBIVE1MU2VsZWN0RWxlbWVudCkge1xyXG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IGVsZW1lbnQub3B0aW9uc1tlbGVtZW50LnNlbGVjdGVkSW5kZXggfHwgMF07XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbiA/IG9wdGlvbi50ZXh0IHx8ICcnIDogJyc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtFbGVtZW50Q29udGFpbmVyfSBmcm9tICcuLi9lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7Q29udGV4dH0gZnJvbSAnLi4vLi4vY29yZS9jb250ZXh0JztcclxuZXhwb3J0IGNsYXNzIFRleHRhcmVhRWxlbWVudENvbnRhaW5lciBleHRlbmRzIEVsZW1lbnRDb250YWluZXIge1xyXG4gICAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGVsZW1lbnQ6IEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcclxuICAgICAgICBzdXBlcihjb250ZXh0LCBlbGVtZW50KTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gZWxlbWVudC52YWx1ZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0VsZW1lbnRDb250YWluZXJ9IGZyb20gJy4uL2VsZW1lbnQtY29udGFpbmVyJztcclxuaW1wb3J0IHtwYXJzZVRyZWV9IGZyb20gJy4uL25vZGUtcGFyc2VyJztcclxuaW1wb3J0IHtDb2xvciwgcGFyc2VDb2xvciwgQ09MT1JTLCBpc1RyYW5zcGFyZW50fSBmcm9tICcuLi8uLi9jc3MvdHlwZXMvY29sb3InO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSUZyYW1lRWxlbWVudENvbnRhaW5lciBleHRlbmRzIEVsZW1lbnRDb250YWluZXIge1xyXG4gICAgc3JjOiBzdHJpbmc7XHJcbiAgICB3aWR0aDogbnVtYmVyO1xyXG4gICAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgICB0cmVlPzogRWxlbWVudENvbnRhaW5lcjtcclxuICAgIGJhY2tncm91bmRDb2xvcjogQ29sb3I7XHJcblxyXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGlmcmFtZSk7XHJcbiAgICAgICAgdGhpcy5zcmMgPSBpZnJhbWUuc3JjO1xyXG4gICAgICAgIHRoaXMud2lkdGggPSBwYXJzZUludChpZnJhbWUud2lkdGgsIDEwKSB8fCAwO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gcGFyc2VJbnQoaWZyYW1lLmhlaWdodCwgMTApIHx8IDA7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnN0eWxlcy5iYWNrZ3JvdW5kQ29sb3I7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cgJiZcclxuICAgICAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50ICYmXHJcbiAgICAgICAgICAgICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWUgPSBwYXJzZVRyZWUoY29udGV4dCwgaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWJhY2tncm91bmQvI3NwZWNpYWwtYmFja2dyb3VuZHNcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50QmFja2dyb3VuZENvbG9yID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUNvbG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmJhY2tncm91bmRDb2xvciBhcyBzdHJpbmdcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5UUkFOU1BBUkVOVDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlCYWNrZ3JvdW5kQ29sb3IgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5ib2R5XHJcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUNvbG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuVFJBTlNQQVJFTlQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBpc1RyYW5zcGFyZW50KGRvY3VtZW50QmFja2dyb3VuZENvbG9yKVxyXG4gICAgICAgICAgICAgICAgICAgID8gaXNUcmFuc3BhcmVudChib2R5QmFja2dyb3VuZENvbG9yKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc3R5bGVzLmJhY2tncm91bmRDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGJvZHlCYWNrZ3JvdW5kQ29sb3JcclxuICAgICAgICAgICAgICAgICAgICA6IGRvY3VtZW50QmFja2dyb3VuZENvbG9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NTU1BhcnNlZERlY2xhcmF0aW9ufSBmcm9tICcuLi9jc3MnO1xyXG5pbXBvcnQge0VsZW1lbnRDb250YWluZXIsIEZMQUdTfSBmcm9tICcuL2VsZW1lbnQtY29udGFpbmVyJztcclxuaW1wb3J0IHtUZXh0Q29udGFpbmVyfSBmcm9tICcuL3RleHQtY29udGFpbmVyJztcclxuaW1wb3J0IHtJbWFnZUVsZW1lbnRDb250YWluZXJ9IGZyb20gJy4vcmVwbGFjZWQtZWxlbWVudHMvaW1hZ2UtZWxlbWVudC1jb250YWluZXInO1xyXG5pbXBvcnQge0NhbnZhc0VsZW1lbnRDb250YWluZXJ9IGZyb20gJy4vcmVwbGFjZWQtZWxlbWVudHMvY2FudmFzLWVsZW1lbnQtY29udGFpbmVyJztcclxuaW1wb3J0IHtTVkdFbGVtZW50Q29udGFpbmVyfSBmcm9tICcuL3JlcGxhY2VkLWVsZW1lbnRzL3N2Zy1lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7TElFbGVtZW50Q29udGFpbmVyfSBmcm9tICcuL2VsZW1lbnRzL2xpLWVsZW1lbnQtY29udGFpbmVyJztcclxuaW1wb3J0IHtPTEVsZW1lbnRDb250YWluZXJ9IGZyb20gJy4vZWxlbWVudHMvb2wtZWxlbWVudC1jb250YWluZXInO1xyXG5pbXBvcnQge0lucHV0RWxlbWVudENvbnRhaW5lcn0gZnJvbSAnLi9yZXBsYWNlZC1lbGVtZW50cy9pbnB1dC1lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7U2VsZWN0RWxlbWVudENvbnRhaW5lcn0gZnJvbSAnLi9lbGVtZW50cy9zZWxlY3QtZWxlbWVudC1jb250YWluZXInO1xyXG5pbXBvcnQge1RleHRhcmVhRWxlbWVudENvbnRhaW5lcn0gZnJvbSAnLi9lbGVtZW50cy90ZXh0YXJlYS1lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7SUZyYW1lRWxlbWVudENvbnRhaW5lcn0gZnJvbSAnLi9yZXBsYWNlZC1lbGVtZW50cy9pZnJhbWUtZWxlbWVudC1jb250YWluZXInO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uL2NvcmUvY29udGV4dCc7XHJcblxyXG5jb25zdCBMSVNUX09XTkVSUyA9IFsnT0wnLCAnVUwnLCAnTUVOVSddO1xyXG5cclxuY29uc3QgcGFyc2VOb2RlVHJlZSA9IChjb250ZXh0OiBDb250ZXh0LCBub2RlOiBOb2RlLCBwYXJlbnQ6IEVsZW1lbnRDb250YWluZXIsIHJvb3Q6IEVsZW1lbnRDb250YWluZXIpID0+IHtcclxuICAgIGZvciAobGV0IGNoaWxkTm9kZSA9IG5vZGUuZmlyc3RDaGlsZCwgbmV4dE5vZGU7IGNoaWxkTm9kZTsgY2hpbGROb2RlID0gbmV4dE5vZGUpIHtcclxuICAgICAgICBuZXh0Tm9kZSA9IGNoaWxkTm9kZS5uZXh0U2libGluZztcclxuXHJcbiAgICAgICAgaWYgKGlzVGV4dE5vZGUoY2hpbGROb2RlKSAmJiBjaGlsZE5vZGUuZGF0YS50cmltKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBwYXJlbnQudGV4dE5vZGVzLnB1c2gobmV3IFRleHRDb250YWluZXIoY29udGV4dCwgY2hpbGROb2RlLCBwYXJlbnQuc3R5bGVzKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0VsZW1lbnROb2RlKGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgaWYgKGlzU2xvdEVsZW1lbnQoY2hpbGROb2RlKSAmJiBjaGlsZE5vZGUuYXNzaWduZWROb2Rlcykge1xyXG4gICAgICAgICAgICAgICAgY2hpbGROb2RlLmFzc2lnbmVkTm9kZXMoKS5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHBhcnNlTm9kZVRyZWUoY29udGV4dCwgY2hpbGROb2RlLCBwYXJlbnQsIHJvb3QpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGNyZWF0ZUNvbnRhaW5lcihjb250ZXh0LCBjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5zdHlsZXMuaXNWaXNpYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3JlYXRlc1JlYWxTdGFja2luZ0NvbnRleHQoY2hpbGROb2RlLCBjb250YWluZXIsIHJvb3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5mbGFncyB8PSBGTEFHUy5DUkVBVEVTX1JFQUxfU1RBQ0tJTkdfQ09OVEVYVDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNyZWF0ZXNTdGFja2luZ0NvbnRleHQoY29udGFpbmVyLnN0eWxlcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmZsYWdzIHw9IEZMQUdTLkNSRUFURVNfU1RBQ0tJTkdfQ09OVEVYVDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChMSVNUX09XTkVSUy5pbmRleE9mKGNoaWxkTm9kZS50YWdOYW1lKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmZsYWdzIHw9IEZMQUdTLklTX0xJU1RfT1dORVI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuZWxlbWVudHMucHVzaChjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5zbG90O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUuc2hhZG93Um9vdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZU5vZGVUcmVlKGNvbnRleHQsIGNoaWxkTm9kZS5zaGFkb3dSb290LCBjb250YWluZXIsIHJvb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFpc1RleHRhcmVhRWxlbWVudChjaGlsZE5vZGUpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFpc1NWR0VsZW1lbnQoY2hpbGROb2RlKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhaXNTZWxlY3RFbGVtZW50KGNoaWxkTm9kZSlcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VOb2RlVHJlZShjb250ZXh0LCBjaGlsZE5vZGUsIGNvbnRhaW5lciwgcm9vdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuY29uc3QgY3JlYXRlQ29udGFpbmVyID0gKGNvbnRleHQ6IENvbnRleHQsIGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50Q29udGFpbmVyID0+IHtcclxuICAgIGlmIChpc0ltYWdlRWxlbWVudChlbGVtZW50KSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgSW1hZ2VFbGVtZW50Q29udGFpbmVyKGNvbnRleHQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0NhbnZhc0VsZW1lbnQoZWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IENhbnZhc0VsZW1lbnRDb250YWluZXIoY29udGV4dCwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzU1ZHRWxlbWVudChlbGVtZW50KSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU1ZHRWxlbWVudENvbnRhaW5lcihjb250ZXh0LCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNMSUVsZW1lbnQoZWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IExJRWxlbWVudENvbnRhaW5lcihjb250ZXh0LCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNPTEVsZW1lbnQoZWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IE9MRWxlbWVudENvbnRhaW5lcihjb250ZXh0LCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNJbnB1dEVsZW1lbnQoZWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IElucHV0RWxlbWVudENvbnRhaW5lcihjb250ZXh0LCBlbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNTZWxlY3RFbGVtZW50KGVsZW1lbnQpKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RFbGVtZW50Q29udGFpbmVyKGNvbnRleHQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc1RleHRhcmVhRWxlbWVudChlbGVtZW50KSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgVGV4dGFyZWFFbGVtZW50Q29udGFpbmVyKGNvbnRleHQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0lGcmFtZUVsZW1lbnQoZWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbmV3IElGcmFtZUVsZW1lbnRDb250YWluZXIoY29udGV4dCwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBFbGVtZW50Q29udGFpbmVyKGNvbnRleHQsIGVsZW1lbnQpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHBhcnNlVHJlZSA9IChjb250ZXh0OiBDb250ZXh0LCBlbGVtZW50OiBIVE1MRWxlbWVudCk6IEVsZW1lbnRDb250YWluZXIgPT4ge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gY3JlYXRlQ29udGFpbmVyKGNvbnRleHQsIGVsZW1lbnQpO1xyXG4gICAgY29udGFpbmVyLmZsYWdzIHw9IEZMQUdTLkNSRUFURVNfUkVBTF9TVEFDS0lOR19DT05URVhUO1xyXG4gICAgcGFyc2VOb2RlVHJlZShjb250ZXh0LCBlbGVtZW50LCBjb250YWluZXIsIGNvbnRhaW5lcik7XHJcbiAgICByZXR1cm4gY29udGFpbmVyO1xyXG59O1xyXG5cclxuY29uc3QgY3JlYXRlc1JlYWxTdGFja2luZ0NvbnRleHQgPSAobm9kZTogRWxlbWVudCwgY29udGFpbmVyOiBFbGVtZW50Q29udGFpbmVyLCByb290OiBFbGVtZW50Q29udGFpbmVyKTogYm9vbGVhbiA9PiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIGNvbnRhaW5lci5zdHlsZXMuaXNQb3NpdGlvbmVkV2l0aFpJbmRleCgpIHx8XHJcbiAgICAgICAgY29udGFpbmVyLnN0eWxlcy5vcGFjaXR5IDwgMSB8fFxyXG4gICAgICAgIGNvbnRhaW5lci5zdHlsZXMuaXNUcmFuc2Zvcm1lZCgpIHx8XHJcbiAgICAgICAgKGlzQm9keUVsZW1lbnQobm9kZSkgJiYgcm9vdC5zdHlsZXMuaXNUcmFuc3BhcmVudCgpKVxyXG4gICAgKTtcclxufTtcclxuXHJcbmNvbnN0IGNyZWF0ZXNTdGFja2luZ0NvbnRleHQgPSAoc3R5bGVzOiBDU1NQYXJzZWREZWNsYXJhdGlvbik6IGJvb2xlYW4gPT4gc3R5bGVzLmlzUG9zaXRpb25lZCgpIHx8IHN0eWxlcy5pc0Zsb2F0aW5nKCk7XHJcblxyXG5leHBvcnQgY29uc3QgaXNUZXh0Tm9kZSA9IChub2RlOiBOb2RlKTogbm9kZSBpcyBUZXh0ID0+IG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFO1xyXG5leHBvcnQgY29uc3QgaXNFbGVtZW50Tm9kZSA9IChub2RlOiBOb2RlKTogbm9kZSBpcyBFbGVtZW50ID0+IG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xyXG5leHBvcnQgY29uc3QgaXNIVE1MRWxlbWVudE5vZGUgPSAobm9kZTogTm9kZSk6IG5vZGUgaXMgSFRNTEVsZW1lbnQgPT5cclxuICAgIGlzRWxlbWVudE5vZGUobm9kZSkgJiYgdHlwZW9mIChub2RlIGFzIEhUTUxFbGVtZW50KS5zdHlsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzU1ZHRWxlbWVudE5vZGUobm9kZSk7XHJcbmV4cG9ydCBjb25zdCBpc1NWR0VsZW1lbnROb2RlID0gKGVsZW1lbnQ6IEVsZW1lbnQpOiBlbGVtZW50IGlzIFNWR0VsZW1lbnQgPT5cclxuICAgIHR5cGVvZiAoZWxlbWVudCBhcyBTVkdFbGVtZW50KS5jbGFzc05hbWUgPT09ICdvYmplY3QnO1xyXG5leHBvcnQgY29uc3QgaXNMSUVsZW1lbnQgPSAobm9kZTogRWxlbWVudCk6IG5vZGUgaXMgSFRNTExJRWxlbWVudCA9PiBub2RlLnRhZ05hbWUgPT09ICdMSSc7XHJcbmV4cG9ydCBjb25zdCBpc09MRWxlbWVudCA9IChub2RlOiBFbGVtZW50KTogbm9kZSBpcyBIVE1MT0xpc3RFbGVtZW50ID0+IG5vZGUudGFnTmFtZSA9PT0gJ09MJztcclxuZXhwb3J0IGNvbnN0IGlzSW5wdXRFbGVtZW50ID0gKG5vZGU6IEVsZW1lbnQpOiBub2RlIGlzIEhUTUxJbnB1dEVsZW1lbnQgPT4gbm9kZS50YWdOYW1lID09PSAnSU5QVVQnO1xyXG5leHBvcnQgY29uc3QgaXNIVE1MRWxlbWVudCA9IChub2RlOiBFbGVtZW50KTogbm9kZSBpcyBIVE1MSHRtbEVsZW1lbnQgPT4gbm9kZS50YWdOYW1lID09PSAnSFRNTCc7XHJcbmV4cG9ydCBjb25zdCBpc1NWR0VsZW1lbnQgPSAobm9kZTogRWxlbWVudCk6IG5vZGUgaXMgU1ZHU1ZHRWxlbWVudCA9PiBub2RlLnRhZ05hbWUgPT09ICdzdmcnO1xyXG5leHBvcnQgY29uc3QgaXNCb2R5RWxlbWVudCA9IChub2RlOiBFbGVtZW50KTogbm9kZSBpcyBIVE1MQm9keUVsZW1lbnQgPT4gbm9kZS50YWdOYW1lID09PSAnQk9EWSc7XHJcbmV4cG9ydCBjb25zdCBpc0NhbnZhc0VsZW1lbnQgPSAobm9kZTogRWxlbWVudCk6IG5vZGUgaXMgSFRNTENhbnZhc0VsZW1lbnQgPT4gbm9kZS50YWdOYW1lID09PSAnQ0FOVkFTJztcclxuZXhwb3J0IGNvbnN0IGlzVmlkZW9FbGVtZW50ID0gKG5vZGU6IEVsZW1lbnQpOiBub2RlIGlzIEhUTUxWaWRlb0VsZW1lbnQgPT4gbm9kZS50YWdOYW1lID09PSAnVklERU8nO1xyXG5leHBvcnQgY29uc3QgaXNJbWFnZUVsZW1lbnQgPSAobm9kZTogRWxlbWVudCk6IG5vZGUgaXMgSFRNTEltYWdlRWxlbWVudCA9PiBub2RlLnRhZ05hbWUgPT09ICdJTUcnO1xyXG5leHBvcnQgY29uc3QgaXNJRnJhbWVFbGVtZW50ID0gKG5vZGU6IEVsZW1lbnQpOiBub2RlIGlzIEhUTUxJRnJhbWVFbGVtZW50ID0+IG5vZGUudGFnTmFtZSA9PT0gJ0lGUkFNRSc7XHJcbmV4cG9ydCBjb25zdCBpc1N0eWxlRWxlbWVudCA9IChub2RlOiBFbGVtZW50KTogbm9kZSBpcyBIVE1MU3R5bGVFbGVtZW50ID0+IG5vZGUudGFnTmFtZSA9PT0gJ1NUWUxFJztcclxuZXhwb3J0IGNvbnN0IGlzU2NyaXB0RWxlbWVudCA9IChub2RlOiBFbGVtZW50KTogbm9kZSBpcyBIVE1MU2NyaXB0RWxlbWVudCA9PiBub2RlLnRhZ05hbWUgPT09ICdTQ1JJUFQnO1xyXG5leHBvcnQgY29uc3QgaXNUZXh0YXJlYUVsZW1lbnQgPSAobm9kZTogRWxlbWVudCk6IG5vZGUgaXMgSFRNTFRleHRBcmVhRWxlbWVudCA9PiBub2RlLnRhZ05hbWUgPT09ICdURVhUQVJFQSc7XHJcbmV4cG9ydCBjb25zdCBpc1NlbGVjdEVsZW1lbnQgPSAobm9kZTogRWxlbWVudCk6IG5vZGUgaXMgSFRNTFNlbGVjdEVsZW1lbnQgPT4gbm9kZS50YWdOYW1lID09PSAnU0VMRUNUJztcclxuZXhwb3J0IGNvbnN0IGlzU2xvdEVsZW1lbnQgPSAobm9kZTogRWxlbWVudCk6IG5vZGUgaXMgSFRNTFNsb3RFbGVtZW50ID0+IG5vZGUudGFnTmFtZSA9PT0gJ1NMT1QnO1xyXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCN2YWxpZC1jdXN0b20tZWxlbWVudC1uYW1lXHJcbmV4cG9ydCBjb25zdCBpc0N1c3RvbUVsZW1lbnQgPSAobm9kZTogRWxlbWVudCk6IG5vZGUgaXMgSFRNTEVsZW1lbnQgPT4gbm9kZS50YWdOYW1lLmluZGV4T2YoJy0nKSA+IDA7XHJcbiIsImltcG9ydCB7TElTVF9TVFlMRV9UWVBFfSBmcm9tICcuLi8uLi9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9saXN0LXN0eWxlLXR5cGUnO1xyXG5pbXBvcnQge2Zyb21Db2RlUG9pbnR9IGZyb20gJ2Nzcy1saW5lLWJyZWFrJztcclxuaW1wb3J0IHtjb250YWluc30gZnJvbSAnLi4vLi4vLi4vY29yZS9iaXR3aXNlJztcclxuaW1wb3J0IHtDU1NQYXJzZWRDb3VudGVyRGVjbGFyYXRpb259IGZyb20gJy4uLy4uL2luZGV4JztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3VudGVyU3RhdGUge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb3VudGVyczoge1trZXk6IHN0cmluZ106IG51bWJlcltdfSA9IHt9O1xyXG5cclxuICAgIGdldENvdW50ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ZXIgPSB0aGlzLmNvdW50ZXJzW25hbWVdO1xyXG5cclxuICAgICAgICBpZiAoY291bnRlciAmJiBjb3VudGVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY291bnRlcltjb3VudGVyLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb3VudGVyVmFsdWVzKG5hbWU6IHN0cmluZyk6IHJlYWRvbmx5IG51bWJlcltdIHtcclxuICAgICAgICBjb25zdCBjb3VudGVyID0gdGhpcy5jb3VudGVyc1tuYW1lXTtcclxuICAgICAgICByZXR1cm4gY291bnRlciA/IGNvdW50ZXIgOiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwb3AoY291bnRlcnM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICAgICAgY291bnRlcnMuZm9yRWFjaCgoY291bnRlcikgPT4gdGhpcy5jb3VudGVyc1tjb3VudGVyXS5wb3AoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2Uoc3R5bGU6IENTU1BhcnNlZENvdW50ZXJEZWNsYXJhdGlvbik6IHN0cmluZ1tdIHtcclxuICAgICAgICBjb25zdCBjb3VudGVySW5jcmVtZW50ID0gc3R5bGUuY291bnRlckluY3JlbWVudDtcclxuICAgICAgICBjb25zdCBjb3VudGVyUmVzZXQgPSBzdHlsZS5jb3VudGVyUmVzZXQ7XHJcbiAgICAgICAgbGV0IGNhblJlc2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGNvdW50ZXJJbmNyZW1lbnQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgY291bnRlckluY3JlbWVudC5mb3JFYWNoKChlbnRyeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnRlciA9IHRoaXMuY291bnRlcnNbZW50cnkuY291bnRlcl07XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnRlciAmJiBlbnRyeS5pbmNyZW1lbnQgIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5SZXNldCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY291bnRlci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlci5wdXNoKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb3VudGVyW01hdGgubWF4KDAsIGNvdW50ZXIubGVuZ3RoIC0gMSldICs9IGVudHJ5LmluY3JlbWVudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb3VudGVyTmFtZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgaWYgKGNhblJlc2V0KSB7XHJcbiAgICAgICAgICAgIGNvdW50ZXJSZXNldC5mb3JFYWNoKChlbnRyeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSB0aGlzLmNvdW50ZXJzW2VudHJ5LmNvdW50ZXJdO1xyXG4gICAgICAgICAgICAgICAgY291bnRlck5hbWVzLnB1c2goZW50cnkuY291bnRlcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvdW50ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3VudGVyID0gdGhpcy5jb3VudGVyc1tlbnRyeS5jb3VudGVyXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY291bnRlci5wdXNoKGVudHJ5LnJlc2V0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY291bnRlck5hbWVzO1xyXG4gICAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgQ291bnRlclN5bWJvbHMge1xyXG4gICAgaW50ZWdlcnM6IG51bWJlcltdO1xyXG4gICAgdmFsdWVzOiBzdHJpbmdbXTtcclxufVxyXG5cclxuY29uc3QgUk9NQU5fVVBQRVI6IENvdW50ZXJTeW1ib2xzID0ge1xyXG4gICAgaW50ZWdlcnM6IFsxMDAwLCA5MDAsIDUwMCwgNDAwLCAxMDAsIDkwLCA1MCwgNDAsIDEwLCA5LCA1LCA0LCAxXSxcclxuICAgIHZhbHVlczogWydNJywgJ0NNJywgJ0QnLCAnQ0QnLCAnQycsICdYQycsICdMJywgJ1hMJywgJ1gnLCAnSVgnLCAnVicsICdJVicsICdJJ11cclxufTtcclxuXHJcbmNvbnN0IEFSTUVOSUFOOiBDb3VudGVyU3ltYm9scyA9IHtcclxuICAgIGludGVnZXJzOiBbXHJcbiAgICAgICAgOTAwMCwgODAwMCwgNzAwMCwgNjAwMCwgNTAwMCwgNDAwMCwgMzAwMCwgMjAwMCwgMTAwMCwgOTAwLCA4MDAsIDcwMCwgNjAwLCA1MDAsIDQwMCwgMzAwLCAyMDAsIDEwMCwgOTAsIDgwLCA3MCxcclxuICAgICAgICA2MCwgNTAsIDQwLCAzMCwgMjAsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxXHJcbiAgICBdLFxyXG4gICAgdmFsdWVzOiBbXHJcbiAgICAgICAgJ9WUJyxcclxuICAgICAgICAn1ZMnLFxyXG4gICAgICAgICfVkicsXHJcbiAgICAgICAgJ9WRJyxcclxuICAgICAgICAn1ZAnLFxyXG4gICAgICAgICfVjycsXHJcbiAgICAgICAgJ9WOJyxcclxuICAgICAgICAn1Y0nLFxyXG4gICAgICAgICfVjCcsXHJcbiAgICAgICAgJ9WLJyxcclxuICAgICAgICAn1YonLFxyXG4gICAgICAgICfViScsXHJcbiAgICAgICAgJ9WIJyxcclxuICAgICAgICAn1YcnLFxyXG4gICAgICAgICfVhicsXHJcbiAgICAgICAgJ9WFJyxcclxuICAgICAgICAn1YQnLFxyXG4gICAgICAgICfVgycsXHJcbiAgICAgICAgJ9WCJyxcclxuICAgICAgICAn1YEnLFxyXG4gICAgICAgICfVgCcsXHJcbiAgICAgICAgJ9S/JyxcclxuICAgICAgICAn1L4nLFxyXG4gICAgICAgICfUvScsXHJcbiAgICAgICAgJ9S8JyxcclxuICAgICAgICAn1LsnLFxyXG4gICAgICAgICfUuicsXHJcbiAgICAgICAgJ9S5JyxcclxuICAgICAgICAn1LgnLFxyXG4gICAgICAgICfUtycsXHJcbiAgICAgICAgJ9S2JyxcclxuICAgICAgICAn1LUnLFxyXG4gICAgICAgICfUtCcsXHJcbiAgICAgICAgJ9SzJyxcclxuICAgICAgICAn1LInLFxyXG4gICAgICAgICfUsSdcclxuICAgIF1cclxufTtcclxuXHJcbmNvbnN0IEhFQlJFVzogQ291bnRlclN5bWJvbHMgPSB7XHJcbiAgICBpbnRlZ2VyczogW1xyXG4gICAgICAgIDEwMDAwLCA5MDAwLCA4MDAwLCA3MDAwLCA2MDAwLCA1MDAwLCA0MDAwLCAzMDAwLCAyMDAwLCAxMDAwLCA0MDAsIDMwMCwgMjAwLCAxMDAsIDkwLCA4MCwgNzAsIDYwLCA1MCwgNDAsIDMwLCAyMCxcclxuICAgICAgICAxOSwgMTgsIDE3LCAxNiwgMTUsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxXHJcbiAgICBdLFxyXG4gICAgdmFsdWVzOiBbXHJcbiAgICAgICAgJ9eZ17MnLFxyXG4gICAgICAgICfXmNezJyxcclxuICAgICAgICAn15fXsycsXHJcbiAgICAgICAgJ9eW17MnLFxyXG4gICAgICAgICfXldezJyxcclxuICAgICAgICAn15TXsycsXHJcbiAgICAgICAgJ9eT17MnLFxyXG4gICAgICAgICfXktezJyxcclxuICAgICAgICAn15HXsycsXHJcbiAgICAgICAgJ9eQ17MnLFxyXG4gICAgICAgICfXqicsXHJcbiAgICAgICAgJ9epJyxcclxuICAgICAgICAn16gnLFxyXG4gICAgICAgICfXpycsXHJcbiAgICAgICAgJ9emJyxcclxuICAgICAgICAn16QnLFxyXG4gICAgICAgICfXoicsXHJcbiAgICAgICAgJ9ehJyxcclxuICAgICAgICAn16AnLFxyXG4gICAgICAgICfXnicsXHJcbiAgICAgICAgJ9ecJyxcclxuICAgICAgICAn15snLFxyXG4gICAgICAgICfXmdeYJyxcclxuICAgICAgICAn15nXlycsXHJcbiAgICAgICAgJ9eZ15YnLFxyXG4gICAgICAgICfXmNeWJyxcclxuICAgICAgICAn15jXlScsXHJcbiAgICAgICAgJ9eZJyxcclxuICAgICAgICAn15gnLFxyXG4gICAgICAgICfXlycsXHJcbiAgICAgICAgJ9eWJyxcclxuICAgICAgICAn15UnLFxyXG4gICAgICAgICfXlCcsXHJcbiAgICAgICAgJ9eTJyxcclxuICAgICAgICAn15InLFxyXG4gICAgICAgICfXkScsXHJcbiAgICAgICAgJ9eQJ1xyXG4gICAgXVxyXG59O1xyXG5cclxuY29uc3QgR0VPUkdJQU46IENvdW50ZXJTeW1ib2xzID0ge1xyXG4gICAgaW50ZWdlcnM6IFtcclxuICAgICAgICAxMDAwMCwgOTAwMCwgODAwMCwgNzAwMCwgNjAwMCwgNTAwMCwgNDAwMCwgMzAwMCwgMjAwMCwgMTAwMCwgOTAwLCA4MDAsIDcwMCwgNjAwLCA1MDAsIDQwMCwgMzAwLCAyMDAsIDEwMCwgOTAsXHJcbiAgICAgICAgODAsIDcwLCA2MCwgNTAsIDQwLCAzMCwgMjAsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxXHJcbiAgICBdLFxyXG4gICAgdmFsdWVzOiBbXHJcbiAgICAgICAgJ+GDtScsXHJcbiAgICAgICAgJ+GDsCcsXHJcbiAgICAgICAgJ+GDrycsXHJcbiAgICAgICAgJ+GDtCcsXHJcbiAgICAgICAgJ+GDricsXHJcbiAgICAgICAgJ+GDrScsXHJcbiAgICAgICAgJ+GDrCcsXHJcbiAgICAgICAgJ+GDqycsXHJcbiAgICAgICAgJ+GDqicsXHJcbiAgICAgICAgJ+GDqScsXHJcbiAgICAgICAgJ+GDqCcsXHJcbiAgICAgICAgJ+GDpycsXHJcbiAgICAgICAgJ+GDpicsXHJcbiAgICAgICAgJ+GDpScsXHJcbiAgICAgICAgJ+GDpCcsXHJcbiAgICAgICAgJ+GDsycsXHJcbiAgICAgICAgJ+GDoicsXHJcbiAgICAgICAgJ+GDoScsXHJcbiAgICAgICAgJ+GDoCcsXHJcbiAgICAgICAgJ+GDnycsXHJcbiAgICAgICAgJ+GDnicsXHJcbiAgICAgICAgJ+GDnScsXHJcbiAgICAgICAgJ+GDsicsXHJcbiAgICAgICAgJ+GDnCcsXHJcbiAgICAgICAgJ+GDmycsXHJcbiAgICAgICAgJ+GDmicsXHJcbiAgICAgICAgJ+GDmScsXHJcbiAgICAgICAgJ+GDmCcsXHJcbiAgICAgICAgJ+GDlycsXHJcbiAgICAgICAgJ+GDsScsXHJcbiAgICAgICAgJ+GDlicsXHJcbiAgICAgICAgJ+GDlScsXHJcbiAgICAgICAgJ+GDlCcsXHJcbiAgICAgICAgJ+GDkycsXHJcbiAgICAgICAgJ+GDkicsXHJcbiAgICAgICAgJ+GDkScsXHJcbiAgICAgICAgJ+GDkCdcclxuICAgIF1cclxufTtcclxuXHJcbmNvbnN0IGNyZWF0ZUFkZGl0aXZlQ291bnRlciA9IChcclxuICAgIHZhbHVlOiBudW1iZXIsXHJcbiAgICBtaW46IG51bWJlcixcclxuICAgIG1heDogbnVtYmVyLFxyXG4gICAgc3ltYm9sczogQ291bnRlclN5bWJvbHMsXHJcbiAgICBmYWxsYmFjazogTElTVF9TVFlMRV9UWVBFLFxyXG4gICAgc3VmZml4OiBzdHJpbmdcclxuKSA9PiB7XHJcbiAgICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclRleHQodmFsdWUsIGZhbGxiYWNrLCBzdWZmaXgubGVuZ3RoID4gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICBzeW1ib2xzLmludGVnZXJzLnJlZHVjZSgoc3RyaW5nLCBpbnRlZ2VyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICB3aGlsZSAodmFsdWUgPj0gaW50ZWdlcikge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgLT0gaW50ZWdlcjtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBzeW1ib2xzLnZhbHVlc1tpbmRleF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcclxuICAgICAgICB9LCAnJykgKyBzdWZmaXhcclxuICAgICk7XHJcbn07XHJcblxyXG5jb25zdCBjcmVhdGVDb3VudGVyU3R5bGVXaXRoU3ltYm9sUmVzb2x2ZXIgPSAoXHJcbiAgICB2YWx1ZTogbnVtYmVyLFxyXG4gICAgY29kZVBvaW50UmFuZ2VMZW5ndGg6IG51bWJlcixcclxuICAgIGlzTnVtZXJpYzogYm9vbGVhbixcclxuICAgIHJlc29sdmVyOiAoY29kZVBvaW50OiBudW1iZXIpID0+IHN0cmluZ1xyXG4pOiBzdHJpbmcgPT4ge1xyXG4gICAgbGV0IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGRvIHtcclxuICAgICAgICBpZiAoIWlzTnVtZXJpYykge1xyXG4gICAgICAgICAgICB2YWx1ZS0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdHJpbmcgPSByZXNvbHZlcih2YWx1ZSkgKyBzdHJpbmc7XHJcbiAgICAgICAgdmFsdWUgLz0gY29kZVBvaW50UmFuZ2VMZW5ndGg7XHJcbiAgICB9IHdoaWxlICh2YWx1ZSAqIGNvZGVQb2ludFJhbmdlTGVuZ3RoID49IGNvZGVQb2ludFJhbmdlTGVuZ3RoKTtcclxuXHJcbiAgICByZXR1cm4gc3RyaW5nO1xyXG59O1xyXG5cclxuY29uc3QgY3JlYXRlQ291bnRlclN0eWxlRnJvbVJhbmdlID0gKFxyXG4gICAgdmFsdWU6IG51bWJlcixcclxuICAgIGNvZGVQb2ludFJhbmdlU3RhcnQ6IG51bWJlcixcclxuICAgIGNvZGVQb2ludFJhbmdlRW5kOiBudW1iZXIsXHJcbiAgICBpc051bWVyaWM6IGJvb2xlYW4sXHJcbiAgICBzdWZmaXg6IHN0cmluZ1xyXG4pOiBzdHJpbmcgPT4ge1xyXG4gICAgY29uc3QgY29kZVBvaW50UmFuZ2VMZW5ndGggPSBjb2RlUG9pbnRSYW5nZUVuZCAtIGNvZGVQb2ludFJhbmdlU3RhcnQgKyAxO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgKHZhbHVlIDwgMCA/ICctJyA6ICcnKSArXHJcbiAgICAgICAgKGNyZWF0ZUNvdW50ZXJTdHlsZVdpdGhTeW1ib2xSZXNvbHZlcihNYXRoLmFicyh2YWx1ZSksIGNvZGVQb2ludFJhbmdlTGVuZ3RoLCBpc051bWVyaWMsIChjb2RlUG9pbnQpID0+XHJcbiAgICAgICAgICAgIGZyb21Db2RlUG9pbnQoTWF0aC5mbG9vcihjb2RlUG9pbnQgJSBjb2RlUG9pbnRSYW5nZUxlbmd0aCkgKyBjb2RlUG9pbnRSYW5nZVN0YXJ0KVxyXG4gICAgICAgICkgK1xyXG4gICAgICAgICAgICBzdWZmaXgpXHJcbiAgICApO1xyXG59O1xyXG5cclxuY29uc3QgY3JlYXRlQ291bnRlclN0eWxlRnJvbVN5bWJvbHMgPSAodmFsdWU6IG51bWJlciwgc3ltYm9sczogc3RyaW5nLCBzdWZmaXggPSAnLiAnKTogc3RyaW5nID0+IHtcclxuICAgIGNvbnN0IGNvZGVQb2ludFJhbmdlTGVuZ3RoID0gc3ltYm9scy5sZW5ndGg7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIGNyZWF0ZUNvdW50ZXJTdHlsZVdpdGhTeW1ib2xSZXNvbHZlcihcclxuICAgICAgICAgICAgTWF0aC5hYnModmFsdWUpLFxyXG4gICAgICAgICAgICBjb2RlUG9pbnRSYW5nZUxlbmd0aCxcclxuICAgICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICAgIChjb2RlUG9pbnQpID0+IHN5bWJvbHNbTWF0aC5mbG9vcihjb2RlUG9pbnQgJSBjb2RlUG9pbnRSYW5nZUxlbmd0aCldXHJcbiAgICAgICAgKSArIHN1ZmZpeFxyXG4gICAgKTtcclxufTtcclxuXHJcbmNvbnN0IENKS19aRVJPUyA9IDEgPDwgMDtcclxuY29uc3QgQ0pLX1RFTl9DT0VGRklDSUVOVFMgPSAxIDw8IDE7XHJcbmNvbnN0IENKS19URU5fSElHSF9DT0VGRklDSUVOVFMgPSAxIDw8IDI7XHJcbmNvbnN0IENKS19IVU5EUkVEX0NPRUZGSUNJRU5UUyA9IDEgPDwgMztcclxuXHJcbmNvbnN0IGNyZWF0ZUNKS0NvdW50ZXIgPSAoXHJcbiAgICB2YWx1ZTogbnVtYmVyLFxyXG4gICAgbnVtYmVyczogc3RyaW5nLFxyXG4gICAgbXVsdGlwbGllcnM6IHN0cmluZyxcclxuICAgIG5lZ2F0aXZlU2lnbjogc3RyaW5nLFxyXG4gICAgc3VmZml4OiBzdHJpbmcsXHJcbiAgICBmbGFnczogbnVtYmVyXHJcbik6IHN0cmluZyA9PiB7XHJcbiAgICBpZiAodmFsdWUgPCAtOTk5OSB8fCB2YWx1ZSA+IDk5OTkpIHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclRleHQodmFsdWUsIExJU1RfU1RZTEVfVFlQRS5DSktfREVDSU1BTCwgc3VmZml4Lmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG4gICAgbGV0IHRtcCA9IE1hdGguYWJzKHZhbHVlKTtcclxuICAgIGxldCBzdHJpbmcgPSBzdWZmaXg7XHJcblxyXG4gICAgaWYgKHRtcCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBudW1iZXJzWzBdICsgc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGRpZ2l0ID0gMDsgdG1wID4gMCAmJiBkaWdpdCA8PSA0OyBkaWdpdCsrKSB7XHJcbiAgICAgICAgY29uc3QgY29lZmZpY2llbnQgPSB0bXAgJSAxMDtcclxuXHJcbiAgICAgICAgaWYgKGNvZWZmaWNpZW50ID09PSAwICYmIGNvbnRhaW5zKGZsYWdzLCBDSktfWkVST1MpICYmIHN0cmluZyAhPT0gJycpIHtcclxuICAgICAgICAgICAgc3RyaW5nID0gbnVtYmVyc1tjb2VmZmljaWVudF0gKyBzdHJpbmc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgY29lZmZpY2llbnQgPiAxIHx8XHJcbiAgICAgICAgICAgIChjb2VmZmljaWVudCA9PT0gMSAmJiBkaWdpdCA9PT0gMCkgfHxcclxuICAgICAgICAgICAgKGNvZWZmaWNpZW50ID09PSAxICYmIGRpZ2l0ID09PSAxICYmIGNvbnRhaW5zKGZsYWdzLCBDSktfVEVOX0NPRUZGSUNJRU5UUykpIHx8XHJcbiAgICAgICAgICAgIChjb2VmZmljaWVudCA9PT0gMSAmJiBkaWdpdCA9PT0gMSAmJiBjb250YWlucyhmbGFncywgQ0pLX1RFTl9ISUdIX0NPRUZGSUNJRU5UUykgJiYgdmFsdWUgPiAxMDApIHx8XHJcbiAgICAgICAgICAgIChjb2VmZmljaWVudCA9PT0gMSAmJiBkaWdpdCA+IDEgJiYgY29udGFpbnMoZmxhZ3MsIENKS19IVU5EUkVEX0NPRUZGSUNJRU5UUykpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHN0cmluZyA9IG51bWJlcnNbY29lZmZpY2llbnRdICsgKGRpZ2l0ID4gMCA/IG11bHRpcGxpZXJzW2RpZ2l0IC0gMV0gOiAnJykgKyBzdHJpbmc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2VmZmljaWVudCA9PT0gMSAmJiBkaWdpdCA+IDApIHtcclxuICAgICAgICAgICAgc3RyaW5nID0gbXVsdGlwbGllcnNbZGlnaXQgLSAxXSArIHN0cmluZztcclxuICAgICAgICB9XHJcbiAgICAgICAgdG1wID0gTWF0aC5mbG9vcih0bXAgLyAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICh2YWx1ZSA8IDAgPyBuZWdhdGl2ZVNpZ24gOiAnJykgKyBzdHJpbmc7XHJcbn07XHJcblxyXG5jb25zdCBDSElORVNFX0lORk9STUFMX01VTFRJUExJRVJTID0gJ+WNgeeZvuWNg+iQrCc7XHJcbmNvbnN0IENISU5FU0VfRk9STUFMX01VTFRJUExJRVJTID0gJ+aLvuS9sOS7n+iQrCc7XHJcbmNvbnN0IEpBUEFORVNFX05FR0FUSVZFID0gJ+ODnuOCpOODiuOCuSc7XHJcbmNvbnN0IEtPUkVBTl9ORUdBVElWRSA9ICfrp4jsnbTrhIjsiqQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvdW50ZXJUZXh0ID0gKHZhbHVlOiBudW1iZXIsIHR5cGU6IExJU1RfU1RZTEVfVFlQRSwgYXBwZW5kU3VmZml4OiBib29sZWFuKTogc3RyaW5nID0+IHtcclxuICAgIGNvbnN0IGRlZmF1bHRTdWZmaXggPSBhcHBlbmRTdWZmaXggPyAnLiAnIDogJyc7XHJcbiAgICBjb25zdCBjamtTdWZmaXggPSBhcHBlbmRTdWZmaXggPyAn44CBJyA6ICcnO1xyXG4gICAgY29uc3Qga29yZWFuU3VmZml4ID0gYXBwZW5kU3VmZml4ID8gJywgJyA6ICcnO1xyXG4gICAgY29uc3Qgc3BhY2VTdWZmaXggPSBhcHBlbmRTdWZmaXggPyAnICcgOiAnJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLkRJU0M6XHJcbiAgICAgICAgICAgIHJldHVybiAn4oCiJyArIHNwYWNlU3VmZml4O1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLkNJUkNMRTpcclxuICAgICAgICAgICAgcmV0dXJuICfil6YnICsgc3BhY2VTdWZmaXg7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuU1FVQVJFOlxyXG4gICAgICAgICAgICByZXR1cm4gJ+KXvicgKyBzcGFjZVN1ZmZpeDtcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5ERUNJTUFMX0xFQURJTkdfWkVSTzpcclxuICAgICAgICAgICAgY29uc3Qgc3RyaW5nID0gY3JlYXRlQ291bnRlclN0eWxlRnJvbVJhbmdlKHZhbHVlLCA0OCwgNTcsIHRydWUsIGRlZmF1bHRTdWZmaXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLmxlbmd0aCA8IDQgPyBgMCR7c3RyaW5nfWAgOiBzdHJpbmc7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuQ0pLX0RFQ0lNQUw6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb3VudGVyU3R5bGVGcm9tU3ltYm9scyh2YWx1ZSwgJ+OAh+S4gOS6jOS4ieWbm+S6lOWFreS4g+WFq+S5nScsIGNqa1N1ZmZpeCk7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuTE9XRVJfUk9NQU46XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGRpdGl2ZUNvdW50ZXIoXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgICAgIDEsXHJcbiAgICAgICAgICAgICAgICAzOTk5LFxyXG4gICAgICAgICAgICAgICAgUk9NQU5fVVBQRVIsXHJcbiAgICAgICAgICAgICAgICBMSVNUX1NUWUxFX1RZUEUuREVDSU1BTCxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRTdWZmaXhcclxuICAgICAgICAgICAgKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLlVQUEVSX1JPTUFOOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQWRkaXRpdmVDb3VudGVyKHZhbHVlLCAxLCAzOTk5LCBST01BTl9VUFBFUiwgTElTVF9TVFlMRV9UWVBFLkRFQ0lNQUwsIGRlZmF1bHRTdWZmaXgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLkxPV0VSX0dSRUVLOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclN0eWxlRnJvbVJhbmdlKHZhbHVlLCA5NDUsIDk2OSwgZmFsc2UsIGRlZmF1bHRTdWZmaXgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLkxPV0VSX0FMUEhBOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclN0eWxlRnJvbVJhbmdlKHZhbHVlLCA5NywgMTIyLCBmYWxzZSwgZGVmYXVsdFN1ZmZpeCk7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuVVBQRVJfQUxQSEE6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb3VudGVyU3R5bGVGcm9tUmFuZ2UodmFsdWUsIDY1LCA5MCwgZmFsc2UsIGRlZmF1bHRTdWZmaXgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLkFSQUJJQ19JTkRJQzpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvdW50ZXJTdHlsZUZyb21SYW5nZSh2YWx1ZSwgMTYzMiwgMTY0MSwgdHJ1ZSwgZGVmYXVsdFN1ZmZpeCk7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuQVJNRU5JQU46XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuVVBQRVJfQVJNRU5JQU46XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGRpdGl2ZUNvdW50ZXIodmFsdWUsIDEsIDk5OTksIEFSTUVOSUFOLCBMSVNUX1NUWUxFX1RZUEUuREVDSU1BTCwgZGVmYXVsdFN1ZmZpeCk7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuTE9XRVJfQVJNRU5JQU46XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGRpdGl2ZUNvdW50ZXIoXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgICAgIDEsXHJcbiAgICAgICAgICAgICAgICA5OTk5LFxyXG4gICAgICAgICAgICAgICAgQVJNRU5JQU4sXHJcbiAgICAgICAgICAgICAgICBMSVNUX1NUWUxFX1RZUEUuREVDSU1BTCxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRTdWZmaXhcclxuICAgICAgICAgICAgKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLkJFTkdBTEk6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb3VudGVyU3R5bGVGcm9tUmFuZ2UodmFsdWUsIDI1MzQsIDI1NDMsIHRydWUsIGRlZmF1bHRTdWZmaXgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLkNBTUJPRElBTjpcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5LSE1FUjpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvdW50ZXJTdHlsZUZyb21SYW5nZSh2YWx1ZSwgNjExMiwgNjEyMSwgdHJ1ZSwgZGVmYXVsdFN1ZmZpeCk7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuQ0pLX0VBUlRITFlfQlJBTkNIOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclN0eWxlRnJvbVN5bWJvbHModmFsdWUsICflrZDkuJHlr4Xlja/ovrDlt7PljYjmnKrnlLPphYnmiIzkuqUnLCBjamtTdWZmaXgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLkNKS19IRUFWRU5MWV9TVEVNOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclN0eWxlRnJvbVN5bWJvbHModmFsdWUsICfnlLLkuZnkuJnkuIHmiIrlt7Hluprovpvlo6znmbgnLCBjamtTdWZmaXgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLkNKS19JREVPR1JBUEhJQzpcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5UUkFEX0NISU5FU0VfSU5GT1JNQUw6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDSktDb3VudGVyKFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAn6Zu25LiA5LqM5LiJ5Zub5LqU5YWt5LiD5YWr5LmdJyxcclxuICAgICAgICAgICAgICAgIENISU5FU0VfSU5GT1JNQUxfTVVMVElQTElFUlMsXHJcbiAgICAgICAgICAgICAgICAn6LKgJyxcclxuICAgICAgICAgICAgICAgIGNqa1N1ZmZpeCxcclxuICAgICAgICAgICAgICAgIENKS19URU5fQ09FRkZJQ0lFTlRTIHwgQ0pLX1RFTl9ISUdIX0NPRUZGSUNJRU5UUyB8IENKS19IVU5EUkVEX0NPRUZGSUNJRU5UU1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLlRSQURfQ0hJTkVTRV9GT1JNQUw6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDSktDb3VudGVyKFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAn6Zu25aO56LKz5Y+D6IKG5LyN6Zm45p+S5o2M546WJyxcclxuICAgICAgICAgICAgICAgIENISU5FU0VfRk9STUFMX01VTFRJUExJRVJTLFxyXG4gICAgICAgICAgICAgICAgJ+iyoCcsXHJcbiAgICAgICAgICAgICAgICBjamtTdWZmaXgsXHJcbiAgICAgICAgICAgICAgICBDSktfWkVST1MgfCBDSktfVEVOX0NPRUZGSUNJRU5UUyB8IENKS19URU5fSElHSF9DT0VGRklDSUVOVFMgfCBDSktfSFVORFJFRF9DT0VGRklDSUVOVFNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5TSU1QX0NISU5FU0VfSU5GT1JNQUw6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDSktDb3VudGVyKFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAn6Zu25LiA5LqM5LiJ5Zub5LqU5YWt5LiD5YWr5LmdJyxcclxuICAgICAgICAgICAgICAgIENISU5FU0VfSU5GT1JNQUxfTVVMVElQTElFUlMsXHJcbiAgICAgICAgICAgICAgICAn6LSfJyxcclxuICAgICAgICAgICAgICAgIGNqa1N1ZmZpeCxcclxuICAgICAgICAgICAgICAgIENKS19URU5fQ09FRkZJQ0lFTlRTIHwgQ0pLX1RFTl9ISUdIX0NPRUZGSUNJRU5UUyB8IENKS19IVU5EUkVEX0NPRUZGSUNJRU5UU1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLlNJTVBfQ0hJTkVTRV9GT1JNQUw6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDSktDb3VudGVyKFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAn6Zu25aO56LSw5Y+B6IKG5LyN6ZmG5p+S5o2M546WJyxcclxuICAgICAgICAgICAgICAgIENISU5FU0VfRk9STUFMX01VTFRJUExJRVJTLFxyXG4gICAgICAgICAgICAgICAgJ+i0nycsXHJcbiAgICAgICAgICAgICAgICBjamtTdWZmaXgsXHJcbiAgICAgICAgICAgICAgICBDSktfWkVST1MgfCBDSktfVEVOX0NPRUZGSUNJRU5UUyB8IENKS19URU5fSElHSF9DT0VGRklDSUVOVFMgfCBDSktfSFVORFJFRF9DT0VGRklDSUVOVFNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5KQVBBTkVTRV9JTkZPUk1BTDpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNKS0NvdW50ZXIodmFsdWUsICfjgIfkuIDkuozkuInlm5vkupTlha3kuIPlhavkuZ0nLCAn5Y2B55m+5Y2D5LiHJywgSkFQQU5FU0VfTkVHQVRJVkUsIGNqa1N1ZmZpeCwgMCk7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuSkFQQU5FU0VfRk9STUFMOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ0pLQ291bnRlcihcclxuICAgICAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgJ+mbtuWjseW8kOWPguWbm+S8jeWFreS4g+WFq+S5nScsXHJcbiAgICAgICAgICAgICAgICAn5ou+55m+5Y2D5LiHJyxcclxuICAgICAgICAgICAgICAgIEpBUEFORVNFX05FR0FUSVZFLFxyXG4gICAgICAgICAgICAgICAgY2prU3VmZml4LFxyXG4gICAgICAgICAgICAgICAgQ0pLX1pFUk9TIHwgQ0pLX1RFTl9DT0VGRklDSUVOVFMgfCBDSktfVEVOX0hJR0hfQ09FRkZJQ0lFTlRTXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuS09SRUFOX0hBTkdVTF9GT1JNQUw6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDSktDb3VudGVyKFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAn7JiB7J287J207IK87IKs7Jik7Jyh7Lmg7YyU6rWsJyxcclxuICAgICAgICAgICAgICAgICfsi63rsLHsspzrp4wnLFxyXG4gICAgICAgICAgICAgICAgS09SRUFOX05FR0FUSVZFLFxyXG4gICAgICAgICAgICAgICAga29yZWFuU3VmZml4LFxyXG4gICAgICAgICAgICAgICAgQ0pLX1pFUk9TIHwgQ0pLX1RFTl9DT0VGRklDSUVOVFMgfCBDSktfVEVOX0hJR0hfQ09FRkZJQ0lFTlRTXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuS09SRUFOX0hBTkpBX0lORk9STUFMOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ0pLQ291bnRlcih2YWx1ZSwgJ+mbtuS4gOS6jOS4ieWbm+S6lOWFreS4g+WFq+S5nScsICfljYHnmb7ljYPokKwnLCBLT1JFQU5fTkVHQVRJVkUsIGtvcmVhblN1ZmZpeCwgMCk7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuS09SRUFOX0hBTkpBX0ZPUk1BTDpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNKS0NvdW50ZXIoXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgICAgICfpm7blo7nosrPlj4Plm5vkupTlha3kuIPlhavkuZ0nLFxyXG4gICAgICAgICAgICAgICAgJ+aLvueZvuWNgycsXHJcbiAgICAgICAgICAgICAgICBLT1JFQU5fTkVHQVRJVkUsXHJcbiAgICAgICAgICAgICAgICBrb3JlYW5TdWZmaXgsXHJcbiAgICAgICAgICAgICAgICBDSktfWkVST1MgfCBDSktfVEVOX0NPRUZGSUNJRU5UUyB8IENKS19URU5fSElHSF9DT0VGRklDSUVOVFNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5ERVZBTkFHQVJJOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclN0eWxlRnJvbVJhbmdlKHZhbHVlLCAweDk2NiwgMHg5NmYsIHRydWUsIGRlZmF1bHRTdWZmaXgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLkdFT1JHSUFOOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQWRkaXRpdmVDb3VudGVyKHZhbHVlLCAxLCAxOTk5OSwgR0VPUkdJQU4sIExJU1RfU1RZTEVfVFlQRS5ERUNJTUFMLCBkZWZhdWx0U3VmZml4KTtcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5HVUpBUkFUSTpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvdW50ZXJTdHlsZUZyb21SYW5nZSh2YWx1ZSwgMHhhZTYsIDB4YWVmLCB0cnVlLCBkZWZhdWx0U3VmZml4KTtcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5HVVJNVUtISTpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvdW50ZXJTdHlsZUZyb21SYW5nZSh2YWx1ZSwgMHhhNjYsIDB4YTZmLCB0cnVlLCBkZWZhdWx0U3VmZml4KTtcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5IRUJSRVc6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGRpdGl2ZUNvdW50ZXIodmFsdWUsIDEsIDEwOTk5LCBIRUJSRVcsIExJU1RfU1RZTEVfVFlQRS5ERUNJTUFMLCBkZWZhdWx0U3VmZml4KTtcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5ISVJBR0FOQTpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvdW50ZXJTdHlsZUZyb21TeW1ib2xzKFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAn44GC44GE44GG44GI44GK44GL44GN44GP44GR44GT44GV44GX44GZ44Gb44Gd44Gf44Gh44Gk44Gm44Go44Gq44Gr44Gs44Gt44Gu44Gv44Gy44G144G444G744G+44G/44KA44KB44KC44KE44KG44KI44KJ44KK44KL44KM44KN44KP44KQ44KR44KS44KTJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLkhJUkFHQU5BX0lST0hBOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclN0eWxlRnJvbVN5bWJvbHMoXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgICAgICfjgYTjgo3jga/jgavjgbvjgbjjgajjgaHjgorjgazjgovjgpLjgo/jgYvjgojjgZ/jgozjgZ3jgaTjga3jgarjgonjgoDjgYbjgpDjga7jgYrjgY/jgoTjgb7jgZHjgbXjgZPjgYjjgabjgYLjgZXjgY3jgobjgoHjgb/jgZfjgpHjgbLjgoLjgZvjgZknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuS0FOTkFEQTpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvdW50ZXJTdHlsZUZyb21SYW5nZSh2YWx1ZSwgMHhjZTYsIDB4Y2VmLCB0cnVlLCBkZWZhdWx0U3VmZml4KTtcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5LQVRBS0FOQTpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvdW50ZXJTdHlsZUZyb21TeW1ib2xzKFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAn44Ki44Kk44Km44Ko44Kq44Kr44Kt44Kv44Kx44Kz44K144K344K544K744K944K/44OB44OE44OG44OI44OK44OL44OM44ON44OO44OP44OS44OV44OY44Ob44Oe44Of44Og44Oh44Oi44Ok44Om44Oo44Op44Oq44Or44Os44Ot44Ov44Ow44Ox44Oy44OzJyxcclxuICAgICAgICAgICAgICAgIGNqa1N1ZmZpeFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLktBVEFLQU5BX0lST0hBOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclN0eWxlRnJvbVN5bWJvbHMoXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgICAgICfjgqTjg63jg4/jg4vjg5vjg5jjg4jjg4Hjg6rjg4zjg6vjg7Ljg6/jgqvjg6jjgr/jg6zjgr3jg4Tjg43jg4rjg6njg6Djgqbjg7Djg47jgqrjgq/jg6Tjg57jgrHjg5XjgrPjgqjjg4bjgqLjgrXjgq3jg6bjg6Hjg5/jgrfjg7Hjg5Ljg6LjgrvjgrknLFxyXG4gICAgICAgICAgICAgICAgY2prU3VmZml4XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuTEFPOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclN0eWxlRnJvbVJhbmdlKHZhbHVlLCAweGVkMCwgMHhlZDksIHRydWUsIGRlZmF1bHRTdWZmaXgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLk1PTkdPTElBTjpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvdW50ZXJTdHlsZUZyb21SYW5nZSh2YWx1ZSwgMHgxODEwLCAweDE4MTksIHRydWUsIGRlZmF1bHRTdWZmaXgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLk1ZQU5NQVI6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb3VudGVyU3R5bGVGcm9tUmFuZ2UodmFsdWUsIDB4MTA0MCwgMHgxMDQ5LCB0cnVlLCBkZWZhdWx0U3VmZml4KTtcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5PUklZQTpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvdW50ZXJTdHlsZUZyb21SYW5nZSh2YWx1ZSwgMHhiNjYsIDB4YjZmLCB0cnVlLCBkZWZhdWx0U3VmZml4KTtcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5QRVJTSUFOOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclN0eWxlRnJvbVJhbmdlKHZhbHVlLCAweDZmMCwgMHg2ZjksIHRydWUsIGRlZmF1bHRTdWZmaXgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLlRBTUlMOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclN0eWxlRnJvbVJhbmdlKHZhbHVlLCAweGJlNiwgMHhiZWYsIHRydWUsIGRlZmF1bHRTdWZmaXgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLlRFTFVHVTpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvdW50ZXJTdHlsZUZyb21SYW5nZSh2YWx1ZSwgMHhjNjYsIDB4YzZmLCB0cnVlLCBkZWZhdWx0U3VmZml4KTtcclxuICAgICAgICBjYXNlIExJU1RfU1RZTEVfVFlQRS5USEFJOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclN0eWxlRnJvbVJhbmdlKHZhbHVlLCAweGU1MCwgMHhlNTksIHRydWUsIGRlZmF1bHRTdWZmaXgpO1xyXG4gICAgICAgIGNhc2UgTElTVF9TVFlMRV9UWVBFLlRJQkVUQU46XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb3VudGVyU3R5bGVGcm9tUmFuZ2UodmFsdWUsIDB4ZjIwLCAweGYyOSwgdHJ1ZSwgZGVmYXVsdFN1ZmZpeCk7XHJcbiAgICAgICAgY2FzZSBMSVNUX1NUWUxFX1RZUEUuREVDSU1BTDpcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ291bnRlclN0eWxlRnJvbVJhbmdlKHZhbHVlLCA0OCwgNTcsIHRydWUsIGRlZmF1bHRTdWZmaXgpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInRydXN0ZWQtdHlwZXNcIi8+XHJcblxyXG5jb25zdCBodG1sRXNjYXBlID0gKHN0cjogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKCFzdHIpXHJcbiAgICByZXR1cm4gJyc7XHJcblxyXG4gIGxldCBlc2NhcGVkOiBzdHJpbmcgPSAnJztcclxuICBzdHIuc3BsaXQoJycpLmZvckVhY2goY2hhciA9PiB7XHJcbiAgICBpZiAoY2hhciA9PSAnJicpIHtcclxuICAgICAgY2hhciA9ICcmYW1wOyc7XHJcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT0gJ1xcJycpIHtcclxuICAgICAgY2hhciA9ICcmIzAzOTsnO1xyXG4gICAgfSBlbHNlIGlmIChjaGFyID09ICdcIicpIHtcclxuICAgICAgY2hhciA9ICcmcXVvdDsnO1xyXG4gICAgfSBlbHNlIGlmIChjaGFyID09ICc8Jykge1xyXG4gICAgICBjaGFyID0gJyZsdDsnO1xyXG4gICAgfSBlbHNlIGlmIChjaGFyID09ICc+Jykge1xyXG4gICAgICBjaGFyID0gJyZndDsnO1xyXG4gICAgfVxyXG4gICAgZXNjYXBlZCArPSBjaGFyO1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZXNjYXBlZDtcclxufVxyXG5cclxuY29uc3QgY3JlYXRlRG9jVHlwZSA9IChkb2N0eXBlPzogRG9jdW1lbnRUeXBlIHwgbnVsbCk6IHN0cmluZyA9PiB7XHJcbiAgICBpZiAoIWRvY3R5cGUpXHJcbiAgICAgIHJldHVybiAnPGh0bWw+PC9odG1sPic7XHJcblxyXG4gICAgY29uc3QgbmFtZSA9IGh0bWxFc2NhcGUoZG9jdHlwZS5uYW1lKTtcclxuICAgIGNvbnN0IGludGVybmFsU3Vic2V0ID0gaHRtbEVzY2FwZShkb2N0eXBlLmludGVybmFsU3Vic2V0KTtcclxuICAgIGNvbnN0IHB1YmxpY0lkID0gZG9jdHlwZS5wdWJsaWNJZCA/IGBcIiR7aHRtbEVzY2FwZShkb2N0eXBlLnB1YmxpY0lkKX1cImAgOiAnJztcclxuICAgIGNvbnN0IHN5c3RlbUlkID0gZG9jdHlwZS5zeXN0ZW1JZCA/IGBcIiR7aHRtbEVzY2FwZShkb2N0eXBlLnN5c3RlbUlkKX1cImAgOiAnJztcclxuXHJcbiAgICByZXR1cm4gYDwhRE9DVFlQRSAke25hbWV9JHtpbnRlcm5hbFN1YnNldH0ke3B1YmxpY0lkfSR7c3lzdGVtSWR9PjxodG1sPjwvaHRtbD5gO1xyXG59XHJcblxyXG5sZXQgZG9jdHlwZVBvbGljeTogVHJ1c3RlZFR5cGVQb2xpY3k7XHJcbmlmICgod2luZG93IGFzIGFueSkudHJ1c3RlZFR5cGVzKSB7XHJcbiAgZG9jdHlwZVBvbGljeSA9ICh3aW5kb3cgYXMgYW55KS50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCdodG1sMmNhbnZhcycsIHtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIGNyZWF0ZUhUTUw6IChpZ25vcmVkOiBzdHJpbmcsIGRvY3R5cGU/OiBEb2N1bWVudFR5cGUgfCBudWxsKTogc3RyaW5nID0+IHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlRG9jVHlwZShkb2N0eXBlKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZURvY3R5cGUgPSAoZG9jdHlwZT86IERvY3VtZW50VHlwZSB8IG51bGwpOiBzdHJpbmcgfCBUcnVzdGVkSFRNTCA9PiB7XHJcbiAgaWYgKGRvY3R5cGVQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVQb2xpY3kuY3JlYXRlSFRNTCgnJywgZG9jdHlwZSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBjcmVhdGVEb2NUeXBlKGRvY3R5cGUpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0JvdW5kc30gZnJvbSAnLi4vY3NzL2xheW91dC9ib3VuZHMnO1xyXG5pbXBvcnQge1xyXG4gICAgaXNCb2R5RWxlbWVudCxcclxuICAgIGlzQ2FudmFzRWxlbWVudCxcclxuICAgIGlzQ3VzdG9tRWxlbWVudCxcclxuICAgIGlzRWxlbWVudE5vZGUsXHJcbiAgICBpc0hUTUxFbGVtZW50Tm9kZSxcclxuICAgIGlzSUZyYW1lRWxlbWVudCxcclxuICAgIGlzSW1hZ2VFbGVtZW50LFxyXG4gICAgaXNTY3JpcHRFbGVtZW50LFxyXG4gICAgaXNTZWxlY3RFbGVtZW50LFxyXG4gICAgaXNTbG90RWxlbWVudCxcclxuICAgIGlzU3R5bGVFbGVtZW50LFxyXG4gICAgaXNTVkdFbGVtZW50Tm9kZSxcclxuICAgIGlzVGV4dGFyZWFFbGVtZW50LFxyXG4gICAgaXNUZXh0Tm9kZSxcclxuICAgIGlzVmlkZW9FbGVtZW50XHJcbn0gZnJvbSAnLi9ub2RlLXBhcnNlcic7XHJcbmltcG9ydCB7aXNJZGVudFRva2VuLCBub25GdW5jdGlvbkFyZ1NlcGFyYXRvcn0gZnJvbSAnLi4vY3NzL3N5bnRheC9wYXJzZXInO1xyXG5pbXBvcnQge1Rva2VuVHlwZX0gZnJvbSAnLi4vY3NzL3N5bnRheC90b2tlbml6ZXInO1xyXG5pbXBvcnQge0NvdW50ZXJTdGF0ZSwgY3JlYXRlQ291bnRlclRleHR9IGZyb20gJy4uL2Nzcy90eXBlcy9mdW5jdGlvbnMvY291bnRlcic7XHJcbmltcG9ydCB7TElTVF9TVFlMRV9UWVBFLCBsaXN0U3R5bGVUeXBlfSBmcm9tICcuLi9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvbGlzdC1zdHlsZS10eXBlJztcclxuaW1wb3J0IHtDU1NQYXJzZWRDb3VudGVyRGVjbGFyYXRpb24sIENTU1BhcnNlZFBzZXVkb0RlY2xhcmF0aW9ufSBmcm9tICcuLi9jc3MvaW5kZXgnO1xyXG5pbXBvcnQge2dldFF1b3RlfSBmcm9tICcuLi9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvcXVvdGVzJztcclxuaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi9jb3JlL2NvbnRleHQnO1xyXG5pbXBvcnQge0RlYnVnZ2VyVHlwZSwgaXNEZWJ1Z2dpbmd9IGZyb20gJy4uL2NvcmUvZGVidWdnZXInO1xyXG5pbXBvcnQge3NlcmlhbGl6ZURvY3R5cGV9IGZyb20gJy4vc2VyaWFsaXplLWRvY3R5cGUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbG9uZU9wdGlvbnMge1xyXG4gICAgaWdub3JlRWxlbWVudHM/OiAoZWxlbWVudDogRWxlbWVudCkgPT4gYm9vbGVhbjtcclxuICAgIG9uY2xvbmU/OiAoZG9jdW1lbnQ6IERvY3VtZW50LCBlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gdm9pZDtcclxuICAgIGFsbG93VGFpbnQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdpbmRvd09wdGlvbnMge1xyXG4gICAgc2Nyb2xsWDogbnVtYmVyO1xyXG4gICAgc2Nyb2xsWTogbnVtYmVyO1xyXG4gICAgd2luZG93V2lkdGg6IG51bWJlcjtcclxuICAgIHdpbmRvd0hlaWdodDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDbG9uZUNvbmZpZ3VyYXRpb25zID0gQ2xvbmVPcHRpb25zICYge1xyXG4gICAgaW5saW5lSW1hZ2VzOiBib29sZWFuO1xyXG4gICAgY29weVN0eWxlczogYm9vbGVhbjtcclxufTtcclxuXHJcbmNvbnN0IElHTk9SRV9BVFRSSUJVVEUgPSAnZGF0YS1odG1sMmNhbnZhcy1pZ25vcmUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIERvY3VtZW50Q2xvbmVyIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Nyb2xsZWRFbGVtZW50czogW0VsZW1lbnQsIG51bWJlciwgbnVtYmVyXVtdO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWZlcmVuY2VFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICAgIGNsb25lZFJlZmVyZW5jZUVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY291bnRlcnM6IENvdW50ZXJTdGF0ZTtcclxuICAgIHByaXZhdGUgcXVvdGVEZXB0aDogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogQ29udGV4dCxcclxuICAgICAgICBlbGVtZW50OiBIVE1MRWxlbWVudCxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IENsb25lQ29uZmlndXJhdGlvbnNcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsZWRFbGVtZW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVmZXJlbmNlRWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5jb3VudGVycyA9IG5ldyBDb3VudGVyU3RhdGUoKTtcclxuICAgICAgICB0aGlzLnF1b3RlRGVwdGggPSAwO1xyXG4gICAgICAgIGlmICghZWxlbWVudC5vd25lckRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2xvbmVkIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhbiBvd25lciBkb2N1bWVudCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kb2N1bWVudEVsZW1lbnQgPSB0aGlzLmNsb25lTm9kZShlbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBmYWxzZSkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgdG9JRnJhbWUob3duZXJEb2N1bWVudDogRG9jdW1lbnQsIHdpbmRvd1NpemU6IEJvdW5kcyk6IFByb21pc2U8SFRNTElGcmFtZUVsZW1lbnQ+IHtcclxuICAgICAgICBjb25zdCBpZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50ID0gY3JlYXRlSUZyYW1lQ29udGFpbmVyKG93bmVyRG9jdW1lbnQsIHdpbmRvd1NpemUpO1xyXG5cclxuICAgICAgICBpZiAoIWlmcmFtZS5jb250ZW50V2luZG93KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgVW5hYmxlIHRvIGZpbmQgaWZyYW1lIHdpbmRvd2ApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsWCA9IChvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IGFzIFdpbmRvdykucGFnZVhPZmZzZXQ7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsWSA9IChvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IGFzIFdpbmRvdykucGFnZVlPZmZzZXQ7XHJcblxyXG4gICAgICAgIGNvbnN0IGNsb25lV2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c7XHJcbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbG9uZTogRG9jdW1lbnQgPSBjbG9uZVdpbmRvdy5kb2N1bWVudDtcclxuXHJcbiAgICAgICAgLyogQ2hyb21lIGRvZXNuJ3QgZGV0ZWN0IHJlbGF0aXZlIGJhY2tncm91bmQtaW1hZ2VzIGFzc2lnbmVkIGluIGlubGluZSA8c3R5bGU+IHNoZWV0cyB3aGVuIGZldGNoZWQgdGhyb3VnaCBnZXRDb21wdXRlZFN0eWxlXHJcbiAgICAgICAgIGlmIHdpbmRvdyB1cmwgaXMgYWJvdXQ6YmxhbmssIHdlIGNhbiBhc3NpZ24gdGhlIHVybCB0byBjdXJyZW50IGJ5IHdyaXRpbmcgb250byB0aGUgZG9jdW1lbnRcclxuICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgY29uc3QgaWZyYW1lTG9hZCA9IGlmcmFtZUxvYWRlcihpZnJhbWUpLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVkRWxlbWVudHMuZm9yRWFjaChyZXN0b3JlTm9kZVNjcm9sbCk7XHJcbiAgICAgICAgICAgIGlmIChjbG9uZVdpbmRvdykge1xyXG4gICAgICAgICAgICAgICAgY2xvbmVXaW5kb3cuc2Nyb2xsVG8od2luZG93U2l6ZS5sZWZ0LCB3aW5kb3dTaXplLnRvcCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgLyhpUGFkfGlQaG9uZXxpUG9kKS9nLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAoY2xvbmVXaW5kb3cuc2Nyb2xsWSAhPT0gd2luZG93U2l6ZS50b3AgfHwgY2xvbmVXaW5kb3cuc2Nyb2xsWCAhPT0gd2luZG93U2l6ZS5sZWZ0KVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmxvZ2dlci53YXJuKCdVbmFibGUgdG8gcmVzdG9yZSBzY3JvbGwgcG9zaXRpb24gZm9yIGNsb25lZCBkb2N1bWVudCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC53aW5kb3dCb3VuZHMgPSB0aGlzLmNvbnRleHQud2luZG93Qm91bmRzLmFkZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVXaW5kb3cuc2Nyb2xsWCAtIHdpbmRvd1NpemUubGVmdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVXaW5kb3cuc2Nyb2xsWSAtIHdpbmRvd1NpemUudG9wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgb25jbG9uZSA9IHRoaXMub3B0aW9ucy5vbmNsb25lO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuY2xvbmVkUmVmZXJlbmNlRWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgRXJyb3IgZmluZGluZyB0aGUgJHt0aGlzLnJlZmVyZW5jZUVsZW1lbnQubm9kZU5hbWV9IGluIHRoZSBjbG9uZWQgZG9jdW1lbnRgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50Q2xvbmUuZm9udHMgJiYgZG9jdW1lbnRDbG9uZS5mb250cy5yZWFkeSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgZG9jdW1lbnRDbG9uZS5mb250cy5yZWFkeTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKC8oQXBwbGVXZWJLaXQpL2cudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgaW1hZ2VzUmVhZHkoZG9jdW1lbnRDbG9uZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb25jbG9uZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gb25jbG9uZShkb2N1bWVudENsb25lLCByZWZlcmVuY2VFbGVtZW50KSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBpZnJhbWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaWZyYW1lO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudENsb25lLm9wZW4oKTtcclxuICAgICAgICBkb2N1bWVudENsb25lLndyaXRlKHNlcmlhbGl6ZURvY3R5cGUoZG9jdW1lbnQuZG9jdHlwZSkgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xyXG4gICAgICAgIC8vIENocm9tZSBzY3JvbGxzIHRoZSBwYXJlbnQgZG9jdW1lbnQgZm9yIHNvbWUgcmVhc29uIGFmdGVyIHRoZSB3cml0ZSB0byB0aGUgY2xvbmVkIHdpbmRvdz8/P1xyXG4gICAgICAgIHJlc3RvcmVPd25lclNjcm9sbCh0aGlzLnJlZmVyZW5jZUVsZW1lbnQub3duZXJEb2N1bWVudCwgc2Nyb2xsWCwgc2Nyb2xsWSk7XHJcbiAgICAgICAgZG9jdW1lbnRDbG9uZS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnRDbG9uZS5hZG9wdE5vZGUodGhpcy5kb2N1bWVudEVsZW1lbnQpLCBkb2N1bWVudENsb25lLmRvY3VtZW50RWxlbWVudCk7XHJcbiAgICAgICAgZG9jdW1lbnRDbG9uZS5jbG9zZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gaWZyYW1lTG9hZDtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVFbGVtZW50Q2xvbmU8VCBleHRlbmRzIEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudD4obm9kZTogVCk6IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKGlzRGVidWdnaW5nKG5vZGUsIERlYnVnZ2VyVHlwZS5DTE9ORSkpIHtcclxuICAgICAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0NhbnZhc0VsZW1lbnQobm9kZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ2FudmFzQ2xvbmUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1ZpZGVvRWxlbWVudChub2RlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVWaWRlb0Nsb25lKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNTdHlsZUVsZW1lbnQobm9kZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU3R5bGVDbG9uZShub2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNsb25lID0gbm9kZS5jbG9uZU5vZGUoZmFsc2UpIGFzIFQ7XHJcbiAgICAgICAgaWYgKGlzSW1hZ2VFbGVtZW50KGNsb25lKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNJbWFnZUVsZW1lbnQobm9kZSkgJiYgbm9kZS5jdXJyZW50U3JjICYmIG5vZGUuY3VycmVudFNyYyAhPT0gbm9kZS5zcmMpIHtcclxuICAgICAgICAgICAgICAgIGNsb25lLnNyYyA9IG5vZGUuY3VycmVudFNyYztcclxuICAgICAgICAgICAgICAgIGNsb25lLnNyY3NldCA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY2xvbmUubG9hZGluZyA9PT0gJ2xhenknKSB7XHJcbiAgICAgICAgICAgICAgICBjbG9uZS5sb2FkaW5nID0gJ2VhZ2VyJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzQ3VzdG9tRWxlbWVudChjbG9uZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3VzdG9tRWxlbWVudENsb25lKGNsb25lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVDdXN0b21FbGVtZW50Q2xvbmUobm9kZTogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XHJcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdodG1sMmNhbnZhc2N1c3RvbWVsZW1lbnQnKTtcclxuICAgICAgICBjb3B5Q1NTU3R5bGVzKG5vZGUuc3R5bGUsIGNsb25lKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNsb25lO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVN0eWxlQ2xvbmUobm9kZTogSFRNTFN0eWxlRWxlbWVudCk6IEhUTUxTdHlsZUVsZW1lbnQge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNoZWV0ID0gbm9kZS5zaGVldCBhcyBDU1NTdHlsZVNoZWV0IHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBpZiAoc2hlZXQgJiYgc2hlZXQuY3NzUnVsZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNzczogc3RyaW5nID0gW10uc2xpY2UuY2FsbChzaGVldC5jc3NSdWxlcywgMCkucmVkdWNlKChjc3M6IHN0cmluZywgcnVsZTogQ1NTUnVsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChydWxlICYmIHR5cGVvZiBydWxlLmNzc1RleHQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3MgKyBydWxlLmNzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3M7XHJcbiAgICAgICAgICAgICAgICB9LCAnJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IG5vZGUuY2xvbmVOb2RlKGZhbHNlKSBhcyBIVE1MU3R5bGVFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3M7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIGFjY2Vzc2luZyBub2RlLnNoZWV0LmNzc1J1bGVzIHRocm93cyBhIERPTUV4Y2VwdGlvblxyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gYWNjZXNzIGNzc1J1bGVzIHByb3BlcnR5JywgZSk7XHJcbiAgICAgICAgICAgIGlmIChlLm5hbWUgIT09ICdTZWN1cml0eUVycm9yJykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbm9kZS5jbG9uZU5vZGUoZmFsc2UpIGFzIEhUTUxTdHlsZUVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlQ2FudmFzQ2xvbmUoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCk6IEhUTUxJbWFnZUVsZW1lbnQgfCBIVE1MQ2FudmFzRWxlbWVudCB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbmxpbmVJbWFnZXMgJiYgY2FudmFzLm93bmVyRG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgaW1nID0gY2FudmFzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpbWcuc3JjID0gY2FudmFzLnRvRGF0YVVSTCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGltZztcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmxvZ2dlci5pbmZvKGBVbmFibGUgdG8gaW5saW5lIGNhbnZhcyBjb250ZW50cywgY2FudmFzIGlzIHRhaW50ZWRgLCBjYW52YXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjbG9uZWRDYW52YXMgPSBjYW52YXMuY2xvbmVOb2RlKGZhbHNlKSBhcyBIVE1MQ2FudmFzRWxlbWVudDtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY2xvbmVkQ2FudmFzLndpZHRoID0gY2FudmFzLndpZHRoO1xyXG4gICAgICAgICAgICBjbG9uZWRDYW52YXMuaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcclxuICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsb25lZEN0eCA9IGNsb25lZENhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgICBpZiAoY2xvbmVkQ3R4KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGxvd1RhaW50ICYmIGN0eCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZEN0eC5wdXRJbWFnZURhdGEoY3R4LmdldEltYWdlRGF0YSgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpLCAwLCAwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wyJykgPz8gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnMgPSBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlicz8ucHJlc2VydmVEcmF3aW5nQnVmZmVyID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmxvZ2dlci53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gY2xvbmUgV2ViR0wgY29udGV4dCBhcyBpdCBoYXMgcHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZEN0eC5kcmF3SW1hZ2UoY2FudmFzLCAwLCAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY2xvbmVkQ2FudmFzO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmxvZ2dlci5pbmZvKGBVbmFibGUgdG8gY2xvbmUgY2FudmFzIGFzIGl0IGlzIHRhaW50ZWRgLCBjYW52YXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNsb25lZENhbnZhcztcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVWaWRlb0Nsb25lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogSFRNTENhbnZhc0VsZW1lbnQge1xyXG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHZpZGVvLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcblxyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHZpZGVvLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWRlby5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChjdHgpIHtcclxuICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UodmlkZW8sIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGxvd1RhaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmdldEltYWdlRGF0YSgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjYW52YXM7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQubG9nZ2VyLmluZm8oYFVuYWJsZSB0byBjbG9uZSB2aWRlbyBhcyBpdCBpcyB0YWludGVkYCwgdmlkZW8pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYmxhbmtDYW52YXMgPSB2aWRlby5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG5cclxuICAgICAgICBibGFua0NhbnZhcy53aWR0aCA9IHZpZGVvLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIGJsYW5rQ2FudmFzLmhlaWdodCA9IHZpZGVvLm9mZnNldEhlaWdodDtcclxuICAgICAgICByZXR1cm4gYmxhbmtDYW52YXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwZW5kQ2hpbGROb2RlKGNsb25lOiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQsIGNoaWxkOiBOb2RlLCBjb3B5U3R5bGVzOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhaXNFbGVtZW50Tm9kZShjaGlsZCkgfHxcclxuICAgICAgICAgICAgKCFpc1NjcmlwdEVsZW1lbnQoY2hpbGQpICYmXHJcbiAgICAgICAgICAgICAgICAhY2hpbGQuaGFzQXR0cmlidXRlKElHTk9SRV9BVFRSSUJVVEUpICYmXHJcbiAgICAgICAgICAgICAgICAodHlwZW9mIHRoaXMub3B0aW9ucy5pZ25vcmVFbGVtZW50cyAhPT0gJ2Z1bmN0aW9uJyB8fCAhdGhpcy5vcHRpb25zLmlnbm9yZUVsZW1lbnRzKGNoaWxkKSkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmNvcHlTdHlsZXMgfHwgIWlzRWxlbWVudE5vZGUoY2hpbGQpIHx8ICFpc1N0eWxlRWxlbWVudChjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgIGNsb25lLmFwcGVuZENoaWxkKHRoaXMuY2xvbmVOb2RlKGNoaWxkLCBjb3B5U3R5bGVzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xvbmVDaGlsZE5vZGVzKG5vZGU6IEVsZW1lbnQsIGNsb25lOiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQsIGNvcHlTdHlsZXM6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICBsZXQgY2hpbGQgPSBub2RlLnNoYWRvd1Jvb3QgPyBub2RlLnNoYWRvd1Jvb3QuZmlyc3RDaGlsZCA6IG5vZGUuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgY2hpbGQ7XHJcbiAgICAgICAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmdcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKGlzRWxlbWVudE5vZGUoY2hpbGQpICYmIGlzU2xvdEVsZW1lbnQoY2hpbGQpICYmIHR5cGVvZiBjaGlsZC5hc3NpZ25lZE5vZGVzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NpZ25lZE5vZGVzID0gY2hpbGQuYXNzaWduZWROb2RlcygpIGFzIENoaWxkTm9kZVtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFzc2lnbmVkTm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduZWROb2Rlcy5mb3JFYWNoKChhc3NpZ25lZE5vZGUpID0+IHRoaXMuYXBwZW5kQ2hpbGROb2RlKGNsb25lLCBhc3NpZ25lZE5vZGUsIGNvcHlTdHlsZXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGROb2RlKGNsb25lLCBjaGlsZCwgY29weVN0eWxlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xvbmVOb2RlKG5vZGU6IE5vZGUsIGNvcHlTdHlsZXM6IGJvb2xlYW4pOiBOb2RlIHtcclxuICAgICAgICBpZiAoaXNUZXh0Tm9kZShub2RlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZS5kYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbm9kZS5vd25lckRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBub2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB3aW5kb3cgPSBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XHJcblxyXG4gICAgICAgIGlmICh3aW5kb3cgJiYgaXNFbGVtZW50Tm9kZShub2RlKSAmJiAoaXNIVE1MRWxlbWVudE5vZGUobm9kZSkgfHwgaXNTVkdFbGVtZW50Tm9kZShub2RlKSkpIHtcclxuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSB0aGlzLmNyZWF0ZUVsZW1lbnRDbG9uZShub2RlKTtcclxuICAgICAgICAgICAgY2xvbmUuc3R5bGUudHJhbnNpdGlvblByb3BlcnR5ID0gJ25vbmUnO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcclxuICAgICAgICAgICAgY29uc3Qgc3R5bGVCZWZvcmUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCAnOmJlZm9yZScpO1xyXG4gICAgICAgICAgICBjb25zdCBzdHlsZUFmdGVyID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSwgJzphZnRlcicpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucmVmZXJlbmNlRWxlbWVudCA9PT0gbm9kZSAmJiBpc0hUTUxFbGVtZW50Tm9kZShjbG9uZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmVkUmVmZXJlbmNlRWxlbWVudCA9IGNsb25lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc0JvZHlFbGVtZW50KGNsb25lKSkge1xyXG4gICAgICAgICAgICAgICAgY3JlYXRlUHNldWRvSGlkZVN0eWxlcyhjbG9uZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ZXJzID0gdGhpcy5jb3VudGVycy5wYXJzZShuZXcgQ1NTUGFyc2VkQ291bnRlckRlY2xhcmF0aW9uKHRoaXMuY29udGV4dCwgc3R5bGUpKTtcclxuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gdGhpcy5yZXNvbHZlUHNldWRvQ29udGVudChub2RlLCBjbG9uZSwgc3R5bGVCZWZvcmUsIFBzZXVkb0VsZW1lbnRUeXBlLkJFRk9SRSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNDdXN0b21FbGVtZW50KG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5U3R5bGVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpc1ZpZGVvRWxlbWVudChub2RlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9uZUNoaWxkTm9kZXMobm9kZSwgY2xvbmUsIGNvcHlTdHlsZXMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoYmVmb3JlKSB7XHJcbiAgICAgICAgICAgICAgICBjbG9uZS5pbnNlcnRCZWZvcmUoYmVmb3JlLCBjbG9uZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSB0aGlzLnJlc29sdmVQc2V1ZG9Db250ZW50KG5vZGUsIGNsb25lLCBzdHlsZUFmdGVyLCBQc2V1ZG9FbGVtZW50VHlwZS5BRlRFUik7XHJcbiAgICAgICAgICAgIGlmIChhZnRlcikge1xyXG4gICAgICAgICAgICAgICAgY2xvbmUuYXBwZW5kQ2hpbGQoYWZ0ZXIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvdW50ZXJzLnBvcChjb3VudGVycyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAoc3R5bGUgJiYgKHRoaXMub3B0aW9ucy5jb3B5U3R5bGVzIHx8IGlzU1ZHRWxlbWVudE5vZGUobm9kZSkpICYmICFpc0lGcmFtZUVsZW1lbnQobm9kZSkpIHx8XHJcbiAgICAgICAgICAgICAgICBjb3B5U3R5bGVzXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29weUNTU1N0eWxlcyhzdHlsZSwgY2xvbmUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobm9kZS5zY3JvbGxUb3AgIT09IDAgfHwgbm9kZS5zY3JvbGxMZWZ0ICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbGVkRWxlbWVudHMucHVzaChbY2xvbmUsIG5vZGUuc2Nyb2xsTGVmdCwgbm9kZS5zY3JvbGxUb3BdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgKGlzVGV4dGFyZWFFbGVtZW50KG5vZGUpIHx8IGlzU2VsZWN0RWxlbWVudChub2RlKSkgJiZcclxuICAgICAgICAgICAgICAgIChpc1RleHRhcmVhRWxlbWVudChjbG9uZSkgfHwgaXNTZWxlY3RFbGVtZW50KGNsb25lKSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBjbG9uZS52YWx1ZSA9IG5vZGUudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBub2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzb2x2ZVBzZXVkb0NvbnRlbnQoXHJcbiAgICAgICAgbm9kZTogRWxlbWVudCxcclxuICAgICAgICBjbG9uZTogRWxlbWVudCxcclxuICAgICAgICBzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbixcclxuICAgICAgICBwc2V1ZG9FbHQ6IFBzZXVkb0VsZW1lbnRUeXBlXHJcbiAgICApOiBIVE1MRWxlbWVudCB8IHZvaWQge1xyXG4gICAgICAgIGlmICghc3R5bGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzdHlsZS5jb250ZW50O1xyXG4gICAgICAgIGNvbnN0IGRvY3VtZW50ID0gY2xvbmUub3duZXJEb2N1bWVudDtcclxuICAgICAgICBpZiAoIWRvY3VtZW50IHx8ICF2YWx1ZSB8fCB2YWx1ZSA9PT0gJ25vbmUnIHx8IHZhbHVlID09PSAnLW1vei1hbHQtY29udGVudCcgfHwgc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY291bnRlcnMucGFyc2UobmV3IENTU1BhcnNlZENvdW50ZXJEZWNsYXJhdGlvbih0aGlzLmNvbnRleHQsIHN0eWxlKSk7XHJcbiAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBuZXcgQ1NTUGFyc2VkUHNldWRvRGVjbGFyYXRpb24odGhpcy5jb250ZXh0LCBzdHlsZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGFub255bW91c1JlcGxhY2VkRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2h0bWwyY2FudmFzcHNldWRvZWxlbWVudCcpO1xyXG4gICAgICAgIGNvcHlDU1NTdHlsZXMoc3R5bGUsIGFub255bW91c1JlcGxhY2VkRWxlbWVudCk7XHJcblxyXG4gICAgICAgIGRlY2xhcmF0aW9uLmNvbnRlbnQuZm9yRWFjaCgodG9rZW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5TVFJJTkdfVE9LRU4pIHtcclxuICAgICAgICAgICAgICAgIGFub255bW91c1JlcGxhY2VkRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0b2tlbi52YWx1ZSkpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5VUkxfVE9LRU4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgICAgICAgICAgaW1nLnNyYyA9IHRva2VuLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaW1nLnN0eWxlLm9wYWNpdHkgPSAnMSc7XHJcbiAgICAgICAgICAgICAgICBhbm9ueW1vdXNSZXBsYWNlZEVsZW1lbnQuYXBwZW5kQ2hpbGQoaW1nKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuRlVOQ1RJT04pIHtcclxuICAgICAgICAgICAgICAgIGlmICh0b2tlbi5uYW1lID09PSAnYXR0cicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRyID0gdG9rZW4udmFsdWVzLmZpbHRlcihpc0lkZW50VG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbm9ueW1vdXNSZXBsYWNlZEVsZW1lbnQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShub2RlLmdldEF0dHJpYnV0ZShhdHRyWzBdLnZhbHVlKSB8fCAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuLm5hbWUgPT09ICdjb3VudGVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtjb3VudGVyLCBjb3VudGVyU3R5bGVdID0gdG9rZW4udmFsdWVzLmZpbHRlcihub25GdW5jdGlvbkFyZ1NlcGFyYXRvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgJiYgaXNJZGVudFRva2VuKGNvdW50ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ZXJTdGF0ZSA9IHRoaXMuY291bnRlcnMuZ2V0Q291bnRlclZhbHVlKGNvdW50ZXIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3VudGVyVHlwZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyU3R5bGUgJiYgaXNJZGVudFRva2VuKGNvdW50ZXJTdHlsZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxpc3RTdHlsZVR5cGUucGFyc2UodGhpcy5jb250ZXh0LCBjb3VudGVyU3R5bGUudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBMSVNUX1NUWUxFX1RZUEUuREVDSU1BTDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFub255bW91c1JlcGxhY2VkRWxlbWVudC5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNyZWF0ZUNvdW50ZXJUZXh0KGNvdW50ZXJTdGF0ZSwgY291bnRlclR5cGUsIGZhbHNlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuLm5hbWUgPT09ICdjb3VudGVycycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBbY291bnRlciwgZGVsaW0sIGNvdW50ZXJTdHlsZV0gPSB0b2tlbi52YWx1ZXMuZmlsdGVyKG5vbkZ1bmN0aW9uQXJnU2VwYXJhdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciAmJiBpc0lkZW50VG9rZW4oY291bnRlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnRlclN0YXRlcyA9IHRoaXMuY291bnRlcnMuZ2V0Q291bnRlclZhbHVlcyhjb3VudGVyLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnRlclR5cGUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlclN0eWxlICYmIGlzSWRlbnRUb2tlbihjb3VudGVyU3R5bGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsaXN0U3R5bGVUeXBlLnBhcnNlKHRoaXMuY29udGV4dCwgY291bnRlclN0eWxlLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTElTVF9TVFlMRV9UWVBFLkRFQ0lNQUw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IGRlbGltICYmIGRlbGltLnR5cGUgPT09IFRva2VuVHlwZS5TVFJJTkdfVE9LRU4gPyBkZWxpbS52YWx1ZSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gY291bnRlclN0YXRlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgodmFsdWUpID0+IGNyZWF0ZUNvdW50ZXJUZXh0KHZhbHVlLCBjb3VudGVyVHlwZSwgZmFsc2UpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oc2VwYXJhdG9yKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFub255bW91c1JlcGxhY2VkRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdGVU5DVElPTl9UT0tFTicsIHRva2VuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuSURFTlRfVE9LRU4pIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdvcGVuLXF1b3RlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5vbnltb3VzUmVwbGFjZWRFbGVtZW50LmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2V0UXVvdGUoZGVjbGFyYXRpb24ucXVvdGVzLCB0aGlzLnF1b3RlRGVwdGgrKywgdHJ1ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlLXF1b3RlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5vbnltb3VzUmVwbGFjZWRFbGVtZW50LmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZ2V0UXVvdGUoZGVjbGFyYXRpb24ucXVvdGVzLCAtLXRoaXMucXVvdGVEZXB0aCwgZmFsc2UpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzYWZhcmkgZG9lc24ndCBwYXJzZSBzdHJpbmcgdG9rZW5zIGNvcnJlY3RseSBiZWNhdXNlIG9mIGxhY2sgb2YgcXVvdGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFub255bW91c1JlcGxhY2VkRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0b2tlbi52YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGFub255bW91c1JlcGxhY2VkRWxlbWVudC5jbGFzc05hbWUgPSBgJHtQU0VVRE9fSElERV9FTEVNRU5UX0NMQVNTX0JFRk9SRX0gJHtQU0VVRE9fSElERV9FTEVNRU5UX0NMQVNTX0FGVEVSfWA7XHJcbiAgICAgICAgY29uc3QgbmV3Q2xhc3NOYW1lID1cclxuICAgICAgICAgICAgcHNldWRvRWx0ID09PSBQc2V1ZG9FbGVtZW50VHlwZS5CRUZPUkVcclxuICAgICAgICAgICAgICAgID8gYCAke1BTRVVET19ISURFX0VMRU1FTlRfQ0xBU1NfQkVGT1JFfWBcclxuICAgICAgICAgICAgICAgIDogYCAke1BTRVVET19ISURFX0VMRU1FTlRfQ0xBU1NfQUZURVJ9YDtcclxuXHJcbiAgICAgICAgaWYgKGlzU1ZHRWxlbWVudE5vZGUoY2xvbmUpKSB7XHJcbiAgICAgICAgICAgIGNsb25lLmNsYXNzTmFtZS5iYXNlVmFsdWUgKz0gbmV3Q2xhc3NOYW1lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNsb25lLmNsYXNzTmFtZSArPSBuZXdDbGFzc05hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYW5vbnltb3VzUmVwbGFjZWRFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBkZXN0cm95KGNvbnRhaW5lcjogSFRNTElGcmFtZUVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoY29udGFpbmVyLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGFpbmVyKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZW51bSBQc2V1ZG9FbGVtZW50VHlwZSB7XHJcbiAgICBCRUZPUkUsXHJcbiAgICBBRlRFUlxyXG59XHJcblxyXG5jb25zdCBjcmVhdGVJRnJhbWVDb250YWluZXIgPSAob3duZXJEb2N1bWVudDogRG9jdW1lbnQsIGJvdW5kczogQm91bmRzKTogSFRNTElGcmFtZUVsZW1lbnQgPT4ge1xyXG4gICAgY29uc3QgY2xvbmVJZnJhbWVDb250YWluZXIgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xyXG5cclxuICAgIGNsb25lSWZyYW1lQ29udGFpbmVyLmNsYXNzTmFtZSA9ICdodG1sMmNhbnZhcy1jb250YWluZXInO1xyXG4gICAgY2xvbmVJZnJhbWVDb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgY2xvbmVJZnJhbWVDb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgY2xvbmVJZnJhbWVDb250YWluZXIuc3R5bGUubGVmdCA9ICctMTAwMDBweCc7XHJcbiAgICBjbG9uZUlmcmFtZUNvbnRhaW5lci5zdHlsZS50b3AgPSAnMHB4JztcclxuICAgIGNsb25lSWZyYW1lQ29udGFpbmVyLnN0eWxlLmJvcmRlciA9ICcwJztcclxuICAgIGNsb25lSWZyYW1lQ29udGFpbmVyLndpZHRoID0gYm91bmRzLndpZHRoLnRvU3RyaW5nKCk7XHJcbiAgICBjbG9uZUlmcmFtZUNvbnRhaW5lci5oZWlnaHQgPSBib3VuZHMuaGVpZ2h0LnRvU3RyaW5nKCk7XHJcbiAgICBjbG9uZUlmcmFtZUNvbnRhaW5lci5zY3JvbGxpbmcgPSAnbm8nOyAvLyBpb3Mgd29uJ3Qgc2Nyb2xsIHdpdGhvdXQgaXRcclxuICAgIGNsb25lSWZyYW1lQ29udGFpbmVyLnNldEF0dHJpYnV0ZShJR05PUkVfQVRUUklCVVRFLCAndHJ1ZScpO1xyXG4gICAgb3duZXJEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNsb25lSWZyYW1lQ29udGFpbmVyKTtcclxuXHJcbiAgICByZXR1cm4gY2xvbmVJZnJhbWVDb250YWluZXI7XHJcbn07XHJcblxyXG5jb25zdCBpbWFnZVJlYWR5ID0gKGltZzogSFRNTEltYWdlRWxlbWVudCk6IFByb21pc2U8RXZlbnQgfCB2b2lkIHwgc3RyaW5nPiA9PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICBpZiAoaW1nLmNvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWltZy5zcmMpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGltZy5vbmxvYWQgPSByZXNvbHZlO1xyXG4gICAgICAgIGltZy5vbmVycm9yID0gcmVzb2x2ZTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuY29uc3QgaW1hZ2VzUmVhZHkgPSAoZG9jdW1lbnQ6IEhUTUxEb2N1bWVudCk6IFByb21pc2U8dW5rbm93bltdPiA9PiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW10uc2xpY2UuY2FsbChkb2N1bWVudC5pbWFnZXMsIDApLm1hcChpbWFnZVJlYWR5KSk7XHJcbn07XHJcblxyXG5jb25zdCBpZnJhbWVMb2FkZXIgPSAoaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCk6IFByb21pc2U8SFRNTElGcmFtZUVsZW1lbnQ+ID0+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2xvbmVXaW5kb3cgPSBpZnJhbWUuY29udGVudFdpbmRvdztcclxuXHJcbiAgICAgICAgaWYgKCFjbG9uZVdpbmRvdykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGBObyB3aW5kb3cgYXNzaWduZWQgZm9yIGlmcmFtZWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbG9uZSA9IGNsb25lV2luZG93LmRvY3VtZW50O1xyXG5cclxuICAgICAgICBjbG9uZVdpbmRvdy5vbmxvYWQgPSBpZnJhbWUub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjbG9uZVdpbmRvdy5vbmxvYWQgPSBpZnJhbWUub25sb2FkID0gbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRDbG9uZS5ib2R5LmNoaWxkTm9kZXMubGVuZ3RoID4gMCAmJiBkb2N1bWVudENsb25lLnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGlmcmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5jb25zdCBpZ25vcmVkU3R5bGVQcm9wZXJ0aWVzID0gW1xyXG4gICAgJ2FsbCcsIC8vICMyNDc2XHJcbiAgICAnZCcsIC8vICMyNDgzXHJcbiAgICAnY29udGVudCcgLy8gU2FmYXJpIHNob3dzIHBzZXVkb2VsZW1lbnRzIGlmIGNvbnRlbnQgaXMgc2V0XHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgY29weUNTU1N0eWxlcyA9IDxUIGV4dGVuZHMgSFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50PihzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiwgdGFyZ2V0OiBUKTogVCA9PiB7XHJcbiAgICAvLyBFZGdlIGRvZXMgbm90IHByb3ZpZGUgdmFsdWUgZm9yIGNzc1RleHRcclxuICAgIGZvciAobGV0IGkgPSBzdHlsZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnR5ID0gc3R5bGUuaXRlbShpKTtcclxuICAgICAgICBpZiAoaWdub3JlZFN0eWxlUHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufTtcclxuXHJcbmNvbnN0IHJlc3RvcmVPd25lclNjcm9sbCA9IChvd25lckRvY3VtZW50OiBEb2N1bWVudCB8IG51bGwsIHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiB7XHJcbiAgICBpZiAoXHJcbiAgICAgICAgb3duZXJEb2N1bWVudCAmJlxyXG4gICAgICAgIG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgJiZcclxuICAgICAgICAoeCAhPT0gb3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5wYWdlWE9mZnNldCB8fCB5ICE9PSBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LnBhZ2VZT2Zmc2V0KVxyXG4gICAgKSB7XHJcbiAgICAgICAgb3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5zY3JvbGxUbyh4LCB5KTtcclxuICAgIH1cclxufTtcclxuXHJcbmNvbnN0IHJlc3RvcmVOb2RlU2Nyb2xsID0gKFtlbGVtZW50LCB4LCB5XTogW0hUTUxFbGVtZW50LCBudW1iZXIsIG51bWJlcl0pID0+IHtcclxuICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCA9IHg7XHJcbiAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHk7XHJcbn07XHJcblxyXG5jb25zdCBQU0VVRE9fQkVGT1JFID0gJzpiZWZvcmUnO1xyXG5jb25zdCBQU0VVRE9fQUZURVIgPSAnOmFmdGVyJztcclxuY29uc3QgUFNFVURPX0hJREVfRUxFTUVOVF9DTEFTU19CRUZPUkUgPSAnX19faHRtbDJjYW52YXNfX19wc2V1ZG9lbGVtZW50X2JlZm9yZSc7XHJcbmNvbnN0IFBTRVVET19ISURFX0VMRU1FTlRfQ0xBU1NfQUZURVIgPSAnX19faHRtbDJjYW52YXNfX19wc2V1ZG9lbGVtZW50X2FmdGVyJztcclxuXHJcbmNvbnN0IFBTRVVET19ISURFX0VMRU1FTlRfU1RZTEUgPSBge1xyXG4gICAgY29udGVudDogXCJcIiAhaW1wb3J0YW50O1xyXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59YDtcclxuXHJcbmNvbnN0IGNyZWF0ZVBzZXVkb0hpZGVTdHlsZXMgPSAoYm9keTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGNyZWF0ZVN0eWxlcyhcclxuICAgICAgICBib2R5LFxyXG4gICAgICAgIGAuJHtQU0VVRE9fSElERV9FTEVNRU5UX0NMQVNTX0JFRk9SRX0ke1BTRVVET19CRUZPUkV9JHtQU0VVRE9fSElERV9FTEVNRU5UX1NUWUxFfVxyXG4gICAgICAgICAuJHtQU0VVRE9fSElERV9FTEVNRU5UX0NMQVNTX0FGVEVSfSR7UFNFVURPX0FGVEVSfSR7UFNFVURPX0hJREVfRUxFTUVOVF9TVFlMRX1gXHJcbiAgICApO1xyXG59O1xyXG5cclxuY29uc3QgY3JlYXRlU3R5bGVzID0gKGJvZHk6IEhUTUxFbGVtZW50LCBzdHlsZXM6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgZG9jdW1lbnQgPSBib2R5Lm93bmVyRG9jdW1lbnQ7XHJcbiAgICBpZiAoZG9jdW1lbnQpIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XHJcbiAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBzdHlsZXM7XHJcbiAgICAgICAgYm9keS5hcHBlbmRDaGlsZChzdHlsZSk7XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7RkVBVFVSRVN9IGZyb20gJy4vZmVhdHVyZXMnO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4vY29udGV4dCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FjaGVTdG9yYWdlIHtcclxuICAgIHByaXZhdGUgc3RhdGljIF9saW5rPzogSFRNTEFuY2hvckVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBfb3JpZ2luID0gJ2Fib3V0OmJsYW5rJztcclxuXHJcbiAgICBzdGF0aWMgZ2V0T3JpZ2luKHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBsaW5rID0gQ2FjaGVTdG9yYWdlLl9saW5rO1xyXG4gICAgICAgIGlmICghbGluaykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2Fib3V0OmJsYW5rJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxpbmsuaHJlZiA9IHVybDtcclxuICAgICAgICBsaW5rLmhyZWYgPSBsaW5rLmhyZWY7IC8vIElFOSwgTE9MISAtIGh0dHA6Ly9qc2ZpZGRsZS5uZXQvbmlrbGFzdmgvMmU0OGIvXHJcbiAgICAgICAgcmV0dXJuIGxpbmsucHJvdG9jb2wgKyBsaW5rLmhvc3RuYW1lICsgbGluay5wb3J0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc1NhbWVPcmlnaW4oc3JjOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQ2FjaGVTdG9yYWdlLmdldE9yaWdpbihzcmMpID09PSBDYWNoZVN0b3JhZ2UuX29yaWdpbjtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2V0Q29udGV4dCh3aW5kb3c6IFdpbmRvdyk6IHZvaWQge1xyXG4gICAgICAgIENhY2hlU3RvcmFnZS5fbGluayA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgQ2FjaGVTdG9yYWdlLl9vcmlnaW4gPSBDYWNoZVN0b3JhZ2UuZ2V0T3JpZ2luKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZU9wdGlvbnMge1xyXG4gICAgaW1hZ2VUaW1lb3V0OiBudW1iZXI7XHJcbiAgICB1c2VDT1JTOiBib29sZWFuO1xyXG4gICAgYWxsb3dUYWludDogYm9vbGVhbjtcclxuICAgIHByb3h5Pzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FjaGUge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NhY2hlOiB7W2tleTogc3RyaW5nXTogUHJvbWlzZTxhbnk+fSA9IHt9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogQ29udGV4dCwgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogUmVzb3VyY2VPcHRpb25zKSB7fVxyXG5cclxuICAgIGFkZEltYWdlKHNyYzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzKHNyYykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0Jsb2JJbWFnZShzcmMpIHx8IGlzUmVuZGVyYWJsZShzcmMpKSB7XHJcbiAgICAgICAgICAgICh0aGlzLl9jYWNoZVtzcmNdID0gdGhpcy5sb2FkSW1hZ2Uoc3JjKSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gcHJldmVudCB1bmhhbmRsZWQgcmVqZWN0aW9uXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgbWF0Y2goc3JjOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZVtzcmNdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgbG9hZEltYWdlKGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaXNTYW1lT3JpZ2luID0gQ2FjaGVTdG9yYWdlLmlzU2FtZU9yaWdpbihrZXkpO1xyXG4gICAgICAgIGNvbnN0IHVzZUNPUlMgPVxyXG4gICAgICAgICAgICAhaXNJbmxpbmVJbWFnZShrZXkpICYmIHRoaXMuX29wdGlvbnMudXNlQ09SUyA9PT0gdHJ1ZSAmJiBGRUFUVVJFUy5TVVBQT1JUX0NPUlNfSU1BR0VTICYmICFpc1NhbWVPcmlnaW47XHJcbiAgICAgICAgY29uc3QgdXNlUHJveHkgPVxyXG4gICAgICAgICAgICAhaXNJbmxpbmVJbWFnZShrZXkpICYmXHJcbiAgICAgICAgICAgICFpc1NhbWVPcmlnaW4gJiZcclxuICAgICAgICAgICAgIWlzQmxvYkltYWdlKGtleSkgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuX29wdGlvbnMucHJveHkgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICAgIEZFQVRVUkVTLlNVUFBPUlRfQ09SU19YSFIgJiZcclxuICAgICAgICAgICAgIXVzZUNPUlM7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhaXNTYW1lT3JpZ2luICYmXHJcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuYWxsb3dUYWludCA9PT0gZmFsc2UgJiZcclxuICAgICAgICAgICAgIWlzSW5saW5lSW1hZ2Uoa2V5KSAmJlxyXG4gICAgICAgICAgICAhaXNCbG9iSW1hZ2Uoa2V5KSAmJlxyXG4gICAgICAgICAgICAhdXNlUHJveHkgJiZcclxuICAgICAgICAgICAgIXVzZUNPUlNcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNyYyA9IGtleTtcclxuICAgICAgICBpZiAodXNlUHJveHkpIHtcclxuICAgICAgICAgICAgc3JjID0gYXdhaXQgdGhpcy5wcm94eShzcmMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmxvZ2dlci5kZWJ1ZyhgQWRkZWQgaW1hZ2UgJHtrZXkuc3Vic3RyaW5nKDAsIDI1Nil9YCk7XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICAgICAgICBpbWcub25sb2FkID0gKCkgPT4gcmVzb2x2ZShpbWcpO1xyXG4gICAgICAgICAgICBpbWcub25lcnJvciA9IHJlamVjdDtcclxuICAgICAgICAgICAgLy9pb3Mgc2FmYXJpIDEwLjMgdGFpbnRzIGNhbnZhcyB3aXRoIGRhdGEgdXJscyB1bmxlc3MgY3Jvc3NPcmlnaW4gaXMgc2V0IHRvIGFub255bW91c1xyXG4gICAgICAgICAgICBpZiAoaXNJbmxpbmVCYXNlNjRJbWFnZShzcmMpIHx8IHVzZUNPUlMpIHtcclxuICAgICAgICAgICAgICAgIGltZy5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGltZy5zcmMgPSBzcmM7XHJcbiAgICAgICAgICAgIGlmIChpbWcuY29tcGxldGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIC8vIElubGluZSBYTUwgaW1hZ2VzIG1heSBmYWlsIHRvIHBhcnNlLCB0aHJvd2luZyBhbiBFcnJvciBsYXRlciBvblxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKGltZyksIDUwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuaW1hZ2VUaW1lb3V0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChcclxuICAgICAgICAgICAgICAgICAgICAoKSA9PiByZWplY3QoYFRpbWVkIG91dCAoJHt0aGlzLl9vcHRpb25zLmltYWdlVGltZW91dH1tcykgbG9hZGluZyBpbWFnZWApLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuaW1hZ2VUaW1lb3V0XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuX2NhY2hlW2tleV0gIT09ICd1bmRlZmluZWQnO1xyXG4gICAgfVxyXG5cclxuICAgIGtleXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoT2JqZWN0LmtleXModGhpcy5fY2FjaGUpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb3h5KHNyYzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCBwcm94eSA9IHRoaXMuX29wdGlvbnMucHJveHk7XHJcblxyXG4gICAgICAgIGlmICghcHJveHkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwcm94eSBkZWZpbmVkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBrZXkgPSBzcmMuc3Vic3RyaW5nKDAsIDI1Nik7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlVHlwZSA9IEZFQVRVUkVTLlNVUFBPUlRfUkVTUE9OU0VfVFlQRSA/ICdibG9iJyA6ICd0ZXh0JztcclxuICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIChlKSA9PiByZWplY3QoZSksIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChgRmFpbGVkIHRvIHByb3h5IHJlc291cmNlICR7a2V5fSB3aXRoIHN0YXR1cyBjb2RlICR7eGhyLnN0YXR1c31gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHhoci5vbmVycm9yID0gcmVqZWN0O1xyXG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHByb3h5LmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nO1xyXG4gICAgICAgICAgICB4aHIub3BlbignR0VUJywgYCR7cHJveHl9JHtxdWVyeVN0cmluZ311cmw9JHtlbmNvZGVVUklDb21wb25lbnQoc3JjKX0mcmVzcG9uc2VUeXBlPSR7cmVzcG9uc2VUeXBlfWApO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSAhPT0gJ3RleHQnICYmIHhociBpbnN0YW5jZW9mIFhNTEh0dHBSZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5pbWFnZVRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLl9vcHRpb25zLmltYWdlVGltZW91dDtcclxuICAgICAgICAgICAgICAgIHhoci50aW1lb3V0ID0gdGltZW91dDtcclxuICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoKSA9PiByZWplY3QoYFRpbWVkIG91dCAoJHt0aW1lb3V0fW1zKSBwcm94eWluZyAke2tleX1gKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgSU5MSU5FX1NWRyA9IC9eZGF0YTppbWFnZVxcL3N2Z1xcK3htbC9pO1xyXG5jb25zdCBJTkxJTkVfQkFTRTY0ID0gL15kYXRhOmltYWdlXFwvLio7YmFzZTY0LC9pO1xyXG5jb25zdCBJTkxJTkVfSU1HID0gL15kYXRhOmltYWdlXFwvLiovaTtcclxuXHJcbmNvbnN0IGlzUmVuZGVyYWJsZSA9IChzcmM6IHN0cmluZyk6IGJvb2xlYW4gPT4gRkVBVFVSRVMuU1VQUE9SVF9TVkdfRFJBV0lORyB8fCAhaXNTVkcoc3JjKTtcclxuY29uc3QgaXNJbmxpbmVJbWFnZSA9IChzcmM6IHN0cmluZyk6IGJvb2xlYW4gPT4gSU5MSU5FX0lNRy50ZXN0KHNyYyk7XHJcbmNvbnN0IGlzSW5saW5lQmFzZTY0SW1hZ2UgPSAoc3JjOiBzdHJpbmcpOiBib29sZWFuID0+IElOTElORV9CQVNFNjQudGVzdChzcmMpO1xyXG5jb25zdCBpc0Jsb2JJbWFnZSA9IChzcmM6IHN0cmluZyk6IGJvb2xlYW4gPT4gc3JjLnN1YnN0cigwLCA0KSA9PT0gJ2Jsb2InO1xyXG5cclxuY29uc3QgaXNTVkcgPSAoc3JjOiBzdHJpbmcpOiBib29sZWFuID0+IHNyYy5zdWJzdHIoLTMpLnRvTG93ZXJDYXNlKCkgPT09ICdzdmcnIHx8IElOTElORV9TVkcudGVzdChzcmMpO1xyXG4iLCJpbXBvcnQge0lQYXRoLCBQYXRoLCBQYXRoVHlwZX0gZnJvbSAnLi9wYXRoJztcclxuXHJcbmV4cG9ydCBjbGFzcyBWZWN0b3IgaW1wbGVtZW50cyBJUGF0aCB7XHJcbiAgICB0eXBlOiBQYXRoVHlwZTtcclxuICAgIHg6IG51bWJlcjtcclxuICAgIHk6IG51bWJlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMudHlwZSA9IFBhdGhUeXBlLlZFQ1RPUjtcclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkKGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlcik6IFZlY3RvciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IodGhpcy54ICsgZGVsdGFYLCB0aGlzLnkgKyBkZWx0YVkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNWZWN0b3IgPSAocGF0aDogUGF0aCk6IHBhdGggaXMgVmVjdG9yID0+IHBhdGgudHlwZSA9PT0gUGF0aFR5cGUuVkVDVE9SO1xyXG4iLCJpbXBvcnQge1ZlY3Rvcn0gZnJvbSAnLi92ZWN0b3InO1xyXG5pbXBvcnQge0lQYXRoLCBQYXRoVHlwZSwgUGF0aH0gZnJvbSAnLi9wYXRoJztcclxuXHJcbmNvbnN0IGxlcnAgPSAoYTogVmVjdG9yLCBiOiBWZWN0b3IsIHQ6IG51bWJlcik6IFZlY3RvciA9PiB7XHJcbiAgICByZXR1cm4gbmV3IFZlY3RvcihhLnggKyAoYi54IC0gYS54KSAqIHQsIGEueSArIChiLnkgLSBhLnkpICogdCk7XHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgQmV6aWVyQ3VydmUgaW1wbGVtZW50cyBJUGF0aCB7XHJcbiAgICB0eXBlOiBQYXRoVHlwZTtcclxuICAgIHN0YXJ0OiBWZWN0b3I7XHJcbiAgICBzdGFydENvbnRyb2w6IFZlY3RvcjtcclxuICAgIGVuZENvbnRyb2w6IFZlY3RvcjtcclxuICAgIGVuZDogVmVjdG9yO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHN0YXJ0OiBWZWN0b3IsIHN0YXJ0Q29udHJvbDogVmVjdG9yLCBlbmRDb250cm9sOiBWZWN0b3IsIGVuZDogVmVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy50eXBlID0gUGF0aFR5cGUuQkVaSUVSX0NVUlZFO1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcclxuICAgICAgICB0aGlzLnN0YXJ0Q29udHJvbCA9IHN0YXJ0Q29udHJvbDtcclxuICAgICAgICB0aGlzLmVuZENvbnRyb2wgPSBlbmRDb250cm9sO1xyXG4gICAgICAgIHRoaXMuZW5kID0gZW5kO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YmRpdmlkZSh0OiBudW1iZXIsIGZpcnN0SGFsZjogYm9vbGVhbik6IEJlemllckN1cnZlIHtcclxuICAgICAgICBjb25zdCBhYiA9IGxlcnAodGhpcy5zdGFydCwgdGhpcy5zdGFydENvbnRyb2wsIHQpO1xyXG4gICAgICAgIGNvbnN0IGJjID0gbGVycCh0aGlzLnN0YXJ0Q29udHJvbCwgdGhpcy5lbmRDb250cm9sLCB0KTtcclxuICAgICAgICBjb25zdCBjZCA9IGxlcnAodGhpcy5lbmRDb250cm9sLCB0aGlzLmVuZCwgdCk7XHJcbiAgICAgICAgY29uc3QgYWJiYyA9IGxlcnAoYWIsIGJjLCB0KTtcclxuICAgICAgICBjb25zdCBiY2NkID0gbGVycChiYywgY2QsIHQpO1xyXG4gICAgICAgIGNvbnN0IGRlc3QgPSBsZXJwKGFiYmMsIGJjY2QsIHQpO1xyXG4gICAgICAgIHJldHVybiBmaXJzdEhhbGYgPyBuZXcgQmV6aWVyQ3VydmUodGhpcy5zdGFydCwgYWIsIGFiYmMsIGRlc3QpIDogbmV3IEJlemllckN1cnZlKGRlc3QsIGJjY2QsIGNkLCB0aGlzLmVuZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkKGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlcik6IEJlemllckN1cnZlIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJlemllckN1cnZlKFxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0LmFkZChkZWx0YVgsIGRlbHRhWSksXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDb250cm9sLmFkZChkZWx0YVgsIGRlbHRhWSksXHJcbiAgICAgICAgICAgIHRoaXMuZW5kQ29udHJvbC5hZGQoZGVsdGFYLCBkZWx0YVkpLFxyXG4gICAgICAgICAgICB0aGlzLmVuZC5hZGQoZGVsdGFYLCBkZWx0YVkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnNlKCk6IEJlemllckN1cnZlIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJlemllckN1cnZlKHRoaXMuZW5kLCB0aGlzLmVuZENvbnRyb2wsIHRoaXMuc3RhcnRDb250cm9sLCB0aGlzLnN0YXJ0KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzQmV6aWVyQ3VydmUgPSAocGF0aDogUGF0aCk6IHBhdGggaXMgQmV6aWVyQ3VydmUgPT4gcGF0aC50eXBlID09PSBQYXRoVHlwZS5CRVpJRVJfQ1VSVkU7XHJcbiIsImltcG9ydCB7RWxlbWVudENvbnRhaW5lcn0gZnJvbSAnLi4vZG9tL2VsZW1lbnQtY29udGFpbmVyJztcclxuaW1wb3J0IHtnZXRBYnNvbHV0ZVZhbHVlLCBnZXRBYnNvbHV0ZVZhbHVlRm9yVHVwbGV9IGZyb20gJy4uL2Nzcy90eXBlcy9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmltcG9ydCB7VmVjdG9yfSBmcm9tICcuL3ZlY3Rvcic7XHJcbmltcG9ydCB7QmV6aWVyQ3VydmV9IGZyb20gJy4vYmV6aWVyLWN1cnZlJztcclxuaW1wb3J0IHtQYXRofSBmcm9tICcuL3BhdGgnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJvdW5kQ3VydmVzIHtcclxuICAgIHJlYWRvbmx5IHRvcExlZnRCb3JkZXJEb3VibGVPdXRlckJveDogUGF0aDtcclxuICAgIHJlYWRvbmx5IHRvcFJpZ2h0Qm9yZGVyRG91YmxlT3V0ZXJCb3g6IFBhdGg7XHJcbiAgICByZWFkb25seSBib3R0b21SaWdodEJvcmRlckRvdWJsZU91dGVyQm94OiBQYXRoO1xyXG4gICAgcmVhZG9ubHkgYm90dG9tTGVmdEJvcmRlckRvdWJsZU91dGVyQm94OiBQYXRoO1xyXG4gICAgcmVhZG9ubHkgdG9wTGVmdEJvcmRlckRvdWJsZUlubmVyQm94OiBQYXRoO1xyXG4gICAgcmVhZG9ubHkgdG9wUmlnaHRCb3JkZXJEb3VibGVJbm5lckJveDogUGF0aDtcclxuICAgIHJlYWRvbmx5IGJvdHRvbVJpZ2h0Qm9yZGVyRG91YmxlSW5uZXJCb3g6IFBhdGg7XHJcbiAgICByZWFkb25seSBib3R0b21MZWZ0Qm9yZGVyRG91YmxlSW5uZXJCb3g6IFBhdGg7XHJcbiAgICByZWFkb25seSB0b3BMZWZ0Qm9yZGVyU3Ryb2tlOiBQYXRoO1xyXG4gICAgcmVhZG9ubHkgdG9wUmlnaHRCb3JkZXJTdHJva2U6IFBhdGg7XHJcbiAgICByZWFkb25seSBib3R0b21SaWdodEJvcmRlclN0cm9rZTogUGF0aDtcclxuICAgIHJlYWRvbmx5IGJvdHRvbUxlZnRCb3JkZXJTdHJva2U6IFBhdGg7XHJcbiAgICByZWFkb25seSB0b3BMZWZ0Qm9yZGVyQm94OiBQYXRoO1xyXG4gICAgcmVhZG9ubHkgdG9wUmlnaHRCb3JkZXJCb3g6IFBhdGg7XHJcbiAgICByZWFkb25seSBib3R0b21SaWdodEJvcmRlckJveDogUGF0aDtcclxuICAgIHJlYWRvbmx5IGJvdHRvbUxlZnRCb3JkZXJCb3g6IFBhdGg7XHJcbiAgICByZWFkb25seSB0b3BMZWZ0UGFkZGluZ0JveDogUGF0aDtcclxuICAgIHJlYWRvbmx5IHRvcFJpZ2h0UGFkZGluZ0JveDogUGF0aDtcclxuICAgIHJlYWRvbmx5IGJvdHRvbVJpZ2h0UGFkZGluZ0JveDogUGF0aDtcclxuICAgIHJlYWRvbmx5IGJvdHRvbUxlZnRQYWRkaW5nQm94OiBQYXRoO1xyXG4gICAgcmVhZG9ubHkgdG9wTGVmdENvbnRlbnRCb3g6IFBhdGg7XHJcbiAgICByZWFkb25seSB0b3BSaWdodENvbnRlbnRCb3g6IFBhdGg7XHJcbiAgICByZWFkb25seSBib3R0b21SaWdodENvbnRlbnRCb3g6IFBhdGg7XHJcbiAgICByZWFkb25seSBib3R0b21MZWZ0Q29udGVudEJveDogUGF0aDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50Q29udGFpbmVyKSB7XHJcbiAgICAgICAgY29uc3Qgc3R5bGVzID0gZWxlbWVudC5zdHlsZXM7XHJcbiAgICAgICAgY29uc3QgYm91bmRzID0gZWxlbWVudC5ib3VuZHM7XHJcblxyXG4gICAgICAgIGxldCBbdGxoLCB0bHZdID0gZ2V0QWJzb2x1dGVWYWx1ZUZvclR1cGxlKHN0eWxlcy5ib3JkZXJUb3BMZWZ0UmFkaXVzLCBib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xyXG4gICAgICAgIGxldCBbdHJoLCB0cnZdID0gZ2V0QWJzb2x1dGVWYWx1ZUZvclR1cGxlKHN0eWxlcy5ib3JkZXJUb3BSaWdodFJhZGl1cywgYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcclxuICAgICAgICBsZXQgW2JyaCwgYnJ2XSA9IGdldEFic29sdXRlVmFsdWVGb3JUdXBsZShzdHlsZXMuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsIGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XHJcbiAgICAgICAgbGV0IFtibGgsIGJsdl0gPSBnZXRBYnNvbHV0ZVZhbHVlRm9yVHVwbGUoc3R5bGVzLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMsIGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZhY3RvcnMgPSBbXTtcclxuICAgICAgICBmYWN0b3JzLnB1c2goKHRsaCArIHRyaCkgLyBib3VuZHMud2lkdGgpO1xyXG4gICAgICAgIGZhY3RvcnMucHVzaCgoYmxoICsgYnJoKSAvIGJvdW5kcy53aWR0aCk7XHJcbiAgICAgICAgZmFjdG9ycy5wdXNoKCh0bHYgKyBibHYpIC8gYm91bmRzLmhlaWdodCk7XHJcbiAgICAgICAgZmFjdG9ycy5wdXNoKCh0cnYgKyBicnYpIC8gYm91bmRzLmhlaWdodCk7XHJcbiAgICAgICAgY29uc3QgbWF4RmFjdG9yID0gTWF0aC5tYXgoLi4uZmFjdG9ycyk7XHJcblxyXG4gICAgICAgIGlmIChtYXhGYWN0b3IgPiAxKSB7XHJcbiAgICAgICAgICAgIHRsaCAvPSBtYXhGYWN0b3I7XHJcbiAgICAgICAgICAgIHRsdiAvPSBtYXhGYWN0b3I7XHJcbiAgICAgICAgICAgIHRyaCAvPSBtYXhGYWN0b3I7XHJcbiAgICAgICAgICAgIHRydiAvPSBtYXhGYWN0b3I7XHJcbiAgICAgICAgICAgIGJyaCAvPSBtYXhGYWN0b3I7XHJcbiAgICAgICAgICAgIGJydiAvPSBtYXhGYWN0b3I7XHJcbiAgICAgICAgICAgIGJsaCAvPSBtYXhGYWN0b3I7XHJcbiAgICAgICAgICAgIGJsdiAvPSBtYXhGYWN0b3I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0b3BXaWR0aCA9IGJvdW5kcy53aWR0aCAtIHRyaDtcclxuICAgICAgICBjb25zdCByaWdodEhlaWdodCA9IGJvdW5kcy5oZWlnaHQgLSBicnY7XHJcbiAgICAgICAgY29uc3QgYm90dG9tV2lkdGggPSBib3VuZHMud2lkdGggLSBicmg7XHJcbiAgICAgICAgY29uc3QgbGVmdEhlaWdodCA9IGJvdW5kcy5oZWlnaHQgLSBibHY7XHJcblxyXG4gICAgICAgIGNvbnN0IGJvcmRlclRvcFdpZHRoID0gc3R5bGVzLmJvcmRlclRvcFdpZHRoO1xyXG4gICAgICAgIGNvbnN0IGJvcmRlclJpZ2h0V2lkdGggPSBzdHlsZXMuYm9yZGVyUmlnaHRXaWR0aDtcclxuICAgICAgICBjb25zdCBib3JkZXJCb3R0b21XaWR0aCA9IHN0eWxlcy5ib3JkZXJCb3R0b21XaWR0aDtcclxuICAgICAgICBjb25zdCBib3JkZXJMZWZ0V2lkdGggPSBzdHlsZXMuYm9yZGVyTGVmdFdpZHRoO1xyXG5cclxuICAgICAgICBjb25zdCBwYWRkaW5nVG9wID0gZ2V0QWJzb2x1dGVWYWx1ZShzdHlsZXMucGFkZGluZ1RvcCwgZWxlbWVudC5ib3VuZHMud2lkdGgpO1xyXG4gICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IGdldEFic29sdXRlVmFsdWUoc3R5bGVzLnBhZGRpbmdSaWdodCwgZWxlbWVudC5ib3VuZHMud2lkdGgpO1xyXG4gICAgICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBnZXRBYnNvbHV0ZVZhbHVlKHN0eWxlcy5wYWRkaW5nQm90dG9tLCBlbGVtZW50LmJvdW5kcy53aWR0aCk7XHJcbiAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBnZXRBYnNvbHV0ZVZhbHVlKHN0eWxlcy5wYWRkaW5nTGVmdCwgZWxlbWVudC5ib3VuZHMud2lkdGgpO1xyXG5cclxuICAgICAgICB0aGlzLnRvcExlZnRCb3JkZXJEb3VibGVPdXRlckJveCA9XHJcbiAgICAgICAgICAgIHRsaCA+IDAgfHwgdGx2ID4gMFxyXG4gICAgICAgICAgICAgICAgPyBnZXRDdXJ2ZVBvaW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgYm9yZGVyTGVmdFdpZHRoIC8gMyxcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy50b3AgKyBib3JkZXJUb3BXaWR0aCAvIDMsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0bGggLSBib3JkZXJMZWZ0V2lkdGggLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGx2IC0gYm9yZGVyVG9wV2lkdGggLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgQ09STkVSLlRPUF9MRUZUXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3Rvcihib3VuZHMubGVmdCArIGJvcmRlckxlZnRXaWR0aCAvIDMsIGJvdW5kcy50b3AgKyBib3JkZXJUb3BXaWR0aCAvIDMpO1xyXG4gICAgICAgIHRoaXMudG9wUmlnaHRCb3JkZXJEb3VibGVPdXRlckJveCA9XHJcbiAgICAgICAgICAgIHRsaCA+IDAgfHwgdGx2ID4gMFxyXG4gICAgICAgICAgICAgICAgPyBnZXRDdXJ2ZVBvaW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgdG9wV2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wICsgYm9yZGVyVG9wV2lkdGggLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJoIC0gYm9yZGVyUmlnaHRXaWR0aCAvIDMsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0cnYgLSBib3JkZXJUb3BXaWR0aCAvIDMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBDT1JORVIuVE9QX1JJR0hUXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3Rvcihib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAtIGJvcmRlclJpZ2h0V2lkdGggLyAzLCBib3VuZHMudG9wICsgYm9yZGVyVG9wV2lkdGggLyAzKTtcclxuICAgICAgICB0aGlzLmJvdHRvbVJpZ2h0Qm9yZGVyRG91YmxlT3V0ZXJCb3ggPVxyXG4gICAgICAgICAgICBicmggPiAwIHx8IGJydiA+IDBcclxuICAgICAgICAgICAgICAgID8gZ2V0Q3VydmVQb2ludHMoXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMubGVmdCArIGJvdHRvbVdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCArIHJpZ2h0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJoIC0gYm9yZGVyUmlnaHRXaWR0aCAvIDMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBicnYgLSBib3JkZXJCb3R0b21XaWR0aCAvIDMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBDT1JORVIuQk9UVE9NX1JJR0hUXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3RvcihcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoIC0gYm9yZGVyUmlnaHRXaWR0aCAvIDMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAtIGJvcmRlckJvdHRvbVdpZHRoIC8gM1xyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYm90dG9tTGVmdEJvcmRlckRvdWJsZU91dGVyQm94ID1cclxuICAgICAgICAgICAgYmxoID4gMCB8fCBibHYgPiAwXHJcbiAgICAgICAgICAgICAgICA/IGdldEN1cnZlUG9pbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmxlZnQgKyBib3JkZXJMZWZ0V2lkdGggLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCArIGxlZnRIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBibGggLSBib3JkZXJMZWZ0V2lkdGggLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYmx2IC0gYm9yZGVyQm90dG9tV2lkdGggLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgQ09STkVSLkJPVFRPTV9MRUZUXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3Rvcihib3VuZHMubGVmdCArIGJvcmRlckxlZnRXaWR0aCAvIDMsIGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC0gYm9yZGVyQm90dG9tV2lkdGggLyAzKTtcclxuICAgICAgICB0aGlzLnRvcExlZnRCb3JkZXJEb3VibGVJbm5lckJveCA9XHJcbiAgICAgICAgICAgIHRsaCA+IDAgfHwgdGx2ID4gMFxyXG4gICAgICAgICAgICAgICAgPyBnZXRDdXJ2ZVBvaW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgKGJvcmRlckxlZnRXaWR0aCAqIDIpIC8gMyxcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy50b3AgKyAoYm9yZGVyVG9wV2lkdGggKiAyKSAvIDMsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0bGggLSAoYm9yZGVyTGVmdFdpZHRoICogMikgLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGx2IC0gKGJvcmRlclRvcFdpZHRoICogMikgLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgQ09STkVSLlRPUF9MRUZUXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3Rvcihib3VuZHMubGVmdCArIChib3JkZXJMZWZ0V2lkdGggKiAyKSAvIDMsIGJvdW5kcy50b3AgKyAoYm9yZGVyVG9wV2lkdGggKiAyKSAvIDMpO1xyXG4gICAgICAgIHRoaXMudG9wUmlnaHRCb3JkZXJEb3VibGVJbm5lckJveCA9XHJcbiAgICAgICAgICAgIHRsaCA+IDAgfHwgdGx2ID4gMFxyXG4gICAgICAgICAgICAgICAgPyBnZXRDdXJ2ZVBvaW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgdG9wV2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wICsgKGJvcmRlclRvcFdpZHRoICogMikgLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJoIC0gKGJvcmRlclJpZ2h0V2lkdGggKiAyKSAvIDMsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0cnYgLSAoYm9yZGVyVG9wV2lkdGggKiAyKSAvIDMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBDT1JORVIuVE9QX1JJR0hUXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3RvcihcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoIC0gKGJvcmRlclJpZ2h0V2lkdGggKiAyKSAvIDMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wICsgKGJvcmRlclRvcFdpZHRoICogMikgLyAzXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5ib3R0b21SaWdodEJvcmRlckRvdWJsZUlubmVyQm94ID1cclxuICAgICAgICAgICAgYnJoID4gMCB8fCBicnYgPiAwXHJcbiAgICAgICAgICAgICAgICA/IGdldEN1cnZlUG9pbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmxlZnQgKyBib3R0b21XaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy50b3AgKyByaWdodEhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgIGJyaCAtIChib3JkZXJSaWdodFdpZHRoICogMikgLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJ2IC0gKGJvcmRlckJvdHRvbVdpZHRoICogMikgLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgQ09STkVSLkJPVFRPTV9SSUdIVFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6IG5ldyBWZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAtIChib3JkZXJSaWdodFdpZHRoICogMikgLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLSAoYm9yZGVyQm90dG9tV2lkdGggKiAyKSAvIDNcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmJvdHRvbUxlZnRCb3JkZXJEb3VibGVJbm5lckJveCA9XHJcbiAgICAgICAgICAgIGJsaCA+IDAgfHwgYmx2ID4gMFxyXG4gICAgICAgICAgICAgICAgPyBnZXRDdXJ2ZVBvaW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgKGJvcmRlckxlZnRXaWR0aCAqIDIpIC8gMyxcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy50b3AgKyBsZWZ0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgYmxoIC0gKGJvcmRlckxlZnRXaWR0aCAqIDIpIC8gMyxcclxuICAgICAgICAgICAgICAgICAgICAgIGJsdiAtIChib3JkZXJCb3R0b21XaWR0aCAqIDIpIC8gMyxcclxuICAgICAgICAgICAgICAgICAgICAgIENPUk5FUi5CT1RUT01fTEVGVFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6IG5ldyBWZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMubGVmdCArIChib3JkZXJMZWZ0V2lkdGggKiAyKSAvIDMsXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAtIChib3JkZXJCb3R0b21XaWR0aCAqIDIpIC8gM1xyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudG9wTGVmdEJvcmRlclN0cm9rZSA9XHJcbiAgICAgICAgICAgIHRsaCA+IDAgfHwgdGx2ID4gMFxyXG4gICAgICAgICAgICAgICAgPyBnZXRDdXJ2ZVBvaW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgYm9yZGVyTGVmdFdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy50b3AgKyBib3JkZXJUb3BXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0bGggLSBib3JkZXJMZWZ0V2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGx2IC0gYm9yZGVyVG9wV2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgQ09STkVSLlRPUF9MRUZUXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3Rvcihib3VuZHMubGVmdCArIGJvcmRlckxlZnRXaWR0aCAvIDIsIGJvdW5kcy50b3AgKyBib3JkZXJUb3BXaWR0aCAvIDIpO1xyXG4gICAgICAgIHRoaXMudG9wUmlnaHRCb3JkZXJTdHJva2UgPVxyXG4gICAgICAgICAgICB0bGggPiAwIHx8IHRsdiA+IDBcclxuICAgICAgICAgICAgICAgID8gZ2V0Q3VydmVQb2ludHMoXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMubGVmdCArIHRvcFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCArIGJvcmRlclRvcFdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHRyaCAtIGJvcmRlclJpZ2h0V2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJ2IC0gYm9yZGVyVG9wV2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgQ09STkVSLlRPUF9SSUdIVFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6IG5ldyBWZWN0b3IoYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLSBib3JkZXJSaWdodFdpZHRoIC8gMiwgYm91bmRzLnRvcCArIGJvcmRlclRvcFdpZHRoIC8gMik7XHJcbiAgICAgICAgdGhpcy5ib3R0b21SaWdodEJvcmRlclN0cm9rZSA9XHJcbiAgICAgICAgICAgIGJyaCA+IDAgfHwgYnJ2ID4gMFxyXG4gICAgICAgICAgICAgICAgPyBnZXRDdXJ2ZVBvaW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgYm90dG9tV2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wICsgcmlnaHRIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBicmggLSBib3JkZXJSaWdodFdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIGJydiAtIGJvcmRlckJvdHRvbVdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIENPUk5FUi5CT1RUT01fUklHSFRcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgOiBuZXcgVmVjdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLSBib3JkZXJSaWdodFdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC0gYm9yZGVyQm90dG9tV2lkdGggLyAyXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5ib3R0b21MZWZ0Qm9yZGVyU3Ryb2tlID1cclxuICAgICAgICAgICAgYmxoID4gMCB8fCBibHYgPiAwXHJcbiAgICAgICAgICAgICAgICA/IGdldEN1cnZlUG9pbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmxlZnQgKyBib3JkZXJMZWZ0V2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCArIGxlZnRIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBibGggLSBib3JkZXJMZWZ0V2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYmx2IC0gYm9yZGVyQm90dG9tV2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgQ09STkVSLkJPVFRPTV9MRUZUXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3Rvcihib3VuZHMubGVmdCArIGJvcmRlckxlZnRXaWR0aCAvIDIsIGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC0gYm9yZGVyQm90dG9tV2lkdGggLyAyKTtcclxuICAgICAgICB0aGlzLnRvcExlZnRCb3JkZXJCb3ggPVxyXG4gICAgICAgICAgICB0bGggPiAwIHx8IHRsdiA+IDBcclxuICAgICAgICAgICAgICAgID8gZ2V0Q3VydmVQb2ludHMoYm91bmRzLmxlZnQsIGJvdW5kcy50b3AsIHRsaCwgdGx2LCBDT1JORVIuVE9QX0xFRlQpXHJcbiAgICAgICAgICAgICAgICA6IG5ldyBWZWN0b3IoYm91bmRzLmxlZnQsIGJvdW5kcy50b3ApO1xyXG4gICAgICAgIHRoaXMudG9wUmlnaHRCb3JkZXJCb3ggPVxyXG4gICAgICAgICAgICB0cmggPiAwIHx8IHRydiA+IDBcclxuICAgICAgICAgICAgICAgID8gZ2V0Q3VydmVQb2ludHMoYm91bmRzLmxlZnQgKyB0b3BXaWR0aCwgYm91bmRzLnRvcCwgdHJoLCB0cnYsIENPUk5FUi5UT1BfUklHSFQpXHJcbiAgICAgICAgICAgICAgICA6IG5ldyBWZWN0b3IoYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGgsIGJvdW5kcy50b3ApO1xyXG4gICAgICAgIHRoaXMuYm90dG9tUmlnaHRCb3JkZXJCb3ggPVxyXG4gICAgICAgICAgICBicmggPiAwIHx8IGJydiA+IDBcclxuICAgICAgICAgICAgICAgID8gZ2V0Q3VydmVQb2ludHMoYm91bmRzLmxlZnQgKyBib3R0b21XaWR0aCwgYm91bmRzLnRvcCArIHJpZ2h0SGVpZ2h0LCBicmgsIGJydiwgQ09STkVSLkJPVFRPTV9SSUdIVClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3Rvcihib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCwgYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuYm90dG9tTGVmdEJvcmRlckJveCA9XHJcbiAgICAgICAgICAgIGJsaCA+IDAgfHwgYmx2ID4gMFxyXG4gICAgICAgICAgICAgICAgPyBnZXRDdXJ2ZVBvaW50cyhib3VuZHMubGVmdCwgYm91bmRzLnRvcCArIGxlZnRIZWlnaHQsIGJsaCwgYmx2LCBDT1JORVIuQk9UVE9NX0xFRlQpXHJcbiAgICAgICAgICAgICAgICA6IG5ldyBWZWN0b3IoYm91bmRzLmxlZnQsIGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0KTtcclxuICAgICAgICB0aGlzLnRvcExlZnRQYWRkaW5nQm94ID1cclxuICAgICAgICAgICAgdGxoID4gMCB8fCB0bHYgPiAwXHJcbiAgICAgICAgICAgICAgICA/IGdldEN1cnZlUG9pbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmxlZnQgKyBib3JkZXJMZWZ0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wICsgYm9yZGVyVG9wV2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLCB0bGggLSBib3JkZXJMZWZ0V2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoMCwgdGx2IC0gYm9yZGVyVG9wV2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgQ09STkVSLlRPUF9MRUZUXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3Rvcihib3VuZHMubGVmdCArIGJvcmRlckxlZnRXaWR0aCwgYm91bmRzLnRvcCArIGJvcmRlclRvcFdpZHRoKTtcclxuICAgICAgICB0aGlzLnRvcFJpZ2h0UGFkZGluZ0JveCA9XHJcbiAgICAgICAgICAgIHRyaCA+IDAgfHwgdHJ2ID4gMFxyXG4gICAgICAgICAgICAgICAgPyBnZXRDdXJ2ZVBvaW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgTWF0aC5taW4odG9wV2lkdGgsIGJvdW5kcy53aWR0aCAtIGJvcmRlclJpZ2h0V2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCArIGJvcmRlclRvcFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdG9wV2lkdGggPiBib3VuZHMud2lkdGggKyBib3JkZXJSaWdodFdpZHRoID8gMCA6IE1hdGgubWF4KDAsIHRyaCAtIGJvcmRlclJpZ2h0V2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoMCwgdHJ2IC0gYm9yZGVyVG9wV2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgQ09STkVSLlRPUF9SSUdIVFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6IG5ldyBWZWN0b3IoYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLSBib3JkZXJSaWdodFdpZHRoLCBib3VuZHMudG9wICsgYm9yZGVyVG9wV2lkdGgpO1xyXG4gICAgICAgIHRoaXMuYm90dG9tUmlnaHRQYWRkaW5nQm94ID1cclxuICAgICAgICAgICAgYnJoID4gMCB8fCBicnYgPiAwXHJcbiAgICAgICAgICAgICAgICA/IGdldEN1cnZlUG9pbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmxlZnQgKyBNYXRoLm1pbihib3R0b21XaWR0aCwgYm91bmRzLndpZHRoIC0gYm9yZGVyTGVmdFdpZHRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy50b3AgKyBNYXRoLm1pbihyaWdodEhlaWdodCwgYm91bmRzLmhlaWdodCAtIGJvcmRlckJvdHRvbVdpZHRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KDAsIGJyaCAtIGJvcmRlclJpZ2h0V2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoMCwgYnJ2IC0gYm9yZGVyQm90dG9tV2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgQ09STkVSLkJPVFRPTV9SSUdIVFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6IG5ldyBWZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAtIGJvcmRlclJpZ2h0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAtIGJvcmRlckJvdHRvbVdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5ib3R0b21MZWZ0UGFkZGluZ0JveCA9XHJcbiAgICAgICAgICAgIGJsaCA+IDAgfHwgYmx2ID4gMFxyXG4gICAgICAgICAgICAgICAgPyBnZXRDdXJ2ZVBvaW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgYm9yZGVyTGVmdFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCArIE1hdGgubWluKGxlZnRIZWlnaHQsIGJvdW5kcy5oZWlnaHQgLSBib3JkZXJCb3R0b21XaWR0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLCBibGggLSBib3JkZXJMZWZ0V2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoMCwgYmx2IC0gYm9yZGVyQm90dG9tV2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgQ09STkVSLkJPVFRPTV9MRUZUXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3Rvcihib3VuZHMubGVmdCArIGJvcmRlckxlZnRXaWR0aCwgYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLSBib3JkZXJCb3R0b21XaWR0aCk7XHJcbiAgICAgICAgdGhpcy50b3BMZWZ0Q29udGVudEJveCA9XHJcbiAgICAgICAgICAgIHRsaCA+IDAgfHwgdGx2ID4gMFxyXG4gICAgICAgICAgICAgICAgPyBnZXRDdXJ2ZVBvaW50cyhcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgYm9yZGVyTGVmdFdpZHRoICsgcGFkZGluZ0xlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wICsgYm9yZGVyVG9wV2lkdGggKyBwYWRkaW5nVG9wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoMCwgdGxoIC0gKGJvcmRlckxlZnRXaWR0aCArIHBhZGRpbmdMZWZ0KSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLCB0bHYgLSAoYm9yZGVyVG9wV2lkdGggKyBwYWRkaW5nVG9wKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBDT1JORVIuVE9QX0xFRlRcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgOiBuZXcgVmVjdG9yKGJvdW5kcy5sZWZ0ICsgYm9yZGVyTGVmdFdpZHRoICsgcGFkZGluZ0xlZnQsIGJvdW5kcy50b3AgKyBib3JkZXJUb3BXaWR0aCArIHBhZGRpbmdUb3ApO1xyXG4gICAgICAgIHRoaXMudG9wUmlnaHRDb250ZW50Qm94ID1cclxuICAgICAgICAgICAgdHJoID4gMCB8fCB0cnYgPiAwXHJcbiAgICAgICAgICAgICAgICA/IGdldEN1cnZlUG9pbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmxlZnQgKyBNYXRoLm1pbih0b3BXaWR0aCwgYm91bmRzLndpZHRoICsgYm9yZGVyTGVmdFdpZHRoICsgcGFkZGluZ0xlZnQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCArIGJvcmRlclRvcFdpZHRoICsgcGFkZGluZ1RvcCxcclxuICAgICAgICAgICAgICAgICAgICAgIHRvcFdpZHRoID4gYm91bmRzLndpZHRoICsgYm9yZGVyTGVmdFdpZHRoICsgcGFkZGluZ0xlZnQgPyAwIDogdHJoIC0gYm9yZGVyTGVmdFdpZHRoICsgcGFkZGluZ0xlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0cnYgLSAoYm9yZGVyVG9wV2lkdGggKyBwYWRkaW5nVG9wKSxcclxuICAgICAgICAgICAgICAgICAgICAgIENPUk5FUi5UT1BfUklHSFRcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgOiBuZXcgVmVjdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLSAoYm9yZGVyUmlnaHRXaWR0aCArIHBhZGRpbmdSaWdodCksXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wICsgYm9yZGVyVG9wV2lkdGggKyBwYWRkaW5nVG9wXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5ib3R0b21SaWdodENvbnRlbnRCb3ggPVxyXG4gICAgICAgICAgICBicmggPiAwIHx8IGJydiA+IDBcclxuICAgICAgICAgICAgICAgID8gZ2V0Q3VydmVQb2ludHMoXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMubGVmdCArIE1hdGgubWluKGJvdHRvbVdpZHRoLCBib3VuZHMud2lkdGggLSAoYm9yZGVyTGVmdFdpZHRoICsgcGFkZGluZ0xlZnQpKSxcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy50b3AgKyBNYXRoLm1pbihyaWdodEhlaWdodCwgYm91bmRzLmhlaWdodCArIGJvcmRlclRvcFdpZHRoICsgcGFkZGluZ1RvcCksXHJcbiAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLCBicmggLSAoYm9yZGVyUmlnaHRXaWR0aCArIHBhZGRpbmdSaWdodCkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJ2IC0gKGJvcmRlckJvdHRvbVdpZHRoICsgcGFkZGluZ0JvdHRvbSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBDT1JORVIuQk9UVE9NX1JJR0hUXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3RvcihcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoIC0gKGJvcmRlclJpZ2h0V2lkdGggKyBwYWRkaW5nUmlnaHQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLSAoYm9yZGVyQm90dG9tV2lkdGggKyBwYWRkaW5nQm90dG9tKVxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYm90dG9tTGVmdENvbnRlbnRCb3ggPVxyXG4gICAgICAgICAgICBibGggPiAwIHx8IGJsdiA+IDBcclxuICAgICAgICAgICAgICAgID8gZ2V0Q3VydmVQb2ludHMoXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMubGVmdCArIGJvcmRlckxlZnRXaWR0aCArIHBhZGRpbmdMZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnRvcCArIGxlZnRIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLCBibGggLSAoYm9yZGVyTGVmdFdpZHRoICsgcGFkZGluZ0xlZnQpKSxcclxuICAgICAgICAgICAgICAgICAgICAgIGJsdiAtIChib3JkZXJCb3R0b21XaWR0aCArIHBhZGRpbmdCb3R0b20pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgQ09STkVSLkJPVFRPTV9MRUZUXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogbmV3IFZlY3RvcihcclxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5sZWZ0ICsgYm9yZGVyTGVmdFdpZHRoICsgcGFkZGluZ0xlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAtIChib3JkZXJCb3R0b21XaWR0aCArIHBhZGRpbmdCb3R0b20pXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmVudW0gQ09STkVSIHtcclxuICAgIFRPUF9MRUZUID0gMCxcclxuICAgIFRPUF9SSUdIVCA9IDEsXHJcbiAgICBCT1RUT01fUklHSFQgPSAyLFxyXG4gICAgQk9UVE9NX0xFRlQgPSAzXHJcbn1cclxuXHJcbmNvbnN0IGdldEN1cnZlUG9pbnRzID0gKHg6IG51bWJlciwgeTogbnVtYmVyLCByMTogbnVtYmVyLCByMjogbnVtYmVyLCBwb3NpdGlvbjogQ09STkVSKTogQmV6aWVyQ3VydmUgPT4ge1xyXG4gICAgY29uc3Qga2FwcGEgPSA0ICogKChNYXRoLnNxcnQoMikgLSAxKSAvIDMpO1xyXG4gICAgY29uc3Qgb3ggPSByMSAqIGthcHBhOyAvLyBjb250cm9sIHBvaW50IG9mZnNldCBob3Jpem9udGFsXHJcbiAgICBjb25zdCBveSA9IHIyICoga2FwcGE7IC8vIGNvbnRyb2wgcG9pbnQgb2Zmc2V0IHZlcnRpY2FsXHJcbiAgICBjb25zdCB4bSA9IHggKyByMTsgLy8geC1taWRkbGVcclxuICAgIGNvbnN0IHltID0geSArIHIyOyAvLyB5LW1pZGRsZVxyXG5cclxuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcclxuICAgICAgICBjYXNlIENPUk5FUi5UT1BfTEVGVDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCZXppZXJDdXJ2ZShcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoeCwgeW0pLFxyXG4gICAgICAgICAgICAgICAgbmV3IFZlY3Rvcih4LCB5bSAtIG95KSxcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoeG0gLSBveCwgeSksXHJcbiAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKHhtLCB5KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNhc2UgQ09STkVSLlRPUF9SSUdIVDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCZXppZXJDdXJ2ZShcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoeCwgeSksXHJcbiAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKHggKyBveCwgeSksXHJcbiAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKHhtLCB5bSAtIG95KSxcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoeG0sIHltKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNhc2UgQ09STkVSLkJPVFRPTV9SSUdIVDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCZXppZXJDdXJ2ZShcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoeG0sIHkpLFxyXG4gICAgICAgICAgICAgICAgbmV3IFZlY3Rvcih4bSwgeSArIG95KSxcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoeCArIG94LCB5bSksXHJcbiAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKHgsIHltKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNhc2UgQ09STkVSLkJPVFRPTV9MRUZUOlxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmV6aWVyQ3VydmUoXHJcbiAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKHhtLCB5bSksXHJcbiAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKHhtIC0gb3gsIHltKSxcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoeCwgeSArIG95KSxcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoeCwgeSlcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVCb3JkZXJCb3hQYXRoID0gKGN1cnZlczogQm91bmRDdXJ2ZXMpOiBQYXRoW10gPT4ge1xyXG4gICAgcmV0dXJuIFtjdXJ2ZXMudG9wTGVmdEJvcmRlckJveCwgY3VydmVzLnRvcFJpZ2h0Qm9yZGVyQm94LCBjdXJ2ZXMuYm90dG9tUmlnaHRCb3JkZXJCb3gsIGN1cnZlcy5ib3R0b21MZWZ0Qm9yZGVyQm94XTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVDb250ZW50Qm94UGF0aCA9IChjdXJ2ZXM6IEJvdW5kQ3VydmVzKTogUGF0aFtdID0+IHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgY3VydmVzLnRvcExlZnRDb250ZW50Qm94LFxyXG4gICAgICAgIGN1cnZlcy50b3BSaWdodENvbnRlbnRCb3gsXHJcbiAgICAgICAgY3VydmVzLmJvdHRvbVJpZ2h0Q29udGVudEJveCxcclxuICAgICAgICBjdXJ2ZXMuYm90dG9tTGVmdENvbnRlbnRCb3hcclxuICAgIF07XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlUGFkZGluZ0JveFBhdGggPSAoY3VydmVzOiBCb3VuZEN1cnZlcyk6IFBhdGhbXSA9PiB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIGN1cnZlcy50b3BMZWZ0UGFkZGluZ0JveCxcclxuICAgICAgICBjdXJ2ZXMudG9wUmlnaHRQYWRkaW5nQm94LFxyXG4gICAgICAgIGN1cnZlcy5ib3R0b21SaWdodFBhZGRpbmdCb3gsXHJcbiAgICAgICAgY3VydmVzLmJvdHRvbUxlZnRQYWRkaW5nQm94XHJcbiAgICBdO1xyXG59O1xyXG4iLCJpbXBvcnQge01hdHJpeH0gZnJvbSAnLi4vY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3RyYW5zZm9ybSc7XHJcbmltcG9ydCB7UGF0aH0gZnJvbSAnLi9wYXRoJztcclxuXHJcbmV4cG9ydCBjb25zdCBlbnVtIEVmZmVjdFR5cGUge1xyXG4gICAgVFJBTlNGT1JNID0gMCxcclxuICAgIENMSVAgPSAxLFxyXG4gICAgT1BBQ0lUWSA9IDJcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gRWZmZWN0VGFyZ2V0IHtcclxuICAgIEJBQ0tHUk9VTkRfQk9SREVSUyA9IDEgPDwgMSxcclxuICAgIENPTlRFTlQgPSAxIDw8IDJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRWxlbWVudEVmZmVjdCB7XHJcbiAgICByZWFkb25seSB0eXBlOiBFZmZlY3RUeXBlO1xyXG4gICAgcmVhZG9ubHkgdGFyZ2V0OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2Zvcm1FZmZlY3QgaW1wbGVtZW50cyBJRWxlbWVudEVmZmVjdCB7XHJcbiAgICByZWFkb25seSB0eXBlOiBFZmZlY3RUeXBlID0gRWZmZWN0VHlwZS5UUkFOU0ZPUk07XHJcbiAgICByZWFkb25seSB0YXJnZXQ6IG51bWJlciA9IEVmZmVjdFRhcmdldC5CQUNLR1JPVU5EX0JPUkRFUlMgfCBFZmZlY3RUYXJnZXQuQ09OVEVOVDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBvZmZzZXRYOiBudW1iZXIsIHJlYWRvbmx5IG9mZnNldFk6IG51bWJlciwgcmVhZG9ubHkgbWF0cml4OiBNYXRyaXgpIHt9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDbGlwRWZmZWN0IGltcGxlbWVudHMgSUVsZW1lbnRFZmZlY3Qge1xyXG4gICAgcmVhZG9ubHkgdHlwZTogRWZmZWN0VHlwZSA9IEVmZmVjdFR5cGUuQ0xJUDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBwYXRoOiBQYXRoW10sIHJlYWRvbmx5IHRhcmdldDogRWZmZWN0VGFyZ2V0KSB7fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgT3BhY2l0eUVmZmVjdCBpbXBsZW1lbnRzIElFbGVtZW50RWZmZWN0IHtcclxuICAgIHJlYWRvbmx5IHR5cGU6IEVmZmVjdFR5cGUgPSBFZmZlY3RUeXBlLk9QQUNJVFk7XHJcbiAgICByZWFkb25seSB0YXJnZXQ6IG51bWJlciA9IEVmZmVjdFRhcmdldC5CQUNLR1JPVU5EX0JPUkRFUlMgfCBFZmZlY3RUYXJnZXQuQ09OVEVOVDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBvcGFjaXR5OiBudW1iZXIpIHt9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc1RyYW5zZm9ybUVmZmVjdCA9IChlZmZlY3Q6IElFbGVtZW50RWZmZWN0KTogZWZmZWN0IGlzIFRyYW5zZm9ybUVmZmVjdCA9PlxyXG4gICAgZWZmZWN0LnR5cGUgPT09IEVmZmVjdFR5cGUuVFJBTlNGT1JNO1xyXG5leHBvcnQgY29uc3QgaXNDbGlwRWZmZWN0ID0gKGVmZmVjdDogSUVsZW1lbnRFZmZlY3QpOiBlZmZlY3QgaXMgQ2xpcEVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gRWZmZWN0VHlwZS5DTElQO1xyXG5leHBvcnQgY29uc3QgaXNPcGFjaXR5RWZmZWN0ID0gKGVmZmVjdDogSUVsZW1lbnRFZmZlY3QpOiBlZmZlY3QgaXMgT3BhY2l0eUVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gRWZmZWN0VHlwZS5PUEFDSVRZO1xyXG4iLCJpbXBvcnQge0JlemllckN1cnZlfSBmcm9tICcuL2Jlemllci1jdXJ2ZSc7XHJcbmltcG9ydCB7VmVjdG9yfSBmcm9tICcuL3ZlY3Rvcic7XHJcbmV4cG9ydCBjb25zdCBlbnVtIFBhdGhUeXBlIHtcclxuICAgIFZFQ1RPUiA9IDAsXHJcbiAgICBCRVpJRVJfQ1VSVkUgPSAxXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhdGgge1xyXG4gICAgdHlwZTogUGF0aFR5cGU7XHJcbiAgICBhZGQoZGVsdGFYOiBudW1iZXIsIGRlbHRhWTogbnVtYmVyKTogSVBhdGg7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBlcXVhbFBhdGggPSAoYTogUGF0aFtdLCBiOiBQYXRoW10pOiBib29sZWFuID0+IHtcclxuICAgIGlmIChhLmxlbmd0aCA9PT0gYi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gYS5zb21lKCh2LCBpKSA9PiB2ID09PSBiW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtUGF0aCA9IChwYXRoOiBQYXRoW10sIGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlciwgZGVsdGFXOiBudW1iZXIsIGRlbHRhSDogbnVtYmVyKTogUGF0aFtdID0+IHtcclxuICAgIHJldHVybiBwYXRoLm1hcCgocG9pbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChpbmRleCkge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnQuYWRkKGRlbHRhWCwgZGVsdGFZKTtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50LmFkZChkZWx0YVggKyBkZWx0YVcsIGRlbHRhWSk7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwb2ludC5hZGQoZGVsdGFYICsgZGVsdGFXLCBkZWx0YVkgKyBkZWx0YUgpO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnQuYWRkKGRlbHRhWCwgZGVsdGFZICsgZGVsdGFIKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBvaW50O1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBQYXRoID0gVmVjdG9yIHwgQmV6aWVyQ3VydmU7XHJcbiIsImltcG9ydCB7RWxlbWVudENvbnRhaW5lciwgRkxBR1N9IGZyb20gJy4uL2RvbS9lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7Y29udGFpbnN9IGZyb20gJy4uL2NvcmUvYml0d2lzZSc7XHJcbmltcG9ydCB7Qm91bmRDdXJ2ZXMsIGNhbGN1bGF0ZUJvcmRlckJveFBhdGgsIGNhbGN1bGF0ZVBhZGRpbmdCb3hQYXRofSBmcm9tICcuL2JvdW5kLWN1cnZlcyc7XHJcbmltcG9ydCB7Q2xpcEVmZmVjdCwgRWZmZWN0VGFyZ2V0LCBJRWxlbWVudEVmZmVjdCwgaXNDbGlwRWZmZWN0LCBPcGFjaXR5RWZmZWN0LCBUcmFuc2Zvcm1FZmZlY3R9IGZyb20gJy4vZWZmZWN0cyc7XHJcbmltcG9ydCB7T1ZFUkZMT1d9IGZyb20gJy4uL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9vdmVyZmxvdyc7XHJcbmltcG9ydCB7ZXF1YWxQYXRofSBmcm9tICcuL3BhdGgnO1xyXG5pbXBvcnQge0RJU1BMQVl9IGZyb20gJy4uL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9kaXNwbGF5JztcclxuaW1wb3J0IHtPTEVsZW1lbnRDb250YWluZXJ9IGZyb20gJy4uL2RvbS9lbGVtZW50cy9vbC1lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7TElFbGVtZW50Q29udGFpbmVyfSBmcm9tICcuLi9kb20vZWxlbWVudHMvbGktZWxlbWVudC1jb250YWluZXInO1xyXG5pbXBvcnQge2NyZWF0ZUNvdW50ZXJUZXh0fSBmcm9tICcuLi9jc3MvdHlwZXMvZnVuY3Rpb25zL2NvdW50ZXInO1xyXG5pbXBvcnQge1BPU0lUSU9OfSBmcm9tICcuLi9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvcG9zaXRpb24nO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0YWNraW5nQ29udGV4dCB7XHJcbiAgICBlbGVtZW50OiBFbGVtZW50UGFpbnQ7XHJcbiAgICBuZWdhdGl2ZVpJbmRleDogU3RhY2tpbmdDb250ZXh0W107XHJcbiAgICB6ZXJvT3JBdXRvWkluZGV4T3JUcmFuc2Zvcm1lZE9yT3BhY2l0eTogU3RhY2tpbmdDb250ZXh0W107XHJcbiAgICBwb3NpdGl2ZVpJbmRleDogU3RhY2tpbmdDb250ZXh0W107XHJcbiAgICBub25Qb3NpdGlvbmVkRmxvYXRzOiBTdGFja2luZ0NvbnRleHRbXTtcclxuICAgIG5vblBvc2l0aW9uZWRJbmxpbmVMZXZlbDogU3RhY2tpbmdDb250ZXh0W107XHJcbiAgICBpbmxpbmVMZXZlbDogRWxlbWVudFBhaW50W107XHJcbiAgICBub25JbmxpbmVMZXZlbDogRWxlbWVudFBhaW50W107XHJcblxyXG4gICAgY29uc3RydWN0b3IoY29udGFpbmVyOiBFbGVtZW50UGFpbnQpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBjb250YWluZXI7XHJcbiAgICAgICAgdGhpcy5pbmxpbmVMZXZlbCA9IFtdO1xyXG4gICAgICAgIHRoaXMubm9uSW5saW5lTGV2ZWwgPSBbXTtcclxuICAgICAgICB0aGlzLm5lZ2F0aXZlWkluZGV4ID0gW107XHJcbiAgICAgICAgdGhpcy56ZXJvT3JBdXRvWkluZGV4T3JUcmFuc2Zvcm1lZE9yT3BhY2l0eSA9IFtdO1xyXG4gICAgICAgIHRoaXMucG9zaXRpdmVaSW5kZXggPSBbXTtcclxuICAgICAgICB0aGlzLm5vblBvc2l0aW9uZWRGbG9hdHMgPSBbXTtcclxuICAgICAgICB0aGlzLm5vblBvc2l0aW9uZWRJbmxpbmVMZXZlbCA9IFtdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRWxlbWVudFBhaW50IHtcclxuICAgIHJlYWRvbmx5IGVmZmVjdHM6IElFbGVtZW50RWZmZWN0W10gPSBbXTtcclxuICAgIHJlYWRvbmx5IGN1cnZlczogQm91bmRDdXJ2ZXM7XHJcbiAgICBsaXN0VmFsdWU/OiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgY29udGFpbmVyOiBFbGVtZW50Q29udGFpbmVyLCByZWFkb25seSBwYXJlbnQ6IEVsZW1lbnRQYWludCB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLmN1cnZlcyA9IG5ldyBCb3VuZEN1cnZlcyh0aGlzLmNvbnRhaW5lcik7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyLnN0eWxlcy5vcGFjaXR5IDwgMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVmZmVjdHMucHVzaChuZXcgT3BhY2l0eUVmZmVjdCh0aGlzLmNvbnRhaW5lci5zdHlsZXMub3BhY2l0eSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyLnN0eWxlcy50cmFuc2Zvcm0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IHRoaXMuY29udGFpbmVyLmJvdW5kcy5sZWZ0ICsgdGhpcy5jb250YWluZXIuc3R5bGVzLnRyYW5zZm9ybU9yaWdpblswXS5udW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFkgPSB0aGlzLmNvbnRhaW5lci5ib3VuZHMudG9wICsgdGhpcy5jb250YWluZXIuc3R5bGVzLnRyYW5zZm9ybU9yaWdpblsxXS5udW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IHRoaXMuY29udGFpbmVyLnN0eWxlcy50cmFuc2Zvcm07XHJcbiAgICAgICAgICAgIHRoaXMuZWZmZWN0cy5wdXNoKG5ldyBUcmFuc2Zvcm1FZmZlY3Qob2Zmc2V0WCwgb2Zmc2V0WSwgbWF0cml4KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250YWluZXIuc3R5bGVzLm92ZXJmbG93WCAhPT0gT1ZFUkZMT1cuVklTSUJMRSkge1xyXG4gICAgICAgICAgICBjb25zdCBib3JkZXJCb3ggPSBjYWxjdWxhdGVCb3JkZXJCb3hQYXRoKHRoaXMuY3VydmVzKTtcclxuICAgICAgICAgICAgY29uc3QgcGFkZGluZ0JveCA9IGNhbGN1bGF0ZVBhZGRpbmdCb3hQYXRoKHRoaXMuY3VydmVzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlcXVhbFBhdGgoYm9yZGVyQm94LCBwYWRkaW5nQm94KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RzLnB1c2gobmV3IENsaXBFZmZlY3QoYm9yZGVyQm94LCBFZmZlY3RUYXJnZXQuQkFDS0dST1VORF9CT1JERVJTIHwgRWZmZWN0VGFyZ2V0LkNPTlRFTlQpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0cy5wdXNoKG5ldyBDbGlwRWZmZWN0KGJvcmRlckJveCwgRWZmZWN0VGFyZ2V0LkJBQ0tHUk9VTkRfQk9SREVSUykpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RzLnB1c2gobmV3IENsaXBFZmZlY3QocGFkZGluZ0JveCwgRWZmZWN0VGFyZ2V0LkNPTlRFTlQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRFZmZlY3RzKHRhcmdldDogRWZmZWN0VGFyZ2V0KTogSUVsZW1lbnRFZmZlY3RbXSB7XHJcbiAgICAgICAgbGV0IGluRmxvdyA9IFtQT1NJVElPTi5BQlNPTFVURSwgUE9TSVRJT04uRklYRURdLmluZGV4T2YodGhpcy5jb250YWluZXIuc3R5bGVzLnBvc2l0aW9uKSA9PT0gLTE7XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdHMgPSB0aGlzLmVmZmVjdHMuc2xpY2UoMCk7XHJcbiAgICAgICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBjcm9wbGVzc0VmZmVjdHMgPSBwYXJlbnQuZWZmZWN0cy5maWx0ZXIoKGVmZmVjdCkgPT4gIWlzQ2xpcEVmZmVjdChlZmZlY3QpKTtcclxuICAgICAgICAgICAgaWYgKGluRmxvdyB8fCBwYXJlbnQuY29udGFpbmVyLnN0eWxlcy5wb3NpdGlvbiAhPT0gUE9TSVRJT04uU1RBVElDIHx8ICFwYXJlbnQucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBlZmZlY3RzLnVuc2hpZnQoLi4uY3JvcGxlc3NFZmZlY3RzKTtcclxuICAgICAgICAgICAgICAgIGluRmxvdyA9IFtQT1NJVElPTi5BQlNPTFVURSwgUE9TSVRJT04uRklYRURdLmluZGV4T2YocGFyZW50LmNvbnRhaW5lci5zdHlsZXMucG9zaXRpb24pID09PSAtMTtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQuY29udGFpbmVyLnN0eWxlcy5vdmVyZmxvd1ggIT09IE9WRVJGTE9XLlZJU0lCTEUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJCb3ggPSBjYWxjdWxhdGVCb3JkZXJCb3hQYXRoKHBhcmVudC5jdXJ2ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmdCb3ggPSBjYWxjdWxhdGVQYWRkaW5nQm94UGF0aChwYXJlbnQuY3VydmVzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVxdWFsUGF0aChib3JkZXJCb3gsIHBhZGRpbmdCb3gpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdHMudW5zaGlmdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDbGlwRWZmZWN0KHBhZGRpbmdCb3gsIEVmZmVjdFRhcmdldC5CQUNLR1JPVU5EX0JPUkRFUlMgfCBFZmZlY3RUYXJnZXQuQ09OVEVOVClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlZmZlY3RzLnVuc2hpZnQoLi4uY3JvcGxlc3NFZmZlY3RzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlZmZlY3RzLmZpbHRlcigoZWZmZWN0KSA9PiBjb250YWlucyhlZmZlY3QudGFyZ2V0LCB0YXJnZXQpKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgcGFyc2VTdGFja1RyZWUgPSAoXHJcbiAgICBwYXJlbnQ6IEVsZW1lbnRQYWludCxcclxuICAgIHN0YWNraW5nQ29udGV4dDogU3RhY2tpbmdDb250ZXh0LFxyXG4gICAgcmVhbFN0YWNraW5nQ29udGV4dDogU3RhY2tpbmdDb250ZXh0LFxyXG4gICAgbGlzdEl0ZW1zOiBFbGVtZW50UGFpbnRbXVxyXG4pID0+IHtcclxuICAgIHBhcmVudC5jb250YWluZXIuZWxlbWVudHMuZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgICBjb25zdCB0cmVhdEFzUmVhbFN0YWNraW5nQ29udGV4dCA9IGNvbnRhaW5zKGNoaWxkLmZsYWdzLCBGTEFHUy5DUkVBVEVTX1JFQUxfU1RBQ0tJTkdfQ09OVEVYVCk7XHJcbiAgICAgICAgY29uc3QgY3JlYXRlc1N0YWNraW5nQ29udGV4dCA9IGNvbnRhaW5zKGNoaWxkLmZsYWdzLCBGTEFHUy5DUkVBVEVTX1NUQUNLSU5HX0NPTlRFWFQpO1xyXG4gICAgICAgIGNvbnN0IHBhaW50Q29udGFpbmVyID0gbmV3IEVsZW1lbnRQYWludChjaGlsZCwgcGFyZW50KTtcclxuICAgICAgICBpZiAoY29udGFpbnMoY2hpbGQuc3R5bGVzLmRpc3BsYXksIERJU1BMQVkuTElTVF9JVEVNKSkge1xyXG4gICAgICAgICAgICBsaXN0SXRlbXMucHVzaChwYWludENvbnRhaW5lcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBsaXN0T3duZXJJdGVtcyA9IGNvbnRhaW5zKGNoaWxkLmZsYWdzLCBGTEFHUy5JU19MSVNUX09XTkVSKSA/IFtdIDogbGlzdEl0ZW1zO1xyXG5cclxuICAgICAgICBpZiAodHJlYXRBc1JlYWxTdGFja2luZ0NvbnRleHQgfHwgY3JlYXRlc1N0YWNraW5nQ29udGV4dCkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRTdGFjayA9XHJcbiAgICAgICAgICAgICAgICB0cmVhdEFzUmVhbFN0YWNraW5nQ29udGV4dCB8fCBjaGlsZC5zdHlsZXMuaXNQb3NpdGlvbmVkKCkgPyByZWFsU3RhY2tpbmdDb250ZXh0IDogc3RhY2tpbmdDb250ZXh0O1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2tpbmdDb250ZXh0KHBhaW50Q29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5zdHlsZXMuaXNQb3NpdGlvbmVkKCkgfHwgY2hpbGQuc3R5bGVzLm9wYWNpdHkgPCAxIHx8IGNoaWxkLnN0eWxlcy5pc1RyYW5zZm9ybWVkKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9yZGVyID0gY2hpbGQuc3R5bGVzLnpJbmRleC5vcmRlcjtcclxuICAgICAgICAgICAgICAgIGlmIChvcmRlciA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdGFjay5uZWdhdGl2ZVpJbmRleC5zb21lKChjdXJyZW50LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmRlciA+IGN1cnJlbnQuZWxlbWVudC5jb250YWluZXIuc3R5bGVzLnpJbmRleC5vcmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdGFjay5uZWdhdGl2ZVpJbmRleC5zcGxpY2UoaW5kZXgsIDAsIHN0YWNrKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3JkZXIgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdGFjay5wb3NpdGl2ZVpJbmRleC5zb21lKChjdXJyZW50LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmRlciA+PSBjdXJyZW50LmVsZW1lbnQuY29udGFpbmVyLnN0eWxlcy56SW5kZXgub3JkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFN0YWNrLnBvc2l0aXZlWkluZGV4LnNwbGljZShpbmRleCwgMCwgc3RhY2spO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdGFjay56ZXJvT3JBdXRvWkluZGV4T3JUcmFuc2Zvcm1lZE9yT3BhY2l0eS5wdXNoKHN0YWNrKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5zdHlsZXMuaXNGbG9hdGluZygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50U3RhY2subm9uUG9zaXRpb25lZEZsb2F0cy5wdXNoKHN0YWNrKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50U3RhY2subm9uUG9zaXRpb25lZElubGluZUxldmVsLnB1c2goc3RhY2spO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwYXJzZVN0YWNrVHJlZShcclxuICAgICAgICAgICAgICAgIHBhaW50Q29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgc3RhY2ssXHJcbiAgICAgICAgICAgICAgICB0cmVhdEFzUmVhbFN0YWNraW5nQ29udGV4dCA/IHN0YWNrIDogcmVhbFN0YWNraW5nQ29udGV4dCxcclxuICAgICAgICAgICAgICAgIGxpc3RPd25lckl0ZW1zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLnN0eWxlcy5pc0lubGluZUxldmVsKCkpIHtcclxuICAgICAgICAgICAgICAgIHN0YWNraW5nQ29udGV4dC5pbmxpbmVMZXZlbC5wdXNoKHBhaW50Q29udGFpbmVyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0YWNraW5nQ29udGV4dC5ub25JbmxpbmVMZXZlbC5wdXNoKHBhaW50Q29udGFpbmVyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGFyc2VTdGFja1RyZWUocGFpbnRDb250YWluZXIsIHN0YWNraW5nQ29udGV4dCwgcmVhbFN0YWNraW5nQ29udGV4dCwgbGlzdE93bmVySXRlbXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRhaW5zKGNoaWxkLmZsYWdzLCBGTEFHUy5JU19MSVNUX09XTkVSKSkge1xyXG4gICAgICAgICAgICBwcm9jZXNzTGlzdEl0ZW1zKGNoaWxkLCBsaXN0T3duZXJJdGVtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn07XHJcblxyXG5jb25zdCBwcm9jZXNzTGlzdEl0ZW1zID0gKG93bmVyOiBFbGVtZW50Q29udGFpbmVyLCBlbGVtZW50czogRWxlbWVudFBhaW50W10pID0+IHtcclxuICAgIGxldCBudW1iZXJpbmcgPSBvd25lciBpbnN0YW5jZW9mIE9MRWxlbWVudENvbnRhaW5lciA/IG93bmVyLnN0YXJ0IDogMTtcclxuICAgIGNvbnN0IHJldmVyc2VkID0gb3duZXIgaW5zdGFuY2VvZiBPTEVsZW1lbnRDb250YWluZXIgPyBvd25lci5yZXZlcnNlZCA6IGZhbHNlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50c1tpXTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGl0ZW0uY29udGFpbmVyIGluc3RhbmNlb2YgTElFbGVtZW50Q29udGFpbmVyICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBpdGVtLmNvbnRhaW5lci52YWx1ZSA9PT0gJ251bWJlcicgJiZcclxuICAgICAgICAgICAgaXRlbS5jb250YWluZXIudmFsdWUgIT09IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgbnVtYmVyaW5nID0gaXRlbS5jb250YWluZXIudmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpdGVtLmxpc3RWYWx1ZSA9IGNyZWF0ZUNvdW50ZXJUZXh0KG51bWJlcmluZywgaXRlbS5jb250YWluZXIuc3R5bGVzLmxpc3RTdHlsZVR5cGUsIHRydWUpO1xyXG5cclxuICAgICAgICBudW1iZXJpbmcgKz0gcmV2ZXJzZWQgPyAtMSA6IDE7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgcGFyc2VTdGFja2luZ0NvbnRleHRzID0gKGNvbnRhaW5lcjogRWxlbWVudENvbnRhaW5lcik6IFN0YWNraW5nQ29udGV4dCA9PiB7XHJcbiAgICBjb25zdCBwYWludENvbnRhaW5lciA9IG5ldyBFbGVtZW50UGFpbnQoY29udGFpbmVyLCBudWxsKTtcclxuICAgIGNvbnN0IHJvb3QgPSBuZXcgU3RhY2tpbmdDb250ZXh0KHBhaW50Q29udGFpbmVyKTtcclxuICAgIGNvbnN0IGxpc3RJdGVtczogRWxlbWVudFBhaW50W10gPSBbXTtcclxuICAgIHBhcnNlU3RhY2tUcmVlKHBhaW50Q29udGFpbmVyLCByb290LCByb290LCBsaXN0SXRlbXMpO1xyXG4gICAgcHJvY2Vzc0xpc3RJdGVtcyhwYWludENvbnRhaW5lci5jb250YWluZXIsIGxpc3RJdGVtcyk7XHJcbiAgICByZXR1cm4gcm9vdDtcclxufTtcclxuIiwiaW1wb3J0IHtQYXRofSBmcm9tICcuL3BhdGgnO1xyXG5pbXBvcnQge0JvdW5kQ3VydmVzfSBmcm9tICcuL2JvdW5kLWN1cnZlcyc7XHJcbmltcG9ydCB7aXNCZXppZXJDdXJ2ZX0gZnJvbSAnLi9iZXppZXItY3VydmUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBhcnNlUGF0aEZvckJvcmRlciA9IChjdXJ2ZXM6IEJvdW5kQ3VydmVzLCBib3JkZXJTaWRlOiBudW1iZXIpOiBQYXRoW10gPT4ge1xyXG4gICAgc3dpdGNoIChib3JkZXJTaWRlKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlUGF0aEZyb21DdXJ2ZXMoXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMudG9wTGVmdEJvcmRlckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy50b3BMZWZ0UGFkZGluZ0JveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy50b3BSaWdodEJvcmRlckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy50b3BSaWdodFBhZGRpbmdCb3hcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVQYXRoRnJvbUN1cnZlcyhcclxuICAgICAgICAgICAgICAgIGN1cnZlcy50b3BSaWdodEJvcmRlckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy50b3BSaWdodFBhZGRpbmdCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMuYm90dG9tUmlnaHRCb3JkZXJCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMuYm90dG9tUmlnaHRQYWRkaW5nQm94XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlUGF0aEZyb21DdXJ2ZXMoXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMuYm90dG9tUmlnaHRCb3JkZXJCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMuYm90dG9tUmlnaHRQYWRkaW5nQm94LFxyXG4gICAgICAgICAgICAgICAgY3VydmVzLmJvdHRvbUxlZnRCb3JkZXJCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMuYm90dG9tTGVmdFBhZGRpbmdCb3hcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVBhdGhGcm9tQ3VydmVzKFxyXG4gICAgICAgICAgICAgICAgY3VydmVzLmJvdHRvbUxlZnRCb3JkZXJCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMuYm90dG9tTGVmdFBhZGRpbmdCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMudG9wTGVmdEJvcmRlckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy50b3BMZWZ0UGFkZGluZ0JveFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHBhcnNlUGF0aEZvckJvcmRlckRvdWJsZU91dGVyID0gKGN1cnZlczogQm91bmRDdXJ2ZXMsIGJvcmRlclNpZGU6IG51bWJlcik6IFBhdGhbXSA9PiB7XHJcbiAgICBzd2l0Y2ggKGJvcmRlclNpZGUpIHtcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVQYXRoRnJvbUN1cnZlcyhcclxuICAgICAgICAgICAgICAgIGN1cnZlcy50b3BMZWZ0Qm9yZGVyQm94LFxyXG4gICAgICAgICAgICAgICAgY3VydmVzLnRvcExlZnRCb3JkZXJEb3VibGVPdXRlckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy50b3BSaWdodEJvcmRlckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy50b3BSaWdodEJvcmRlckRvdWJsZU91dGVyQm94XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlUGF0aEZyb21DdXJ2ZXMoXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMudG9wUmlnaHRCb3JkZXJCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMudG9wUmlnaHRCb3JkZXJEb3VibGVPdXRlckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy5ib3R0b21SaWdodEJvcmRlckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy5ib3R0b21SaWdodEJvcmRlckRvdWJsZU91dGVyQm94XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlUGF0aEZyb21DdXJ2ZXMoXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMuYm90dG9tUmlnaHRCb3JkZXJCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMuYm90dG9tUmlnaHRCb3JkZXJEb3VibGVPdXRlckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy5ib3R0b21MZWZ0Qm9yZGVyQm94LFxyXG4gICAgICAgICAgICAgICAgY3VydmVzLmJvdHRvbUxlZnRCb3JkZXJEb3VibGVPdXRlckJveFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlUGF0aEZyb21DdXJ2ZXMoXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMuYm90dG9tTGVmdEJvcmRlckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy5ib3R0b21MZWZ0Qm9yZGVyRG91YmxlT3V0ZXJCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMudG9wTGVmdEJvcmRlckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy50b3BMZWZ0Qm9yZGVyRG91YmxlT3V0ZXJCb3hcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBwYXJzZVBhdGhGb3JCb3JkZXJEb3VibGVJbm5lciA9IChjdXJ2ZXM6IEJvdW5kQ3VydmVzLCBib3JkZXJTaWRlOiBudW1iZXIpOiBQYXRoW10gPT4ge1xyXG4gICAgc3dpdGNoIChib3JkZXJTaWRlKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlUGF0aEZyb21DdXJ2ZXMoXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMudG9wTGVmdEJvcmRlckRvdWJsZUlubmVyQm94LFxyXG4gICAgICAgICAgICAgICAgY3VydmVzLnRvcExlZnRQYWRkaW5nQm94LFxyXG4gICAgICAgICAgICAgICAgY3VydmVzLnRvcFJpZ2h0Qm9yZGVyRG91YmxlSW5uZXJCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMudG9wUmlnaHRQYWRkaW5nQm94XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlUGF0aEZyb21DdXJ2ZXMoXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMudG9wUmlnaHRCb3JkZXJEb3VibGVJbm5lckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy50b3BSaWdodFBhZGRpbmdCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMuYm90dG9tUmlnaHRCb3JkZXJEb3VibGVJbm5lckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy5ib3R0b21SaWdodFBhZGRpbmdCb3hcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVQYXRoRnJvbUN1cnZlcyhcclxuICAgICAgICAgICAgICAgIGN1cnZlcy5ib3R0b21SaWdodEJvcmRlckRvdWJsZUlubmVyQm94LFxyXG4gICAgICAgICAgICAgICAgY3VydmVzLmJvdHRvbVJpZ2h0UGFkZGluZ0JveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy5ib3R0b21MZWZ0Qm9yZGVyRG91YmxlSW5uZXJCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMuYm90dG9tTGVmdFBhZGRpbmdCb3hcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVBhdGhGcm9tQ3VydmVzKFxyXG4gICAgICAgICAgICAgICAgY3VydmVzLmJvdHRvbUxlZnRCb3JkZXJEb3VibGVJbm5lckJveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy5ib3R0b21MZWZ0UGFkZGluZ0JveCxcclxuICAgICAgICAgICAgICAgIGN1cnZlcy50b3BMZWZ0Qm9yZGVyRG91YmxlSW5uZXJCb3gsXHJcbiAgICAgICAgICAgICAgICBjdXJ2ZXMudG9wTGVmdFBhZGRpbmdCb3hcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBwYXJzZVBhdGhGb3JCb3JkZXJTdHJva2UgPSAoY3VydmVzOiBCb3VuZEN1cnZlcywgYm9yZGVyU2lkZTogbnVtYmVyKTogUGF0aFtdID0+IHtcclxuICAgIHN3aXRjaCAoYm9yZGVyU2lkZSkge1xyXG4gICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cm9rZVBhdGhGcm9tQ3VydmVzKGN1cnZlcy50b3BMZWZ0Qm9yZGVyU3Ryb2tlLCBjdXJ2ZXMudG9wUmlnaHRCb3JkZXJTdHJva2UpO1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cm9rZVBhdGhGcm9tQ3VydmVzKGN1cnZlcy50b3BSaWdodEJvcmRlclN0cm9rZSwgY3VydmVzLmJvdHRvbVJpZ2h0Qm9yZGVyU3Ryb2tlKTtcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVTdHJva2VQYXRoRnJvbUN1cnZlcyhjdXJ2ZXMuYm90dG9tUmlnaHRCb3JkZXJTdHJva2UsIGN1cnZlcy5ib3R0b21MZWZ0Qm9yZGVyU3Ryb2tlKTtcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cm9rZVBhdGhGcm9tQ3VydmVzKGN1cnZlcy5ib3R0b21MZWZ0Qm9yZGVyU3Ryb2tlLCBjdXJ2ZXMudG9wTGVmdEJvcmRlclN0cm9rZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5jb25zdCBjcmVhdGVTdHJva2VQYXRoRnJvbUN1cnZlcyA9IChvdXRlcjE6IFBhdGgsIG91dGVyMjogUGF0aCk6IFBhdGhbXSA9PiB7XHJcbiAgICBjb25zdCBwYXRoID0gW107XHJcbiAgICBpZiAoaXNCZXppZXJDdXJ2ZShvdXRlcjEpKSB7XHJcbiAgICAgICAgcGF0aC5wdXNoKG91dGVyMS5zdWJkaXZpZGUoMC41LCBmYWxzZSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBwYXRoLnB1c2gob3V0ZXIxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNCZXppZXJDdXJ2ZShvdXRlcjIpKSB7XHJcbiAgICAgICAgcGF0aC5wdXNoKG91dGVyMi5zdWJkaXZpZGUoMC41LCB0cnVlKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhdGgucHVzaChvdXRlcjIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXRoO1xyXG59O1xyXG5cclxuY29uc3QgY3JlYXRlUGF0aEZyb21DdXJ2ZXMgPSAob3V0ZXIxOiBQYXRoLCBpbm5lcjE6IFBhdGgsIG91dGVyMjogUGF0aCwgaW5uZXIyOiBQYXRoKTogUGF0aFtdID0+IHtcclxuICAgIGNvbnN0IHBhdGggPSBbXTtcclxuICAgIGlmIChpc0JlemllckN1cnZlKG91dGVyMSkpIHtcclxuICAgICAgICBwYXRoLnB1c2gob3V0ZXIxLnN1YmRpdmlkZSgwLjUsIGZhbHNlKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhdGgucHVzaChvdXRlcjEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0JlemllckN1cnZlKG91dGVyMikpIHtcclxuICAgICAgICBwYXRoLnB1c2gob3V0ZXIyLnN1YmRpdmlkZSgwLjUsIHRydWUpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGF0aC5wdXNoKG91dGVyMik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzQmV6aWVyQ3VydmUoaW5uZXIyKSkge1xyXG4gICAgICAgIHBhdGgucHVzaChpbm5lcjIuc3ViZGl2aWRlKDAuNSwgdHJ1ZSkucmV2ZXJzZSgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGF0aC5wdXNoKGlubmVyMik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzQmV6aWVyQ3VydmUoaW5uZXIxKSkge1xyXG4gICAgICAgIHBhdGgucHVzaChpbm5lcjEuc3ViZGl2aWRlKDAuNSwgZmFsc2UpLnJldmVyc2UoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhdGgucHVzaChpbm5lcjEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXRoO1xyXG59O1xyXG4iLCJpbXBvcnQge2dldEFic29sdXRlVmFsdWV9IGZyb20gJy4uL2Nzcy90eXBlcy9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmltcG9ydCB7Qm91bmRzfSBmcm9tICcuLi9jc3MvbGF5b3V0L2JvdW5kcyc7XHJcbmltcG9ydCB7RWxlbWVudENvbnRhaW5lcn0gZnJvbSAnLi4vZG9tL2VsZW1lbnQtY29udGFpbmVyJztcclxuXHJcbmV4cG9ydCBjb25zdCBwYWRkaW5nQm94ID0gKGVsZW1lbnQ6IEVsZW1lbnRDb250YWluZXIpOiBCb3VuZHMgPT4ge1xyXG4gICAgY29uc3QgYm91bmRzID0gZWxlbWVudC5ib3VuZHM7XHJcbiAgICBjb25zdCBzdHlsZXMgPSBlbGVtZW50LnN0eWxlcztcclxuICAgIHJldHVybiBib3VuZHMuYWRkKFxyXG4gICAgICAgIHN0eWxlcy5ib3JkZXJMZWZ0V2lkdGgsXHJcbiAgICAgICAgc3R5bGVzLmJvcmRlclRvcFdpZHRoLFxyXG4gICAgICAgIC0oc3R5bGVzLmJvcmRlclJpZ2h0V2lkdGggKyBzdHlsZXMuYm9yZGVyTGVmdFdpZHRoKSxcclxuICAgICAgICAtKHN0eWxlcy5ib3JkZXJUb3BXaWR0aCArIHN0eWxlcy5ib3JkZXJCb3R0b21XaWR0aClcclxuICAgICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY29udGVudEJveCA9IChlbGVtZW50OiBFbGVtZW50Q29udGFpbmVyKTogQm91bmRzID0+IHtcclxuICAgIGNvbnN0IHN0eWxlcyA9IGVsZW1lbnQuc3R5bGVzO1xyXG4gICAgY29uc3QgYm91bmRzID0gZWxlbWVudC5ib3VuZHM7XHJcblxyXG4gICAgY29uc3QgcGFkZGluZ0xlZnQgPSBnZXRBYnNvbHV0ZVZhbHVlKHN0eWxlcy5wYWRkaW5nTGVmdCwgYm91bmRzLndpZHRoKTtcclxuICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IGdldEFic29sdXRlVmFsdWUoc3R5bGVzLnBhZGRpbmdSaWdodCwgYm91bmRzLndpZHRoKTtcclxuICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBnZXRBYnNvbHV0ZVZhbHVlKHN0eWxlcy5wYWRkaW5nVG9wLCBib3VuZHMud2lkdGgpO1xyXG4gICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IGdldEFic29sdXRlVmFsdWUoc3R5bGVzLnBhZGRpbmdCb3R0b20sIGJvdW5kcy53aWR0aCk7XHJcblxyXG4gICAgcmV0dXJuIGJvdW5kcy5hZGQoXHJcbiAgICAgICAgcGFkZGluZ0xlZnQgKyBzdHlsZXMuYm9yZGVyTGVmdFdpZHRoLFxyXG4gICAgICAgIHBhZGRpbmdUb3AgKyBzdHlsZXMuYm9yZGVyVG9wV2lkdGgsXHJcbiAgICAgICAgLShzdHlsZXMuYm9yZGVyUmlnaHRXaWR0aCArIHN0eWxlcy5ib3JkZXJMZWZ0V2lkdGggKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCksXHJcbiAgICAgICAgLShzdHlsZXMuYm9yZGVyVG9wV2lkdGggKyBzdHlsZXMuYm9yZGVyQm90dG9tV2lkdGggKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSlcclxuICAgICk7XHJcbn07XHJcbiIsImltcG9ydCB7Qm91bmRzfSBmcm9tICcuLi9jc3MvbGF5b3V0L2JvdW5kcyc7XHJcbmltcG9ydCB7QkFDS0dST1VORF9PUklHSU59IGZyb20gJy4uL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9iYWNrZ3JvdW5kLW9yaWdpbic7XHJcbmltcG9ydCB7RWxlbWVudENvbnRhaW5lcn0gZnJvbSAnLi4vZG9tL2VsZW1lbnQtY29udGFpbmVyJztcclxuaW1wb3J0IHtCQUNLR1JPVU5EX1NJWkUsIEJhY2tncm91bmRTaXplSW5mb30gZnJvbSAnLi4vY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JhY2tncm91bmQtc2l6ZSc7XHJcbmltcG9ydCB7VmVjdG9yfSBmcm9tICcuL3ZlY3Rvcic7XHJcbmltcG9ydCB7QkFDS0dST1VORF9SRVBFQVR9IGZyb20gJy4uL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9iYWNrZ3JvdW5kLXJlcGVhdCc7XHJcbmltcG9ydCB7Z2V0QWJzb2x1dGVWYWx1ZSwgZ2V0QWJzb2x1dGVWYWx1ZUZvclR1cGxlLCBpc0xlbmd0aFBlcmNlbnRhZ2V9IGZyb20gJy4uL2Nzcy90eXBlcy9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmltcG9ydCB7Q1NTVmFsdWUsIGlzSWRlbnRUb2tlbn0gZnJvbSAnLi4vY3NzL3N5bnRheC9wYXJzZXInO1xyXG5pbXBvcnQge2NvbnRlbnRCb3gsIHBhZGRpbmdCb3h9IGZyb20gJy4vYm94LXNpemluZyc7XHJcbmltcG9ydCB7UGF0aH0gZnJvbSAnLi9wYXRoJztcclxuaW1wb3J0IHtCQUNLR1JPVU5EX0NMSVB9IGZyb20gJy4uL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9iYWNrZ3JvdW5kLWNsaXAnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEgPSAoXHJcbiAgICBiYWNrZ3JvdW5kT3JpZ2luOiBCQUNLR1JPVU5EX09SSUdJTixcclxuICAgIGVsZW1lbnQ6IEVsZW1lbnRDb250YWluZXJcclxuKTogQm91bmRzID0+IHtcclxuICAgIGlmIChiYWNrZ3JvdW5kT3JpZ2luID09PSBCQUNLR1JPVU5EX09SSUdJTi5CT1JERVJfQk9YKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuYm91bmRzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiYWNrZ3JvdW5kT3JpZ2luID09PSBCQUNLR1JPVU5EX09SSUdJTi5DT05URU5UX0JPWCkge1xyXG4gICAgICAgIHJldHVybiBjb250ZW50Qm94KGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYWRkaW5nQm94KGVsZW1lbnQpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUJhY2tncm91bmRQYWludGluZ0FyZWEgPSAoYmFja2dyb3VuZENsaXA6IEJBQ0tHUk9VTkRfQ0xJUCwgZWxlbWVudDogRWxlbWVudENvbnRhaW5lcik6IEJvdW5kcyA9PiB7XHJcbiAgICBpZiAoYmFja2dyb3VuZENsaXAgPT09IEJBQ0tHUk9VTkRfQ0xJUC5CT1JERVJfQk9YKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuYm91bmRzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiYWNrZ3JvdW5kQ2xpcCA9PT0gQkFDS0dST1VORF9DTElQLkNPTlRFTlRfQk9YKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRCb3goZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhZGRpbmdCb3goZWxlbWVudCk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQmFja2dyb3VuZFJlbmRlcmluZyA9IChcclxuICAgIGNvbnRhaW5lcjogRWxlbWVudENvbnRhaW5lcixcclxuICAgIGluZGV4OiBudW1iZXIsXHJcbiAgICBpbnRyaW5zaWNTaXplOiBbbnVtYmVyIHwgbnVsbCwgbnVtYmVyIHwgbnVsbCwgbnVtYmVyIHwgbnVsbF1cclxuKTogW1BhdGhbXSwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9PiB7XHJcbiAgICBjb25zdCBiYWNrZ3JvdW5kUG9zaXRpb25pbmdBcmVhID0gY2FsY3VsYXRlQmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYShcclxuICAgICAgICBnZXRCYWNrZ3JvdW5kVmFsdWVGb3JJbmRleChjb250YWluZXIuc3R5bGVzLmJhY2tncm91bmRPcmlnaW4sIGluZGV4KSxcclxuICAgICAgICBjb250YWluZXJcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYmFja2dyb3VuZFBhaW50aW5nQXJlYSA9IGNhbGN1bGF0ZUJhY2tncm91bmRQYWludGluZ0FyZWEoXHJcbiAgICAgICAgZ2V0QmFja2dyb3VuZFZhbHVlRm9ySW5kZXgoY29udGFpbmVyLnN0eWxlcy5iYWNrZ3JvdW5kQ2xpcCwgaW5kZXgpLFxyXG4gICAgICAgIGNvbnRhaW5lclxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBiYWNrZ3JvdW5kSW1hZ2VTaXplID0gY2FsY3VsYXRlQmFja2dyb3VuZFNpemUoXHJcbiAgICAgICAgZ2V0QmFja2dyb3VuZFZhbHVlRm9ySW5kZXgoY29udGFpbmVyLnN0eWxlcy5iYWNrZ3JvdW5kU2l6ZSwgaW5kZXgpLFxyXG4gICAgICAgIGludHJpbnNpY1NpemUsXHJcbiAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBbc2l6ZVdpZHRoLCBzaXplSGVpZ2h0XSA9IGJhY2tncm91bmRJbWFnZVNpemU7XHJcblxyXG4gICAgY29uc3QgcG9zaXRpb24gPSBnZXRBYnNvbHV0ZVZhbHVlRm9yVHVwbGUoXHJcbiAgICAgICAgZ2V0QmFja2dyb3VuZFZhbHVlRm9ySW5kZXgoY29udGFpbmVyLnN0eWxlcy5iYWNrZ3JvdW5kUG9zaXRpb24sIGluZGV4KSxcclxuICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb25pbmdBcmVhLndpZHRoIC0gc2l6ZVdpZHRoLFxyXG4gICAgICAgIGJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEuaGVpZ2h0IC0gc2l6ZUhlaWdodFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBwYXRoID0gY2FsY3VsYXRlQmFja2dyb3VuZFJlcGVhdFBhdGgoXHJcbiAgICAgICAgZ2V0QmFja2dyb3VuZFZhbHVlRm9ySW5kZXgoY29udGFpbmVyLnN0eWxlcy5iYWNrZ3JvdW5kUmVwZWF0LCBpbmRleCksXHJcbiAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgICAgYmFja2dyb3VuZEltYWdlU2l6ZSxcclxuICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb25pbmdBcmVhLFxyXG4gICAgICAgIGJhY2tncm91bmRQYWludGluZ0FyZWFcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgb2Zmc2V0WCA9IE1hdGgucm91bmQoYmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYS5sZWZ0ICsgcG9zaXRpb25bMF0pO1xyXG4gICAgY29uc3Qgb2Zmc2V0WSA9IE1hdGgucm91bmQoYmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYS50b3AgKyBwb3NpdGlvblsxXSk7XHJcblxyXG4gICAgcmV0dXJuIFtwYXRoLCBvZmZzZXRYLCBvZmZzZXRZLCBzaXplV2lkdGgsIHNpemVIZWlnaHRdO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzQXV0byA9ICh0b2tlbjogQ1NTVmFsdWUpOiBib29sZWFuID0+IGlzSWRlbnRUb2tlbih0b2tlbikgJiYgdG9rZW4udmFsdWUgPT09IEJBQ0tHUk9VTkRfU0laRS5BVVRPO1xyXG5cclxuY29uc3QgaGFzSW50cmluc2ljVmFsdWUgPSAodmFsdWU6IG51bWJlciB8IG51bGwpOiB2YWx1ZSBpcyBudW1iZXIgPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcclxuXHJcbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVCYWNrZ3JvdW5kU2l6ZSA9IChcclxuICAgIHNpemU6IEJhY2tncm91bmRTaXplSW5mb1tdLFxyXG4gICAgW2ludHJpbnNpY1dpZHRoLCBpbnRyaW5zaWNIZWlnaHQsIGludHJpbnNpY1Byb3BvcnRpb25dOiBbbnVtYmVyIHwgbnVsbCwgbnVtYmVyIHwgbnVsbCwgbnVtYmVyIHwgbnVsbF0sXHJcbiAgICBib3VuZHM6IEJvdW5kc1xyXG4pOiBbbnVtYmVyLCBudW1iZXJdID0+IHtcclxuICAgIGNvbnN0IFtmaXJzdCwgc2Vjb25kXSA9IHNpemU7XHJcblxyXG4gICAgaWYgKCFmaXJzdCkge1xyXG4gICAgICAgIHJldHVybiBbMCwgMF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzTGVuZ3RoUGVyY2VudGFnZShmaXJzdCkgJiYgc2Vjb25kICYmIGlzTGVuZ3RoUGVyY2VudGFnZShzZWNvbmQpKSB7XHJcbiAgICAgICAgcmV0dXJuIFtnZXRBYnNvbHV0ZVZhbHVlKGZpcnN0LCBib3VuZHMud2lkdGgpLCBnZXRBYnNvbHV0ZVZhbHVlKHNlY29uZCwgYm91bmRzLmhlaWdodCldO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhhc0ludHJpbnNpY1Byb3BvcnRpb24gPSBoYXNJbnRyaW5zaWNWYWx1ZShpbnRyaW5zaWNQcm9wb3J0aW9uKTtcclxuXHJcbiAgICBpZiAoaXNJZGVudFRva2VuKGZpcnN0KSAmJiAoZmlyc3QudmFsdWUgPT09IEJBQ0tHUk9VTkRfU0laRS5DT05UQUlOIHx8IGZpcnN0LnZhbHVlID09PSBCQUNLR1JPVU5EX1NJWkUuQ09WRVIpKSB7XHJcbiAgICAgICAgaWYgKGhhc0ludHJpbnNpY1ZhbHVlKGludHJpbnNpY1Byb3BvcnRpb24pKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFJhdGlvID0gYm91bmRzLndpZHRoIC8gYm91bmRzLmhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRSYXRpbyA8IGludHJpbnNpY1Byb3BvcnRpb24gIT09IChmaXJzdC52YWx1ZSA9PT0gQkFDS0dST1VORF9TSVpFLkNPVkVSKVxyXG4gICAgICAgICAgICAgICAgPyBbYm91bmRzLndpZHRoLCBib3VuZHMud2lkdGggLyBpbnRyaW5zaWNQcm9wb3J0aW9uXVxyXG4gICAgICAgICAgICAgICAgOiBbYm91bmRzLmhlaWdodCAqIGludHJpbnNpY1Byb3BvcnRpb24sIGJvdW5kcy5oZWlnaHRdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFtib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHRdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhhc0ludHJpbnNpY1dpZHRoID0gaGFzSW50cmluc2ljVmFsdWUoaW50cmluc2ljV2lkdGgpO1xyXG4gICAgY29uc3QgaGFzSW50cmluc2ljSGVpZ2h0ID0gaGFzSW50cmluc2ljVmFsdWUoaW50cmluc2ljSGVpZ2h0KTtcclxuICAgIGNvbnN0IGhhc0ludHJpbnNpY0RpbWVuc2lvbnMgPSBoYXNJbnRyaW5zaWNXaWR0aCB8fCBoYXNJbnRyaW5zaWNIZWlnaHQ7XHJcblxyXG4gICAgLy8gSWYgdGhlIGJhY2tncm91bmQtc2l6ZSBpcyBhdXRvIG9yIGF1dG8gYXV0bzpcclxuICAgIGlmIChpc0F1dG8oZmlyc3QpICYmICghc2Vjb25kIHx8IGlzQXV0byhzZWNvbmQpKSkge1xyXG4gICAgICAgIC8vIElmIHRoZSBpbWFnZSBoYXMgYm90aCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBpbnRyaW5zaWMgZGltZW5zaW9ucywgaXQncyByZW5kZXJlZCBhdCB0aGF0IHNpemUuXHJcbiAgICAgICAgaWYgKGhhc0ludHJpbnNpY1dpZHRoICYmIGhhc0ludHJpbnNpY0hlaWdodCkge1xyXG4gICAgICAgICAgICByZXR1cm4gW2ludHJpbnNpY1dpZHRoIGFzIG51bWJlciwgaW50cmluc2ljSGVpZ2h0IGFzIG51bWJlcl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaGFzIG5vIGludHJpbnNpYyBkaW1lbnNpb25zIGFuZCBoYXMgbm8gaW50cmluc2ljIHByb3BvcnRpb25zLFxyXG4gICAgICAgIC8vIGl0J3MgcmVuZGVyZWQgYXQgdGhlIHNpemUgb2YgdGhlIGJhY2tncm91bmQgcG9zaXRpb25pbmcgYXJlYS5cclxuXHJcbiAgICAgICAgaWYgKCFoYXNJbnRyaW5zaWNQcm9wb3J0aW9uICYmICFoYXNJbnRyaW5zaWNEaW1lbnNpb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRPRE8gSWYgdGhlIGltYWdlIGhhcyBubyBpbnRyaW5zaWMgZGltZW5zaW9ucyBidXQgaGFzIGludHJpbnNpYyBwcm9wb3J0aW9ucywgaXQncyByZW5kZXJlZCBhcyBpZiBjb250YWluIGhhZCBiZWVuIHNwZWNpZmllZCBpbnN0ZWFkLlxyXG5cclxuICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaGFzIG9ubHkgb25lIGludHJpbnNpYyBkaW1lbnNpb24gYW5kIGhhcyBpbnRyaW5zaWMgcHJvcG9ydGlvbnMsIGl0J3MgcmVuZGVyZWQgYXQgdGhlIHNpemUgY29ycmVzcG9uZGluZyB0byB0aGF0IG9uZSBkaW1lbnNpb24uXHJcbiAgICAgICAgLy8gVGhlIG90aGVyIGRpbWVuc2lvbiBpcyBjb21wdXRlZCB1c2luZyB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbiBhbmQgdGhlIGludHJpbnNpYyBwcm9wb3J0aW9ucy5cclxuICAgICAgICBpZiAoaGFzSW50cmluc2ljRGltZW5zaW9ucyAmJiBoYXNJbnRyaW5zaWNQcm9wb3J0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gaGFzSW50cmluc2ljV2lkdGhcclxuICAgICAgICAgICAgICAgID8gKGludHJpbnNpY1dpZHRoIGFzIG51bWJlcilcclxuICAgICAgICAgICAgICAgIDogKGludHJpbnNpY0hlaWdodCBhcyBudW1iZXIpICogKGludHJpbnNpY1Byb3BvcnRpb24gYXMgbnVtYmVyKTtcclxuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gaGFzSW50cmluc2ljSGVpZ2h0XHJcbiAgICAgICAgICAgICAgICA/IChpbnRyaW5zaWNIZWlnaHQgYXMgbnVtYmVyKVxyXG4gICAgICAgICAgICAgICAgOiAoaW50cmluc2ljV2lkdGggYXMgbnVtYmVyKSAvIChpbnRyaW5zaWNQcm9wb3J0aW9uIGFzIG51bWJlcik7XHJcbiAgICAgICAgICAgIHJldHVybiBbd2lkdGgsIGhlaWdodF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaGFzIG9ubHkgb25lIGludHJpbnNpYyBkaW1lbnNpb24gYnV0IGhhcyBubyBpbnRyaW5zaWMgcHJvcG9ydGlvbnMsXHJcbiAgICAgICAgLy8gaXQncyByZW5kZXJlZCB1c2luZyB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbiBhbmQgdGhlIG90aGVyIGRpbWVuc2lvbiBvZiB0aGUgYmFja2dyb3VuZCBwb3NpdGlvbmluZyBhcmVhLlxyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gaGFzSW50cmluc2ljV2lkdGggPyAoaW50cmluc2ljV2lkdGggYXMgbnVtYmVyKSA6IGJvdW5kcy53aWR0aDtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSBoYXNJbnRyaW5zaWNIZWlnaHQgPyAoaW50cmluc2ljSGVpZ2h0IGFzIG51bWJlcikgOiBib3VuZHMuaGVpZ2h0O1xyXG4gICAgICAgIHJldHVybiBbd2lkdGgsIGhlaWdodF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgdGhlIGltYWdlIGhhcyBpbnRyaW5zaWMgcHJvcG9ydGlvbnMsIGl0J3Mgc3RyZXRjaGVkIHRvIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9uLlxyXG4gICAgLy8gVGhlIHVuc3BlY2lmaWVkIGRpbWVuc2lvbiBpcyBjb21wdXRlZCB1c2luZyB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbiBhbmQgdGhlIGludHJpbnNpYyBwcm9wb3J0aW9ucy5cclxuICAgIGlmIChoYXNJbnRyaW5zaWNQcm9wb3J0aW9uKSB7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gMDtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gMDtcclxuICAgICAgICBpZiAoaXNMZW5ndGhQZXJjZW50YWdlKGZpcnN0KSkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IGdldEFic29sdXRlVmFsdWUoZmlyc3QsIGJvdW5kcy53aWR0aCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0xlbmd0aFBlcmNlbnRhZ2Uoc2Vjb25kKSkge1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBnZXRBYnNvbHV0ZVZhbHVlKHNlY29uZCwgYm91bmRzLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNBdXRvKGZpcnN0KSkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IGhlaWdodCAqIChpbnRyaW5zaWNQcm9wb3J0aW9uIGFzIG51bWJlcik7XHJcbiAgICAgICAgfSBlbHNlIGlmICghc2Vjb25kIHx8IGlzQXV0byhzZWNvbmQpKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IHdpZHRoIC8gKGludHJpbnNpY1Byb3BvcnRpb24gYXMgbnVtYmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbd2lkdGgsIGhlaWdodF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgdGhlIGltYWdlIGhhcyBubyBpbnRyaW5zaWMgcHJvcG9ydGlvbnMsIGl0J3Mgc3RyZXRjaGVkIHRvIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9uLlxyXG4gICAgLy8gVGhlIHVuc3BlY2lmaWVkIGRpbWVuc2lvbiBpcyBjb21wdXRlZCB1c2luZyB0aGUgaW1hZ2UncyBjb3JyZXNwb25kaW5nIGludHJpbnNpYyBkaW1lbnNpb24sXHJcbiAgICAvLyBpZiB0aGVyZSBpcyBvbmUuIElmIHRoZXJlIGlzIG5vIHN1Y2ggaW50cmluc2ljIGRpbWVuc2lvbixcclxuICAgIC8vIGl0IGJlY29tZXMgdGhlIGNvcnJlc3BvbmRpbmcgZGltZW5zaW9uIG9mIHRoZSBiYWNrZ3JvdW5kIHBvc2l0aW9uaW5nIGFyZWEuXHJcblxyXG4gICAgbGV0IHdpZHRoID0gbnVsbDtcclxuICAgIGxldCBoZWlnaHQgPSBudWxsO1xyXG5cclxuICAgIGlmIChpc0xlbmd0aFBlcmNlbnRhZ2UoZmlyc3QpKSB7XHJcbiAgICAgICAgd2lkdGggPSBnZXRBYnNvbHV0ZVZhbHVlKGZpcnN0LCBib3VuZHMud2lkdGgpO1xyXG4gICAgfSBlbHNlIGlmIChzZWNvbmQgJiYgaXNMZW5ndGhQZXJjZW50YWdlKHNlY29uZCkpIHtcclxuICAgICAgICBoZWlnaHQgPSBnZXRBYnNvbHV0ZVZhbHVlKHNlY29uZCwgYm91bmRzLmhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpZHRoICE9PSBudWxsICYmICghc2Vjb25kIHx8IGlzQXV0byhzZWNvbmQpKSkge1xyXG4gICAgICAgIGhlaWdodCA9XHJcbiAgICAgICAgICAgIGhhc0ludHJpbnNpY1dpZHRoICYmIGhhc0ludHJpbnNpY0hlaWdodFxyXG4gICAgICAgICAgICAgICAgPyAod2lkdGggLyAoaW50cmluc2ljV2lkdGggYXMgbnVtYmVyKSkgKiAoaW50cmluc2ljSGVpZ2h0IGFzIG51bWJlcilcclxuICAgICAgICAgICAgICAgIDogYm91bmRzLmhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGVpZ2h0ICE9PSBudWxsICYmIGlzQXV0byhmaXJzdCkpIHtcclxuICAgICAgICB3aWR0aCA9XHJcbiAgICAgICAgICAgIGhhc0ludHJpbnNpY1dpZHRoICYmIGhhc0ludHJpbnNpY0hlaWdodFxyXG4gICAgICAgICAgICAgICAgPyAoaGVpZ2h0IC8gKGludHJpbnNpY0hlaWdodCBhcyBudW1iZXIpKSAqIChpbnRyaW5zaWNXaWR0aCBhcyBudW1iZXIpXHJcbiAgICAgICAgICAgICAgICA6IGJvdW5kcy53aWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2lkdGggIT09IG51bGwgJiYgaGVpZ2h0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIFt3aWR0aCwgaGVpZ2h0XTtcclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjYWxjdWxhdGUgYmFja2dyb3VuZC1zaXplIGZvciBlbGVtZW50YCk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0QmFja2dyb3VuZFZhbHVlRm9ySW5kZXggPSA8VD4odmFsdWVzOiBUW10sIGluZGV4OiBudW1iZXIpOiBUID0+IHtcclxuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2luZGV4XTtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlc1swXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQmFja2dyb3VuZFJlcGVhdFBhdGggPSAoXHJcbiAgICByZXBlYXQ6IEJBQ0tHUk9VTkRfUkVQRUFULFxyXG4gICAgW3gsIHldOiBbbnVtYmVyLCBudW1iZXJdLFxyXG4gICAgW3dpZHRoLCBoZWlnaHRdOiBbbnVtYmVyLCBudW1iZXJdLFxyXG4gICAgYmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYTogQm91bmRzLFxyXG4gICAgYmFja2dyb3VuZFBhaW50aW5nQXJlYTogQm91bmRzXHJcbik6IFtWZWN0b3IsIFZlY3RvciwgVmVjdG9yLCBWZWN0b3JdID0+IHtcclxuICAgIHN3aXRjaCAocmVwZWF0KSB7XHJcbiAgICAgICAgY2FzZSBCQUNLR1JPVU5EX1JFUEVBVC5SRVBFQVRfWDpcclxuICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoTWF0aC5yb3VuZChiYWNrZ3JvdW5kUG9zaXRpb25pbmdBcmVhLmxlZnQpLCBNYXRoLnJvdW5kKGJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEudG9wICsgeSkpLFxyXG4gICAgICAgICAgICAgICAgbmV3IFZlY3RvcihcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEubGVmdCArIGJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEud2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoYmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYS50b3AgKyB5KVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChiYWNrZ3JvdW5kUG9zaXRpb25pbmdBcmVhLmxlZnQgKyBiYWNrZ3JvdW5kUG9zaXRpb25pbmdBcmVhLndpZHRoKSxcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGhlaWdodCArIGJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEudG9wICsgeSlcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoYmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYS5sZWZ0KSxcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGhlaWdodCArIGJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEudG9wICsgeSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICBjYXNlIEJBQ0tHUk9VTkRfUkVQRUFULlJFUEVBVF9ZOlxyXG4gICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgbmV3IFZlY3RvcihNYXRoLnJvdW5kKGJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEubGVmdCArIHgpLCBNYXRoLnJvdW5kKGJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEudG9wKSksXHJcbiAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoYmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYS5sZWZ0ICsgeCArIHdpZHRoKSxcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEudG9wKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChiYWNrZ3JvdW5kUG9zaXRpb25pbmdBcmVhLmxlZnQgKyB4ICsgd2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoYmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYS5oZWlnaHQgKyBiYWNrZ3JvdW5kUG9zaXRpb25pbmdBcmVhLnRvcClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoYmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYS5sZWZ0ICsgeCksXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChiYWNrZ3JvdW5kUG9zaXRpb25pbmdBcmVhLmhlaWdodCArIGJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEudG9wKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgIGNhc2UgQkFDS0dST1VORF9SRVBFQVQuTk9fUkVQRUFUOlxyXG4gICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgbmV3IFZlY3RvcihcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEubGVmdCArIHgpLFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoYmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYS50b3AgKyB5KVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChiYWNrZ3JvdW5kUG9zaXRpb25pbmdBcmVhLmxlZnQgKyB4ICsgd2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoYmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYS50b3AgKyB5KVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChiYWNrZ3JvdW5kUG9zaXRpb25pbmdBcmVhLmxlZnQgKyB4ICsgd2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQoYmFja2dyb3VuZFBvc2l0aW9uaW5nQXJlYS50b3AgKyB5ICsgaGVpZ2h0KVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChiYWNrZ3JvdW5kUG9zaXRpb25pbmdBcmVhLmxlZnQgKyB4KSxcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGJhY2tncm91bmRQb3NpdGlvbmluZ0FyZWEudG9wICsgeSArIGhlaWdodClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgbmV3IFZlY3RvcihNYXRoLnJvdW5kKGJhY2tncm91bmRQYWludGluZ0FyZWEubGVmdCksIE1hdGgucm91bmQoYmFja2dyb3VuZFBhaW50aW5nQXJlYS50b3ApKSxcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChiYWNrZ3JvdW5kUGFpbnRpbmdBcmVhLmxlZnQgKyBiYWNrZ3JvdW5kUGFpbnRpbmdBcmVhLndpZHRoKSxcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGJhY2tncm91bmRQYWludGluZ0FyZWEudG9wKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChiYWNrZ3JvdW5kUGFpbnRpbmdBcmVhLmxlZnQgKyBiYWNrZ3JvdW5kUGFpbnRpbmdBcmVhLndpZHRoKSxcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGJhY2tncm91bmRQYWludGluZ0FyZWEuaGVpZ2h0ICsgYmFja2dyb3VuZFBhaW50aW5nQXJlYS50b3ApXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgbmV3IFZlY3RvcihcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGJhY2tncm91bmRQYWludGluZ0FyZWEubGVmdCksXHJcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChiYWNrZ3JvdW5kUGFpbnRpbmdBcmVhLmhlaWdodCArIGJhY2tncm91bmRQYWludGluZ0FyZWEudG9wKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgfVxyXG59O1xyXG4iLCJleHBvcnQgY29uc3QgU01BTExfSU1BR0UgPSAnZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3JztcclxuIiwiaW1wb3J0IHtTTUFMTF9JTUFHRX0gZnJvbSAnLi4vY29yZS91dGlsJztcclxuZXhwb3J0IGludGVyZmFjZSBGb250TWV0cmljIHtcclxuICAgIGJhc2VsaW5lOiBudW1iZXI7XHJcbiAgICBtaWRkbGU6IG51bWJlcjtcclxufVxyXG5cclxuY29uc3QgU0FNUExFX1RFWFQgPSAnSGlkZGVuIFRleHQnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZvbnRNZXRyaWNzIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RhdGE6IHtba2V5OiBzdHJpbmddOiBGb250TWV0cmljfTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50OiBEb2N1bWVudDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudDogRG9jdW1lbnQpIHtcclxuICAgICAgICB0aGlzLl9kYXRhID0ge307XHJcbiAgICAgICAgdGhpcy5fZG9jdW1lbnQgPSBkb2N1bWVudDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBhcnNlTWV0cmljcyhmb250RmFtaWx5OiBzdHJpbmcsIGZvbnRTaXplOiBzdHJpbmcpOiBGb250TWV0cmljIHtcclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBjb25zdCBpbWcgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICAgICAgICBjb25zdCBzcGFuID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG5cclxuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5fZG9jdW1lbnQuYm9keSBhcyBIVE1MQm9keUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLmZvbnRGYW1pbHkgPSBmb250RmFtaWx5O1xyXG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5mb250U2l6ZSA9IGZvbnRTaXplO1xyXG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5tYXJnaW4gPSAnMCc7XHJcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLnBhZGRpbmcgPSAnMCc7XHJcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcclxuXHJcbiAgICAgICAgYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xyXG5cclxuICAgICAgICBpbWcuc3JjID0gU01BTExfSU1BR0U7XHJcbiAgICAgICAgaW1nLndpZHRoID0gMTtcclxuICAgICAgICBpbWcuaGVpZ2h0ID0gMTtcclxuXHJcbiAgICAgICAgaW1nLnN0eWxlLm1hcmdpbiA9ICcwJztcclxuICAgICAgICBpbWcuc3R5bGUucGFkZGluZyA9ICcwJztcclxuICAgICAgICBpbWcuc3R5bGUudmVydGljYWxBbGlnbiA9ICdiYXNlbGluZSc7XHJcblxyXG4gICAgICAgIHNwYW4uc3R5bGUuZm9udEZhbWlseSA9IGZvbnRGYW1pbHk7XHJcbiAgICAgICAgc3Bhbi5zdHlsZS5mb250U2l6ZSA9IGZvbnRTaXplO1xyXG4gICAgICAgIHNwYW4uc3R5bGUubWFyZ2luID0gJzAnO1xyXG4gICAgICAgIHNwYW4uc3R5bGUucGFkZGluZyA9ICcwJztcclxuXHJcbiAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZCh0aGlzLl9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTQU1QTEVfVEVYVCkpO1xyXG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzcGFuKTtcclxuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaW1nKTtcclxuICAgICAgICBjb25zdCBiYXNlbGluZSA9IGltZy5vZmZzZXRUb3AgLSBzcGFuLm9mZnNldFRvcCArIDI7XHJcblxyXG4gICAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChzcGFuKTtcclxuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU0FNUExFX1RFWFQpKTtcclxuXHJcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLmxpbmVIZWlnaHQgPSAnbm9ybWFsJztcclxuICAgICAgICBpbWcuc3R5bGUudmVydGljYWxBbGlnbiA9ICdzdXBlcic7XHJcblxyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IGltZy5vZmZzZXRUb3AgLSBjb250YWluZXIub2Zmc2V0VG9wICsgMjtcclxuXHJcbiAgICAgICAgYm9keS5yZW1vdmVDaGlsZChjb250YWluZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4ge2Jhc2VsaW5lLCBtaWRkbGV9O1xyXG4gICAgfVxyXG4gICAgZ2V0TWV0cmljcyhmb250RmFtaWx5OiBzdHJpbmcsIGZvbnRTaXplOiBzdHJpbmcpOiBGb250TWV0cmljIHtcclxuICAgICAgICBjb25zdCBrZXkgPSBgJHtmb250RmFtaWx5fSAke2ZvbnRTaXplfWA7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9kYXRhW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RhdGFba2V5XSA9IHRoaXMucGFyc2VNZXRyaWNzKGZvbnRGYW1pbHksIGZvbnRTaXplKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhW2tleV07XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb250ZXh0fSBmcm9tICcuLi9jb3JlL2NvbnRleHQnO1xyXG5pbXBvcnQge1JlbmRlckNvbmZpZ3VyYXRpb25zfSBmcm9tICcuL2NhbnZhcy9jYW52YXMtcmVuZGVyZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlbmRlcmVyIHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBjb250ZXh0OiBDb250ZXh0LCBwcm90ZWN0ZWQgcmVhZG9ubHkgb3B0aW9uczogUmVuZGVyQ29uZmlndXJhdGlvbnMpIHt9XHJcbn1cclxuIiwiaW1wb3J0IHtFbGVtZW50UGFpbnQsIHBhcnNlU3RhY2tpbmdDb250ZXh0cywgU3RhY2tpbmdDb250ZXh0fSBmcm9tICcuLi9zdGFja2luZy1jb250ZXh0JztcclxuaW1wb3J0IHthc1N0cmluZywgQ29sb3IsIGlzVHJhbnNwYXJlbnR9IGZyb20gJy4uLy4uL2Nzcy90eXBlcy9jb2xvcic7XHJcbmltcG9ydCB7RWxlbWVudENvbnRhaW5lciwgRkxBR1N9IGZyb20gJy4uLy4uL2RvbS9lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7Qk9SREVSX1NUWUxFfSBmcm9tICcuLi8uLi9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvYm9yZGVyLXN0eWxlJztcclxuaW1wb3J0IHtDU1NQYXJzZWREZWNsYXJhdGlvbn0gZnJvbSAnLi4vLi4vY3NzJztcclxuaW1wb3J0IHtUZXh0Q29udGFpbmVyfSBmcm9tICcuLi8uLi9kb20vdGV4dC1jb250YWluZXInO1xyXG5pbXBvcnQge1BhdGgsIHRyYW5zZm9ybVBhdGh9IGZyb20gJy4uL3BhdGgnO1xyXG5pbXBvcnQge0JBQ0tHUk9VTkRfQ0xJUH0gZnJvbSAnLi4vLi4vY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2JhY2tncm91bmQtY2xpcCc7XHJcbmltcG9ydCB7Qm91bmRDdXJ2ZXMsIGNhbGN1bGF0ZUJvcmRlckJveFBhdGgsIGNhbGN1bGF0ZUNvbnRlbnRCb3hQYXRoLCBjYWxjdWxhdGVQYWRkaW5nQm94UGF0aH0gZnJvbSAnLi4vYm91bmQtY3VydmVzJztcclxuaW1wb3J0IHtCZXppZXJDdXJ2ZSwgaXNCZXppZXJDdXJ2ZX0gZnJvbSAnLi4vYmV6aWVyLWN1cnZlJztcclxuaW1wb3J0IHtWZWN0b3J9IGZyb20gJy4uL3ZlY3Rvcic7XHJcbmltcG9ydCB7Q1NTSW1hZ2VUeXBlLCBDU1NVUkxJbWFnZSwgaXNMaW5lYXJHcmFkaWVudCwgaXNSYWRpYWxHcmFkaWVudH0gZnJvbSAnLi4vLi4vY3NzL3R5cGVzL2ltYWdlJztcclxuaW1wb3J0IHtcclxuICAgIHBhcnNlUGF0aEZvckJvcmRlcixcclxuICAgIHBhcnNlUGF0aEZvckJvcmRlckRvdWJsZUlubmVyLFxyXG4gICAgcGFyc2VQYXRoRm9yQm9yZGVyRG91YmxlT3V0ZXIsXHJcbiAgICBwYXJzZVBhdGhGb3JCb3JkZXJTdHJva2VcclxufSBmcm9tICcuLi9ib3JkZXInO1xyXG5pbXBvcnQge2NhbGN1bGF0ZUJhY2tncm91bmRSZW5kZXJpbmcsIGdldEJhY2tncm91bmRWYWx1ZUZvckluZGV4fSBmcm9tICcuLi9iYWNrZ3JvdW5kJztcclxuaW1wb3J0IHtpc0RpbWVuc2lvblRva2VufSBmcm9tICcuLi8uLi9jc3Mvc3ludGF4L3BhcnNlcic7XHJcbmltcG9ydCB7c2VnbWVudEdyYXBoZW1lcywgVGV4dEJvdW5kc30gZnJvbSAnLi4vLi4vY3NzL2xheW91dC90ZXh0JztcclxuaW1wb3J0IHtJbWFnZUVsZW1lbnRDb250YWluZXJ9IGZyb20gJy4uLy4uL2RvbS9yZXBsYWNlZC1lbGVtZW50cy9pbWFnZS1lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7Y29udGVudEJveH0gZnJvbSAnLi4vYm94LXNpemluZyc7XHJcbmltcG9ydCB7Q2FudmFzRWxlbWVudENvbnRhaW5lcn0gZnJvbSAnLi4vLi4vZG9tL3JlcGxhY2VkLWVsZW1lbnRzL2NhbnZhcy1lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7U1ZHRWxlbWVudENvbnRhaW5lcn0gZnJvbSAnLi4vLi4vZG9tL3JlcGxhY2VkLWVsZW1lbnRzL3N2Zy1lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7UmVwbGFjZWRFbGVtZW50Q29udGFpbmVyfSBmcm9tICcuLi8uLi9kb20vcmVwbGFjZWQtZWxlbWVudHMnO1xyXG5pbXBvcnQge0VmZmVjdFRhcmdldCwgSUVsZW1lbnRFZmZlY3QsIGlzQ2xpcEVmZmVjdCwgaXNPcGFjaXR5RWZmZWN0LCBpc1RyYW5zZm9ybUVmZmVjdH0gZnJvbSAnLi4vZWZmZWN0cyc7XHJcbmltcG9ydCB7Y29udGFpbnN9IGZyb20gJy4uLy4uL2NvcmUvYml0d2lzZSc7XHJcbmltcG9ydCB7Y2FsY3VsYXRlR3JhZGllbnREaXJlY3Rpb24sIGNhbGN1bGF0ZVJhZGl1cywgcHJvY2Vzc0NvbG9yU3RvcHN9IGZyb20gJy4uLy4uL2Nzcy90eXBlcy9mdW5jdGlvbnMvZ3JhZGllbnQnO1xyXG5pbXBvcnQge0ZJRlRZX1BFUkNFTlQsIGdldEFic29sdXRlVmFsdWV9IGZyb20gJy4uLy4uL2Nzcy90eXBlcy9sZW5ndGgtcGVyY2VudGFnZSc7XHJcbmltcG9ydCB7VEVYVF9ERUNPUkFUSU9OX0xJTkV9IGZyb20gJy4uLy4uL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy90ZXh0LWRlY29yYXRpb24tbGluZSc7XHJcbmltcG9ydCB7Rm9udE1ldHJpY3N9IGZyb20gJy4uL2ZvbnQtbWV0cmljcyc7XHJcbmltcG9ydCB7RElTUExBWX0gZnJvbSAnLi4vLi4vY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2Rpc3BsYXknO1xyXG5pbXBvcnQge0JvdW5kc30gZnJvbSAnLi4vLi4vY3NzL2xheW91dC9ib3VuZHMnO1xyXG5pbXBvcnQge0xJU1RfU1RZTEVfVFlQRX0gZnJvbSAnLi4vLi4vY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL2xpc3Qtc3R5bGUtdHlwZSc7XHJcbmltcG9ydCB7Y29tcHV0ZUxpbmVIZWlnaHR9IGZyb20gJy4uLy4uL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy9saW5lLWhlaWdodCc7XHJcbmltcG9ydCB7Q0hFQ0tCT1gsIElOUFVUX0NPTE9SLCBJbnB1dEVsZW1lbnRDb250YWluZXIsIFJBRElPfSBmcm9tICcuLi8uLi9kb20vcmVwbGFjZWQtZWxlbWVudHMvaW5wdXQtZWxlbWVudC1jb250YWluZXInO1xyXG5pbXBvcnQge1RFWFRfQUxJR059IGZyb20gJy4uLy4uL2Nzcy9wcm9wZXJ0eS1kZXNjcmlwdG9ycy90ZXh0LWFsaWduJztcclxuaW1wb3J0IHtUZXh0YXJlYUVsZW1lbnRDb250YWluZXJ9IGZyb20gJy4uLy4uL2RvbS9lbGVtZW50cy90ZXh0YXJlYS1lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7U2VsZWN0RWxlbWVudENvbnRhaW5lcn0gZnJvbSAnLi4vLi4vZG9tL2VsZW1lbnRzL3NlbGVjdC1lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7SUZyYW1lRWxlbWVudENvbnRhaW5lcn0gZnJvbSAnLi4vLi4vZG9tL3JlcGxhY2VkLWVsZW1lbnRzL2lmcmFtZS1lbGVtZW50LWNvbnRhaW5lcic7XHJcbmltcG9ydCB7VGV4dFNoYWRvd30gZnJvbSAnLi4vLi4vY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3RleHQtc2hhZG93JztcclxuaW1wb3J0IHtQQUlOVF9PUkRFUl9MQVlFUn0gZnJvbSAnLi4vLi4vY3NzL3Byb3BlcnR5LWRlc2NyaXB0b3JzL3BhaW50LW9yZGVyJztcclxuaW1wb3J0IHtSZW5kZXJlcn0gZnJvbSAnLi4vcmVuZGVyZXInO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcbmltcG9ydCB7RElSRUNUSU9OfSBmcm9tICcuLi8uLi9jc3MvcHJvcGVydHktZGVzY3JpcHRvcnMvZGlyZWN0aW9uJztcclxuXHJcbmV4cG9ydCB0eXBlIFJlbmRlckNvbmZpZ3VyYXRpb25zID0gUmVuZGVyT3B0aW9ucyAmIHtcclxuICAgIGJhY2tncm91bmRDb2xvcjogQ29sb3IgfCBudWxsO1xyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJPcHRpb25zIHtcclxuICAgIHNjYWxlOiBudW1iZXI7XHJcbiAgICBjYW52YXM/OiBIVE1MQ2FudmFzRWxlbWVudDtcclxuICAgIHg6IG51bWJlcjtcclxuICAgIHk6IG51bWJlcjtcclxuICAgIHdpZHRoOiBudW1iZXI7XHJcbiAgICBoZWlnaHQ6IG51bWJlcjtcclxufVxyXG5cclxuY29uc3QgTUFTS19PRkZTRVQgPSAxMDAwMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBDYW52YXNSZW5kZXJlciBleHRlbmRzIFJlbmRlcmVyIHtcclxuICAgIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XHJcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZUVmZmVjdHM6IElFbGVtZW50RWZmZWN0W10gPSBbXTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9udE1ldHJpY3M6IEZvbnRNZXRyaWNzO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIG9wdGlvbnM6IFJlbmRlckNvbmZpZ3VyYXRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIoY29udGV4dCwgb3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSBvcHRpb25zLmNhbnZhcyA/IG9wdGlvbnMuY2FudmFzIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcclxuICAgICAgICBpZiAoIW9wdGlvbnMuY2FudmFzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gTWF0aC5mbG9vcihvcHRpb25zLndpZHRoICogb3B0aW9ucy5zY2FsZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IE1hdGguZmxvb3Iob3B0aW9ucy5oZWlnaHQgKiBvcHRpb25zLnNjYWxlKTtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSBgJHtvcHRpb25zLndpZHRofXB4YDtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7b3B0aW9ucy5oZWlnaHR9cHhgO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvbnRNZXRyaWNzID0gbmV3IEZvbnRNZXRyaWNzKGRvY3VtZW50KTtcclxuICAgICAgICB0aGlzLmN0eC5zY2FsZSh0aGlzLm9wdGlvbnMuc2NhbGUsIHRoaXMub3B0aW9ucy5zY2FsZSk7XHJcbiAgICAgICAgdGhpcy5jdHgudHJhbnNsYXRlKC1vcHRpb25zLngsIC1vcHRpb25zLnkpO1xyXG4gICAgICAgIHRoaXMuY3R4LnRleHRCYXNlbGluZSA9ICdib3R0b20nO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZUVmZmVjdHMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbnRleHQubG9nZ2VyLmRlYnVnKFxyXG4gICAgICAgICAgICBgQ2FudmFzIHJlbmRlcmVyIGluaXRpYWxpemVkICgke29wdGlvbnMud2lkdGh9eCR7b3B0aW9ucy5oZWlnaHR9KSB3aXRoIHNjYWxlICR7b3B0aW9ucy5zY2FsZX1gXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUVmZmVjdHMoZWZmZWN0czogSUVsZW1lbnRFZmZlY3RbXSk6IHZvaWQge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLl9hY3RpdmVFZmZlY3RzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnBvcEVmZmVjdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWZmZWN0cy5mb3JFYWNoKChlZmZlY3QpID0+IHRoaXMuYXBwbHlFZmZlY3QoZWZmZWN0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlFZmZlY3QoZWZmZWN0OiBJRWxlbWVudEVmZmVjdCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcclxuICAgICAgICBpZiAoaXNPcGFjaXR5RWZmZWN0KGVmZmVjdCkpIHtcclxuICAgICAgICAgICAgdGhpcy5jdHguZ2xvYmFsQWxwaGEgPSBlZmZlY3Qub3BhY2l0eTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc1RyYW5zZm9ybUVmZmVjdChlZmZlY3QpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zbGF0ZShlZmZlY3Qub2Zmc2V0WCwgZWZmZWN0Lm9mZnNldFkpO1xyXG4gICAgICAgICAgICB0aGlzLmN0eC50cmFuc2Zvcm0oXHJcbiAgICAgICAgICAgICAgICBlZmZlY3QubWF0cml4WzBdLFxyXG4gICAgICAgICAgICAgICAgZWZmZWN0Lm1hdHJpeFsxXSxcclxuICAgICAgICAgICAgICAgIGVmZmVjdC5tYXRyaXhbMl0sXHJcbiAgICAgICAgICAgICAgICBlZmZlY3QubWF0cml4WzNdLFxyXG4gICAgICAgICAgICAgICAgZWZmZWN0Lm1hdHJpeFs0XSxcclxuICAgICAgICAgICAgICAgIGVmZmVjdC5tYXRyaXhbNV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5jdHgudHJhbnNsYXRlKC1lZmZlY3Qub2Zmc2V0WCwgLWVmZmVjdC5vZmZzZXRZKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0NsaXBFZmZlY3QoZWZmZWN0KSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhdGgoZWZmZWN0LnBhdGgpO1xyXG4gICAgICAgICAgICB0aGlzLmN0eC5jbGlwKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9hY3RpdmVFZmZlY3RzLnB1c2goZWZmZWN0KTtcclxuICAgIH1cclxuXHJcbiAgICBwb3BFZmZlY3QoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlRWZmZWN0cy5wb3AoKTtcclxuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVuZGVyU3RhY2soc3RhY2s6IFN0YWNraW5nQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IHN0YWNrLmVsZW1lbnQuY29udGFpbmVyLnN0eWxlcztcclxuICAgICAgICBpZiAoc3R5bGVzLmlzVmlzaWJsZSgpKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyU3RhY2tDb250ZW50KHN0YWNrKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVuZGVyTm9kZShwYWludDogRWxlbWVudFBhaW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKGNvbnRhaW5zKHBhaW50LmNvbnRhaW5lci5mbGFncywgRkxBR1MuREVCVUdfUkVOREVSKSkge1xyXG4gICAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYWludC5jb250YWluZXIuc3R5bGVzLmlzVmlzaWJsZSgpKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyTm9kZUJhY2tncm91bmRBbmRCb3JkZXJzKHBhaW50KTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJOb2RlQ29udGVudChwYWludCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlclRleHRXaXRoTGV0dGVyU3BhY2luZyh0ZXh0OiBUZXh0Qm91bmRzLCBsZXR0ZXJTcGFjaW5nOiBudW1iZXIsIGJhc2VsaW5lOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAobGV0dGVyU3BhY2luZyA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsVGV4dCh0ZXh0LnRleHQsIHRleHQuYm91bmRzLmxlZnQsIHRleHQuYm91bmRzLnRvcCArIGJhc2VsaW5lKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBsZXR0ZXJzID0gc2VnbWVudEdyYXBoZW1lcyh0ZXh0LnRleHQpO1xyXG4gICAgICAgICAgICBsZXR0ZXJzLnJlZHVjZSgobGVmdCwgbGV0dGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsVGV4dChsZXR0ZXIsIGxlZnQsIHRleHQuYm91bmRzLnRvcCArIGJhc2VsaW5lKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCArIHRoaXMuY3R4Lm1lYXN1cmVUZXh0KGxldHRlcikud2lkdGg7XHJcbiAgICAgICAgICAgIH0sIHRleHQuYm91bmRzLmxlZnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZUZvbnRTdHlsZShzdHlsZXM6IENTU1BhcnNlZERlY2xhcmF0aW9uKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGNvbnN0IGZvbnRWYXJpYW50ID0gc3R5bGVzLmZvbnRWYXJpYW50XHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhcmlhbnQpID0+IHZhcmlhbnQgPT09ICdub3JtYWwnIHx8IHZhcmlhbnQgPT09ICdzbWFsbC1jYXBzJylcclxuICAgICAgICAgICAgLmpvaW4oJycpO1xyXG4gICAgICAgIGNvbnN0IGZvbnRGYW1pbHkgPSBmaXhJT1NTeXN0ZW1Gb250cyhzdHlsZXMuZm9udEZhbWlseSkuam9pbignLCAnKTtcclxuICAgICAgICBjb25zdCBmb250U2l6ZSA9IGlzRGltZW5zaW9uVG9rZW4oc3R5bGVzLmZvbnRTaXplKVxyXG4gICAgICAgICAgICA/IGAke3N0eWxlcy5mb250U2l6ZS5udW1iZXJ9JHtzdHlsZXMuZm9udFNpemUudW5pdH1gXHJcbiAgICAgICAgICAgIDogYCR7c3R5bGVzLmZvbnRTaXplLm51bWJlcn1weGA7XHJcblxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIFtzdHlsZXMuZm9udFN0eWxlLCBmb250VmFyaWFudCwgc3R5bGVzLmZvbnRXZWlnaHQsIGZvbnRTaXplLCBmb250RmFtaWx5XS5qb2luKCcgJyksXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHksXHJcbiAgICAgICAgICAgIGZvbnRTaXplXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW5kZXJUZXh0Tm9kZSh0ZXh0OiBUZXh0Q29udGFpbmVyLCBzdHlsZXM6IENTU1BhcnNlZERlY2xhcmF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgW2ZvbnQsIGZvbnRGYW1pbHksIGZvbnRTaXplXSA9IHRoaXMuY3JlYXRlRm9udFN0eWxlKHN0eWxlcyk7XHJcblxyXG4gICAgICAgIHRoaXMuY3R4LmZvbnQgPSBmb250O1xyXG5cclxuICAgICAgICB0aGlzLmN0eC5kaXJlY3Rpb24gPSBzdHlsZXMuZGlyZWN0aW9uID09PSBESVJFQ1RJT04uUlRMID8gJ3J0bCcgOiAnbHRyJztcclxuICAgICAgICB0aGlzLmN0eC50ZXh0QWxpZ24gPSAnbGVmdCc7XHJcbiAgICAgICAgdGhpcy5jdHgudGV4dEJhc2VsaW5lID0gJ2FscGhhYmV0aWMnO1xyXG4gICAgICAgIGNvbnN0IHtiYXNlbGluZSwgbWlkZGxlfSA9IHRoaXMuZm9udE1ldHJpY3MuZ2V0TWV0cmljcyhmb250RmFtaWx5LCBmb250U2l6ZSk7XHJcbiAgICAgICAgY29uc3QgcGFpbnRPcmRlciA9IHN0eWxlcy5wYWludE9yZGVyO1xyXG5cclxuICAgICAgICB0ZXh0LnRleHRCb3VuZHMuZm9yRWFjaCgodGV4dCkgPT4ge1xyXG4gICAgICAgICAgICBwYWludE9yZGVyLmZvckVhY2goKHBhaW50T3JkZXJMYXllcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChwYWludE9yZGVyTGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBBSU5UX09SREVSX0xBWUVSLkZJTEw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGFzU3RyaW5nKHN0eWxlcy5jb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVGV4dFdpdGhMZXR0ZXJTcGFjaW5nKHRleHQsIHN0eWxlcy5sZXR0ZXJTcGFjaW5nLCBiYXNlbGluZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRTaGFkb3dzOiBUZXh0U2hhZG93ID0gc3R5bGVzLnRleHRTaGFkb3c7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dFNoYWRvd3MubGVuZ3RoICYmIHRleHQudGV4dC50cmltKCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U2hhZG93c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgodGV4dFNoYWRvdykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zaGFkb3dDb2xvciA9IGFzU3RyaW5nKHRleHRTaGFkb3cuY29sb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zaGFkb3dPZmZzZXRYID0gdGV4dFNoYWRvdy5vZmZzZXRYLm51bWJlciAqIHRoaXMub3B0aW9ucy5zY2FsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2hhZG93T2Zmc2V0WSA9IHRleHRTaGFkb3cub2Zmc2V0WS5udW1iZXIgKiB0aGlzLm9wdGlvbnMuc2NhbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNoYWRvd0JsdXIgPSB0ZXh0U2hhZG93LmJsdXIubnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUZXh0V2l0aExldHRlclNwYWNpbmcodGV4dCwgc3R5bGVzLmxldHRlclNwYWNpbmcsIGJhc2VsaW5lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zaGFkb3dDb2xvciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2hhZG93T2Zmc2V0WCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zaGFkb3dPZmZzZXRZID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNoYWRvd0JsdXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGVzLnRleHREZWNvcmF0aW9uTGluZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGFzU3RyaW5nKHN0eWxlcy50ZXh0RGVjb3JhdGlvbkNvbG9yIHx8IHN0eWxlcy5jb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXMudGV4dERlY29yYXRpb25MaW5lLmZvckVhY2goKHRleHREZWNvcmF0aW9uTGluZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGV4dERlY29yYXRpb25MaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVEVYVF9ERUNPUkFUSU9OX0xJTkUuVU5ERVJMSU5FOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRHJhd3MgYSBsaW5lIGF0IHRoZSBiYXNlbGluZSBvZiB0aGUgZm9udFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBBcyBzb21lIGJyb3dzZXJzIGRpc3BsYXkgdGhlIGxpbmUgYXMgbW9yZSB0aGFuIDFweCBpZiB0aGUgZm9udC1zaXplIGlzIGJpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gdGFrZSB0aGF0IGludG8gYWNjb3VudCBib3RoIGluIHBvc2l0aW9uIGFuZCBzaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsUmVjdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmJvdW5kcy5sZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQodGV4dC5ib3VuZHMudG9wICsgYmFzZWxpbmUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuYm91bmRzLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVEVYVF9ERUNPUkFUSU9OX0xJTkUuT1ZFUkxJTkU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsUmVjdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmJvdW5kcy5sZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQodGV4dC5ib3VuZHMudG9wKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmJvdW5kcy53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVEVYVF9ERUNPUkFUSU9OX0xJTkUuTElORV9USFJPVUdIOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyB0cnkgYW5kIGZpbmQgZXhhY3QgcG9zaXRpb24gZm9yIGxpbmUtdGhyb3VnaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguZmlsbFJlY3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5ib3VuZHMubGVmdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmNlaWwodGV4dC5ib3VuZHMudG9wICsgbWlkZGxlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmJvdW5kcy53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQQUlOVF9PUkRFUl9MQVlFUi5TVFJPS0U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZXMud2Via2l0VGV4dFN0cm9rZVdpZHRoICYmIHRleHQudGV4dC50cmltKCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9IGFzU3RyaW5nKHN0eWxlcy53ZWJraXRUZXh0U3Ryb2tlQ29sb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gc3R5bGVzLndlYmtpdFRleHRTdHJva2VXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lSm9pbiA9ICEhKHdpbmRvdyBhcyBhbnkpLmNocm9tZSA/ICdtaXRlcicgOiAncm91bmQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlVGV4dCh0ZXh0LnRleHQsIHRleHQuYm91bmRzLmxlZnQsIHRleHQuYm91bmRzLnRvcCArIGJhc2VsaW5lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lSm9pbiA9ICdtaXRlcic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJSZXBsYWNlZEVsZW1lbnQoXHJcbiAgICAgICAgY29udGFpbmVyOiBSZXBsYWNlZEVsZW1lbnRDb250YWluZXIsXHJcbiAgICAgICAgY3VydmVzOiBCb3VuZEN1cnZlcyxcclxuICAgICAgICBpbWFnZTogSFRNTEltYWdlRWxlbWVudCB8IEhUTUxDYW52YXNFbGVtZW50XHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBpZiAoaW1hZ2UgJiYgY29udGFpbmVyLmludHJpbnNpY1dpZHRoID4gMCAmJiBjb250YWluZXIuaW50cmluc2ljSGVpZ2h0ID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBib3ggPSBjb250ZW50Qm94KGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBjYWxjdWxhdGVQYWRkaW5nQm94UGF0aChjdXJ2ZXMpO1xyXG4gICAgICAgICAgICB0aGlzLnBhdGgocGF0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcclxuICAgICAgICAgICAgdGhpcy5jdHguY2xpcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoXHJcbiAgICAgICAgICAgICAgICBpbWFnZSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmludHJpbnNpY1dpZHRoLFxyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmludHJpbnNpY0hlaWdodCxcclxuICAgICAgICAgICAgICAgIGJveC5sZWZ0LFxyXG4gICAgICAgICAgICAgICAgYm94LnRvcCxcclxuICAgICAgICAgICAgICAgIGJveC53aWR0aCxcclxuICAgICAgICAgICAgICAgIGJveC5oZWlnaHRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW5kZXJOb2RlQ29udGVudChwYWludDogRWxlbWVudFBhaW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5hcHBseUVmZmVjdHMocGFpbnQuZ2V0RWZmZWN0cyhFZmZlY3RUYXJnZXQuQ09OVEVOVCkpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHBhaW50LmNvbnRhaW5lcjtcclxuICAgICAgICBjb25zdCBjdXJ2ZXMgPSBwYWludC5jdXJ2ZXM7XHJcbiAgICAgICAgY29uc3Qgc3R5bGVzID0gY29udGFpbmVyLnN0eWxlcztcclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNvbnRhaW5lci50ZXh0Tm9kZXMpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJUZXh0Tm9kZShjaGlsZCwgc3R5bGVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBJbWFnZUVsZW1lbnRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgdGhpcy5jb250ZXh0LmNhY2hlLm1hdGNoKGNvbnRhaW5lci5zcmMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlZEVsZW1lbnQoY29udGFpbmVyLCBjdXJ2ZXMsIGltYWdlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmxvZ2dlci5lcnJvcihgRXJyb3IgbG9hZGluZyBpbWFnZSAke2NvbnRhaW5lci5zcmN9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBDYW52YXNFbGVtZW50Q29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyUmVwbGFjZWRFbGVtZW50KGNvbnRhaW5lciwgY3VydmVzLCBjb250YWluZXIuY2FudmFzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBTVkdFbGVtZW50Q29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuY29udGV4dC5jYWNoZS5tYXRjaChjb250YWluZXIuc3ZnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUmVwbGFjZWRFbGVtZW50KGNvbnRhaW5lciwgY3VydmVzLCBpbWFnZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5sb2dnZXIuZXJyb3IoYEVycm9yIGxvYWRpbmcgc3ZnICR7Y29udGFpbmVyLnN2Zy5zdWJzdHJpbmcoMCwgMjU1KX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRhaW5lciBpbnN0YW5jZW9mIElGcmFtZUVsZW1lbnRDb250YWluZXIgJiYgY29udGFpbmVyLnRyZWUpIHtcclxuICAgICAgICAgICAgY29uc3QgaWZyYW1lUmVuZGVyZXIgPSBuZXcgQ2FudmFzUmVuZGVyZXIodGhpcy5jb250ZXh0LCB7XHJcbiAgICAgICAgICAgICAgICBzY2FsZTogdGhpcy5vcHRpb25zLnNjYWxlLFxyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb250YWluZXIuYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogY29udGFpbmVyLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBjb250YWluZXIuaGVpZ2h0XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY2FudmFzID0gYXdhaXQgaWZyYW1lUmVuZGVyZXIucmVuZGVyKGNvbnRhaW5lci50cmVlKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lci53aWR0aCAmJiBjb250YWluZXIuaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYm91bmRzLmxlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmJvdW5kcy50b3AsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmJvdW5kcy53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYm91bmRzLmhlaWdodFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRhaW5lciBpbnN0YW5jZW9mIElucHV0RWxlbWVudENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBjb25zdCBzaXplID0gTWF0aC5taW4oY29udGFpbmVyLmJvdW5kcy53aWR0aCwgY29udGFpbmVyLmJvdW5kcy5oZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lci50eXBlID09PSBDSEVDS0JPWCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5jaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0aChbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoY29udGFpbmVyLmJvdW5kcy5sZWZ0ICsgc2l6ZSAqIDAuMzkzNjMsIGNvbnRhaW5lci5ib3VuZHMudG9wICsgc2l6ZSAqIDAuNzkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKGNvbnRhaW5lci5ib3VuZHMubGVmdCArIHNpemUgKiAwLjE2LCBjb250YWluZXIuYm91bmRzLnRvcCArIHNpemUgKiAwLjU1NDkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKGNvbnRhaW5lci5ib3VuZHMubGVmdCArIHNpemUgKiAwLjI3MzQ3LCBjb250YWluZXIuYm91bmRzLnRvcCArIHNpemUgKiAwLjQ0MDcxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFZlY3Rvcihjb250YWluZXIuYm91bmRzLmxlZnQgKyBzaXplICogMC4zOTY5NCwgY29udGFpbmVyLmJvdW5kcy50b3AgKyBzaXplICogMC41NjQ5KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFZlY3Rvcihjb250YWluZXIuYm91bmRzLmxlZnQgKyBzaXplICogMC43Mjk4MywgY29udGFpbmVyLmJvdW5kcy50b3AgKyBzaXplICogMC4yMyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoY29udGFpbmVyLmJvdW5kcy5sZWZ0ICsgc2l6ZSAqIDAuODQsIGNvbnRhaW5lci5ib3VuZHMudG9wICsgc2l6ZSAqIDAuMzQwODUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKGNvbnRhaW5lci5ib3VuZHMubGVmdCArIHNpemUgKiAwLjM5MzYzLCBjb250YWluZXIuYm91bmRzLnRvcCArIHNpemUgKiAwLjc5KVxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBhc1N0cmluZyhJTlBVVF9DT0xPUik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250YWluZXIudHlwZSA9PT0gUkFESU8pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIuY2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5hcmMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5ib3VuZHMubGVmdCArIHNpemUgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYm91bmRzLnRvcCArIHNpemUgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplIC8gNCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5QSSAqIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGFzU3RyaW5nKElOUFVUX0NPTE9SKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLnZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBbZm9udEZhbWlseSwgZm9udFNpemVdID0gdGhpcy5jcmVhdGVGb250U3R5bGUoc3R5bGVzKTtcclxuICAgICAgICAgICAgY29uc3Qge2Jhc2VsaW5lfSA9IHRoaXMuZm9udE1ldHJpY3MuZ2V0TWV0cmljcyhmb250RmFtaWx5LCBmb250U2l6ZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5mb250ID0gZm9udEZhbWlseTtcclxuICAgICAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gYXNTdHJpbmcoc3R5bGVzLmNvbG9yKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3R4LnRleHRCYXNlbGluZSA9ICdhbHBoYWJldGljJztcclxuICAgICAgICAgICAgdGhpcy5jdHgudGV4dEFsaWduID0gY2FudmFzVGV4dEFsaWduKGNvbnRhaW5lci5zdHlsZXMudGV4dEFsaWduKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGNvbnRlbnRCb3goY29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgIGxldCB4ID0gMDtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoY29udGFpbmVyLnN0eWxlcy50ZXh0QWxpZ24pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgVEVYVF9BTElHTi5DRU5URVI6XHJcbiAgICAgICAgICAgICAgICAgICAgeCArPSBib3VuZHMud2lkdGggLyAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBURVhUX0FMSUdOLlJJR0hUOlxyXG4gICAgICAgICAgICAgICAgICAgIHggKz0gYm91bmRzLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0ZXh0Qm91bmRzID0gYm91bmRzLmFkZCh4LCAwLCAwLCAtYm91bmRzLmhlaWdodCAvIDIgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcclxuICAgICAgICAgICAgdGhpcy5wYXRoKFtcclxuICAgICAgICAgICAgICAgIG5ldyBWZWN0b3IoYm91bmRzLmxlZnQsIGJvdW5kcy50b3ApLFxyXG4gICAgICAgICAgICAgICAgbmV3IFZlY3Rvcihib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCwgYm91bmRzLnRvcCksXHJcbiAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoLCBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCksXHJcbiAgICAgICAgICAgICAgICBuZXcgVmVjdG9yKGJvdW5kcy5sZWZ0LCBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodClcclxuICAgICAgICAgICAgXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmN0eC5jbGlwKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVGV4dFdpdGhMZXR0ZXJTcGFjaW5nKFxyXG4gICAgICAgICAgICAgICAgbmV3IFRleHRCb3VuZHMoY29udGFpbmVyLnZhbHVlLCB0ZXh0Qm91bmRzKSxcclxuICAgICAgICAgICAgICAgIHN0eWxlcy5sZXR0ZXJTcGFjaW5nLFxyXG4gICAgICAgICAgICAgICAgYmFzZWxpbmVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmN0eC50ZXh0QmFzZWxpbmUgPSAnYWxwaGFiZXRpYyc7XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LnRleHRBbGlnbiA9ICdsZWZ0JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb250YWlucyhjb250YWluZXIuc3R5bGVzLmRpc3BsYXksIERJU1BMQVkuTElTVF9JVEVNKSkge1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVyLnN0eWxlcy5saXN0U3R5bGVJbWFnZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW1nID0gY29udGFpbmVyLnN0eWxlcy5saXN0U3R5bGVJbWFnZTtcclxuICAgICAgICAgICAgICAgIGlmIChpbWcudHlwZSA9PT0gQ1NTSW1hZ2VUeXBlLlVSTCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSAoaW1nIGFzIENTU1VSTEltYWdlKS51cmw7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBhd2FpdCB0aGlzLmNvbnRleHQuY2FjaGUubWF0Y2godXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKGltYWdlLCBjb250YWluZXIuYm91bmRzLmxlZnQgLSAoaW1hZ2Uud2lkdGggKyAxMCksIGNvbnRhaW5lci5ib3VuZHMudG9wKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5sb2dnZXIuZXJyb3IoYEVycm9yIGxvYWRpbmcgbGlzdC1zdHlsZS1pbWFnZSAke3VybH1gKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFpbnQubGlzdFZhbHVlICYmIGNvbnRhaW5lci5zdHlsZXMubGlzdFN0eWxlVHlwZSAhPT0gTElTVF9TVFlMRV9UWVBFLk5PTkUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtmb250RmFtaWx5XSA9IHRoaXMuY3JlYXRlRm9udFN0eWxlKHN0eWxlcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHguZm9udCA9IGZvbnRGYW1pbHk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBhc1N0cmluZyhzdHlsZXMuY29sb3IpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LnRleHRCYXNlbGluZSA9ICdtaWRkbGUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHgudGV4dEFsaWduID0gJ3JpZ2h0JztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG5ldyBCb3VuZHMoXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmJvdW5kcy5sZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5ib3VuZHMudG9wICsgZ2V0QWJzb2x1dGVWYWx1ZShjb250YWluZXIuc3R5bGVzLnBhZGRpbmdUb3AsIGNvbnRhaW5lci5ib3VuZHMud2lkdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5ib3VuZHMud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZUxpbmVIZWlnaHQoc3R5bGVzLmxpbmVIZWlnaHQsIHN0eWxlcy5mb250U2l6ZS5udW1iZXIpIC8gMiArIDFcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUZXh0V2l0aExldHRlclNwYWNpbmcoXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRleHRCb3VuZHMocGFpbnQubGlzdFZhbHVlLCBib3VuZHMpLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlcy5sZXR0ZXJTcGFjaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXB1dGVMaW5lSGVpZ2h0KHN0eWxlcy5saW5lSGVpZ2h0LCBzdHlsZXMuZm9udFNpemUubnVtYmVyKSAvIDIgKyAyXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHgudGV4dEJhc2VsaW5lID0gJ2JvdHRvbSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC50ZXh0QWxpZ24gPSAnbGVmdCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVuZGVyU3RhY2tDb250ZW50KHN0YWNrOiBTdGFja2luZ0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAoY29udGFpbnMoc3RhY2suZWxlbWVudC5jb250YWluZXIuZmxhZ3MsIEZMQUdTLkRFQlVHX1JFTkRFUikpIHtcclxuICAgICAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtcG9zaXRpb24tMy8jcGFpbnRpbmctb3JkZXJcclxuICAgICAgICAvLyAxLiB0aGUgYmFja2dyb3VuZCBhbmQgYm9yZGVycyBvZiB0aGUgZWxlbWVudCBmb3JtaW5nIHRoZSBzdGFja2luZyBjb250ZXh0LlxyXG4gICAgICAgIGF3YWl0IHRoaXMucmVuZGVyTm9kZUJhY2tncm91bmRBbmRCb3JkZXJzKHN0YWNrLmVsZW1lbnQpO1xyXG4gICAgICAgIC8vIDIuIHRoZSBjaGlsZCBzdGFja2luZyBjb250ZXh0cyB3aXRoIG5lZ2F0aXZlIHN0YWNrIGxldmVscyAobW9zdCBuZWdhdGl2ZSBmaXJzdCkuXHJcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBzdGFjay5uZWdhdGl2ZVpJbmRleCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclN0YWNrKGNoaWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gMy4gRm9yIGFsbCBpdHMgaW4tZmxvdywgbm9uLXBvc2l0aW9uZWQsIGJsb2NrLWxldmVsIGRlc2NlbmRhbnRzIGluIHRyZWUgb3JkZXI6XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJOb2RlQ29udGVudChzdGFjay5lbGVtZW50KTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBzdGFjay5ub25JbmxpbmVMZXZlbCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlck5vZGUoY2hpbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyA0LiBBbGwgbm9uLXBvc2l0aW9uZWQgZmxvYXRpbmcgZGVzY2VuZGFudHMsIGluIHRyZWUgb3JkZXIuIEZvciBlYWNoIG9uZSBvZiB0aGVzZSxcclxuICAgICAgICAvLyB0cmVhdCB0aGUgZWxlbWVudCBhcyBpZiBpdCBjcmVhdGVkIGEgbmV3IHN0YWNraW5nIGNvbnRleHQsIGJ1dCBhbnkgcG9zaXRpb25lZCBkZXNjZW5kYW50cyBhbmQgZGVzY2VuZGFudHNcclxuICAgICAgICAvLyB3aGljaCBhY3R1YWxseSBjcmVhdGUgYSBuZXcgc3RhY2tpbmcgY29udGV4dCBzaG91bGQgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBwYXJlbnQgc3RhY2tpbmcgY29udGV4dCxcclxuICAgICAgICAvLyBub3QgdGhpcyBuZXcgb25lLlxyXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc3RhY2subm9uUG9zaXRpb25lZEZsb2F0cykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclN0YWNrKGNoaWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gNS4gdGhlIGluLWZsb3csIGlubGluZS1sZXZlbCwgbm9uLXBvc2l0aW9uZWQgZGVzY2VuZGFudHMsIGluY2x1ZGluZyBpbmxpbmUgdGFibGVzIGFuZCBpbmxpbmUgYmxvY2tzLlxyXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygc3RhY2subm9uUG9zaXRpb25lZElubGluZUxldmVsKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyU3RhY2soY2hpbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHN0YWNrLmlubGluZUxldmVsKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyTm9kZShjaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIDYuIEFsbCBwb3NpdGlvbmVkLCBvcGFjaXR5IG9yIHRyYW5zZm9ybSBkZXNjZW5kYW50cywgaW4gdHJlZSBvcmRlciB0aGF0IGZhbGwgaW50byB0aGUgZm9sbG93aW5nIGNhdGVnb3JpZXM6XHJcbiAgICAgICAgLy8gIEFsbCBwb3NpdGlvbmVkIGRlc2NlbmRhbnRzIHdpdGggJ3otaW5kZXg6IGF1dG8nIG9yICd6LWluZGV4OiAwJywgaW4gdHJlZSBvcmRlci5cclxuICAgICAgICAvLyAgRm9yIHRob3NlIHdpdGggJ3otaW5kZXg6IGF1dG8nLCB0cmVhdCB0aGUgZWxlbWVudCBhcyBpZiBpdCBjcmVhdGVkIGEgbmV3IHN0YWNraW5nIGNvbnRleHQsXHJcbiAgICAgICAgLy8gIGJ1dCBhbnkgcG9zaXRpb25lZCBkZXNjZW5kYW50cyBhbmQgZGVzY2VuZGFudHMgd2hpY2ggYWN0dWFsbHkgY3JlYXRlIGEgbmV3IHN0YWNraW5nIGNvbnRleHQgc2hvdWxkIGJlXHJcbiAgICAgICAgLy8gIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcGFyZW50IHN0YWNraW5nIGNvbnRleHQsIG5vdCB0aGlzIG5ldyBvbmUuIEZvciB0aG9zZSB3aXRoICd6LWluZGV4OiAwJyxcclxuICAgICAgICAvLyAgdHJlYXQgdGhlIHN0YWNraW5nIGNvbnRleHQgZ2VuZXJhdGVkIGF0b21pY2FsbHkuXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyAgQWxsIG9wYWNpdHkgZGVzY2VuZGFudHMgd2l0aCBvcGFjaXR5IGxlc3MgdGhhbiAxXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyAgQWxsIHRyYW5zZm9ybSBkZXNjZW5kYW50cyB3aXRoIHRyYW5zZm9ybSBvdGhlciB0aGFuIG5vbmVcclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHN0YWNrLnplcm9PckF1dG9aSW5kZXhPclRyYW5zZm9ybWVkT3JPcGFjaXR5KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyU3RhY2soY2hpbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyA3LiBTdGFja2luZyBjb250ZXh0cyBmb3JtZWQgYnkgcG9zaXRpb25lZCBkZXNjZW5kYW50cyB3aXRoIHotaW5kaWNlcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMSBpbiB6LWluZGV4XHJcbiAgICAgICAgLy8gb3JkZXIgKHNtYWxsZXN0IGZpcnN0KSB0aGVuIHRyZWUgb3JkZXIuXHJcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBzdGFjay5wb3NpdGl2ZVpJbmRleCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclN0YWNrKGNoaWxkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFzayhwYXRoczogUGF0aFtdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgdGhpcy5jdHgubW92ZVRvKDAsIDApO1xyXG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbyh0aGlzLmNhbnZhcy53aWR0aCwgMCk7XHJcbiAgICAgICAgdGhpcy5jdHgubGluZVRvKHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbygwLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuY3R4LmxpbmVUbygwLCAwKTtcclxuICAgICAgICB0aGlzLmZvcm1hdFBhdGgocGF0aHMuc2xpY2UoMCkucmV2ZXJzZSgpKTtcclxuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRoKHBhdGhzOiBQYXRoW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICB0aGlzLmZvcm1hdFBhdGgocGF0aHMpO1xyXG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdFBhdGgocGF0aHM6IFBhdGhbXSk6IHZvaWQge1xyXG4gICAgICAgIHBhdGhzLmZvckVhY2goKHBvaW50LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydDogVmVjdG9yID0gaXNCZXppZXJDdXJ2ZShwb2ludCkgPyBwb2ludC5zdGFydCA6IHBvaW50O1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyhzdGFydC54LCBzdGFydC55KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyhzdGFydC54LCBzdGFydC55KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlzQmV6aWVyQ3VydmUocG9pbnQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5iZXppZXJDdXJ2ZVRvKFxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50LnN0YXJ0Q29udHJvbC54LFxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50LnN0YXJ0Q29udHJvbC55LFxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50LmVuZENvbnRyb2wueCxcclxuICAgICAgICAgICAgICAgICAgICBwb2ludC5lbmRDb250cm9sLnksXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQuZW5kLngsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQuZW5kLnlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJSZXBlYXQocGF0aDogUGF0aFtdLCBwYXR0ZXJuOiBDYW52YXNQYXR0ZXJuIHwgQ2FudmFzR3JhZGllbnQsIG9mZnNldFg6IG51bWJlciwgb2Zmc2V0WTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wYXRoKHBhdGgpO1xyXG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5jdHgudHJhbnNsYXRlKG9mZnNldFgsIG9mZnNldFkpO1xyXG4gICAgICAgIHRoaXMuY3R4LmZpbGwoKTtcclxuICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUoLW9mZnNldFgsIC1vZmZzZXRZKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNpemVJbWFnZShpbWFnZTogSFRNTEltYWdlRWxlbWVudCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBIVE1MQ2FudmFzRWxlbWVudCB8IEhUTUxJbWFnZUVsZW1lbnQge1xyXG4gICAgICAgIGlmIChpbWFnZS53aWR0aCA9PT0gd2lkdGggJiYgaW1hZ2UuaGVpZ2h0ID09PSBoZWlnaHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGltYWdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgb3duZXJEb2N1bWVudCA9IHRoaXMuY2FudmFzLm93bmVyRG9jdW1lbnQgPz8gZG9jdW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSBNYXRoLm1heCgxLCB3aWR0aCk7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IE1hdGgubWF4KDEsIGhlaWdodCk7XHJcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIHJldHVybiBjYW52YXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVuZGVyQmFja2dyb3VuZEltYWdlKGNvbnRhaW5lcjogRWxlbWVudENvbnRhaW5lcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGxldCBpbmRleCA9IGNvbnRhaW5lci5zdHlsZXMuYmFja2dyb3VuZEltYWdlLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYWNrZ3JvdW5kSW1hZ2Ugb2YgY29udGFpbmVyLnN0eWxlcy5iYWNrZ3JvdW5kSW1hZ2Uuc2xpY2UoMCkucmV2ZXJzZSgpKSB7XHJcbiAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kSW1hZ2UudHlwZSA9PT0gQ1NTSW1hZ2VUeXBlLlVSTCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGltYWdlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gKGJhY2tncm91bmRJbWFnZSBhcyBDU1NVUkxJbWFnZSkudXJsO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZSA9IGF3YWl0IHRoaXMuY29udGV4dC5jYWNoZS5tYXRjaCh1cmwpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5sb2dnZXIuZXJyb3IoYEVycm9yIGxvYWRpbmcgYmFja2dyb3VuZC1pbWFnZSAke3VybH1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcGF0aCwgeCwgeSwgd2lkdGgsIGhlaWdodF0gPSBjYWxjdWxhdGVCYWNrZ3JvdW5kUmVuZGVyaW5nKGNvbnRhaW5lciwgaW5kZXgsIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2Uud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLmhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2Uud2lkdGggLyBpbWFnZS5oZWlnaHRcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5jdHguY3JlYXRlUGF0dGVybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemVJbWFnZShpbWFnZSwgd2lkdGgsIGhlaWdodCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZXBlYXQnXHJcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBDYW52YXNQYXR0ZXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUmVwZWF0KHBhdGgsIHBhdHRlcm4sIHgsIHkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZWFyR3JhZGllbnQoYmFja2dyb3VuZEltYWdlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW3BhdGgsIHgsIHksIHdpZHRoLCBoZWlnaHRdID0gY2FsY3VsYXRlQmFja2dyb3VuZFJlbmRlcmluZyhjb250YWluZXIsIGluZGV4LCBbbnVsbCwgbnVsbCwgbnVsbF0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2xpbmVMZW5ndGgsIHgwLCB4MSwgeTAsIHkxXSA9IGNhbGN1bGF0ZUdyYWRpZW50RGlyZWN0aW9uKGJhY2tncm91bmRJbWFnZS5hbmdsZSwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBncmFkaWVudCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCh4MCwgeTAsIHgxLCB5MSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbG9yU3RvcHMoYmFja2dyb3VuZEltYWdlLnN0b3BzLCBsaW5lTGVuZ3RoKS5mb3JFYWNoKChjb2xvclN0b3ApID0+XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKGNvbG9yU3RvcC5zdG9wLCBhc1N0cmluZyhjb2xvclN0b3AuY29sb3IpKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gZ3JhZGllbnQ7XHJcbiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5jdHguY3JlYXRlUGF0dGVybihjYW52YXMsICdyZXBlYXQnKSBhcyBDYW52YXNQYXR0ZXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUmVwZWF0KHBhdGgsIHBhdHRlcm4sIHgsIHkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzUmFkaWFsR3JhZGllbnQoYmFja2dyb3VuZEltYWdlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW3BhdGgsIGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodF0gPSBjYWxjdWxhdGVCYWNrZ3JvdW5kUmVuZGVyaW5nKGNvbnRhaW5lciwgaW5kZXgsIFtcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGJhY2tncm91bmRJbWFnZS5wb3NpdGlvbi5sZW5ndGggPT09IDAgPyBbRklGVFlfUEVSQ0VOVF0gOiBiYWNrZ3JvdW5kSW1hZ2UucG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICBjb25zdCB4ID0gZ2V0QWJzb2x1dGVWYWx1ZShwb3NpdGlvblswXSwgd2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IGdldEFic29sdXRlVmFsdWUocG9zaXRpb25bcG9zaXRpb24ubGVuZ3RoIC0gMV0sIGhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgW3J4LCByeV0gPSBjYWxjdWxhdGVSYWRpdXMoYmFja2dyb3VuZEltYWdlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIGlmIChyeCA+IDAgJiYgcnkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFkaWFsR3JhZGllbnQgPSB0aGlzLmN0eC5jcmVhdGVSYWRpYWxHcmFkaWVudChsZWZ0ICsgeCwgdG9wICsgeSwgMCwgbGVmdCArIHgsIHRvcCArIHksIHJ4KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0NvbG9yU3RvcHMoYmFja2dyb3VuZEltYWdlLnN0b3BzLCByeCAqIDIpLmZvckVhY2goKGNvbG9yU3RvcCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaWFsR3JhZGllbnQuYWRkQ29sb3JTdG9wKGNvbG9yU3RvcC5zdG9wLCBhc1N0cmluZyhjb2xvclN0b3AuY29sb3IpKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF0aChwYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSByYWRpYWxHcmFkaWVudDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocnggIT09IHJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybXMgZm9yIGVsbGlwdGljYWwgcmFkaWFsIGdyYWRpZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pZFggPSBjb250YWluZXIuYm91bmRzLmxlZnQgKyAwLjUgKiBjb250YWluZXIuYm91bmRzLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaWRZID0gY29udGFpbmVyLmJvdW5kcy50b3AgKyAwLjUgKiBjb250YWluZXIuYm91bmRzLmhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZiA9IHJ5IC8gcng7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludkYgPSAxIC8gZjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgudHJhbnNsYXRlKG1pZFgsIG1pZFkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC50cmFuc2Zvcm0oMSwgMCwgMCwgZiwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zbGF0ZSgtbWlkWCwgLW1pZFkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguZmlsbFJlY3QobGVmdCwgaW52RiAqICh0b3AgLSBtaWRZKSArIG1pZFksIHdpZHRoLCBoZWlnaHQgKiBpbnZGKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGwoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5kZXgtLTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVuZGVyU29saWRCb3JkZXIoY29sb3I6IENvbG9yLCBzaWRlOiBudW1iZXIsIGN1cnZlUG9pbnRzOiBCb3VuZEN1cnZlcyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMucGF0aChwYXJzZVBhdGhGb3JCb3JkZXIoY3VydmVQb2ludHMsIHNpZGUpKTtcclxuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBhc1N0cmluZyhjb2xvcik7XHJcbiAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbmRlckRvdWJsZUJvcmRlcihjb2xvcjogQ29sb3IsIHdpZHRoOiBudW1iZXIsIHNpZGU6IG51bWJlciwgY3VydmVQb2ludHM6IEJvdW5kQ3VydmVzKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHdpZHRoIDwgMykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclNvbGlkQm9yZGVyKGNvbG9yLCBzaWRlLCBjdXJ2ZVBvaW50cyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG91dGVyUGF0aHMgPSBwYXJzZVBhdGhGb3JCb3JkZXJEb3VibGVPdXRlcihjdXJ2ZVBvaW50cywgc2lkZSk7XHJcbiAgICAgICAgdGhpcy5wYXRoKG91dGVyUGF0aHMpO1xyXG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGFzU3RyaW5nKGNvbG9yKTtcclxuICAgICAgICB0aGlzLmN0eC5maWxsKCk7XHJcbiAgICAgICAgY29uc3QgaW5uZXJQYXRocyA9IHBhcnNlUGF0aEZvckJvcmRlckRvdWJsZUlubmVyKGN1cnZlUG9pbnRzLCBzaWRlKTtcclxuICAgICAgICB0aGlzLnBhdGgoaW5uZXJQYXRocyk7XHJcbiAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbmRlck5vZGVCYWNrZ3JvdW5kQW5kQm9yZGVycyhwYWludDogRWxlbWVudFBhaW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5hcHBseUVmZmVjdHMocGFpbnQuZ2V0RWZmZWN0cyhFZmZlY3RUYXJnZXQuQkFDS0dST1VORF9CT1JERVJTKSk7XHJcbiAgICAgICAgY29uc3Qgc3R5bGVzID0gcGFpbnQuY29udGFpbmVyLnN0eWxlcztcclxuICAgICAgICBjb25zdCBoYXNCYWNrZ3JvdW5kID0gIWlzVHJhbnNwYXJlbnQoc3R5bGVzLmJhY2tncm91bmRDb2xvcikgfHwgc3R5bGVzLmJhY2tncm91bmRJbWFnZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGJvcmRlcnMgPSBbXHJcbiAgICAgICAgICAgIHtzdHlsZTogc3R5bGVzLmJvcmRlclRvcFN0eWxlLCBjb2xvcjogc3R5bGVzLmJvcmRlclRvcENvbG9yLCB3aWR0aDogc3R5bGVzLmJvcmRlclRvcFdpZHRofSxcclxuICAgICAgICAgICAge3N0eWxlOiBzdHlsZXMuYm9yZGVyUmlnaHRTdHlsZSwgY29sb3I6IHN0eWxlcy5ib3JkZXJSaWdodENvbG9yLCB3aWR0aDogc3R5bGVzLmJvcmRlclJpZ2h0V2lkdGh9LFxyXG4gICAgICAgICAgICB7c3R5bGU6IHN0eWxlcy5ib3JkZXJCb3R0b21TdHlsZSwgY29sb3I6IHN0eWxlcy5ib3JkZXJCb3R0b21Db2xvciwgd2lkdGg6IHN0eWxlcy5ib3JkZXJCb3R0b21XaWR0aH0sXHJcbiAgICAgICAgICAgIHtzdHlsZTogc3R5bGVzLmJvcmRlckxlZnRTdHlsZSwgY29sb3I6IHN0eWxlcy5ib3JkZXJMZWZ0Q29sb3IsIHdpZHRoOiBzdHlsZXMuYm9yZGVyTGVmdFdpZHRofVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IGJhY2tncm91bmRQYWludGluZ0FyZWEgPSBjYWxjdWxhdGVCYWNrZ3JvdW5kQ3VydmVkUGFpbnRpbmdBcmVhKFxyXG4gICAgICAgICAgICBnZXRCYWNrZ3JvdW5kVmFsdWVGb3JJbmRleChzdHlsZXMuYmFja2dyb3VuZENsaXAsIDApLFxyXG4gICAgICAgICAgICBwYWludC5jdXJ2ZXNcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoaGFzQmFja2dyb3VuZCB8fCBzdHlsZXMuYm94U2hhZG93Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XHJcbiAgICAgICAgICAgIHRoaXMucGF0aChiYWNrZ3JvdW5kUGFpbnRpbmdBcmVhKTtcclxuICAgICAgICAgICAgdGhpcy5jdHguY2xpcCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFpc1RyYW5zcGFyZW50KHN0eWxlcy5iYWNrZ3JvdW5kQ29sb3IpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBhc1N0cmluZyhzdHlsZXMuYmFja2dyb3VuZENvbG9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGwoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJCYWNrZ3JvdW5kSW1hZ2UocGFpbnQuY29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcclxuXHJcbiAgICAgICAgICAgIHN0eWxlcy5ib3hTaGFkb3dcclxuICAgICAgICAgICAgICAgIC5zbGljZSgwKVxyXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKVxyXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKHNoYWRvdykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3JkZXJCb3hBcmVhID0gY2FsY3VsYXRlQm9yZGVyQm94UGF0aChwYWludC5jdXJ2ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hc2tPZmZzZXQgPSBzaGFkb3cuaW5zZXQgPyAwIDogTUFTS19PRkZTRVQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhZG93UGFpbnRpbmdBcmVhID0gdHJhbnNmb3JtUGF0aChcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm94QXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLW1hc2tPZmZzZXQgKyAoc2hhZG93Lmluc2V0ID8gMSA6IC0xKSAqIHNoYWRvdy5zcHJlYWQubnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2hhZG93Lmluc2V0ID8gMSA6IC0xKSAqIHNoYWRvdy5zcHJlYWQubnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3cuc3ByZWFkLm51bWJlciAqIChzaGFkb3cuaW5zZXQgPyAtMiA6IDIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3cuc3ByZWFkLm51bWJlciAqIChzaGFkb3cuaW5zZXQgPyAtMiA6IDIpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoYWRvdy5pbnNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhdGgoYm9yZGVyQm94QXJlYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNsaXAoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXNrKHNoYWRvd1BhaW50aW5nQXJlYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXNrKGJvcmRlckJveEFyZWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5jbGlwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGF0aChzaGFkb3dQYWludGluZ0FyZWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2hhZG93T2Zmc2V0WCA9IHNoYWRvdy5vZmZzZXRYLm51bWJlciArIG1hc2tPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2hhZG93T2Zmc2V0WSA9IHNoYWRvdy5vZmZzZXRZLm51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zaGFkb3dDb2xvciA9IGFzU3RyaW5nKHNoYWRvdy5jb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2hhZG93Qmx1ciA9IHNoYWRvdy5ibHVyLm51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBzaGFkb3cuaW5zZXQgPyBhc1N0cmluZyhzaGFkb3cuY29sb3IpIDogJ3JnYmEoMCwwLDAsMSknO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2lkZSA9IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBib3JkZXIgb2YgYm9yZGVycykge1xyXG4gICAgICAgICAgICBpZiAoYm9yZGVyLnN0eWxlICE9PSBCT1JERVJfU1RZTEUuTk9ORSAmJiAhaXNUcmFuc3BhcmVudChib3JkZXIuY29sb3IpICYmIGJvcmRlci53aWR0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChib3JkZXIuc3R5bGUgPT09IEJPUkRFUl9TVFlMRS5EQVNIRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlckRhc2hlZERvdHRlZEJvcmRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLmNvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50LmN1cnZlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQk9SREVSX1NUWUxFLkRBU0hFRFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvcmRlci5zdHlsZSA9PT0gQk9SREVSX1NUWUxFLkRPVFRFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyRGFzaGVkRG90dGVkQm9yZGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIuY29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnQuY3VydmVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCT1JERVJfU1RZTEUuRE9UVEVEXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9yZGVyLnN0eWxlID09PSBCT1JERVJfU1RZTEUuRE9VQkxFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJEb3VibGVCb3JkZXIoYm9yZGVyLmNvbG9yLCBib3JkZXIud2lkdGgsIHNpZGUsIHBhaW50LmN1cnZlcyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyU29saWRCb3JkZXIoYm9yZGVyLmNvbG9yLCBzaWRlLCBwYWludC5jdXJ2ZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNpZGUrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVuZGVyRGFzaGVkRG90dGVkQm9yZGVyKFxyXG4gICAgICAgIGNvbG9yOiBDb2xvcixcclxuICAgICAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgICAgIHNpZGU6IG51bWJlcixcclxuICAgICAgICBjdXJ2ZVBvaW50czogQm91bmRDdXJ2ZXMsXHJcbiAgICAgICAgc3R5bGU6IEJPUkRFUl9TVFlMRVxyXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xyXG5cclxuICAgICAgICBjb25zdCBzdHJva2VQYXRocyA9IHBhcnNlUGF0aEZvckJvcmRlclN0cm9rZShjdXJ2ZVBvaW50cywgc2lkZSk7XHJcbiAgICAgICAgY29uc3QgYm94UGF0aHMgPSBwYXJzZVBhdGhGb3JCb3JkZXIoY3VydmVQb2ludHMsIHNpZGUpO1xyXG5cclxuICAgICAgICBpZiAoc3R5bGUgPT09IEJPUkRFUl9TVFlMRS5EQVNIRUQpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXRoKGJveFBhdGhzKTtcclxuICAgICAgICAgICAgdGhpcy5jdHguY2xpcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZO1xyXG4gICAgICAgIGlmIChpc0JlemllckN1cnZlKGJveFBhdGhzWzBdKSkge1xyXG4gICAgICAgICAgICBzdGFydFggPSAoYm94UGF0aHNbMF0gYXMgQmV6aWVyQ3VydmUpLnN0YXJ0Lng7XHJcbiAgICAgICAgICAgIHN0YXJ0WSA9IChib3hQYXRoc1swXSBhcyBCZXppZXJDdXJ2ZSkuc3RhcnQueTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGFydFggPSAoYm94UGF0aHNbMF0gYXMgVmVjdG9yKS54O1xyXG4gICAgICAgICAgICBzdGFydFkgPSAoYm94UGF0aHNbMF0gYXMgVmVjdG9yKS55O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNCZXppZXJDdXJ2ZShib3hQYXRoc1sxXSkpIHtcclxuICAgICAgICAgICAgZW5kWCA9IChib3hQYXRoc1sxXSBhcyBCZXppZXJDdXJ2ZSkuZW5kLng7XHJcbiAgICAgICAgICAgIGVuZFkgPSAoYm94UGF0aHNbMV0gYXMgQmV6aWVyQ3VydmUpLmVuZC55O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVuZFggPSAoYm94UGF0aHNbMV0gYXMgVmVjdG9yKS54O1xyXG4gICAgICAgICAgICBlbmRZID0gKGJveFBhdGhzWzFdIGFzIFZlY3RvcikueTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBsZW5ndGg7XHJcbiAgICAgICAgaWYgKHNpZGUgPT09IDAgfHwgc2lkZSA9PT0gMikge1xyXG4gICAgICAgICAgICBsZW5ndGggPSBNYXRoLmFicyhzdGFydFggLSBlbmRYKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZW5ndGggPSBNYXRoLmFicyhzdGFydFkgLSBlbmRZKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIGlmIChzdHlsZSA9PT0gQk9SREVSX1NUWUxFLkRPVFRFRCkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBhdGgoc3Ryb2tlUGF0aHMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0UGF0aChib3hQYXRocy5zbGljZSgwLCAyKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGFzaExlbmd0aCA9IHdpZHRoIDwgMyA/IHdpZHRoICogMyA6IHdpZHRoICogMjtcclxuICAgICAgICBsZXQgc3BhY2VMZW5ndGggPSB3aWR0aCA8IDMgPyB3aWR0aCAqIDIgOiB3aWR0aDtcclxuICAgICAgICBpZiAoc3R5bGUgPT09IEJPUkRFUl9TVFlMRS5ET1RURUQpIHtcclxuICAgICAgICAgICAgZGFzaExlbmd0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICBzcGFjZUxlbmd0aCA9IHdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHVzZUxpbmVEYXNoID0gdHJ1ZTtcclxuICAgICAgICBpZiAobGVuZ3RoIDw9IGRhc2hMZW5ndGggKiAyKSB7XHJcbiAgICAgICAgICAgIHVzZUxpbmVEYXNoID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPD0gZGFzaExlbmd0aCAqIDIgKyBzcGFjZUxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBtdWx0aXBsaWVyID0gbGVuZ3RoIC8gKDIgKiBkYXNoTGVuZ3RoICsgc3BhY2VMZW5ndGgpO1xyXG4gICAgICAgICAgICBkYXNoTGVuZ3RoICo9IG11bHRpcGxpZXI7XHJcbiAgICAgICAgICAgIHNwYWNlTGVuZ3RoICo9IG11bHRpcGxpZXI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyT2ZEYXNoZXMgPSBNYXRoLmZsb29yKChsZW5ndGggKyBzcGFjZUxlbmd0aCkgLyAoZGFzaExlbmd0aCArIHNwYWNlTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pblNwYWNlID0gKGxlbmd0aCAtIG51bWJlck9mRGFzaGVzICogZGFzaExlbmd0aCkgLyAobnVtYmVyT2ZEYXNoZXMgLSAxKTtcclxuICAgICAgICAgICAgY29uc3QgbWF4U3BhY2UgPSAobGVuZ3RoIC0gKG51bWJlck9mRGFzaGVzICsgMSkgKiBkYXNoTGVuZ3RoKSAvIG51bWJlck9mRGFzaGVzO1xyXG4gICAgICAgICAgICBzcGFjZUxlbmd0aCA9XHJcbiAgICAgICAgICAgICAgICBtYXhTcGFjZSA8PSAwIHx8IE1hdGguYWJzKHNwYWNlTGVuZ3RoIC0gbWluU3BhY2UpIDwgTWF0aC5hYnMoc3BhY2VMZW5ndGggLSBtYXhTcGFjZSlcclxuICAgICAgICAgICAgICAgICAgICA/IG1pblNwYWNlXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXhTcGFjZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1c2VMaW5lRGFzaCkge1xyXG4gICAgICAgICAgICBpZiAoc3R5bGUgPT09IEJPUkRFUl9TVFlMRS5ET1RURUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNldExpbmVEYXNoKFswLCBkYXNoTGVuZ3RoICsgc3BhY2VMZW5ndGhdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNldExpbmVEYXNoKFtkYXNoTGVuZ3RoLCBzcGFjZUxlbmd0aF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3R5bGUgPT09IEJPUkRFUl9TVFlMRS5ET1RURUQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdHgubGluZUNhcCA9ICdyb3VuZCc7XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IHdpZHRoICogMiArIDEuMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBhc1N0cmluZyhjb2xvcik7XHJcbiAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XHJcbiAgICAgICAgdGhpcy5jdHguc2V0TGluZURhc2goW10pO1xyXG5cclxuICAgICAgICAvLyBkYXNoZWQgcm91bmQgZWRnZSBnYXBcclxuICAgICAgICBpZiAoc3R5bGUgPT09IEJPUkRFUl9TVFlMRS5EQVNIRUQpIHtcclxuICAgICAgICAgICAgaWYgKGlzQmV6aWVyQ3VydmUoYm94UGF0aHNbMF0pKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoMSA9IGJveFBhdGhzWzNdIGFzIEJlemllckN1cnZlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aDIgPSBib3hQYXRoc1swXSBhcyBCZXppZXJDdXJ2ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtYXRQYXRoKFtuZXcgVmVjdG9yKHBhdGgxLmVuZC54LCBwYXRoMS5lbmQueSksIG5ldyBWZWN0b3IocGF0aDIuc3RhcnQueCwgcGF0aDIuc3RhcnQueSldKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc0JlemllckN1cnZlKGJveFBhdGhzWzFdKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aDEgPSBib3hQYXRoc1sxXSBhcyBCZXppZXJDdXJ2ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgyID0gYm94UGF0aHNbMl0gYXMgQmV6aWVyQ3VydmU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0UGF0aChbbmV3IFZlY3RvcihwYXRoMS5lbmQueCwgcGF0aDEuZW5kLnkpLCBuZXcgVmVjdG9yKHBhdGgyLnN0YXJ0LngsIHBhdGgyLnN0YXJ0LnkpXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbmRlcihlbGVtZW50OiBFbGVtZW50Q29udGFpbmVyKTogUHJvbWlzZTxIVE1MQ2FudmFzRWxlbWVudD4ge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFja2dyb3VuZENvbG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGFzU3RyaW5nKHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IpO1xyXG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsUmVjdCh0aGlzLm9wdGlvbnMueCwgdGhpcy5vcHRpb25zLnksIHRoaXMub3B0aW9ucy53aWR0aCwgdGhpcy5vcHRpb25zLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdGFjayA9IHBhcnNlU3RhY2tpbmdDb250ZXh0cyhlbGVtZW50KTtcclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJTdGFjayhzdGFjayk7XHJcbiAgICAgICAgdGhpcy5hcHBseUVmZmVjdHMoW10pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbnZhcztcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgaXNUZXh0SW5wdXRFbGVtZW50ID0gKFxyXG4gICAgY29udGFpbmVyOiBFbGVtZW50Q29udGFpbmVyXHJcbik6IGNvbnRhaW5lciBpcyBJbnB1dEVsZW1lbnRDb250YWluZXIgfCBUZXh0YXJlYUVsZW1lbnRDb250YWluZXIgfCBTZWxlY3RFbGVtZW50Q29udGFpbmVyID0+IHtcclxuICAgIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBUZXh0YXJlYUVsZW1lbnRDb250YWluZXIpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgU2VsZWN0RWxlbWVudENvbnRhaW5lcikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBJbnB1dEVsZW1lbnRDb250YWluZXIgJiYgY29udGFpbmVyLnR5cGUgIT09IFJBRElPICYmIGNvbnRhaW5lci50eXBlICE9PSBDSEVDS0JPWCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxuY29uc3QgY2FsY3VsYXRlQmFja2dyb3VuZEN1cnZlZFBhaW50aW5nQXJlYSA9IChjbGlwOiBCQUNLR1JPVU5EX0NMSVAsIGN1cnZlczogQm91bmRDdXJ2ZXMpOiBQYXRoW10gPT4ge1xyXG4gICAgc3dpdGNoIChjbGlwKSB7XHJcbiAgICAgICAgY2FzZSBCQUNLR1JPVU5EX0NMSVAuQk9SREVSX0JPWDpcclxuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZUJvcmRlckJveFBhdGgoY3VydmVzKTtcclxuICAgICAgICBjYXNlIEJBQ0tHUk9VTkRfQ0xJUC5DT05URU5UX0JPWDpcclxuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZUNvbnRlbnRCb3hQYXRoKGN1cnZlcyk7XHJcbiAgICAgICAgY2FzZSBCQUNLR1JPVU5EX0NMSVAuUEFERElOR19CT1g6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVBhZGRpbmdCb3hQYXRoKGN1cnZlcyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5jb25zdCBjYW52YXNUZXh0QWxpZ24gPSAodGV4dEFsaWduOiBURVhUX0FMSUdOKTogQ2FudmFzVGV4dEFsaWduID0+IHtcclxuICAgIHN3aXRjaCAodGV4dEFsaWduKSB7XHJcbiAgICAgICAgY2FzZSBURVhUX0FMSUdOLkNFTlRFUjpcclxuICAgICAgICAgICAgcmV0dXJuICdjZW50ZXInO1xyXG4gICAgICAgIGNhc2UgVEVYVF9BTElHTi5SSUdIVDpcclxuICAgICAgICAgICAgcmV0dXJuICdyaWdodCc7XHJcbiAgICAgICAgY2FzZSBURVhUX0FMSUdOLkxFRlQ6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuICdsZWZ0JztcclxuICAgIH1cclxufTtcclxuXHJcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmlrbGFzdmgvaHRtbDJjYW52YXMvcHVsbC8yNjQ1XHJcbmNvbnN0IGlPU0Jyb2tlbkZvbnRzID0gWyctYXBwbGUtc3lzdGVtJywgJ3N5c3RlbS11aSddO1xyXG5cclxuY29uc3QgZml4SU9TU3lzdGVtRm9udHMgPSAoZm9udEZhbWlsaWVzOiBzdHJpbmdbXSk6IHN0cmluZ1tdID0+IHtcclxuICAgIHJldHVybiAvaVBob25lIE9TIDE1XygwfDEpLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KVxyXG4gICAgICAgID8gZm9udEZhbWlsaWVzLmZpbHRlcigoZm9udEZhbWlseSkgPT4gaU9TQnJva2VuRm9udHMuaW5kZXhPZihmb250RmFtaWx5KSA9PT0gLTEpXHJcbiAgICAgICAgOiBmb250RmFtaWxpZXM7XHJcbn07XHJcbiIsImltcG9ydCB7UmVuZGVyQ29uZmlndXJhdGlvbnN9IGZyb20gJy4vY2FudmFzLXJlbmRlcmVyJztcclxuaW1wb3J0IHtjcmVhdGVGb3JlaWduT2JqZWN0U1ZHfSBmcm9tICcuLi8uLi9jb3JlL2ZlYXR1cmVzJztcclxuaW1wb3J0IHthc1N0cmluZ30gZnJvbSAnLi4vLi4vY3NzL3R5cGVzL2NvbG9yJztcclxuaW1wb3J0IHtSZW5kZXJlcn0gZnJvbSAnLi4vcmVuZGVyZXInO1xyXG5pbXBvcnQge0NvbnRleHR9IGZyb20gJy4uLy4uL2NvcmUvY29udGV4dCc7XHJcblxyXG5leHBvcnQgY2xhc3MgRm9yZWlnbk9iamVjdFJlbmRlcmVyIGV4dGVuZHMgUmVuZGVyZXIge1xyXG4gICAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xyXG4gICAgb3B0aW9uczogUmVuZGVyQ29uZmlndXJhdGlvbnM7XHJcblxyXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgb3B0aW9uczogUmVuZGVyQ29uZmlndXJhdGlvbnMpIHtcclxuICAgICAgICBzdXBlcihjb250ZXh0LCBvcHRpb25zKTtcclxuICAgICAgICB0aGlzLmNhbnZhcyA9IG9wdGlvbnMuY2FudmFzID8gb3B0aW9ucy5jYW52YXMgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5jYW52YXMud2lkdGggPSBNYXRoLmZsb29yKG9wdGlvbnMud2lkdGggKiBvcHRpb25zLnNjYWxlKTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBNYXRoLmZsb29yKG9wdGlvbnMuaGVpZ2h0ICogb3B0aW9ucy5zY2FsZSk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSBgJHtvcHRpb25zLndpZHRofXB4YDtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHtvcHRpb25zLmhlaWdodH1weGA7XHJcblxyXG4gICAgICAgIHRoaXMuY3R4LnNjYWxlKHRoaXMub3B0aW9ucy5zY2FsZSwgdGhpcy5vcHRpb25zLnNjYWxlKTtcclxuICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUoLW9wdGlvbnMueCwgLW9wdGlvbnMueSk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmxvZ2dlci5kZWJ1ZyhcclxuICAgICAgICAgICAgYEVYUEVSSU1FTlRBTCBGb3JlaWduT2JqZWN0IHJlbmRlcmVyIGluaXRpYWxpemVkICgke29wdGlvbnMud2lkdGh9eCR7b3B0aW9ucy5oZWlnaHR9IGF0ICR7b3B0aW9ucy54fSwke29wdGlvbnMueX0pIHdpdGggc2NhbGUgJHtvcHRpb25zLnNjYWxlfWBcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbmRlcihlbGVtZW50OiBIVE1MRWxlbWVudCk6IFByb21pc2U8SFRNTENhbnZhc0VsZW1lbnQ+IHtcclxuICAgICAgICBjb25zdCBzdmcgPSBjcmVhdGVGb3JlaWduT2JqZWN0U1ZHKFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2lkdGggKiB0aGlzLm9wdGlvbnMuc2NhbGUsXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oZWlnaHQgKiB0aGlzLm9wdGlvbnMuc2NhbGUsXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsZSxcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNjYWxlLFxyXG4gICAgICAgICAgICBlbGVtZW50XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW1nID0gYXdhaXQgbG9hZFNlcmlhbGl6ZWRTVkcoc3ZnKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5iYWNrZ3JvdW5kQ29sb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gYXNTdHJpbmcodGhpcy5vcHRpb25zLmJhY2tncm91bmRDb2xvcik7XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMub3B0aW9ucy53aWR0aCAqIHRoaXMub3B0aW9ucy5zY2FsZSwgdGhpcy5vcHRpb25zLmhlaWdodCAqIHRoaXMub3B0aW9ucy5zY2FsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoaW1nLCAtdGhpcy5vcHRpb25zLnggKiB0aGlzLm9wdGlvbnMuc2NhbGUsIC10aGlzLm9wdGlvbnMueSAqIHRoaXMub3B0aW9ucy5zY2FsZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbnZhcztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGxvYWRTZXJpYWxpemVkU1ZHID0gKHN2ZzogTm9kZSk6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4gPT5cclxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGltZyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpbWcub25lcnJvciA9IHJlamVjdDtcclxuXHJcbiAgICAgICAgaW1nLnNyYyA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwke2VuY29kZVVSSUNvbXBvbmVudChuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKHN2ZykpfWA7XHJcbiAgICB9KTtcclxuIiwiZXhwb3J0IGludGVyZmFjZSBMb2dnZXJPcHRpb25zIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBlbmFibGVkOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTG9nZ2VyIHtcclxuICAgIHN0YXRpYyBpbnN0YW5jZXM6IHtba2V5OiBzdHJpbmddOiBMb2dnZXJ9ID0ge307XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpZDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGFydDogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHtpZCwgZW5hYmxlZH06IExvZ2dlck9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLmlkID0gaWQ7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZW5hYmxlZDtcclxuICAgICAgICB0aGlzLnN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgZGVidWcoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgdHlwZW9mIGNvbnNvbGUuZGVidWcgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKHRoaXMuaWQsIGAke3RoaXMuZ2V0VGltZSgpfW1zYCwgLi4uYXJncyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluZm8oLi4uYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGltZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgaW5mbyguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiB0eXBlb2YgY29uc29sZS5pbmZvID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKHRoaXMuaWQsIGAke3RoaXMuZ2V0VGltZSgpfW1zYCwgLi4uYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIHdhcm4oLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNvbnNvbGUgJiYgdHlwZW9mIGNvbnNvbGUud2FybiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybih0aGlzLmlkLCBgJHt0aGlzLmdldFRpbWUoKX1tc2AsIC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbmZvKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBlcnJvciguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IodGhpcy5pZCwgYCR7dGhpcy5nZXRUaW1lKCl9bXNgLCAuLi5hcmdzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5mbyguLi5hcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0xvZ2dlcn0gZnJvbSAnLi9sb2dnZXInO1xyXG5pbXBvcnQge0NhY2hlLCBSZXNvdXJjZU9wdGlvbnN9IGZyb20gJy4vY2FjaGUtc3RvcmFnZSc7XHJcbmltcG9ydCB7Qm91bmRzfSBmcm9tICcuLi9jc3MvbGF5b3V0L2JvdW5kcyc7XHJcblxyXG5leHBvcnQgdHlwZSBDb250ZXh0T3B0aW9ucyA9IHtcclxuICAgIGxvZ2dpbmc6IGJvb2xlYW47XHJcbiAgICBjYWNoZT86IENhY2hlO1xyXG59ICYgUmVzb3VyY2VPcHRpb25zO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbnRleHQge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZU5hbWUgPSBgIyR7Q29udGV4dC5pbnN0YW5jZUNvdW50Kyt9YDtcclxuICAgIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyO1xyXG4gICAgcmVhZG9ubHkgY2FjaGU6IENhY2hlO1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlQ291bnQgPSAxO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbnRleHRPcHRpb25zLCBwdWJsaWMgd2luZG93Qm91bmRzOiBCb3VuZHMpIHtcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIoe2lkOiB0aGlzLmluc3RhbmNlTmFtZSwgZW5hYmxlZDogb3B0aW9ucy5sb2dnaW5nfSk7XHJcbiAgICAgICAgdGhpcy5jYWNoZSA9IG9wdGlvbnMuY2FjaGUgPz8gbmV3IENhY2hlKHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Qm91bmRzLCBwYXJzZUJvdW5kcywgcGFyc2VEb2N1bWVudFNpemV9IGZyb20gJy4vY3NzL2xheW91dC9ib3VuZHMnO1xyXG5pbXBvcnQge0NPTE9SUywgaXNUcmFuc3BhcmVudCwgcGFyc2VDb2xvcn0gZnJvbSAnLi9jc3MvdHlwZXMvY29sb3InO1xyXG5pbXBvcnQge0Nsb25lQ29uZmlndXJhdGlvbnMsIENsb25lT3B0aW9ucywgRG9jdW1lbnRDbG9uZXIsIFdpbmRvd09wdGlvbnN9IGZyb20gJy4vZG9tL2RvY3VtZW50LWNsb25lcic7XHJcbmltcG9ydCB7aXNCb2R5RWxlbWVudCwgaXNIVE1MRWxlbWVudCwgcGFyc2VUcmVlfSBmcm9tICcuL2RvbS9ub2RlLXBhcnNlcic7XHJcbmltcG9ydCB7Q2FjaGVTdG9yYWdlfSBmcm9tICcuL2NvcmUvY2FjaGUtc3RvcmFnZSc7XHJcbmltcG9ydCB7Q2FudmFzUmVuZGVyZXIsIFJlbmRlckNvbmZpZ3VyYXRpb25zLCBSZW5kZXJPcHRpb25zfSBmcm9tICcuL3JlbmRlci9jYW52YXMvY2FudmFzLXJlbmRlcmVyJztcclxuaW1wb3J0IHtGb3JlaWduT2JqZWN0UmVuZGVyZXJ9IGZyb20gJy4vcmVuZGVyL2NhbnZhcy9mb3JlaWdub2JqZWN0LXJlbmRlcmVyJztcclxuaW1wb3J0IHtDb250ZXh0LCBDb250ZXh0T3B0aW9uc30gZnJvbSAnLi9jb3JlL2NvbnRleHQnO1xyXG5cclxuZXhwb3J0IHR5cGUgT3B0aW9ucyA9IENsb25lT3B0aW9ucyAmXHJcbiAgICBXaW5kb3dPcHRpb25zICZcclxuICAgIFJlbmRlck9wdGlvbnMgJlxyXG4gICAgQ29udGV4dE9wdGlvbnMgJiB7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgIGZvcmVpZ25PYmplY3RSZW5kZXJpbmc6IGJvb2xlYW47XHJcbiAgICAgICAgcmVtb3ZlQ29udGFpbmVyPzogYm9vbGVhbjtcclxuICAgIH07XHJcblxyXG5jb25zdCBodG1sMmNhbnZhcyA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgb3B0aW9uczogUGFydGlhbDxPcHRpb25zPiA9IHt9KTogUHJvbWlzZTxIVE1MQ2FudmFzRWxlbWVudD4gPT4ge1xyXG4gICAgcmV0dXJuIHJlbmRlckVsZW1lbnQoZWxlbWVudCwgb3B0aW9ucyk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBodG1sMmNhbnZhcztcclxuXHJcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgQ2FjaGVTdG9yYWdlLnNldENvbnRleHQod2luZG93KTtcclxufVxyXG5cclxuY29uc3QgcmVuZGVyRWxlbWVudCA9IGFzeW5jIChlbGVtZW50OiBIVE1MRWxlbWVudCwgb3B0czogUGFydGlhbDxPcHRpb25zPik6IFByb21pc2U8SFRNTENhbnZhc0VsZW1lbnQ+ID0+IHtcclxuICAgIGlmICghZWxlbWVudCB8fCB0eXBlb2YgZWxlbWVudCAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ0ludmFsaWQgZWxlbWVudCBwcm92aWRlZCBhcyBmaXJzdCBhcmd1bWVudCcpO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb3duZXJEb2N1bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcclxuXHJcbiAgICBpZiAoIW93bmVyRG9jdW1lbnQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVsZW1lbnQgaXMgbm90IGF0dGFjaGVkIHRvIGEgRG9jdW1lbnRgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkZWZhdWx0VmlldyA9IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XHJcblxyXG4gICAgaWYgKCFkZWZhdWx0Vmlldykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRG9jdW1lbnQgaXMgbm90IGF0dGFjaGVkIHRvIGEgV2luZG93YCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzb3VyY2VPcHRpb25zID0ge1xyXG4gICAgICAgIGFsbG93VGFpbnQ6IG9wdHMuYWxsb3dUYWludCA/PyBmYWxzZSxcclxuICAgICAgICBpbWFnZVRpbWVvdXQ6IG9wdHMuaW1hZ2VUaW1lb3V0ID8/IDE1MDAwLFxyXG4gICAgICAgIHByb3h5OiBvcHRzLnByb3h5LFxyXG4gICAgICAgIHVzZUNPUlM6IG9wdHMudXNlQ09SUyA/PyBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBjb250ZXh0T3B0aW9ucyA9IHtcclxuICAgICAgICBsb2dnaW5nOiBvcHRzLmxvZ2dpbmcgPz8gdHJ1ZSxcclxuICAgICAgICBjYWNoZTogb3B0cy5jYWNoZSxcclxuICAgICAgICAuLi5yZXNvdXJjZU9wdGlvbnNcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgd2luZG93T3B0aW9ucyA9IHtcclxuICAgICAgICB3aW5kb3dXaWR0aDogb3B0cy53aW5kb3dXaWR0aCA/PyBkZWZhdWx0Vmlldy5pbm5lcldpZHRoLFxyXG4gICAgICAgIHdpbmRvd0hlaWdodDogb3B0cy53aW5kb3dIZWlnaHQgPz8gZGVmYXVsdFZpZXcuaW5uZXJIZWlnaHQsXHJcbiAgICAgICAgc2Nyb2xsWDogb3B0cy5zY3JvbGxYID8/IGRlZmF1bHRWaWV3LnBhZ2VYT2Zmc2V0LFxyXG4gICAgICAgIHNjcm9sbFk6IG9wdHMuc2Nyb2xsWSA/PyBkZWZhdWx0Vmlldy5wYWdlWU9mZnNldFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB3aW5kb3dCb3VuZHMgPSBuZXcgQm91bmRzKFxyXG4gICAgICAgIHdpbmRvd09wdGlvbnMuc2Nyb2xsWCxcclxuICAgICAgICB3aW5kb3dPcHRpb25zLnNjcm9sbFksXHJcbiAgICAgICAgd2luZG93T3B0aW9ucy53aW5kb3dXaWR0aCxcclxuICAgICAgICB3aW5kb3dPcHRpb25zLndpbmRvd0hlaWdodFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjb250ZXh0ID0gbmV3IENvbnRleHQoY29udGV4dE9wdGlvbnMsIHdpbmRvd0JvdW5kcyk7XHJcblxyXG4gICAgY29uc3QgZm9yZWlnbk9iamVjdFJlbmRlcmluZyA9IG9wdHMuZm9yZWlnbk9iamVjdFJlbmRlcmluZyA/PyBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBjbG9uZU9wdGlvbnM6IENsb25lQ29uZmlndXJhdGlvbnMgPSB7XHJcbiAgICAgICAgYWxsb3dUYWludDogb3B0cy5hbGxvd1RhaW50ID8/IGZhbHNlLFxyXG4gICAgICAgIG9uY2xvbmU6IG9wdHMub25jbG9uZSxcclxuICAgICAgICBpZ25vcmVFbGVtZW50czogb3B0cy5pZ25vcmVFbGVtZW50cyxcclxuICAgICAgICBpbmxpbmVJbWFnZXM6IGZvcmVpZ25PYmplY3RSZW5kZXJpbmcsXHJcbiAgICAgICAgY29weVN0eWxlczogZm9yZWlnbk9iamVjdFJlbmRlcmluZ1xyXG4gICAgfTtcclxuXHJcbiAgICBjb250ZXh0LmxvZ2dlci5kZWJ1ZyhcclxuICAgICAgICBgU3RhcnRpbmcgZG9jdW1lbnQgY2xvbmUgd2l0aCBzaXplICR7d2luZG93Qm91bmRzLndpZHRofXgke1xyXG4gICAgICAgICAgICB3aW5kb3dCb3VuZHMuaGVpZ2h0XHJcbiAgICAgICAgfSBzY3JvbGxlZCB0byAkey13aW5kb3dCb3VuZHMubGVmdH0sJHstd2luZG93Qm91bmRzLnRvcH1gXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGRvY3VtZW50Q2xvbmVyID0gbmV3IERvY3VtZW50Q2xvbmVyKGNvbnRleHQsIGVsZW1lbnQsIGNsb25lT3B0aW9ucyk7XHJcbiAgICBjb25zdCBjbG9uZWRFbGVtZW50ID0gZG9jdW1lbnRDbG9uZXIuY2xvbmVkUmVmZXJlbmNlRWxlbWVudDtcclxuICAgIGlmICghY2xvbmVkRWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgVW5hYmxlIHRvIGZpbmQgZWxlbWVudCBpbiBjbG9uZWQgaWZyYW1lYCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGFpbmVyID0gYXdhaXQgZG9jdW1lbnRDbG9uZXIudG9JRnJhbWUob3duZXJEb2N1bWVudCwgd2luZG93Qm91bmRzKTtcclxuXHJcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wfSA9XHJcbiAgICAgICAgaXNCb2R5RWxlbWVudChjbG9uZWRFbGVtZW50KSB8fCBpc0hUTUxFbGVtZW50KGNsb25lZEVsZW1lbnQpXHJcbiAgICAgICAgICAgID8gcGFyc2VEb2N1bWVudFNpemUoY2xvbmVkRWxlbWVudC5vd25lckRvY3VtZW50KVxyXG4gICAgICAgICAgICA6IHBhcnNlQm91bmRzKGNvbnRleHQsIGNsb25lZEVsZW1lbnQpO1xyXG5cclxuICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHBhcnNlQmFja2dyb3VuZENvbG9yKGNvbnRleHQsIGNsb25lZEVsZW1lbnQsIG9wdHMuYmFja2dyb3VuZENvbG9yKTtcclxuXHJcbiAgICBjb25zdCByZW5kZXJPcHRpb25zOiBSZW5kZXJDb25maWd1cmF0aW9ucyA9IHtcclxuICAgICAgICBjYW52YXM6IG9wdHMuY2FudmFzLFxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcixcclxuICAgICAgICBzY2FsZTogb3B0cy5zY2FsZSA/PyBkZWZhdWx0Vmlldy5kZXZpY2VQaXhlbFJhdGlvID8/IDEsXHJcbiAgICAgICAgeDogKG9wdHMueCA/PyAwKSArIGxlZnQsXHJcbiAgICAgICAgeTogKG9wdHMueSA/PyAwKSArIHRvcCxcclxuICAgICAgICB3aWR0aDogb3B0cy53aWR0aCA/PyBNYXRoLmNlaWwod2lkdGgpLFxyXG4gICAgICAgIGhlaWdodDogb3B0cy5oZWlnaHQgPz8gTWF0aC5jZWlsKGhlaWdodClcclxuICAgIH07XHJcblxyXG4gICAgbGV0IGNhbnZhcztcclxuXHJcbiAgICBpZiAoZm9yZWlnbk9iamVjdFJlbmRlcmluZykge1xyXG4gICAgICAgIGNvbnRleHQubG9nZ2VyLmRlYnVnKGBEb2N1bWVudCBjbG9uZWQsIHVzaW5nIGZvcmVpZ24gb2JqZWN0IHJlbmRlcmluZ2ApO1xyXG4gICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IEZvcmVpZ25PYmplY3RSZW5kZXJlcihjb250ZXh0LCByZW5kZXJPcHRpb25zKTtcclxuICAgICAgICBjYW52YXMgPSBhd2FpdCByZW5kZXJlci5yZW5kZXIoY2xvbmVkRWxlbWVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRleHQubG9nZ2VyLmRlYnVnKFxyXG4gICAgICAgICAgICBgRG9jdW1lbnQgY2xvbmVkLCBlbGVtZW50IGxvY2F0ZWQgYXQgJHtsZWZ0fSwke3RvcH0gd2l0aCBzaXplICR7d2lkdGh9eCR7aGVpZ2h0fSB1c2luZyBjb21wdXRlZCByZW5kZXJpbmdgXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29udGV4dC5sb2dnZXIuZGVidWcoYFN0YXJ0aW5nIERPTSBwYXJzaW5nYCk7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHBhcnNlVHJlZShjb250ZXh0LCBjbG9uZWRFbGVtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvciA9PT0gcm9vdC5zdHlsZXMuYmFja2dyb3VuZENvbG9yKSB7XHJcbiAgICAgICAgICAgIHJvb3Quc3R5bGVzLmJhY2tncm91bmRDb2xvciA9IENPTE9SUy5UUkFOU1BBUkVOVDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRleHQubG9nZ2VyLmRlYnVnKFxyXG4gICAgICAgICAgICBgU3RhcnRpbmcgcmVuZGVyZXIgZm9yIGVsZW1lbnQgYXQgJHtyZW5kZXJPcHRpb25zLnh9LCR7cmVuZGVyT3B0aW9ucy55fSB3aXRoIHNpemUgJHtyZW5kZXJPcHRpb25zLndpZHRofXgke3JlbmRlck9wdGlvbnMuaGVpZ2h0fWBcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCByZW5kZXJlciA9IG5ldyBDYW52YXNSZW5kZXJlcihjb250ZXh0LCByZW5kZXJPcHRpb25zKTtcclxuICAgICAgICBjYW52YXMgPSBhd2FpdCByZW5kZXJlci5yZW5kZXIocm9vdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdHMucmVtb3ZlQ29udGFpbmVyID8/IHRydWUpIHtcclxuICAgICAgICBpZiAoIURvY3VtZW50Q2xvbmVyLmRlc3Ryb3koY29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICBjb250ZXh0LmxvZ2dlci5lcnJvcihgQ2Fubm90IGRldGFjaCBjbG9uZWQgaWZyYW1lIGFzIGl0IGlzIG5vdCBpbiB0aGUgRE9NIGFueW1vcmVgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29udGV4dC5sb2dnZXIuZGVidWcoYEZpbmlzaGVkIHJlbmRlcmluZ2ApO1xyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufTtcclxuXHJcbmNvbnN0IHBhcnNlQmFja2dyb3VuZENvbG9yID0gKGNvbnRleHQ6IENvbnRleHQsIGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBiYWNrZ3JvdW5kQ29sb3JPdmVycmlkZT86IHN0cmluZyB8IG51bGwpID0+IHtcclxuICAgIGNvbnN0IG93bmVyRG9jdW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XHJcbiAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWJhY2tncm91bmQvI3NwZWNpYWwtYmFja2dyb3VuZHNcclxuICAgIGNvbnN0IGRvY3VtZW50QmFja2dyb3VuZENvbG9yID0gb3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcclxuICAgICAgICA/IHBhcnNlQ29sb3IoY29udGV4dCwgZ2V0Q29tcHV0ZWRTdHlsZShvd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuYmFja2dyb3VuZENvbG9yIGFzIHN0cmluZylcclxuICAgICAgICA6IENPTE9SUy5UUkFOU1BBUkVOVDtcclxuICAgIGNvbnN0IGJvZHlCYWNrZ3JvdW5kQ29sb3IgPSBvd25lckRvY3VtZW50LmJvZHlcclxuICAgICAgICA/IHBhcnNlQ29sb3IoY29udGV4dCwgZ2V0Q29tcHV0ZWRTdHlsZShvd25lckRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvciBhcyBzdHJpbmcpXHJcbiAgICAgICAgOiBDT0xPUlMuVFJBTlNQQVJFTlQ7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdEJhY2tncm91bmRDb2xvciA9XHJcbiAgICAgICAgdHlwZW9mIGJhY2tncm91bmRDb2xvck92ZXJyaWRlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgICA/IHBhcnNlQ29sb3IoY29udGV4dCwgYmFja2dyb3VuZENvbG9yT3ZlcnJpZGUpXHJcbiAgICAgICAgICAgIDogYmFja2dyb3VuZENvbG9yT3ZlcnJpZGUgPT09IG51bGxcclxuICAgICAgICAgICAgPyBDT0xPUlMuVFJBTlNQQVJFTlRcclxuICAgICAgICAgICAgOiAweGZmZmZmZmZmO1xyXG5cclxuICAgIHJldHVybiBlbGVtZW50ID09PSBvd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxyXG4gICAgICAgID8gaXNUcmFuc3BhcmVudChkb2N1bWVudEJhY2tncm91bmRDb2xvcilcclxuICAgICAgICAgICAgPyBpc1RyYW5zcGFyZW50KGJvZHlCYWNrZ3JvdW5kQ29sb3IpXHJcbiAgICAgICAgICAgICAgICA/IGRlZmF1bHRCYWNrZ3JvdW5kQ29sb3JcclxuICAgICAgICAgICAgICAgIDogYm9keUJhY2tncm91bmRDb2xvclxyXG4gICAgICAgICAgICA6IGRvY3VtZW50QmFja2dyb3VuZENvbG9yXHJcbiAgICAgICAgOiBkZWZhdWx0QmFja2dyb3VuZENvbG9yO1xyXG59O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@karankeswani99/html2canvas/dist/html2canvas.js\n")},"./node_modules/es6-promise/auto.js":function(){"use strict";eval("// This file can be required in Browserify and Node.js for automatic polyfill\n// To use it:  require('es6-promise/auto');\n\nmodule.exports = __webpack_require__(/*! ./ */ \"./node_modules/es6-promise/dist/es6-promise.js\").polyfill();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXM2LXByb21pc2UvYXV0by5qcz8wODIwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLDBEQUFJIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2VzNi1wcm9taXNlL2F1dG8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgY2FuIGJlIHJlcXVpcmVkIGluIEJyb3dzZXJpZnkgYW5kIE5vZGUuanMgZm9yIGF1dG9tYXRpYyBwb2x5ZmlsbFxuLy8gVG8gdXNlIGl0OiAgcmVxdWlyZSgnZXM2LXByb21pc2UvYXV0bycpO1xuJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLycpLnBvbHlmaWxsKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/es6-promise/auto.js\n")},"./node_modules/es6-promise/dist/es6-promise.js":function(){eval("/* WEBPACK VAR INJECTION */(function(process, global) {/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license   Licensed under MIT license\n *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version   v4.2.8+1e68dce6\n */\n\n(function (global, factory) {\n\t true ? module.exports = factory() :\n\tundefined;\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n  var type = typeof x;\n  return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n  return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n  _isArray = Array.isArray;\n} else {\n  _isArray = function (x) {\n    return Object.prototype.toString.call(x) === '[object Array]';\n  };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n  queue[len] = callback;\n  queue[len + 1] = arg;\n  len += 2;\n  if (len === 2) {\n    // If len is 2, that means that we need to schedule an async flush.\n    // If additional callbacks are queued before the queue is flushed, they\n    // will be processed by this flush that we are scheduling.\n    if (customSchedulerFn) {\n      customSchedulerFn(flush);\n    } else {\n      scheduleFlush();\n    }\n  }\n};\n\nfunction setScheduler(scheduleFn) {\n  customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n  asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n  // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n  // see https://github.com/cujojs/when/issues/410 for details\n  return function () {\n    return process.nextTick(flush);\n  };\n}\n\n// vertx\nfunction useVertxTimer() {\n  if (typeof vertxNext !== 'undefined') {\n    return function () {\n      vertxNext(flush);\n    };\n  }\n\n  return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n  var iterations = 0;\n  var observer = new BrowserMutationObserver(flush);\n  var node = document.createTextNode('');\n  observer.observe(node, { characterData: true });\n\n  return function () {\n    node.data = iterations = ++iterations % 2;\n  };\n}\n\n// web worker\nfunction useMessageChannel() {\n  var channel = new MessageChannel();\n  channel.port1.onmessage = flush;\n  return function () {\n    return channel.port2.postMessage(0);\n  };\n}\n\nfunction useSetTimeout() {\n  // Store setTimeout reference so es6-promise will be unaffected by\n  // other code modifying setTimeout (like sinon.useFakeTimers())\n  var globalSetTimeout = setTimeout;\n  return function () {\n    return globalSetTimeout(flush, 1);\n  };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n  for (var i = 0; i < len; i += 2) {\n    var callback = queue[i];\n    var arg = queue[i + 1];\n\n    callback(arg);\n\n    queue[i] = undefined;\n    queue[i + 1] = undefined;\n  }\n\n  len = 0;\n}\n\nfunction attemptVertx() {\n  try {\n    var vertx = Function('return this')().require('vertx');\n    vertxNext = vertx.runOnLoop || vertx.runOnContext;\n    return useVertxTimer();\n  } catch (e) {\n    return useSetTimeout();\n  }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n  scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n  scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n  scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && \"function\" === 'function') {\n  scheduleFlush = attemptVertx();\n} else {\n  scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n  var parent = this;\n\n  var child = new this.constructor(noop);\n\n  if (child[PROMISE_ID] === undefined) {\n    makePromise(child);\n  }\n\n  var _state = parent._state;\n\n\n  if (_state) {\n    var callback = arguments[_state - 1];\n    asap(function () {\n      return invokeCallback(_state, child, callback, parent._result);\n    });\n  } else {\n    subscribe(parent, child, onFulfillment, onRejection);\n  }\n\n  return child;\n}\n\n/**\n  `Promise.resolve` returns a promise that will become resolved with the\n  passed `value`. It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    resolve(1);\n  });\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.resolve(1);\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  @method resolve\n  @static\n  @param {Any} value value that the returned promise will be resolved with\n  Useful for tooling.\n  @return {Promise} a promise that will become fulfilled with the given\n  `value`\n*/\nfunction resolve$1(object) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (object && typeof object === 'object' && object.constructor === Constructor) {\n    return object;\n  }\n\n  var promise = new Constructor(noop);\n  resolve(promise, object);\n  return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n  return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n  return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n  try {\n    then$$1.call(value, fulfillmentHandler, rejectionHandler);\n  } catch (e) {\n    return e;\n  }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n  asap(function (promise) {\n    var sealed = false;\n    var error = tryThen(then$$1, thenable, function (value) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n      if (thenable !== value) {\n        resolve(promise, value);\n      } else {\n        fulfill(promise, value);\n      }\n    }, function (reason) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n\n      reject(promise, reason);\n    }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n    if (!sealed && error) {\n      sealed = true;\n      reject(promise, error);\n    }\n  }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n  if (thenable._state === FULFILLED) {\n    fulfill(promise, thenable._result);\n  } else if (thenable._state === REJECTED) {\n    reject(promise, thenable._result);\n  } else {\n    subscribe(thenable, undefined, function (value) {\n      return resolve(promise, value);\n    }, function (reason) {\n      return reject(promise, reason);\n    });\n  }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n  if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n    handleOwnThenable(promise, maybeThenable);\n  } else {\n    if (then$$1 === undefined) {\n      fulfill(promise, maybeThenable);\n    } else if (isFunction(then$$1)) {\n      handleForeignThenable(promise, maybeThenable, then$$1);\n    } else {\n      fulfill(promise, maybeThenable);\n    }\n  }\n}\n\nfunction resolve(promise, value) {\n  if (promise === value) {\n    reject(promise, selfFulfillment());\n  } else if (objectOrFunction(value)) {\n    var then$$1 = void 0;\n    try {\n      then$$1 = value.then;\n    } catch (error) {\n      reject(promise, error);\n      return;\n    }\n    handleMaybeThenable(promise, value, then$$1);\n  } else {\n    fulfill(promise, value);\n  }\n}\n\nfunction publishRejection(promise) {\n  if (promise._onerror) {\n    promise._onerror(promise._result);\n  }\n\n  publish(promise);\n}\n\nfunction fulfill(promise, value) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n\n  promise._result = value;\n  promise._state = FULFILLED;\n\n  if (promise._subscribers.length !== 0) {\n    asap(publish, promise);\n  }\n}\n\nfunction reject(promise, reason) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n  promise._state = REJECTED;\n  promise._result = reason;\n\n  asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n  var _subscribers = parent._subscribers;\n  var length = _subscribers.length;\n\n\n  parent._onerror = null;\n\n  _subscribers[length] = child;\n  _subscribers[length + FULFILLED] = onFulfillment;\n  _subscribers[length + REJECTED] = onRejection;\n\n  if (length === 0 && parent._state) {\n    asap(publish, parent);\n  }\n}\n\nfunction publish(promise) {\n  var subscribers = promise._subscribers;\n  var settled = promise._state;\n\n  if (subscribers.length === 0) {\n    return;\n  }\n\n  var child = void 0,\n      callback = void 0,\n      detail = promise._result;\n\n  for (var i = 0; i < subscribers.length; i += 3) {\n    child = subscribers[i];\n    callback = subscribers[i + settled];\n\n    if (child) {\n      invokeCallback(settled, child, callback, detail);\n    } else {\n      callback(detail);\n    }\n  }\n\n  promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n  var hasCallback = isFunction(callback),\n      value = void 0,\n      error = void 0,\n      succeeded = true;\n\n  if (hasCallback) {\n    try {\n      value = callback(detail);\n    } catch (e) {\n      succeeded = false;\n      error = e;\n    }\n\n    if (promise === value) {\n      reject(promise, cannotReturnOwn());\n      return;\n    }\n  } else {\n    value = detail;\n  }\n\n  if (promise._state !== PENDING) {\n    // noop\n  } else if (hasCallback && succeeded) {\n    resolve(promise, value);\n  } else if (succeeded === false) {\n    reject(promise, error);\n  } else if (settled === FULFILLED) {\n    fulfill(promise, value);\n  } else if (settled === REJECTED) {\n    reject(promise, value);\n  }\n}\n\nfunction initializePromise(promise, resolver) {\n  try {\n    resolver(function resolvePromise(value) {\n      resolve(promise, value);\n    }, function rejectPromise(reason) {\n      reject(promise, reason);\n    });\n  } catch (e) {\n    reject(promise, e);\n  }\n}\n\nvar id = 0;\nfunction nextId() {\n  return id++;\n}\n\nfunction makePromise(promise) {\n  promise[PROMISE_ID] = id++;\n  promise._state = undefined;\n  promise._result = undefined;\n  promise._subscribers = [];\n}\n\nfunction validationError() {\n  return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n  function Enumerator(Constructor, input) {\n    this._instanceConstructor = Constructor;\n    this.promise = new Constructor(noop);\n\n    if (!this.promise[PROMISE_ID]) {\n      makePromise(this.promise);\n    }\n\n    if (isArray(input)) {\n      this.length = input.length;\n      this._remaining = input.length;\n\n      this._result = new Array(this.length);\n\n      if (this.length === 0) {\n        fulfill(this.promise, this._result);\n      } else {\n        this.length = this.length || 0;\n        this._enumerate(input);\n        if (this._remaining === 0) {\n          fulfill(this.promise, this._result);\n        }\n      }\n    } else {\n      reject(this.promise, validationError());\n    }\n  }\n\n  Enumerator.prototype._enumerate = function _enumerate(input) {\n    for (var i = 0; this._state === PENDING && i < input.length; i++) {\n      this._eachEntry(input[i], i);\n    }\n  };\n\n  Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n    var c = this._instanceConstructor;\n    var resolve$$1 = c.resolve;\n\n\n    if (resolve$$1 === resolve$1) {\n      var _then = void 0;\n      var error = void 0;\n      var didError = false;\n      try {\n        _then = entry.then;\n      } catch (e) {\n        didError = true;\n        error = e;\n      }\n\n      if (_then === then && entry._state !== PENDING) {\n        this._settledAt(entry._state, i, entry._result);\n      } else if (typeof _then !== 'function') {\n        this._remaining--;\n        this._result[i] = entry;\n      } else if (c === Promise$1) {\n        var promise = new c(noop);\n        if (didError) {\n          reject(promise, error);\n        } else {\n          handleMaybeThenable(promise, entry, _then);\n        }\n        this._willSettleAt(promise, i);\n      } else {\n        this._willSettleAt(new c(function (resolve$$1) {\n          return resolve$$1(entry);\n        }), i);\n      }\n    } else {\n      this._willSettleAt(resolve$$1(entry), i);\n    }\n  };\n\n  Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n    var promise = this.promise;\n\n\n    if (promise._state === PENDING) {\n      this._remaining--;\n\n      if (state === REJECTED) {\n        reject(promise, value);\n      } else {\n        this._result[i] = value;\n      }\n    }\n\n    if (this._remaining === 0) {\n      fulfill(promise, this._result);\n    }\n  };\n\n  Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n    var enumerator = this;\n\n    subscribe(promise, undefined, function (value) {\n      return enumerator._settledAt(FULFILLED, i, value);\n    }, function (reason) {\n      return enumerator._settledAt(REJECTED, i, reason);\n    });\n  };\n\n  return Enumerator;\n}();\n\n/**\n  `Promise.all` accepts an array of promises, and returns a new promise which\n  is fulfilled with an array of fulfillment values for the passed promises, or\n  rejected with the reason of the first passed promise to be rejected. It casts all\n  elements of the passed iterable to promises as it runs this algorithm.\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = resolve(2);\n  let promise3 = resolve(3);\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // The array here would be [ 1, 2, 3 ];\n  });\n  ```\n\n  If any of the `promises` given to `all` are rejected, the first promise\n  that is rejected will be given as an argument to the returned promises's\n  rejection handler. For example:\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = reject(new Error(\"2\"));\n  let promise3 = reject(new Error(\"3\"));\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // Code here never runs because there are rejected promises!\n  }, function(error) {\n    // error.message === \"2\"\n  });\n  ```\n\n  @method all\n  @static\n  @param {Array} entries array of promises\n  @param {String} label optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise} promise that is fulfilled when all `promises` have been\n  fulfilled, or rejected if any of them become rejected.\n  @static\n*/\nfunction all(entries) {\n  return new Enumerator(this, entries).promise;\n}\n\n/**\n  `Promise.race` returns a new promise which is settled in the same way as the\n  first passed promise to settle.\n\n  Example:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 2');\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // result === 'promise 2' because it was resolved before promise1\n    // was resolved.\n  });\n  ```\n\n  `Promise.race` is deterministic in that only the state of the first\n  settled promise matters. For example, even if other promises given to the\n  `promises` array argument are resolved, but the first settled promise has\n  become rejected before the other promises became fulfilled, the returned\n  promise will become rejected:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      reject(new Error('promise 2'));\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // Code here never runs\n  }, function(reason){\n    // reason.message === 'promise 2' because promise 2 became rejected before\n    // promise 1 became fulfilled\n  });\n  ```\n\n  An example real-world use case is implementing timeouts:\n\n  ```javascript\n  Promise.race([ajax('foo.json'), timeout(5000)])\n  ```\n\n  @method race\n  @static\n  @param {Array} promises array of promises to observe\n  Useful for tooling.\n  @return {Promise} a promise which settles in the same way as the first passed\n  promise to settle.\n*/\nfunction race(entries) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (!isArray(entries)) {\n    return new Constructor(function (_, reject) {\n      return reject(new TypeError('You must pass an array to race.'));\n    });\n  } else {\n    return new Constructor(function (resolve, reject) {\n      var length = entries.length;\n      for (var i = 0; i < length; i++) {\n        Constructor.resolve(entries[i]).then(resolve, reject);\n      }\n    });\n  }\n}\n\n/**\n  `Promise.reject` returns a promise rejected with the passed `reason`.\n  It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    reject(new Error('WHOOPS'));\n  });\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.reject(new Error('WHOOPS'));\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  @method reject\n  @static\n  @param {Any} reason value that the returned promise will be rejected with.\n  Useful for tooling.\n  @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n  /*jshint validthis:true */\n  var Constructor = this;\n  var promise = new Constructor(noop);\n  reject(promise, reason);\n  return promise;\n}\n\nfunction needsResolver() {\n  throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n  throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n  Promise objects represent the eventual result of an asynchronous operation. The\n  primary way of interacting with a promise is through its `then` method, which\n  registers callbacks to receive either a promise's eventual value or the reason\n  why the promise cannot be fulfilled.\n\n  Terminology\n  -----------\n\n  - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n  - `thenable` is an object or function that defines a `then` method.\n  - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n  - `exception` is a value that is thrown using the throw statement.\n  - `reason` is a value that indicates why a promise was rejected.\n  - `settled` the final resting state of a promise, fulfilled or rejected.\n\n  A promise can be in one of three states: pending, fulfilled, or rejected.\n\n  Promises that are fulfilled have a fulfillment value and are in the fulfilled\n  state.  Promises that are rejected have a rejection reason and are in the\n  rejected state.  A fulfillment value is never a thenable.\n\n  Promises can also be said to *resolve* a value.  If this value is also a\n  promise, then the original promise's settled state will match the value's\n  settled state.  So a promise that *resolves* a promise that rejects will\n  itself reject, and a promise that *resolves* a promise that fulfills will\n  itself fulfill.\n\n\n  Basic Usage:\n  ------------\n\n  ```js\n  let promise = new Promise(function(resolve, reject) {\n    // on success\n    resolve(value);\n\n    // on failure\n    reject(reason);\n  });\n\n  promise.then(function(value) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Advanced Usage:\n  ---------------\n\n  Promises shine when abstracting away asynchronous interactions such as\n  `XMLHttpRequest`s.\n\n  ```js\n  function getJSON(url) {\n    return new Promise(function(resolve, reject){\n      let xhr = new XMLHttpRequest();\n\n      xhr.open('GET', url);\n      xhr.onreadystatechange = handler;\n      xhr.responseType = 'json';\n      xhr.setRequestHeader('Accept', 'application/json');\n      xhr.send();\n\n      function handler() {\n        if (this.readyState === this.DONE) {\n          if (this.status === 200) {\n            resolve(this.response);\n          } else {\n            reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n          }\n        }\n      };\n    });\n  }\n\n  getJSON('/posts.json').then(function(json) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Unlike callbacks, promises are great composable primitives.\n\n  ```js\n  Promise.all([\n    getJSON('/posts'),\n    getJSON('/comments')\n  ]).then(function(values){\n    values[0] // => postsJSON\n    values[1] // => commentsJSON\n\n    return values;\n  });\n  ```\n\n  @class Promise\n  @param {Function} resolver\n  Useful for tooling.\n  @constructor\n*/\n\nvar Promise$1 = function () {\n  function Promise(resolver) {\n    this[PROMISE_ID] = nextId();\n    this._result = this._state = undefined;\n    this._subscribers = [];\n\n    if (noop !== resolver) {\n      typeof resolver !== 'function' && needsResolver();\n      this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n    }\n  }\n\n  /**\n  The primary way of interacting with a promise is through its `then` method,\n  which registers callbacks to receive either a promise's eventual value or the\n  reason why the promise cannot be fulfilled.\n   ```js\n  findUser().then(function(user){\n    // user is available\n  }, function(reason){\n    // user is unavailable, and you are given the reason why\n  });\n  ```\n   Chaining\n  --------\n   The return value of `then` is itself a promise.  This second, 'downstream'\n  promise is resolved with the return value of the first promise's fulfillment\n  or rejection handler, or rejected if the handler throws an exception.\n   ```js\n  findUser().then(function (user) {\n    return user.name;\n  }, function (reason) {\n    return 'default name';\n  }).then(function (userName) {\n    // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n    // will be `'default name'`\n  });\n   findUser().then(function (user) {\n    throw new Error('Found user, but still unhappy');\n  }, function (reason) {\n    throw new Error('`findUser` rejected and we're unhappy');\n  }).then(function (value) {\n    // never reached\n  }, function (reason) {\n    // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n    // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n  });\n  ```\n  If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n   ```js\n  findUser().then(function (user) {\n    throw new PedagogicalException('Upstream error');\n  }).then(function (value) {\n    // never reached\n  }).then(function (value) {\n    // never reached\n  }, function (reason) {\n    // The `PedgagocialException` is propagated all the way down to here\n  });\n  ```\n   Assimilation\n  ------------\n   Sometimes the value you want to propagate to a downstream promise can only be\n  retrieved asynchronously. This can be achieved by returning a promise in the\n  fulfillment or rejection handler. The downstream promise will then be pending\n  until the returned promise is settled. This is called *assimilation*.\n   ```js\n  findUser().then(function (user) {\n    return findCommentsByAuthor(user);\n  }).then(function (comments) {\n    // The user's comments are now available\n  });\n  ```\n   If the assimliated promise rejects, then the downstream promise will also reject.\n   ```js\n  findUser().then(function (user) {\n    return findCommentsByAuthor(user);\n  }).then(function (comments) {\n    // If `findCommentsByAuthor` fulfills, we'll have the value here\n  }, function (reason) {\n    // If `findCommentsByAuthor` rejects, we'll have the reason here\n  });\n  ```\n   Simple Example\n  --------------\n   Synchronous Example\n   ```javascript\n  let result;\n   try {\n    result = findResult();\n    // success\n  } catch(reason) {\n    // failure\n  }\n  ```\n   Errback Example\n   ```js\n  findResult(function(result, err){\n    if (err) {\n      // failure\n    } else {\n      // success\n    }\n  });\n  ```\n   Promise Example;\n   ```javascript\n  findResult().then(function(result){\n    // success\n  }, function(reason){\n    // failure\n  });\n  ```\n   Advanced Example\n  --------------\n   Synchronous Example\n   ```javascript\n  let author, books;\n   try {\n    author = findAuthor();\n    books  = findBooksByAuthor(author);\n    // success\n  } catch(reason) {\n    // failure\n  }\n  ```\n   Errback Example\n   ```js\n   function foundBooks(books) {\n   }\n   function failure(reason) {\n   }\n   findAuthor(function(author, err){\n    if (err) {\n      failure(err);\n      // failure\n    } else {\n      try {\n        findBoooksByAuthor(author, function(books, err) {\n          if (err) {\n            failure(err);\n          } else {\n            try {\n              foundBooks(books);\n            } catch(reason) {\n              failure(reason);\n            }\n          }\n        });\n      } catch(error) {\n        failure(err);\n      }\n      // success\n    }\n  });\n  ```\n   Promise Example;\n   ```javascript\n  findAuthor().\n    then(findBooksByAuthor).\n    then(function(books){\n      // found books\n  }).catch(function(reason){\n    // something went wrong\n  });\n  ```\n   @method then\n  @param {Function} onFulfilled\n  @param {Function} onRejected\n  Useful for tooling.\n  @return {Promise}\n  */\n\n  /**\n  `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n  as the catch block of a try/catch statement.\n  ```js\n  function findAuthor(){\n  throw new Error('couldn't find that author');\n  }\n  // synchronous\n  try {\n  findAuthor();\n  } catch(reason) {\n  // something went wrong\n  }\n  // async with promises\n  findAuthor().catch(function(reason){\n  // something went wrong\n  });\n  ```\n  @method catch\n  @param {Function} onRejection\n  Useful for tooling.\n  @return {Promise}\n  */\n\n\n  Promise.prototype.catch = function _catch(onRejection) {\n    return this.then(null, onRejection);\n  };\n\n  /**\n    `finally` will be invoked regardless of the promise's fate just as native\n    try/catch/finally behaves\n  \n    Synchronous example:\n  \n    ```js\n    findAuthor() {\n      if (Math.random() > 0.5) {\n        throw new Error();\n      }\n      return new Author();\n    }\n  \n    try {\n      return findAuthor(); // succeed or fail\n    } catch(error) {\n      return findOtherAuther();\n    } finally {\n      // always runs\n      // doesn't affect the return value\n    }\n    ```\n  \n    Asynchronous example:\n  \n    ```js\n    findAuthor().catch(function(reason){\n      return findOtherAuther();\n    }).finally(function(){\n      // author was either found, or not\n    });\n    ```\n  \n    @method finally\n    @param {Function} callback\n    @return {Promise}\n  */\n\n\n  Promise.prototype.finally = function _finally(callback) {\n    var promise = this;\n    var constructor = promise.constructor;\n\n    if (isFunction(callback)) {\n      return promise.then(function (value) {\n        return constructor.resolve(callback()).then(function () {\n          return value;\n        });\n      }, function (reason) {\n        return constructor.resolve(callback()).then(function () {\n          throw reason;\n        });\n      });\n    }\n\n    return promise.then(callback, callback);\n  };\n\n  return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n  var local = void 0;\n\n  if (typeof global !== 'undefined') {\n    local = global;\n  } else if (typeof self !== 'undefined') {\n    local = self;\n  } else {\n    try {\n      local = Function('return this')();\n    } catch (e) {\n      throw new Error('polyfill failed because global object is unavailable in this environment');\n    }\n  }\n\n  var P = local.Promise;\n\n  if (P) {\n    var promiseToString = null;\n    try {\n      promiseToString = Object.prototype.toString.call(P.resolve());\n    } catch (e) {\n      // silently ignored\n    }\n\n    if (promiseToString === '[object Promise]' && !P.cast) {\n      return;\n    }\n  }\n\n  local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ \"./node_modules/process/browser.js\"), __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vY29uZmlnL3ZlcnNpb25UZW1wbGF0ZS50eHQ/MDk1MCIsIndlYnBhY2s6Ly8vbGliL2VzNi1wcm9taXNlL3V0aWxzLmpzP2ZhYTEiLCJ3ZWJwYWNrOi8vL2xpYi9lczYtcHJvbWlzZS9hc2FwLmpzPzc2N2YiLCJ3ZWJwYWNrOi8vL2xpYi9lczYtcHJvbWlzZS90aGVuLmpzP2JhYzYiLCJ3ZWJwYWNrOi8vL2xpYi9lczYtcHJvbWlzZS9wcm9taXNlL3Jlc29sdmUuanM/MDQwNSIsIndlYnBhY2s6Ly8vbGliL2VzNi1wcm9taXNlLy1pbnRlcm5hbC5qcz9mMWI2Iiwid2VicGFjazovLy9saWIvZXM2LXByb21pc2UvZW51bWVyYXRvci5qcz9hNGJjIiwid2VicGFjazovLy9saWIvZXM2LXByb21pc2UvcHJvbWlzZS9hbGwuanM/YzFhNyIsIndlYnBhY2s6Ly8vbGliL2VzNi1wcm9taXNlL3Byb21pc2UvcmFjZS5qcz8zN2NiIiwid2VicGFjazovLy9saWIvZXM2LXByb21pc2UvcHJvbWlzZS9yZWplY3QuanM/NTFjNyIsIndlYnBhY2s6Ly8vbGliL2VzNi1wcm9taXNlL3Byb21pc2UuanM/NTQwYiIsIndlYnBhY2s6Ly8vbGliL2VzNi1wcm9taXNlL3BvbHlmaWxsLmpzPzAzNTUiLCJ3ZWJwYWNrOi8vL2xpYi9lczYtcHJvbWlzZS5qcz8yZDRlIl0sIm5hbWVzIjpbInJlc29sdmUiLCJfcmVzb2x2ZSIsInRoZW4iLCJvcmlnaW5hbFRoZW4iLCJvcmlnaW5hbFJlc29sdmUiLCJQcm9taXNlIiwicmVqZWN0IiwiX3JlamVjdCIsIlJlc29sdmUiLCJSZWplY3QiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDTk8sU0FBUyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7RUFDbEMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7RUFDcEIsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLElBQUks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QUFJLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDOztFQUV0QixJQUFJLENBQUMsRUFBRTtJQUNMLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztJQUMzQixJQUFJO01BQ0YsZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUMvRCxDQUFDLE9BQU8sQ0FBQyxFQUFFOztLQUVYOztJQUVELElBQUksZUFBZSxLQUFLLGtCQUFrQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtNQUNyRCxPQUFPO0tBQ1I7R0FDRjs7RUFFRCxLQUFLLENBQUMsT0FBTyxHQUFHQSxTQUFPLENBQUM7OztBQzlCMUIsQ0QrQkM7QUM5QkRBLFNBQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzVCQSxTQUFPLENBQUMsT0FBTyxHQUFHQSxTQUFPLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZXM2LXByb21pc2UvZGlzdC9lczYtcHJvbWlzZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQG92ZXJ2aWV3IGVzNi1wcm9taXNlIC0gYSB0aW55IGltcGxlbWVudGF0aW9uIG9mIFByb21pc2VzL0ErLlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMgKENvbnZlcnNpb24gdG8gRVM2IEFQSSBieSBKYWtlIEFyY2hpYmFsZClcbiAqIEBsaWNlbnNlICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2VcbiAqICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGVmYW5wZW5uZXIvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgdjQuMi44KzFlNjhkY2U2XG4gKi9cbiIsImV4cG9ydCBmdW5jdGlvbiBvYmplY3RPckZ1bmN0aW9uKHgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgeDtcbiAgcmV0dXJuIHggIT09IG51bGwgJiYgKHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgPT09ICdmdW5jdGlvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF5YmVUaGVuYWJsZSh4KSB7XG4gIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0Jztcbn1cblxudmFyIF9pc0FycmF5ID0gdm9pZCAwO1xuaWYgKEFycmF5LmlzQXJyYXkpIHtcbiAgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xufSBlbHNlIHtcbiAgX2lzQXJyYXkgPSBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgaXNBcnJheSA9IF9pc0FycmF5OyIsInZhciBsZW4gPSAwO1xudmFyIHZlcnR4TmV4dCA9IHZvaWQgMDtcbnZhciBjdXN0b21TY2hlZHVsZXJGbiA9IHZvaWQgMDtcblxuZXhwb3J0IHZhciBhc2FwID0gZnVuY3Rpb24gYXNhcChjYWxsYmFjaywgYXJnKSB7XG4gIHF1ZXVlW2xlbl0gPSBjYWxsYmFjaztcbiAgcXVldWVbbGVuICsgMV0gPSBhcmc7XG4gIGxlbiArPSAyO1xuICBpZiAobGVuID09PSAyKSB7XG4gICAgLy8gSWYgbGVuIGlzIDIsIHRoYXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHNjaGVkdWxlIGFuIGFzeW5jIGZsdXNoLlxuICAgIC8vIElmIGFkZGl0aW9uYWwgY2FsbGJhY2tzIGFyZSBxdWV1ZWQgYmVmb3JlIHRoZSBxdWV1ZSBpcyBmbHVzaGVkLCB0aGV5XG4gICAgLy8gd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhpcyBmbHVzaCB0aGF0IHdlIGFyZSBzY2hlZHVsaW5nLlxuICAgIGlmIChjdXN0b21TY2hlZHVsZXJGbikge1xuICAgICAgY3VzdG9tU2NoZWR1bGVyRm4oZmx1c2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZUZsdXNoKCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgY3VzdG9tU2NoZWR1bGVyRm4gPSBzY2hlZHVsZUZuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXNhcChhc2FwRm4pIHtcbiAgYXNhcCA9IGFzYXBGbjtcbn1cblxudmFyIGJyb3dzZXJXaW5kb3cgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHVuZGVmaW5lZDtcbnZhciBicm93c2VyR2xvYmFsID0gYnJvd3NlcldpbmRvdyB8fCB7fTtcbnZhciBCcm93c2VyTXV0YXRpb25PYnNlcnZlciA9IGJyb3dzZXJHbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBicm93c2VyR2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgaXNOb2RlID0gdHlwZW9mIHNlbGYgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB7fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG5cbi8vIHRlc3QgZm9yIHdlYiB3b3JrZXIgYnV0IG5vdCBpbiBJRTEwXG52YXIgaXNXb3JrZXIgPSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBub2RlXG5mdW5jdGlvbiB1c2VOZXh0VGljaygpIHtcbiAgLy8gbm9kZSB2ZXJzaW9uIDAuMTAueCBkaXNwbGF5cyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2hlbiBuZXh0VGljayBpcyB1c2VkIHJlY3Vyc2l2ZWx5XG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY3Vqb2pzL3doZW4vaXNzdWVzLzQxMCBmb3IgZGV0YWlsc1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgfTtcbn1cblxuLy8gdmVydHhcbmZ1bmN0aW9uIHVzZVZlcnR4VGltZXIoKSB7XG4gIGlmICh0eXBlb2YgdmVydHhOZXh0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2ZXJ0eE5leHQoZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xufVxuXG5mdW5jdGlvbiB1c2VNdXRhdGlvbk9ic2VydmVyKCkge1xuICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gIHZhciBvYnNlcnZlciA9IG5ldyBCcm93c2VyTXV0YXRpb25PYnNlcnZlcihmbHVzaCk7XG4gIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIG5vZGUuZGF0YSA9IGl0ZXJhdGlvbnMgPSArK2l0ZXJhdGlvbnMgJSAyO1xuICB9O1xufVxuXG4vLyB3ZWIgd29ya2VyXG5mdW5jdGlvbiB1c2VNZXNzYWdlQ2hhbm5lbCgpIHtcbiAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmbHVzaDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgwKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlU2V0VGltZW91dCgpIHtcbiAgLy8gU3RvcmUgc2V0VGltZW91dCByZWZlcmVuY2Ugc28gZXM2LXByb21pc2Ugd2lsbCBiZSB1bmFmZmVjdGVkIGJ5XG4gIC8vIG90aGVyIGNvZGUgbW9kaWZ5aW5nIHNldFRpbWVvdXQgKGxpa2Ugc2lub24udXNlRmFrZVRpbWVycygpKVxuICB2YXIgZ2xvYmFsU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdsb2JhbFNldFRpbWVvdXQoZmx1c2gsIDEpO1xuICB9O1xufVxuXG52YXIgcXVldWUgPSBuZXcgQXJyYXkoMTAwMCk7XG5mdW5jdGlvbiBmbHVzaCgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHZhciBjYWxsYmFjayA9IHF1ZXVlW2ldO1xuICAgIHZhciBhcmcgPSBxdWV1ZVtpICsgMV07XG5cbiAgICBjYWxsYmFjayhhcmcpO1xuXG4gICAgcXVldWVbaV0gPSB1bmRlZmluZWQ7XG4gICAgcXVldWVbaSArIDFdID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGVuID0gMDtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFZlcnR4KCkge1xuICB0cnkge1xuICAgIHZhciB2ZXJ0eCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCkucmVxdWlyZSgndmVydHgnKTtcbiAgICB2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3AgfHwgdmVydHgucnVuT25Db250ZXh0O1xuICAgIHJldHVybiB1c2VWZXJ0eFRpbWVyKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xuICB9XG59XG5cbnZhciBzY2hlZHVsZUZsdXNoID0gdm9pZCAwO1xuLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczpcbmlmIChpc05vZGUpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7XG59IGVsc2UgaWYgKEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG59IGVsc2UgaWYgKGlzV29ya2VyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNzYWdlQ2hhbm5lbCgpO1xufSBlbHNlIGlmIChicm93c2VyV2luZG93ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IGF0dGVtcHRWZXJ0eCgpO1xufSBlbHNlIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRpbWVvdXQoKTtcbn0iLCJpbXBvcnQgeyBpbnZva2VDYWxsYmFjaywgc3Vic2NyaWJlLCBGVUxGSUxMRUQsIFJFSkVDVEVELCBub29wLCBtYWtlUHJvbWlzZSwgUFJPTUlTRV9JRCB9IGZyb20gJy4vLWludGVybmFsJztcblxuaW1wb3J0IHsgYXNhcCB9IGZyb20gJy4vYXNhcCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIHBhcmVudCA9IHRoaXM7XG5cbiAgdmFyIGNoaWxkID0gbmV3IHRoaXMuY29uc3RydWN0b3Iobm9vcCk7XG5cbiAgaWYgKGNoaWxkW1BST01JU0VfSURdID09PSB1bmRlZmluZWQpIHtcbiAgICBtYWtlUHJvbWlzZShjaGlsZCk7XG4gIH1cblxuICB2YXIgX3N0YXRlID0gcGFyZW50Ll9zdGF0ZTtcblxuXG4gIGlmIChfc3RhdGUpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbX3N0YXRlIC0gMV07XG4gICAgYXNhcChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2soX3N0YXRlLCBjaGlsZCwgY2FsbGJhY2ssIHBhcmVudC5fcmVzdWx0KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkO1xufSIsImltcG9ydCB7IG5vb3AsIHJlc29sdmUgYXMgX3Jlc29sdmUgfSBmcm9tICcuLi8taW50ZXJuYWwnO1xuXG4vKipcbiAgYFByb21pc2UucmVzb2x2ZWAgcmV0dXJucyBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSByZXNvbHZlZCB3aXRoIHRoZVxuICBwYXNzZWQgYHZhbHVlYC4gSXQgaXMgc2hvcnRoYW5kIGZvciB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHJlc29sdmUoMSk7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSl7XG4gICAgLy8gdmFsdWUgPT09IDFcbiAgfSk7XG4gIGBgYFxuXG4gIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgYWJvdmUsIHlvdXIgY29kZSBub3cgc2ltcGx5IGJlY29tZXMgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKDEpO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSl7XG4gICAgLy8gdmFsdWUgPT09IDFcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgcmVzb2x2ZVxuICBAc3RhdGljXG4gIEBwYXJhbSB7QW55fSB2YWx1ZSB2YWx1ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aFxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSB0aGF0IHdpbGwgYmVjb21lIGZ1bGZpbGxlZCB3aXRoIHRoZSBnaXZlblxuICBgdmFsdWVgXG4qL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZShvYmplY3QpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gQ29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgdmFyIHByb21pc2UgPSBuZXcgQ29uc3RydWN0b3Iobm9vcCk7XG4gIF9yZXNvbHZlKHByb21pc2UsIG9iamVjdCk7XG4gIHJldHVybiBwcm9taXNlO1xufSIsImltcG9ydCB7IG9iamVjdE9yRnVuY3Rpb24sIGlzRnVuY3Rpb24gfSBmcm9tICcuL3V0aWxzJztcblxuaW1wb3J0IHsgYXNhcCB9IGZyb20gJy4vYXNhcCc7XG5cbmltcG9ydCBvcmlnaW5hbFRoZW4gZnJvbSAnLi90aGVuJztcbmltcG9ydCBvcmlnaW5hbFJlc29sdmUgZnJvbSAnLi9wcm9taXNlL3Jlc29sdmUnO1xuXG5leHBvcnQgdmFyIFBST01JU0VfSUQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG52YXIgUEVORElORyA9IHZvaWQgMDtcbnZhciBGVUxGSUxMRUQgPSAxO1xudmFyIFJFSkVDVEVEID0gMjtcblxuZnVuY3Rpb24gc2VsZkZ1bGZpbGxtZW50KCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIik7XG59XG5cbmZ1bmN0aW9uIGNhbm5vdFJldHVybk93bigpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKTtcbn1cblxuZnVuY3Rpb24gdHJ5VGhlbih0aGVuLCB2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKSB7XG4gIHRyeSB7XG4gICAgdGhlbi5jYWxsKHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRm9yZWlnblRoZW5hYmxlKHByb21pc2UsIHRoZW5hYmxlLCB0aGVuKSB7XG4gIGFzYXAoZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICB2YXIgc2VhbGVkID0gZmFsc2U7XG4gICAgdmFyIGVycm9yID0gdHJ5VGhlbih0aGVuLCB0aGVuYWJsZSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAoc2VhbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICBpZiAodGhlbmFibGUgIT09IHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuXG4gICAgICByZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykpO1xuXG4gICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICByZWplY3QocHJvbWlzZSwgZXJyb3IpO1xuICAgIH1cbiAgfSwgcHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIHRoZW5hYmxlKSB7XG4gIGlmICh0aGVuYWJsZS5fc3RhdGUgPT09IEZVTEZJTExFRCkge1xuICAgIGZ1bGZpbGwocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7XG4gIH0gZWxzZSBpZiAodGhlbmFibGUuX3N0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgIHJlamVjdChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICBzdWJzY3JpYmUodGhlbmFibGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuIHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhlbikge1xuICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJvbWlzZS5jb25zdHJ1Y3RvciAmJiB0aGVuID09PSBvcmlnaW5hbFRoZW4gJiYgbWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3Rvci5yZXNvbHZlID09PSBvcmlnaW5hbFJlc29sdmUpIHtcbiAgICBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodGhlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0aGVuKSkge1xuICAgICAgaGFuZGxlRm9yZWlnblRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlKHByb21pc2UsIHZhbHVlKSB7XG4gIGlmIChwcm9taXNlID09PSB2YWx1ZSkge1xuICAgIHJlamVjdChwcm9taXNlLCBzZWxmRnVsZmlsbG1lbnQoKSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0T3JGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YXIgdGhlbiA9IHZvaWQgMDtcbiAgICB0cnkge1xuICAgICAgdGhlbiA9IHZhbHVlLnRoZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUsIHRoZW4pO1xuICB9IGVsc2Uge1xuICAgIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1Ymxpc2hSZWplY3Rpb24ocHJvbWlzZSkge1xuICBpZiAocHJvbWlzZS5fb25lcnJvcikge1xuICAgIHByb21pc2UuX29uZXJyb3IocHJvbWlzZS5fcmVzdWx0KTtcbiAgfVxuXG4gIHB1Ymxpc2gocHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpIHtcbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJvbWlzZS5fcmVzdWx0ID0gdmFsdWU7XG4gIHByb21pc2UuX3N0YXRlID0gRlVMRklMTEVEO1xuXG4gIGlmIChwcm9taXNlLl9zdWJzY3JpYmVycy5sZW5ndGggIT09IDApIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHByb21pc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByb21pc2UuX3N0YXRlID0gUkVKRUNURUQ7XG4gIHByb21pc2UuX3Jlc3VsdCA9IHJlYXNvbjtcblxuICBhc2FwKHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9zdWJzY3JpYmVycyA9IHBhcmVudC5fc3Vic2NyaWJlcnM7XG4gIHZhciBsZW5ndGggPSBfc3Vic2NyaWJlcnMubGVuZ3RoO1xuXG5cbiAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDtcblxuICBfc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkO1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBSRUpFQ1RFRF0gPSBvblJlamVjdGlvbjtcblxuICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7XG4gIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICB2YXIgc2V0dGxlZCA9IHByb21pc2UuX3N0YXRlO1xuXG4gIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY2hpbGQgPSB2b2lkIDAsXG4gICAgICBjYWxsYmFjayA9IHZvaWQgMCxcbiAgICAgIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTtcbiAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgdmFyIGhhc0NhbGxiYWNrID0gaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICB2YWx1ZSA9IHZvaWQgMCxcbiAgICAgIGVycm9yID0gdm9pZCAwLFxuICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcblxuICBpZiAoaGFzQ2FsbGJhY2spIHtcbiAgICB0cnkge1xuICAgICAgdmFsdWUgPSBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlO1xuICAgICAgZXJyb3IgPSBlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkge1xuICAgICAgcmVqZWN0KHByb21pc2UsIGNhbm5vdFJldHVybk93bigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBkZXRhaWw7XG4gIH1cblxuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICAvLyBub29wXG4gIH0gZWxzZSBpZiAoaGFzQ2FsbGJhY2sgJiYgc3VjY2VlZGVkKSB7XG4gICAgcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoc3VjY2VlZGVkID09PSBmYWxzZSkge1xuICAgIHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gRlVMRklMTEVEKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gUkVKRUNURUQpIHtcbiAgICByZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVQcm9taXNlKHByb21pc2UsIHJlc29sdmVyKSB7XG4gIHRyeSB7XG4gICAgcmVzb2x2ZXIoZnVuY3Rpb24gcmVzb2x2ZVByb21pc2UodmFsdWUpIHtcbiAgICAgIHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICByZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlamVjdChwcm9taXNlLCBlKTtcbiAgfVxufVxuXG52YXIgaWQgPSAwO1xuZnVuY3Rpb24gbmV4dElkKCkge1xuICByZXR1cm4gaWQrKztcbn1cblxuZnVuY3Rpb24gbWFrZVByb21pc2UocHJvbWlzZSkge1xuICBwcm9taXNlW1BST01JU0VfSURdID0gaWQrKztcbiAgcHJvbWlzZS5fc3RhdGUgPSB1bmRlZmluZWQ7XG4gIHByb21pc2UuX3Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgcHJvbWlzZS5fc3Vic2NyaWJlcnMgPSBbXTtcbn1cblxuZXhwb3J0IHsgbmV4dElkLCBtYWtlUHJvbWlzZSwgbm9vcCwgcmVzb2x2ZSwgcmVqZWN0LCBmdWxmaWxsLCBzdWJzY3JpYmUsIHB1Ymxpc2gsIHB1Ymxpc2hSZWplY3Rpb24sIGluaXRpYWxpemVQcm9taXNlLCBpbnZva2VDYWxsYmFjaywgRlVMRklMTEVELCBSRUpFQ1RFRCwgUEVORElORywgaGFuZGxlTWF5YmVUaGVuYWJsZSB9OyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmltcG9ydCB7IGlzQXJyYXksIGlzTWF5YmVUaGVuYWJsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm9vcCwgcmVqZWN0LCBmdWxmaWxsLCBzdWJzY3JpYmUsIEZVTEZJTExFRCwgUkVKRUNURUQsIFBFTkRJTkcsIGhhbmRsZU1heWJlVGhlbmFibGUgfSBmcm9tICcuLy1pbnRlcm5hbCc7XG5cbmltcG9ydCB0aGVuIGZyb20gJy4vdGhlbic7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL3Byb21pc2UnO1xuaW1wb3J0IG9yaWdpbmFsUmVzb2x2ZSBmcm9tICcuL3Byb21pc2UvcmVzb2x2ZSc7XG5pbXBvcnQgb3JpZ2luYWxUaGVuIGZyb20gJy4vdGhlbic7XG5pbXBvcnQgeyBtYWtlUHJvbWlzZSwgUFJPTUlTRV9JRCB9IGZyb20gJy4vLWludGVybmFsJztcblxuZnVuY3Rpb24gdmFsaWRhdGlvbkVycm9yKCkge1xuICByZXR1cm4gbmV3IEVycm9yKCdBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXknKTtcbn07XG5cbnZhciBFbnVtZXJhdG9yID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFbnVtZXJhdG9yKENvbnN0cnVjdG9yLCBpbnB1dCkge1xuICAgIHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgICB0aGlzLnByb21pc2UgPSBuZXcgQ29uc3RydWN0b3Iobm9vcCk7XG5cbiAgICBpZiAoIXRoaXMucHJvbWlzZVtQUk9NSVNFX0lEXSkge1xuICAgICAgbWFrZVByb21pc2UodGhpcy5wcm9taXNlKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgICAgdGhpcy5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgICB0aGlzLl9yZXN1bHQgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGgpO1xuXG4gICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoIHx8IDA7XG4gICAgICAgIHRoaXMuX2VudW1lcmF0ZShpbnB1dCk7XG4gICAgICAgIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICBmdWxmaWxsKHRoaXMucHJvbWlzZSwgdGhpcy5fcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWplY3QodGhpcy5wcm9taXNlLCB2YWxpZGF0aW9uRXJyb3IoKSk7XG4gICAgfVxuICB9XG5cbiAgRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uIF9lbnVtZXJhdGUoaW5wdXQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgdGhpcy5fc3RhdGUgPT09IFBFTkRJTkcgJiYgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLl9lYWNoRW50cnkoaW5wdXRbaV0sIGkpO1xuICAgIH1cbiAgfTtcblxuICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24gX2VhY2hFbnRyeShlbnRyeSwgaSkge1xuICAgIHZhciBjID0gdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcbiAgICB2YXIgcmVzb2x2ZSA9IGMucmVzb2x2ZTtcblxuXG4gICAgaWYgKHJlc29sdmUgPT09IG9yaWdpbmFsUmVzb2x2ZSkge1xuICAgICAgdmFyIF90aGVuID0gdm9pZCAwO1xuICAgICAgdmFyIGVycm9yID0gdm9pZCAwO1xuICAgICAgdmFyIGRpZEVycm9yID0gZmFsc2U7XG4gICAgICB0cnkge1xuICAgICAgICBfdGhlbiA9IGVudHJ5LnRoZW47XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3RoZW4gPT09IG9yaWdpbmFsVGhlbiAmJiBlbnRyeS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICAgICAgdGhpcy5fc2V0dGxlZEF0KGVudHJ5Ll9zdGF0ZSwgaSwgZW50cnkuX3Jlc3VsdCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLl9yZW1haW5pbmctLTtcbiAgICAgICAgdGhpcy5fcmVzdWx0W2ldID0gZW50cnk7XG4gICAgICB9IGVsc2UgaWYgKGMgPT09IFByb21pc2UpIHtcbiAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgYyhub29wKTtcbiAgICAgICAgaWYgKGRpZEVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIGVudHJ5LCBfdGhlbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fd2lsbFNldHRsZUF0KHByb21pc2UsIGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fd2lsbFNldHRsZUF0KG5ldyBjKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoZW50cnkpO1xuICAgICAgICB9KSwgaSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChyZXNvbHZlKGVudHJ5KSwgaSk7XG4gICAgfVxuICB9O1xuXG4gIEVudW1lcmF0b3IucHJvdG90eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbiBfc2V0dGxlZEF0KHN0YXRlLCBpLCB2YWx1ZSkge1xuICAgIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuXG5cbiAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuXG4gICAgICBpZiAoc3RhdGUgPT09IFJFSkVDVEVEKSB7XG4gICAgICAgIHJlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgfVxuICB9O1xuXG4gIEVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbiBfd2lsbFNldHRsZUF0KHByb21pc2UsIGkpIHtcbiAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgICBzdWJzY3JpYmUocHJvbWlzZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoRlVMRklMTEVELCBpLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuIGVudW1lcmF0b3IuX3NldHRsZWRBdChSRUpFQ1RFRCwgaSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gRW51bWVyYXRvcjtcbn0oKTtcblxuZXhwb3J0IGRlZmF1bHQgRW51bWVyYXRvcjtcbjsiLCJpbXBvcnQgRW51bWVyYXRvciBmcm9tICcuLi9lbnVtZXJhdG9yJztcblxuLyoqXG4gIGBQcm9taXNlLmFsbGAgYWNjZXB0cyBhbiBhcnJheSBvZiBwcm9taXNlcywgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3aGljaFxuICBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBmdWxmaWxsbWVudCB2YWx1ZXMgZm9yIHRoZSBwYXNzZWQgcHJvbWlzZXMsIG9yXG4gIHJlamVjdGVkIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQuIEl0IGNhc3RzIGFsbFxuICBlbGVtZW50cyBvZiB0aGUgcGFzc2VkIGl0ZXJhYmxlIHRvIHByb21pc2VzIGFzIGl0IHJ1bnMgdGhpcyBhbGdvcml0aG0uXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlc29sdmUoMik7XG4gIGxldCBwcm9taXNlMyA9IHJlc29sdmUoMyk7XG4gIGxldCBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdO1xuXG4gIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXtcbiAgICAvLyBUaGUgYXJyYXkgaGVyZSB3b3VsZCBiZSBbIDEsIDIsIDMgXTtcbiAgfSk7XG4gIGBgYFxuXG4gIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgYWxsYCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlXG4gIHRoYXQgaXMgcmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJvbWlzZXMnc1xuICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6XG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlamVjdChuZXcgRXJyb3IoXCIyXCIpKTtcbiAgbGV0IHByb21pc2UzID0gcmVqZWN0KG5ldyBFcnJvcihcIjNcIikpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhXG4gIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgLy8gZXJyb3IubWVzc2FnZSA9PT0gXCIyXCJcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgYWxsXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBcnJheX0gZW50cmllcyBhcnJheSBvZiBwcm9taXNlc1xuICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIGBwcm9taXNlc2AgaGF2ZSBiZWVuXG4gIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVjdGVkLlxuICBAc3RhdGljXG4qL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWxsKGVudHJpZXMpIHtcbiAgcmV0dXJuIG5ldyBFbnVtZXJhdG9yKHRoaXMsIGVudHJpZXMpLnByb21pc2U7XG59IiwiaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG4vKipcbiAgYFByb21pc2UucmFjZWAgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoIGlzIHNldHRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZVxuICBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBzZXR0bGUuXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVzb2x2ZSgncHJvbWlzZSAxJyk7XG4gICAgfSwgMjAwKTtcbiAgfSk7XG5cbiAgbGV0IHByb21pc2UyID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDInKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyByZXN1bHQgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgaXQgd2FzIHJlc29sdmVkIGJlZm9yZSBwcm9taXNlMVxuICAgIC8vIHdhcyByZXNvbHZlZC5cbiAgfSk7XG4gIGBgYFxuXG4gIGBQcm9taXNlLnJhY2VgIGlzIGRldGVybWluaXN0aWMgaW4gdGhhdCBvbmx5IHRoZSBzdGF0ZSBvZiB0aGUgZmlyc3RcbiAgc2V0dGxlZCBwcm9taXNlIG1hdHRlcnMuIEZvciBleGFtcGxlLCBldmVuIGlmIG90aGVyIHByb21pc2VzIGdpdmVuIHRvIHRoZVxuICBgcHJvbWlzZXNgIGFycmF5IGFyZ3VtZW50IGFyZSByZXNvbHZlZCwgYnV0IHRoZSBmaXJzdCBzZXR0bGVkIHByb21pc2UgaGFzXG4gIGJlY29tZSByZWplY3RlZCBiZWZvcmUgdGhlIG90aGVyIHByb21pc2VzIGJlY2FtZSBmdWxmaWxsZWQsIHRoZSByZXR1cm5lZFxuICBwcm9taXNlIHdpbGwgYmVjb21lIHJlamVjdGVkOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Byb21pc2UgMicpKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVuc1xuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAncHJvbWlzZSAyJyBiZWNhdXNlIHByb21pc2UgMiBiZWNhbWUgcmVqZWN0ZWQgYmVmb3JlXG4gICAgLy8gcHJvbWlzZSAxIGJlY2FtZSBmdWxmaWxsZWRcbiAgfSk7XG4gIGBgYFxuXG4gIEFuIGV4YW1wbGUgcmVhbC13b3JsZCB1c2UgY2FzZSBpcyBpbXBsZW1lbnRpbmcgdGltZW91dHM6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBQcm9taXNlLnJhY2UoW2FqYXgoJ2Zvby5qc29uJyksIHRpbWVvdXQoNTAwMCldKVxuICBgYGBcblxuICBAbWV0aG9kIHJhY2VcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FycmF5fSBwcm9taXNlcyBhcnJheSBvZiBwcm9taXNlcyB0byBvYnNlcnZlXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHdoaWNoIHNldHRsZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdCBwYXNzZWRcbiAgcHJvbWlzZSB0byBzZXR0bGUuXG4qL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFjZShlbnRyaWVzKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKCFpc0FycmF5KGVudHJpZXMpKSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAoXywgcmVqZWN0KSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4nKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnJlc29sdmUoZW50cmllc1tpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59IiwiaW1wb3J0IHsgbm9vcCwgcmVqZWN0IGFzIF9yZWplY3QgfSBmcm9tICcuLi8taW50ZXJuYWwnO1xuXG4vKipcbiAgYFByb21pc2UucmVqZWN0YCByZXR1cm5zIGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBwYXNzZWQgYHJlYXNvbmAuXG4gIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZWplY3QobmV3IEVycm9yKCdXSE9PUFMnKSk7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSl7XG4gICAgLy8gQ29kZSBoZXJlIGRvZXNuJ3QgcnVuIGJlY2F1c2UgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQhXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdXSE9PUFMnXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSl7XG4gICAgLy8gQ29kZSBoZXJlIGRvZXNuJ3QgcnVuIGJlY2F1c2UgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQhXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdXSE9PUFMnXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlamVjdFxuICBAc3RhdGljXG4gIEBwYXJhbSB7QW55fSByZWFzb24gdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkIHdpdGguXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIGdpdmVuIGByZWFzb25gLlxuKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlamVjdChyZWFzb24pIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcbiAgdmFyIHByb21pc2UgPSBuZXcgQ29uc3RydWN0b3Iobm9vcCk7XG4gIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgcmV0dXJuIHByb21pc2U7XG59IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm9vcCwgbmV4dElkLCBQUk9NSVNFX0lELCBpbml0aWFsaXplUHJvbWlzZSB9IGZyb20gJy4vLWludGVybmFsJztcbmltcG9ydCB7IGFzYXAsIHNldEFzYXAsIHNldFNjaGVkdWxlciB9IGZyb20gJy4vYXNhcCc7XG5cbmltcG9ydCBhbGwgZnJvbSAnLi9wcm9taXNlL2FsbCc7XG5pbXBvcnQgcmFjZSBmcm9tICcuL3Byb21pc2UvcmFjZSc7XG5pbXBvcnQgUmVzb2x2ZSBmcm9tICcuL3Byb21pc2UvcmVzb2x2ZSc7XG5pbXBvcnQgUmVqZWN0IGZyb20gJy4vcHJvbWlzZS9yZWplY3QnO1xuaW1wb3J0IHRoZW4gZnJvbSAnLi90aGVuJztcblxuZnVuY3Rpb24gbmVlZHNSZXNvbHZlcigpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xufVxuXG5mdW5jdGlvbiBuZWVkc05ldygpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbn1cblxuLyoqXG4gIFByb21pc2Ugb2JqZWN0cyByZXByZXNlbnQgdGhlIGV2ZW50dWFsIHJlc3VsdCBvZiBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uLiBUaGVcbiAgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCwgd2hpY2hcbiAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uXG4gIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuXG4gIFRlcm1pbm9sb2d5XG4gIC0tLS0tLS0tLS0tXG5cbiAgLSBgcHJvbWlzZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBgdGhlbmAgbWV0aG9kIHdob3NlIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi5cbiAgLSBgdGhlbmFibGVgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB0aGF0IGRlZmluZXMgYSBgdGhlbmAgbWV0aG9kLlxuICAtIGB2YWx1ZWAgaXMgYW55IGxlZ2FsIEphdmFTY3JpcHQgdmFsdWUgKGluY2x1ZGluZyB1bmRlZmluZWQsIGEgdGhlbmFibGUsIG9yIGEgcHJvbWlzZSkuXG4gIC0gYGV4Y2VwdGlvbmAgaXMgYSB2YWx1ZSB0aGF0IGlzIHRocm93biB1c2luZyB0aGUgdGhyb3cgc3RhdGVtZW50LlxuICAtIGByZWFzb25gIGlzIGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2h5IGEgcHJvbWlzZSB3YXMgcmVqZWN0ZWQuXG4gIC0gYHNldHRsZWRgIHRoZSBmaW5hbCByZXN0aW5nIHN0YXRlIG9mIGEgcHJvbWlzZSwgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuXG4gIEEgcHJvbWlzZSBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVsZmlsbGVkLCBvciByZWplY3RlZC5cblxuICBQcm9taXNlcyB0aGF0IGFyZSBmdWxmaWxsZWQgaGF2ZSBhIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCBhcmUgaW4gdGhlIGZ1bGZpbGxlZFxuICBzdGF0ZS4gIFByb21pc2VzIHRoYXQgYXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24gcmVhc29uIGFuZCBhcmUgaW4gdGhlXG4gIHJlamVjdGVkIHN0YXRlLiAgQSBmdWxmaWxsbWVudCB2YWx1ZSBpcyBuZXZlciBhIHRoZW5hYmxlLlxuXG4gIFByb21pc2VzIGNhbiBhbHNvIGJlIHNhaWQgdG8gKnJlc29sdmUqIGEgdmFsdWUuICBJZiB0aGlzIHZhbHVlIGlzIGFsc28gYVxuICBwcm9taXNlLCB0aGVuIHRoZSBvcmlnaW5hbCBwcm9taXNlJ3Mgc2V0dGxlZCBzdGF0ZSB3aWxsIG1hdGNoIHRoZSB2YWx1ZSdzXG4gIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgd2lsbFxuICBpdHNlbGYgcmVqZWN0LCBhbmQgYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCBmdWxmaWxscyB3aWxsXG4gIGl0c2VsZiBmdWxmaWxsLlxuXG5cbiAgQmFzaWMgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLVxuXG4gIGBgYGpzXG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgLy8gb24gc3VjY2Vzc1xuICAgIHJlc29sdmUodmFsdWUpO1xuXG4gICAgLy8gb24gZmFpbHVyZVxuICAgIHJlamVjdChyZWFzb24pO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAvLyBvbiBmdWxmaWxsbWVudFxuICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAvLyBvbiByZWplY3Rpb25cbiAgfSk7XG4gIGBgYFxuXG4gIEFkdmFuY2VkIFVzYWdlOlxuICAtLS0tLS0tLS0tLS0tLS1cblxuICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0aW5nIGF3YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzXG4gIGBYTUxIdHRwUmVxdWVzdGBzLlxuXG4gIGBgYGpzXG4gIGZ1bmN0aW9uIGdldEpTT04odXJsKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2pzb24nO1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICB4aHIuc2VuZCgpO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignZ2V0SlNPTjogYCcgKyB1cmwgKyAnYCBmYWlsZWQgd2l0aCBzdGF0dXM6IFsnICsgdGhpcy5zdGF0dXMgKyAnXScpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRKU09OKCcvcG9zdHMuanNvbicpLnRoZW4oZnVuY3Rpb24oanNvbikge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgVW5saWtlIGNhbGxiYWNrcywgcHJvbWlzZXMgYXJlIGdyZWF0IGNvbXBvc2FibGUgcHJpbWl0aXZlcy5cblxuICBgYGBqc1xuICBQcm9taXNlLmFsbChbXG4gICAgZ2V0SlNPTignL3Bvc3RzJyksXG4gICAgZ2V0SlNPTignL2NvbW1lbnRzJylcbiAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpe1xuICAgIHZhbHVlc1swXSAvLyA9PiBwb3N0c0pTT05cbiAgICB2YWx1ZXNbMV0gLy8gPT4gY29tbWVudHNKU09OXG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9KTtcbiAgYGBgXG5cbiAgQGNsYXNzIFByb21pc2VcbiAgQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZXJcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAY29uc3RydWN0b3JcbiovXG5cbnZhciBQcm9taXNlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQcm9taXNlKHJlc29sdmVyKSB7XG4gICAgdGhpc1tQUk9NSVNFX0lEXSA9IG5leHRJZCgpO1xuICAgIHRoaXMuX3Jlc3VsdCA9IHRoaXMuX3N0YXRlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgICBpZiAobm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICAgIHR5cGVvZiByZXNvbHZlciAhPT0gJ2Z1bmN0aW9uJyAmJiBuZWVkc1Jlc29sdmVyKCk7XG4gICAgICB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSA/IGluaXRpYWxpemVQcm9taXNlKHRoaXMsIHJlc29sdmVyKSA6IG5lZWRzTmV3KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLFxuICB3aGljaCByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZVxuICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG4gICBgYGBqc1xuICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24odXNlcil7XG4gICAgLy8gdXNlciBpcyBhdmFpbGFibGVcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyB1c2VyIGlzIHVuYXZhaWxhYmxlLCBhbmQgeW91IGFyZSBnaXZlbiB0aGUgcmVhc29uIHdoeVxuICB9KTtcbiAgYGBgXG4gICBDaGFpbmluZ1xuICAtLS0tLS0tLVxuICAgVGhlIHJldHVybiB2YWx1ZSBvZiBgdGhlbmAgaXMgaXRzZWxmIGEgcHJvbWlzZS4gIFRoaXMgc2Vjb25kLCAnZG93bnN0cmVhbSdcbiAgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZpcnN0IHByb21pc2UncyBmdWxmaWxsbWVudFxuICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgIGBgYGpzXG4gIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgIHJldHVybiB1c2VyLm5hbWU7XG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQgbmFtZSc7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7XG4gICAgLy8gSWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0aGUgdXNlcidzIG5hbWUsIG90aGVyd2lzZSBpdFxuICAgIC8vIHdpbGwgYmUgYCdkZWZhdWx0IG5hbWUnYFxuICB9KTtcbiAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIC8vIGlmIGBmaW5kVXNlcmAgZnVsZmlsbGVkLCBgcmVhc29uYCB3aWxsIGJlICdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScuXG4gICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gIH0pO1xuICBgYGBcbiAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG4gICBgYGBqc1xuICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gbmV2ZXIgcmVhY2hlZFxuICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gIH0pO1xuICBgYGBcbiAgIEFzc2ltaWxhdGlvblxuICAtLS0tLS0tLS0tLS1cbiAgIFNvbWV0aW1lcyB0aGUgdmFsdWUgeW91IHdhbnQgdG8gcHJvcGFnYXRlIHRvIGEgZG93bnN0cmVhbSBwcm9taXNlIGNhbiBvbmx5IGJlXG4gIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgdW50aWwgdGhlIHJldHVybmVkIHByb21pc2UgaXMgc2V0dGxlZC4gVGhpcyBpcyBjYWxsZWQgKmFzc2ltaWxhdGlvbiouXG4gICBgYGBqc1xuICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICByZXR1cm4gZmluZENvbW1lbnRzQnlBdXRob3IodXNlcik7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgLy8gVGhlIHVzZXIncyBjb21tZW50cyBhcmUgbm93IGF2YWlsYWJsZVxuICB9KTtcbiAgYGBgXG4gICBJZiB0aGUgYXNzaW1saWF0ZWQgcHJvbWlzZSByZWplY3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCBhbHNvIHJlamVjdC5cbiAgIGBgYGpzXG4gIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgfSkudGhlbihmdW5jdGlvbiAoY29tbWVudHMpIHtcbiAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIHJlamVjdHMsIHdlJ2xsIGhhdmUgdGhlIHJlYXNvbiBoZXJlXG4gIH0pO1xuICBgYGBcbiAgIFNpbXBsZSBFeGFtcGxlXG4gIC0tLS0tLS0tLS0tLS0tXG4gICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gICBgYGBqYXZhc2NyaXB0XG4gIGxldCByZXN1bHQ7XG4gICB0cnkge1xuICAgIHJlc3VsdCA9IGZpbmRSZXN1bHQoKTtcbiAgICAvLyBzdWNjZXNzXG4gIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgLy8gZmFpbHVyZVxuICB9XG4gIGBgYFxuICAgRXJyYmFjayBFeGFtcGxlXG4gICBgYGBqc1xuICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICBpZiAoZXJyKSB7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9XG4gIH0pO1xuICBgYGBcbiAgIFByb21pc2UgRXhhbXBsZTtcbiAgIGBgYGphdmFzY3JpcHRcbiAgZmluZFJlc3VsdCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyBzdWNjZXNzXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gZmFpbHVyZVxuICB9KTtcbiAgYGBgXG4gICBBZHZhbmNlZCBFeGFtcGxlXG4gIC0tLS0tLS0tLS0tLS0tXG4gICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gICBgYGBqYXZhc2NyaXB0XG4gIGxldCBhdXRob3IsIGJvb2tzO1xuICAgdHJ5IHtcbiAgICBhdXRob3IgPSBmaW5kQXV0aG9yKCk7XG4gICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAvLyBzdWNjZXNzXG4gIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgLy8gZmFpbHVyZVxuICB9XG4gIGBgYFxuICAgRXJyYmFjayBFeGFtcGxlXG4gICBgYGBqc1xuICAgZnVuY3Rpb24gZm91bmRCb29rcyhib29rcykge1xuICAgfVxuICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHtcbiAgIH1cbiAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZm91bmRCb29rcyhib29rcyk7XG4gICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICBmYWlsdXJlKHJlYXNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgfVxuICAgICAgLy8gc3VjY2Vzc1xuICAgIH1cbiAgfSk7XG4gIGBgYFxuICAgUHJvbWlzZSBFeGFtcGxlO1xuICAgYGBgamF2YXNjcmlwdFxuICBmaW5kQXV0aG9yKCkuXG4gICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAvLyBmb3VuZCBib29rc1xuICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gIH0pO1xuICBgYGBcbiAgIEBtZXRob2QgdGhlblxuICBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZ1bGZpbGxlZFxuICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cblxuICAvKipcbiAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuICBgYGBqc1xuICBmdW5jdGlvbiBmaW5kQXV0aG9yKCl7XG4gIHRocm93IG5ldyBFcnJvcignY291bGRuJ3QgZmluZCB0aGF0IGF1dGhvcicpO1xuICB9XG4gIC8vIHN5bmNocm9ub3VzXG4gIHRyeSB7XG4gIGZpbmRBdXRob3IoKTtcbiAgfSBjYXRjaChyZWFzb24pIHtcbiAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgfVxuICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICB9KTtcbiAgYGBgXG4gIEBtZXRob2QgY2F0Y2hcbiAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfVxuICAqL1xuXG5cbiAgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2ggPSBmdW5jdGlvbiBfY2F0Y2gob25SZWplY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICBgZmluYWxseWAgd2lsbCBiZSBpbnZva2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIHByb21pc2UncyBmYXRlIGp1c3QgYXMgbmF0aXZlXG4gICAgdHJ5L2NhdGNoL2ZpbmFsbHkgYmVoYXZlc1xuICBcbiAgICBTeW5jaHJvbm91cyBleGFtcGxlOlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRBdXRob3IoKSB7XG4gICAgICBpZiAoTWF0aC5yYW5kb20oKSA+IDAuNSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgQXV0aG9yKCk7XG4gICAgfVxuICBcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZpbmRBdXRob3IoKTsgLy8gc3VjY2VlZCBvciBmYWlsXG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgcmV0dXJuIGZpbmRPdGhlckF1dGhlcigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBhbHdheXMgcnVuc1xuICAgICAgLy8gZG9lc24ndCBhZmZlY3QgdGhlIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgICBgYGBcbiAgXG4gICAgQXN5bmNocm9ub3VzIGV4YW1wbGU6XG4gIFxuICAgIGBgYGpzXG4gICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICByZXR1cm4gZmluZE90aGVyQXV0aGVyKCk7XG4gICAgfSkuZmluYWxseShmdW5jdGlvbigpe1xuICAgICAgLy8gYXV0aG9yIHdhcyBlaXRoZXIgZm91bmQsIG9yIG5vdFxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBAbWV0aG9kIGZpbmFsbHlcbiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG5cblxuICBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5ID0gZnVuY3Rpb24gX2ZpbmFsbHkoY2FsbGJhY2spIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvcjtcblxuICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgfTtcblxuICByZXR1cm4gUHJvbWlzZTtcbn0oKTtcblxuUHJvbWlzZS5wcm90b3R5cGUudGhlbiA9IHRoZW47XG5leHBvcnQgZGVmYXVsdCBQcm9taXNlO1xuUHJvbWlzZS5hbGwgPSBhbGw7XG5Qcm9taXNlLnJhY2UgPSByYWNlO1xuUHJvbWlzZS5yZXNvbHZlID0gUmVzb2x2ZTtcblByb21pc2UucmVqZWN0ID0gUmVqZWN0O1xuUHJvbWlzZS5fc2V0U2NoZWR1bGVyID0gc2V0U2NoZWR1bGVyO1xuUHJvbWlzZS5fc2V0QXNhcCA9IHNldEFzYXA7XG5Qcm9taXNlLl9hc2FwID0gYXNhcDsiLCIvKmdsb2JhbCBzZWxmKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJy4vcHJvbWlzZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBvbHlmaWxsKCkge1xuICB2YXIgbG9jYWwgPSB2b2lkIDA7XG5cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbG9jYWwgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbG9jYWwgPSBzZWxmO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBsb2NhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgUCA9IGxvY2FsLlByb21pc2U7XG5cbiAgaWYgKFApIHtcbiAgICB2YXIgcHJvbWlzZVRvU3RyaW5nID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBzaWxlbnRseSBpZ25vcmVkXG4gICAgfVxuXG4gICAgaWYgKHByb21pc2VUb1N0cmluZyA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBsb2NhbC5Qcm9taXNlID0gUHJvbWlzZTtcbn0iLCJpbXBvcnQgUHJvbWlzZSBmcm9tICcuL2VzNi1wcm9taXNlL3Byb21pc2UnO1xuaW1wb3J0IHBvbHlmaWxsIGZyb20gJy4vZXM2LXByb21pc2UvcG9seWZpbGwnO1xuXG4vLyBTdHJhbmdlIGNvbXBhdC4uXG5Qcm9taXNlLnBvbHlmaWxsID0gcG9seWZpbGw7XG5Qcm9taXNlLlByb21pc2UgPSBQcm9taXNlO1xuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/es6-promise/dist/es6-promise.js\n")},"./node_modules/gatecrash/dist/CVSurvey.js":function(){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nexports.unitTestExports = exports.getSurveyQuestionAnswer = exports.shouldIncludeSurveyQuesitonAnswer = exports.validatePromptValue = exports.renderCVSurvey = void 0;\r\nvar SurveyEmbed_1 = __webpack_require__(/*! ./SurveyEmbed */ "./node_modules/gatecrash/dist/SurveyEmbed.js");\r\nvar Constants = __webpack_require__(/*! ./constants */ "./node_modules/gatecrash/dist/constants.js");\r\nvar surveyFocus = false;\r\nvar surveyDispatcherTimeout = false;\r\nvar pageWidthsStore = [];\r\nvar pageIdsStore = [];\r\nvar visitedPagesWidths = [];\r\nvar registeredEventHandlers = {};\r\nvar isPromptValueNo = false;\r\nvar isAdditionalPromptValueNo = false;\r\nvar isThankyouPageClosed = false;\r\nvar pageNumber = 0;\r\nvar isMainContext = true;\r\n/**\r\n * A wrapper around addEventListener to track handlers and ensure\r\n * we don\'t register duplicates.\r\n *\r\n * @param eventKey: The ElementEventKey corresponding to the event being added\r\n * @param eventElement: The element to which the listener will be attached\r\n * @param eventName: The event name to which we will listen\r\n * @param eventHandler: The handler to be fired when the event occurs\r\n * @param once: Whether the event should only be fireable once\r\n */\r\nvar subscribeEventHandler = function (eventKey, eventElement, eventName, eventHandler, once) {\r\n    if (once === void 0) { once = false; }\r\n    internal.unsubscribeEventHandler(eventKey);\r\n    eventElement.addEventListener(eventName, eventHandler, { once: once });\r\n    internal.registeredEventHandlers[eventKey] = {\r\n        element: eventElement,\r\n        event: eventName,\r\n        handler: eventHandler,\r\n    };\r\n};\r\n/**\r\n * A wrapper around removeEventListener to allow easy removal of listeners\r\n * when out-of-scope of the initial delcaration.\r\n *\r\n * @param eventKey: The ElementEventKey corresponding to the event being removed\r\n */\r\nvar unsubscribeEventHandler = function (eventKey) {\r\n    var handlerInfo = internal.registeredEventHandlers[eventKey];\r\n    if (handlerInfo) {\r\n        handlerInfo.element.removeEventListener(handlerInfo.event, handlerInfo.handler);\r\n        delete internal.registeredEventHandlers[eventKey];\r\n    }\r\n};\r\nexports.renderCVSurvey = function (parentElementOrId, onCVEvent, contextParams, cvSurveyOptionalConfigParams, optionalIsMainContext) {\r\n    if (optionalIsMainContext === void 0) { optionalIsMainContext = true; }\r\n    isMainContext = optionalIsMainContext;\r\n    var wrappedOnCvEvent = safeWrapHandleSurveyEvent(onCVEvent);\r\n    var parent = typeof parentElementOrId === "string"\r\n        ? createSurveyContainer(parentElementOrId, wrappedOnCvEvent, contextParams, cvSurveyOptionalConfigParams)\r\n        : parentElementOrId;\r\n    if (!parent)\r\n        return;\r\n    // Function to listen to and process Customer Voice survey events.\r\n    setCVEventHandlers(parent, wrappedOnCvEvent, contextParams, cvSurveyOptionalConfigParams === null || cvSurveyOptionalConfigParams === void 0 ? void 0 : cvSurveyOptionalConfigParams.timeOutEnabled);\r\n    try {\r\n        renderSurvey(parent, contextParams, wrappedOnCvEvent, cvSurveyOptionalConfigParams === null || cvSurveyOptionalConfigParams === void 0 ? void 0 : cvSurveyOptionalConfigParams.cancelButtonEnabled);\r\n        setSurveyGeneralStyles(parent);\r\n        if ((cvSurveyOptionalConfigParams === null || cvSurveyOptionalConfigParams === void 0 ? void 0 : cvSurveyOptionalConfigParams.closeButtonEnabled) !== false) {\r\n            createCloseButton(parent, wrappedOnCvEvent, contextParams);\r\n        }\r\n    }\r\n    catch (error) {\r\n        var result = error.message;\r\n        wrappedOnCvEvent(Constants.CV_LOG_EVENT, {\r\n            dateTime: new Date(),\r\n            eventType: "GatecrashEvent" /* GatecrashEvent */,\r\n            eventId: Constants.GATECRASH_RENDER_ERROR,\r\n            customProperties: {\r\n                ErrorMessage: result !== null && result !== void 0 ? result : Constants.DEFAULT_ERR_MSG,\r\n            },\r\n            isMainContext: isMainContext,\r\n        });\r\n    }\r\n};\r\nfunction safeWrapHandleSurveyEvent(onSurveyEvent) {\r\n    var wrappedOnSurveyEvent = function (key, data) {\r\n        var _a, _b;\r\n        try {\r\n            onSurveyEvent(key, data);\r\n        }\r\n        catch (error) {\r\n            var formattedError = (_a = error.message) !== null && _a !== void 0 ? _a : Constants.DEFAULT_ERR_MSG;\r\n            try {\r\n                onSurveyEvent(Constants.CV_LOG_EVENT, {\r\n                    dateTime: new Date(),\r\n                    eventType: "GatecrashEvent" /* GatecrashEvent */,\r\n                    eventId: Constants.EVENT_HANDLER_ERROR,\r\n                    customProperties: {\r\n                        ErrorMessage: formattedError,\r\n                    },\r\n                });\r\n            }\r\n            catch (nestedError) {\r\n                var formattedNestedError = (_b = nestedError.message) !== null && _b !== void 0 ? _b : Constants.DEFAULT_ERR_MSG;\r\n                console.error("ERROR: Cannot call survey logging callback. " +\r\n                    ("Unable to log the following error: " + formattedError + " ") +\r\n                    ("Logging callback failed with error: " + formattedNestedError));\r\n            }\r\n        }\r\n    };\r\n    return wrappedOnSurveyEvent;\r\n}\r\n// Helper function to check if value is null or undefined\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction isNOU(value) {\r\n    return value === null || value === undefined;\r\n}\r\nfunction getCSSParams(cvSurveyOptionalConfigParams) {\r\n    var position = cvSurveyOptionalConfigParams && cvSurveyOptionalConfigParams.cssPosition\r\n        ? cvSurveyOptionalConfigParams.cssPosition\r\n        : Constants.CVSurveyPositionDefaults.cssPosition;\r\n    var zIndex = cvSurveyOptionalConfigParams && cvSurveyOptionalConfigParams.cssZIndex\r\n        ? cvSurveyOptionalConfigParams.cssZIndex\r\n        : Constants.CVSurveyPositionDefaults.cssZIndex;\r\n    var bottom = cvSurveyOptionalConfigParams && cvSurveyOptionalConfigParams.cssBottom\r\n        ? cvSurveyOptionalConfigParams.cssBottom\r\n        : Constants.CVSurveyPositionDefaults.cssBottom;\r\n    var right = cvSurveyOptionalConfigParams && cvSurveyOptionalConfigParams.cssRight\r\n        ? cvSurveyOptionalConfigParams.cssRight\r\n        : Constants.CVSurveyPositionDefaults.cssRight;\r\n    return [position, zIndex, bottom, right];\r\n}\r\nfunction createSurveyContainer(parentDivName, onCVEvent, contextParam, cvSurveyOptionalConfigParams) {\r\n    if (!parentDivName) {\r\n        onCVEvent(Constants.CV_LOG_EVENT, {\r\n            dateTime: new Date(),\r\n            eventType: "GatecrashEvent" /* GatecrashEvent */,\r\n            eventId: Constants.GATECRASH_RENDER_ERROR,\r\n            customProperties: {\r\n                Message: "Parent div name not provided.",\r\n            },\r\n            isMainContext: isMainContext,\r\n        });\r\n        return null;\r\n    }\r\n    var parentContainer = document.createElement("div");\r\n    parentContainer.id = parentDivName;\r\n    if (contextParam.uiHostCVSurveyDispatcher === "Dark" /* Dark */ ||\r\n        contextParam.uiHostCVSurveyDispatcher === "HighContrast" /* HighContrast */) {\r\n        parentContainer.style.backgroundColor = "Black";\r\n    }\r\n    var _a = getCSSParams(cvSurveyOptionalConfigParams), position = _a[0], zIndex = _a[1], bottom = _a[2], right = _a[3];\r\n    parentContainer.style.position = position;\r\n    parentContainer.style.zIndex = zIndex;\r\n    parentContainer.style.bottom = bottom;\r\n    parentContainer.style.right = right;\r\n    document.body.appendChild(parentContainer);\r\n    var parent = document.getElementById(parentDivName);\r\n    if (!parent) {\r\n        onCVEvent(Constants.CV_LOG_EVENT, {\r\n            dateTime: new Date(),\r\n            eventType: "GatecrashEvent" /* GatecrashEvent */,\r\n            eventId: Constants.GATECRASH_RENDER_ERROR,\r\n            customProperties: {\r\n                Message: "Parent element with id " + parentDivName + " not found.",\r\n            },\r\n            isMainContext: isMainContext,\r\n        });\r\n        return null;\r\n    }\r\n    parent.style.display = "none";\r\n    return parent;\r\n}\r\nfunction setCVEventHandlers(parentElement, onCVEvent, contextParam, timeOutEnabled) {\r\n    var windowMessageHandler = iFrameEventHandler.bind(null, onCVEvent, parentElement, timeOutEnabled !== null && timeOutEnabled !== void 0 ? timeOutEnabled : true, contextParam);\r\n    subscribeEventHandler("WindowMessage", window, "message", windowMessageHandler);\r\n}\r\n// Get page sizes and format to correct format\r\nfunction formatPages(configString) {\r\n    if (isNOU(configString))\r\n        return;\r\n    // Split string and Slice to remove page title\r\n    var pageWidths = configString.split(",").slice(1);\r\n    // Parse page width from pageTitle and store in a stack\r\n    var parsedWidths = pageWidths.map(function (currWidth) { return ("" + currWidth).split("=")[1]; });\r\n    pageWidthsStore.push.apply(pageWidthsStore, parsedWidths);\r\n    // Parse page identifier from pageTitle and store in a stack\r\n    var parsedPageIds = pageWidths.map(function (currWidth) {\r\n        return ("" + currWidth).split("=")[0].trim();\r\n    });\r\n    pageIdsStore.push.apply(pageIdsStore, parsedPageIds);\r\n}\r\nfunction iFrameEventHandler(onCVEvent, parentElement, timeOutEnabled, contextParam, event) {\r\n    var _a, _b;\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    var eventData = event === null || event === void 0 ? void 0 : event.data;\r\n    function setPageWidth(isFormResponseBack) {\r\n        // If isFormResponseBack -> Get the current page value\r\n        // return to previous otherwise use the first value in page width store\r\n        isFormResponseBack\r\n            ? visitedPagesWidths.length &&\r\n                pageWidthsStore.unshift("" + visitedPagesWidths.pop())\r\n            : pageWidthsStore.length &&\r\n                visitedPagesWidths.push("" + pageWidthsStore.shift());\r\n        if (parentElement) {\r\n            parentElement.style.minWidth = visitedPagesWidths.length\r\n                ? "" + visitedPagesWidths.slice(-1) // Peek on the last value in visitedPagesWidths to get the correct width\r\n                : "590px"; // 590 is the default width\r\n        }\r\n    }\r\n    if (isNOU(eventData)) {\r\n        return;\r\n    }\r\n    if (typeof eventData == "string" &&\r\n        eventData.includes("ResponsePageHeight" /* ResponsePageHeight */)) {\r\n        var surveyHeight = eventData.split(":");\r\n        var surveyIFrame = document.getElementById(Constants.IFRAME_ID);\r\n        if (surveyIFrame && surveyIFrame.style) {\r\n            surveyIFrame.style.height = surveyHeight[2] + "px";\r\n            return;\r\n        }\r\n    }\r\n    var hasSurveyDispatcher = (_a = eventData.FormTitle) === null || _a === void 0 ? void 0 : _a.includes("IsDispatcherSurvey=true");\r\n    //TODO: CV team add pageType to the cv survey response object for events types: ResponsePageLoaded FormResponseCanceled\r\n    if (eventData.Type === "ResponsePageLoaded" /* ResponsePageLoaded */) {\r\n        // Here the pageNumber -1 means we are not countting the dispatcher survey as the page 1.\r\n        // the real page 1 should from the first page of the navigated sub-survey.\r\n        // this will help us to get the correct logging events.\r\n        if (hasSurveyDispatcher) {\r\n            pageNumber -= 1;\r\n        }\r\n        // PageWidth: { rating: 100px, verbatim:200px, thankyou:90px }\r\n        !(eventData === null || eventData === void 0 ? void 0 : eventData.Message) && formatPages(eventData.FormTitle);\r\n        setPageWidth();\r\n        parentElement.style.display = hasSurveyDispatcher ? "none" : "inherit";\r\n        onCVEvent(Constants.CV_LOADED_EVENT, {\r\n            dateTime: new Date(),\r\n            eventType: eventData.Type,\r\n            hasSurveyPromptShown: eventData.FormTitle.includes("prompt"),\r\n            hasSurveyDispatcher: hasSurveyDispatcher,\r\n            isMainContext: isMainContext,\r\n        });\r\n        parentElement === null || parentElement === void 0 ? void 0 : parentElement.blur();\r\n        if (timeOutEnabled !== false && pageNumber != -1) {\r\n            autoDismiss(surveyFocus, parentElement, onCVEvent, contextParam);\r\n        }\r\n        return;\r\n    }\r\n    // For navigating back\r\n    if (eventData.Type === "FormResponseBack" /* FormResponseBack */) {\r\n        setPageWidth(true);\r\n    }\r\n    if (eventData.Type === "FormResponseCanceled" /* FormResponseCanceled */) {\r\n        //event.data refers to different data types in onCancel (String) and onSubmit (Object)\r\n        var closeTriggerEvent = "FormResponseCanceled" /* FormResponseCanceled */;\r\n        onCVEvent(Constants.CV_LOG_EVENT, {\r\n            dateTime: new Date(),\r\n            eventType: "GatecrashEvent" /* GatecrashEvent */,\r\n            eventId: Constants.GATECRASH_ON_SURVEY_CANCEL,\r\n            customProperties: {\r\n                Message: "gatecrash: survey cancel triggered: " + closeTriggerEvent,\r\n            },\r\n            isMainContext: isMainContext,\r\n        });\r\n        closeCVSurvey(parentElement, onCVEvent, closeTriggerEvent);\r\n        return;\r\n    }\r\n    if (eventData.Type === "FormResponseSubmitted" /* FormResponseSubmitted */ ||\r\n        eventData.Type === "FormPartialResponseSubmitted" /* FormPartialResponseSubmitted */) {\r\n        pageNumber = pageNumber + 1;\r\n        setPageWidth();\r\n        if (!hasSurveyDispatcher) {\r\n            onCVEvent(Constants.CV_LOG_EVENT, {\r\n                dateTime: new Date(),\r\n                eventType: "GatecrashEvent" /* GatecrashEvent */,\r\n                eventId: Constants.GATECRASH_ON_SURVEY_DATA_SUBMIT,\r\n                customProperties: {\r\n                    Message: "gatecrash: onSubmitCallback has been triggered for type:  + " + eventData.Type,\r\n                },\r\n                isMainContext: isMainContext,\r\n            });\r\n        }\r\n        try {\r\n            if (!hasSurveyDispatcher) {\r\n                onCVEvent(Constants.CV_SUBMIT_EVENT, {\r\n                    dateTime: new Date(),\r\n                    eventType: eventData.Type,\r\n                    formTitle: eventData.FormTitle,\r\n                    pageNumber: pageNumber.toString(),\r\n                    pageInfo: getPageInfo(eventData.Message),\r\n                    isMainContext: isMainContext,\r\n                });\r\n                /*Logic necessary to close the survey after the user selects Not Now at the prompt page. For more details please refer to the documentation of Survey as a Service. */\r\n                if (isPromptValueNo) {\r\n                    closeCVSurvey(parentElement, onCVEvent);\r\n                }\r\n            }\r\n        }\r\n        catch (e) {\r\n            onCVEvent(Constants.CV_LOG_EVENT, {\r\n                dateTime: new Date(),\r\n                eventType: "GatecrashEvent" /* GatecrashEvent */,\r\n                eventId: Constants.GATECRASH_ON_SURVEY_DATA_SUBMIT,\r\n                customProperties: { Message: "gatecrash: Error: " + e },\r\n                isMainContext: isMainContext,\r\n            });\r\n            unsubscribeEventHandler("WindowMessage");\r\n        }\r\n        finally {\r\n            /* Turning on autodismiss timer for thank you page */\r\n            if (eventData.Type === "FormResponseSubmitted" /* FormResponseSubmitted */ &&\r\n                pageNumber > 0) {\r\n                if ((_b = eventData === null || eventData === void 0 ? void 0 : eventData.FormTitle) === null || _b === void 0 ? void 0 : _b.includes("thankyou" /* ThankYou */)) {\r\n                    surveyFocus = false;\r\n                    if (timeOutEnabled !== false) {\r\n                        autoDismiss(surveyFocus, parentElement, onCVEvent, contextParam, true, hasSurveyDispatcher);\r\n                    }\r\n                }\r\n                else {\r\n                    /*\r\n                     Logic is necessary to close the survey after the user finishes to fill and send the information of a survey that does not have a Thank you Page.\r\n                     For more details, please refer to the documentation for Survey as a Service.\r\n                     */\r\n                    closeCVSurvey(parentElement, onCVEvent, undefined);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n// Creating the UI for the IFrame close button outside CV Survey\r\nfunction createCloseButton(parentElement, onCVEvent, contextParam) {\r\n    if (isNOU(parentElement))\r\n        return;\r\n    var surveyDiv = document.createElement("div");\r\n    var closeButton = document.createElement("button");\r\n    closeButton.id = Constants.CLOSE_BUTTON_ID;\r\n    surveyDiv.id = Constants.SURVEY_DIV_ID;\r\n    closeButton.textContent = "X";\r\n    surveyDiv.appendChild(closeButton);\r\n    parentElement.insertBefore(surveyDiv, parentElement.childNodes[0]);\r\n    var closeButtonCssStyle = "float: right; background: none; border: 0px;\\n  padding: 3px; margin-top: 5px; font-size: large; font-weigth: bolder";\r\n    if (contextParam.uiHostCVSurveyDispatcher === "Dark" /* Dark */ ||\r\n        contextParam.uiHostCVSurveyDispatcher === "HighContrast" /* HighContrast */) {\r\n        closeButtonCssStyle += "; color: white";\r\n    }\r\n    closeButton.setAttribute("style", closeButtonCssStyle);\r\n    setCloseButtonEvents(closeButton, onCVEvent, parentElement, contextParam);\r\n}\r\n// Setting cancel and mouse events on the close button created\r\nfunction setCloseButtonEvents(closeButton, onCVEvent, parentElement, contextParam) {\r\n    var mouseEnterHandler = function () {\r\n        closeButton.style.backgroundColor = "lightgray";\r\n    };\r\n    if (contextParam.uiHostCVSurveyDispatcher === "HighContrast" /* HighContrast */) {\r\n        mouseEnterHandler = function () {\r\n            closeButton.style.backgroundColor = "yellow";\r\n        };\r\n    }\r\n    subscribeEventHandler("CloseButtonMouseEnter", closeButton, "mouseenter", mouseEnterHandler);\r\n    var mouseLeaveHandler = function () {\r\n        closeButton.style.background = "none";\r\n    };\r\n    subscribeEventHandler("CloseButtonMouseLeave", closeButton, "mouseleave", mouseLeaveHandler);\r\n    var clickHandler = closeCVSurvey.bind(null, parentElement, onCVEvent, null);\r\n    subscribeEventHandler("CloseButtonClick", closeButton, "click", clickHandler);\r\n}\r\nfunction removeCloseButtonEvents(callBack) {\r\n    unsubscribeEventHandler("CloseButtonMouseEnter");\r\n    unsubscribeEventHandler("CloseButtonMouseLeave");\r\n    unsubscribeEventHandler("CloseButtonClick");\r\n    unsubscribeEventHandler("IFrameMouseOver");\r\n    callBack();\r\n}\r\n// Cancel function to close the survey\r\nfunction closeCVSurvey(parentElement, onCVEvent, closeTriggerEvent) {\r\n    removeCloseButtonEvents(function () {\r\n        if (!isNOU(onCVEvent))\r\n            unsubscribeEventHandler("WindowMessage");\r\n    });\r\n    parentElement === null || parentElement === void 0 ? void 0 : parentElement.remove();\r\n    surveyFocus = false;\r\n    if (!onCVEvent) {\r\n        return;\r\n    }\r\n    /*\r\n    Logic necessary to avoid the writing of the log for isPromptValueNo or isAdditionalPromptValueNo twice, due each option generates two events,\r\n    also to avoid the additional log of Survey_UI_ThankYouPage_AutoDismissed once the user close the Thankyou page\r\n    for more details please refer to the documentation of Survey as a Service.\r\n    */\r\n    if (isPromptValueNo == false &&\r\n        isAdditionalPromptValueNo == false &&\r\n        isThankyouPageClosed == false) {\r\n        var onCancelEventData = {\r\n            dateTime: new Date(),\r\n            eventType: closeTriggerEvent !== null && closeTriggerEvent !== void 0 ? closeTriggerEvent : "Unknown" /* Unknown */,\r\n            isMainContext: isMainContext,\r\n        };\r\n        updateOnCancelEventData(onCancelEventData);\r\n        onCVEvent(Constants.CV_CANCEL_EVENT, onCancelEventData);\r\n    }\r\n}\r\nfunction updateOnCancelEventData(data) {\r\n    var pageId = pageIdsStore[pageNumber];\r\n    if (data.eventType == "Unknown" /* Unknown */) {\r\n        switch (pageId) {\r\n            case "prompt" /* Prompt */:\r\n                data.eventType = "PromptClosed" /* PromptClosed */;\r\n                break;\r\n            case "rating" /* SurveyRating */:\r\n                data.eventType = "FormClosed" /* FormClosed */;\r\n                break;\r\n            case "additional" /* AdditionalPrompt */:\r\n                data.eventType = "AdditionalPromptClosed" /* AdditionalPromptClosed */;\r\n                break;\r\n            case "thankyou" /* ThankYou */:\r\n                isThankyouPageClosed = true;\r\n                data.eventType = "ThankYouPageClosed" /* ThankYouPageClosed */;\r\n                break;\r\n            default:\r\n                data.eventType = "FormClosed" /* FormClosed */;\r\n                data.pageNumber = pageId;\r\n                break;\r\n        }\r\n    }\r\n    else if (data.eventType == "FormResponseCanceled" /* FormResponseCanceled */ &&\r\n        pageId !== "rating" /* SurveyRating */) {\r\n        data.eventType = "FormClosed" /* FormClosed */;\r\n        data.pageNumber = (pageNumber + 1).toString();\r\n    }\r\n}\r\n// Function Renders the CV Survey\r\nfunction renderSurvey(parentElement, contextParams, onCVEvent, cancelButtonEnabled) {\r\n    var isSuccessful = false;\r\n    try {\r\n        var se = new SurveyEmbed_1.SurveyEmbed(contextParams === null || contextParams === void 0 ? void 0 : contextParams.customerVoiceFormId, Constants.DEFAULT_BASE_URL);\r\n        se.renderInline(parentElement, contextParams, cancelButtonEnabled);\r\n        isSuccessful = true;\r\n    }\r\n    catch (error) {\r\n        var result = error.message;\r\n        onCVEvent(Constants.CV_LOG_EVENT, {\r\n            dateTime: new Date(),\r\n            eventType: "GatecrashEvent" /* GatecrashEvent */,\r\n            eventId: Constants.GATECRASH_RENDER_ERROR,\r\n            customProperties: {\r\n                ErrorMessage: result !== null && result !== void 0 ? result : Constants.DEFAULT_ERR_MSG,\r\n            },\r\n            isMainContext: isMainContext,\r\n        });\r\n        throw error;\r\n    }\r\n    return isSuccessful;\r\n}\r\nfunction setSurveyGeneralStyles(parent) {\r\n    parent.style.padding = "0px";\r\n    parent.style.paddingRight = "10px";\r\n    parent.style.paddingLeft = "10px";\r\n}\r\n// Dismissal of the survey if no interaction with survey within a period of set time\r\nfunction autoDismiss(surveyFocus, parentElement, onCVEvent, contextParam, isThankyouPage, hasSurveyDispatcher) {\r\n    if (hasSurveyDispatcher === void 0) { hasSurveyDispatcher = false; }\r\n    if (!surveyFocus) {\r\n        var closeTriggerEvent_1 = isThankyouPage == true\r\n            ? "ThankYouPageAutoDismissed" /* ThankYouPageAutoDismissed */\r\n            : "FormAutoDismissed" /* FormAutoDismissed */;\r\n        var timeOutSeconds = void 0;\r\n        if (contextParam.autoDismiss) {\r\n            timeOutSeconds = contextParam.autoDismiss;\r\n        }\r\n        else {\r\n            timeOutSeconds = isThankyouPage === true ? 5000 : 20000;\r\n            if (isThankyouPage === true &&\r\n                hasSurveyDispatcher === true &&\r\n                surveyDispatcherTimeout === false) {\r\n                timeOutSeconds = 20000;\r\n                surveyDispatcherTimeout = true;\r\n            }\r\n        }\r\n        var timerID_1 = setTimeout(function () {\r\n            closeCVSurvey(parentElement, onCVEvent, closeTriggerEvent_1);\r\n        }, timeOutSeconds);\r\n        var iFrame = document.getElementById(Constants.IFRAME_ID);\r\n        if (iFrame) {\r\n            var mouseOverHandler = function () {\r\n                clearTimeout(timerID_1);\r\n                surveyFocus = true;\r\n            };\r\n            subscribeEventHandler("IFrameMouseOver", iFrame, "mouseover", mouseOverHandler, true);\r\n        }\r\n    }\r\n}\r\n// Reorganize format of the page info before submitting\r\nfunction getPageInfo(messages) {\r\n    if (isNOU(messages)) {\r\n        throw new Error("Error: Submit messages are null/undefined or length of 0");\r\n    }\r\n    var pages = [];\r\n    for (var i = 0; i < messages.length; i++) {\r\n        // going through the pages\r\n        if (messages[i].questionAnswers.length > 0) {\r\n            isPromptValueNo = validatePromptValue(messages[i].questionAnswers[0].subtitle, messages[i].questionAnswers[0].answer[0]);\r\n            // Validate if the survey has additional question and set the response for logging purposes in Floodgate Code\r\n            if (messages[i].questionAnswers[0].subtitle ==\r\n                "additional" /* AdditionalQuestion */ &&\r\n                !isNOU(messages[i].questionAnswers[0].answer[0])) {\r\n                if (messages[i].questionAnswers[0].answer[0] ==\r\n                    messages[i].questionAnswers[0].optionList[0]) {\r\n                    messages[i].questionAnswers[0].answer[0] = "2" /* Yes */;\r\n                }\r\n                else {\r\n                    messages[i].questionAnswers[0].answer[0] = "1" /* No */;\r\n                    isAdditionalPromptValueNo = true;\r\n                }\r\n            }\r\n            var questionAnswers = getQuestionList(messages[i].questionAnswers);\r\n            var pageType = messages[i].PageType;\r\n            var page = {\r\n                pageType: pageType,\r\n                questionAnswers: questionAnswers,\r\n            };\r\n            pages.push(page);\r\n        }\r\n    }\r\n    return pages;\r\n}\r\nfunction validatePromptValue(subtitle, answer) {\r\n    if (subtitle == "prompt" /* Prompt */ &&\r\n        !isNOU(answer) &&\r\n        isPromptValueNo == false) {\r\n        if (answer == "1" /* No */) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nexports.validatePromptValue = validatePromptValue;\r\nfunction shouldIncludeSurveyQuesitonAnswer(_currentQA) {\r\n    //if the subtitle is label, we do not want to store anything.\r\n    if (_currentQA.subtitle == "label" /* Label */) {\r\n        return false;\r\n    }\r\n    //otherwise, we store the question and answer\r\n    return true;\r\n}\r\nexports.shouldIncludeSurveyQuesitonAnswer = shouldIncludeSurveyQuesitonAnswer;\r\n//Reorganize format of the questions for data contract before submitting\r\nfunction getQuestionList(currentMessage) {\r\n    if (isNOU(currentMessage)) {\r\n        throw new Error("Error: current message is null/undefined or length of 0");\r\n    }\r\n    var qaList = [];\r\n    for (var j = 0; j < currentMessage.length; j++) {\r\n        var currentQA = currentMessage[j];\r\n        if (shouldIncludeSurveyQuesitonAnswer(currentQA)) {\r\n            qaList.push(getSurveyQuestionAnswer(currentQA));\r\n        }\r\n    }\r\n    return qaList;\r\n}\r\nfunction getSurveyQuestionAnswer(currentMessage) {\r\n    var currentQA = currentMessage;\r\n    var qa = {\r\n        questionType: currentQA.subtitle,\r\n        questionId: currentQA.questionId,\r\n        // actual localized question that was displayed on the survey\r\n        questionValue: currentQA.title,\r\n        // actual value the user entered or choices the user selected on the survey\r\n        answerValue: currentQA.answer,\r\n    };\r\n    return qa;\r\n}\r\nexports.getSurveyQuestionAnswer = getSurveyQuestionAnswer;\r\nvar internal = {\r\n    registeredEventHandlers: registeredEventHandlers,\r\n    subscribeEventHandler: subscribeEventHandler,\r\n    unsubscribeEventHandler: unsubscribeEventHandler,\r\n    safeWrapHandleSurveyEvent: safeWrapHandleSurveyEvent,\r\n    createSurveyContainer: createSurveyContainer,\r\n    renderSurvey: renderSurvey,\r\n    getPageInfo: getPageInfo,\r\n    getQuestionList: getQuestionList,\r\n};\r\nexports.unitTestExports = { internal: internal }.internal;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL0NWU3VydmV5LnRzP2FiMDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkdBQTRDO0FBZTVDLHFHQUF5QztBQUV6QyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDeEIsSUFBSSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFDcEMsSUFBTSxlQUFlLEdBQWEsRUFBRSxDQUFDO0FBQ3JDLElBQU0sWUFBWSxHQUFhLEVBQUUsQ0FBQztBQUNsQyxJQUFNLGtCQUFrQixHQUFhLEVBQUUsQ0FBQztBQUN4QyxJQUFNLHVCQUF1QixHQUV6QixFQUFFLENBQUM7QUFDUCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDNUIsSUFBSSx5QkFBeUIsR0FBRyxLQUFLLENBQUM7QUFDdEMsSUFBSSxvQkFBb0IsR0FBRyxLQUFLLENBQUM7QUFDakMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztBQUV6Qjs7Ozs7Ozs7O0dBU0c7QUFDSCxJQUFNLHFCQUFxQixHQUFHLFVBQzVCLFFBQXlCLEVBQ3pCLFlBQThCLEVBQzlCLFNBQWlCLEVBQ2pCLFlBQW9DLEVBQ3BDLElBQVk7SUFBWixtQ0FBWTtJQUVaLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXZFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsR0FBRztRQUMzQyxPQUFPLEVBQUUsWUFBWTtRQUNyQixLQUFLLEVBQUUsU0FBUztRQUNoQixPQUFPLEVBQUUsWUFBWTtLQUN0QixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxJQUFNLHVCQUF1QixHQUFHLFVBQUMsUUFBeUI7SUFDeEQsSUFBTSxXQUFXLEdBQ2YsUUFBUSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLElBQUksV0FBVyxFQUFFO1FBQ2YsV0FBVyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FDckMsV0FBVyxDQUFDLEtBQUssRUFDakIsV0FBVyxDQUFDLE9BQU8sQ0FDcEIsQ0FBQztRQUNGLE9BQU8sUUFBUSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ25EO0FBQ0gsQ0FBQyxDQUFDO0FBRVcsc0JBQWMsR0FBb0IsVUFDN0MsaUJBQXVDLEVBQ3ZDLFNBQStCLEVBQy9CLGFBQStCLEVBQy9CLDRCQUE0RCxFQUM1RCxxQkFBNEI7SUFBNUIsb0VBQTRCO0lBRTVCLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztJQUN0QyxJQUFNLGdCQUFnQixHQUNwQix5QkFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV2QyxJQUFNLE1BQU0sR0FDVixPQUFPLGlCQUFpQixLQUFLLFFBQVE7UUFDbkMsQ0FBQyxDQUFDLHFCQUFxQixDQUNuQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYiw0QkFBNEIsQ0FDN0I7UUFDSCxDQUFDLENBQUMsaUJBQWlCLENBQUM7SUFDeEIsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPO0lBRXBCLGtFQUFrRTtJQUNsRSxrQkFBa0IsQ0FDaEIsTUFBTSxFQUNOLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsNEJBQTRCLGFBQTVCLDRCQUE0Qix1QkFBNUIsNEJBQTRCLENBQUUsY0FBYyxDQUM3QyxDQUFDO0lBRUYsSUFBSTtRQUNGLFlBQVksQ0FDVixNQUFNLEVBQ04sYUFBYSxFQUNiLGdCQUFnQixFQUNoQiw0QkFBNEIsYUFBNUIsNEJBQTRCLHVCQUE1Qiw0QkFBNEIsQ0FBRSxtQkFBbUIsQ0FDbEQsQ0FBQztRQUNGLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksNkJBQTRCLGFBQTVCLDRCQUE0Qix1QkFBNUIsNEJBQTRCLENBQUUsa0JBQWtCLE1BQUssS0FBSyxFQUFFO1lBQzlELGlCQUFpQixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUM1RDtLQUNGO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxJQUFNLE1BQU0sR0FBSSxLQUFlLENBQUMsT0FBTyxDQUFDO1FBQ3hDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7WUFDdkMsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLFNBQVMsdUNBQW9DO1lBQzdDLE9BQU8sRUFBRSxTQUFTLENBQUMsc0JBQXNCO1lBQ3pDLGdCQUFnQixFQUFFO2dCQUNoQixZQUFZLEVBQUUsTUFBTSxhQUFOLE1BQU0sY0FBTixNQUFNLEdBQUksU0FBUyxDQUFDLGVBQWU7YUFDbEQ7WUFDRCxhQUFhO1NBQ2QsQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDLENBQUM7QUFFRixTQUFTLHlCQUF5QixDQUNoQyxhQUFtQztJQUVuQyxJQUFNLG9CQUFvQixHQUF5QixVQUNqRCxHQUFxQixFQUNyQixJQUF3Qjs7UUFFeEIsSUFBSTtZQUNGLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDMUI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQU0sY0FBYyxTQUNqQixLQUFlLENBQUMsT0FBTyxtQ0FBSSxTQUFTLENBQUMsZUFBZSxDQUFDO1lBQ3hELElBQUk7Z0JBQ0YsYUFBYSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7b0JBQ3BDLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtvQkFDcEIsU0FBUyx1Q0FBb0M7b0JBQzdDLE9BQU8sRUFBRSxTQUFTLENBQUMsbUJBQW1CO29CQUN0QyxnQkFBZ0IsRUFBRTt3QkFDaEIsWUFBWSxFQUFFLGNBQWM7cUJBQzdCO2lCQUNGLENBQUMsQ0FBQzthQUNKO1lBQUMsT0FBTyxXQUFXLEVBQUU7Z0JBQ3BCLElBQU0sb0JBQW9CLFNBQ3ZCLFdBQXFCLENBQUMsT0FBTyxtQ0FBSSxTQUFTLENBQUMsZUFBZSxDQUFDO2dCQUM5RCxPQUFPLENBQUMsS0FBSyxDQUNYLDhDQUE4QztxQkFDNUMsd0NBQXNDLGNBQWMsTUFBRztxQkFDdkQseUNBQXVDLG9CQUFzQixFQUNoRSxDQUFDO2FBQ0g7U0FDRjtJQUNILENBQUMsQ0FBQztJQUNGLE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQztBQUVELHlEQUF5RDtBQUN6RCw4REFBOEQ7QUFDOUQsU0FBUyxLQUFLLENBQUMsS0FBVTtJQUN2QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQ25CLDRCQUE0RDtJQUU1RCxJQUFNLFFBQVEsR0FDWiw0QkFBNEIsSUFBSSw0QkFBNEIsQ0FBQyxXQUFXO1FBQ3RFLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXO1FBQzFDLENBQUMsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsV0FBVyxDQUFDO0lBQ3JELElBQU0sTUFBTSxHQUNWLDRCQUE0QixJQUFJLDRCQUE0QixDQUFDLFNBQVM7UUFDcEUsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLFNBQVM7UUFDeEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUM7SUFDbkQsSUFBTSxNQUFNLEdBQ1YsNEJBQTRCLElBQUksNEJBQTRCLENBQUMsU0FBUztRQUNwRSxDQUFDLENBQUMsNEJBQTRCLENBQUMsU0FBUztRQUN4QyxDQUFDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQztJQUNuRCxJQUFNLEtBQUssR0FDVCw0QkFBNEIsSUFBSSw0QkFBNEIsQ0FBQyxRQUFRO1FBQ25FLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRO1FBQ3ZDLENBQUMsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDO0lBQ2xELE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FDNUIsYUFBcUIsRUFDckIsU0FBK0IsRUFDL0IsWUFBOEIsRUFDOUIsNEJBQTREO0lBRTVELElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDbEIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7WUFDaEMsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLFNBQVMsdUNBQW9DO1lBQzdDLE9BQU8sRUFBRSxTQUFTLENBQUMsc0JBQXNCO1lBQ3pDLGdCQUFnQixFQUFFO2dCQUNoQixPQUFPLEVBQUUsK0JBQStCO2FBQ3pDO1lBQ0QsYUFBYTtTQUNkLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxJQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELGVBQWUsQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDO0lBQ25DLElBQ0UsWUFBWSxDQUFDLHdCQUF3QixzQkFBK0I7UUFDcEUsWUFBWSxDQUFDLHdCQUF3QixzQ0FBdUMsRUFDNUU7UUFDQSxlQUFlLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7S0FDakQ7SUFDSyxTQUFvQyxZQUFZLENBQ3BELDRCQUE0QixDQUM3QixFQUZNLFFBQVEsVUFBRSxNQUFNLFVBQUUsTUFBTSxVQUFFLEtBQUssUUFFckMsQ0FBQztJQUNGLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMxQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdEMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3RDLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUUzQyxJQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDWCxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRTtZQUNoQyxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDcEIsU0FBUyx1Q0FBb0M7WUFDN0MsT0FBTyxFQUFFLFNBQVMsQ0FBQyxzQkFBc0I7WUFDekMsZ0JBQWdCLEVBQUU7Z0JBQ2hCLE9BQU8sRUFBRSw0QkFBMEIsYUFBYSxnQkFBYTthQUM5RDtZQUNELGFBQWE7U0FDZCxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQzlCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUN6QixhQUEwQixFQUMxQixTQUErQixFQUMvQixZQUE4QixFQUM5QixjQUF3QjtJQUV4QixJQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FDbEQsSUFBSSxFQUNKLFNBQVMsRUFDVCxhQUFhLEVBQ2IsY0FBYyxhQUFkLGNBQWMsY0FBZCxjQUFjLEdBQUksSUFBSSxFQUN0QixZQUFZLENBQ2IsQ0FBQztJQUVGLHFCQUFxQixDQUNuQixlQUFlLEVBQ2YsTUFBTSxFQUNOLFNBQVMsRUFDVCxvQkFBb0IsQ0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRCw4Q0FBOEM7QUFDOUMsU0FBUyxXQUFXLENBQUMsWUFBb0I7SUFDdkMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQUUsT0FBTztJQUNoQyw4Q0FBOEM7SUFDOUMsSUFBTSxVQUFVLEdBQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFPLENBQUM7SUFFOUQsdURBQXVEO0lBQ3ZELElBQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQ2pDLFVBQUMsU0FBUyxJQUFLLGFBQUcsU0FBVyxFQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBNUIsQ0FBNEIsQ0FDdEMsQ0FBQztJQUNSLGVBQWUsQ0FBQyxJQUFJLE9BQXBCLGVBQWUsRUFBUyxZQUFZLEVBQUU7SUFFdEMsNERBQTREO0lBQzVELElBQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBQyxTQUFTO1FBQzdDLGFBQUcsU0FBVyxFQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7SUFBbkMsQ0FBbUMsQ0FDOUIsQ0FBQztJQUNSLFlBQVksQ0FBQyxJQUFJLE9BQWpCLFlBQVksRUFBUyxhQUFhLEVBQUU7QUFDdEMsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQ3pCLFNBQStCLEVBQy9CLGFBQTBCLEVBQzFCLGNBQXVCLEVBQ3ZCLFlBQThCLEVBQzlCLEtBQW1COztJQUVuQiw4REFBOEQ7SUFDOUQsSUFBTSxTQUFTLEdBQVEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLElBQUksQ0FBQztJQUVuQyxTQUFTLFlBQVksQ0FBQyxrQkFBNEI7UUFDaEQsc0RBQXNEO1FBQ3RELHVFQUF1RTtRQUN2RSxrQkFBa0I7WUFDaEIsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE1BQU07Z0JBQ3pCLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUksQ0FBQztZQUN4RCxDQUFDLENBQUMsZUFBZSxDQUFDLE1BQU07Z0JBQ3RCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUksQ0FBQyxDQUFDO1FBRTFELElBQUksYUFBYSxFQUFFO1lBQ2pCLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLGtCQUFrQixDQUFDLE1BQU07Z0JBQ3RELENBQUMsQ0FBQyxLQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBRyxDQUFDLHdFQUF3RTtnQkFDNUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLDJCQUEyQjtTQUN6QztJQUNILENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUNwQixPQUFPO0tBQ1I7SUFFRCxJQUNFLE9BQU8sU0FBUyxJQUFJLFFBQVE7UUFDNUIsU0FBUyxDQUFDLFFBQVEsK0NBQXdDLEVBQzFEO1FBQ0EsSUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVsRSxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQ3RDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDbkQsT0FBTztTQUNSO0tBQ0Y7SUFFRCxJQUFNLG1CQUFtQixTQUFHLFNBQVMsQ0FBQyxTQUFTLDBDQUFFLFFBQVEsQ0FDdkQseUJBQXlCLENBQzFCLENBQUM7SUFFRix1SEFBdUg7SUFDdkgsSUFBSSxTQUFTLENBQUMsSUFBSSxrREFBMkMsRUFBRTtRQUM3RCx5RkFBeUY7UUFDekYsMEVBQTBFO1FBQzFFLHVEQUF1RDtRQUN2RCxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLFVBQVUsSUFBSSxDQUFDLENBQUM7U0FDakI7UUFFRCw4REFBOEQ7UUFDOUQsRUFBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsT0FBTyxLQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEQsWUFBWSxFQUFFLENBQUM7UUFDZixhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFdkUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUU7WUFDbkMsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSTtZQUN6QixvQkFBb0IsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDNUQsbUJBQW1CO1lBQ25CLGFBQWE7U0FDZCxDQUFDLENBQUM7UUFFSCxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsSUFBSSxHQUFHO1FBQ3RCLElBQUksY0FBYyxLQUFLLEtBQUssSUFBSSxVQUFVLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDaEQsV0FBVyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsT0FBTztLQUNSO0lBRUQsc0JBQXNCO0lBQ3RCLElBQUksU0FBUyxDQUFDLElBQUksOENBQXlDLEVBQUU7UUFDM0QsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3BCO0lBRUQsSUFBSSxTQUFTLENBQUMsSUFBSSxzREFBNkMsRUFBRTtRQUMvRCxzRkFBc0Y7UUFDdEYsSUFBTSxpQkFBaUIsb0RBQ21CLENBQUM7UUFFM0MsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7WUFDaEMsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLFNBQVMsdUNBQW9DO1lBQzdDLE9BQU8sRUFBRSxTQUFTLENBQUMsMEJBQTBCO1lBQzdDLGdCQUFnQixFQUFFO2dCQUNoQixPQUFPLEVBQUUseUNBQXVDLGlCQUFtQjthQUNwRTtZQUNELGFBQWE7U0FDZCxDQUFDLENBQUM7UUFFSCxhQUFhLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNELE9BQU87S0FDUjtJQUVELElBQ0UsU0FBUyxDQUFDLElBQUksd0RBQThDO1FBQzVELFNBQVMsQ0FBQyxJQUFJLHNFQUFxRCxFQUNuRTtRQUNBLFVBQVUsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLFlBQVksRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFO2dCQUNoQyxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCLFNBQVMsdUNBQW9DO2dCQUM3QyxPQUFPLEVBQUUsU0FBUyxDQUFDLCtCQUErQjtnQkFDbEQsZ0JBQWdCLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxpRUFBK0QsU0FBUyxDQUFDLElBQU07aUJBQ3pGO2dCQUNELGFBQWE7YUFDZCxDQUFDLENBQUM7U0FDSjtRQUVELElBQUk7WUFDRixJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3hCLFNBQVMsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFO29CQUNuQyxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7b0JBQ3BCLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSTtvQkFDekIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTO29CQUM5QixVQUFVLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRTtvQkFDakMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO29CQUN4QyxhQUFhO2lCQUNkLENBQUMsQ0FBQztnQkFFSCxzS0FBc0s7Z0JBQ3RLLElBQUksZUFBZSxFQUFFO29CQUNuQixhQUFhLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2lCQUN6QzthQUNGO1NBQ0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFO2dCQUNoQyxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BCLFNBQVMsdUNBQW9DO2dCQUM3QyxPQUFPLEVBQUUsU0FBUyxDQUFDLCtCQUErQjtnQkFDbEQsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsdUJBQXFCLENBQUcsRUFBRTtnQkFDdkQsYUFBYTthQUNkLENBQUMsQ0FBQztZQUVILHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzFDO2dCQUFTO1lBQ1IscURBQXFEO1lBQ3JELElBQ0UsU0FBUyxDQUFDLElBQUksd0RBQThDO2dCQUM1RCxVQUFVLEdBQUcsQ0FBQyxFQUNkO2dCQUNBLFVBQUksU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLFNBQVMsMENBQUUsUUFBUSw2QkFBK0I7b0JBQy9ELFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3BCLElBQUksY0FBYyxLQUFLLEtBQUssRUFBRTt3QkFDNUIsV0FBVyxDQUNULFdBQVcsRUFDWCxhQUFhLEVBQ2IsU0FBUyxFQUNULFlBQVksRUFDWixJQUFJLEVBQ0osbUJBQW1CLENBQ3BCLENBQUM7cUJBQ0g7aUJBQ0Y7cUJBQU07b0JBQ0w7Ozt1QkFHRztvQkFDSCxhQUFhLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztpQkFDcEQ7YUFDRjtTQUNGO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsZ0VBQWdFO0FBQ2hFLFNBQVMsaUJBQWlCLENBQ3hCLGFBQTBCLEVBQzFCLFNBQStCLEVBQy9CLFlBQThCO0lBRTlCLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUFFLE9BQU87SUFFakMsSUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxJQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXJELFdBQVcsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQztJQUMzQyxTQUFTLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7SUFFdkMsV0FBVyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7SUFDOUIsU0FBUyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVuQyxhQUFhLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkUsSUFBSSxtQkFBbUIsR0FBRyxzSEFDMkMsQ0FBQztJQUN0RSxJQUNFLFlBQVksQ0FBQyx3QkFBd0Isc0JBQStCO1FBQ3BFLFlBQVksQ0FBQyx3QkFBd0Isc0NBQXVDLEVBQzVFO1FBQ0EsbUJBQW1CLElBQUksZ0JBQWdCLENBQUM7S0FDekM7SUFDRCxXQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZELG9CQUFvQixDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCw4REFBOEQ7QUFDOUQsU0FBUyxvQkFBb0IsQ0FDM0IsV0FBd0IsRUFDeEIsU0FBK0IsRUFDL0IsYUFBMEIsRUFDMUIsWUFBOEI7SUFFOUIsSUFBSSxpQkFBaUIsR0FBRztRQUN0QixXQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUM7SUFDbEQsQ0FBQyxDQUFDO0lBQ0YsSUFDRSxZQUFZLENBQUMsd0JBQXdCLHNDQUF1QyxFQUM1RTtRQUNBLGlCQUFpQixHQUFHO1lBQ2xCLFdBQVcsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztRQUMvQyxDQUFDLENBQUM7S0FDSDtJQUNELHFCQUFxQixDQUNuQix1QkFBdUIsRUFDdkIsV0FBVyxFQUNYLFlBQVksRUFDWixpQkFBaUIsQ0FDbEIsQ0FBQztJQUVGLElBQU0saUJBQWlCLEdBQUc7UUFDeEIsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0lBQ3hDLENBQUMsQ0FBQztJQUNGLHFCQUFxQixDQUNuQix1QkFBdUIsRUFDdkIsV0FBVyxFQUNYLFlBQVksRUFDWixpQkFBaUIsQ0FDbEIsQ0FBQztJQUVGLElBQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUUscUJBQXFCLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNoRixDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxRQUFvQjtJQUNuRCx1QkFBdUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ2pELHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDakQsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM1Qyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRTNDLFFBQVEsRUFBRSxDQUFDO0FBQ2IsQ0FBQztBQUVELHNDQUFzQztBQUN0QyxTQUFTLGFBQWEsQ0FDcEIsYUFBMEIsRUFDMUIsU0FBK0IsRUFDL0IsaUJBQXVDO0lBRXZDLHVCQUF1QixDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQUUsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsTUFBTSxHQUFHO0lBQ3hCLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFFcEIsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNkLE9BQU87S0FDUjtJQUVEOzs7O01BSUU7SUFDRixJQUNFLGVBQWUsSUFBSSxLQUFLO1FBQ3hCLHlCQUF5QixJQUFJLEtBQUs7UUFDbEMsb0JBQW9CLElBQUksS0FBSyxFQUM3QjtRQUNBLElBQU0saUJBQWlCLEdBQXVCO1lBQzVDLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixTQUFTLEVBQUUsaUJBQWlCLGFBQWpCLGlCQUFpQixjQUFqQixpQkFBaUIsMEJBQStCO1lBQzNELGFBQWE7U0FDZCxDQUFDO1FBQ0YsdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzQyxTQUFTLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3pEO0FBQ0gsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsSUFBd0I7SUFDdkQsSUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhDLElBQUksSUFBSSxDQUFDLFNBQVMsMkJBQStCLEVBQUU7UUFDakQsUUFBUSxNQUFNLEVBQUU7WUFDZDtnQkFDRSxJQUFJLENBQUMsU0FBUyxvQ0FBbUMsQ0FBQztnQkFDbEQsTUFBTTtZQUNSO2dCQUNFLElBQUksQ0FBQyxTQUFTLGdDQUFpQyxDQUFDO2dCQUNoRCxNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxDQUFDLFNBQVMsd0RBQTZDLENBQUM7Z0JBQzVELE1BQU07WUFDUjtnQkFDRSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLGdEQUF5QyxDQUFDO2dCQUN4RCxNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxDQUFDLFNBQVMsZ0NBQWlDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUN6QixNQUFNO1NBQ1Q7S0FDRjtTQUFNLElBQ0wsSUFBSSxDQUFDLFNBQVMscURBQTRDO1FBQzFELE1BQU0sZ0NBQW9DLEVBQzFDO1FBQ0EsSUFBSSxDQUFDLFNBQVMsZ0NBQWlDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztLQUMvQztBQUNILENBQUM7QUFFRCxpQ0FBaUM7QUFDakMsU0FBUyxZQUFZLENBQ25CLGFBQTBCLEVBQzFCLGFBQStCLEVBQy9CLFNBQStCLEVBQy9CLG1CQUE2QjtJQUU3QixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDekIsSUFBSTtRQUNGLElBQU0sRUFBRSxHQUFHLElBQUkseUJBQVcsQ0FDeEIsYUFBYSxhQUFiLGFBQWEsdUJBQWIsYUFBYSxDQUFFLG1CQUFtQixFQUNsQyxTQUFTLENBQUMsZ0JBQWdCLENBQzNCLENBQUM7UUFDRixFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNuRSxZQUFZLEdBQUcsSUFBSSxDQUFDO0tBQ3JCO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxJQUFNLE1BQU0sR0FBSSxLQUFlLENBQUMsT0FBTyxDQUFDO1FBQ3hDLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFO1lBQ2hDLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixTQUFTLHVDQUFvQztZQUM3QyxPQUFPLEVBQUUsU0FBUyxDQUFDLHNCQUFzQjtZQUN6QyxnQkFBZ0IsRUFBRTtnQkFDaEIsWUFBWSxFQUFFLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLFNBQVMsQ0FBQyxlQUFlO2FBQ2xEO1lBQ0QsYUFBYTtTQUNkLENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxDQUFDO0tBQ2I7SUFDRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxNQUFtQjtJQUNqRCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQ25DLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUNwQyxDQUFDO0FBRUQsb0ZBQW9GO0FBQ3BGLFNBQVMsV0FBVyxDQUNsQixXQUFvQixFQUNwQixhQUEwQixFQUMxQixTQUErQixFQUMvQixZQUE4QixFQUM5QixjQUF3QixFQUN4QixtQkFBMkI7SUFBM0IsaUVBQTJCO0lBRTNCLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDaEIsSUFBTSxtQkFBaUIsR0FDckIsY0FBYyxJQUFJLElBQUk7WUFDcEIsQ0FBQztZQUNELENBQUMsNENBQXNDLENBQUM7UUFFNUMsSUFBSSxjQUFjLFNBQVEsQ0FBQztRQUMzQixJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUU7WUFDNUIsY0FBYyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUM7U0FDM0M7YUFBTTtZQUNMLGNBQWMsR0FBRyxjQUFjLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUN4RCxJQUNFLGNBQWMsS0FBSyxJQUFJO2dCQUN2QixtQkFBbUIsS0FBSyxJQUFJO2dCQUM1Qix1QkFBdUIsS0FBSyxLQUFLLEVBQ2pDO2dCQUNBLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLHVCQUF1QixHQUFHLElBQUksQ0FBQzthQUNoQztTQUNGO1FBRUQsSUFBTSxTQUFPLEdBQUcsVUFBVSxDQUFDO1lBQ3pCLGFBQWEsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLG1CQUFpQixDQUFDLENBQUM7UUFDN0QsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ25CLElBQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVELElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBTSxnQkFBZ0IsR0FBRztnQkFDdkIsWUFBWSxDQUFDLFNBQU8sQ0FBQyxDQUFDO2dCQUN0QixXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLENBQUMsQ0FBQztZQUNGLHFCQUFxQixDQUNuQixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsSUFBSSxDQUNMLENBQUM7U0FDSDtLQUNGO0FBQ0gsQ0FBQztBQUVELHVEQUF1RDtBQUN2RCxTQUFTLFdBQVcsQ0FBQyxRQUF5QjtJQUM1QyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7S0FDN0U7SUFDRCxJQUFNLEtBQUssR0FBZ0IsRUFBRSxDQUFDO0lBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hDLDBCQUEwQjtRQUMxQixJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxQyxlQUFlLEdBQUcsbUJBQW1CLENBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUN2QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDekMsQ0FBQztZQUVGLDZHQUE2RztZQUM3RyxJQUNFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtxREFDSTtnQkFDM0MsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEQ7Z0JBQ0EsSUFDRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ3hDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUM1QztvQkFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZ0JBQTRCLENBQUM7aUJBQ3RFO3FCQUFNO29CQUNMLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUEyQixDQUFDO29CQUNwRSx5QkFBeUIsR0FBRyxJQUFJLENBQUM7aUJBQ2xDO2FBQ0Y7WUFDRCxJQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JFLElBQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDdEMsSUFBTSxJQUFJLEdBQWM7Z0JBQ3RCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixlQUFlO2FBQ2hCLENBQUM7WUFDRixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xCO0tBQ0Y7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxRQUFnQixFQUFFLE1BQWM7SUFDbEUsSUFDRSxRQUFRLHlCQUFpQztRQUN6QyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDZCxlQUFlLElBQUksS0FBSyxFQUN4QjtRQUNBLElBQUksTUFBTSxnQkFBNEIsRUFBRTtZQUN0QyxPQUFPLElBQUksQ0FBQztTQUNiO0tBQ0Y7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFaRCxrREFZQztBQUVELFNBQWdCLGlDQUFpQyxDQUMvQyxVQUEyQjtJQUUzQiw2REFBNkQ7SUFDN0QsSUFBSSxVQUFVLENBQUMsUUFBUSx1QkFBZ0MsRUFBRTtRQUN2RCxPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsNkNBQTZDO0lBQzdDLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQVRELDhFQVNDO0FBRUQsd0VBQXdFO0FBQ3hFLFNBQVMsZUFBZSxDQUN0QixjQUFpQztJQUVqQyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRTtRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7S0FDNUU7SUFDRCxJQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO0lBQzNDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzlDLElBQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxJQUFJLGlDQUFpQyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUNqRDtLQUNGO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUNyQyxjQUErQjtJQUUvQixJQUFNLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFDakMsSUFBTSxFQUFFLEdBQTBCO1FBQ2hDLFlBQVksRUFBRSxTQUFTLENBQUMsUUFBUTtRQUNoQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVU7UUFDaEMsNkRBQTZEO1FBQzdELGFBQWEsRUFBRSxTQUFTLENBQUMsS0FBSztRQUM5QiwyRUFBMkU7UUFDM0UsV0FBVyxFQUFFLFNBQVMsQ0FBQyxNQUFNO0tBQzlCLENBQUM7SUFDRixPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFiRCwwREFhQztBQUVELElBQU0sUUFBUSxHQUFHO0lBQ2YsdUJBQXVCO0lBQ3ZCLHFCQUFxQjtJQUNyQix1QkFBdUI7SUFDdkIseUJBQXlCO0lBQ3pCLHFCQUFxQjtJQUNyQixZQUFZO0lBQ1osV0FBVztJQUNYLGVBQWU7Q0FDaEIsQ0FBQztBQUV1Qix1QkFBZSxHQUFLLEVBQUUsUUFBUSxZQUFFLFVBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZ2F0ZWNyYXNoL2Rpc3QvQ1ZTdXJ2ZXkuanMuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/gatecrash/dist/CVSurvey.js\n')},"./node_modules/gatecrash/dist/SurveyEmbed.js":function(){"use strict";eval('\r\n/**\r\n * @copyright Copyright (c) Microsoft Corporation.  All rights reserved.\r\n */\r\nvar __assign = (this && this.__assign) || function () {\r\n    __assign = Object.assign || function(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n                t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nexports.SurveyEmbed = void 0;\r\nvar Constants = __webpack_require__(/*! ./constants */ "./node_modules/gatecrash/dist/constants.js");\r\n/**\r\n * Provides the implementation for embedding the Forms Pro survey into the host application\r\n */\r\nvar SurveyEmbed = /** @class */ (function () {\r\n    function SurveyEmbed(form_id, base_url) {\r\n        this._formId = form_id;\r\n        if (!this._formId) {\r\n            throw new Error("form_id should be provided.");\r\n        }\r\n        base_url\r\n            ? (this._baseUrl = base_url)\r\n            : (this._baseUrl = Constants.DEFAULT_BASE_URL);\r\n        this._compact = "false";\r\n    }\r\n    /**\r\n     * Renders the response page iframe as a child inside the specified parent_element\r\n     * The form is shown on the invocation of this API. We need an interim step to get access to the\r\n     * user\'s context.\r\n     *\r\n     * @param parent_element Required parent dom element (usually a div)\r\n     * @param user_context Required context to initialize the form with.\r\n     * @param cancelButtonEnabled Whether the cancel button is enabled.\r\n     */\r\n    SurveyEmbed.prototype.renderInline = function (parent_element, user_context, cancelButtonEnabled) {\r\n        /* Validations:\r\n         * 1. form_id not null. Whether it maps to a valid form is not handled here\r\n         * 2. parent_element is not null\r\n         *\r\n         * */\r\n        if (!parent_element) {\r\n            throw new Error("Parent element not provided to renderInline");\r\n        }\r\n        var surveyIFrame = this.createSurveyIFrame(user_context, cancelButtonEnabled);\r\n        parent_element.textContent = "";\r\n        parent_element.appendChild(surveyIFrame);\r\n    };\r\n    /**\r\n     * Creates the iframe to host survey content.\r\n     *\r\n     * @param user_context Required context to initialize the form with.\r\n     * @param cancelButtonEnabled Whether the cancel button is enabled.\r\n     */\r\n    SurveyEmbed.prototype.createSurveyIFrame = function (user_context, cancelButtonEnabled) {\r\n        var surveyIFrame = document.createElement("iframe");\r\n        surveyIFrame.src = this.generateUrl(user_context, cancelButtonEnabled);\r\n        surveyIFrame.id = Constants.IFRAME_ID;\r\n        surveyIFrame.width = "100%";\r\n        surveyIFrame.height = "100%";\r\n        surveyIFrame.style.border = "none";\r\n        return surveyIFrame;\r\n    };\r\n    /**\r\n     * Creates the URL for the survey with the context\r\n     * @param user_context Required context to initialize the form with.\r\n     * @param cancelButtonEnabled Whether the cancel button is enabled.\r\n     */\r\n    SurveyEmbed.prototype.generateUrl = function (user_context, cancelButtonEnabled) {\r\n        if (user_context === undefined || user_context === null) {\r\n            throw new Error("user_context is requred");\r\n        }\r\n        var url = this._baseUrl + "Pages/ResponsePage.aspx?";\r\n        var enableCancel = cancelButtonEnabled !== false ? "true" : "false";\r\n        url += this._getQueryStringParameter("id", this._formId);\r\n        url += "&" + this._getQueryStringParameter("embed", "true");\r\n        if (this._compact) {\r\n            url += "&" + this._getQueryStringParameter("compact", this._compact);\r\n        }\r\n        var urlParams = user_context.urlParams;\r\n        var queryParams;\r\n        try {\r\n            queryParams = JSON.stringify(__assign(__assign({}, user_context), { urlParams: undefined }));\r\n        }\r\n        catch (e) {\r\n            queryParams = "{}";\r\n        }\r\n        if (queryParams) {\r\n            url += "&" + this._getQueryStringParameter("ctx", queryParams);\r\n        }\r\n        if (user_context &&\r\n            Object.prototype.hasOwnProperty.call(user_context, "locale")) {\r\n            url += "&lang=" + user_context["locale"];\r\n        }\r\n        else {\r\n            throw new Error("locale should be provided");\r\n        }\r\n        url += "&datawithevent=true&showcancel=" + enableCancel + "&embed=true&oembedocv=" + enableCancel + "&themecolor=" + (urlParams && urlParams.appPrimaryColor ? urlParams.appPrimaryColor : "") + "&autosubmit=true&autonavigate=true&disableresponsive=true&hostappdomain=" + window.location.protocol + "//" + (window.location.hostname +\r\n            (window.location.port ? ":" + window.location.port : "")) + "/";\r\n        return url;\r\n    };\r\n    /**\r\n     * Precondition: name is not null\r\n     * @param name\r\n     * @param value\r\n     */\r\n    SurveyEmbed.prototype._getQueryStringParameter = function (name, value) {\r\n        //encode the QS parameter name and the value using encodeURIComponent.\r\n        return encodeURIComponent(name) + "=" + encodeURIComponent(value);\r\n    };\r\n    return SurveyEmbed;\r\n}());\r\nexports.SurveyEmbed = SurveyEmbed;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL1N1cnZleUVtYmVkLnRzPzZiMzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7OztBQUdILHFHQUF5QztBQUN6Qzs7R0FFRztBQUNIO0lBS0UscUJBQVksT0FBZSxFQUFFLFFBQWlCO1FBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztTQUNoRDtRQUVELFFBQVE7WUFDTixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLGtDQUFZLEdBQW5CLFVBQ0UsY0FBa0MsRUFDbEMsWUFBMEIsRUFDMUIsbUJBQTZCO1FBRTdCOzs7O2FBSUs7UUFDTCxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztTQUNoRTtRQUVELElBQU0sWUFBWSxHQUFzQixJQUFJLENBQUMsa0JBQWtCLENBQzdELFlBQVksRUFDWixtQkFBbUIsQ0FDcEIsQ0FBQztRQUNGLGNBQWMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLGNBQWMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssd0NBQWtCLEdBQTFCLFVBQ0UsWUFBMEIsRUFDMUIsbUJBQTZCO1FBRTdCLElBQU0sWUFBWSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXpF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\n//# sourceURL=webpack-internal:///./node_modules/gatecrash/dist/SurveyEmbed.js\n')},"./node_modules/gatecrash/dist/constants.js":function(){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nexports.CVSurveyPositionDefaults = exports.CV_LOG_EVENT = exports.CV_CANCEL_EVENT = exports.CV_LOADED_EVENT = exports.CV_SUBMIT_EVENT = exports.EVENT_HANDLER_ERROR = exports.GATECRASH_ON_SURVEY_LOAD = exports.GATECRASH_ON_SURVEY_CANCEL = exports.EVENT_RESPONSE_DATA_ERROR = exports.GATECRASH_ON_SURVEY_DATA_SUBMIT = exports.GATECRASH_RENDER_ERROR = exports.SURVEY_DIV_ID = exports.RESPONSE_PAGE_IFRAME_ID = exports.OVERLAY_DIV_ID = exports.IFRAME_ID = exports.ICON_DIV_ID = exports.FORMSPRO_BASE_URL = exports.DEFAULT_BASE_URL = exports.DEFAULT_TEXT_CONTENT = exports.DEFAULT_FRAME_CONTAINER_WIDTH = exports.DEFAULT_FRAME_CONTAINER_HEIGHT = exports.DEFAULT_FRAME_CONTAINER_ID = exports.DEFAULT_ERR_MSG = exports.DEFAULT_EXPAND_HEIGHT = exports.DEFAULT_COLLAPSE_HEIGHT = exports.CDN_URL = exports.CONTAINTER_SPAN_TEXT_ID = exports.CONTAINER_BUTTON_ID = exports.CLOSE_ICON_SOURCE = exports.CLOSE_ICON_ID = exports.CLOSE_BUTTON_ID = exports.BUTTON_IFRAME_ID = exports.BUTTON_CONTAINER_COLLAPSE = exports.BUTTON_CONTAINER = exports.ARROW_ICON_ID = void 0;\r\nexports.ARROW_ICON_ID = "MfpEmbed_Icon_Arrow";\r\nexports.BUTTON_CONTAINER = "MfpEmbed_Button_Container";\r\nexports.BUTTON_CONTAINER_COLLAPSE = "MfpEmbed_Button_Container_Collapse";\r\nexports.BUTTON_IFRAME_ID = "MfpEmbed_Button_Iframe";\r\nexports.CLOSE_BUTTON_ID = "closeButton";\r\nexports.CLOSE_ICON_ID = "MfpEmbed_CrossButton";\r\nexports.CLOSE_ICON_SOURCE = "cross.svg";\r\nexports.CONTAINER_BUTTON_ID = "MfpEmbed_Button";\r\nexports.CONTAINTER_SPAN_TEXT_ID = "MfpEmbed_Span";\r\nexports.CDN_URL = "https://mfpembedcdnwus2.azureedge.net/mfpembedcontwus2/";\r\nexports.DEFAULT_COLLAPSE_HEIGHT = "48px";\r\nexports.DEFAULT_EXPAND_HEIGHT = "480px";\r\nexports.DEFAULT_ERR_MSG = "gatecrash: Error thrown and could not be cast as type Error.";\r\nexports.DEFAULT_FRAME_CONTAINER_ID = "MfpEmbed_Popup";\r\nexports.DEFAULT_FRAME_CONTAINER_HEIGHT = "600px";\r\nexports.DEFAULT_FRAME_CONTAINER_WIDTH = "320px";\r\nexports.DEFAULT_TEXT_CONTENT = "Provide Feedback";\r\nexports.DEFAULT_BASE_URL = "https://customervoice.microsoft.com/";\r\nexports.FORMSPRO_BASE_URL = "https://forms.office.com/formspro/";\r\nexports.ICON_DIV_ID = "mfpembed_iconDiv";\r\nexports.IFRAME_ID = "MfpEmbed_Iframe";\r\nexports.OVERLAY_DIV_ID = "mfpembed_overlayDiv";\r\nexports.RESPONSE_PAGE_IFRAME_ID = "MfpEmbed_Popup_Iframe";\r\nexports.SURVEY_DIV_ID = "gatecrashSurvey";\r\nexports.GATECRASH_RENDER_ERROR = {\r\n    name: "Gatecrash_Render_Error",\r\n};\r\nexports.GATECRASH_ON_SURVEY_DATA_SUBMIT = {\r\n    name: "Gatecrash_On_Survey_Data_Submit",\r\n};\r\nexports.EVENT_RESPONSE_DATA_ERROR = {\r\n    name: "Gatecrash_Event_Response_Data_Error",\r\n};\r\nexports.GATECRASH_ON_SURVEY_CANCEL = {\r\n    name: "Gatecrash_On_Survey_Cancel",\r\n};\r\nexports.GATECRASH_ON_SURVEY_LOAD = {\r\n    name: "Gatecrash_On_Survey_Load",\r\n};\r\nexports.EVENT_HANDLER_ERROR = {\r\n    name: "Event_Handler_Error",\r\n};\r\nexports.CV_SUBMIT_EVENT = "CV_OnSubmit";\r\nexports.CV_LOADED_EVENT = "CV_OnLoaded";\r\nexports.CV_CANCEL_EVENT = "CV_OnCancel";\r\nexports.CV_LOG_EVENT = "CV_OnLog";\r\n/**\r\n * Default position values for survey toast\r\n */\r\nvar CVSurveyPositionDefaults = /** @class */ (function () {\r\n    function CVSurveyPositionDefaults() {\r\n    }\r\n    CVSurveyPositionDefaults.cssPosition = "fixed";\r\n    CVSurveyPositionDefaults.cssZIndex = "999";\r\n    CVSurveyPositionDefaults.cssBottom = "56px";\r\n    CVSurveyPositionDefaults.cssRight = "19px";\r\n    return CVSurveyPositionDefaults;\r\n}());\r\nexports.CVSurveyPositionDefaults = CVSurveyPositionDefaults;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL2NvbnN0YW50cy50cz8zNWIwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNhLHFCQUFhLEdBQUcscUJBQXFCLENBQUM7QUFDdEMsd0JBQWdCLEdBQUcsMkJBQTJCLENBQUM7QUFDL0MsaUNBQXlCLEdBQUcsb0NBQW9DLENBQUM7QUFDakUsd0JBQWdCLEdBQUcsd0JBQXdCLENBQUM7QUFDNUMsdUJBQWUsR0FBRyxhQUFhLENBQUM7QUFDaEMscUJBQWEsR0FBRyxzQkFBc0IsQ0FBQztBQUN2Qyx5QkFBaUIsR0FBRyxXQUFXLENBQUM7QUFDaEMsMkJBQW1CLEdBQUcsaUJBQWlCLENBQUM7QUFDeEMsK0JBQXVCLEdBQUcsZUFBZSxDQUFDO0FBQzFDLGVBQU8sR0FDbEIseURBQXlELENBQUM7QUFDL0MsK0JBQXVCLEdBQUcsTUFBTSxDQUFDO0FBQ2pDLDZCQUFxQixHQUFHLE9BQU8sQ0FBQztBQUNoQyx1QkFBZSxHQUMxQiw4REFBOEQsQ0FBQztBQUNwRCxrQ0FBMEIsR0FBRyxnQkFBZ0IsQ0FBQztBQUM5QyxzQ0FBOEIsR0FBRyxPQUFPLENBQUM7QUFDekMscUNBQTZCLEdBQUcsT0FBTyxDQUFDO0FBQ3hDLDRCQUFvQixHQUFHLGtCQUFrQixDQUFDO0FBQzFDLHdCQUFnQixHQUFHLHNDQUFzQyxDQUFDO0FBQzFELHlCQUFpQixHQUFHLG9DQUFvQyxDQUFDO0FBQ3pELG1CQUFXLEdBQUcsa0JBQWtCLENBQUM7QUFDakMsaUJBQVMsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QixzQkFBYyxHQUFHLHFCQUFxQixDQUFDO0FBQ3ZDLCtCQUF1QixHQUFHLHVCQUF1QixDQUFDO0FBQ2xELHFCQUFhLEdBQUcsaUJBQWlCLENBQUM7QUFFbEMsOEJBQXNCLEdBQWE7SUFDOUMsSUFBSSxFQUFFLHdCQUF3QjtDQUMvQixDQUFDO0FBQ1csdUNBQStCLEdBQWE7SUFDdkQsSUFBSSxFQUFFLGlDQUFpQztDQUN4QyxDQUFDO0FBQ1csaUNBQXlCLEdBQWE7SUFDakQsSUFBSSxFQUFFLHFDQUFxQztDQUM1QyxDQUFDO0FBQ1csa0NBQTBCLEdBQWE7SUFDbEQsSUFBSSxFQUFFLDRCQUE0QjtDQUNuQyxDQUFDO0FBQ1csZ0NBQXdCLEdBQWE7SUFDaEQsSUFBSSxFQUFFLDBCQUEwQjtDQUNqQyxDQUFDO0FBQ1csMkJBQW1CLEdBQWE7SUFDM0MsSUFBSSxFQUFFLHFCQUFxQjtDQUM1QixDQUFDO0FBK0NXLHVCQUFlLEdBQXFCLGFBQWEsQ0FBQztBQUNsRCx1QkFBZSxHQUFxQixhQUFhLENBQUM7QUFDbEQsdUJBQWUsR0FBcUIsYUFBYSxDQUFDO0FBQ2xELG9CQUFZLEdBQXFCLFVBQVUsQ0FBQztBQUV6RDs7R0FFRztBQUNIO0lBQUE7SUFLQSxDQUFDO0lBSlEsb0NBQVcsR0FBRyxPQUFPLENBQUM7SUFDdEIsa0NBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsa0NBQVMsR0FBRyxNQUFNLENBQUM7SUFDbkIsaUNBQVEsR0FBRyxNQUFNLENBQUM7SUFDM0IsK0JBQUM7Q0FBQTtBQUxZLDREQUF3QiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9nYXRlY3Jhc2gvZGlzdC9jb25zdGFudHMuanMuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/gatecrash/dist/constants.js\n')},"./node_modules/gatecrash/dist/index.js":function(){"use strict";eval('\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n}));\r\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\r\n    for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\r\n};\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\n__exportStar(__webpack_require__(/*! ./types */ "./node_modules/gatecrash/dist/types.js"), exports);\r\n__exportStar(__webpack_require__(/*! ./CVSurvey */ "./node_modules/gatecrash/dist/CVSurvey.js"), exports);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vc3JjL2luZGV4LnRzPzZmMzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsb0dBQXdCO0FBRXhCLDBHQUEyQiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9nYXRlY3Jhc2gvZGlzdC9pbmRleC5qcy5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/gatecrash/dist/index.js\n')},"./node_modules/gatecrash/dist/types.js":function(){"use strict";eval('\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9nYXRlY3Jhc2gvZGlzdC90eXBlcy5qcy5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/gatecrash/dist/types.js\n')},"./node_modules/process/browser.js":function(){eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzP2U1YzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/process/browser.js\n")},"./node_modules/tslib/tslib.es6.js":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__createBinding", function() { return __createBinding; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArray", function() { return __spreadArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldGet", function() { return __classPrivateFieldGet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldSet", function() { return __classPrivateFieldSet; });\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    if (typeof b !== "function" && b !== null)\r\n        throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === "function")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nfunction __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nfunction __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError("Generator is already executing.");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nvar __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nfunction __exportStar(m, o) {\r\n    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nfunction __values(o) {\r\n    var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === "number") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");\r\n}\r\n\r\nfunction __read(o, n) {\r\n    var m = typeof Symbol === "function" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i["return"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nfunction __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nfunction __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nfunction __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nfunction __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume("next", value); }\r\n    function reject(value) { resume("throw", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nfunction __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nfunction __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nfunction __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, "default", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o["default"] = v;\r\n};\r\n\r\nfunction __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nfunction __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");\r\n    if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");\r\n    return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === "m") throw new TypeError("Private method is not writable");\r\n    if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");\r\n    if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");\r\n    return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzP2ZlYzMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLGdCQUFnQixzQ0FBc0MsaUJBQWlCLEVBQUU7QUFDbkYseUJBQXlCLDhFQUE4RTtBQUN2RztBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBOztBQUVPO0FBQ1A7QUFDQSxnREFBZ0QsT0FBTztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTRELGNBQWM7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSw0Q0FBNEMsUUFBUTtBQUNwRDtBQUNBOztBQUVPO0FBQ1AsbUNBQW1DLG9DQUFvQztBQUN2RTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUCwyQkFBMkIsK0RBQStELGdCQUFnQixFQUFFLEVBQUU7QUFDOUc7QUFDQSxtQ0FBbUMsTUFBTSw2QkFBNkIsRUFBRSxZQUFZLFdBQVcsRUFBRTtBQUNqRyxrQ0FBa0MsTUFBTSxpQ0FBaUMsRUFBRSxZQUFZLFdBQVcsRUFBRTtBQUNwRywrQkFBK0IscUZBQXFGO0FBQ3BIO0FBQ0EsS0FBSztBQUNMOztBQUVPO0FBQ1AsYUFBYSw2QkFBNkIsMEJBQTBCLGFBQWEsRUFBRSxxQkFBcUI7QUFDeEcsZ0JBQWdCLHFEQUFxRCxvRUFBb0UsYUFBYSxFQUFFO0FBQ3hKLHNCQUFzQixzQkFBc0IscUJBQXFCLEdBQUc7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDLGtDQUFrQyxTQUFTO0FBQzNDLGtDQUFrQyxXQUFXLFVBQVU7QUFDdkQseUNBQXlDLGNBQWM7QUFDdkQ7QUFDQSw2R0FBNkcsT0FBTyxVQUFVO0FBQzlILGdGQUFnRixpQkFBaUIsT0FBTztBQUN4Ryx3REFBd0QsZ0JBQWdCLFFBQVEsT0FBTztBQUN2Riw4Q0FBOEMsZ0JBQWdCLGdCQUFnQixPQUFPO0FBQ3JGO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxTQUFTLFlBQVksYUFBYSxPQUFPLEVBQUUsVUFBVSxXQUFXO0FBQ2hFLG1DQUFtQyxTQUFTO0FBQzVDO0FBQ0E7O0FBRU87QUFDUDtBQUNBLGtDQUFrQyxvQ0FBb0MsYUFBYSxFQUFFLEVBQUU7QUFDdkYsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDOztBQUVNO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsTUFBTSxnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNPO0FBQ1AsNEJBQTRCLHNCQUFzQjtBQUNsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDTztBQUNQLGlEQUFpRCxRQUFRO0FBQ3pELHdDQUF3QyxRQUFRO0FBQ2hELHdEQUF3RCxRQUFRO0FBQ2hFO0FBQ0E7QUFDQTs7QUFFTztBQUNQLDRFQUE0RSxPQUFPO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxpQkFBaUIsc0ZBQXNGLGFBQWEsRUFBRTtBQUN0SCxzQkFBc0IsZ0NBQWdDLHFDQUFxQywwQ0FBMEMsRUFBRSxFQUFFLEdBQUc7QUFDNUksMkJBQTJCLE1BQU0sZUFBZSxFQUFFLFlBQVksb0JBQW9CLEVBQUU7QUFDcEYsc0JBQXNCLG9HQUFvRztBQUMxSCw2QkFBNkIsdUJBQXVCO0FBQ3BELDRCQUE0Qix3QkFBd0I7QUFDcEQsMkJBQTJCLHlEQUF5RDtBQUNwRjs7QUFFTztBQUNQO0FBQ0EsaUJBQWlCLDRDQUE0QyxTQUFTLEVBQUUscURBQXFELGFBQWEsRUFBRTtBQUM1SSx5QkFBeUIsNkJBQTZCLG9CQUFvQixnREFBZ0QsZ0JBQWdCLEVBQUUsS0FBSztBQUNqSjs7QUFFTztBQUNQO0FBQ0E7QUFDQSwyR0FBMkcsc0ZBQXNGLGFBQWEsRUFBRTtBQUNoTixzQkFBc0IsOEJBQThCLGdEQUFnRCx1REFBdUQsRUFBRSxFQUFFLEdBQUc7QUFDbEssNENBQTRDLHNDQUFzQyxVQUFVLG9CQUFvQixFQUFFLEVBQUUsVUFBVTtBQUM5SDs7QUFFTztBQUNQLGdDQUFnQyx1Q0FBdUMsYUFBYSxFQUFFLEVBQUUsT0FBTyxrQkFBa0I7QUFDakg7QUFDQTs7QUFFQTtBQUNBLHlDQUF5Qyw2QkFBNkI7QUFDdEUsQ0FBQztBQUNEO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUCw0Q0FBNEM7QUFDNUM7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/tslib/tslib.es6.js\n')},"./node_modules/webpack/buildin/global.js":function(){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function("return this")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzPzc3ZDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL3dlYnBhY2svYnVpbGRpbi9nbG9iYWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/global.js\n')},"./node_modules/whatwg-fetch/fetch.js":function(){"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Headers\", function() { return Headers; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Request\", function() { return Request; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Response\", function() { return Response; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DOMException\", function() { return DOMException; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fetch\", function() { return fetch; });\nvar global =\n  (typeof globalThis !== 'undefined' && globalThis) ||\n  (typeof self !== 'undefined' && self) ||\n  (typeof global !== 'undefined' && global)\n\nvar support = {\n  searchParams: 'URLSearchParams' in global,\n  iterable: 'Symbol' in global && 'iterator' in Symbol,\n  blob:\n    'FileReader' in global &&\n    'Blob' in global &&\n    (function() {\n      try {\n        new Blob()\n        return true\n      } catch (e) {\n        return false\n      }\n    })(),\n  formData: 'FormData' in global,\n  arrayBuffer: 'ArrayBuffer' in global\n}\n\nfunction isDataView(obj) {\n  return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n  var viewClasses = [\n    '[object Int8Array]',\n    '[object Uint8Array]',\n    '[object Uint8ClampedArray]',\n    '[object Int16Array]',\n    '[object Uint16Array]',\n    '[object Int32Array]',\n    '[object Uint32Array]',\n    '[object Float32Array]',\n    '[object Float64Array]'\n  ]\n\n  var isArrayBufferView =\n    ArrayBuffer.isView ||\n    function(obj) {\n      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n    }\n}\n\nfunction normalizeName(name) {\n  if (typeof name !== 'string') {\n    name = String(name)\n  }\n  if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n    throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n  }\n  return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n  if (typeof value !== 'string') {\n    value = String(value)\n  }\n  return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n  var iterator = {\n    next: function() {\n      var value = items.shift()\n      return {done: value === undefined, value: value}\n    }\n  }\n\n  if (support.iterable) {\n    iterator[Symbol.iterator] = function() {\n      return iterator\n    }\n  }\n\n  return iterator\n}\n\nfunction Headers(headers) {\n  this.map = {}\n\n  if (headers instanceof Headers) {\n    headers.forEach(function(value, name) {\n      this.append(name, value)\n    }, this)\n  } else if (Array.isArray(headers)) {\n    headers.forEach(function(header) {\n      this.append(header[0], header[1])\n    }, this)\n  } else if (headers) {\n    Object.getOwnPropertyNames(headers).forEach(function(name) {\n      this.append(name, headers[name])\n    }, this)\n  }\n}\n\nHeaders.prototype.append = function(name, value) {\n  name = normalizeName(name)\n  value = normalizeValue(value)\n  var oldValue = this.map[name]\n  this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n  delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n  name = normalizeName(name)\n  return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n  return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n  this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n  for (var name in this.map) {\n    if (this.map.hasOwnProperty(name)) {\n      callback.call(thisArg, this.map[name], name, this)\n    }\n  }\n}\n\nHeaders.prototype.keys = function() {\n  var items = []\n  this.forEach(function(value, name) {\n    items.push(name)\n  })\n  return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n  var items = []\n  this.forEach(function(value) {\n    items.push(value)\n  })\n  return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n  var items = []\n  this.forEach(function(value, name) {\n    items.push([name, value])\n  })\n  return iteratorFor(items)\n}\n\nif (support.iterable) {\n  Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n  if (body.bodyUsed) {\n    return Promise.reject(new TypeError('Already read'))\n  }\n  body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n  return new Promise(function(resolve, reject) {\n    reader.onload = function() {\n      resolve(reader.result)\n    }\n    reader.onerror = function() {\n      reject(reader.error)\n    }\n  })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n  var reader = new FileReader()\n  var promise = fileReaderReady(reader)\n  reader.readAsArrayBuffer(blob)\n  return promise\n}\n\nfunction readBlobAsText(blob) {\n  var reader = new FileReader()\n  var promise = fileReaderReady(reader)\n  reader.readAsText(blob)\n  return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n  var view = new Uint8Array(buf)\n  var chars = new Array(view.length)\n\n  for (var i = 0; i < view.length; i++) {\n    chars[i] = String.fromCharCode(view[i])\n  }\n  return chars.join('')\n}\n\nfunction bufferClone(buf) {\n  if (buf.slice) {\n    return buf.slice(0)\n  } else {\n    var view = new Uint8Array(buf.byteLength)\n    view.set(new Uint8Array(buf))\n    return view.buffer\n  }\n}\n\nfunction Body() {\n  this.bodyUsed = false\n\n  this._initBody = function(body) {\n    /*\n      fetch-mock wraps the Response object in an ES6 Proxy to\n      provide useful test harness features such as flush. However, on\n      ES5 browsers without fetch or Proxy support pollyfills must be used;\n      the proxy-pollyfill is unable to proxy an attribute unless it exists\n      on the object before the Proxy is created. This change ensures\n      Response.bodyUsed exists on the instance, while maintaining the\n      semantic of setting Request.bodyUsed in the constructor before\n      _initBody is called.\n    */\n    this.bodyUsed = this.bodyUsed\n    this._bodyInit = body\n    if (!body) {\n      this._bodyText = ''\n    } else if (typeof body === 'string') {\n      this._bodyText = body\n    } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n      this._bodyBlob = body\n    } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n      this._bodyFormData = body\n    } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n      this._bodyText = body.toString()\n    } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n      this._bodyArrayBuffer = bufferClone(body.buffer)\n      // IE 10-11 can't handle a DataView body.\n      this._bodyInit = new Blob([this._bodyArrayBuffer])\n    } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n      this._bodyArrayBuffer = bufferClone(body)\n    } else {\n      this._bodyText = body = Object.prototype.toString.call(body)\n    }\n\n    if (!this.headers.get('content-type')) {\n      if (typeof body === 'string') {\n        this.headers.set('content-type', 'text/plain;charset=UTF-8')\n      } else if (this._bodyBlob && this._bodyBlob.type) {\n        this.headers.set('content-type', this._bodyBlob.type)\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n      }\n    }\n  }\n\n  if (support.blob) {\n    this.blob = function() {\n      var rejected = consumed(this)\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return Promise.resolve(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as blob')\n      } else {\n        return Promise.resolve(new Blob([this._bodyText]))\n      }\n    }\n\n    this.arrayBuffer = function() {\n      if (this._bodyArrayBuffer) {\n        var isConsumed = consumed(this)\n        if (isConsumed) {\n          return isConsumed\n        }\n        if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n          return Promise.resolve(\n            this._bodyArrayBuffer.buffer.slice(\n              this._bodyArrayBuffer.byteOffset,\n              this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n            )\n          )\n        } else {\n          return Promise.resolve(this._bodyArrayBuffer)\n        }\n      } else {\n        return this.blob().then(readBlobAsArrayBuffer)\n      }\n    }\n  }\n\n  this.text = function() {\n    var rejected = consumed(this)\n    if (rejected) {\n      return rejected\n    }\n\n    if (this._bodyBlob) {\n      return readBlobAsText(this._bodyBlob)\n    } else if (this._bodyArrayBuffer) {\n      return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n    } else if (this._bodyFormData) {\n      throw new Error('could not read FormData body as text')\n    } else {\n      return Promise.resolve(this._bodyText)\n    }\n  }\n\n  if (support.formData) {\n    this.formData = function() {\n      return this.text().then(decode)\n    }\n  }\n\n  this.json = function() {\n    return this.text().then(JSON.parse)\n  }\n\n  return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\nfunction normalizeMethod(method) {\n  var upcased = method.toUpperCase()\n  return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nfunction Request(input, options) {\n  if (!(this instanceof Request)) {\n    throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n  }\n\n  options = options || {}\n  var body = options.body\n\n  if (input instanceof Request) {\n    if (input.bodyUsed) {\n      throw new TypeError('Already read')\n    }\n    this.url = input.url\n    this.credentials = input.credentials\n    if (!options.headers) {\n      this.headers = new Headers(input.headers)\n    }\n    this.method = input.method\n    this.mode = input.mode\n    this.signal = input.signal\n    if (!body && input._bodyInit != null) {\n      body = input._bodyInit\n      input.bodyUsed = true\n    }\n  } else {\n    this.url = String(input)\n  }\n\n  this.credentials = options.credentials || this.credentials || 'same-origin'\n  if (options.headers || !this.headers) {\n    this.headers = new Headers(options.headers)\n  }\n  this.method = normalizeMethod(options.method || this.method || 'GET')\n  this.mode = options.mode || this.mode || null\n  this.signal = options.signal || this.signal\n  this.referrer = null\n\n  if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n    throw new TypeError('Body not allowed for GET or HEAD requests')\n  }\n  this._initBody(body)\n\n  if (this.method === 'GET' || this.method === 'HEAD') {\n    if (options.cache === 'no-store' || options.cache === 'no-cache') {\n      // Search for a '_' parameter in the query string\n      var reParamSearch = /([?&])_=[^&]*/\n      if (reParamSearch.test(this.url)) {\n        // If it already exists then set the value with the current time\n        this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime())\n      } else {\n        // Otherwise add a new '_' parameter to the end with the current time\n        var reQueryString = /\\?/\n        this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime()\n      }\n    }\n  }\n}\n\nRequest.prototype.clone = function() {\n  return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n  var form = new FormData()\n  body\n    .trim()\n    .split('&')\n    .forEach(function(bytes) {\n      if (bytes) {\n        var split = bytes.split('=')\n        var name = split.shift().replace(/\\+/g, ' ')\n        var value = split.join('=').replace(/\\+/g, ' ')\n        form.append(decodeURIComponent(name), decodeURIComponent(value))\n      }\n    })\n  return form\n}\n\nfunction parseHeaders(rawHeaders) {\n  var headers = new Headers()\n  // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n  // https://tools.ietf.org/html/rfc7230#section-3.2\n  var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n  // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n  // https://github.com/github/fetch/issues/748\n  // https://github.com/zloirock/core-js/issues/751\n  preProcessedHeaders\n    .split('\\r')\n    .map(function(header) {\n      return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n    })\n    .forEach(function(line) {\n      var parts = line.split(':')\n      var key = parts.shift().trim()\n      if (key) {\n        var value = parts.join(':').trim()\n        headers.append(key, value)\n      }\n    })\n  return headers\n}\n\nBody.call(Request.prototype)\n\nfunction Response(bodyInit, options) {\n  if (!(this instanceof Response)) {\n    throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n  }\n  if (!options) {\n    options = {}\n  }\n\n  this.type = 'default'\n  this.status = options.status === undefined ? 200 : options.status\n  this.ok = this.status >= 200 && this.status < 300\n  this.statusText = options.statusText === undefined ? '' : '' + options.statusText\n  this.headers = new Headers(options.headers)\n  this.url = options.url || ''\n  this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n  return new Response(this._bodyInit, {\n    status: this.status,\n    statusText: this.statusText,\n    headers: new Headers(this.headers),\n    url: this.url\n  })\n}\n\nResponse.error = function() {\n  var response = new Response(null, {status: 0, statusText: ''})\n  response.type = 'error'\n  return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n  if (redirectStatuses.indexOf(status) === -1) {\n    throw new RangeError('Invalid status code')\n  }\n\n  return new Response(null, {status: status, headers: {location: url}})\n}\n\nvar DOMException = global.DOMException\ntry {\n  new DOMException()\n} catch (err) {\n  DOMException = function(message, name) {\n    this.message = message\n    this.name = name\n    var error = Error(message)\n    this.stack = error.stack\n  }\n  DOMException.prototype = Object.create(Error.prototype)\n  DOMException.prototype.constructor = DOMException\n}\n\nfunction fetch(input, init) {\n  return new Promise(function(resolve, reject) {\n    var request = new Request(input, init)\n\n    if (request.signal && request.signal.aborted) {\n      return reject(new DOMException('Aborted', 'AbortError'))\n    }\n\n    var xhr = new XMLHttpRequest()\n\n    function abortXhr() {\n      xhr.abort()\n    }\n\n    xhr.onload = function() {\n      var options = {\n        status: xhr.status,\n        statusText: xhr.statusText,\n        headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n      }\n      options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n      var body = 'response' in xhr ? xhr.response : xhr.responseText\n      setTimeout(function() {\n        resolve(new Response(body, options))\n      }, 0)\n    }\n\n    xhr.onerror = function() {\n      setTimeout(function() {\n        reject(new TypeError('Network request failed'))\n      }, 0)\n    }\n\n    xhr.ontimeout = function() {\n      setTimeout(function() {\n        reject(new TypeError('Network request failed'))\n      }, 0)\n    }\n\n    xhr.onabort = function() {\n      setTimeout(function() {\n        reject(new DOMException('Aborted', 'AbortError'))\n      }, 0)\n    }\n\n    function fixUrl(url) {\n      try {\n        return url === '' && global.location.href ? global.location.href : url\n      } catch (e) {\n        return url\n      }\n    }\n\n    xhr.open(request.method, fixUrl(request.url), true)\n\n    if (request.credentials === 'include') {\n      xhr.withCredentials = true\n    } else if (request.credentials === 'omit') {\n      xhr.withCredentials = false\n    }\n\n    if ('responseType' in xhr) {\n      if (support.blob) {\n        xhr.responseType = 'blob'\n      } else if (\n        support.arrayBuffer &&\n        request.headers.get('Content-Type') &&\n        request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1\n      ) {\n        xhr.responseType = 'arraybuffer'\n      }\n    }\n\n    if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {\n      Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n        xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n      })\n    } else {\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value)\n      })\n    }\n\n    if (request.signal) {\n      request.signal.addEventListener('abort', abortXhr)\n\n      xhr.onreadystatechange = function() {\n        // DONE (success or failure)\n        if (xhr.readyState === 4) {\n          request.signal.removeEventListener('abort', abortXhr)\n        }\n      }\n    }\n\n    xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n  })\n}\n\nfetch.polyfill = true\n\nif (!global.fetch) {\n  global.fetch = fetch\n  global.Headers = Headers\n  global.Request = Request\n  global.Response = Response\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzPzM1NjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQLDRFQUE0RTtBQUM1RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIscUJBQXFCO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EscUNBQXFDLDBCQUEwQjtBQUMvRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLDBCQUEwQixlQUFlO0FBQ3RFOztBQUVPO0FBQ1A7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy93aGF0d2ctZmV0Y2gvZmV0Y2guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYpIHx8XG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpXG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGdsb2JhbCxcbiAgaXRlcmFibGU6ICdTeW1ib2wnIGluIGdsb2JhbCAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgYmxvYjpcbiAgICAnRmlsZVJlYWRlcicgaW4gZ2xvYmFsICYmXG4gICAgJ0Jsb2InIGluIGdsb2JhbCAmJlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSkoKSxcbiAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gZ2xvYmFsLFxuICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnbG9iYWxcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICB9XG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKG5hbWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbn1cblxuZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgfVxuICByZXR1cm4gY2hhcnMuam9pbignJylcbn1cblxuZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gIGlmIChidWYuc2xpY2UpIHtcbiAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gIH0gZWxzZSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICB9XG59XG5cbmZ1bmN0aW9uIEJvZHkoKSB7XG4gIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgIC8qXG4gICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICBwcm92aWRlIHVzZWZ1bCB0ZXN0IGhhcm5lc3MgZmVhdHVyZXMgc3VjaCBhcyBmbHVzaC4gSG93ZXZlciwgb25cbiAgICAgIEVTNSBicm93c2VycyB3aXRob3V0IGZldGNoIG9yIFByb3h5IHN1cHBvcnQgcG9sbHlmaWxscyBtdXN0IGJlIHVzZWQ7XG4gICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgb24gdGhlIG9iamVjdCBiZWZvcmUgdGhlIFByb3h5IGlzIGNyZWF0ZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXNcbiAgICAgIFJlc3BvbnNlLmJvZHlVc2VkIGV4aXN0cyBvbiB0aGUgaW5zdGFuY2UsIHdoaWxlIG1haW50YWluaW5nIHRoZVxuICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgIF9pbml0Qm9keSBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgIGlmICghYm9keSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICB2YXIgaXNDb25zdW1lZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgICAgcmV0dXJuIGlzQ29uc3VtZWRcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICB9XG4gIH1cblxuICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG52YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbFxuICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gIH1cbiAgdGhpcy5faW5pdEJvZHkoYm9keSlcblxuICBpZiAodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICB2YXIgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgICAgaWYgKHJlUGFyYW1TZWFyY2gudGVzdCh0aGlzLnVybCkpIHtcbiAgICAgICAgLy8gSWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlbiBzZXQgdGhlIHZhbHVlIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGEgbmV3ICdfJyBwYXJhbWV0ZXIgdG8gdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdmFyIHJlUXVlcnlTdHJpbmcgPSAvXFw/L1xuICAgICAgICB0aGlzLnVybCArPSAocmVRdWVyeVN0cmluZy50ZXN0KHRoaXMudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG59XG5cbmZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgYm9keVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAvLyBBdm9pZGluZyBzcGxpdCB2aWEgcmVnZXggdG8gd29yayBhcm91bmQgYSBjb21tb24gSUUxMSBidWcgd2l0aCB0aGUgY29yZS1qcyAzLjYuMCByZWdleCBwb2x5ZmlsbFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzc1MVxuICBwcmVQcm9jZXNzZWRIZWFkZXJzXG4gICAgLnNwbGl0KCdcXHInKVxuICAgIC5tYXAoZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YoJ1xcbicpID09PSAwID8gaGVhZGVyLnN1YnN0cigxLCBoZWFkZXIubGVuZ3RoKSA6IGhlYWRlclxuICAgIH0pXG4gICAgLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbkJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXNcbiAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHQgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyBvcHRpb25zLnN0YXR1c1RleHRcbiAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgdXJsOiB0aGlzLnVybFxuICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9KVxuICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxufVxuXG5leHBvcnQgdmFyIERPTUV4Y2VwdGlvbiA9IGdsb2JhbC5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZ2xvYmFsLmxvY2F0aW9uLmhyZWYgPyBnbG9iYWwubG9jYXRpb24uaHJlZiA6IHVybFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpXG5cbiAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXIgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykuaW5kZXhPZignYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJykgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcidcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5pdCAmJiB0eXBlb2YgaW5pdC5oZWFkZXJzID09PSAnb2JqZWN0JyAmJiAhKGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbml0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICB9KVxufVxuXG5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuaWYgKCFnbG9iYWwuZmV0Y2gpIHtcbiAgZ2xvYmFsLmZldGNoID0gZmV0Y2hcbiAgZ2xvYmFsLkhlYWRlcnMgPSBIZWFkZXJzXG4gIGdsb2JhbC5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnbG9iYWwuUmVzcG9uc2UgPSBSZXNwb25zZVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/whatwg-fetch/fetch.js\n")},"./scripts/app/App_Floodgate.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initialize", function() { return initialize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "showSurvey", function() { return showSurvey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "showFormSurvey", function() { return showFormSurvey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "showCustomSurvey", function() { return showCustomSurvey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderSurvey", function() { return renderSurvey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reset", function() { return reset; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSettingIdMap", function() { return getSettingIdMap; });\n/* harmony import */ var _CommonApp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CommonApp */ "./scripts/app/CommonApp.ts");\n/* harmony import */ var _CommonFloodgate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CommonFloodgate */ "./scripts/app/CommonFloodgate.ts");\n/* harmony import */ var _CommonUI__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./CommonUI */ "./scripts/app/CommonUI.ts");\n/* harmony import */ var _UI_UI__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./UI/UI */ "./scripts/app/UI/UI.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/* harmony import */ var _Window_Window__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Window/Window */ "./scripts/app/Window/Window.ts");\n/* harmony import */ var _FloodgateCore_UISurvey_CustomUISurvey__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./FloodgateCore/UISurvey/CustomUISurvey */ "./scripts/app/FloodgateCore/UISurvey/CustomUISurvey.ts");\n/* harmony import */ var _FloodgateCore_UISurvey_DummyUISurvey__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./FloodgateCore/UISurvey/DummyUISurvey */ "./scripts/app/FloodgateCore/UISurvey/DummyUISurvey.ts");\n/* harmony import */ var _FloodgateCore_FloodgateTelemetryLogger__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./FloodgateCore/FloodgateTelemetryLogger */ "./scripts/app/FloodgateCore/FloodgateTelemetryLogger.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore */ "../FloodgateCore/dist/index.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Constants__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Constants */ "../FloodgateCore/dist/src/Constants.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Constants__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Constants__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./Constants */ "./scripts/app/Constants.ts");\n/* harmony import */ var gatecrash__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! gatecrash */ "./node_modules/gatecrash/dist/index.js");\n/* harmony import */ var gatecrash__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(gatecrash__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var _UI_Toast_CVToast__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./UI/Toast/CVToast */ "./scripts/app/UI/Toast/CVToast.ts");\n/* harmony import */ var _FloodgateCore_UISurvey_UISurvey__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./FloodgateCore/UISurvey/UISurvey */ "./scripts/app/FloodgateCore/UISurvey/UISurvey.ts");\n/* harmony import */ var _Window_DomUtils__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./Window/DomUtils */ "./scripts/app/Window/DomUtils.ts");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getEngineStartPromise", function() { return _CommonFloodgate__WEBPACK_IMPORTED_MODULE_1__["getEngineStartPromise"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetEngine", function() { return _CommonFloodgate__WEBPACK_IMPORTED_MODULE_1__["resetEngine"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setEngineStartPromise", function() { return _CommonFloodgate__WEBPACK_IMPORTED_MODULE_1__["setEngineStartPromise"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "start", function() { return _CommonFloodgate__WEBPACK_IMPORTED_MODULE_1__["start"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "startInternal", function() { return _CommonFloodgate__WEBPACK_IMPORTED_MODULE_1__["startInternal"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stop", function() { return _CommonFloodgate__WEBPACK_IMPORTED_MODULE_1__["stop"]; });\n\n/**\r\n * App_Floodgate.ts\r\n *\r\n * The entry point for floodgate.\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Has the control been opened. Prevents more than one dialog being generated.\r\n */\r\nvar opened = false;\r\n/**\r\n * Initialize. Must be called before any other call to floodgate.\r\n * @returns A promise which will be rejected if the call fails.\r\n */\r\nfunction initialize() {\r\n    return new Promise(function (resolve, reject) {\r\n        var rejectAndLogError = function (errorMessage) {\r\n            var telemetryLogger = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_10__["FloodgateEngine"].getTelemetryLogger();\r\n            if (telemetryLogger) {\r\n                telemetryLogger.log_Event(_ms_ofb_officefloodgatecore_dist_src_Constants__WEBPACK_IMPORTED_MODULE_12__["TelemetryEvent"].Floodgate.Initialize.Failed, { ErrorMessage: errorMessage });\r\n            }\r\n            reject(errorMessage);\r\n        };\r\n        if (!_CommonFloodgate__WEBPACK_IMPORTED_MODULE_1__["getInitialized"]()) {\r\n            try {\r\n                _CommonApp__WEBPACK_IMPORTED_MODULE_0__["initialize"]();\r\n            }\r\n            catch (err) {\r\n                reject("CommonApp initialization failed: {" + err + "}");\r\n            }\r\n            _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_10__["FloodgateEngine"].setTelemetryLogger(new _FloodgateCore_FloodgateTelemetryLogger__WEBPACK_IMPORTED_MODULE_9__["default"]());\r\n            _CommonUI__WEBPACK_IMPORTED_MODULE_2__["initialize"]()\r\n                .then(function onInitializeFulfilled() {\r\n                try {\r\n                    _CommonFloodgate__WEBPACK_IMPORTED_MODULE_1__["initialize"]();\r\n                }\r\n                catch (err) {\r\n                    rejectAndLogError("CommonFloodgate initialization failed: {" + err + "}");\r\n                }\r\n                resolve(null);\r\n            })\r\n                .catch(function onInitializeRejected(err) {\r\n                rejectAndLogError("Initialization failed: {" + err + "}");\r\n            });\r\n        }\r\n        else {\r\n            resolve(null);\r\n        }\r\n    });\r\n}\r\n/**\r\n * Display the given Survey with it\'s prompt\r\n * @param survey the survey to show\r\n * @param overrideUXRenderCallbackAsync a callback to override rendering\r\n * (currently only supports CV surveys)\r\n * @returns A promise which will be rejected if the call fails.\r\n */\r\nfunction showSurvey(survey, overrideUXRenderCallbackAsync) {\r\n    return new Promise(function (resolve, reject) {\r\n        if (opened) {\r\n            reject("Control already open");\r\n            return;\r\n        }\r\n        if (!_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().isFeedbackSurveyEnabledByAADC()) {\r\n            _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_DISABLED_AADC, 2 /* Error */, {\r\n                CampaignId: survey.getCampaignId(),\r\n                Data: JSON.stringify({\r\n                    ageGroup: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().ageGroup,\r\n                    authenticationType: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().authenticationType,\r\n                }),\r\n            });\r\n            reject("Prompt is prohibited by AADC");\r\n            return;\r\n        }\r\n        _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().setFloodgateSurvey(survey ? survey : new _FloodgateCore_UISurvey_DummyUISurvey__WEBPACK_IMPORTED_MODULE_8__["default"]());\r\n        var isCVSurveyEnabled = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().isCVSurveyEnabled();\r\n        /**\r\n         * Branching logic to determine if Customer Voice survey is shown to user.\r\n         */\r\n        if (isCVSurveyEnabled && survey.getLauncherType() === _Constants__WEBPACK_IMPORTED_MODULE_13__["customerVoiceLauncherType"]) {\r\n            var contextParams = getContextParams(survey);\r\n            var optionalConfigParams = getOptionalConfigParams();\r\n            _UI_UI__WEBPACK_IMPORTED_MODULE_3__["createCVSurvey"](contextParams, function () { opened = false; }, optionalConfigParams, overrideUXRenderCallbackAsync);\r\n            opened = true;\r\n            resolve();\r\n            return;\r\n        }\r\n        _UI_UI__WEBPACK_IMPORTED_MODULE_3__["createSurvey"](function () { opened = false; });\r\n        opened = true;\r\n        resolve();\r\n    });\r\n}\r\n/**\r\n * Method to create the context params object\r\n * @param survey the survey being shown\r\n */\r\nfunction getContextParams(survey) {\r\n    var urlParams = {};\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().primaryColour) {\r\n        urlParams.appPrimaryColor = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().primaryColour.replace("#", "");\r\n    }\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().secondaryColour) {\r\n        urlParams.appSecondaryColor = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().secondaryColour.replace("#", "");\r\n    }\r\n    return {\r\n        customerVoiceFormId: survey.getCVSurveyFormId(),\r\n        flights: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCVSurveyFlights(),\r\n        isCommercialHost: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().isCommercialHost,\r\n        locale: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().locale,\r\n        userEmailConsentDefault: false,\r\n        platform: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().telemetryGroup.platform,\r\n        productName: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getProductName(),\r\n        uiHost: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getUIHost(),\r\n        uiHostCVSurveyDispatcher: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getUIHostCVSurveyDispatcher(),\r\n        stylesUrl: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().stylesUrl,\r\n        urlParams: urlParams,\r\n    };\r\n}\r\n/**\r\n * Method to create the optional config params\r\n * @param survey the survey being shown\r\n */\r\nfunction getOptionalConfigParams() {\r\n    var optionalConfigParams = {\r\n        closeButtonEnabled: true,\r\n        cancelButtonEnabled: true,\r\n        timeOutEnabled: true,\r\n    };\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCSSPosition()) {\r\n        optionalConfigParams.cssPosition = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCSSPosition();\r\n    }\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCSSZIndex()) {\r\n        optionalConfigParams.cssZIndex = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCSSZIndex();\r\n    }\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCSSBottom()) {\r\n        optionalConfigParams.cssBottom = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCSSBottom();\r\n    }\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCSSRight()) {\r\n        optionalConfigParams.cssRight = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCSSRight();\r\n    }\r\n    return optionalConfigParams;\r\n}\r\n/**\r\n * Method to allow users to launch a survey from an ISurveyForm\r\n * @param survey the survey to show\r\n * @param overrideUXRenderCallbackAsync a callback to override rendering\r\n * (currently only supports CV surveys)\r\n */\r\nfunction showFormSurvey(survey, overrideUXRenderCallbackAsync) {\r\n    var genericSurvey = survey;\r\n    genericSurvey.getSurveyInfo = function () { return survey.surveyInfo; };\r\n    genericSurvey.getDomElements = function () { return undefined; };\r\n    genericSurvey.getJsonElements = function () { return undefined; };\r\n    var formattedSurvey = new _FloodgateCore_UISurvey_UISurvey__WEBPACK_IMPORTED_MODULE_16__["default"](genericSurvey);\r\n    return showSurvey(formattedSurvey, overrideUXRenderCallbackAsync);\r\n}\r\n/**\r\n * Method to allow users to launch a custom survey directly\r\n * @param survey the survey to show\r\n * @returns A promise which will be rejected if the call fails.\r\n */\r\nfunction showCustomSurvey(survey) {\r\n    return showSurvey(new _FloodgateCore_UISurvey_CustomUISurvey__WEBPACK_IMPORTED_MODULE_7__["default"](survey));\r\n}\r\n/**\r\n * Method to allow users to call survey rendering independent from showSurvey().\r\n * @param parentElement the container in which the survey will be rendered\r\n * @param onSurveyEvent a handler for all events emitted by survey tools\r\n * @param contextParams information about the context in which the survey is shown\r\n * @param surveyOptionalConfigParams additional survey configuration parameters\r\n */\r\nvar renderSurvey = function (parentElement, onSurveyEvent, contextParams, surveyOptionalConfigParams) {\r\n    var isMainContext = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getFloodgateSurvey() ? true : false;\r\n    if (!isMainContext && contextParams.stylesUrl) {\r\n        Object(_Window_DomUtils__WEBPACK_IMPORTED_MODULE_17__["loadStylesheet"])(contextParams.stylesUrl);\r\n    }\r\n    // If a CV form ID is provided, we classify this request as a Customer Voice survey\r\n    if (!!contextParams.customerVoiceFormId) {\r\n        Object(gatecrash__WEBPACK_IMPORTED_MODULE_14__["renderCVSurvey"])(parentElement, onSurveyEvent, contextParams, surveyOptionalConfigParams, isMainContext);\r\n    }\r\n    else {\r\n        var telemetryLogger = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_10__["FloodgateEngine"].getTelemetryLogger();\r\n        if (telemetryLogger) {\r\n            telemetryLogger.log_Event(_ms_ofb_officefloodgatecore_dist_src_Constants__WEBPACK_IMPORTED_MODULE_12__["TelemetryEvent"].Floodgate.RenderSurvey.Unsupported, { ErrorMessage: "WARN: renderSurvey currently only supports Customer Voice surveys." });\r\n        }\r\n    }\r\n};\r\n/**\r\n * Reset the floodgate module. Used in unit tests.\r\n */\r\nfunction reset() {\r\n    _CommonApp__WEBPACK_IMPORTED_MODULE_0__["reset"]();\r\n    _CommonUI__WEBPACK_IMPORTED_MODULE_2__["reset"]();\r\n    _CommonFloodgate__WEBPACK_IMPORTED_MODULE_1__["reset"]();\r\n    opened = false;\r\n}\r\n/**\r\n * Get a list of setting names and ids\r\n * @returns the setting names and ids list\r\n */\r\nfunction getSettingIdMap() {\r\n    return _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_11__["IFloodgateSettingIdMap"].RoamingSettingIdMap;\r\n}\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_6__["setFloodgateCustomUXHandler"]({ renderSurvey: renderSurvey, handleSurveyEvent: _UI_Toast_CVToast__WEBPACK_IMPORTED_MODULE_15__["handleSurveyEvent"] });\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_6__["setFloodgateShowSurvey"](showSurvey);\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_6__["setFloodgateShowFormSurvey"](showFormSurvey);\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_6__["setFloodgateShowCustomSurvey"](showCustomSurvey);\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_6__["setFloodgateInitialize"](initialize);\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_6__["getSettingIdMap"](getSettingIdMap);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9BcHBfRmxvb2RnYXRlLnRzPzEwNzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7R0FJRztBQUVzQztBQUNZO0FBQ2Q7QUFDVDtBQUNpQztBQUNsQjtBQUNIO0FBQzJCO0FBQ0Y7QUFDYTtBQUlsQjtBQUM4QztBQUM1QjtBQUN4QjtBQUdiO0FBQ1k7QUFFRTtBQUNOO0FBRzFCO0FBRXpCOztHQUVHO0FBQ0gsSUFBSSxNQUFNLEdBQVksS0FBSyxDQUFDO0FBRTVCOzs7R0FHRztBQUNJLFNBQVMsVUFBVTtJQUN6QixPQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTyxFQUFFLE1BQU07UUFDbEMsSUFBTSxpQkFBaUIsR0FBRyxVQUFDLFlBQW9CO1lBQzlDLElBQU0sZUFBZSxHQUFHLDRFQUFlLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM3RCxJQUFJLGVBQWUsRUFBRTtnQkFDcEIsZUFBZSxDQUFDLFNBQVMsQ0FBQyw4RkFBYyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7YUFDdEc7WUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLCtEQUE4QixFQUFFLEVBQUU7WUFDdEMsSUFBSTtnQkFDSCxxREFBb0IsRUFBRSxDQUFDO2FBQ3ZCO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ2IsTUFB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QUFDLFlBQVksZ0JBQUUsaUJBQWlCLHdFQUFDLENBQUMsQ0FBQztBQUN0RSxxRUFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxQyx5RUFBaUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNsRCwyRUFBbUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3RELHFFQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFDLDhEQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvQXBwX0Zsb29kZ2F0ZS50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBcHBfRmxvb2RnYXRlLnRzXHJcbiAqXHJcbiAqIFRoZSBlbnRyeSBwb2ludCBmb3IgZmxvb2RnYXRlLlxyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIENvbW1vbkFwcCBmcm9tIFwiLi9Db21tb25BcHBcIjtcclxuaW1wb3J0ICogYXMgQ29tbW9uRmxvb2RnYXRlIGZyb20gXCIuL0NvbW1vbkZsb29kZ2F0ZVwiO1xyXG5pbXBvcnQgKiBhcyBDb21tb25VSSBmcm9tIFwiLi9Db21tb25VSVwiO1xyXG5pbXBvcnQgKiBhcyBVSSBmcm9tIFwiLi9VSS9VSVwiO1xyXG5pbXBvcnQgKiBhcyBDb25maWd1cmF0aW9uIGZyb20gXCIuL0NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgKiBhcyBMb2dnaW5nIGZyb20gXCIuL0xvZ2dpbmcvTG9nZ2luZ1wiO1xyXG5pbXBvcnQgKiBhcyBXaW5kb3cgZnJvbSBcIi4vV2luZG93L1dpbmRvd1wiO1xyXG5pbXBvcnQgQ3VzdG9tVUlTdXJ2ZXkgZnJvbSBcIi4vRmxvb2RnYXRlQ29yZS9VSVN1cnZleS9DdXN0b21VSVN1cnZleVwiO1xyXG5pbXBvcnQgRHVtbXlVSVN1cnZleSBmcm9tIFwiLi9GbG9vZGdhdGVDb3JlL1VJU3VydmV5L0R1bW15VUlTdXJ2ZXlcIjtcclxuaW1wb3J0IEZsb29kZ2F0ZVRlbGVtZXRyeUxvZ2dlciBmcm9tIFwiLi9GbG9vZGdhdGVDb3JlL0Zsb29kZ2F0ZVRlbGVtZXRyeUxvZ2dlclwiO1xyXG5pbXBvcnQgSUN1c3RvbVN1cnZleSBmcm9tIFwiLi9GbG9vZGdhdGVDb3JlL0lDdXN0b21TdXJ2ZXlcIjtcclxuaW1wb3J0IElVSVN1cnZleSBmcm9tIFwiLi9GbG9vZGdhdGVDb3JlL1VJU3VydmV5L0lVSVN1cnZleVwiO1xyXG5cclxuaW1wb3J0IHsgRmxvb2RnYXRlRW5naW5lIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZVwiO1xyXG5pbXBvcnQgeyBJRmxvb2RnYXRlU2V0dGluZ0lkTWFwLCBJU3VydmV5LCBJU3VydmV5Rm9ybSB9IGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvQXBpL0FwaVwiO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlFdmVudCB9IGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IGN1c3RvbWVyVm9pY2VMYXVuY2hlclR5cGUgfSBmcm9tIFwiLi9Db25zdGFudHNcIjtcclxuaW1wb3J0IHsgSUNvbnRleHRQYXJhbXMsIElSZW5kZXJTdXJ2ZXksIElVUkxQYXJhbXMsIElTdXJ2ZXlPcHRpb25hbENvbmZpZ1BhcmFtcyB9IGZyb20gXCIuL0lSZW5kZXJTdXJ2ZXlcIjtcclxuaW1wb3J0IHsgSUhhbmRsZVN1cnZleUV2ZW50IH0gZnJvbSBcIi4vSUhhbmRsZVN1cnZleUV2ZW50XCI7XHJcbmltcG9ydCB7IHJlbmRlckNWU3VydmV5IH0gZnJvbSBcImdhdGVjcmFzaFwiO1xyXG5pbXBvcnQgeyBoYW5kbGVTdXJ2ZXlFdmVudCB9IGZyb20gXCIuL1VJL1RvYXN0L0NWVG9hc3RcIjtcclxuaW1wb3J0IHsgSU92ZXJyaWRlUmVuZGVyQ2FsbGJhY2sgfSBmcm9tIFwiLi9JT3ZlcnJpZGVSZW5kZXJDYWxsYmFja1wiO1xyXG5pbXBvcnQgVUlTdXJ2ZXkgZnJvbSBcIi4vRmxvb2RnYXRlQ29yZS9VSVN1cnZleS9VSVN1cnZleVwiO1xyXG5pbXBvcnQgeyBsb2FkU3R5bGVzaGVldCB9IGZyb20gXCIuL1dpbmRvdy9Eb21VdGlsc1wiO1xyXG5cclxuZXhwb3J0IHsgZ2V0RW5naW5lU3RhcnRQcm9taXNlLCByZXNldEVuZ2luZSwgc2V0RW5naW5lU3RhcnRQcm9taXNlLCBzdGFydCwgc3RhcnRJbnRlcm5hbCwgc3RvcCB9XHJcblx0ZnJvbSBcIi4vQ29tbW9uRmxvb2RnYXRlXCJcclxuXHJcbi8qKlxyXG4gKiBIYXMgdGhlIGNvbnRyb2wgYmVlbiBvcGVuZWQuIFByZXZlbnRzIG1vcmUgdGhhbiBvbmUgZGlhbG9nIGJlaW5nIGdlbmVyYXRlZC5cclxuICovXHJcbmxldCBvcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplLiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIGNhbGwgdG8gZmxvb2RnYXRlLlxyXG4gKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCBiZSByZWplY3RlZCBpZiB0aGUgY2FsbCBmYWlscy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplKCk6IFByb21pc2U8YW55PiB7XHJcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdGNvbnN0IHJlamVjdEFuZExvZ0Vycm9yID0gKGVycm9yTWVzc2FnZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGNvbnN0IHRlbGVtZXRyeUxvZ2dlciA9IEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKTtcclxuXHRcdFx0aWYgKHRlbGVtZXRyeUxvZ2dlcikge1xyXG5cdFx0XHRcdHRlbGVtZXRyeUxvZ2dlci5sb2dfRXZlbnQoVGVsZW1ldHJ5RXZlbnQuRmxvb2RnYXRlLkluaXRpYWxpemUuRmFpbGVkLCB7IEVycm9yTWVzc2FnZTogZXJyb3JNZXNzYWdlIH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZWplY3QoZXJyb3JNZXNzYWdlKTtcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKCFDb21tb25GbG9vZGdhdGUuZ2V0SW5pdGlhbGl6ZWQoKSkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdENvbW1vbkFwcC5pbml0aWFsaXplKCk7XHJcblx0XHRcdH0gY2F0Y2ggKGVycikge1xyXG5cdFx0XHRcdHJlamVjdChcIkNvbW1vbkFwcCBpbml0aWFsaXphdGlvbiBmYWlsZWQ6IHtcIiArIGVyciArIFwifVwiKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Rmxvb2RnYXRlRW5naW5lLnNldFRlbGVtZXRyeUxvZ2dlcihuZXcgRmxvb2RnYXRlVGVsZW1ldHJ5TG9nZ2VyKCkpO1xyXG5cclxuXHRcdFx0Q29tbW9uVUkuaW5pdGlhbGl6ZSgpXHJcblx0XHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0XHRmdW5jdGlvbiBvbkluaXRpYWxpemVGdWxmaWxsZWQoKSB7XHJcblx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0Q29tbW9uRmxvb2RnYXRlLmluaXRpYWxpemUoKTtcclxuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0QW5kTG9nRXJyb3IoXCJDb21tb25GbG9vZGdhdGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiB7XCIgKyBlcnIgKyBcIn1cIik7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHJlc29sdmUobnVsbCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdC5jYXRjaChcclxuXHRcdFx0XHRcdGZ1bmN0aW9uIG9uSW5pdGlhbGl6ZVJlamVjdGVkKGVycikge1xyXG5cdFx0XHRcdFx0XHRyZWplY3RBbmRMb2dFcnJvcihcIkluaXRpYWxpemF0aW9uIGZhaWxlZDoge1wiICsgZXJyICsgXCJ9XCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXNvbHZlKG51bGwpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG59XHJcblxyXG4vKipcclxuICogRGlzcGxheSB0aGUgZ2l2ZW4gU3VydmV5IHdpdGggaXQncyBwcm9tcHRcclxuICogQHBhcmFtIHN1cnZleSB0aGUgc3VydmV5IHRvIHNob3dcclxuICogQHBhcmFtIG92ZXJyaWRlVVhSZW5kZXJDYWxsYmFja0FzeW5jIGEgY2FsbGJhY2sgdG8gb3ZlcnJpZGUgcmVuZGVyaW5nXHJcbiAqIChjdXJyZW50bHkgb25seSBzdXBwb3J0cyBDViBzdXJ2ZXlzKVxyXG4gKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCBiZSByZWplY3RlZCBpZiB0aGUgY2FsbCBmYWlscy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzaG93U3VydmV5KFxyXG5cdHN1cnZleTogSVVJU3VydmV5LFxyXG5cdG92ZXJyaWRlVVhSZW5kZXJDYWxsYmFja0FzeW5jPzogSU92ZXJyaWRlUmVuZGVyQ2FsbGJhY2tcclxuKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdGlmIChvcGVuZWQpIHtcclxuXHRcdFx0cmVqZWN0KFwiQ29udHJvbCBhbHJlYWR5IG9wZW5cIik7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIUNvbmZpZ3VyYXRpb24uZ2V0KCkuaXNGZWVkYmFja1N1cnZleUVuYWJsZWRCeUFBREMoKSkge1xyXG5cdFx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX0RJU0FCTEVEX0FBREMsXHJcblx0XHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5FcnJvcixcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRDYW1wYWlnbklkOiBzdXJ2ZXkuZ2V0Q2FtcGFpZ25JZCgpLFxyXG5cdFx0XHRcdFx0RGF0YTogSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0XHRhZ2VHcm91cDogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLmFnZUdyb3VwLFxyXG5cdFx0XHRcdFx0XHRhdXRoZW50aWNhdGlvblR5cGU6IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5hdXRoZW50aWNhdGlvblR5cGUsXHJcblx0XHRcdFx0XHR9KSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0cmVqZWN0KFwiUHJvbXB0IGlzIHByb2hpYml0ZWQgYnkgQUFEQ1wiKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuc2V0Rmxvb2RnYXRlU3VydmV5KHN1cnZleSA/IHN1cnZleSA6IG5ldyBEdW1teVVJU3VydmV5KCkpO1xyXG5cdFx0Y29uc3QgaXNDVlN1cnZleUVuYWJsZWQgPSBDb25maWd1cmF0aW9uLmdldCgpLmlzQ1ZTdXJ2ZXlFbmFibGVkKCk7XHJcblx0XHQvKipcclxuXHRcdCAqIEJyYW5jaGluZyBsb2dpYyB0byBkZXRlcm1pbmUgaWYgQ3VzdG9tZXIgVm9pY2Ugc3VydmV5IGlzIHNob3duIHRvIHVzZXIuXHJcblx0XHQgKi9cclxuXHRcdGlmIChpc0NWU3VydmV5RW5hYmxlZCAmJiBzdXJ2ZXkuZ2V0TGF1bmNoZXJUeXBlKCkgPT09IGN1c3RvbWVyVm9pY2VMYXVuY2hlclR5cGUpIHtcclxuXHRcdFx0Y29uc3QgY29udGV4dFBhcmFtczogSUNvbnRleHRQYXJhbXMgPSBnZXRDb250ZXh0UGFyYW1zKHN1cnZleSk7XHJcblx0XHRcdGNvbnN0IG9wdGlvbmFsQ29uZmlnUGFyYW1zOiBJU3VydmV5T3B0aW9uYWxDb25maWdQYXJhbXMgPSBnZXRPcHRpb25hbENvbmZpZ1BhcmFtcygpO1xyXG5cclxuXHRcdFx0VUkuY3JlYXRlQ1ZTdXJ2ZXkoXHJcblx0XHRcdFx0Y29udGV4dFBhcmFtcyxcclxuXHRcdFx0XHRmdW5jdGlvbiAoKSB7IG9wZW5lZCA9IGZhbHNlOyB9LFxyXG5cdFx0XHRcdG9wdGlvbmFsQ29uZmlnUGFyYW1zLFxyXG5cdFx0XHRcdG92ZXJyaWRlVVhSZW5kZXJDYWxsYmFja0FzeW5jXHJcblx0XHRcdCk7XHJcblx0XHRcdG9wZW5lZCA9IHRydWU7XHJcblx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0VUkuY3JlYXRlU3VydmV5KGZ1bmN0aW9uICgpIHsgb3BlbmVkID0gZmFsc2U7IH0pO1xyXG5cdFx0b3BlbmVkID0gdHJ1ZTtcclxuXHRcdHJlc29sdmUoKTtcclxuXHR9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1ldGhvZCB0byBjcmVhdGUgdGhlIGNvbnRleHQgcGFyYW1zIG9iamVjdFxyXG4gKiBAcGFyYW0gc3VydmV5IHRoZSBzdXJ2ZXkgYmVpbmcgc2hvd25cclxuICovXHJcbmZ1bmN0aW9uIGdldENvbnRleHRQYXJhbXMoc3VydmV5OiBJVUlTdXJ2ZXkpOiBJQ29udGV4dFBhcmFtcyB7XHJcblx0Y29uc3QgdXJsUGFyYW1zOiBJVVJMUGFyYW1zID0ge307XHJcblx0aWYgKENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5wcmltYXJ5Q29sb3VyKSB7XHJcblx0XHR1cmxQYXJhbXMuYXBwUHJpbWFyeUNvbG9yID0gQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLnByaW1hcnlDb2xvdXIucmVwbGFjZShcIiNcIiwgXCJcIik7XHJcblx0fVxyXG5cdGlmIChDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkuc2Vjb25kYXJ5Q29sb3VyKSB7XHJcblx0XHR1cmxQYXJhbXMuYXBwU2Vjb25kYXJ5Q29sb3IgPSBDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkuc2Vjb25kYXJ5Q29sb3VyLnJlcGxhY2UoXCIjXCIsIFwiXCIpO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHtcclxuXHRcdGN1c3RvbWVyVm9pY2VGb3JtSWQ6IHN1cnZleS5nZXRDVlN1cnZleUZvcm1JZCgpLFxyXG5cdFx0ZmxpZ2h0czogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDVlN1cnZleUZsaWdodHMoKSxcclxuXHRcdGlzQ29tbWVyY2lhbEhvc3Q6IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5pc0NvbW1lcmNpYWxIb3N0LFxyXG5cdFx0bG9jYWxlOiBDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkubG9jYWxlLFxyXG5cdFx0dXNlckVtYWlsQ29uc2VudERlZmF1bHQ6IGZhbHNlLFxyXG5cdFx0cGxhdGZvcm06IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS50ZWxlbWV0cnlHcm91cC5wbGF0Zm9ybSxcclxuXHRcdHByb2R1Y3ROYW1lOiBDb25maWd1cmF0aW9uLmdldCgpLmdldFByb2R1Y3ROYW1lKCksXHJcblx0XHR1aUhvc3Q6IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0VUlIb3N0KCksXHJcblx0XHR1aUhvc3RDVlN1cnZleURpc3BhdGNoZXI6IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0VUlIb3N0Q1ZTdXJ2ZXlEaXNwYXRjaGVyKCksXHJcblx0XHRzdHlsZXNVcmw6IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5zdHlsZXNVcmwsXHJcblx0XHR1cmxQYXJhbXMsXHJcblx0fTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1ldGhvZCB0byBjcmVhdGUgdGhlIG9wdGlvbmFsIGNvbmZpZyBwYXJhbXNcclxuICogQHBhcmFtIHN1cnZleSB0aGUgc3VydmV5IGJlaW5nIHNob3duXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRPcHRpb25hbENvbmZpZ1BhcmFtcygpOiBJU3VydmV5T3B0aW9uYWxDb25maWdQYXJhbXMge1xyXG5cdGNvbnN0IG9wdGlvbmFsQ29uZmlnUGFyYW1zOiBJU3VydmV5T3B0aW9uYWxDb25maWdQYXJhbXMgPSB7XHJcblx0XHRjbG9zZUJ1dHRvbkVuYWJsZWQ6IHRydWUsXHJcblx0XHRjYW5jZWxCdXR0b25FbmFibGVkOiB0cnVlLFxyXG5cdFx0dGltZU91dEVuYWJsZWQ6IHRydWUsXHJcblx0fTtcclxuXHRpZiAoQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDU1NQb3NpdGlvbigpKSB7XHJcblx0XHRvcHRpb25hbENvbmZpZ1BhcmFtcy5jc3NQb3NpdGlvbiA9IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q1NTUG9zaXRpb24oKTtcclxuXHR9XHJcblx0aWYgKENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q1NTWkluZGV4KCkpIHtcclxuXHRcdG9wdGlvbmFsQ29uZmlnUGFyYW1zLmNzc1pJbmRleCA9IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q1NTWkluZGV4KCk7XHJcblx0fVxyXG5cdGlmIChDb25maWd1cmF0aW9uLmdldCgpLmdldENTU0JvdHRvbSgpKSB7XHJcblx0XHRvcHRpb25hbENvbmZpZ1BhcmFtcy5jc3NCb3R0b20gPSBDb25maWd1cmF0aW9uLmdldCgpLmdldENTU0JvdHRvbSgpO1xyXG5cdH1cclxuXHRpZiAoQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDU1NSaWdodCgpKSB7XHJcblx0XHRvcHRpb25hbENvbmZpZ1BhcmFtcy5jc3NSaWdodCA9IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q1NTUmlnaHQoKTtcclxuXHR9XHJcblx0cmV0dXJuIG9wdGlvbmFsQ29uZmlnUGFyYW1zO1xyXG59XHJcblxyXG4vKipcclxuICogTWV0aG9kIHRvIGFsbG93IHVzZXJzIHRvIGxhdW5jaCBhIHN1cnZleSBmcm9tIGFuIElTdXJ2ZXlGb3JtXHJcbiAqIEBwYXJhbSBzdXJ2ZXkgdGhlIHN1cnZleSB0byBzaG93XHJcbiAqIEBwYXJhbSBvdmVycmlkZVVYUmVuZGVyQ2FsbGJhY2tBc3luYyBhIGNhbGxiYWNrIHRvIG92ZXJyaWRlIHJlbmRlcmluZ1xyXG4gKiAoY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgQ1Ygc3VydmV5cylcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzaG93Rm9ybVN1cnZleShcclxuXHRzdXJ2ZXk6IElTdXJ2ZXlGb3JtLFxyXG5cdG92ZXJyaWRlVVhSZW5kZXJDYWxsYmFja0FzeW5jPzogSU92ZXJyaWRlUmVuZGVyQ2FsbGJhY2tcclxuKTogUHJvbWlzZTxhbnk+IHtcclxuXHRjb25zdCBnZW5lcmljU3VydmV5OiBJU3VydmV5ID0gc3VydmV5IGFzIElTdXJ2ZXk7XHJcblxyXG5cdGdlbmVyaWNTdXJ2ZXkuZ2V0U3VydmV5SW5mbyA9ICgpID0+IChzdXJ2ZXkgYXMgYW55KS5zdXJ2ZXlJbmZvO1xyXG5cdGdlbmVyaWNTdXJ2ZXkuZ2V0RG9tRWxlbWVudHMgPSAoKSA9PiB1bmRlZmluZWQ7XHJcblx0Z2VuZXJpY1N1cnZleS5nZXRKc29uRWxlbWVudHMgPSAoKSA9PiB1bmRlZmluZWQ7XHJcblxyXG5cdGNvbnN0IGZvcm1hdHRlZFN1cnZleTogSVVJU3VydmV5ID0gbmV3IFVJU3VydmV5KGdlbmVyaWNTdXJ2ZXkpO1xyXG5cdHJldHVybiBzaG93U3VydmV5KGZvcm1hdHRlZFN1cnZleSwgb3ZlcnJpZGVVWFJlbmRlckNhbGxiYWNrQXN5bmMpO1xyXG59XHJcblxyXG4vKipcclxuICogTWV0aG9kIHRvIGFsbG93IHVzZXJzIHRvIGxhdW5jaCBhIGN1c3RvbSBzdXJ2ZXkgZGlyZWN0bHlcclxuICogQHBhcmFtIHN1cnZleSB0aGUgc3VydmV5IHRvIHNob3dcclxuICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVqZWN0ZWQgaWYgdGhlIGNhbGwgZmFpbHMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2hvd0N1c3RvbVN1cnZleShzdXJ2ZXk6IElDdXN0b21TdXJ2ZXkpOiBQcm9taXNlPGFueT4ge1xyXG5cdHJldHVybiBzaG93U3VydmV5KG5ldyBDdXN0b21VSVN1cnZleShzdXJ2ZXkpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1ldGhvZCB0byBhbGxvdyB1c2VycyB0byBjYWxsIHN1cnZleSByZW5kZXJpbmcgaW5kZXBlbmRlbnQgZnJvbSBzaG93U3VydmV5KCkuXHJcbiAqIEBwYXJhbSBwYXJlbnRFbGVtZW50IHRoZSBjb250YWluZXIgaW4gd2hpY2ggdGhlIHN1cnZleSB3aWxsIGJlIHJlbmRlcmVkXHJcbiAqIEBwYXJhbSBvblN1cnZleUV2ZW50IGEgaGFuZGxlciBmb3IgYWxsIGV2ZW50cyBlbWl0dGVkIGJ5IHN1cnZleSB0b29sc1xyXG4gKiBAcGFyYW0gY29udGV4dFBhcmFtcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgc3VydmV5IGlzIHNob3duXHJcbiAqIEBwYXJhbSBzdXJ2ZXlPcHRpb25hbENvbmZpZ1BhcmFtcyBhZGRpdGlvbmFsIHN1cnZleSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcclxuICovXHJcbmV4cG9ydCBjb25zdCByZW5kZXJTdXJ2ZXk6IElSZW5kZXJTdXJ2ZXkgPSAoXHJcblx0cGFyZW50RWxlbWVudDogc3RyaW5nIHwgSFRNTEVsZW1lbnQsXHJcblx0b25TdXJ2ZXlFdmVudDogSUhhbmRsZVN1cnZleUV2ZW50LFxyXG5cdGNvbnRleHRQYXJhbXM6IElDb250ZXh0UGFyYW1zLFxyXG5cdHN1cnZleU9wdGlvbmFsQ29uZmlnUGFyYW1zPzogSVN1cnZleU9wdGlvbmFsQ29uZmlnUGFyYW1zXHJcbik6IHZvaWQgPT4ge1xyXG5cdGNvbnN0IGlzTWFpbkNvbnRleHQgPSBDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpID8gdHJ1ZSA6IGZhbHNlO1xyXG5cdGlmICghaXNNYWluQ29udGV4dCAmJiBjb250ZXh0UGFyYW1zLnN0eWxlc1VybCkge1xyXG5cdFx0bG9hZFN0eWxlc2hlZXQoY29udGV4dFBhcmFtcy5zdHlsZXNVcmwpO1xyXG5cdH1cclxuXHJcblx0Ly8gSWYgYSBDViBmb3JtIElEIGlzIHByb3ZpZGVkLCB3ZSBjbGFzc2lmeSB0aGlzIHJlcXVlc3QgYXMgYSBDdXN0b21lciBWb2ljZSBzdXJ2ZXlcclxuXHRpZiAoISFjb250ZXh0UGFyYW1zLmN1c3RvbWVyVm9pY2VGb3JtSWQpIHtcclxuXHRcdHJlbmRlckNWU3VydmV5KFxyXG5cdFx0XHRwYXJlbnRFbGVtZW50LFxyXG5cdFx0XHRvblN1cnZleUV2ZW50LFxyXG5cdFx0XHRjb250ZXh0UGFyYW1zLFxyXG5cdFx0XHRzdXJ2ZXlPcHRpb25hbENvbmZpZ1BhcmFtcyxcclxuXHRcdFx0aXNNYWluQ29udGV4dFxyXG5cdFx0KTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Y29uc3QgdGVsZW1ldHJ5TG9nZ2VyID0gRmxvb2RnYXRlRW5naW5lLmdldFRlbGVtZXRyeUxvZ2dlcigpO1xyXG5cdFx0aWYgKHRlbGVtZXRyeUxvZ2dlcikge1xyXG5cdFx0XHR0ZWxlbWV0cnlMb2dnZXIubG9nX0V2ZW50KFxyXG5cdFx0XHRcdFRlbGVtZXRyeUV2ZW50LkZsb29kZ2F0ZS5SZW5kZXJTdXJ2ZXkuVW5zdXBwb3J0ZWQsXHJcblx0XHRcdFx0eyBFcnJvck1lc3NhZ2U6IGBXQVJOOiByZW5kZXJTdXJ2ZXkgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgQ3VzdG9tZXIgVm9pY2Ugc3VydmV5cy5gIH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG4vKipcclxuICogUmVzZXQgdGhlIGZsb29kZ2F0ZSBtb2R1bGUuIFVzZWQgaW4gdW5pdCB0ZXN0cy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNldCgpIHtcclxuXHRDb21tb25BcHAucmVzZXQoKTtcclxuXHRDb21tb25VSS5yZXNldCgpO1xyXG5cdENvbW1vbkZsb29kZ2F0ZS5yZXNldCgpO1xyXG5cdG9wZW5lZCA9IGZhbHNlO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IGEgbGlzdCBvZiBzZXR0aW5nIG5hbWVzIGFuZCBpZHNcclxuICogQHJldHVybnMgdGhlIHNldHRpbmcgbmFtZXMgYW5kIGlkcyBsaXN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dGluZ0lkTWFwKCk6IElGbG9vZGdhdGVTZXR0aW5nSWRNYXAge1xyXG5cdHJldHVybiBJRmxvb2RnYXRlU2V0dGluZ0lkTWFwLlJvYW1pbmdTZXR0aW5nSWRNYXA7XHJcbn1cclxuXHJcbldpbmRvdy5zZXRGbG9vZGdhdGVDdXN0b21VWEhhbmRsZXIoe3JlbmRlclN1cnZleSwgaGFuZGxlU3VydmV5RXZlbnR9KTtcclxuV2luZG93LnNldEZsb29kZ2F0ZVNob3dTdXJ2ZXkoc2hvd1N1cnZleSk7XHJcbldpbmRvdy5zZXRGbG9vZGdhdGVTaG93Rm9ybVN1cnZleShzaG93Rm9ybVN1cnZleSk7XHJcbldpbmRvdy5zZXRGbG9vZGdhdGVTaG93Q3VzdG9tU3VydmV5KHNob3dDdXN0b21TdXJ2ZXkpO1xyXG5XaW5kb3cuc2V0Rmxvb2RnYXRlSW5pdGlhbGl6ZShpbml0aWFsaXplKTtcclxuV2luZG93LmdldFNldHRpbmdJZE1hcChnZXRTZXR0aW5nSWRNYXApO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/App_Floodgate.ts\n')},"./scripts/app/App_InAppFeedback.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initialize", function() { return initialize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "multiFeedback", function() { return multiFeedback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "singleFeedback", function() { return singleFeedback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getFeedbackStatus", function() { return getFeedbackStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reset", function() { return reset; });\n/* harmony import */ var _CommonApp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CommonApp */ "./scripts/app/CommonApp.ts");\n/* harmony import */ var _CommonUI__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CommonUI */ "./scripts/app/CommonUI.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/* harmony import */ var _UI_BellyBand_BellyBand__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./UI/BellyBand/BellyBand */ "./scripts/app/UI/BellyBand/BellyBand.ts");\n/* harmony import */ var _Window_Window__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Window/Window */ "./scripts/app/Window/Window.ts");\n/**\r\n * App_inAppFeedback.ts\r\n *\r\n * The entry point for inAppFeedback.\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Has inAppFeedback been initialized\r\n */\r\nvar initialized = false;\r\n/**\r\n * Initialize\r\n * @returns A promise which will be rejected if the call fails.\r\n */\r\nfunction initialize() {\r\n    return new Promise(function (resolve, reject) {\r\n        if (!initialized) {\r\n            try {\r\n                _CommonApp__WEBPACK_IMPORTED_MODULE_0__["initialize"]();\r\n            }\r\n            catch (err) {\r\n                reject("CommonApp initialization failed: {" + err + "}");\r\n            }\r\n            _CommonUI__WEBPACK_IMPORTED_MODULE_1__["initialize"]()\r\n                .then(function onInitializeFulfilled() {\r\n                _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().setInAppFeedbackInitOptions(_Window_Window__WEBPACK_IMPORTED_MODULE_5__["get"]().OfficeBrowserFeedback.initOptions);\r\n                initialized = true;\r\n                resolve();\r\n            })\r\n                .catch(function onInitializeRejected(err) { reject("Initialization failed: {" + err + "}"); });\r\n        }\r\n        else {\r\n            resolve();\r\n        }\r\n    });\r\n}\r\n/**\r\n * Has the control been opened. Prevents more than one dialog being generated.\r\n */\r\nvar opened = false;\r\n/**\r\n * Handler to launch the multi feedback dialog\r\n * @param launchOptions optional feedback properties\r\n * @returns A promise which will be rejected if the call fails.\r\n */\r\nfunction multiFeedback(launchOptions) {\r\n    return new Promise(function (resolve, reject) {\r\n        if (opened) {\r\n            reject("Control already open");\r\n            return;\r\n        }\r\n        initialize()\r\n            .then(function onInitializeFulfilled() {\r\n            _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().setInAppFeedbackLaunchOptions(launchOptions);\r\n            _UI_BellyBand_BellyBand__WEBPACK_IMPORTED_MODULE_4__["createMulti"](function () { opened = false; });\r\n            _Logging_Logging__WEBPACK_IMPORTED_MODULE_3__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_3__["EventIds"].InApp.UI.Picker.Shown.VALUE, 1 /* Critical */, {\r\n                IsBugEnabled: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().getInAppFeedbackInitOptions().bugForm,\r\n            });\r\n            opened = true;\r\n            resolve();\r\n        })\r\n            .catch(function onInitializeRejected(err) { reject("Initialization failed: {" + err + "}"); });\r\n    });\r\n}\r\n/**\r\n * Handler to launch the single feedback dialog\r\n * @param feedbackType the feedback type\r\n * @param launchOptions optional feedback properties\r\n * @returns A promise which will be rejected if the call fails.\r\n */\r\nfunction singleFeedback(feedbackType, launchOptions) {\r\n    return new Promise(function (resolve, reject) {\r\n        if (opened) {\r\n            reject("Control already open");\r\n            return;\r\n        }\r\n        var feedbackTypeEnum = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["validateFeedbackType"](feedbackType);\r\n        initialize()\r\n            .then(function onInitializeFulfilled() {\r\n            _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().setInAppFeedbackLaunchOptions(launchOptions);\r\n            _UI_BellyBand_BellyBand__WEBPACK_IMPORTED_MODULE_4__["createSingle"](function () { opened = false; }, feedbackTypeEnum);\r\n            _Logging_Logging__WEBPACK_IMPORTED_MODULE_3__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_3__["EventIds"].InApp.UI.Form.Shown.VALUE, 1 /* Critical */, {\r\n                FeedbackType: feedbackTypeEnum,\r\n            });\r\n            opened = true;\r\n            resolve();\r\n        })\r\n            .catch(function onInitializeRejected(err) { reject("Initialization failed: {" + err + "}"); });\r\n    });\r\n}\r\nfunction getFeedbackStatus() {\r\n    if (_Window_Window__WEBPACK_IMPORTED_MODULE_5__["get"]().OfficeBrowserFeedback.initOptions.isCommercialHost &&\r\n        _Window_Window__WEBPACK_IMPORTED_MODULE_5__["get"]().OfficeBrowserFeedback.initOptions.sendFeedbackPolicyValue === 2 /* Disabled */) {\r\n        return 1 /* DisabledByAdmin */;\r\n    }\r\n    if (!_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().determineAADCPolicy(_Window_Window__WEBPACK_IMPORTED_MODULE_5__["get"]().OfficeBrowserFeedback.initOptions.authenticationType, _Window_Window__WEBPACK_IMPORTED_MODULE_5__["get"]().OfficeBrowserFeedback.initOptions.ageGroup)) {\r\n        return 2 /* DisabledByAgeGroup */;\r\n    }\r\n    return 0 /* Enabled */;\r\n}\r\n/**\r\n * Reset the inappfeedback module. Used in unit tests.\r\n */\r\nfunction reset() {\r\n    _CommonApp__WEBPACK_IMPORTED_MODULE_0__["reset"]();\r\n    _CommonUI__WEBPACK_IMPORTED_MODULE_1__["reset"]();\r\n    initialized = false;\r\n    opened = false;\r\n}\r\n/* Make the FeedbackDialog methods available globally */\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_5__["setMultiFeedback"](multiFeedback);\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_5__["setSingleFeedback"](singleFeedback);\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_5__["setFeedbackStatus"](getFeedbackStatus);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9BcHBfSW5BcHBGZWVkYmFjay50cz8zOTRlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O0dBSUc7QUFFc0M7QUFDRjtBQUN3QjtBQUNsQjtBQUNFO0FBQ0w7QUFJMUM7O0dBRUc7QUFDSCxJQUFJLFdBQVcsR0FBWSxLQUFLLENBQUM7QUFFakM7OztHQUdHO0FBQ0ksU0FBUyxVQUFVO0lBQ3pCLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFPLEVBQUUsTUFBTTtRQUNsQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2pCLElBQUk7Z0JBQ0gscURBQW9CLEVBQUUsQ0FBQzthQUN2QjtZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNiLE1BQU0sQ0FBQyxvQ0FBb0MsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7YUFDekQ7WUFFRCxvREFBbUIsRUFBRTtpQkFDcEIsSUFBSSxDQUNKLFNBQVMscUJBQXFCO2dCQUM3QixnRUFBaUIsRUFBRSxDQUFDLDJCQUEyQixDQUFDLGtEQUFVLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDaEcsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDbkIsT0FBTyxFQUFFLENBQUM7WUFDWCxDQUFDLENBQ0Q7aUJBQ0EsS0FBSyxDQUNMLFNBQVMsb0JBQW9CLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQywwQkFBMEIsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RGLENBQUM7U0FDRjthQUFNO1lBQ04sT0FBTyxFQUFFLENBQUM7U0FDVjtJQUNGLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsSUFBSSxNQUFNLEdBQVksS0FBSyxDQUFDO0FBRTVCOzs7O0dBSUc7QUFDSSxTQUFTLGFB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S0FBSyxDQUFDO0lBQ3BCLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDaEIsQ0FBQztBQUVELHdEQUF3RDtBQUN4RCwrREFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2QyxnRUFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN6QyxnRUFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvQXBwX0luQXBwRmVlZGJhY2sudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQXBwX2luQXBwRmVlZGJhY2sudHNcclxuICpcclxuICogVGhlIGVudHJ5IHBvaW50IGZvciBpbkFwcEZlZWRiYWNrLlxyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIENvbW1vbkFwcCBmcm9tIFwiLi9Db21tb25BcHBcIjtcclxuaW1wb3J0ICogYXMgQ29tbW9uVUkgZnJvbSBcIi4vQ29tbW9uVUlcIjtcclxuaW1wb3J0ICogYXMgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0ICogYXMgTG9nZ2luZyBmcm9tIFwiLi9Mb2dnaW5nL0xvZ2dpbmdcIjtcclxuaW1wb3J0ICogYXMgVUkgZnJvbSBcIi4vVUkvQmVsbHlCYW5kL0JlbGx5QmFuZFwiO1xyXG5pbXBvcnQgKiBhcyBXaW5kb3cgZnJvbSBcIi4vV2luZG93L1dpbmRvd1wiO1xyXG5pbXBvcnQgeyBJTGF1bmNoT3B0aW9uc0luQXBwRmVlZGJhY2sgfSBmcm9tIFwiLi9Db25maWd1cmF0aW9uL0lMYXVuY2hPcHRpb25zXCI7XHJcbmltcG9ydCB7IE9DUFNWYWx1ZXMsIEZlZWRiYWNrU3RhdHVzIH0gZnJvbSBcIi4vQ29uc3RhbnRzXCI7XHJcblxyXG4vKipcclxuICogSGFzIGluQXBwRmVlZGJhY2sgYmVlbiBpbml0aWFsaXplZFxyXG4gKi9cclxubGV0IGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZVxyXG4gKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCBiZSByZWplY3RlZCBpZiB0aGUgY2FsbCBmYWlscy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplKCk6IFByb21pc2U8YW55PiB7XHJcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdGlmICghaW5pdGlhbGl6ZWQpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRDb21tb25BcHAuaW5pdGlhbGl6ZSgpO1xyXG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcclxuXHRcdFx0XHRyZWplY3QoXCJDb21tb25BcHAgaW5pdGlhbGl6YXRpb24gZmFpbGVkOiB7XCIgKyBlcnIgKyBcIn1cIik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdENvbW1vblVJLmluaXRpYWxpemUoKVxyXG5cdFx0XHQudGhlbihcclxuXHRcdFx0XHRmdW5jdGlvbiBvbkluaXRpYWxpemVGdWxmaWxsZWQoKSB7XHJcblx0XHRcdFx0XHRDb25maWd1cmF0aW9uLmdldCgpLnNldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucyhXaW5kb3cuZ2V0KCkuT2ZmaWNlQnJvd3NlckZlZWRiYWNrLmluaXRPcHRpb25zKTtcclxuXHRcdFx0XHRcdGluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdClcclxuXHRcdFx0LmNhdGNoKFxyXG5cdFx0XHRcdGZ1bmN0aW9uIG9uSW5pdGlhbGl6ZVJlamVjdGVkKGVycikgeyByZWplY3QoXCJJbml0aWFsaXphdGlvbiBmYWlsZWQ6IHtcIiArIGVyciArIFwifVwiKTsgfVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmVzb2x2ZSgpO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG59XHJcblxyXG4vKipcclxuICogSGFzIHRoZSBjb250cm9sIGJlZW4gb3BlbmVkLiBQcmV2ZW50cyBtb3JlIHRoYW4gb25lIGRpYWxvZyBiZWluZyBnZW5lcmF0ZWQuXHJcbiAqL1xyXG5sZXQgb3BlbmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4vKipcclxuICogSGFuZGxlciB0byBsYXVuY2ggdGhlIG11bHRpIGZlZWRiYWNrIGRpYWxvZ1xyXG4gKiBAcGFyYW0gbGF1bmNoT3B0aW9ucyBvcHRpb25hbCBmZWVkYmFjayBwcm9wZXJ0aWVzXHJcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlamVjdGVkIGlmIHRoZSBjYWxsIGZhaWxzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpRmVlZGJhY2sobGF1bmNoT3B0aW9ucz86IElMYXVuY2hPcHRpb25zSW5BcHBGZWVkYmFjayk6IFByb21pc2U8YW55PiB7XHJcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdGlmIChvcGVuZWQpIHtcclxuXHRcdFx0cmVqZWN0KFwiQ29udHJvbCBhbHJlYWR5IG9wZW5cIik7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpbml0aWFsaXplKClcclxuXHRcdC50aGVuKFxyXG5cdFx0XHRmdW5jdGlvbiBvbkluaXRpYWxpemVGdWxmaWxsZWQoKSB7XHJcblx0XHRcdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5zZXRJbkFwcEZlZWRiYWNrTGF1bmNoT3B0aW9ucyhsYXVuY2hPcHRpb25zKTtcclxuXHRcdFx0XHRVSS5jcmVhdGVNdWx0aShmdW5jdGlvbiAoKSB7IG9wZW5lZCA9IGZhbHNlOyB9KTtcclxuXHRcdFx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KExvZ2dpbmcuRXZlbnRJZHMuSW5BcHAuVUkuUGlja2VyLlNob3duLlZBTFVFLFxyXG5cdFx0XHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5Dcml0aWNhbCxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0SXNCdWdFbmFibGVkOiBDb25maWd1cmF0aW9uLmdldCgpLmdldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucygpLmJ1Z0Zvcm0sXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRvcGVuZWQgPSB0cnVlO1xyXG5cdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0fVxyXG5cdFx0KVxyXG5cdFx0LmNhdGNoKFxyXG5cdFx0XHRmdW5jdGlvbiBvbkluaXRpYWxpemVSZWplY3RlZChlcnIpIHsgcmVqZWN0KFwiSW5pdGlhbGl6YXRpb24gZmFpbGVkOiB7XCIgKyBlcnIgKyBcIn1cIik7IH1cclxuXHRcdCk7XHJcblx0fSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBIYW5kbGVyIHRvIGxhdW5jaCB0aGUgc2luZ2xlIGZlZWRiYWNrIGRpYWxvZ1xyXG4gKiBAcGFyYW0gZmVlZGJhY2tUeXBlIHRoZSBmZWVkYmFjayB0eXBlXHJcbiAqIEBwYXJhbSBsYXVuY2hPcHRpb25zIG9wdGlvbmFsIGZlZWRiYWNrIHByb3BlcnRpZXNcclxuICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVqZWN0ZWQgaWYgdGhlIGNhbGwgZmFpbHMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2luZ2xlRmVlZGJhY2soZmVlZGJhY2tUeXBlOiBzdHJpbmcsIGxhdW5jaE9wdGlvbnM/OiBJTGF1bmNoT3B0aW9uc0luQXBwRmVlZGJhY2spOiBQcm9taXNlPGFueT4ge1xyXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRpZiAob3BlbmVkKSB7XHJcblx0XHRcdHJlamVjdChcIkNvbnRyb2wgYWxyZWFkeSBvcGVuXCIpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGZlZWRiYWNrVHlwZUVudW0gPSBDb25maWd1cmF0aW9uLnZhbGlkYXRlRmVlZGJhY2tUeXBlKGZlZWRiYWNrVHlwZSk7XHJcblxyXG5cdFx0aW5pdGlhbGl6ZSgpXHJcblx0XHQudGhlbihcclxuXHRcdFx0ZnVuY3Rpb24gb25Jbml0aWFsaXplRnVsZmlsbGVkKCkge1xyXG5cdFx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuc2V0SW5BcHBGZWVkYmFja0xhdW5jaE9wdGlvbnMobGF1bmNoT3B0aW9ucyk7XHJcblx0XHRcdFx0VUkuY3JlYXRlU2luZ2xlKGZ1bmN0aW9uICgpIHsgb3BlbmVkID0gZmFsc2U7IH0sIGZlZWRiYWNrVHlwZUVudW0pO1xyXG5cdFx0XHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoTG9nZ2luZy5FdmVudElkcy5JbkFwcC5VSS5Gb3JtLlNob3duLlZBTFVFLFxyXG5cdFx0XHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5Dcml0aWNhbCxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0RmVlZGJhY2tUeXBlOiBmZWVkYmFja1R5cGVFbnVtLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0b3BlbmVkID0gdHJ1ZTtcclxuXHRcdFx0XHRyZXNvbHZlKCk7XHJcblx0XHRcdH1cclxuXHRcdClcclxuXHRcdC5jYXRjaChcclxuXHRcdFx0ZnVuY3Rpb24gb25Jbml0aWFsaXplUmVqZWN0ZWQoZXJyKSB7IHJlamVjdChcIkluaXRpYWxpemF0aW9uIGZhaWxlZDoge1wiICsgZXJyICsgXCJ9XCIpOyB9XHJcblx0XHQpO1xyXG5cdH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVlZGJhY2tTdGF0dXMoKTogRmVlZGJhY2tTdGF0dXMge1xyXG5cclxuXHRpZiAoV2luZG93LmdldCgpLk9mZmljZUJyb3dzZXJGZWVkYmFjay5pbml0T3B0aW9ucy5pc0NvbW1lcmNpYWxIb3N0ICYmXHJcblx0V2luZG93LmdldCgpLk9mZmljZUJyb3dzZXJGZWVkYmFjay5pbml0T3B0aW9ucy5zZW5kRmVlZGJhY2tQb2xpY3lWYWx1ZSA9PT0gT0NQU1ZhbHVlcy5EaXNhYmxlZCkge1xyXG5cdFx0cmV0dXJuIEZlZWRiYWNrU3RhdHVzLkRpc2FibGVkQnlBZG1pbjtcclxuXHR9XHJcblxyXG5cdGlmICghQ29uZmlndXJhdGlvbi5nZXQoKS5kZXRlcm1pbmVBQURDUG9saWN5KFdpbmRvdy5nZXQoKS5PZmZpY2VCcm93c2VyRmVlZGJhY2suaW5pdE9wdGlvbnMuYXV0aGVudGljYXRpb25UeXBlLFxyXG5cdFdpbmRvdy5nZXQoKS5PZmZpY2VCcm93c2VyRmVlZGJhY2suaW5pdE9wdGlvbnMuYWdlR3JvdXApKSB7XHJcblx0XHRyZXR1cm4gRmVlZGJhY2tTdGF0dXMuRGlzYWJsZWRCeUFnZUdyb3VwO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIEZlZWRiYWNrU3RhdHVzLkVuYWJsZWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXNldCB0aGUgaW5hcHBmZWVkYmFjayBtb2R1bGUuIFVzZWQgaW4gdW5pdCB0ZXN0cy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNldCgpIHtcclxuXHRDb21tb25BcHAucmVzZXQoKTtcclxuXHRDb21tb25VSS5yZXNldCgpO1xyXG5cdGluaXRpYWxpemVkID0gZmFsc2U7XHJcblx0b3BlbmVkID0gZmFsc2U7XHJcbn1cclxuXHJcbi8qIE1ha2UgdGhlIEZlZWRiYWNrRGlhbG9nIG1ldGhvZHMgYXZhaWxhYmxlIGdsb2JhbGx5ICovXHJcbldpbmRvdy5zZXRNdWx0aUZlZWRiYWNrKG11bHRpRmVlZGJhY2spO1xyXG5XaW5kb3cuc2V0U2luZ2xlRmVlZGJhY2soc2luZ2xlRmVlZGJhY2spO1xyXG5XaW5kb3cuc2V0RmVlZGJhY2tTdGF0dXMoZ2V0RmVlZGJhY2tTdGF0dXMpO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/App_InAppFeedback.ts\n')},"./scripts/app/Common/UrlUtils.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildQueryParameters", function() { return buildQueryParameters; });\n/*\r\n * UrlUtils.ts\r\n */\r\nfunction buildQueryParameters(keyAndValues, encodeValueAsURI) {\r\n    if (encodeValueAsURI === void 0) { encodeValueAsURI = true; }\r\n    var queryParamsString = "";\r\n    for (var key in keyAndValues || []) {\r\n        if (keyAndValues.hasOwnProperty(key)) {\r\n            var value = keyAndValues[key];\r\n            if (value !== null && value !== undefined && typeof value !== "object") {\r\n                var prefix = !queryParamsString ? "" : "&";\r\n                var encodedValue = encodeValueAsURI ? encodeURIComponent(value) : value;\r\n                var queryParamItem = key + "=" + encodedValue;\r\n                queryParamsString += prefix + queryParamItem;\r\n            }\r\n        }\r\n    }\r\n    return queryParamsString;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Db21tb24vVXJsVXRpbHMudHM/MmQ5OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7O0dBRUc7QUFNSSxTQUFTLG9CQUFvQixDQUFDLFlBQTBCLEVBQUUsZ0JBQWdDO0lBQWhDLDBEQUFnQztJQUNoRyxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUMzQixLQUFLLElBQU0sR0FBRyxJQUFJLFlBQVksSUFBSSxFQUFFLEVBQUU7UUFDckMsSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLElBQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQ3ZFLElBQU0sTUFBTSxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUM3QyxJQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDMUUsSUFBTSxjQUFjLEdBQU0sR0FBRyxTQUFJLFlBQWMsQ0FBQztnQkFDaEQsaUJBQWlCLElBQUksTUFBTSxHQUFHLGNBQWMsQ0FBQzthQUM3QztTQUNEO0tBQ0Q7SUFFRCxPQUFPLGlCQUFpQixDQUFDO0FBQzFCLENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9Db21tb24vVXJsVXRpbHMudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBVcmxVdGlscy50c1xyXG4gKi9cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXJ5UGFyYW1zIHtcclxuXHRba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFF1ZXJ5UGFyYW1ldGVycyhrZXlBbmRWYWx1ZXM6IElRdWVyeVBhcmFtcywgZW5jb2RlVmFsdWVBc1VSSTogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmcge1xyXG5cdGxldCBxdWVyeVBhcmFtc1N0cmluZyA9IFwiXCI7XHJcblx0Zm9yIChjb25zdCBrZXkgaW4ga2V5QW5kVmFsdWVzIHx8IFtdKSB7XHJcblx0XHRpZiAoa2V5QW5kVmFsdWVzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWUgPSBrZXlBbmRWYWx1ZXNba2V5XTtcclxuXHRcdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XHJcblx0XHRcdFx0Y29uc3QgcHJlZml4ID0gIXF1ZXJ5UGFyYW1zU3RyaW5nID8gXCJcIiA6IFwiJlwiO1xyXG5cdFx0XHRcdGNvbnN0IGVuY29kZWRWYWx1ZSA9IGVuY29kZVZhbHVlQXNVUkkgPyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpIDogdmFsdWU7XHJcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbUl0ZW0gPSBgJHtrZXl9PSR7ZW5jb2RlZFZhbHVlfWA7XHJcblx0XHRcdFx0cXVlcnlQYXJhbXNTdHJpbmcgKz0gcHJlZml4ICsgcXVlcnlQYXJhbUl0ZW07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBxdWVyeVBhcmFtc1N0cmluZztcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Common/UrlUtils.ts\n')},"./scripts/app/CommonApp.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initialize", function() { return initialize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reset", function() { return reset; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFeedbackSurveyEnabledByAADC", function() { return isFeedbackSurveyEnabledByAADC; });\n/* harmony import */ var _Polyfills_Promise__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Polyfills/Promise */ "./scripts/app/Polyfills/Promise.ts");\n/* harmony import */ var _Version__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Version */ "./scripts/app/Version.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _Window_Window__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Window/Window */ "./scripts/app/Window/Window.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/**\r\n * CommonApp.ts\r\n *\r\n * Common logic for entrypoints.\r\n */\r\n\r\n\r\n\r\n\r\n\r\nvar APP_NAME = "OfficeFeedbackSDK";\r\n/**\r\n * Has the SDK been initialized\r\n */\r\nvar initialized = false;\r\n/**\r\n * Has the SDK allow AADC\r\n */\r\nvar commonPolicyAllowAADC = false;\r\n/**\r\n * Initialize\r\n */\r\nfunction initialize() {\r\n    if (initialized) {\r\n        return;\r\n    }\r\n    if (!_Window_Window__WEBPACK_IMPORTED_MODULE_3__["get"]().OfficeBrowserFeedback.initOptions) {\r\n        throw new Error("Window.OfficeBrowserFeedback.initOptions not set");\r\n    }\r\n    _Window_Window__WEBPACK_IMPORTED_MODULE_3__["get"]().OfficeBrowserFeedback.sdkVersion = _Version__WEBPACK_IMPORTED_MODULE_1__["default"];\r\n    _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().setCommonInitOptions(_Window_Window__WEBPACK_IMPORTED_MODULE_3__["get"]().OfficeBrowserFeedback.initOptions);\r\n    commonPolicyAllowAADC = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().isFeedbackSurveyEnabledByAADC();\r\n    _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["initialize"](_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().getCommonInitOptions(), APP_NAME, _Version__WEBPACK_IMPORTED_MODULE_1__["default"], _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().getSdkSessionId(), _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().getEventSampling());\r\n    initialized = true;\r\n    if (!commonPolicyAllowAADC) {\r\n        _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].FEEDBACK_SURVEYSDISABLED_AADC, 1 /* Critical */, {\r\n            Data: JSON.stringify({\r\n                ageGroup: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().getCommonInitOptions().ageGroup,\r\n                authenticationType: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().getCommonInitOptions().authenticationType,\r\n            }),\r\n        });\r\n    }\r\n}\r\n/**\r\n * Reset the module. Used in unit tests.\r\n */\r\nfunction reset() {\r\n    initialized = false;\r\n}\r\n/**\r\n * Return Flag to determine whether Feedback and Survey is enabled by AADC.\r\n * Return true if Feedback and Survey is enabled.\r\n * Otherwise, return false.\r\n */\r\nfunction isFeedbackSurveyEnabledByAADC() {\r\n    return commonPolicyAllowAADC;\r\n}\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_3__["setIsFeedbackSurveyEnabledByAADC"](isFeedbackSurveyEnabledByAADC);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Db21tb25BcHAudHM/MWE5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRTBCO0FBRUc7QUFDK0I7QUFDckI7QUFDRztBQUU3QyxJQUFNLFFBQVEsR0FBVyxtQkFBbUIsQ0FBQztBQUU3Qzs7R0FFRztBQUNILElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztBQUVqQzs7R0FFRztBQUNILElBQUkscUJBQXFCLEdBQVksS0FBSyxDQUFDO0FBRTNDOztHQUVHO0FBQ0ksU0FBUyxVQUFVO0lBQ3pCLElBQUksV0FBVyxFQUFFO1FBQ2hCLE9BQU87S0FDUDtJQUVELElBQUksQ0FBQyxrREFBVSxFQUFFLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFO1FBQ3BELE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztLQUNwRTtJQUVELGtEQUFVLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEdBQUcsZ0RBQU8sQ0FBQztJQUN4RCxnRUFBaUIsRUFBRSxDQUFDLG9CQUFvQixDQUFDLGtEQUFVLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6RixxQkFBcUIsR0FBRyxnRUFBaUIsRUFBRSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFFNUUsMkRBQWtCLENBQ2pCLGdFQUFpQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsRUFDMUMsUUFBUSxFQUNSLGdEQUFPLEVBQ1AsZ0VBQWlCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsRUFDckMsZ0VBQWlCLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUN0QyxDQUFDO0lBRUYsV0FBVyxHQUFHLElBQUksQ0FBQztJQUVuQixJQUFJLENBQUMscUJBQXFCLEVBQUU7UUFDM0IsMERBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMseURBQWdCLENBQUMsNkJBQTZCLG9CQUUxRTtZQUNDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNwQixRQUFRLEVBQUUsZ0VBQWlCLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVE7Z0JBQzdELGtCQUFrQixFQUFFLGdFQUFpQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxrQkFBa0I7YUFDakYsQ0FBQztTQUNGLENBQUMsQ0FBQztLQUNKO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0ksU0FBUyxLQUFLO0lBQ3BCLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxTQUFTLDZCQUE2QjtJQUM1QyxPQUFPLHFCQUFxQixDQUFDO0FBQzlCLENBQUM7QUFFRCwrRUFBdUMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvQ29tbW9uQXBwLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbW1vbkFwcC50c1xyXG4gKlxyXG4gKiBDb21tb24gbG9naWMgZm9yIGVudHJ5cG9pbnRzLlxyXG4gKi9cclxuXHJcbmltcG9ydCBcIi4vUG9seWZpbGxzL1Byb21pc2VcIjtcclxuXHJcbmltcG9ydCBWZXJzaW9uIGZyb20gXCIuL1ZlcnNpb25cIjtcclxuaW1wb3J0ICogYXMgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0ICogYXMgV2luZG93IGZyb20gXCIuL1dpbmRvdy9XaW5kb3dcIjtcclxuaW1wb3J0ICogYXMgTG9nZ2luZyBmcm9tIFwiLi9Mb2dnaW5nL0xvZ2dpbmdcIjtcclxuXHJcbmNvbnN0IEFQUF9OQU1FOiBzdHJpbmcgPSBcIk9mZmljZUZlZWRiYWNrU0RLXCI7XHJcblxyXG4vKipcclxuICogSGFzIHRoZSBTREsgYmVlbiBpbml0aWFsaXplZFxyXG4gKi9cclxubGV0IGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4vKipcclxuICogSGFzIHRoZSBTREsgYWxsb3cgQUFEQ1xyXG4gKi9cclxubGV0IGNvbW1vblBvbGljeUFsbG93QUFEQzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuLyoqXHJcbiAqIEluaXRpYWxpemVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplKCk6IHZvaWQge1xyXG5cdGlmIChpbml0aWFsaXplZCkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0aWYgKCFXaW5kb3cuZ2V0KCkuT2ZmaWNlQnJvd3NlckZlZWRiYWNrLmluaXRPcHRpb25zKSB7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJXaW5kb3cuT2ZmaWNlQnJvd3NlckZlZWRiYWNrLmluaXRPcHRpb25zIG5vdCBzZXRcIik7XHJcblx0fVxyXG5cclxuXHRXaW5kb3cuZ2V0KCkuT2ZmaWNlQnJvd3NlckZlZWRiYWNrLnNka1ZlcnNpb24gPSBWZXJzaW9uO1xyXG5cdENvbmZpZ3VyYXRpb24uZ2V0KCkuc2V0Q29tbW9uSW5pdE9wdGlvbnMoV2luZG93LmdldCgpLk9mZmljZUJyb3dzZXJGZWVkYmFjay5pbml0T3B0aW9ucyk7XHJcblx0Y29tbW9uUG9saWN5QWxsb3dBQURDID0gQ29uZmlndXJhdGlvbi5nZXQoKS5pc0ZlZWRiYWNrU3VydmV5RW5hYmxlZEJ5QUFEQygpO1xyXG5cclxuXHRMb2dnaW5nLmluaXRpYWxpemUoXHJcblx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCksXHJcblx0XHRBUFBfTkFNRSxcclxuXHRcdFZlcnNpb24sXHJcblx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldFNka1Nlc3Npb25JZCgpLFxyXG5cdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRFdmVudFNhbXBsaW5nKClcclxuXHQpO1xyXG5cclxuXHRpbml0aWFsaXplZCA9IHRydWU7XHJcblxyXG5cdGlmICghY29tbW9uUG9saWN5QWxsb3dBQURDKSB7XHJcblx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KExvZ2dpbmcuRXZlbnRJZHMuRkVFREJBQ0tfU1VSVkVZU0RJU0FCTEVEX0FBREMsXHJcblx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuQ3JpdGljYWwsXHJcblx0XHRcdHtcclxuXHRcdFx0XHREYXRhOiBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0XHRhZ2VHcm91cDogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLmFnZUdyb3VwLFxyXG5cdFx0XHRcdFx0YXV0aGVudGljYXRpb25UeXBlOiBDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkuYXV0aGVudGljYXRpb25UeXBlLFxyXG5cdFx0XHRcdH0pLFxyXG5cdFx0XHR9KTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXNldCB0aGUgbW9kdWxlLiBVc2VkIGluIHVuaXQgdGVzdHMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVzZXQoKSB7XHJcblx0aW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiBGbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIEZlZWRiYWNrIGFuZCBTdXJ2ZXkgaXMgZW5hYmxlZCBieSBBQURDLlxyXG4gKiBSZXR1cm4gdHJ1ZSBpZiBGZWVkYmFjayBhbmQgU3VydmV5IGlzIGVuYWJsZWQuXHJcbiAqIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNlLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRmVlZGJhY2tTdXJ2ZXlFbmFibGVkQnlBQURDKCk6IGJvb2xlYW4ge1xyXG5cdHJldHVybiBjb21tb25Qb2xpY3lBbGxvd0FBREM7XHJcbn1cclxuXHJcbldpbmRvdy5zZXRJc0ZlZWRiYWNrU3VydmV5RW5hYmxlZEJ5QUFEQyhpc0ZlZWRiYWNrU3VydmV5RW5hYmxlZEJ5QUFEQyk7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/CommonApp.ts\n')},"./scripts/app/CommonFloodgate.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initialize", function() { return initialize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setInitialized", function() { return setInitialized; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getInitialized", function() { return getInitialized; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setEngineStartPromise", function() { return setEngineStartPromise; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEngineStartPromise", function() { return getEngineStartPromise; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setStringProvider", function() { return setStringProvider; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startInternal", function() { return startInternal; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "start", function() { return start; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stop", function() { return stop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEngine", function() { return getEngine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetEngine", function() { return resetEngine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reset", function() { return reset; });\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _Window_Window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Window/Window */ "./scripts/app/Window/Window.ts");\n/* harmony import */ var _FloodgateCore_AdaptiveSurveyLauncherFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FloodgateCore/AdaptiveSurveyLauncherFactory */ "./scripts/app/FloodgateCore/AdaptiveSurveyLauncherFactory.ts");\n/* harmony import */ var _FloodgateCore_TransporterFactory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./FloodgateCore/TransporterFactory */ "./scripts/app/FloodgateCore/TransporterFactory.ts");\n/* harmony import */ var _FloodgateCore_FloodgateEnvironmentProvider__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FloodgateCore/FloodgateEnvironmentProvider */ "./scripts/app/FloodgateCore/FloodgateEnvironmentProvider.ts");\n/* harmony import */ var _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FloodgateCore/FloodgateStorageProvider */ "./scripts/app/FloodgateCore/FloodgateStorageProvider.ts");\n/* harmony import */ var _FloodgateCore_FloodgateStringProvider__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./FloodgateCore/FloodgateStringProvider */ "./scripts/app/FloodgateCore/FloodgateStringProvider.ts");\n/* harmony import */ var _TargetedMessaging_TargetedMessagingCampaignDefinitionProvider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./TargetedMessaging/TargetedMessagingCampaignDefinitionProvider */ "./scripts/app/TargetedMessaging/TargetedMessagingCampaignDefinitionProvider.ts");\n/* harmony import */ var _TargetedMessaging_UserFactsProvider__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./TargetedMessaging/UserFactsProvider */ "./scripts/app/TargetedMessaging/UserFactsProvider.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore */ "../FloodgateCore/dist/index.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Campaign_CampaignDefinitionProvider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Campaign/CampaignDefinitionProvider */ "../FloodgateCore/dist/src/Campaign/CampaignDefinitionProvider.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Campaign_CampaignDefinitionProvider__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Campaign_CampaignDefinitionProvider__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Constants__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Constants */ "../FloodgateCore/dist/src/Constants.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Constants__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Constants__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./Configuration/DynamicConfiguration */ "./scripts/app/Configuration/DynamicConfiguration.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Governor__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Governor */ "../FloodgateCore/dist/src/Governor.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Governor__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Governor__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/GovernedChannel */ "../FloodgateCore/dist/src/GovernedChannel.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_SurveyActivityListener__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/SurveyActivityListener */ "../FloodgateCore/dist/src/SurveyActivityListener.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_SurveyActivityListener__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_SurveyActivityListener__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var _GovernanceService_GovernanceServiceClient__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./GovernanceService/GovernanceServiceClient */ "./scripts/app/GovernanceService/GovernanceServiceClient.ts");\n/* harmony import */ var _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./Personalizer/PersonalizerClient */ "./scripts/app/Personalizer/PersonalizerClient.ts");\n/**\r\n * CommonFloodgate.ts\r\n *\r\n * Common functionalities shared by App_Floodgate and App_Floodgate_Bare modules.\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Has floodgate been initialized\r\n */\r\nvar initialized = false;\r\nvar startCount = 0;\r\nvar engine;\r\nvar engineStartPromise = null;\r\nvar engineTmsProvider = null;\r\nvar userFactsProvider = null;\r\nvar stringProvider;\r\nfunction initialize() {\r\n    if (!_FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_5__["default"].isStorageAvailable()) {\r\n        throw new Error("window.localStorage is not available.");\r\n    }\r\n    _Window_Window__WEBPACK_IMPORTED_MODULE_1__["get"]().OfficeBrowserFeedback.floodgate = _Window_Window__WEBPACK_IMPORTED_MODULE_1__["get"]().OfficeBrowserFeedback.floodgate || {};\r\n    var floodgateInitOptions = _Window_Window__WEBPACK_IMPORTED_MODULE_1__["get"]().OfficeBrowserFeedback.floodgate.initOptions;\r\n    floodgateInitOptions = floodgateInitOptions || {};\r\n    // Validate and copy campaign definitions to local storage\r\n    if (floodgateInitOptions.campaignDefinitions !== undefined) {\r\n        var filteredResult = Object(_ms_ofb_officefloodgatecore_dist_src_Campaign_CampaignDefinitionProvider__WEBPACK_IMPORTED_MODULE_10__["FilterValidCampaignDefinitions"])(floodgateInitOptions.campaignDefinitions);\r\n        if (filteredResult.error) {\r\n            throw new Error("floodgate.initOptions.campaignDefinitions error: " + filteredResult.error);\r\n        }\r\n        (new _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_5__["default"]()).write(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_11__["IFloodgateStorageProvider"].FileType.CampaignDefinitions, JSON.stringify(floodgateInitOptions.campaignDefinitions));\r\n    }\r\n    var configuration = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__["get"]();\r\n    configuration.setFloodgateInitOptions(floodgateInitOptions);\r\n    _ms_ofb_officefloodgatecore_dist_src_SurveyActivityListener__WEBPACK_IMPORTED_MODULE_16___default.a.resetSessionActivity();\r\n    _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_18__["get"]().setup(configuration);\r\n    _GovernanceService_GovernanceServiceClient__WEBPACK_IMPORTED_MODULE_17__["get"]().setup(configuration);\r\n    initialized = true;\r\n    if (!configuration.getFloodgateInitOptions().surveyEnabled) {\r\n        var telemetryLogger = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_9__["FloodgateEngine"].getTelemetryLogger();\r\n        if (telemetryLogger) {\r\n            telemetryLogger.log_Event(_ms_ofb_officefloodgatecore_dist_src_Constants__WEBPACK_IMPORTED_MODULE_12__["TelemetryEvent"].Floodgate.Start.SurveysDisabled, { Count: startCount, Message: "Floodgate initialized with surveys disabled (surveyEnabled is false)" });\r\n        }\r\n    }\r\n}\r\nfunction setInitialized(initValue) {\r\n    initialized = initValue;\r\n}\r\nfunction getInitialized() {\r\n    return initialized;\r\n}\r\nfunction setEngineStartPromise(startPromise) {\r\n    engineStartPromise = startPromise;\r\n}\r\nfunction getEngineStartPromise() {\r\n    return engineStartPromise;\r\n}\r\nfunction setStringProvider(provider) {\r\n    stringProvider = provider;\r\n}\r\n/**\r\n * To support the multi-window scenario on web we need to initialize the engine on each resume.\r\n * Hence this separate method which does make() and start() together.\r\n */\r\nfunction startInternal(loadSynchronously, customEngine) {\r\n    if (customEngine === void 0) { customEngine = null; }\r\n    if (engineStartPromise) {\r\n        return engineStartPromise;\r\n    }\r\n    startCount++;\r\n    var startPromise = new Promise(function (resolve, reject) {\r\n        var rejectAndLogError = function (errorMessage, error) {\r\n            var telemetryLogger = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_9__["FloodgateEngine"].getTelemetryLogger();\r\n            if (telemetryLogger) {\r\n                telemetryLogger.log_Event(_ms_ofb_officefloodgatecore_dist_src_Constants__WEBPACK_IMPORTED_MODULE_12__["TelemetryEvent"].Floodgate.Start.Failed, { Count: startCount, ErrorMessage: errorMessage, ErrorDetails: error && error.stack });\r\n            }\r\n            reject(errorMessage);\r\n        };\r\n        try {\r\n            var commonInitOptions = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__["get"]().getCommonInitOptions();\r\n            if (!commonInitOptions) {\r\n                rejectAndLogError("Invalid floodgate common init options, state: " + initialized);\r\n                return;\r\n            }\r\n            var floodgateInitOptions = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__["get"]().getFloodgateInitOptions();\r\n            if (!floodgateInitOptions) {\r\n                var telemetryLogger = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_9__["FloodgateEngine"].getTelemetryLogger();\r\n                if (telemetryLogger) {\r\n                    telemetryLogger.log_Event(_ms_ofb_officefloodgatecore_dist_src_Constants__WEBPACK_IMPORTED_MODULE_12__["TelemetryEvent"].Floodgate.Start.Warning, { Count: startCount, ErrorMessage: "Invalid floodgate init options, state: " + initialized });\r\n                }\r\n                _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__["get"]().setFloodgateInitOptions({});\r\n                floodgateInitOptions = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__["get"]().getFloodgateInitOptions();\r\n            }\r\n            if (!customEngine && !engineTmsProvider) {\r\n                // AssetsProvider wraps auth callbacks which should not run every time we start()\r\n                var authTokenCallback = floodgateInitOptions && floodgateInitOptions.authTokenCallback;\r\n                if (authTokenCallback) {\r\n                    engineTmsProvider = new _TargetedMessaging_TargetedMessagingCampaignDefinitionProvider__WEBPACK_IMPORTED_MODULE_7__["TargetedMessagingCampaignDefinitionProvider"]();\r\n                    userFactsProvider = new _TargetedMessaging_UserFactsProvider__WEBPACK_IMPORTED_MODULE_8__["UserFactsProvider"]();\r\n                }\r\n            }\r\n            var currentTeachingCooldown = _ms_ofb_officefloodgatecore_dist_src_Governor__WEBPACK_IMPORTED_MODULE_14__["Governor"].GetChannelCoolDown(_ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_15__["GovernedChannelType"].TeachingMessage);\r\n            var teachingCooldown = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_13__["getDynamicSetting"])("TeachingMessageCooldown" /* teachingMessageCooldown */, currentTeachingCooldown);\r\n            _ms_ofb_officefloodgatecore_dist_src_Governor__WEBPACK_IMPORTED_MODULE_14__["Governor"].SetDefaultChannelCoolDown(_ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_15__["GovernedChannelType"].TeachingMessage, teachingCooldown);\r\n            engine = customEngine || _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_9__["FloodgateEngine"].make(commonInitOptions.build || "", _FloodgateCore_AdaptiveSurveyLauncherFactory__WEBPACK_IMPORTED_MODULE_2__["default"].make(), floodgateInitOptions.onSurveyActivatedCallback, new _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_5__["default"](), floodgateInitOptions.settingStorageCallback, stringProvider ? stringProvider : new _FloodgateCore_FloodgateStringProvider__WEBPACK_IMPORTED_MODULE_6__["default"](), new _FloodgateCore_FloodgateEnvironmentProvider__WEBPACK_IMPORTED_MODULE_4__["default"](), new _FloodgateCore_TransporterFactory__WEBPACK_IMPORTED_MODULE_3__["default"](), [engineTmsProvider], userFactsProvider, _GovernanceService_GovernanceServiceClient__WEBPACK_IMPORTED_MODULE_17__["get"](), floodgateInitOptions.isPriorityEnabled, engine && engine.getSurveyClient());\r\n            if (!engine) {\r\n                setEngineStartPromise(null);\r\n                rejectAndLogError("Failed to create floodgate engine");\r\n                return;\r\n            }\r\n            // start subsequent invocations in sync mode\r\n            var shouldStartEngineInSync = loadSynchronously || startCount > 1;\r\n            if (shouldStartEngineInSync) {\r\n                engine.start();\r\n                resolve();\r\n            }\r\n            else {\r\n                var enginePromise = engine.startAsync();\r\n                if (!enginePromise) {\r\n                    // ideally this should never happen\r\n                    setEngineStartPromise(null);\r\n                    rejectAndLogError("Failed to get floodgate engine");\r\n                    return;\r\n                }\r\n                enginePromise.then(function onFulfilled() {\r\n                    resolve();\r\n                }).catch(function onRejected(startError) {\r\n                    setEngineStartPromise(null);\r\n                    rejectAndLogError("Failed to start floodgate engine", startError);\r\n                });\r\n            }\r\n        }\r\n        catch (e) {\r\n            setEngineStartPromise(null);\r\n            rejectAndLogError("Failed to load floodgate engine: " + (e && e.toString()), e);\r\n        }\r\n    });\r\n    setEngineStartPromise(startPromise);\r\n    // reset on error\r\n    startPromise.catch(function (error) {\r\n        setEngineStartPromise(null);\r\n    });\r\n    return startPromise;\r\n}\r\nfunction start(loadSynchronously) {\r\n    if (loadSynchronously === void 0) { loadSynchronously = false; }\r\n    return startInternal(loadSynchronously);\r\n}\r\n/**\r\n * A proxy for the engine.stop() method for consistency with the start() method.\r\n */\r\nfunction stop() {\r\n    if (engine) {\r\n        engine.stop();\r\n    }\r\n    setEngineStartPromise(null);\r\n}\r\n/**\r\n * Get the engine object\r\n * @returns the engine object\r\n */\r\nfunction getEngine() {\r\n    return engine;\r\n}\r\n/**\r\n * Reset the floodgate engine state. Used in unit tests.\r\n */\r\nfunction resetEngine() {\r\n    startCount = 0;\r\n    engineStartPromise = null;\r\n    engine = null;\r\n    engineTmsProvider = null;\r\n    userFactsProvider = null;\r\n}\r\n/**\r\n * Reset the floodgate module. Used in unit tests.\r\n */\r\nfunction reset() {\r\n    initialized = false;\r\n    resetEngine();\r\n}\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_1__["setFloodgateGetEngine"](getEngine);\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_1__["setFloodgateStart"](start);\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_1__["setFloodgateStop"](stop);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Db21tb25GbG9vZGdhdGUudHM/Mjc1ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRTREO0FBQ3JCO0FBQ2dEO0FBQ3RCO0FBQ29CO0FBQ1I7QUFDRjtBQUVYO0FBQ087QUFHWjtBQUVjO0FBQ2E7QUFDVDtBQUVLO0FBRVo7QUFDa0I7QUFDTTtBQUNWO0FBQ2Y7QUFFeEU7O0dBRUc7QUFDSCxJQUFJLFdBQVcsR0FBWSxLQUFLLENBQUM7QUFDakMsSUFBSSxVQUFVLEdBQVcsQ0FBQyxDQUFDO0FBRTNCLElBQUksTUFBdUIsQ0FBQztBQUM1QixJQUFJLGtCQUFrQixHQUFpQixJQUFJLENBQUM7QUFDNUMsSUFBSSxpQkFBaUIsR0FBZ0QsSUFBSSxDQUFDO0FBQzFFLElBQUksaUJBQWlCLEdBQXNCLElBQUksQ0FBQztBQUNoRCxJQUFJLGNBQTRDLENBQUM7QUFFMUMsU0FBUyxVQUFVO0lBQ3pCLElBQUksQ0FBQywrRUFBd0IsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1FBQ25ELE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztLQUN6RDtJQUVELGtEQUFVLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEdBQUcsa0RBQVUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsSUFBSSxFQUFTLENBQUM7SUFFekcsSUFBSSxvQkFBb0IsR0FBRyxrREFBVSxFQUFFLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztJ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O0lBQ2QsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUMxQixDQUFDO0FBRUQ7O0dBRUc7QUFDSSxTQUFTLEtBQUs7SUFDcEIsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUNwQixXQUFXLEVBQUUsQ0FBQztBQUNmLENBQUM7QUFFRCxvRUFBNEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4QyxnRUFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQywrREFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0NvbW1vbkZsb29kZ2F0ZS50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb21tb25GbG9vZGdhdGUudHNcclxuICpcclxuICogQ29tbW9uIGZ1bmN0aW9uYWxpdGllcyBzaGFyZWQgYnkgQXBwX0Zsb29kZ2F0ZSBhbmQgQXBwX0Zsb29kZ2F0ZV9CYXJlIG1vZHVsZXMuXHJcbiAqL1xyXG5cclxuaW1wb3J0ICogYXMgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0ICogYXMgV2luZG93IGZyb20gXCIuL1dpbmRvdy9XaW5kb3dcIjtcclxuaW1wb3J0IEFkYXB0aXZlU3VydmV5TGF1bmNoZXJGYWN0b3J5IGZyb20gXCIuL0Zsb29kZ2F0ZUNvcmUvQWRhcHRpdmVTdXJ2ZXlMYXVuY2hlckZhY3RvcnlcIjtcclxuaW1wb3J0IFRyYW5zcG9ydGVyRmFjdG9yeSBmcm9tIFwiLi9GbG9vZGdhdGVDb3JlL1RyYW5zcG9ydGVyRmFjdG9yeVwiO1xyXG5pbXBvcnQgRmxvb2RnYXRlRW52aXJvbm1lbnRQcm92aWRlciBmcm9tIFwiLi9GbG9vZGdhdGVDb3JlL0Zsb29kZ2F0ZUVudmlyb25tZW50UHJvdmlkZXJcIjtcclxuaW1wb3J0IEZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlciBmcm9tIFwiLi9GbG9vZGdhdGVDb3JlL0Zsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlclwiO1xyXG5pbXBvcnQgRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIgZnJvbSBcIi4vRmxvb2RnYXRlQ29yZS9GbG9vZGdhdGVTdHJpbmdQcm92aWRlclwiO1xyXG5pbXBvcnQgeyBUYXJnZXRlZE1lc3NhZ2luZ0NhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyIH0gZnJvbVxyXG5cdFwiLi9UYXJnZXRlZE1lc3NhZ2luZy9UYXJnZXRlZE1lc3NhZ2luZ0NhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyXCI7XHJcbmltcG9ydCB7IFVzZXJGYWN0c1Byb3ZpZGVyIH0gZnJvbSBcIi4vVGFyZ2V0ZWRNZXNzYWdpbmcvVXNlckZhY3RzUHJvdmlkZXJcIjtcclxuXHJcbmltcG9ydCAqIGFzIEFwaSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9BcGlcIjtcclxuaW1wb3J0IHsgRmxvb2RnYXRlRW5naW5lIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZVwiO1xyXG5pbXBvcnQgeyBGaWx0ZXJWYWxpZENhbXBhaWduRGVmaW5pdGlvbnMgfSBmcm9tXHJcblx0XCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvQ2FtcGFpZ24vQ2FtcGFpZ25EZWZpbml0aW9uUHJvdmlkZXJcIjtcclxuaW1wb3J0IHsgSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlciB9IGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvQXBpL0FwaVwiO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlFdmVudCB9IGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvQ29uc3RhbnRzXCI7XHJcblxyXG5pbXBvcnQgeyBnZXREeW5hbWljU2V0dGluZywgU2V0dGluZ0tleSB9IGZyb20gXCIuL0NvbmZpZ3VyYXRpb24vRHluYW1pY0NvbmZpZ3VyYXRpb25cIjtcclxuXHJcbmltcG9ydCB7IEdvdmVybm9yIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9Hb3Zlcm5vclwiO1xyXG5pbXBvcnQgeyBHb3Zlcm5lZENoYW5uZWxUeXBlIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9Hb3Zlcm5lZENoYW5uZWxcIjtcclxuaW1wb3J0IFN1cnZleUFjdGl2aXR5TGlzdGVuZXIgZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9TdXJ2ZXlBY3Rpdml0eUxpc3RlbmVyXCI7XHJcbmltcG9ydCAqIGFzIEdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50IGZyb20gXCIuL0dvdmVybmFuY2VTZXJ2aWNlL0dvdmVybmFuY2VTZXJ2aWNlQ2xpZW50XCI7XHJcbmltcG9ydCAqIGFzIFBlcnNvbmFsaXplckNsaWVudCBmcm9tIFwiLi9QZXJzb25hbGl6ZXIvUGVyc29uYWxpemVyQ2xpZW50XCI7XHJcblxyXG4vKipcclxuICogSGFzIGZsb29kZ2F0ZSBiZWVuIGluaXRpYWxpemVkXHJcbiAqL1xyXG5sZXQgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxubGV0IHN0YXJ0Q291bnQ6IG51bWJlciA9IDA7XHJcblxyXG5sZXQgZW5naW5lOiBGbG9vZGdhdGVFbmdpbmU7XHJcbmxldCBlbmdpbmVTdGFydFByb21pc2U6IFByb21pc2U8YW55PiA9IG51bGw7XHJcbmxldCBlbmdpbmVUbXNQcm92aWRlcjogVGFyZ2V0ZWRNZXNzYWdpbmdDYW1wYWlnbkRlZmluaXRpb25Qcm92aWRlciA9IG51bGw7XHJcbmxldCB1c2VyRmFjdHNQcm92aWRlcjogVXNlckZhY3RzUHJvdmlkZXIgPSBudWxsO1xyXG5sZXQgc3RyaW5nUHJvdmlkZXI6IEFwaS5JRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpOiB2b2lkIHtcclxuXHRpZiAoIUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlci5pc1N0b3JhZ2VBdmFpbGFibGUoKSkge1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKFwid2luZG93LmxvY2FsU3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlLlwiKTtcclxuXHR9XHJcblxyXG5cdFdpbmRvdy5nZXQoKS5PZmZpY2VCcm93c2VyRmVlZGJhY2suZmxvb2RnYXRlID0gV2luZG93LmdldCgpLk9mZmljZUJyb3dzZXJGZWVkYmFjay5mbG9vZGdhdGUgfHwge30gYXMgYW55O1xyXG5cclxuXHRsZXQgZmxvb2RnYXRlSW5pdE9wdGlvbnMgPSBXaW5kb3cuZ2V0KCkuT2ZmaWNlQnJvd3NlckZlZWRiYWNrLmZsb29kZ2F0ZS5pbml0T3B0aW9ucztcclxuXHRmbG9vZGdhdGVJbml0T3B0aW9ucyA9IGZsb29kZ2F0ZUluaXRPcHRpb25zIHx8IHt9IGFzIGFueTtcclxuXHJcblx0Ly8gVmFsaWRhdGUgYW5kIGNvcHkgY2FtcGFpZ24gZGVmaW5pdGlvbnMgdG8gbG9jYWwgc3RvcmFnZVxyXG5cdGlmIChmbG9vZGdhdGVJbml0T3B0aW9ucy5jYW1wYWlnbkRlZmluaXRpb25zICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdGNvbnN0IGZpbHRlcmVkUmVzdWx0ID0gRmlsdGVyVmFsaWRDYW1wYWlnbkRlZmluaXRpb25zKGZsb29kZ2F0ZUluaXRPcHRpb25zLmNhbXBhaWduRGVmaW5pdGlvbnMpO1xyXG5cclxuXHRcdGlmIChmaWx0ZXJlZFJlc3VsdC5lcnJvcikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJmbG9vZGdhdGUuaW5pdE9wdGlvbnMuY2FtcGFpZ25EZWZpbml0aW9ucyBlcnJvcjogXCIgKyBmaWx0ZXJlZFJlc3VsdC5lcnJvcik7XHJcblx0XHR9XHJcblxyXG5cdFx0KG5ldyBGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIoKSkud3JpdGUoXHJcblx0XHRcdElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIuRmlsZVR5cGUuQ2FtcGFpZ25EZWZpbml0aW9ucyxcclxuXHRcdFx0SlNPTi5zdHJpbmdpZnkoZmxvb2RnYXRlSW5pdE9wdGlvbnMuY2FtcGFpZ25EZWZpbml0aW9ucylcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb25zdCBjb25maWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbi5nZXQoKTtcclxuXHJcblx0Y29uZmlndXJhdGlvbi5zZXRGbG9vZGdhdGVJbml0T3B0aW9ucyhmbG9vZGdhdGVJbml0T3B0aW9ucyk7XHJcblx0U3VydmV5QWN0aXZpdHlMaXN0ZW5lci5yZXNldFNlc3Npb25BY3Rpdml0eSgpO1xyXG5cdFBlcnNvbmFsaXplckNsaWVudC5nZXQoKS5zZXR1cChjb25maWd1cmF0aW9uKTtcclxuXHRHb3Zlcm5hbmNlU2VydmljZUNsaWVudC5nZXQoKS5zZXR1cChjb25maWd1cmF0aW9uKTtcclxuXHRpbml0aWFsaXplZCA9IHRydWU7XHJcblxyXG5cdGlmICghY29uZmlndXJhdGlvbi5nZXRGbG9vZGdhdGVJbml0T3B0aW9ucygpLnN1cnZleUVuYWJsZWQpIHtcclxuXHRcdGNvbnN0IHRlbGVtZXRyeUxvZ2dlciA9IEZsb29kZ2F0ZUVuZ2luZS5nZXRUZWxlbWV0cnlMb2dnZXIoKTtcclxuXHRcdGlmICh0ZWxlbWV0cnlMb2dnZXIpIHtcclxuXHRcdFx0dGVsZW1ldHJ5TG9nZ2VyLmxvZ19FdmVudChUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGUuU3RhcnQuU3VydmV5c0Rpc2FibGVkLFxyXG5cdFx0XHRcdHsgQ291bnQ6IHN0YXJ0Q291bnQsIE1lc3NhZ2U6IFwiRmxvb2RnYXRlIGluaXRpYWxpemVkIHdpdGggc3VydmV5cyBkaXNhYmxlZCAoc3VydmV5RW5hYmxlZCBpcyBmYWxzZSlcIiB9KTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsaXplZChpbml0VmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuXHRpbml0aWFsaXplZCA9IGluaXRWYWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xyXG5cdHJldHVybiBpbml0aWFsaXplZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVuZ2luZVN0YXJ0UHJvbWlzZShzdGFydFByb21pc2U6IFByb21pc2U8YW55Pik6IGFueSB7XHJcblx0ZW5naW5lU3RhcnRQcm9taXNlID0gc3RhcnRQcm9taXNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5naW5lU3RhcnRQcm9taXNlKCk6IFByb21pc2U8YW55PiB7XHJcblx0cmV0dXJuIGVuZ2luZVN0YXJ0UHJvbWlzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFN0cmluZ1Byb3ZpZGVyKHByb3ZpZGVyOiBBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyKTogdm9pZCB7XHJcblx0c3RyaW5nUHJvdmlkZXIgPSBwcm92aWRlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRvIHN1cHBvcnQgdGhlIG11bHRpLXdpbmRvdyBzY2VuYXJpbyBvbiB3ZWIgd2UgbmVlZCB0byBpbml0aWFsaXplIHRoZSBlbmdpbmUgb24gZWFjaCByZXN1bWUuXHJcbiAqIEhlbmNlIHRoaXMgc2VwYXJhdGUgbWV0aG9kIHdoaWNoIGRvZXMgbWFrZSgpIGFuZCBzdGFydCgpIHRvZ2V0aGVyLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0SW50ZXJuYWwobG9hZFN5bmNocm9ub3VzbHk6IGJvb2xlYW4sIGN1c3RvbUVuZ2luZTogRmxvb2RnYXRlRW5naW5lID0gbnVsbCk6IFByb21pc2U8YW55PiB7XHJcblx0aWYgKGVuZ2luZVN0YXJ0UHJvbWlzZSkge1xyXG5cdFx0cmV0dXJuIGVuZ2luZVN0YXJ0UHJvbWlzZTtcclxuXHR9XHJcblxyXG5cdHN0YXJ0Q291bnQrKztcclxuXHRjb25zdCBzdGFydFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRjb25zdCByZWplY3RBbmRMb2dFcnJvciA9IChlcnJvck1lc3NhZ2U6IHN0cmluZywgZXJyb3I/OiBFcnJvcikgPT4ge1xyXG5cdFx0XHRjb25zdCB0ZWxlbWV0cnlMb2dnZXIgPSBGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCk7XHJcblx0XHRcdGlmICh0ZWxlbWV0cnlMb2dnZXIpIHtcclxuXHRcdFx0XHR0ZWxlbWV0cnlMb2dnZXIubG9nX0V2ZW50KFRlbGVtZXRyeUV2ZW50LkZsb29kZ2F0ZS5TdGFydC5GYWlsZWQsXHJcblx0XHRcdFx0XHR7IENvdW50OiBzdGFydENvdW50LCBFcnJvck1lc3NhZ2U6IGVycm9yTWVzc2FnZSwgRXJyb3JEZXRhaWxzOiBlcnJvciAmJiBlcnJvci5zdGFjayB9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmVqZWN0KGVycm9yTWVzc2FnZSk7XHJcblx0XHR9O1xyXG5cclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IGNvbW1vbkluaXRPcHRpb25zID0gQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpO1xyXG5cdFx0XHRpZiAoIWNvbW1vbkluaXRPcHRpb25zKSB7XHJcblx0XHRcdFx0cmVqZWN0QW5kTG9nRXJyb3IoXCJJbnZhbGlkIGZsb29kZ2F0ZSBjb21tb24gaW5pdCBvcHRpb25zLCBzdGF0ZTogXCIgKyBpbml0aWFsaXplZCk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRsZXQgZmxvb2RnYXRlSW5pdE9wdGlvbnMgPSBDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZUluaXRPcHRpb25zKCk7XHJcblx0XHRcdGlmICghZmxvb2RnYXRlSW5pdE9wdGlvbnMpIHtcclxuXHRcdFx0XHRjb25zdCB0ZWxlbWV0cnlMb2dnZXIgPSBGbG9vZGdhdGVFbmdpbmUuZ2V0VGVsZW1ldHJ5TG9nZ2VyKCk7XHJcblx0XHRcdFx0aWYgKHRlbGVtZXRyeUxvZ2dlcikge1xyXG5cdFx0XHRcdFx0dGVsZW1ldHJ5TG9nZ2VyLmxvZ19FdmVudChUZWxlbWV0cnlFdmVudC5GbG9vZGdhdGUuU3RhcnQuV2FybmluZyxcclxuXHRcdFx0XHRcdFx0eyBDb3VudDogc3RhcnRDb3VudCwgRXJyb3JNZXNzYWdlOiBcIkludmFsaWQgZmxvb2RnYXRlIGluaXQgb3B0aW9ucywgc3RhdGU6IFwiICsgaW5pdGlhbGl6ZWQgfSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRDb25maWd1cmF0aW9uLmdldCgpLnNldEZsb29kZ2F0ZUluaXRPcHRpb25zKHt9IGFzIGFueSk7XHJcblx0XHRcdFx0Zmxvb2RnYXRlSW5pdE9wdGlvbnMgPSBDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZUluaXRPcHRpb25zKCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICghY3VzdG9tRW5naW5lICYmICFlbmdpbmVUbXNQcm92aWRlcikge1xyXG5cdFx0XHRcdC8vIEFzc2V0c1Byb3ZpZGVyIHdyYXBzIGF1dGggY2FsbGJhY2tzIHdoaWNoIHNob3VsZCBub3QgcnVuIGV2ZXJ5IHRpbWUgd2Ugc3RhcnQoKVxyXG5cdFx0XHRcdGNvbnN0IGF1dGhUb2tlbkNhbGxiYWNrID0gZmxvb2RnYXRlSW5pdE9wdGlvbnMgJiYgZmxvb2RnYXRlSW5pdE9wdGlvbnMuYXV0aFRva2VuQ2FsbGJhY2s7XHJcblx0XHRcdFx0aWYgKGF1dGhUb2tlbkNhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRlbmdpbmVUbXNQcm92aWRlciA9IG5ldyBUYXJnZXRlZE1lc3NhZ2luZ0NhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyKCk7XHJcblx0XHRcdFx0XHR1c2VyRmFjdHNQcm92aWRlciA9IG5ldyBVc2VyRmFjdHNQcm92aWRlcigpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgY3VycmVudFRlYWNoaW5nQ29vbGRvd24gPSBHb3Zlcm5vci5HZXRDaGFubmVsQ29vbERvd24oR292ZXJuZWRDaGFubmVsVHlwZS5UZWFjaGluZ01lc3NhZ2UpO1xyXG5cdFx0XHRjb25zdCB0ZWFjaGluZ0Nvb2xkb3duID0gZ2V0RHluYW1pY1NldHRpbmcoU2V0dGluZ0tleS50ZWFjaGluZ01lc3NhZ2VDb29sZG93biwgY3VycmVudFRlYWNoaW5nQ29vbGRvd24pO1xyXG5cdFx0XHRHb3Zlcm5vci5TZXREZWZhdWx0Q2hhbm5lbENvb2xEb3duKEdvdmVybmVkQ2hhbm5lbFR5cGUuVGVhY2hpbmdNZXNzYWdlLCB0ZWFjaGluZ0Nvb2xkb3duKTtcclxuXHJcblx0XHRcdGVuZ2luZSA9IGN1c3RvbUVuZ2luZSB8fCBGbG9vZGdhdGVFbmdpbmUubWFrZShcclxuXHRcdFx0XHRjb21tb25Jbml0T3B0aW9ucy5idWlsZCB8fCBcIlwiLFxyXG5cdFx0XHRcdEFkYXB0aXZlU3VydmV5TGF1bmNoZXJGYWN0b3J5Lm1ha2UoKSxcclxuXHRcdFx0XHRmbG9vZGdhdGVJbml0T3B0aW9ucy5vblN1cnZleUFjdGl2YXRlZENhbGxiYWNrLFxyXG5cdFx0XHRcdG5ldyBGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIoKSxcclxuXHRcdFx0XHRmbG9vZGdhdGVJbml0T3B0aW9ucy5zZXR0aW5nU3RvcmFnZUNhbGxiYWNrLFxyXG5cdFx0XHRcdHN0cmluZ1Byb3ZpZGVyID8gc3RyaW5nUHJvdmlkZXIgOiBuZXcgRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIoKSxcclxuXHRcdFx0XHRuZXcgRmxvb2RnYXRlRW52aXJvbm1lbnRQcm92aWRlcigpLFxyXG5cdFx0XHRcdG5ldyBUcmFuc3BvcnRlckZhY3RvcnkoKSxcclxuXHRcdFx0XHRbZW5naW5lVG1zUHJvdmlkZXJdLFxyXG5cdFx0XHRcdHVzZXJGYWN0c1Byb3ZpZGVyLFxyXG5cdFx0XHRcdEdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50LmdldCgpLFxyXG5cdFx0XHRcdGZsb29kZ2F0ZUluaXRPcHRpb25zLmlzUHJpb3JpdHlFbmFibGVkLFxyXG5cdFx0XHRcdGVuZ2luZSAmJiBlbmdpbmUuZ2V0U3VydmV5Q2xpZW50KClcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmICghZW5naW5lKSB7XHJcblx0XHRcdFx0c2V0RW5naW5lU3RhcnRQcm9taXNlKG51bGwpO1xyXG5cdFx0XHRcdHJlamVjdEFuZExvZ0Vycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBmbG9vZGdhdGUgZW5naW5lXCIpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gc3RhcnQgc3Vic2VxdWVudCBpbnZvY2F0aW9ucyBpbiBzeW5jIG1vZGVcclxuXHRcdFx0Y29uc3Qgc2hvdWxkU3RhcnRFbmdpbmVJblN5bmMgPSBsb2FkU3luY2hyb25vdXNseSB8fCBzdGFydENvdW50ID4gMTtcclxuXHRcdFx0aWYgKHNob3VsZFN0YXJ0RW5naW5lSW5TeW5jKSB7XHJcblx0XHRcdFx0ZW5naW5lLnN0YXJ0KCk7XHJcblx0XHRcdFx0cmVzb2x2ZSgpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnN0IGVuZ2luZVByb21pc2UgPSBlbmdpbmUuc3RhcnRBc3luYygpO1xyXG5cdFx0XHRcdGlmICghZW5naW5lUHJvbWlzZSkge1xyXG5cdFx0XHRcdFx0Ly8gaWRlYWxseSB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW5cclxuXHRcdFx0XHRcdHNldEVuZ2luZVN0YXJ0UHJvbWlzZShudWxsKTtcclxuXHRcdFx0XHRcdHJlamVjdEFuZExvZ0Vycm9yKFwiRmFpbGVkIHRvIGdldCBmbG9vZGdhdGUgZW5naW5lXCIpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZW5naW5lUHJvbWlzZS50aGVuKFxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gb25GdWxmaWxsZWQoKSB7XHJcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpLmNhdGNoKFxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gb25SZWplY3RlZChzdGFydEVycm9yOiBFcnJvcikge1xyXG5cdFx0XHRcdFx0XHRzZXRFbmdpbmVTdGFydFByb21pc2UobnVsbCk7XHJcblx0XHRcdFx0XHRcdHJlamVjdEFuZExvZ0Vycm9yKFwiRmFpbGVkIHRvIHN0YXJ0IGZsb29kZ2F0ZSBlbmdpbmVcIiwgc3RhcnRFcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRzZXRFbmdpbmVTdGFydFByb21pc2UobnVsbCk7XHJcblx0XHRcdHJlamVjdEFuZExvZ0Vycm9yKFwiRmFpbGVkIHRvIGxvYWQgZmxvb2RnYXRlIGVuZ2luZTogXCIgKyAoZSAmJiBlLnRvU3RyaW5nKCkpLCBlKTtcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0c2V0RW5naW5lU3RhcnRQcm9taXNlKHN0YXJ0UHJvbWlzZSk7XHJcblxyXG5cdC8vIHJlc2V0IG9uIGVycm9yXHJcblx0c3RhcnRQcm9taXNlLmNhdGNoKChlcnJvcikgPT4ge1xyXG5cdFx0c2V0RW5naW5lU3RhcnRQcm9taXNlKG51bGwpO1xyXG5cdH0pO1xyXG5cclxuXHRyZXR1cm4gc3RhcnRQcm9taXNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RhcnQobG9hZFN5bmNocm9ub3VzbHk6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8YW55PiB7XHJcblx0cmV0dXJuIHN0YXJ0SW50ZXJuYWwobG9hZFN5bmNocm9ub3VzbHkpO1xyXG59XHJcblxyXG4vKipcclxuICogQSBwcm94eSBmb3IgdGhlIGVuZ2luZS5zdG9wKCkgbWV0aG9kIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBzdGFydCgpIG1ldGhvZC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzdG9wKCkge1xyXG5cdGlmIChlbmdpbmUpIHtcclxuXHRcdGVuZ2luZS5zdG9wKCk7XHJcblx0fVxyXG5cclxuXHRzZXRFbmdpbmVTdGFydFByb21pc2UobnVsbCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIGVuZ2luZSBvYmplY3RcclxuICogQHJldHVybnMgdGhlIGVuZ2luZSBvYmplY3RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbmdpbmUoKTogRmxvb2RnYXRlRW5naW5lIHtcclxuXHRyZXR1cm4gZW5naW5lO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzZXQgdGhlIGZsb29kZ2F0ZSBlbmdpbmUgc3RhdGUuIFVzZWQgaW4gdW5pdCB0ZXN0cy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNldEVuZ2luZSgpIHtcclxuXHRzdGFydENvdW50ID0gMDtcclxuXHRlbmdpbmVTdGFydFByb21pc2UgPSBudWxsO1xyXG5cdGVuZ2luZSA9IG51bGw7XHJcblx0ZW5naW5lVG1zUHJvdmlkZXIgPSBudWxsO1xyXG5cdHVzZXJGYWN0c1Byb3ZpZGVyID0gbnVsbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlc2V0IHRoZSBmbG9vZGdhdGUgbW9kdWxlLiBVc2VkIGluIHVuaXQgdGVzdHMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVzZXQoKSB7XHJcblx0aW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHRyZXNldEVuZ2luZSgpO1xyXG59XHJcblxyXG5XaW5kb3cuc2V0Rmxvb2RnYXRlR2V0RW5naW5lKGdldEVuZ2luZSk7XHJcbldpbmRvdy5zZXRGbG9vZGdhdGVTdGFydChzdGFydCk7XHJcbldpbmRvdy5zZXRGbG9vZGdhdGVTdG9wKHN0b3ApO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/CommonFloodgate.ts\n')},"./scripts/app/CommonUI.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initialize", function() { return initialize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reset", function() { return reset; });\n/* harmony import */ var _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UIStrings/UIStrings */ "./scripts/app/UIStrings/UIStrings.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _Window_Window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Window/Window */ "./scripts/app/Window/Window.ts");\n/* harmony import */ var _Theme__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Theme */ "./scripts/app/Theme.ts");\n/* harmony import */ var _Screenshot__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Screenshot */ "./scripts/app/Screenshot.ts");\n/* harmony import */ var _Window_DomUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Window/DomUtils */ "./scripts/app/Window/DomUtils.ts");\n/* harmony import */ var _UI_UiConstants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./UI/UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Utils */ "./scripts/app/Utils.ts");\n/**\r\n * CommonUI.ts\r\n *\r\n * Common logic for UI.\r\n */\r\nvar html2canvas = __webpack_require__(/*! @karankeswani99/html2canvas */ "./node_modules/@karankeswani99/html2canvas/dist/html2canvas.js");\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Has the SDK been initialized\r\n */\r\nvar initialized = false;\r\n/**\r\n * Set ui Strings.\r\n * @param data the ui strings\r\n */\r\nfunction setUIStrings(data) {\r\n    _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["setUIStrings"](data);\r\n}\r\n;\r\n/**\r\n * Initialize\r\n */\r\nfunction initialize() {\r\n    return new Promise(function (resolve, reject) {\r\n        if (!initialized) {\r\n            var initOptionsCommon = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions();\r\n            if (!initOptionsCommon) {\r\n                reject("initOptionsCommon is null");\r\n            }\r\n            // Check if custom CSS is being passed.\r\n            // tslint:disable-next-line: no-bitwise\r\n            if ((initOptionsCommon.customResourcesSetExternally & _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["CustomResources"].Css) === _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["CustomResources"].Css) {\r\n                var selector = "#" + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].TPromptTitle;\r\n                if (!Object(_Utils__WEBPACK_IMPORTED_MODULE_7__["checkCssSelectorToBeSet"])(selector)) {\r\n                    reject("Expected custom Css to be set by host but " + selector + " was not found to be set.");\r\n                }\r\n            }\r\n            else {\r\n                Object(_Window_DomUtils__WEBPACK_IMPORTED_MODULE_5__["loadStylesheet"])(initOptionsCommon.stylesUrl);\r\n            }\r\n            _Theme__WEBPACK_IMPORTED_MODULE_3__["initialize"](initOptionsCommon.primaryColour, initOptionsCommon.secondaryColour);\r\n            // Check if custom strings are being passed.\r\n            // tslint:disable-next-line: no-bitwise\r\n            if ((initOptionsCommon.customResourcesSetExternally & _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["CustomResources"].Strings) === _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["CustomResources"].Strings) {\r\n                if (!_UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]()) {\r\n                    reject("Expected custom strings to be set by host but UIStrings.getUIStrings() is null or undefined");\r\n                }\r\n                initialized = true;\r\n                resolve();\r\n            }\r\n            else {\r\n                var intlFileUrl_1 = initOptionsCommon.intlUrl + initOptionsCommon.locale.toLowerCase() + "/" +\r\n                    initOptionsCommon.intlFilename;\r\n                Object(_Window_DomUtils__WEBPACK_IMPORTED_MODULE_5__["loadScript"])(intlFileUrl_1)\r\n                    .then(function () {\r\n                    if (!_UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]()) {\r\n                        reject("UiStrings were not loaded from " + intlFileUrl_1);\r\n                        return;\r\n                    }\r\n                    initialized = true;\r\n                    resolve();\r\n                    return;\r\n                }).catch(function (err) {\r\n                    reject("Script load failed for " + intlFileUrl_1 + ". " + err);\r\n                });\r\n            }\r\n        }\r\n        else {\r\n            resolve();\r\n        }\r\n    });\r\n}\r\n/**\r\n * Reset the module. Used in unit tests.\r\n */\r\nfunction reset() {\r\n    initialized = false;\r\n}\r\n/* Make the setUIStrings method available globally */\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_2__["setSetUiStrings"](setUIStrings);\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_2__["setCreateScreenshot"](_Screenshot__WEBPACK_IMPORTED_MODULE_4__["createScreenshot"]);\r\n_Window_Window__WEBPACK_IMPORTED_MODULE_2__["get"]().OfficeBrowserFeedback.html2canvas = html2canvas;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Db21tb25VSS50cz8wYWIzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRUgsSUFBTSxXQUFXLEdBQVEsbUJBQU8sQ0FBQyxtR0FBNkIsQ0FBQyxDQUFDO0FBRWI7QUFDWTtBQUNyQjtBQUNUO0FBQ1U7QUFDb0I7QUFDeEI7QUFDVztBQUVsRDs7R0FFRztBQUNILElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztBQUVqQzs7O0dBR0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxJQUFTO0lBQzlCLGlFQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFBQSxDQUFDO0FBRUY7O0dBRUc7QUFDSSxTQUFTLFVBQVU7SUFDekIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDakIsSUFBTSxpQkFBaUIsR0FBRyxnRUFBaUIsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDckUsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUN2QixNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQzthQUNwQztZQUVELHVDQUF1QztZQUN2Qyx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDRCQUE0QixHQUFHLDRFQUE2QixDQUFDLEdBQUcsQ0FBQyxLQUFLLDRFQUE2QixDQUFDLEdBQUcsRUFBRTtnQkFDL0gsSUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLG1EQUFHLENBQUMsWUFBWSxDQUFDO2dCQUV4QyxJQUFJLENBQUMsc0VBQXVCLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3ZDLE1BQU0sQ0FBQyw0Q0FBNEMsR0FBRyxRQUFRLEdBQUcsMkJBQTJCLENBQUMsQ0FBQztpQkFDOUY7YUFDRDtpQkFBTTtnQkFDTix1RUFBYyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzVDO1lBRUQsaURBQWdCLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRXJGLDRDQUE0QztZQUM1Qyx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDRCQUE0QixHQUFHLDRFQUE2QixDQUFDLE9BQU8sQ0FBQyxLQUFLLDRFQUE2QixDQUFDLE9BQU8sRUFBRTtnQkFFdkksSUFBSSxDQUFDLGlFQUFzQixFQUFFLEVBQUU7b0JBQzlCLE1BQU0sQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO2lCQUN0RztnQkFFRCxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixPQUFPLEVBQUUsQ0FBQzthQUNWO2lCQUFNO2dCQUVOLElBQU0sYUFBVyxHQUFJLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRztvQkFDNUYsaUJBQWlCLENBQUMsWUFBWSxDQUFDO2dCQUVoQyxtRUFBVSxDQUFDLGFBQVcsQ0FBQztxQkFDdEIsSUFBSSxDQUNKO29CQUNDLElBQUksQ0FBQyxpRUFBc0IsRUFBRSxFQUFFO3dCQUM5QixNQUFNLENBQUMsaUNBQWlDLEdBQUcsYUFBVyxDQUFDLENBQUM7d0JBQ3hELE9BQU87cUJBQ1A7b0JBRUQsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDbkIsT0FBTyxFQUFFLENBQUM7b0JBQ1YsT0FBTztnQkFDUixDQUFDLENBQ0QsQ0FBQyxLQUFLLENBQ04sVUFBQyxHQUFHO29CQUNILE1BQU0sQ0FBQyx5QkFBeUIsR0FBRyxhQUFXLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDLENBQ0QsQ0FBQzthQUNGO1NBQ0Q7YUFBTTtZQUNOLE9BQU8sRUFBRSxDQUFDO1NBQ1Y7SUFDRixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNJLFNBQVMsS0FBSztJQUNwQixXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxxREFBcUQ7QUFDckQsOERBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDckMsa0VBQTBCLENBQUMsNERBQTJCLENBQUMsQ0FBQztBQUN4RCxrREFBVSxFQUFFLENBQUMscUJBQXFCLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0NvbW1vblVJLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbW1vblVJLnRzXHJcbiAqXHJcbiAqIENvbW1vbiBsb2dpYyBmb3IgVUkuXHJcbiAqL1xyXG5cclxuY29uc3QgaHRtbDJjYW52YXM6IGFueSA9IHJlcXVpcmUoXCJAa2FyYW5rZXN3YW5pOTkvaHRtbDJjYW52YXNcIik7XHJcblxyXG5pbXBvcnQgKiBhcyBVSVN0cmluZ3MgZnJvbSBcIi4vVUlTdHJpbmdzL1VJU3RyaW5nc1wiO1xyXG5pbXBvcnQgKiBhcyBDb25maWd1cmF0aW9uIGZyb20gXCIuL0NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgKiBhcyBXaW5kb3cgZnJvbSBcIi4vV2luZG93L1dpbmRvd1wiO1xyXG5pbXBvcnQgKiBhcyBUaGVtZSBmcm9tIFwiLi9UaGVtZVwiO1xyXG5pbXBvcnQgKiBhcyBTY3JlZW5zaG90IGZyb20gXCIuL1NjcmVlbnNob3RcIjtcclxuaW1wb3J0IHsgbG9hZFN0eWxlc2hlZXQsIGxvYWRTY3JpcHQgfSBmcm9tIFwiLi9XaW5kb3cvRG9tVXRpbHNcIjtcclxuaW1wb3J0IHsgSURzIH0gZnJvbSBcIi4vVUkvVWlDb25zdGFudHNcIjtcclxuaW1wb3J0IHsgY2hlY2tDc3NTZWxlY3RvclRvQmVTZXQgfSBmcm9tIFwiLi9VdGlsc1wiO1xyXG5cclxuLyoqXHJcbiAqIEhhcyB0aGUgU0RLIGJlZW4gaW5pdGlhbGl6ZWRcclxuICovXHJcbmxldCBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuLyoqXHJcbiAqIFNldCB1aSBTdHJpbmdzLlxyXG4gKiBAcGFyYW0gZGF0YSB0aGUgdWkgc3RyaW5nc1xyXG4gKi9cclxuZnVuY3Rpb24gc2V0VUlTdHJpbmdzKGRhdGE6IGFueSk6IHZvaWQge1xyXG5cdFVJU3RyaW5ncy5zZXRVSVN0cmluZ3MoZGF0YSk7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemUoKTogUHJvbWlzZTxhbnk+IHtcclxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0aWYgKCFpbml0aWFsaXplZCkge1xyXG5cdFx0XHRjb25zdCBpbml0T3B0aW9uc0NvbW1vbiA9IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKTtcclxuXHRcdFx0aWYgKCFpbml0T3B0aW9uc0NvbW1vbikge1xyXG5cdFx0XHRcdHJlamVjdChcImluaXRPcHRpb25zQ29tbW9uIGlzIG51bGxcIik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIENoZWNrIGlmIGN1c3RvbSBDU1MgaXMgYmVpbmcgcGFzc2VkLlxyXG5cdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcclxuXHRcdFx0aWYgKChpbml0T3B0aW9uc0NvbW1vbi5jdXN0b21SZXNvdXJjZXNTZXRFeHRlcm5hbGx5ICYgQ29uZmlndXJhdGlvbi5DdXN0b21SZXNvdXJjZXMuQ3NzKSA9PT0gQ29uZmlndXJhdGlvbi5DdXN0b21SZXNvdXJjZXMuQ3NzKSB7XHJcblx0XHRcdFx0Y29uc3Qgc2VsZWN0b3IgPSBcIiNcIiArIElEcy5UUHJvbXB0VGl0bGU7XHJcblxyXG5cdFx0XHRcdGlmICghY2hlY2tDc3NTZWxlY3RvclRvQmVTZXQoc2VsZWN0b3IpKSB7XHJcblx0XHRcdFx0XHRyZWplY3QoXCJFeHBlY3RlZCBjdXN0b20gQ3NzIHRvIGJlIHNldCBieSBob3N0IGJ1dCBcIiArIHNlbGVjdG9yICsgXCIgd2FzIG5vdCBmb3VuZCB0byBiZSBzZXQuXCIpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRsb2FkU3R5bGVzaGVldChpbml0T3B0aW9uc0NvbW1vbi5zdHlsZXNVcmwpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRUaGVtZS5pbml0aWFsaXplKGluaXRPcHRpb25zQ29tbW9uLnByaW1hcnlDb2xvdXIsIGluaXRPcHRpb25zQ29tbW9uLnNlY29uZGFyeUNvbG91cik7XHJcblxyXG5cdFx0XHQvLyBDaGVjayBpZiBjdXN0b20gc3RyaW5ncyBhcmUgYmVpbmcgcGFzc2VkLlxyXG5cdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcclxuXHRcdFx0aWYgKChpbml0T3B0aW9uc0NvbW1vbi5jdXN0b21SZXNvdXJjZXNTZXRFeHRlcm5hbGx5ICYgQ29uZmlndXJhdGlvbi5DdXN0b21SZXNvdXJjZXMuU3RyaW5ncykgPT09IENvbmZpZ3VyYXRpb24uQ3VzdG9tUmVzb3VyY2VzLlN0cmluZ3MpIHtcclxuXHJcblx0XHRcdFx0aWYgKCFVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkpIHtcclxuXHRcdFx0XHRcdHJlamVjdChcIkV4cGVjdGVkIGN1c3RvbSBzdHJpbmdzIHRvIGJlIHNldCBieSBob3N0IGJ1dCBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkgaXMgbnVsbCBvciB1bmRlZmluZWRcIik7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpbml0aWFsaXplZCA9IHRydWU7XHJcblx0XHRcdFx0cmVzb2x2ZSgpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHRjb25zdCBpbnRsRmlsZVVybCA9ICBpbml0T3B0aW9uc0NvbW1vbi5pbnRsVXJsICsgaW5pdE9wdGlvbnNDb21tb24ubG9jYWxlLnRvTG93ZXJDYXNlKCkgKyBcIi9cIiArXHJcblx0XHRcdFx0XHRpbml0T3B0aW9uc0NvbW1vbi5pbnRsRmlsZW5hbWU7XHJcblxyXG5cdFx0XHRcdGxvYWRTY3JpcHQoaW50bEZpbGVVcmwpXHJcblx0XHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICghVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpKSB7XHJcblx0XHRcdFx0XHRcdFx0cmVqZWN0KFwiVWlTdHJpbmdzIHdlcmUgbm90IGxvYWRlZCBmcm9tIFwiICsgaW50bEZpbGVVcmwpO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpLmNhdGNoKFxyXG5cdFx0XHRcdFx0KGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZWplY3QoXCJTY3JpcHQgbG9hZCBmYWlsZWQgZm9yIFwiICsgaW50bEZpbGVVcmwgKyBcIi4gXCIgKyBlcnIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJlc29sdmUoKTtcclxuXHRcdH1cclxuXHR9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlc2V0IHRoZSBtb2R1bGUuIFVzZWQgaW4gdW5pdCB0ZXN0cy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNldCgpIHtcclxuXHRpbml0aWFsaXplZCA9IGZhbHNlO1xyXG59XHJcblxyXG4vKiBNYWtlIHRoZSBzZXRVSVN0cmluZ3MgbWV0aG9kIGF2YWlsYWJsZSBnbG9iYWxseSAqL1xyXG5XaW5kb3cuc2V0U2V0VWlTdHJpbmdzKHNldFVJU3RyaW5ncyk7XHJcbldpbmRvdy5zZXRDcmVhdGVTY3JlZW5zaG90KFNjcmVlbnNob3QuY3JlYXRlU2NyZWVuc2hvdCk7XHJcbldpbmRvdy5nZXQoKS5PZmZpY2VCcm93c2VyRmVlZGJhY2suaHRtbDJjYW52YXMgPSBodG1sMmNhbnZhcztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/CommonUI.ts\n')},"./scripts/app/Configuration/Configuration.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Configuration", function() { return Configuration; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "get", function() { return get; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateFeedbackType", function() { return validateFeedbackType; });\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../Utils */ "./scripts/app/Utils.ts");\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../Constants */ "./scripts/app/Constants.ts");\n/* harmony import */ var _Localization__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../Localization */ "./scripts/app/Localization.ts");\n/* harmony import */ var _IInitOptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./IInitOptions */ "./scripts/app/Configuration/IInitOptions.ts");\n/* harmony import */ var _UI_UiConstants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../UI/UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CustomResources", function() { return _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["CustomResources"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AgeGroup", function() { return _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AuthenticationType", function() { return _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AuthenticationType"]; });\n\n/* harmony import */ var _ILaunchOptions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ILaunchOptions */ "./scripts/app/Configuration/ILaunchOptions.ts");\n/* harmony import */ var _ILaunchOptions__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_ILaunchOptions__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _ILaunchOptions__WEBPACK_IMPORTED_MODULE_5__) if(["default","Configuration","get","validateFeedbackType","CustomResources","AgeGroup","AuthenticationType"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _ILaunchOptions__WEBPACK_IMPORTED_MODULE_5__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n/**\r\n * Configuration.ts\r\n *\r\n * Module for logic relating to the sdk user configuration\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Class representing a configuration (user provided options)\r\n */\r\nvar Configuration = /** @class */ (function () {\r\n    function Configuration() {\r\n        this.feedbackSubmitted = false;\r\n    }\r\n    /**\r\n     * Validate category options, default "show" to false if CategoryOptions is not provided.\r\n     * @param categories Category options\r\n     * @returns {ICategoryOptions} the validated CategoryOptions\r\n     */\r\n    Configuration.validateCategoryOptions = function (categories) {\r\n        if (!categories) {\r\n            return { show: false };\r\n        }\r\n        _Utils__WEBPACK_IMPORTED_MODULE_0__["expectBoolean"](categories.show, "categories.show");\r\n        if (categories.customCategories) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectArray"](categories.customCategories, "categories.customCategories");\r\n            for (var _i = 0, _a = categories.customCategories; _i < _a.length; _i++) {\r\n                var customCategory = _a[_i];\r\n                _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](customCategory, "custom category \'" + customCategory + "\'");\r\n                if (customCategory.length > 20) {\r\n                    throw "custom category \'" + customCategory + "\' too long, max 20 characters.";\r\n                }\r\n            }\r\n        }\r\n        return categories;\r\n    };\r\n    Configuration.prototype.getFeedbackSubmitted = function () {\r\n        return this.feedbackSubmitted;\r\n    };\r\n    Configuration.prototype.setFeedbackSubmitted = function (value) {\r\n        this.feedbackSubmitted = value;\r\n    };\r\n    Configuration.prototype.getCommonInitOptions = function () {\r\n        return this.commonInitOptions;\r\n    };\r\n    Configuration.prototype.getInAppFeedbackInitOptions = function () {\r\n        return this.inAppFeedbackInitOptions;\r\n    };\r\n    Configuration.prototype.getInAppFeedbackLaunchOptions = function () {\r\n        return this.inAppFeedbackLaunchOptions;\r\n    };\r\n    Configuration.prototype.getFloodgateInitOptions = function () {\r\n        return this.floodgateInitOptions;\r\n    };\r\n    Configuration.prototype.getFloodgateSurvey = function () {\r\n        return this.floodgateSurvey;\r\n    };\r\n    Configuration.prototype.getSdkSessionId = function () {\r\n        if (!this.sdkSessionId) {\r\n            this.sdkSessionId = _Utils__WEBPACK_IMPORTED_MODULE_0__["guid"]();\r\n        }\r\n        return this.sdkSessionId;\r\n    };\r\n    Configuration.prototype.getEventSampling = function () {\r\n        return this.eventSampling;\r\n    };\r\n    /**\r\n     * Set initOptions for common functionality.\r\n     */\r\n    Configuration.prototype.setCommonInitOptions = function (passedInitOptions) {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_0__["expectObject"](passedInitOptions, "passedInitOptions");\r\n        var initOptions = {\r\n            appId: passedInitOptions.appId,\r\n            applicationGroup: passedInitOptions.applicationGroup || {},\r\n            build: passedInitOptions.build,\r\n            cid: passedInitOptions.cid,\r\n            environment: passedInitOptions.environment,\r\n            intlFilename: passedInitOptions.intlFilename,\r\n            intlUrl: passedInitOptions.intlUrl,\r\n            webSurfacesResourceBaseUrl: passedInitOptions.webSurfacesResourceBaseUrl,\r\n            locale: passedInitOptions.locale,\r\n            onError: passedInitOptions.onError,\r\n            originalLocale: passedInitOptions.locale,\r\n            primaryColour: passedInitOptions.primaryColour,\r\n            secondaryColour: passedInitOptions.secondaryColour,\r\n            sessionId: passedInitOptions.sessionId,\r\n            stylesUrl: passedInitOptions.stylesUrl,\r\n            telemetryGroup: passedInitOptions.telemetryGroup || {},\r\n            userEmail: passedInitOptions.userEmail,\r\n            webGroup: passedInitOptions.webGroup || {},\r\n            eventSampling: passedInitOptions.eventSampling,\r\n            petrolTimeout: passedInitOptions.petrolTimeout,\r\n            isCommercialHost: passedInitOptions.isCommercialHost,\r\n            customResourcesSetExternally: passedInitOptions.customResourcesSetExternally,\r\n            emailPolicyValue: passedInitOptions.emailPolicyValue,\r\n            screenshotPolicyValue: passedInitOptions.screenshotPolicyValue,\r\n            ageGroup: passedInitOptions.ageGroup,\r\n            authenticationType: passedInitOptions.authenticationType,\r\n            applicationSettings: passedInitOptions.applicationSettings,\r\n            webSurfacesSettings: passedInitOptions.webSurfacesSettings,\r\n            privacyUrl: passedInitOptions.privacyUrl || _UI_UiConstants__WEBPACK_IMPORTED_MODULE_4__["Urls"].PrivacyStatementLink,\r\n            retentionDurationDays: passedInitOptions.retentionDurationDays,\r\n        };\r\n        _Utils__WEBPACK_IMPORTED_MODULE_0__["expectNumber"](initOptions.appId, "initOptions.appId");\r\n        if (!(initOptions.appId % 1 === 0 && initOptions.appId > 0)) {\r\n            throw "initOptions.appId is not a positive integer: " + initOptions.appId;\r\n        }\r\n        // if defined, it should be a positive number\r\n        if (initOptions.retentionDurationDays !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectNumber"](initOptions.retentionDurationDays, "initOptions.retentionDurationDays");\r\n            if (!(initOptions.retentionDurationDays % 1 === 0 && initOptions.retentionDurationDays > 0)) {\r\n                throw "initOptions.retentionDurationDays is not a positive integer: " + initOptions.retentionDurationDays;\r\n            }\r\n        }\r\n        // tslint:disable-next-line: no-bitwise\r\n        var expectedValues = _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["CustomResources"].Strings | _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["CustomResources"].Css;\r\n        if (initOptions.customResourcesSetExternally === undefined) {\r\n            initOptions.customResourcesSetExternally = _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["CustomResources"].None;\r\n            // tslint:disable-next-line: no-bitwise\r\n        }\r\n        else if (typeof (initOptions.customResourcesSetExternally) !== "number" ||\r\n            // tslint:disable-next-line: no-bitwise\r\n            (initOptions.customResourcesSetExternally | expectedValues) !== expectedValues) {\r\n            throw "initOptions.customResourcesSetExternally has an invalid value: " + initOptions.customResourcesSetExternally;\r\n        }\r\n        // tslint:disable-next-line: no-bitwise\r\n        if ((initOptions.customResourcesSetExternally & _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["CustomResources"].Css) !== _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["CustomResources"].Css) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](initOptions.stylesUrl, "initOptions.stylesUrl");\r\n        }\r\n        // tslint:disable-next-line: no-bitwise\r\n        if ((initOptions.customResourcesSetExternally & _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["CustomResources"].Strings) !== _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["CustomResources"].Strings) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](initOptions.intlUrl, "initOptions.intlUrl");\r\n        }\r\n        if (initOptions.intlFilename !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](initOptions.intlFilename, "initOptions.intlFilename");\r\n        }\r\n        else {\r\n            initOptions.intlFilename = "officebrowserfeedbackstrings.js";\r\n        }\r\n        _Utils__WEBPACK_IMPORTED_MODULE_0__["expectNumber"](initOptions.environment, "initOptions.environment");\r\n        if (!(initOptions.environment === 1 || initOptions.environment === 0)) {\r\n            throw "initOptions.environment has a bad value: " + initOptions.environment;\r\n        }\r\n        if (initOptions.userEmail !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](initOptions.userEmail, "initOptions.userEmail");\r\n        }\r\n        else {\r\n            initOptions.userEmail = "";\r\n        }\r\n        if (initOptions.sessionId !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](initOptions.sessionId, "initOptions.sessionId");\r\n        }\r\n        else {\r\n            initOptions.sessionId = "00000000-0000-0000-0000-000000000000";\r\n        }\r\n        // Copy sessionID over to telemetryGroup\r\n        initOptions.telemetryGroup.processSessionId = initOptions.sessionId;\r\n        if (initOptions.cid !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](initOptions.cid, "initOptions.cid");\r\n            // Copy cid over to extendedManifestData of applicationGroup\r\n            initOptions.applicationGroup.extendedManifestData = JSON.stringify({ cid: initOptions.cid });\r\n        }\r\n        if (initOptions.build !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](initOptions.build, "initOptions.build");\r\n            var buildRegex = "^[0-9]{1,9}(\\\\.[0-9]{1,9})?(\\\\.[0-9]{1,9})?(\\\\.[0-9]{1,9})?$";\r\n            if (!new RegExp(buildRegex).test(initOptions.build)) {\r\n                initOptions.build = "0.0.0.0";\r\n            }\r\n        }\r\n        else {\r\n            initOptions.build = "0.0.0.0";\r\n        }\r\n        // Copy build over to telemetryGroup\r\n        initOptions.telemetryGroup.officeBuild = initOptions.build;\r\n        var hexColourRegex = new RegExp("^#[0-9a-f]{3}([0-9a-f]{3})?$", "i");\r\n        if (initOptions.primaryColour !== undefined) {\r\n            if (!hexColourRegex.test(initOptions.primaryColour)) {\r\n                initOptions.primaryColour = undefined;\r\n            }\r\n        }\r\n        if (initOptions.secondaryColour !== undefined) {\r\n            if (!hexColourRegex.test(initOptions.secondaryColour)) {\r\n                initOptions.secondaryColour = undefined;\r\n            }\r\n        }\r\n        if (initOptions.locale !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](initOptions.locale, "initOptions.locale");\r\n            initOptions.locale = _Localization__WEBPACK_IMPORTED_MODULE_2__["validate"](initOptions.locale);\r\n        }\r\n        else {\r\n            initOptions.locale = "en";\r\n        }\r\n        if (initOptions.onError === undefined) {\r\n            initOptions.onError = function (err) { return; };\r\n        }\r\n        if (initOptions.petrolTimeout !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectNumber"](initOptions.petrolTimeout, "initOptions.petrolTimeout");\r\n        }\r\n        if (initOptions.authenticationType !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectEnum"](initOptions.authenticationType, _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AuthenticationType"], "initOptions.authenticationType");\r\n        }\r\n        else {\r\n            initOptions.authenticationType = _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AuthenticationType"].Unauthenticated;\r\n        }\r\n        // For AAD or Unauthenticated, ageGroup value is unknown, so it\'s safe to only parse for MSA\r\n        if (initOptions.ageGroup !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectEnum"](initOptions.ageGroup, _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"], "initOptions.ageGroup");\r\n        }\r\n        else {\r\n            initOptions.ageGroup = _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"].Undefined;\r\n        }\r\n        this.eventSampling = this.parseEventSamplingOption(initOptions.eventSampling);\r\n        this.commonInitOptions = initOptions;\r\n        this.commonPolicyAllowAADC = this.determineAADCPolicy(initOptions.authenticationType, initOptions.ageGroup);\r\n        if (initOptions.isCommercialHost === undefined || initOptions.isCommercialHost == null) {\r\n            initOptions.isCommercialHost = false; // By default privacy consent is not shown. (From SDK\'s perspective)\r\n        }\r\n        else {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectBoolean"](initOptions.isCommercialHost, "initOptions.isCommercialHost");\r\n        }\r\n        if (initOptions.emailPolicyValue === undefined) {\r\n            initOptions.emailPolicyValue = 0 /* NotConfigured */;\r\n        }\r\n        else if (typeof (initOptions.emailPolicyValue) !== "number" ||\r\n            (initOptions.emailPolicyValue !== 0 /* NotConfigured */ &&\r\n                initOptions.emailPolicyValue !== 1 /* Enabled */ &&\r\n                initOptions.emailPolicyValue !== 2 /* Disabled */)) {\r\n            throw "initOptions.emailPolicyValue has an invalid value: " + initOptions.emailPolicyValue;\r\n        }\r\n        if (initOptions.screenshotPolicyValue === undefined) {\r\n            initOptions.screenshotPolicyValue = 0 /* NotConfigured */;\r\n        }\r\n        else if (typeof (initOptions.screenshotPolicyValue) !== "number" ||\r\n            initOptions.screenshotPolicyValue !== 0 /* NotConfigured */ &&\r\n                initOptions.screenshotPolicyValue !== 1 /* Enabled */ &&\r\n                initOptions.screenshotPolicyValue !== 2 /* Disabled */) {\r\n            throw "initOptions.screenshotPolicyValue has an invalid value: " + initOptions.screenshotPolicyValue;\r\n        }\r\n        if (initOptions.privacyUrl !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](initOptions.privacyUrl, "initOptions.privacyUrl");\r\n        }\r\n        else {\r\n            initOptions.privacyUrl = _UI_UiConstants__WEBPACK_IMPORTED_MODULE_4__["Urls"].PrivacyStatementLink;\r\n        }\r\n    };\r\n    /**\r\n     * Set init options for inAppFeedback\r\n     */\r\n    Configuration.prototype.setInAppFeedbackInitOptions = function (passedInitOptions) {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_0__["expectObject"](passedInitOptions, "passedInitOptions");\r\n        var initOptions = {\r\n            bugForm: passedInitOptions.bugForm,\r\n            onDismiss: passedInitOptions.onDismiss,\r\n            screenshot: passedInitOptions.screenshot,\r\n            showEmailAddress: passedInitOptions.showEmailAddress,\r\n            userEmail: passedInitOptions.userEmail,\r\n            transitionEnabled: passedInitOptions.transitionEnabled,\r\n            isShowThanks: passedInitOptions.isShowThanks,\r\n            sendFeedbackPolicyValue: passedInitOptions.sendFeedbackPolicyValue,\r\n            feedbackForumUrl: passedInitOptions.feedbackForumUrl !== undefined ?\r\n                passedInitOptions.feedbackForumUrl :\r\n                undefined,\r\n            myFeedbackForumUrl: passedInitOptions.myFeedbackForumUrl !== undefined ?\r\n                passedInitOptions.myFeedbackForumUrl :\r\n                undefined,\r\n        };\r\n        if (initOptions.onDismiss === undefined) {\r\n            initOptions.onDismiss = function (submitted) { return; };\r\n        }\r\n        if (initOptions.bugForm !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectBoolean"](initOptions.bugForm, "initOptions.bugForm");\r\n        }\r\n        else {\r\n            initOptions.bugForm = false;\r\n        }\r\n        if (initOptions.userEmail !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](initOptions.userEmail, "initOptions.userEmail");\r\n        }\r\n        if (initOptions.screenshot !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectBoolean"](initOptions.screenshot, "initOptions.screenshot");\r\n        }\r\n        else {\r\n            initOptions.screenshot = true;\r\n        }\r\n        if (initOptions.showEmailAddress !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectBoolean"](initOptions.showEmailAddress, "initOptions.showEmailAddress");\r\n        }\r\n        else {\r\n            initOptions.showEmailAddress = true;\r\n        }\r\n        if (initOptions.feedbackForumUrl !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](initOptions.feedbackForumUrl, "initOptions.feedbackForumUrl");\r\n        }\r\n        else {\r\n            initOptions.feedbackForumUrl = undefined;\r\n        }\r\n        if (initOptions.isShowThanks !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectBoolean"](initOptions.isShowThanks, "initOptions.isShowThanks");\r\n        }\r\n        else {\r\n            initOptions.isShowThanks = true;\r\n        }\r\n        if (initOptions.myFeedbackForumUrl !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](initOptions.myFeedbackForumUrl, "initOptions.myFeedbackForumUrl");\r\n        }\r\n        else {\r\n            initOptions.myFeedbackForumUrl = undefined;\r\n        }\r\n        if (initOptions.transitionEnabled === undefined) {\r\n            initOptions.transitionEnabled = true;\r\n        }\r\n        if (initOptions.sendFeedbackPolicyValue === undefined) {\r\n            initOptions.sendFeedbackPolicyValue = 0 /* NotConfigured */;\r\n        }\r\n        else if (typeof (initOptions.sendFeedbackPolicyValue) !== "number" ||\r\n            (initOptions.sendFeedbackPolicyValue !== 0 /* NotConfigured */ &&\r\n                initOptions.sendFeedbackPolicyValue !== 1 /* Enabled */ &&\r\n                initOptions.sendFeedbackPolicyValue !== 2 /* Disabled */)) {\r\n            throw "initOptions.sendFeedbackPolicyValue has an invalid value: " + initOptions.sendFeedbackPolicyValue;\r\n        }\r\n        this.inAppFeedbackInitOptions = initOptions;\r\n    };\r\n    /**\r\n     * Set launch options for inAppFeedback\r\n     */\r\n    Configuration.prototype.setInAppFeedbackLaunchOptions = function (launchOptions) {\r\n        if (!this.commonInitOptions) {\r\n            throw "commonInitOptions not set";\r\n        }\r\n        if (!launchOptions) {\r\n            launchOptions = {};\r\n        }\r\n        // Override any setting done in LaunchOptions for the metadataGroups\r\n        this.commonInitOptions.applicationGroup = _Utils__WEBPACK_IMPORTED_MODULE_0__["overrideValues"](launchOptions.applicationGroup, this.commonInitOptions.applicationGroup);\r\n        this.commonInitOptions.telemetryGroup = _Utils__WEBPACK_IMPORTED_MODULE_0__["overrideValues"](launchOptions.telemetryGroup, this.commonInitOptions.telemetryGroup);\r\n        this.commonInitOptions.webGroup = _Utils__WEBPACK_IMPORTED_MODULE_0__["overrideValues"](launchOptions.webGroup, this.commonInitOptions.webGroup);\r\n        launchOptions.categories = Configuration.validateCategoryOptions(launchOptions.categories);\r\n        this.inAppFeedbackLaunchOptions = launchOptions;\r\n    };\r\n    /**\r\n     * Set init options for floodgate\r\n     */\r\n    Configuration.prototype.setFloodgateInitOptions = function (passedInitOptions) {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_0__["expectObject"](passedInitOptions, "passedInitOptions");\r\n        var initOptions = {\r\n            autoDismiss: passedInitOptions.autoDismiss,\r\n            campaignDefinitions: passedInitOptions.campaignDefinitions,\r\n            campaignFlights: passedInitOptions.campaignFlights,\r\n            campaignQueryParameters: passedInitOptions.campaignQueryParameters,\r\n            onDismiss: passedInitOptions.onDismiss,\r\n            onSurveyActivatedCallback: passedInitOptions.onSurveyActivatedCallback,\r\n            settingStorageCallback: passedInitOptions.settingStorageCallback,\r\n            uIStringGetter: passedInitOptions.uIStringGetter,\r\n            authTokenCallback: passedInitOptions.authTokenCallback,\r\n            surveyEnabled: passedInitOptions.surveyEnabled,\r\n            showEmailAddress: passedInitOptions.showEmailAddress,\r\n            augLoopCallback: passedInitOptions.augLoopCallback,\r\n            customerVoiceSurveyParams: passedInitOptions.customerVoiceSurveyParams,\r\n            surveyCSSParams: passedInitOptions.surveyCSSParams,\r\n            governanceServiceEnabled: passedInitOptions.governanceServiceEnabled,\r\n            governanceServiceConfig: passedInitOptions.governanceServiceConfig,\r\n            personalizerEnabled: passedInitOptions.personalizerEnabled,\r\n            messagingServiceSettings: passedInitOptions.messagingServiceSettings,\r\n            isPriorityEnabled: passedInitOptions.isPriorityEnabled,\r\n        };\r\n        if (initOptions.autoDismiss === undefined) {\r\n            initOptions.autoDismiss = 0 /* NoAutoDismiss */;\r\n        }\r\n        if (initOptions.onDismiss === undefined) {\r\n            initOptions.onDismiss = function (campaignId, submitted) { return; };\r\n        }\r\n        if (initOptions.onSurveyActivatedCallback === undefined) {\r\n            var defaultOnSurveyActivatedCallback = {\r\n                onSurveyActivated: function (launcher, survey, surveyParams) {\r\n                    launcher.launch();\r\n                },\r\n            };\r\n            initOptions.onSurveyActivatedCallback = defaultOnSurveyActivatedCallback;\r\n        }\r\n        if (initOptions.uIStringGetter === undefined) {\r\n            initOptions.uIStringGetter = function (str) { return str; }; // By default return the string as is.\r\n        }\r\n        if (initOptions.surveyEnabled === undefined) {\r\n            initOptions.surveyEnabled = true; // By default surveys are enabled. (From SDK\'s perspective)\r\n        }\r\n        else {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectBoolean"](initOptions.surveyEnabled, "surveyEnabled");\r\n        }\r\n        if (initOptions.showEmailAddress !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectBoolean"](initOptions.showEmailAddress, "initOptionsFloodgate.showEmailAddress");\r\n        }\r\n        else {\r\n            initOptions.showEmailAddress = true; // By default email field and collection is enabled. (From SDK\'s perspective)\r\n        }\r\n        if (initOptions.governanceServiceEnabled !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectBoolean"](initOptions.governanceServiceEnabled, "initOptionsFloodgate.governanceServiceEnable");\r\n        }\r\n        else {\r\n            initOptions.governanceServiceEnabled = false; // By default governanceServiceEnable is disabled\r\n        }\r\n        if (initOptions.governanceServiceEnabled) {\r\n            initOptions.governanceServiceConfig = this.parseGovernanceServiceConfig(initOptions.governanceServiceConfig !== undefined ?\r\n                initOptions.governanceServiceConfig :\r\n                {});\r\n        }\r\n        if (initOptions.customerVoiceSurveyParams === undefined) {\r\n            initOptions.customerVoiceSurveyParams = { cvFlights: "", isCVSurveyEnabled: true, productName: "", uiHost: "" };\r\n        }\r\n        else {\r\n            if (_Utils__WEBPACK_IMPORTED_MODULE_0__["isNOU"](initOptions.customerVoiceSurveyParams.isCVSurveyEnabled)) {\r\n                initOptions.customerVoiceSurveyParams.isCVSurveyEnabled = true;\r\n            }\r\n        }\r\n        if (initOptions.personalizerEnabled !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectBoolean"](initOptions.personalizerEnabled, "initOptionsFloodgate.personalizerEnabled");\r\n        }\r\n        else {\r\n            initOptions.personalizerEnabled = false; // By default personalizerEnabled is disabled\r\n        }\r\n        if (initOptions.isPriorityEnabled !== undefined) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectBoolean"](initOptions.isPriorityEnabled, "initOptionsFloodgate.isPriorityEnabled");\r\n        }\r\n        else {\r\n            initOptions.isPriorityEnabled = true; // By default isPriorityEnabled is enabled\r\n        }\r\n        this.floodgateInitOptions = initOptions;\r\n    };\r\n    /**\r\n     * Set the floodgate survey\r\n     */\r\n    Configuration.prototype.setFloodgateSurvey = function (survey) {\r\n        this.floodgateSurvey = survey;\r\n    };\r\n    // Checks if the surveyEnabled policy is true or false.\r\n    Configuration.prototype.checkIfSurveysEnabled = function () {\r\n        // If no floodgateInitOptions defined, return true for surveyEnabled\r\n        var policyAllowSurvey = this.floodgateInitOptions ? this.floodgateInitOptions.surveyEnabled : true;\r\n        return policyAllowSurvey && this.commonPolicyAllowAADC;\r\n    };\r\n    /**\r\n     * Return the flag the Feedback and Survey enabled by AADC.\r\n     */\r\n    Configuration.prototype.isFeedbackSurveyEnabledByAADC = function () {\r\n        return this.commonPolicyAllowAADC;\r\n    };\r\n    Configuration.prototype.getCVSurveyFlights = function () {\r\n        return this.floodgateInitOptions && this.floodgateInitOptions.customerVoiceSurveyParams ?\r\n            this.floodgateInitOptions.customerVoiceSurveyParams.cvFlights : "";\r\n    };\r\n    Configuration.prototype.isCVSurveyEnabled = function () {\r\n        return this.floodgateInitOptions && this.floodgateInitOptions.customerVoiceSurveyParams ?\r\n            this.floodgateInitOptions.customerVoiceSurveyParams.isCVSurveyEnabled : true;\r\n    };\r\n    Configuration.prototype.getProductName = function () {\r\n        return this.floodgateInitOptions && this.floodgateInitOptions.customerVoiceSurveyParams ?\r\n            this.floodgateInitOptions.customerVoiceSurveyParams.productName : "";\r\n    };\r\n    Configuration.prototype.getUIHost = function () {\r\n        return this.floodgateInitOptions && this.floodgateInitOptions.customerVoiceSurveyParams ?\r\n            this.floodgateInitOptions.customerVoiceSurveyParams.uiHost : "";\r\n    };\r\n    Configuration.prototype.getUIHostCVSurveyDispatcher = function () {\r\n        return this.floodgateInitOptions && this.floodgateInitOptions.customerVoiceSurveyParams ?\r\n            this.floodgateInitOptions.customerVoiceSurveyParams.uiHostCVSurveyDispatcher : "";\r\n    };\r\n    Configuration.prototype.getCSSPosition = function () {\r\n        return this.floodgateInitOptions &&\r\n            this.floodgateInitOptions.surveyCSSParams &&\r\n            this.floodgateInitOptions.surveyCSSParams.cssPosition ?\r\n            this.floodgateInitOptions.surveyCSSParams.cssPosition :\r\n            "";\r\n    };\r\n    Configuration.prototype.getCSSZIndex = function () {\r\n        return this.floodgateInitOptions &&\r\n            this.floodgateInitOptions.surveyCSSParams &&\r\n            this.floodgateInitOptions.surveyCSSParams.cssZIndex ?\r\n            this.floodgateInitOptions.surveyCSSParams.cssZIndex :\r\n            "";\r\n    };\r\n    Configuration.prototype.getCSSBottom = function () {\r\n        return this.floodgateInitOptions &&\r\n            this.floodgateInitOptions.surveyCSSParams &&\r\n            this.floodgateInitOptions.surveyCSSParams.cssBottom ?\r\n            this.floodgateInitOptions.surveyCSSParams.cssBottom :\r\n            "";\r\n    };\r\n    Configuration.prototype.getCSSRight = function () {\r\n        return this.floodgateInitOptions &&\r\n            this.floodgateInitOptions.surveyCSSParams &&\r\n            this.floodgateInitOptions.surveyCSSParams.cssRight ?\r\n            this.floodgateInitOptions.surveyCSSParams.cssRight :\r\n            "";\r\n    };\r\n    Configuration.prototype.getCSSVarString = function () {\r\n        var styleSubstrings = [];\r\n        if (this.floodgateInitOptions && this.floodgateInitOptions.surveyCSSParams) {\r\n            if (this.floodgateInitOptions.surveyCSSParams.cssPosition) {\r\n                styleSubstrings.push("--obf-position:", this.floodgateInitOptions.surveyCSSParams.cssPosition, ";");\r\n            }\r\n            if (this.floodgateInitOptions.surveyCSSParams.cssZIndex) {\r\n                styleSubstrings.push("--obf-zIndex:", this.floodgateInitOptions.surveyCSSParams.cssZIndex, ";");\r\n            }\r\n            if (this.floodgateInitOptions.surveyCSSParams.cssBottom) {\r\n                styleSubstrings.push("--obf-bottom:", this.floodgateInitOptions.surveyCSSParams.cssBottom, ";");\r\n            }\r\n            if (this.floodgateInitOptions.surveyCSSParams.cssRight) {\r\n                styleSubstrings.push("--obf-right:", this.floodgateInitOptions.surveyCSSParams.cssRight, ";");\r\n            }\r\n        }\r\n        return styleSubstrings.join("");\r\n    };\r\n    /**\r\n     * Check AADC rule at once since Configuration cannot be set again.\r\n     * So that we don\'t need to repeat the same process over again.\r\n     */\r\n    Configuration.prototype.determineAADCPolicy = function (authenticationType, ageGroup) {\r\n        // Return Based on authentication first\r\n        if (authenticationType === _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AuthenticationType"].Unauthenticated ||\r\n            authenticationType === _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AuthenticationType"].AAD) {\r\n            return true;\r\n        }\r\n        // Return based on AgeGroup\r\n        return ageGroup !== _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"].MinorWithParentalConsent &&\r\n            ageGroup !== _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"].MinorWithoutParentalConsent;\r\n    };\r\n    // Keep implementation in sync with %SRCROOT%\\privacy\\idconsentprovider\\IdentityBasedConsentGroupProvider.cpp\r\n    Configuration.prototype.getUserConsentGroup = function () {\r\n        var authenticationType = this.commonInitOptions.authenticationType;\r\n        if (authenticationType === _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AuthenticationType"].Unauthenticated ||\r\n            authenticationType === _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AuthenticationType"].AAD) {\r\n            return 1 /* CanConsent */;\r\n        }\r\n        var ageGroup = this.commonInitOptions.ageGroup;\r\n        switch (ageGroup) {\r\n            case _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"].Undefined:\r\n                return 1 /* CanConsent */;\r\n            case _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"].MinorWithoutParentalConsent:\r\n                return 3 /* CannotConsent */;\r\n            case _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"].MinorWithParentalConsent:\r\n                return 3 /* CannotConsent */;\r\n            case _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"].Adult:\r\n                return 1 /* CanConsent */;\r\n            case _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"].NotAdult:\r\n                return 2 /* PartialConsent */;\r\n            case _IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"].MinorNoParentalConsentRequired:\r\n                return 1 /* CanConsent */;\r\n            default:\r\n                return 3 /* CannotConsent */;\r\n        }\r\n        return 3 /* CannotConsent */;\r\n    };\r\n    Configuration.prototype.parseEventSamplingOption = function (samplingOptions) {\r\n        var eventInitSampling = { event: {} };\r\n        if (samplingOptions !== undefined) {\r\n            // Iterating through init options\r\n            for (var index in samplingOptions) {\r\n                if (samplingOptions.hasOwnProperty(index)) {\r\n                    // Check for correct Type\r\n                    switch (samplingOptions[index].type) {\r\n                        case "Event":\r\n                            // Parsing the Name and SampleRate\r\n                            var sampleRate = samplingOptions[index].sampleRate;\r\n                            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectNumber"](sampleRate, "initOption.EventSampling.SampleRate");\r\n                            _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](samplingOptions[index].name, "initOption.EventSampling.Name");\r\n                            // check the range for sampling percentage\r\n                            if (sampleRate < 0 || sampleRate > 1) {\r\n                                throw "initOption.EventSampling." + samplingOptions[index].name + ".SampleRate is out of range";\r\n                            }\r\n                            // finally, save the sampling event\r\n                            eventInitSampling.event[samplingOptions[index].name] = sampleRate;\r\n                            break;\r\n                        default:\r\n                            throw "initOption.EventSampling.Type value is not recognized";\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return eventInitSampling;\r\n    };\r\n    Configuration.prototype.parseGovernanceServiceConfig = function (config) {\r\n        var _a, _b, _c, _d;\r\n        return {\r\n            // by default, disable the trigger in failure\r\n            forceServicelessSurveyDisplay: (_a = config.forceServicelessSurveyDisplay) !== null && _a !== void 0 ? _a : false,\r\n            // by default, no retry\r\n            retry: (_b = config.retry) !== null && _b !== void 0 ? _b : 1,\r\n            // by default, timeout is 1000 miliseconds\r\n            timeout: (_c = config.timeout) !== null && _c !== void 0 ? _c : 1000,\r\n            // simple request is default to false\r\n            simpleRequestEnabled: (_d = config.simpleRequestEnabled) !== null && _d !== void 0 ? _d : false,\r\n        };\r\n    };\r\n    return Configuration;\r\n}());\r\n\r\nvar configuration = new Configuration();\r\n/**\r\n * Get the current configuration\r\n */\r\nfunction get() {\r\n    return configuration;\r\n}\r\n/**\r\n * Validate feedbackType\r\n * @param feedbackType feedbackType\r\n * @returns {Constants.FeedbackType} the validated feedbackType\r\n */\r\nfunction validateFeedbackType(feedbackType) {\r\n    _Utils__WEBPACK_IMPORTED_MODULE_0__["expectString"](feedbackType, "feedbackType");\r\n    if (feedbackType === _Constants__WEBPACK_IMPORTED_MODULE_1__["FeedbackType"][_Constants__WEBPACK_IMPORTED_MODULE_1__["FeedbackType"].Smile]) {\r\n        return _Constants__WEBPACK_IMPORTED_MODULE_1__["FeedbackType"].Smile;\r\n    }\r\n    else if (feedbackType === _Constants__WEBPACK_IMPORTED_MODULE_1__["FeedbackType"][_Constants__WEBPACK_IMPORTED_MODULE_1__["FeedbackType"].Frown]) {\r\n        return _Constants__WEBPACK_IMPORTED_MODULE_1__["FeedbackType"].Frown;\r\n    }\r\n    else if (feedbackType === _Constants__WEBPACK_IMPORTED_MODULE_1__["FeedbackType"][_Constants__WEBPACK_IMPORTED_MODULE_1__["FeedbackType"].Bug]) {\r\n        return _Constants__WEBPACK_IMPORTED_MODULE_1__["FeedbackType"].Bug;\r\n    }\r\n    else {\r\n        throw "feedbackType should be one of Smile, Frown or Bug";\r\n    }\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb24udHM/MWQwMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRWlDO0FBQ1E7QUFDTTtBQUVIO0FBS047QUFFVjtBQUNFO0FBRWpDOztHQUVHO0FBRUg7SUFBQTtRQXdDUyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7SUFtbkI1QyxDQUFDO0lBMXBCQTs7OztPQUlHO0lBQ1kscUNBQXVCLEdBQXRDLFVBQXVDLFVBQTZCO1FBQ25FLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDaEIsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUN2QjtRQUVELG9EQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUN4RCxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNoQyxrREFBaUIsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztZQUU5RSxLQUEyQixVQUEyQixFQUEzQixlQUFVLENBQUMsZ0JBQWdCLEVBQTNCLGNBQTJCLEVBQTNCLElBQTJCLEVBQUU7Z0JBQW5ELElBQUksY0FBYztnQkFDdEIsbURBQWtCLENBQUMsY0FBYyxFQUFFLG1CQUFtQixHQUFHLGNBQWMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDL0UsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtvQkFDL0IsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLEdBQUcsZ0NBQWdDLENBQUM7aUJBQzlFO2FBQ0Q7U0FDRDtRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ25CLENBQUM7SUFrQk0sNENBQW9CLEdBQTNCO1FBQ0MsT0FBTyxJQUFJLENB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REFBc0IsQ0FBQyx1REFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNqRixPQUFPLHVEQUFzQixDQUFDLEtBQUssQ0FBQztLQUNwQztTQUFNLElBQUksWUFBWSxLQUFLLHVEQUFzQixDQUFDLHVEQUFzQixDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQy9FLE9BQU8sdURBQXNCLENBQUMsR0FBRyxDQUFDO0tBQ2xDO1NBQU07UUFDTixNQUFNLG1EQUFtRCxDQUFDO0tBQzFEO0FBQ0YsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvbi50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb25maWd1cmF0aW9uLnRzXHJcbiAqXHJcbiAqIE1vZHVsZSBmb3IgbG9naWMgcmVsYXRpbmcgdG8gdGhlIHNkayB1c2VyIGNvbmZpZ3VyYXRpb25cclxuICovXHJcblxyXG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tIFwiLi8uLi9VdGlsc1wiO1xyXG5pbXBvcnQgKiBhcyBDb25zdGFudHMgZnJvbSBcIi4vLi4vQ29uc3RhbnRzXCI7XHJcbmltcG9ydCAqIGFzIExvY2FsaXphdGlvbiBmcm9tIFwiLi8uLi9Mb2NhbGl6YXRpb25cIjtcclxuaW1wb3J0IHsgSUNhdGVnb3J5T3B0aW9ucyB9IGZyb20gXCIuL0lDYXRlZ29yeU9wdGlvbnNcIjtcclxuaW1wb3J0ICogYXMgSUluaXRPcHRpb25zIGZyb20gXCIuL0lJbml0T3B0aW9uc1wiO1xyXG5pbXBvcnQgKiBhcyBJTGF1bmNoT3B0aW9ucyBmcm9tIFwiLi9JTGF1bmNoT3B0aW9uc1wiO1xyXG5pbXBvcnQgSVVJU3VydmV5IGZyb20gXCIuLy4uL0Zsb29kZ2F0ZUNvcmUvVUlTdXJ2ZXkvSVVJU3VydmV5XCI7XHJcbmltcG9ydCB7IElPblN1cnZleUFjdGl2YXRlZENhbGxiYWNrLCBJU3VydmV5Rm9ybSwgSVN1cnZleUxhdW5jaGVyIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9BcGkvQXBpXCI7XHJcbmltcG9ydCB7IElTdXJ2ZXlQYXJhbXMgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9JT25TdXJ2ZXlBY3RpdmF0ZWRDYWxsYmFja1wiO1xyXG5pbXBvcnQgeyBVcmxzIH0gZnJvbSBcIi4uL1VJL1VpQ29uc3RhbnRzXCI7XHJcblxyXG5leHBvcnQgKiBmcm9tIFwiLi9JSW5pdE9wdGlvbnNcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vSUxhdW5jaE9wdGlvbnNcIjtcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyByZXByZXNlbnRpbmcgYSBjb25maWd1cmF0aW9uICh1c2VyIHByb3ZpZGVkIG9wdGlvbnMpXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb24ge1xyXG5cdC8qKlxyXG5cdCAqIFZhbGlkYXRlIGNhdGVnb3J5IG9wdGlvbnMsIGRlZmF1bHQgXCJzaG93XCIgdG8gZmFsc2UgaWYgQ2F0ZWdvcnlPcHRpb25zIGlzIG5vdCBwcm92aWRlZC5cclxuXHQgKiBAcGFyYW0gY2F0ZWdvcmllcyBDYXRlZ29yeSBvcHRpb25zXHJcblx0ICogQHJldHVybnMge0lDYXRlZ29yeU9wdGlvbnN9IHRoZSB2YWxpZGF0ZWQgQ2F0ZWdvcnlPcHRpb25zXHJcblx0ICovXHJcblx0cHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVDYXRlZ29yeU9wdGlvbnMoY2F0ZWdvcmllcz86IElDYXRlZ29yeU9wdGlvbnMpOiBJQ2F0ZWdvcnlPcHRpb25zIHtcclxuXHRcdGlmICghY2F0ZWdvcmllcykge1xyXG5cdFx0XHRyZXR1cm4geyBzaG93OiBmYWxzZSB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdFV0aWxzLmV4cGVjdEJvb2xlYW4oY2F0ZWdvcmllcy5zaG93LCBcImNhdGVnb3JpZXMuc2hvd1wiKTtcclxuXHRcdGlmIChjYXRlZ29yaWVzLmN1c3RvbUNhdGVnb3JpZXMpIHtcclxuXHRcdFx0VXRpbHMuZXhwZWN0QXJyYXkoY2F0ZWdvcmllcy5jdXN0b21DYXRlZ29yaWVzLCBcImNhdGVnb3JpZXMuY3VzdG9tQ2F0ZWdvcmllc1wiKTtcclxuXHJcblx0XHRcdGZvciAobGV0IGN1c3RvbUNhdGVnb3J5IG9mIGNhdGVnb3JpZXMuY3VzdG9tQ2F0ZWdvcmllcykge1xyXG5cdFx0XHRcdFV0aWxzLmV4cGVjdFN0cmluZyhjdXN0b21DYXRlZ29yeSwgXCJjdXN0b20gY2F0ZWdvcnkgJ1wiICsgY3VzdG9tQ2F0ZWdvcnkgKyBcIidcIik7XHJcblx0XHRcdFx0aWYgKGN1c3RvbUNhdGVnb3J5Lmxlbmd0aCA+IDIwKSB7XHJcblx0XHRcdFx0XHR0aHJvdyBcImN1c3RvbSBjYXRlZ29yeSAnXCIgKyBjdXN0b21DYXRlZ29yeSArIFwiJyB0b28gbG9uZywgbWF4IDIwIGNoYXJhY3RlcnMuXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNhdGVnb3JpZXM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNvbW1vbkluaXRPcHRpb25zOiBJSW5pdE9wdGlvbnMuSUluaXRPcHRpb25zQ29tbW9uO1xyXG5cclxuXHRwcml2YXRlIGluQXBwRmVlZGJhY2tJbml0T3B0aW9uczogSUluaXRPcHRpb25zLklJbml0T3B0aW9uc0luQXBwRmVlZGJhY2s7XHJcblx0cHJpdmF0ZSBpbkFwcEZlZWRiYWNrTGF1bmNoT3B0aW9uczogSUxhdW5jaE9wdGlvbnMuSUxhdW5jaE9wdGlvbnNJbkFwcEZlZWRiYWNrO1xyXG5cclxuXHRwcml2YXRlIGZsb29kZ2F0ZUluaXRPcHRpb25zOiBJSW5pdE9wdGlvbnMuSUluaXRPcHRpb25zRmxvb2RnYXRlO1xyXG5cdHByaXZhdGUgZmxvb2RnYXRlU3VydmV5OiBJVUlTdXJ2ZXk7XHJcblxyXG5cdHByaXZhdGUgc2RrU2Vzc2lvbklkOiBzdHJpbmc7XHJcblxyXG5cdHByaXZhdGUgZXZlbnRTYW1wbGluZzogSUluaXRPcHRpb25zLklTYW1wbGluZ0luaXRPcHRpb247XHJcblxyXG5cdHByaXZhdGUgY29tbW9uUG9saWN5QWxsb3dBQURDOiBib29sZWFuO1xyXG5cclxuXHRwcml2YXRlIGZlZWRiYWNrU3VibWl0dGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdHB1YmxpYyBnZXRGZWVkYmFja1N1Ym1pdHRlZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmZlZWRiYWNrU3VibWl0dGVkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldEZlZWRiYWNrU3VibWl0dGVkKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcblx0XHR0aGlzLmZlZWRiYWNrU3VibWl0dGVkID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKTogSUluaXRPcHRpb25zLklJbml0T3B0aW9uc0NvbW1vbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb21tb25Jbml0T3B0aW9ucztcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRJbkFwcEZlZWRiYWNrSW5pdE9wdGlvbnMoKTogSUluaXRPcHRpb25zLklJbml0T3B0aW9uc0luQXBwRmVlZGJhY2sge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW5BcHBGZWVkYmFja0luaXRPcHRpb25zO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldEluQXBwRmVlZGJhY2tMYXVuY2hPcHRpb25zKCk6IElMYXVuY2hPcHRpb25zLklMYXVuY2hPcHRpb25zSW5BcHBGZWVkYmFjayB7XHJcblx0XHRyZXR1cm4gdGhpcy5pbkFwcEZlZWRiYWNrTGF1bmNoT3B0aW9ucztcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRGbG9vZGdhdGVJbml0T3B0aW9ucygpOiBJSW5pdE9wdGlvbnMuSUluaXRPcHRpb25zRmxvb2RnYXRlIHtcclxuXHRcdHJldHVybiB0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldEZsb29kZ2F0ZVN1cnZleSgpOiBJVUlTdXJ2ZXkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmxvb2RnYXRlU3VydmV5O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFNka1Nlc3Npb25JZCgpOiBzdHJpbmcge1xyXG5cdFx0aWYgKCF0aGlzLnNka1Nlc3Npb25JZCkge1xyXG5cdFx0XHR0aGlzLnNka1Nlc3Npb25JZCA9IFV0aWxzLmd1aWQoKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5zZGtTZXNzaW9uSWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0RXZlbnRTYW1wbGluZygpOiBJSW5pdE9wdGlvbnMuSVNhbXBsaW5nSW5pdE9wdGlvbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5ldmVudFNhbXBsaW5nO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IGluaXRPcHRpb25zIGZvciBjb21tb24gZnVuY3Rpb25hbGl0eS5cclxuXHQgKi9cclxuXHRwdWJsaWMgc2V0Q29tbW9uSW5pdE9wdGlvbnMocGFzc2VkSW5pdE9wdGlvbnM6IElJbml0T3B0aW9ucy5JSW5pdE9wdGlvbnNDb21tb24pIHtcclxuXHRcdFV0aWxzLmV4cGVjdE9iamVjdChwYXNzZWRJbml0T3B0aW9ucywgXCJwYXNzZWRJbml0T3B0aW9uc1wiKTtcclxuXHRcdGxldCBpbml0T3B0aW9uczogSUluaXRPcHRpb25zLklJbml0T3B0aW9uc0NvbW1vbiA9IHtcclxuXHRcdFx0YXBwSWQ6IHBhc3NlZEluaXRPcHRpb25zLmFwcElkLFxyXG5cdFx0XHRhcHBsaWNhdGlvbkdyb3VwOiBwYXNzZWRJbml0T3B0aW9ucy5hcHBsaWNhdGlvbkdyb3VwIHx8IHt9LFxyXG5cdFx0XHRidWlsZDogcGFzc2VkSW5pdE9wdGlvbnMuYnVpbGQsXHJcblx0XHRcdGNpZDogcGFzc2VkSW5pdE9wdGlvbnMuY2lkLFxyXG5cdFx0XHRlbnZpcm9ubWVudDogcGFzc2VkSW5pdE9wdGlvbnMuZW52aXJvbm1lbnQsXHJcblx0XHRcdGludGxGaWxlbmFtZTogcGFzc2VkSW5pdE9wdGlvbnMuaW50bEZpbGVuYW1lLFxyXG5cdFx0XHRpbnRsVXJsOiBwYXNzZWRJbml0T3B0aW9ucy5pbnRsVXJsLFxyXG5cdFx0XHR3ZWJTdXJmYWNlc1Jlc291cmNlQmFzZVVybDogcGFzc2VkSW5pdE9wdGlvbnMud2ViU3VyZmFjZXNSZXNvdXJjZUJhc2VVcmwsXHJcblx0XHRcdGxvY2FsZTogcGFzc2VkSW5pdE9wdGlvbnMubG9jYWxlLFxyXG5cdFx0XHRvbkVycm9yOiBwYXNzZWRJbml0T3B0aW9ucy5vbkVycm9yLFxyXG5cdFx0XHRvcmlnaW5hbExvY2FsZTogcGFzc2VkSW5pdE9wdGlvbnMubG9jYWxlLFxyXG5cdFx0XHRwcmltYXJ5Q29sb3VyOiBwYXNzZWRJbml0T3B0aW9ucy5wcmltYXJ5Q29sb3VyLFxyXG5cdFx0XHRzZWNvbmRhcnlDb2xvdXI6IHBhc3NlZEluaXRPcHRpb25zLnNlY29uZGFyeUNvbG91cixcclxuXHRcdFx0c2Vzc2lvbklkOiBwYXNzZWRJbml0T3B0aW9ucy5zZXNzaW9uSWQsXHJcblx0XHRcdHN0eWxlc1VybDogcGFzc2VkSW5pdE9wdGlvbnMuc3R5bGVzVXJsLFxyXG5cdFx0XHR0ZWxlbWV0cnlHcm91cDogcGFzc2VkSW5pdE9wdGlvbnMudGVsZW1ldHJ5R3JvdXAgfHwge30sXHJcblx0XHRcdHVzZXJFbWFpbDogcGFzc2VkSW5pdE9wdGlvbnMudXNlckVtYWlsLFxyXG5cdFx0XHR3ZWJHcm91cDogcGFzc2VkSW5pdE9wdGlvbnMud2ViR3JvdXAgfHwge30sXHJcblx0XHRcdGV2ZW50U2FtcGxpbmc6IHBhc3NlZEluaXRPcHRpb25zLmV2ZW50U2FtcGxpbmcsXHJcblx0XHRcdHBldHJvbFRpbWVvdXQ6IHBhc3NlZEluaXRPcHRpb25zLnBldHJvbFRpbWVvdXQsXHJcblx0XHRcdGlzQ29tbWVyY2lhbEhvc3Q6IHBhc3NlZEluaXRPcHRpb25zLmlzQ29tbWVyY2lhbEhvc3QsXHJcblx0XHRcdGN1c3RvbVJlc291cmNlc1NldEV4dGVybmFsbHk6IHBhc3NlZEluaXRPcHRpb25zLmN1c3RvbVJlc291cmNlc1NldEV4dGVybmFsbHksXHJcblx0XHRcdGVtYWlsUG9saWN5VmFsdWU6IHBhc3NlZEluaXRPcHRpb25zLmVtYWlsUG9saWN5VmFsdWUsXHJcblx0XHRcdHNjcmVlbnNob3RQb2xpY3lWYWx1ZTogcGFzc2VkSW5pdE9wdGlvbnMuc2NyZWVuc2hvdFBvbGljeVZhbHVlLFxyXG5cdFx0XHRhZ2VHcm91cDogcGFzc2VkSW5pdE9wdGlvbnMuYWdlR3JvdXAsXHJcblx0XHRcdGF1dGhlbnRpY2F0aW9uVHlwZTogcGFzc2VkSW5pdE9wdGlvbnMuYXV0aGVudGljYXRpb25UeXBlLFxyXG5cdFx0XHRhcHBsaWNhdGlvblNldHRpbmdzOiBwYXNzZWRJbml0T3B0aW9ucy5hcHBsaWNhdGlvblNldHRpbmdzLFxyXG5cdFx0XHR3ZWJTdXJmYWNlc1NldHRpbmdzOiBwYXNzZWRJbml0T3B0aW9ucy53ZWJTdXJmYWNlc1NldHRpbmdzLFxyXG5cdFx0XHRwcml2YWN5VXJsOiBwYXNzZWRJbml0T3B0aW9ucy5wcml2YWN5VXJsIHx8IFVybHMuUHJpdmFjeVN0YXRlbWVudExpbmssXHJcblx0XHRcdHJldGVudGlvbkR1cmF0aW9uRGF5czogcGFzc2VkSW5pdE9wdGlvbnMucmV0ZW50aW9uRHVyYXRpb25EYXlzLFxyXG5cdFx0fTtcclxuXHJcblx0XHRVdGlscy5leHBlY3ROdW1iZXIoaW5pdE9wdGlvbnMuYXBwSWQsIFwiaW5pdE9wdGlvbnMuYXBwSWRcIik7XHJcblx0XHRpZiAoIShpbml0T3B0aW9ucy5hcHBJZCAlIDEgPT09IDAgJiYgaW5pdE9wdGlvbnMuYXBwSWQgPiAwKSkge1xyXG5cdFx0XHR0aHJvdyBcImluaXRPcHRpb25zLmFwcElkIGlzIG5vdCBhIHBvc2l0aXZlIGludGVnZXI6IFwiICsgaW5pdE9wdGlvbnMuYXBwSWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gaWYgZGVmaW5lZCwgaXQgc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMucmV0ZW50aW9uRHVyYXRpb25EYXlzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0VXRpbHMuZXhwZWN0TnVtYmVyKGluaXRPcHRpb25zLnJldGVudGlvbkR1cmF0aW9uRGF5cywgXCJpbml0T3B0aW9ucy5yZXRlbnRpb25EdXJhdGlvbkRheXNcIik7XHJcblx0XHRcdGlmICghKGluaXRPcHRpb25zLnJldGVudGlvbkR1cmF0aW9uRGF5cyAlIDEgPT09IDAgJiYgaW5pdE9wdGlvbnMucmV0ZW50aW9uRHVyYXRpb25EYXlzID4gMCkpIHtcclxuXHRcdFx0XHR0aHJvdyBcImluaXRPcHRpb25zLnJldGVudGlvbkR1cmF0aW9uRGF5cyBpcyBub3QgYSBwb3NpdGl2ZSBpbnRlZ2VyOiBcIiArIGluaXRPcHRpb25zLnJldGVudGlvbkR1cmF0aW9uRGF5cztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYml0d2lzZVxyXG5cdFx0Y29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSBJSW5pdE9wdGlvbnMuQ3VzdG9tUmVzb3VyY2VzLlN0cmluZ3MgfCBJSW5pdE9wdGlvbnMuQ3VzdG9tUmVzb3VyY2VzLkNzcztcclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMuY3VzdG9tUmVzb3VyY2VzU2V0RXh0ZXJuYWxseSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGluaXRPcHRpb25zLmN1c3RvbVJlc291cmNlc1NldEV4dGVybmFsbHkgPSBJSW5pdE9wdGlvbnMuQ3VzdG9tUmVzb3VyY2VzLk5vbmU7XHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYml0d2lzZVxyXG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgKGluaXRPcHRpb25zLmN1c3RvbVJlc291cmNlc1NldEV4dGVybmFsbHkpICE9PSBcIm51bWJlclwiIHx8XHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tYml0d2lzZVxyXG5cdFx0XHQoaW5pdE9wdGlvbnMuY3VzdG9tUmVzb3VyY2VzU2V0RXh0ZXJuYWxseSB8IGV4cGVjdGVkVmFsdWVzKSAhPT0gZXhwZWN0ZWRWYWx1ZXMpIHtcclxuXHRcdFx0dGhyb3cgXCJpbml0T3B0aW9ucy5jdXN0b21SZXNvdXJjZXNTZXRFeHRlcm5hbGx5IGhhcyBhbiBpbnZhbGlkIHZhbHVlOiBcIiArIGluaXRPcHRpb25zLmN1c3RvbVJlc291cmNlc1NldEV4dGVybmFsbHk7XHJcblx0XHR9XHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcclxuXHRcdGlmICgoaW5pdE9wdGlvbnMuY3VzdG9tUmVzb3VyY2VzU2V0RXh0ZXJuYWxseSAmIElJbml0T3B0aW9ucy5DdXN0b21SZXNvdXJjZXMuQ3NzKSAhPT0gSUluaXRPcHRpb25zLkN1c3RvbVJlc291cmNlcy5Dc3MpIHtcclxuXHRcdFx0VXRpbHMuZXhwZWN0U3RyaW5nKGluaXRPcHRpb25zLnN0eWxlc1VybCwgXCJpbml0T3B0aW9ucy5zdHlsZXNVcmxcIik7XHJcblx0XHR9XHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcclxuXHRcdGlmICgoaW5pdE9wdGlvbnMuY3VzdG9tUmVzb3VyY2VzU2V0RXh0ZXJuYWxseSAmIElJbml0T3B0aW9ucy5DdXN0b21SZXNvdXJjZXMuU3RyaW5ncykgIT09IElJbml0T3B0aW9ucy5DdXN0b21SZXNvdXJjZXMuU3RyaW5ncykge1xyXG5cdFx0XHRVdGlscy5leHBlY3RTdHJpbmcoaW5pdE9wdGlvbnMuaW50bFVybCwgXCJpbml0T3B0aW9ucy5pbnRsVXJsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbml0T3B0aW9ucy5pbnRsRmlsZW5hbWUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRVdGlscy5leHBlY3RTdHJpbmcoaW5pdE9wdGlvbnMuaW50bEZpbGVuYW1lLCBcImluaXRPcHRpb25zLmludGxGaWxlbmFtZVwiKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGluaXRPcHRpb25zLmludGxGaWxlbmFtZSA9IFwib2ZmaWNlYnJvd3NlcmZlZWRiYWNrc3RyaW5ncy5qc1wiO1xyXG5cdFx0fVxyXG5cclxuXHRcdFV0aWxzLmV4cGVjdE51bWJlcihpbml0T3B0aW9ucy5lbnZpcm9ubWVudCwgXCJpbml0T3B0aW9ucy5lbnZpcm9ubWVudFwiKTtcclxuXHRcdGlmICghKGluaXRPcHRpb25zLmVudmlyb25tZW50ID09PSAxIHx8IGluaXRPcHRpb25zLmVudmlyb25tZW50ID09PSAwKSkge1xyXG5cdFx0XHR0aHJvdyBcImluaXRPcHRpb25zLmVudmlyb25tZW50IGhhcyBhIGJhZCB2YWx1ZTogXCIgKyBpbml0T3B0aW9ucy5lbnZpcm9ubWVudDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMudXNlckVtYWlsICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0VXRpbHMuZXhwZWN0U3RyaW5nKGluaXRPcHRpb25zLnVzZXJFbWFpbCwgXCJpbml0T3B0aW9ucy51c2VyRW1haWxcIik7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpbml0T3B0aW9ucy51c2VyRW1haWwgPSBcIlwiO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbml0T3B0aW9ucy5zZXNzaW9uSWQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRVdGlscy5leHBlY3RTdHJpbmcoaW5pdE9wdGlvbnMuc2Vzc2lvbklkLCBcImluaXRPcHRpb25zLnNlc3Npb25JZFwiKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGluaXRPcHRpb25zLnNlc3Npb25JZCA9IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCI7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ29weSBzZXNzaW9uSUQgb3ZlciB0byB0ZWxlbWV0cnlHcm91cFxyXG5cdFx0aW5pdE9wdGlvbnMudGVsZW1ldHJ5R3JvdXAucHJvY2Vzc1Nlc3Npb25JZCA9IGluaXRPcHRpb25zLnNlc3Npb25JZDtcclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMuY2lkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0VXRpbHMuZXhwZWN0U3RyaW5nKGluaXRPcHRpb25zLmNpZCwgXCJpbml0T3B0aW9ucy5jaWRcIik7XHJcblxyXG5cdFx0XHQvLyBDb3B5IGNpZCBvdmVyIHRvIGV4dGVuZGVkTWFuaWZlc3REYXRhIG9mIGFwcGxpY2F0aW9uR3JvdXBcclxuXHRcdFx0aW5pdE9wdGlvbnMuYXBwbGljYXRpb25Hcm91cC5leHRlbmRlZE1hbmlmZXN0RGF0YSA9IEpTT04uc3RyaW5naWZ5KHsgY2lkOiBpbml0T3B0aW9ucy5jaWQgfSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluaXRPcHRpb25zLmJ1aWxkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0VXRpbHMuZXhwZWN0U3RyaW5nKGluaXRPcHRpb25zLmJ1aWxkLCBcImluaXRPcHRpb25zLmJ1aWxkXCIpO1xyXG5cdFx0XHRsZXQgYnVpbGRSZWdleCA9IFwiXlswLTldezEsOX0oXFxcXC5bMC05XXsxLDl9KT8oXFxcXC5bMC05XXsxLDl9KT8oXFxcXC5bMC05XXsxLDl9KT8kXCI7XHJcblx0XHRcdGlmICghbmV3IFJlZ0V4cChidWlsZFJlZ2V4KS50ZXN0KGluaXRPcHRpb25zLmJ1aWxkKSkge1xyXG5cdFx0XHRcdGluaXRPcHRpb25zLmJ1aWxkID0gXCIwLjAuMC4wXCI7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGluaXRPcHRpb25zLmJ1aWxkID0gXCIwLjAuMC4wXCI7XHJcblx0XHR9XHJcblx0XHQvLyBDb3B5IGJ1aWxkIG92ZXIgdG8gdGVsZW1ldHJ5R3JvdXBcclxuXHRcdGluaXRPcHRpb25zLnRlbGVtZXRyeUdyb3VwLm9mZmljZUJ1aWxkID0gaW5pdE9wdGlvbnMuYnVpbGQ7XHJcblxyXG5cdFx0bGV0IGhleENvbG91clJlZ2V4ID0gbmV3IFJlZ0V4cChcIl4jWzAtOWEtZl17M30oWzAtOWEtZl17M30pPyRcIiwgXCJpXCIpO1xyXG5cdFx0aWYgKGluaXRPcHRpb25zLnByaW1hcnlDb2xvdXIgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRpZiAoIWhleENvbG91clJlZ2V4LnRlc3QoaW5pdE9wdGlvbnMucHJpbWFyeUNvbG91cikpIHtcclxuXHRcdFx0XHRpbml0T3B0aW9ucy5wcmltYXJ5Q29sb3VyID0gdW5kZWZpbmVkO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluaXRPcHRpb25zLnNlY29uZGFyeUNvbG91ciAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGlmICghaGV4Q29sb3VyUmVnZXgudGVzdChpbml0T3B0aW9ucy5zZWNvbmRhcnlDb2xvdXIpKSB7XHJcblx0XHRcdFx0aW5pdE9wdGlvbnMuc2Vjb25kYXJ5Q29sb3VyID0gdW5kZWZpbmVkO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluaXRPcHRpb25zLmxvY2FsZSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFV0aWxzLmV4cGVjdFN0cmluZyhpbml0T3B0aW9ucy5sb2NhbGUsIFwiaW5pdE9wdGlvbnMubG9jYWxlXCIpO1xyXG5cdFx0XHRpbml0T3B0aW9ucy5sb2NhbGUgPSBMb2NhbGl6YXRpb24udmFsaWRhdGUoaW5pdE9wdGlvbnMubG9jYWxlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGluaXRPcHRpb25zLmxvY2FsZSA9IFwiZW5cIjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMub25FcnJvciA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGluaXRPcHRpb25zLm9uRXJyb3IgPSAoZXJyOiBzdHJpbmcpID0+IHsgcmV0dXJuOyB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbml0T3B0aW9ucy5wZXRyb2xUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0VXRpbHMuZXhwZWN0TnVtYmVyKGluaXRPcHRpb25zLnBldHJvbFRpbWVvdXQsIFwiaW5pdE9wdGlvbnMucGV0cm9sVGltZW91dFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMuYXV0aGVudGljYXRpb25UeXBlICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0VXRpbHMuZXhwZWN0RW51bShpbml0T3B0aW9ucy5hdXRoZW50aWNhdGlvblR5cGUsIElJbml0T3B0aW9ucy5BdXRoZW50aWNhdGlvblR5cGUsIFwiaW5pdE9wdGlvbnMuYXV0aGVudGljYXRpb25UeXBlXCIpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aW5pdE9wdGlvbnMuYXV0aGVudGljYXRpb25UeXBlID0gSUluaXRPcHRpb25zLkF1dGhlbnRpY2F0aW9uVHlwZS5VbmF1dGhlbnRpY2F0ZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRm9yIEFBRCBvciBVbmF1dGhlbnRpY2F0ZWQsIGFnZUdyb3VwIHZhbHVlIGlzIHVua25vd24sIHNvIGl0J3Mgc2FmZSB0byBvbmx5IHBhcnNlIGZvciBNU0FcclxuXHRcdGlmIChpbml0T3B0aW9ucy5hZ2VHcm91cCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFV0aWxzLmV4cGVjdEVudW0oaW5pdE9wdGlvbnMuYWdlR3JvdXAsIElJbml0T3B0aW9ucy5BZ2VHcm91cCwgXCJpbml0T3B0aW9ucy5hZ2VHcm91cFwiKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGluaXRPcHRpb25zLmFnZUdyb3VwID0gSUluaXRPcHRpb25zLkFnZUdyb3VwLlVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmV2ZW50U2FtcGxpbmcgPSB0aGlzLnBhcnNlRXZlbnRTYW1wbGluZ09wdGlvbihpbml0T3B0aW9ucy5ldmVudFNhbXBsaW5nKTtcclxuXHJcblx0XHR0aGlzLmNvbW1vbkluaXRPcHRpb25zID0gaW5pdE9wdGlvbnM7XHJcblx0XHR0aGlzLmNvbW1vblBvbGljeUFsbG93QUFEQyA9IHRoaXMuZGV0ZXJtaW5lQUFEQ1BvbGljeShpbml0T3B0aW9ucy5hdXRoZW50aWNhdGlvblR5cGUsIGluaXRPcHRpb25zLmFnZUdyb3VwKTtcclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMuaXNDb21tZXJjaWFsSG9zdCA9PT0gdW5kZWZpbmVkIHx8IGluaXRPcHRpb25zLmlzQ29tbWVyY2lhbEhvc3QgPT0gbnVsbCkge1xyXG5cdFx0XHRpbml0T3B0aW9ucy5pc0NvbW1lcmNpYWxIb3N0ID0gZmFsc2U7IC8vIEJ5IGRlZmF1bHQgcHJpdmFjeSBjb25zZW50IGlzIG5vdCBzaG93bi4gKEZyb20gU0RLJ3MgcGVyc3BlY3RpdmUpXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRVdGlscy5leHBlY3RCb29sZWFuKGluaXRPcHRpb25zLmlzQ29tbWVyY2lhbEhvc3QsIFwiaW5pdE9wdGlvbnMuaXNDb21tZXJjaWFsSG9zdFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMuZW1haWxQb2xpY3lWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGluaXRPcHRpb25zLmVtYWlsUG9saWN5VmFsdWUgPSBDb25zdGFudHMuT0NQU1ZhbHVlcy5Ob3RDb25maWd1cmVkO1xyXG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgKGluaXRPcHRpb25zLmVtYWlsUG9saWN5VmFsdWUpICE9PSBcIm51bWJlclwiIHx8XHJcblx0XHRcdChpbml0T3B0aW9ucy5lbWFpbFBvbGljeVZhbHVlICE9PSBDb25zdGFudHMuT0NQU1ZhbHVlcy5Ob3RDb25maWd1cmVkICYmXHJcblx0XHRcdFx0aW5pdE9wdGlvbnMuZW1haWxQb2xpY3lWYWx1ZSAhPT0gQ29uc3RhbnRzLk9DUFNWYWx1ZXMuRW5hYmxlZCAmJlxyXG5cdFx0XHRcdGluaXRPcHRpb25zLmVtYWlsUG9saWN5VmFsdWUgIT09IENvbnN0YW50cy5PQ1BTVmFsdWVzLkRpc2FibGVkKSkge1xyXG5cdFx0XHR0aHJvdyBcImluaXRPcHRpb25zLmVtYWlsUG9saWN5VmFsdWUgaGFzIGFuIGludmFsaWQgdmFsdWU6IFwiICsgaW5pdE9wdGlvbnMuZW1haWxQb2xpY3lWYWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMuc2NyZWVuc2hvdFBvbGljeVZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aW5pdE9wdGlvbnMuc2NyZWVuc2hvdFBvbGljeVZhbHVlID0gQ29uc3RhbnRzLk9DUFNWYWx1ZXMuTm90Q29uZmlndXJlZDtcclxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIChpbml0T3B0aW9ucy5zY3JlZW5zaG90UG9saWN5VmFsdWUpICE9PSBcIm51bWJlclwiIHx8XHJcblx0XHRcdGluaXRPcHRpb25zLnNjcmVlbnNob3RQb2xpY3lWYWx1ZSAhPT0gQ29uc3RhbnRzLk9DUFNWYWx1ZXMuTm90Q29uZmlndXJlZCAmJlxyXG5cdFx0XHRpbml0T3B0aW9ucy5zY3JlZW5zaG90UG9saWN5VmFsdWUgIT09IENvbnN0YW50cy5PQ1BTVmFsdWVzLkVuYWJsZWQgJiZcclxuXHRcdFx0aW5pdE9wdGlvbnMuc2NyZWVuc2hvdFBvbGljeVZhbHVlICE9PSBDb25zdGFudHMuT0NQU1ZhbHVlcy5EaXNhYmxlZCkge1xyXG5cdFx0XHR0aHJvdyBcImluaXRPcHRpb25zLnNjcmVlbnNob3RQb2xpY3lWYWx1ZSBoYXMgYW4gaW52YWxpZCB2YWx1ZTogXCIgKyBpbml0T3B0aW9ucy5zY3JlZW5zaG90UG9saWN5VmFsdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluaXRPcHRpb25zLnByaXZhY3lVcmwgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRVdGlscy5leHBlY3RTdHJpbmcoaW5pdE9wdGlvbnMucHJpdmFjeVVybCwgXCJpbml0T3B0aW9ucy5wcml2YWN5VXJsXCIpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aW5pdE9wdGlvbnMucHJpdmFjeVVybCA9IFVybHMuUHJpdmFjeVN0YXRlbWVudExpbms7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgaW5pdCBvcHRpb25zIGZvciBpbkFwcEZlZWRiYWNrXHJcblx0ICovXHJcblx0cHVibGljIHNldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucyhwYXNzZWRJbml0T3B0aW9uczogSUluaXRPcHRpb25zLklJbml0T3B0aW9uc0luQXBwRmVlZGJhY2spIHtcclxuXHRcdFV0aWxzLmV4cGVjdE9iamVjdChwYXNzZWRJbml0T3B0aW9ucywgXCJwYXNzZWRJbml0T3B0aW9uc1wiKTtcclxuXHJcblx0XHRsZXQgaW5pdE9wdGlvbnM6IElJbml0T3B0aW9ucy5JSW5pdE9wdGlvbnNJbkFwcEZlZWRiYWNrID0ge1xyXG5cdFx0XHRidWdGb3JtOiBwYXNzZWRJbml0T3B0aW9ucy5idWdGb3JtLFxyXG5cdFx0XHRvbkRpc21pc3M6IHBhc3NlZEluaXRPcHRpb25zLm9uRGlzbWlzcyxcclxuXHRcdFx0c2NyZWVuc2hvdDogcGFzc2VkSW5pdE9wdGlvbnMuc2NyZWVuc2hvdCxcclxuXHRcdFx0c2hvd0VtYWlsQWRkcmVzczogcGFzc2VkSW5pdE9wdGlvbnMuc2hvd0VtYWlsQWRkcmVzcyxcclxuXHRcdFx0dXNlckVtYWlsOiBwYXNzZWRJbml0T3B0aW9ucy51c2VyRW1haWwsXHJcblx0XHRcdHRyYW5zaXRpb25FbmFibGVkOiBwYXNzZWRJbml0T3B0aW9ucy50cmFuc2l0aW9uRW5hYmxlZCxcclxuXHRcdFx0aXNTaG93VGhhbmtzOiBwYXNzZWRJbml0T3B0aW9ucy5pc1Nob3dUaGFua3MsXHJcblx0XHRcdHNlbmRGZWVkYmFja1BvbGljeVZhbHVlOiBwYXNzZWRJbml0T3B0aW9ucy5zZW5kRmVlZGJhY2tQb2xpY3lWYWx1ZSxcclxuXHRcdFx0ZmVlZGJhY2tGb3J1bVVybDogcGFzc2VkSW5pdE9wdGlvbnMuZmVlZGJhY2tGb3J1bVVybCAhPT0gdW5kZWZpbmVkID9cclxuXHRcdFx0XHRwYXNzZWRJbml0T3B0aW9ucy5mZWVkYmFja0ZvcnVtVXJsIDpcclxuXHRcdFx0XHR1bmRlZmluZWQsXHJcblx0XHRcdG15RmVlZGJhY2tGb3J1bVVybDogcGFzc2VkSW5pdE9wdGlvbnMubXlGZWVkYmFja0ZvcnVtVXJsICE9PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRcdHBhc3NlZEluaXRPcHRpb25zLm15RmVlZGJhY2tGb3J1bVVybCA6XHJcblx0XHRcdFx0dW5kZWZpbmVkLFxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMub25EaXNtaXNzID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aW5pdE9wdGlvbnMub25EaXNtaXNzID0gZnVuY3Rpb24gKHN1Ym1pdHRlZDogYm9vbGVhbikgeyByZXR1cm47IH07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluaXRPcHRpb25zLmJ1Z0Zvcm0gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRVdGlscy5leHBlY3RCb29sZWFuKGluaXRPcHRpb25zLmJ1Z0Zvcm0sIFwiaW5pdE9wdGlvbnMuYnVnRm9ybVwiKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGluaXRPcHRpb25zLmJ1Z0Zvcm0gPSBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMudXNlckVtYWlsICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0VXRpbHMuZXhwZWN0U3RyaW5nKGluaXRPcHRpb25zLnVzZXJFbWFpbCwgXCJpbml0T3B0aW9ucy51c2VyRW1haWxcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluaXRPcHRpb25zLnNjcmVlbnNob3QgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRVdGlscy5leHBlY3RCb29sZWFuKGluaXRPcHRpb25zLnNjcmVlbnNob3QsIFwiaW5pdE9wdGlvbnMuc2NyZWVuc2hvdFwiKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGluaXRPcHRpb25zLnNjcmVlbnNob3QgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbml0T3B0aW9ucy5zaG93RW1haWxBZGRyZXNzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0VXRpbHMuZXhwZWN0Qm9vbGVhbihpbml0T3B0aW9ucy5zaG93RW1haWxBZGRyZXNzLCBcImluaXRPcHRpb25zLnNob3dFbWFpbEFkZHJlc3NcIik7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpbml0T3B0aW9ucy5zaG93RW1haWxBZGRyZXNzID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMuZmVlZGJhY2tGb3J1bVVybCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFV0aWxzLmV4cGVjdFN0cmluZyhpbml0T3B0aW9ucy5mZWVkYmFja0ZvcnVtVXJsLCBcImluaXRPcHRpb25zLmZlZWRiYWNrRm9ydW1VcmxcIik7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpbml0T3B0aW9ucy5mZWVkYmFja0ZvcnVtVXJsID0gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbml0T3B0aW9ucy5pc1Nob3dUaGFua3MgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRVdGlscy5leHBlY3RCb29sZWFuKGluaXRPcHRpb25zLmlzU2hvd1RoYW5rcywgXCJpbml0T3B0aW9ucy5pc1Nob3dUaGFua3NcIik7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpbml0T3B0aW9ucy5pc1Nob3dUaGFua3MgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbml0T3B0aW9ucy5teUZlZWRiYWNrRm9ydW1VcmwgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRVdGlscy5leHBlY3RTdHJpbmcoaW5pdE9wdGlvbnMubXlGZWVkYmFja0ZvcnVtVXJsLCBcImluaXRPcHRpb25zLm15RmVlZGJhY2tGb3J1bVVybFwiKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGluaXRPcHRpb25zLm15RmVlZGJhY2tGb3J1bVVybCA9IHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMudHJhbnNpdGlvbkVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRpbml0T3B0aW9ucy50cmFuc2l0aW9uRW5hYmxlZCA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluaXRPcHRpb25zLnNlbmRGZWVkYmFja1BvbGljeVZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aW5pdE9wdGlvbnMuc2VuZEZlZWRiYWNrUG9saWN5VmFsdWUgPSBDb25zdGFudHMuT0NQU1ZhbHVlcy5Ob3RDb25maWd1cmVkO1xyXG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgKGluaXRPcHRpb25zLnNlbmRGZWVkYmFja1BvbGljeVZhbHVlKSAhPT0gXCJudW1iZXJcIiB8fFxyXG5cdFx0XHQoaW5pdE9wdGlvbnMuc2VuZEZlZWRiYWNrUG9saWN5VmFsdWUgIT09IENvbnN0YW50cy5PQ1BTVmFsdWVzLk5vdENvbmZpZ3VyZWQgJiZcclxuXHRcdFx0XHRpbml0T3B0aW9ucy5zZW5kRmVlZGJhY2tQb2xpY3lWYWx1ZSAhPT0gQ29uc3RhbnRzLk9DUFNWYWx1ZXMuRW5hYmxlZCAmJlxyXG5cdFx0XHRcdGluaXRPcHRpb25zLnNlbmRGZWVkYmFja1BvbGljeVZhbHVlICE9PSBDb25zdGFudHMuT0NQU1ZhbHVlcy5EaXNhYmxlZCkpIHtcclxuXHRcdFx0dGhyb3cgXCJpbml0T3B0aW9ucy5zZW5kRmVlZGJhY2tQb2xpY3lWYWx1ZSBoYXMgYW4gaW52YWxpZCB2YWx1ZTogXCIgKyBpbml0T3B0aW9ucy5zZW5kRmVlZGJhY2tQb2xpY3lWYWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmluQXBwRmVlZGJhY2tJbml0T3B0aW9ucyA9IGluaXRPcHRpb25zO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IGxhdW5jaCBvcHRpb25zIGZvciBpbkFwcEZlZWRiYWNrXHJcblx0ICovXHJcblx0cHVibGljIHNldEluQXBwRmVlZGJhY2tMYXVuY2hPcHRpb25zKGxhdW5jaE9wdGlvbnM/OiBJTGF1bmNoT3B0aW9ucy5JTGF1bmNoT3B0aW9uc0luQXBwRmVlZGJhY2spIHtcclxuXHRcdGlmICghdGhpcy5jb21tb25Jbml0T3B0aW9ucykge1xyXG5cdFx0XHR0aHJvdyBcImNvbW1vbkluaXRPcHRpb25zIG5vdCBzZXRcIjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWxhdW5jaE9wdGlvbnMpIHtcclxuXHRcdFx0bGF1bmNoT3B0aW9ucyA9IHt9O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE92ZXJyaWRlIGFueSBzZXR0aW5nIGRvbmUgaW4gTGF1bmNoT3B0aW9ucyBmb3IgdGhlIG1ldGFkYXRhR3JvdXBzXHJcblx0XHR0aGlzLmNvbW1vbkluaXRPcHRpb25zLmFwcGxpY2F0aW9uR3JvdXAgPSBVdGlscy5vdmVycmlkZVZhbHVlcyhsYXVuY2hPcHRpb25zLmFwcGxpY2F0aW9uR3JvdXAsXHJcblx0XHRcdHRoaXMuY29tbW9uSW5pdE9wdGlvbnMuYXBwbGljYXRpb25Hcm91cCk7XHJcblx0XHR0aGlzLmNvbW1vbkluaXRPcHRpb25zLnRlbGVtZXRyeUdyb3VwID0gVXRpbHMub3ZlcnJpZGVWYWx1ZXMobGF1bmNoT3B0aW9ucy50ZWxlbWV0cnlHcm91cCxcclxuXHRcdFx0dGhpcy5jb21tb25Jbml0T3B0aW9ucy50ZWxlbWV0cnlHcm91cCk7XHJcblx0XHR0aGlzLmNvbW1vbkluaXRPcHRpb25zLndlYkdyb3VwID0gVXRpbHMub3ZlcnJpZGVWYWx1ZXMobGF1bmNoT3B0aW9ucy53ZWJHcm91cCxcclxuXHRcdFx0dGhpcy5jb21tb25Jbml0T3B0aW9ucy53ZWJHcm91cCk7XHJcblxyXG5cdFx0bGF1bmNoT3B0aW9ucy5jYXRlZ29yaWVzID0gQ29uZmlndXJhdGlvbi52YWxpZGF0ZUNhdGVnb3J5T3B0aW9ucyhsYXVuY2hPcHRpb25zLmNhdGVnb3JpZXMpO1xyXG5cclxuXHRcdHRoaXMuaW5BcHBGZWVkYmFja0xhdW5jaE9wdGlvbnMgPSBsYXVuY2hPcHRpb25zO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IGluaXQgb3B0aW9ucyBmb3IgZmxvb2RnYXRlXHJcblx0ICovXHJcblx0cHVibGljIHNldEZsb29kZ2F0ZUluaXRPcHRpb25zKHBhc3NlZEluaXRPcHRpb25zOiBJSW5pdE9wdGlvbnMuSUluaXRPcHRpb25zRmxvb2RnYXRlKSB7XHJcblx0XHRVdGlscy5leHBlY3RPYmplY3QocGFzc2VkSW5pdE9wdGlvbnMsIFwicGFzc2VkSW5pdE9wdGlvbnNcIik7XHJcblxyXG5cdFx0bGV0IGluaXRPcHRpb25zOiBJSW5pdE9wdGlvbnMuSUluaXRPcHRpb25zRmxvb2RnYXRlID0ge1xyXG5cdFx0XHRhdXRvRGlzbWlzczogcGFzc2VkSW5pdE9wdGlvbnMuYXV0b0Rpc21pc3MsXHJcblx0XHRcdGNhbXBhaWduRGVmaW5pdGlvbnM6IHBhc3NlZEluaXRPcHRpb25zLmNhbXBhaWduRGVmaW5pdGlvbnMsXHJcblx0XHRcdGNhbXBhaWduRmxpZ2h0czogcGFzc2VkSW5pdE9wdGlvbnMuY2FtcGFpZ25GbGlnaHRzLFxyXG5cdFx0XHRjYW1wYWlnblF1ZXJ5UGFyYW1ldGVyczogcGFzc2VkSW5pdE9wdGlvbnMuY2FtcGFpZ25RdWVyeVBhcmFtZXRlcnMsXHJcblx0XHRcdG9uRGlzbWlzczogcGFzc2VkSW5pdE9wdGlvbnMub25EaXNtaXNzLFxyXG5cdFx0XHRvblN1cnZleUFjdGl2YXRlZENhbGxiYWNrOiBwYXNzZWRJbml0T3B0aW9ucy5vblN1cnZleUFjdGl2YXRlZENhbGxiYWNrLFxyXG5cdFx0XHRzZXR0aW5nU3RvcmFnZUNhbGxiYWNrOiBwYXNzZWRJbml0T3B0aW9ucy5zZXR0aW5nU3RvcmFnZUNhbGxiYWNrLFxyXG5cdFx0XHR1SVN0cmluZ0dldHRlcjogcGFzc2VkSW5pdE9wdGlvbnMudUlTdHJpbmdHZXR0ZXIsXHJcblx0XHRcdGF1dGhUb2tlbkNhbGxiYWNrOiBwYXNzZWRJbml0T3B0aW9ucy5hdXRoVG9rZW5DYWxsYmFjayxcclxuXHRcdFx0c3VydmV5RW5hYmxlZDogcGFzc2VkSW5pdE9wdGlvbnMuc3VydmV5RW5hYmxlZCxcclxuXHRcdFx0c2hvd0VtYWlsQWRkcmVzczogcGFzc2VkSW5pdE9wdGlvbnMuc2hvd0VtYWlsQWRkcmVzcyxcclxuXHRcdFx0YXVnTG9vcENhbGxiYWNrOiBwYXNzZWRJbml0T3B0aW9ucy5hdWdMb29wQ2FsbGJhY2ssXHJcblx0XHRcdGN1c3RvbWVyVm9pY2VTdXJ2ZXlQYXJhbXM6IHBhc3NlZEluaXRPcHRpb25zLmN1c3RvbWVyVm9pY2VTdXJ2ZXlQYXJhbXMsXHJcblx0XHRcdHN1cnZleUNTU1BhcmFtczogcGFzc2VkSW5pdE9wdGlvbnMuc3VydmV5Q1NTUGFyYW1zLFxyXG5cdFx0XHRnb3Zlcm5hbmNlU2VydmljZUVuYWJsZWQ6IHBhc3NlZEluaXRPcHRpb25zLmdvdmVybmFuY2VTZXJ2aWNlRW5hYmxlZCxcclxuXHRcdFx0Z292ZXJuYW5jZVNlcnZpY2VDb25maWc6IHBhc3NlZEluaXRPcHRpb25zLmdvdmVybmFuY2VTZXJ2aWNlQ29uZmlnLFxyXG5cdFx0XHRwZXJzb25hbGl6ZXJFbmFibGVkOiBwYXNzZWRJbml0T3B0aW9ucy5wZXJzb25hbGl6ZXJFbmFibGVkLFxyXG5cdFx0XHRtZXNzYWdpbmdTZXJ2aWNlU2V0dGluZ3M6IHBhc3NlZEluaXRPcHRpb25zLm1lc3NhZ2luZ1NlcnZpY2VTZXR0aW5ncyxcclxuXHRcdFx0aXNQcmlvcml0eUVuYWJsZWQ6IHBhc3NlZEluaXRPcHRpb25zLmlzUHJpb3JpdHlFbmFibGVkLFxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMuYXV0b0Rpc21pc3MgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRpbml0T3B0aW9ucy5hdXRvRGlzbWlzcyA9IENvbnN0YW50cy5BdXRvRGlzbWlzc1ZhbHVlcy5Ob0F1dG9EaXNtaXNzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbml0T3B0aW9ucy5vbkRpc21pc3MgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRpbml0T3B0aW9ucy5vbkRpc21pc3MgPSAoY2FtcGFpZ25JZDogc3RyaW5nLCBzdWJtaXR0ZWQ6IGJvb2xlYW4pID0+IHsgcmV0dXJuOyB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbml0T3B0aW9ucy5vblN1cnZleUFjdGl2YXRlZENhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0bGV0IGRlZmF1bHRPblN1cnZleUFjdGl2YXRlZENhbGxiYWNrOiBJT25TdXJ2ZXlBY3RpdmF0ZWRDYWxsYmFjayA9IHtcclxuXHRcdFx0XHRvblN1cnZleUFjdGl2YXRlZChsYXVuY2hlcjogSVN1cnZleUxhdW5jaGVyLCBzdXJ2ZXk/OiBJU3VydmV5Rm9ybSwgc3VydmV5UGFyYW1zPzogSVN1cnZleVBhcmFtcyk6IHZvaWQge1xyXG5cdFx0XHRcdFx0bGF1bmNoZXIubGF1bmNoKCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGluaXRPcHRpb25zLm9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2sgPSBkZWZhdWx0T25TdXJ2ZXlBY3RpdmF0ZWRDYWxsYmFjaztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMudUlTdHJpbmdHZXR0ZXIgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRpbml0T3B0aW9ucy51SVN0cmluZ0dldHRlciA9IChzdHI6IHN0cmluZykgPT4gc3RyOyAvLyBCeSBkZWZhdWx0IHJldHVybiB0aGUgc3RyaW5nIGFzIGlzLlxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbml0T3B0aW9ucy5zdXJ2ZXlFbmFibGVkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aW5pdE9wdGlvbnMuc3VydmV5RW5hYmxlZCA9IHRydWU7IC8vIEJ5IGRlZmF1bHQgc3VydmV5cyBhcmUgZW5hYmxlZC4gKEZyb20gU0RLJ3MgcGVyc3BlY3RpdmUpXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRVdGlscy5leHBlY3RCb29sZWFuKGluaXRPcHRpb25zLnN1cnZleUVuYWJsZWQsIFwic3VydmV5RW5hYmxlZFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMuc2hvd0VtYWlsQWRkcmVzcyAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFV0aWxzLmV4cGVjdEJvb2xlYW4oaW5pdE9wdGlvbnMuc2hvd0VtYWlsQWRkcmVzcywgXCJpbml0T3B0aW9uc0Zsb29kZ2F0ZS5zaG93RW1haWxBZGRyZXNzXCIpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aW5pdE9wdGlvbnMuc2hvd0VtYWlsQWRkcmVzcyA9IHRydWU7ICAvLyBCeSBkZWZhdWx0IGVtYWlsIGZpZWxkIGFuZCBjb2xsZWN0aW9uIGlzIGVuYWJsZWQuIChGcm9tIFNESydzIHBlcnNwZWN0aXZlKVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbml0T3B0aW9ucy5nb3Zlcm5hbmNlU2VydmljZUVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRVdGlscy5leHBlY3RCb29sZWFuKGluaXRPcHRpb25zLmdvdmVybmFuY2VTZXJ2aWNlRW5hYmxlZCwgXCJpbml0T3B0aW9uc0Zsb29kZ2F0ZS5nb3Zlcm5hbmNlU2VydmljZUVuYWJsZVwiKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGluaXRPcHRpb25zLmdvdmVybmFuY2VTZXJ2aWNlRW5hYmxlZCA9IGZhbHNlOyAgLy8gQnkgZGVmYXVsdCBnb3Zlcm5hbmNlU2VydmljZUVuYWJsZSBpcyBkaXNhYmxlZFxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbml0T3B0aW9ucy5nb3Zlcm5hbmNlU2VydmljZUVuYWJsZWQpIHtcclxuXHRcdFx0aW5pdE9wdGlvbnMuZ292ZXJuYW5jZVNlcnZpY2VDb25maWcgPSB0aGlzLnBhcnNlR292ZXJuYW5jZVNlcnZpY2VDb25maWcoXHJcblx0XHRcdFx0aW5pdE9wdGlvbnMuZ292ZXJuYW5jZVNlcnZpY2VDb25maWcgIT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdFx0XHRpbml0T3B0aW9ucy5nb3Zlcm5hbmNlU2VydmljZUNvbmZpZyA6XHJcblx0XHRcdFx0XHR7fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluaXRPcHRpb25zLmN1c3RvbWVyVm9pY2VTdXJ2ZXlQYXJhbXMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRpbml0T3B0aW9ucy5jdXN0b21lclZvaWNlU3VydmV5UGFyYW1zID0geyBjdkZsaWdodHM6IFwiXCIsIGlzQ1ZTdXJ2ZXlFbmFibGVkOiB0cnVlLCBwcm9kdWN0TmFtZTogXCJcIiwgdWlIb3N0OiBcIlwiIH07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoVXRpbHMuaXNOT1UoaW5pdE9wdGlvbnMuY3VzdG9tZXJWb2ljZVN1cnZleVBhcmFtcy5pc0NWU3VydmV5RW5hYmxlZCkpIHtcclxuXHRcdFx0XHRpbml0T3B0aW9ucy5jdXN0b21lclZvaWNlU3VydmV5UGFyYW1zLmlzQ1ZTdXJ2ZXlFbmFibGVkID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbml0T3B0aW9ucy5wZXJzb25hbGl6ZXJFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0VXRpbHMuZXhwZWN0Qm9vbGVhbihpbml0T3B0aW9ucy5wZXJzb25hbGl6ZXJFbmFibGVkLCBcImluaXRPcHRpb25zRmxvb2RnYXRlLnBlcnNvbmFsaXplckVuYWJsZWRcIik7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpbml0T3B0aW9ucy5wZXJzb25hbGl6ZXJFbmFibGVkID0gZmFsc2U7ICAvLyBCeSBkZWZhdWx0IHBlcnNvbmFsaXplckVuYWJsZWQgaXMgZGlzYWJsZWRcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5pdE9wdGlvbnMuaXNQcmlvcml0eUVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRVdGlscy5leHBlY3RCb29sZWFuKGluaXRPcHRpb25zLmlzUHJpb3JpdHlFbmFibGVkLCBcImluaXRPcHRpb25zRmxvb2RnYXRlLmlzUHJpb3JpdHlFbmFibGVkXCIpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aW5pdE9wdGlvbnMuaXNQcmlvcml0eUVuYWJsZWQgPSB0cnVlOyAgLy8gQnkgZGVmYXVsdCBpc1ByaW9yaXR5RW5hYmxlZCBpcyBlbmFibGVkXHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucyA9IGluaXRPcHRpb25zO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IHRoZSBmbG9vZGdhdGUgc3VydmV5XHJcblx0ICovXHJcblx0cHVibGljIHNldEZsb29kZ2F0ZVN1cnZleShzdXJ2ZXk6IElVSVN1cnZleSk6IHZvaWQge1xyXG5cdFx0dGhpcy5mbG9vZGdhdGVTdXJ2ZXkgPSBzdXJ2ZXk7XHJcblx0fVxyXG5cclxuXHQvLyBDaGVja3MgaWYgdGhlIHN1cnZleUVuYWJsZWQgcG9saWN5IGlzIHRydWUgb3IgZmFsc2UuXHJcblx0cHVibGljIGNoZWNrSWZTdXJ2ZXlzRW5hYmxlZCgpOiBib29sZWFuIHtcclxuXHRcdC8vIElmIG5vIGZsb29kZ2F0ZUluaXRPcHRpb25zIGRlZmluZWQsIHJldHVybiB0cnVlIGZvciBzdXJ2ZXlFbmFibGVkXHJcblx0XHRjb25zdCBwb2xpY3lBbGxvd1N1cnZleSA9IHRoaXMuZmxvb2RnYXRlSW5pdE9wdGlvbnMgPyB0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLnN1cnZleUVuYWJsZWQgOiB0cnVlO1xyXG5cdFx0cmV0dXJuIHBvbGljeUFsbG93U3VydmV5ICYmIHRoaXMuY29tbW9uUG9saWN5QWxsb3dBQURDO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJuIHRoZSBmbGFnIHRoZSBGZWVkYmFjayBhbmQgU3VydmV5IGVuYWJsZWQgYnkgQUFEQy5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNGZWVkYmFja1N1cnZleUVuYWJsZWRCeUFBREMoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb21tb25Qb2xpY3lBbGxvd0FBREM7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0Q1ZTdXJ2ZXlGbGlnaHRzKCk6IHN0cmluZyB8IG51bGwge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmxvb2RnYXRlSW5pdE9wdGlvbnMgJiYgdGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5jdXN0b21lclZvaWNlU3VydmV5UGFyYW1zID9cclxuXHRcdFx0dGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5jdXN0b21lclZvaWNlU3VydmV5UGFyYW1zLmN2RmxpZ2h0cyA6IFwiXCI7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgaXNDVlN1cnZleUVuYWJsZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucyAmJiB0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLmN1c3RvbWVyVm9pY2VTdXJ2ZXlQYXJhbXMgP1xyXG5cdFx0XHR0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLmN1c3RvbWVyVm9pY2VTdXJ2ZXlQYXJhbXMuaXNDVlN1cnZleUVuYWJsZWQgOiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFByb2R1Y3ROYW1lKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucyAmJiB0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLmN1c3RvbWVyVm9pY2VTdXJ2ZXlQYXJhbXMgP1xyXG5cdFx0XHR0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLmN1c3RvbWVyVm9pY2VTdXJ2ZXlQYXJhbXMucHJvZHVjdE5hbWUgOiBcIlwiO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFVJSG9zdCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmxvb2RnYXRlSW5pdE9wdGlvbnMgJiYgdGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5jdXN0b21lclZvaWNlU3VydmV5UGFyYW1zID9cclxuXHRcdFx0dGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5jdXN0b21lclZvaWNlU3VydmV5UGFyYW1zLnVpSG9zdCA6IFwiXCI7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0VUlIb3N0Q1ZTdXJ2ZXlEaXNwYXRjaGVyKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucyAmJiB0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLmN1c3RvbWVyVm9pY2VTdXJ2ZXlQYXJhbXMgP1xyXG5cdFx0XHR0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLmN1c3RvbWVyVm9pY2VTdXJ2ZXlQYXJhbXMudWlIb3N0Q1ZTdXJ2ZXlEaXNwYXRjaGVyIDogXCJcIjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRDU1NQb3NpdGlvbigpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmxvb2RnYXRlSW5pdE9wdGlvbnMgJiZcclxuXHRcdFx0dGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5zdXJ2ZXlDU1NQYXJhbXMgJiZcclxuXHRcdFx0dGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5zdXJ2ZXlDU1NQYXJhbXMuY3NzUG9zaXRpb24gP1xyXG5cdFx0XHR0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLnN1cnZleUNTU1BhcmFtcy5jc3NQb3NpdGlvbiA6XHJcblx0XHRcdFwiXCI7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0Q1NTWkluZGV4KCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucyAmJlxyXG5cdFx0XHR0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLnN1cnZleUNTU1BhcmFtcyAmJlxyXG5cdFx0XHR0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLnN1cnZleUNTU1BhcmFtcy5jc3NaSW5kZXggP1xyXG5cdFx0XHR0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLnN1cnZleUNTU1BhcmFtcy5jc3NaSW5kZXggOlxyXG5cdFx0XHRcIlwiO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENTU0JvdHRvbSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmxvb2RnYXRlSW5pdE9wdGlvbnMgJiZcclxuXHRcdFx0dGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5zdXJ2ZXlDU1NQYXJhbXMgJiZcclxuXHRcdFx0dGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5zdXJ2ZXlDU1NQYXJhbXMuY3NzQm90dG9tID9cclxuXHRcdFx0dGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5zdXJ2ZXlDU1NQYXJhbXMuY3NzQm90dG9tIDpcclxuXHRcdFx0XCJcIjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRDU1NSaWdodCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmxvb2RnYXRlSW5pdE9wdGlvbnMgJiZcclxuXHRcdFx0dGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5zdXJ2ZXlDU1NQYXJhbXMgJiZcclxuXHRcdFx0dGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5zdXJ2ZXlDU1NQYXJhbXMuY3NzUmlnaHQgP1xyXG5cdFx0XHR0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLnN1cnZleUNTU1BhcmFtcy5jc3NSaWdodCA6XHJcblx0XHRcdFwiXCI7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0Q1NTVmFyU3RyaW5nKCk6IHN0cmluZyB7XHJcblx0XHRjb25zdCBzdHlsZVN1YnN0cmluZ3M6IHN0cmluZ1tdID0gW107XHJcblx0XHRpZiAodGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucyAmJiB0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLnN1cnZleUNTU1BhcmFtcykge1xyXG5cdFx0XHRpZiAodGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5zdXJ2ZXlDU1NQYXJhbXMuY3NzUG9zaXRpb24pIHtcclxuXHRcdFx0XHRzdHlsZVN1YnN0cmluZ3MucHVzaChcIi0tb2JmLXBvc2l0aW9uOlwiLCB0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLnN1cnZleUNTU1BhcmFtcy5jc3NQb3NpdGlvbiwgXCI7XCIpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLnN1cnZleUNTU1BhcmFtcy5jc3NaSW5kZXgpIHtcclxuXHRcdFx0XHRzdHlsZVN1YnN0cmluZ3MucHVzaChcIi0tb2JmLXpJbmRleDpcIiwgdGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5zdXJ2ZXlDU1NQYXJhbXMuY3NzWkluZGV4LCBcIjtcIik7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZmxvb2RnYXRlSW5pdE9wdGlvbnMuc3VydmV5Q1NTUGFyYW1zLmNzc0JvdHRvbSkge1xyXG5cdFx0XHRcdHN0eWxlU3Vic3RyaW5ncy5wdXNoKFwiLS1vYmYtYm90dG9tOlwiLCB0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLnN1cnZleUNTU1BhcmFtcy5jc3NCb3R0b20sIFwiO1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5mbG9vZGdhdGVJbml0T3B0aW9ucy5zdXJ2ZXlDU1NQYXJhbXMuY3NzUmlnaHQpIHtcclxuXHRcdFx0XHRzdHlsZVN1YnN0cmluZ3MucHVzaChcIi0tb2JmLXJpZ2h0OlwiLCB0aGlzLmZsb29kZ2F0ZUluaXRPcHRpb25zLnN1cnZleUNTU1BhcmFtcy5jc3NSaWdodCwgXCI7XCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gc3R5bGVTdWJzdHJpbmdzLmpvaW4oXCJcIik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVjayBBQURDIHJ1bGUgYXQgb25jZSBzaW5jZSBDb25maWd1cmF0aW9uIGNhbm5vdCBiZSBzZXQgYWdhaW4uXHJcblx0ICogU28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHJlcGVhdCB0aGUgc2FtZSBwcm9jZXNzIG92ZXIgYWdhaW4uXHJcblx0ICovXHJcblx0cHVibGljIGRldGVybWluZUFBRENQb2xpY3koYXV0aGVudGljYXRpb25UeXBlOiBJSW5pdE9wdGlvbnMuQXV0aGVudGljYXRpb25UeXBlLFxyXG5cdFx0YWdlR3JvdXA6IElJbml0T3B0aW9ucy5BZ2VHcm91cCk6IGJvb2xlYW4ge1xyXG5cdFx0Ly8gUmV0dXJuIEJhc2VkIG9uIGF1dGhlbnRpY2F0aW9uIGZpcnN0XHJcblx0XHRpZiAoYXV0aGVudGljYXRpb25UeXBlID09PSBJSW5pdE9wdGlvbnMuQXV0aGVudGljYXRpb25UeXBlLlVuYXV0aGVudGljYXRlZCB8fFxyXG5cdFx0XHRhdXRoZW50aWNhdGlvblR5cGUgPT09IElJbml0T3B0aW9ucy5BdXRoZW50aWNhdGlvblR5cGUuQUFEKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0Ly8gUmV0dXJuIGJhc2VkIG9uIEFnZUdyb3VwXHJcblx0XHRyZXR1cm4gYWdlR3JvdXAgIT09IElJbml0T3B0aW9ucy5BZ2VHcm91cC5NaW5vcldpdGhQYXJlbnRhbENvbnNlbnQgJiZcclxuXHRcdFx0YWdlR3JvdXAgIT09IElJbml0T3B0aW9ucy5BZ2VHcm91cC5NaW5vcldpdGhvdXRQYXJlbnRhbENvbnNlbnQ7XHJcblx0fVxyXG5cclxuXHQvLyBLZWVwIGltcGxlbWVudGF0aW9uIGluIHN5bmMgd2l0aCAlU1JDUk9PVCVcXHByaXZhY3lcXGlkY29uc2VudHByb3ZpZGVyXFxJZGVudGl0eUJhc2VkQ29uc2VudEdyb3VwUHJvdmlkZXIuY3BwXHJcblx0cHVibGljIGdldFVzZXJDb25zZW50R3JvdXAoKTogSUluaXRPcHRpb25zLlVzZXJDb25zZW50R3JvdXAge1xyXG5cdFx0Y29uc3QgYXV0aGVudGljYXRpb25UeXBlID0gdGhpcy5jb21tb25Jbml0T3B0aW9ucy5hdXRoZW50aWNhdGlvblR5cGU7XHJcblx0XHRpZiAoYXV0aGVudGljYXRpb25UeXBlID09PSBJSW5pdE9wdGlvbnMuQXV0aGVudGljYXRpb25UeXBlLlVuYXV0aGVudGljYXRlZCB8fFxyXG5cdFx0XHRhdXRoZW50aWNhdGlvblR5cGUgPT09IElJbml0T3B0aW9ucy5BdXRoZW50aWNhdGlvblR5cGUuQUFEKSB7XHJcblx0XHRcdHJldHVybiBJSW5pdE9wdGlvbnMuVXNlckNvbnNlbnRHcm91cC5DYW5Db25zZW50O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGFnZUdyb3VwID0gdGhpcy5jb21tb25Jbml0T3B0aW9ucy5hZ2VHcm91cDtcclxuXHRcdHN3aXRjaCAoYWdlR3JvdXApIHtcclxuXHRcdFx0Y2FzZSBJSW5pdE9wdGlvbnMuQWdlR3JvdXAuVW5kZWZpbmVkOlxyXG5cdFx0XHRcdHJldHVybiBJSW5pdE9wdGlvbnMuVXNlckNvbnNlbnRHcm91cC5DYW5Db25zZW50O1xyXG5cdFx0XHRjYXNlIElJbml0T3B0aW9ucy5BZ2VHcm91cC5NaW5vcldpdGhvdXRQYXJlbnRhbENvbnNlbnQ6XHJcblx0XHRcdFx0cmV0dXJuIElJbml0T3B0aW9ucy5Vc2VyQ29uc2VudEdyb3VwLkNhbm5vdENvbnNlbnQ7XHJcblx0XHRcdGNhc2UgSUluaXRPcHRpb25zLkFnZUdyb3VwLk1pbm9yV2l0aFBhcmVudGFsQ29uc2VudDpcclxuXHRcdFx0XHRyZXR1cm4gSUluaXRPcHRpb25zLlVzZXJDb25zZW50R3JvdXAuQ2Fubm90Q29uc2VudDtcclxuXHRcdFx0Y2FzZSBJSW5pdE9wdGlvbnMuQWdlR3JvdXAuQWR1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIElJbml0T3B0aW9ucy5Vc2VyQ29uc2VudEdyb3VwLkNhbkNvbnNlbnQ7XHJcblx0XHRcdGNhc2UgSUluaXRPcHRpb25zLkFnZUdyb3VwLk5vdEFkdWx0OlxyXG5cdFx0XHRcdHJldHVybiBJSW5pdE9wdGlvbnMuVXNlckNvbnNlbnRHcm91cC5QYXJ0aWFsQ29uc2VudDtcclxuXHRcdFx0Y2FzZSBJSW5pdE9wdGlvbnMuQWdlR3JvdXAuTWlub3JOb1BhcmVudGFsQ29uc2VudFJlcXVpcmVkOlxyXG5cdFx0XHRcdHJldHVybiBJSW5pdE9wdGlvbnMuVXNlckNvbnNlbnRHcm91cC5DYW5Db25zZW50O1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBJSW5pdE9wdGlvbnMuVXNlckNvbnNlbnRHcm91cC5DYW5ub3RDb25zZW50O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBJSW5pdE9wdGlvbnMuVXNlckNvbnNlbnRHcm91cC5DYW5ub3RDb25zZW50O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUV2ZW50U2FtcGxpbmdPcHRpb24oc2FtcGxpbmdPcHRpb25zOiBJSW5pdE9wdGlvbnMuSVNhbXBsaW5nRXZlbnRbXSk6IElJbml0T3B0aW9ucy5JU2FtcGxpbmdJbml0T3B0aW9uIHtcclxuXHRcdGxldCBldmVudEluaXRTYW1wbGluZzogSUluaXRPcHRpb25zLklTYW1wbGluZ0luaXRPcHRpb24gPSB7IGV2ZW50OiB7fSB9O1xyXG5cdFx0aWYgKHNhbXBsaW5nT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdC8vIEl0ZXJhdGluZyB0aHJvdWdoIGluaXQgb3B0aW9uc1xyXG5cdFx0XHRmb3IgKGNvbnN0IGluZGV4IGluIHNhbXBsaW5nT3B0aW9ucykge1xyXG5cdFx0XHRcdGlmIChzYW1wbGluZ09wdGlvbnMuaGFzT3duUHJvcGVydHkoaW5kZXgpKSB7XHJcblx0XHRcdFx0XHQvLyBDaGVjayBmb3IgY29ycmVjdCBUeXBlXHJcblx0XHRcdFx0XHRzd2l0Y2ggKHNhbXBsaW5nT3B0aW9uc1tpbmRleF0udHlwZSkge1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwiRXZlbnRcIjpcclxuXHRcdFx0XHRcdFx0XHQvLyBQYXJzaW5nIHRoZSBOYW1lIGFuZCBTYW1wbGVSYXRlXHJcblx0XHRcdFx0XHRcdFx0bGV0IHNhbXBsZVJhdGUgPSBzYW1wbGluZ09wdGlvbnNbaW5kZXhdLnNhbXBsZVJhdGU7XHJcblx0XHRcdFx0XHRcdFx0VXRpbHMuZXhwZWN0TnVtYmVyKHNhbXBsZVJhdGUsIFwiaW5pdE9wdGlvbi5FdmVudFNhbXBsaW5nLlNhbXBsZVJhdGVcIik7XHJcblx0XHRcdFx0XHRcdFx0VXRpbHMuZXhwZWN0U3RyaW5nKHNhbXBsaW5nT3B0aW9uc1tpbmRleF0ubmFtZSwgXCJpbml0T3B0aW9uLkV2ZW50U2FtcGxpbmcuTmFtZVwiKTtcclxuXHRcdFx0XHRcdFx0XHQvLyBjaGVjayB0aGUgcmFuZ2UgZm9yIHNhbXBsaW5nIHBlcmNlbnRhZ2VcclxuXHRcdFx0XHRcdFx0XHRpZiAoc2FtcGxlUmF0ZSA8IDAgfHwgc2FtcGxlUmF0ZSA+IDEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRocm93IFwiaW5pdE9wdGlvbi5FdmVudFNhbXBsaW5nLlwiICsgc2FtcGxpbmdPcHRpb25zW2luZGV4XS5uYW1lICsgXCIuU2FtcGxlUmF0ZSBpcyBvdXQgb2YgcmFuZ2VcIjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0Ly8gZmluYWxseSwgc2F2ZSB0aGUgc2FtcGxpbmcgZXZlbnRcclxuXHRcdFx0XHRcdFx0XHRldmVudEluaXRTYW1wbGluZy5ldmVudFtzYW1wbGluZ09wdGlvbnNbaW5kZXhdLm5hbWVdID0gc2FtcGxlUmF0ZTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHR0aHJvdyBcImluaXRPcHRpb24uRXZlbnRTYW1wbGluZy5UeXBlIHZhbHVlIGlzIG5vdCByZWNvZ25pemVkXCI7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZXZlbnRJbml0U2FtcGxpbmc7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlR292ZXJuYW5jZVNlcnZpY2VDb25maWcoY29uZmlnOiBJSW5pdE9wdGlvbnMuSUdvdmVybmFuY2VTZXJ2aWNlQ29uZmlnKTogSUluaXRPcHRpb25zLklHb3Zlcm5hbmNlU2VydmljZUNvbmZpZyB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHQvLyBieSBkZWZhdWx0LCBkaXNhYmxlIHRoZSB0cmlnZ2VyIGluIGZhaWx1cmVcclxuXHRcdFx0Zm9yY2VTZXJ2aWNlbGVzc1N1cnZleURpc3BsYXk6IGNvbmZpZy5mb3JjZVNlcnZpY2VsZXNzU3VydmV5RGlzcGxheSA/PyBmYWxzZSxcclxuXHJcblx0XHRcdC8vIGJ5IGRlZmF1bHQsIG5vIHJldHJ5XHJcblx0XHRcdHJldHJ5OiBjb25maWcucmV0cnkgPz8gMSxcclxuXHJcblx0XHRcdC8vIGJ5IGRlZmF1bHQsIHRpbWVvdXQgaXMgMTAwMCBtaWxpc2Vjb25kc1xyXG5cdFx0XHR0aW1lb3V0OiBjb25maWcudGltZW91dCA/PyAxMDAwLFxyXG5cclxuXHRcdFx0Ly8gc2ltcGxlIHJlcXVlc3QgaXMgZGVmYXVsdCB0byBmYWxzZVxyXG5cdFx0XHRzaW1wbGVSZXF1ZXN0RW5hYmxlZDogY29uZmlnLnNpbXBsZVJlcXVlc3RFbmFibGVkID8/IGZhbHNlLFxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuXHJcbmxldCBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldCgpOiBDb25maWd1cmF0aW9uIHtcclxuXHRyZXR1cm4gY29uZmlndXJhdGlvbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlIGZlZWRiYWNrVHlwZVxyXG4gKiBAcGFyYW0gZmVlZGJhY2tUeXBlIGZlZWRiYWNrVHlwZVxyXG4gKiBAcmV0dXJucyB7Q29uc3RhbnRzLkZlZWRiYWNrVHlwZX0gdGhlIHZhbGlkYXRlZCBmZWVkYmFja1R5cGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZlZWRiYWNrVHlwZShmZWVkYmFja1R5cGU6IHN0cmluZyk6IENvbnN0YW50cy5GZWVkYmFja1R5cGUge1xyXG5cdFV0aWxzLmV4cGVjdFN0cmluZyhmZWVkYmFja1R5cGUsIFwiZmVlZGJhY2tUeXBlXCIpO1xyXG5cclxuXHRpZiAoZmVlZGJhY2tUeXBlID09PSBDb25zdGFudHMuRmVlZGJhY2tUeXBlW0NvbnN0YW50cy5GZWVkYmFja1R5cGUuU21pbGVdKSB7XHJcblx0XHRyZXR1cm4gQ29uc3RhbnRzLkZlZWRiYWNrVHlwZS5TbWlsZTtcclxuXHR9IGVsc2UgaWYgKGZlZWRiYWNrVHlwZSA9PT0gQ29uc3RhbnRzLkZlZWRiYWNrVHlwZVtDb25zdGFudHMuRmVlZGJhY2tUeXBlLkZyb3duXSkge1xyXG5cdFx0cmV0dXJuIENvbnN0YW50cy5GZWVkYmFja1R5cGUuRnJvd247XHJcblx0fSBlbHNlIGlmIChmZWVkYmFja1R5cGUgPT09IENvbnN0YW50cy5GZWVkYmFja1R5cGVbQ29uc3RhbnRzLkZlZWRiYWNrVHlwZS5CdWddKSB7XHJcblx0XHRyZXR1cm4gQ29uc3RhbnRzLkZlZWRiYWNrVHlwZS5CdWc7XHJcblx0fSBlbHNlIHtcclxuXHRcdHRocm93IFwiZmVlZGJhY2tUeXBlIHNob3VsZCBiZSBvbmUgb2YgU21pbGUsIEZyb3duIG9yIEJ1Z1wiO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Configuration/Configuration.ts\n')},"./scripts/app/Configuration/DynamicConfiguration.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDynamicSetting", function() { return getDynamicSetting; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetDynamicSettingsTmsgCache", function() { return resetDynamicSettingsTmsgCache; });\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Utils */ "./scripts/app/Utils.ts");\n/* harmony import */ var _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../FloodgateCore/FloodgateStorageProvider */ "./scripts/app/FloodgateCore/FloodgateStorageProvider.ts");\n/* harmony import */ var _TargetedMessaging_TargetedMessagingCache__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../TargetedMessaging/TargetedMessagingCache */ "./scripts/app/TargetedMessaging/TargetedMessagingCache.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n\r\n\r\n\r\n\r\nvar isNOU = _Utils__WEBPACK_IMPORTED_MODULE_0__["isNOU"];\r\nvar dynamicSettingsTmsgCache = null;\r\nfunction getDynamicSetting(key, defaultValue) {\r\n    try {\r\n        if (!dynamicSettingsTmsgCache && _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_1__["default"].isStorageAvailable()) {\r\n            dynamicSettingsTmsgCache = new _TargetedMessaging_TargetedMessagingCache__WEBPACK_IMPORTED_MODULE_2__["TargetedMessagingCache"](["DynamicSettings" /* dynamicSettings */]);\r\n        }\r\n        if (!dynamicSettingsTmsgCache) {\r\n            return defaultValue;\r\n        }\r\n        var settingsObj = dynamicSettingsTmsgCache.getItemContent("DynamicSettings" /* dynamicSettings */);\r\n        if (!isNOU(settingsObj)\r\n            && settingsObj.hasOwnProperty(key)\r\n            && !isNOU(settingsObj[key])) {\r\n            var settingValue = settingsObj[key];\r\n            // parse types\r\n            if (typeof defaultValue === "number" && typeof settingValue !== "number") {\r\n                if (typeof settingValue === "string") {\r\n                    var returnValue = settingValue.indexOf(".") === -1 ? parseInt(settingValue, 10) : parseFloat(settingValue);\r\n                    return isNaN(returnValue) ? defaultValue : returnValue;\r\n                }\r\n                return defaultValue;\r\n            }\r\n            return settingValue;\r\n        }\r\n    }\r\n    catch (error) {\r\n        _Logging_Logging__WEBPACK_IMPORTED_MODULE_3__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_3__["EventIds"].Common.Error.VALUE, 2 /* Error */, {\r\n            ErrorMessage: "Error reading dynamic setting " + (error && error.message),\r\n            Type: key,\r\n        });\r\n    }\r\n    return defaultValue;\r\n}\r\nfunction resetDynamicSettingsTmsgCache() {\r\n    dynamicSettingsTmsgCache = null;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Db25maWd1cmF0aW9uL0R5bmFtaWNDb25maWd1cmF0aW9uLnRzP2RiOGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBa0M7QUFDK0M7QUFDSTtBQUd2QztBQUV0QyxTQUFLLEdBQUssNENBQUwsQ0FBVztBQW9DeEIsSUFBSSx3QkFBd0IsR0FBMkIsSUFBSSxDQUFDO0FBRXJELFNBQVMsaUJBQWlCLENBQUksR0FBZSxFQUFFLFlBQWU7SUFDcEUsSUFBSTtRQUNILElBQUksQ0FBQyx3QkFBd0IsSUFBSSwrRUFBd0IsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1lBQy9FLHdCQUF3QixHQUFJLElBQUksZ0dBQXNCLENBQUMseUNBQTZCLENBQUMsQ0FBQztTQUN0RjtRQUVELElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUM5QixPQUFPLFlBQVksQ0FBQztTQUNwQjtRQUVELElBQU0sV0FBVyxHQUFHLHdCQUF3QixDQUFDLGNBQWMseUNBQWdELENBQUM7UUFDNUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7ZUFDbkIsV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7ZUFDL0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDN0IsSUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXRDLGNBQWM7WUFDZCxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUU7Z0JBQ3pFLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxFQUFFO29CQUNyQyxJQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzdHLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQTJCLENBQUM7aUJBQ3ZFO2dCQUVELE9BQU8sWUFBWSxDQUFDO2FBQ3BCO1lBRUQsT0FBTyxZQUFZLENBQUM7U0FDcEI7S0FDRDtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2YsMERBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQzNCLHlEQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxpQkFFbkM7WUFDQyxZQUFZLEVBQUUsb0NBQWlDLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFFO1lBQ3ZFLElBQUksRUFBRSxHQUFHO1NBQ1QsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxPQUFPLFlBQVksQ0FBQztBQUNyQixDQUFDO0FBRU0sU0FBUyw2QkFBNkI7SUFDNUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9Db25maWd1cmF0aW9uL0R5bmFtaWNDb25maWd1cmF0aW9uLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uL1V0aWxzXCI7XHJcbmltcG9ydCBGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIgZnJvbSBcIi4uL0Zsb29kZ2F0ZUNvcmUvRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyXCI7XHJcbmltcG9ydCB7IFRhcmdldGVkTWVzc2FnaW5nQ2FjaGUgfSBmcm9tIFwiLi4vVGFyZ2V0ZWRNZXNzYWdpbmcvVGFyZ2V0ZWRNZXNzYWdpbmdDYWNoZVwiO1xyXG5pbXBvcnQgeyBDb250ZW50VHlwZSB9IGZyb20gXCIuLi9UYXJnZXRlZE1lc3NhZ2luZy9UYXJnZXRlZE1lc3NhZ2luZ0NvbnRlbnRUeXBlXCI7XHJcblxyXG5pbXBvcnQgKiBhcyBMb2dnaW5nIGZyb20gXCIuLi9Mb2dnaW5nL0xvZ2dpbmdcIjtcclxuXHJcbmNvbnN0IHsgaXNOT1UgfSA9IFV0aWxzO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gU2V0dGluZ0tleSB7XHJcblx0Ly8gR2VuZXJhbFxyXG5cdGxvZ0xldmVsU2V0dGluZ3MgPSBcIkxvZ0xldmVsU2V0dGluZ3NcIixcclxuXHJcblx0Ly8gV2ViIHN1cmZhY2VzXHJcblx0dGVhY2hpbmdNZXNzYWdlQ29vbGRvd24gPSBcIlRlYWNoaW5nTWVzc2FnZUNvb2xkb3duXCIsXHJcblx0d2ViU3VyZmFjZXNJbnRMaW5rID0gXCJXZWJTdXJmYWNlc0ludExpbmtcIixcclxuXHR3ZWJTdXJmYWNlc1Byb2RMaW5rID0gXCJXZWJTdXJmYWNlc1Byb2RMaW5rXCIsXHJcblxyXG5cdC8vIFRNUyBzZXR0aW5nc1xyXG5cdHRtc0FwcElkID0gXCJUbXNBcHBJZFwiLFxyXG5cdHRtc1NlcnZpY2VVcmwgPSBcIlRtc1NlcnZpY2VVcmxcIixcclxuXHR0bXNBY3Rpb25VcmwgPSBcIlRtc0FjdGlvblVybFwiLFxyXG5cdHRtc0xvYWRUaW1lb3V0ID0gXCJUbXNMb2FkVGltZW91dFwiLFxyXG5cdHRtc01lc3NhZ2VNZXRhZGF0YUV4cGlyeSA9IFwiVG1zTWVzc2FnZU1ldGFkYXRhRXhwaXJ5XCIsXHJcblx0dG1zVXNlckdvdmVybmFuY2VSdWxlc0V4cGlyeSA9IFwiVG1zVXNlckdvdmVybmFuY2VSdWxlc0V4cGlyeVwiLFxyXG5cdHRtc0NhbXBhaWduQ29udGVudEV4cGlyeSA9IFwiVG1zQ2FtcGFpZ25Db250ZW50RXhwaXJ5XCIsXHJcblx0dG1zRHluYW1pY1NldHRpbmdzRXhwaXJ5ID0gXCJUbXNEeW5hbWljU2V0dGluZ3NFeHBpcnlcIixcclxuXHR0bXNMb2dMZXZlbFNldHRpbmdzRXhwaXJ5ID0gXCJUbXNMb2dMZXZlbFNldHRpbmdzRXhwaXJ5XCIsXHJcblx0dG1zVXNlckZhY3RzRXhwaXJ5ID0gXCJUbXNVc2VyRmFjdHNFeHBpcnlcIixcclxuXHJcblx0Ly8gVHVsaXBzXHJcblx0dHVsaXBzQXBwSWQgPSBcIlR1bGlwc0FwcElkXCIsXHJcblx0dHVsaXBzTG9hZFRpbWVvdXQgPSBcIlR1bGlwc0xvYWRUaW1lb3V0XCIsXHJcblx0dHVsaXBzU2VydmljZVVybCA9IFwiVHVsaXBzU2VydmljZVVybFwiLFxyXG5cdHR1bGlwc0luZ2VzdGlvblRpbWVJbnRlcnZhbCA9IFwiVHVsaXBzSW5nZXN0aW9uVGltZUludGVydmFsXCIsXHJcblxyXG5cdC8vIEF1Z0xvb3BcclxuXHR0dWxpcHNBdWdMb29wQW5ub3RhdGlvbk5hbWUgPSBcIlR1bGlwc0F1Z0xvb3BBbm5vdGF0aW9uTmFtZVwiLFxyXG5cdHR1bGlwc0F1Z0xvb3BQYWNrYWdlRGVsYXlMb2FkID0gXCJUdWxpcHNBdWdMb29wUGFja2FnZURlbGF5TG9hZFwiLFxyXG5cdHR1bGlwc0F1Z0xvb3BMb2FkUmV0cnlUaW1lcyA9IFwiVHVsaXBzQXVnTG9vcExvYWRSZXRyeVRpbWVzXCIsXHJcblx0dHVsaXBzQXVnTG9vcExvYWRUaW1lb3V0ID0gXCJUdWxpcHNBdWdMb29wTG9hZFRpbWVvdXRcIixcclxufVxyXG5cclxubGV0IGR5bmFtaWNTZXR0aW5nc1Rtc2dDYWNoZTogVGFyZ2V0ZWRNZXNzYWdpbmdDYWNoZSA9IG51bGw7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHluYW1pY1NldHRpbmc8VD4oa2V5OiBTZXR0aW5nS2V5LCBkZWZhdWx0VmFsdWU6IFQpOiBUIHtcclxuXHR0cnlcdHtcclxuXHRcdGlmICghZHluYW1pY1NldHRpbmdzVG1zZ0NhY2hlICYmIEZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlci5pc1N0b3JhZ2VBdmFpbGFibGUoKSkge1xyXG5cdFx0XHRkeW5hbWljU2V0dGluZ3NUbXNnQ2FjaGUgPSAgbmV3IFRhcmdldGVkTWVzc2FnaW5nQ2FjaGUoW0NvbnRlbnRUeXBlLmR5bmFtaWNTZXR0aW5nc10pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghZHluYW1pY1NldHRpbmdzVG1zZ0NhY2hlKSB7XHJcblx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc2V0dGluZ3NPYmogPSBkeW5hbWljU2V0dGluZ3NUbXNnQ2FjaGUuZ2V0SXRlbUNvbnRlbnQ8UmVjb3JkPHN0cmluZywgVD4+KENvbnRlbnRUeXBlLmR5bmFtaWNTZXR0aW5ncyk7XHJcblx0XHRpZiAoIWlzTk9VKHNldHRpbmdzT2JqKVxyXG5cdFx0XHQmJiBzZXR0aW5nc09iai5oYXNPd25Qcm9wZXJ0eShrZXkpXHJcblx0XHRcdCYmICFpc05PVShzZXR0aW5nc09ialtrZXldKSkge1xyXG5cdFx0XHRjb25zdCBzZXR0aW5nVmFsdWUgPSBzZXR0aW5nc09ialtrZXldO1xyXG5cclxuXHRcdFx0Ly8gcGFyc2UgdHlwZXNcclxuXHRcdFx0aWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHNldHRpbmdWYWx1ZSAhPT0gXCJudW1iZXJcIikge1xyXG5cdFx0XHRcdGlmICh0eXBlb2Ygc2V0dGluZ1ZhbHVlID09PSBcInN0cmluZ1wiKSB7XHJcblx0XHRcdFx0XHRjb25zdCByZXR1cm5WYWx1ZSA9IHNldHRpbmdWYWx1ZS5pbmRleE9mKFwiLlwiKSA9PT0gLTEgPyBwYXJzZUludChzZXR0aW5nVmFsdWUsIDEwKSA6IHBhcnNlRmxvYXQoc2V0dGluZ1ZhbHVlKTtcclxuXHRcdFx0XHRcdHJldHVybiBpc05hTihyZXR1cm5WYWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiByZXR1cm5WYWx1ZSBhcyB1bmtub3duIGFzIFQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gc2V0dGluZ1ZhbHVlO1xyXG5cdFx0fVxyXG5cdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KFxyXG5cdFx0XHRMb2dnaW5nLkV2ZW50SWRzLkNvbW1vbi5FcnJvci5WQUxVRSxcclxuXHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5FcnJvcixcclxuXHRcdFx0e1xyXG5cdFx0XHRcdEVycm9yTWVzc2FnZTogYEVycm9yIHJlYWRpbmcgZHluYW1pYyBzZXR0aW5nICR7ZXJyb3IgJiYgZXJyb3IubWVzc2FnZX1gLFxyXG5cdFx0XHRcdFR5cGU6IGtleSxcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVzZXREeW5hbWljU2V0dGluZ3NUbXNnQ2FjaGUoKSB7XHJcblx0ZHluYW1pY1NldHRpbmdzVG1zZ0NhY2hlID0gbnVsbDtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Configuration/DynamicConfiguration.ts\n')},"./scripts/app/Configuration/IInitOptions.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CustomResources", function() { return CustomResources; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AgeGroup", function() { return AgeGroup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AuthenticationType", function() { return AuthenticationType; });\n// bit mask flag: values should be set 0,1,2,4,8,16, etc...\r\n// Example for Css and Strings both, use 3.\r\nvar CustomResources;\r\n(function (CustomResources) {\r\n    CustomResources[CustomResources["None"] = 0] = "None";\r\n    CustomResources[CustomResources["Css"] = 1] = "Css";\r\n    CustomResources[CustomResources["Strings"] = 2] = "Strings";\r\n})(CustomResources || (CustomResources = {}));\r\nvar AgeGroup;\r\n(function (AgeGroup) {\r\n    AgeGroup[AgeGroup["Undefined"] = 0] = "Undefined";\r\n    AgeGroup[AgeGroup["MinorWithoutParentalConsent"] = 1] = "MinorWithoutParentalConsent";\r\n    AgeGroup[AgeGroup["MinorWithParentalConsent"] = 2] = "MinorWithParentalConsent";\r\n    AgeGroup[AgeGroup["Adult"] = 3] = "Adult";\r\n    AgeGroup[AgeGroup["NotAdult"] = 4] = "NotAdult";\r\n    AgeGroup[AgeGroup["MinorNoParentalConsentRequired"] = 5] = "MinorNoParentalConsentRequired";\r\n})(AgeGroup || (AgeGroup = {}));\r\nvar AuthenticationType;\r\n(function (AuthenticationType) {\r\n    AuthenticationType[AuthenticationType["MSA"] = 0] = "MSA";\r\n    AuthenticationType[AuthenticationType["AAD"] = 1] = "AAD";\r\n    AuthenticationType[AuthenticationType["Unauthenticated"] = 2] = "Unauthenticated";\r\n})(AuthenticationType || (AuthenticationType = {}));\r\n;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Db25maWd1cmF0aW9uL0lJbml0T3B0aW9ucy50cz9iYmE2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlPQTtBQUFBO0FBQUE7QUFBQTtBQUFBLDJEQUEyRDtBQUMzRCwyQ0FBMkM7QUFDM0MsSUFBWSxlQUlYO0FBSkQsV0FBWSxlQUFlO0lBQzFCLHFEQUFRO0lBQ1IsbURBQU87SUFDUCwyREFBVztBQUNaLENBQUMsRUFKVyxlQUFlLEtBQWYsZUFBZSxRQUkxQjtBQUVELElBQVksUUFPWDtBQVBELFdBQVksUUFBUTtJQUNuQixpREFBUztJQUNULHFGQUEyQjtJQUMzQiwrRUFBd0I7SUFDeEIseUNBQUs7SUFDTCwrQ0FBUTtJQUNSLDJGQUE4QjtBQUMvQixDQUFDLEVBUFcsUUFBUSxLQUFSLFFBQVEsUUFPbkI7QUFFRCxJQUFZLGtCQUlYO0FBSkQsV0FBWSxrQkFBa0I7SUFDN0IseURBQUc7SUFDSCx5REFBRztJQUNILGlGQUFlO0FBQ2hCLENBQUMsRUFKVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBSTdCO0FBY0EsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0NvbmZpZ3VyYXRpb24vSUluaXRPcHRpb25zLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQ29uc3RhbnRzIGZyb20gXCIuLy4uL0NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBJT25EaXNtaXNzRGVsZWdhdGUgfSBmcm9tIFwiLi8uLi9JT25EaXNtaXNzRGVsZWdhdGVcIjtcclxuaW1wb3J0IHsgSUF1Z0xvb3BDYWxsYmFjaywgSUZsb29kZ2F0ZUF1dGhUb2tlbkNhbGxiYWNrLCBJRmxvb2RnYXRlU2V0dGluZ1N0b3JhZ2VDYWxsYmFjaywgSU9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2sgfVxyXG5cdGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvQXBpL0FwaVwiO1xyXG5pbXBvcnQgeyBDYW1wYWlnbkRlZmluaXRpb24gfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0NhbXBhaWduL0NhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyXCI7XHJcbmltcG9ydCB7IElNYW5pZmVzdERhdGFBcHBsaWNhdGlvbiwgSU1hbmlmZXN0RGF0YVRlbGVtZXRyeSwgSU1hbmlmZXN0RGF0YVdlYiB9IGZyb20gXCIuLy4uL1RyYW5zcG9ydC9UcmFuc3BvcnRcIjtcclxuaW1wb3J0IHsgSVNlc3Npb24gfSBmcm9tIFwiQGF1Z2xvb3AvcnVudGltZS1jbGllbnRcIjtcclxuaW1wb3J0IHsgSUNWU3VydmV5UGFyYW1zIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9BcGkvSUNWU3VydmV5XCI7XHJcbmltcG9ydCB7IElTdXJ2ZXlDU1NQYXJhbXMgfSBmcm9tIFwiLi9JU3VydmV5Q1NTUGFyYW1zXCI7XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciBjb21tb24gaW5pdGlhbGl6YXRpb24gb3B0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJSW5pdE9wdGlvbnNDb21tb24ge1xyXG5cdC8vIEFuIGlkIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIHRoZSBob3N0IGFwcCBpbiB0aGUgT0NWIHdvcmxkXHJcblx0YXBwSWQ6IG51bWJlcjtcclxuXHQvLyBUaGUgdXJsIGF0IHdoaWNoIHRoZSBzdHlsZXMgcmVzaWRlXHJcblx0c3R5bGVzVXJsPzogc3RyaW5nO1xyXG5cdC8vIFRoZSB1cmwgYXQgd2hpY2ggdGhlIGludGVybmF0aW9uYWxpemF0aW9uIGZpbGVzIHJlc2lkZVxyXG5cdGludGxVcmw/OiBzdHJpbmc7XHJcblx0Ly8gVGhlIGZpbGVuYW1lIGZvciB0aGUgaW50ZXJuYXRpb25hbGl6YXRpb24gc3RyaW5ncywgaWYgZGlmZmVyZW50IHRoYW4gdGhlIGRlZmF1bHQgZmlsZW5hbWVcclxuXHRpbnRsRmlsZW5hbWU/OiBzdHJpbmc7XHJcblx0Ly8gQmFzZSB1cmwgd2hlcmUgYW55IHV4IGFzc2V0cyByZXNpZGUuIE1haW5seSB1c2VkIGJ5IGNvYWNoaW5nIHV4XHJcblx0d2ViU3VyZmFjZXNSZXNvdXJjZUJhc2VVcmw/OiBzdHJpbmc7XHJcblx0Ly8gRW52aXJvbm1lbnRcclxuXHRlbnZpcm9ubWVudDogQ29uc3RhbnRzLkVudmlyb25tZW50O1xyXG5cdC8vIEEgc3RyaW5nIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIHRoZSBjdXJyZW50IHNlc3Npb25cclxuXHRzZXNzaW9uSWQ/OiBzdHJpbmc7XHJcblx0Ly8gY2lkIHN0cmluZyB3aGljaCBpcyBpbi1zY29wZSBmb3IgR0RQUiBjb21wbGlhbmNlIGZvciBleHBvcnQgYW5kIGRlbGV0aW9uIHJlcXVlc3RcclxuXHRjaWQ/OiBzdHJpbmc7XHJcblx0Ly8gQSBidWlsZCB2ZXJzaW9uIGZvciB5b3VyIGFwcFxyXG5cdGJ1aWxkPzogc3RyaW5nO1xyXG5cdC8vIFRoZSBwcmltYXJ5IGNvbG91ciBpbiBoZXggZm9ybSAjWzAtOWEtZl17Nn1cclxuXHRwcmltYXJ5Q29sb3VyPzogc3RyaW5nO1xyXG5cdC8vIFRoZSBzZWNvbmRhcnkgY29sb3VyIGluIGhleCBmb3JtICNbMC05YS1mXXs2fVxyXG5cdHNlY29uZGFyeUNvbG91cj86IHN0cmluZztcclxuXHQvLyBUaGUgVUkgbG9jYWxlIG5hbWUgb2YgdGhlIGNhbGxpbmcgcGFnZVxyXG5cdGxvY2FsZT86IHN0cmluZztcclxuXHQvLyBTeXN0ZW0tVXNlIG9ubHlcclxuXHRvcmlnaW5hbExvY2FsZT86IHN0cmluZztcclxuXHQvLyBBIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIFNESyBlbmNvdW50ZXJzIGVycm9yc1xyXG5cdG9uRXJyb3I/OiAoZXJyOiBzdHJpbmcpID0+IHZvaWQ7XHJcblx0Ly8gQXBwbGljYXRpb24gcmVsYXRlZCBtZXRhZGF0YVxyXG5cdGFwcGxpY2F0aW9uR3JvdXA/OiBJTWFuaWZlc3REYXRhQXBwbGljYXRpb247XHJcblx0Ly8gVGVsZW1ldHJ5IHJlbGF0ZWQgbWV0YWRhdGFcclxuXHR0ZWxlbWV0cnlHcm91cD86IElNYW5pZmVzdERhdGFUZWxlbWV0cnk7XHJcblx0Ly8gV2ViIHJlbGF0ZWQgbWV0YWRhdGFcclxuXHR3ZWJHcm91cD86IElNYW5pZmVzdERhdGFXZWI7XHJcblx0Ly8gVXNlciBFbWFpbCBcclxuXHR1c2VyRW1haWw/OiBzdHJpbmc7XHJcblx0Ly8gVGhlIGpzb24gc3RyaW5nIHRvIGRlZmluZSBldmVudCBzYW1wbGluZ1xyXG5cdGV2ZW50U2FtcGxpbmc/OiBJU2FtcGxpbmdFdmVudFtdO1xyXG5cdC8vIFRoZSB0aW1lb3V0IGZvciBzZW5kaW5nIHJlc3BvbnNlIGluIHBldHJvbFxyXG5cdHBldHJvbFRpbWVvdXQ/OiBudW1iZXI7XHJcblx0Ly8gY2hlY2sgdG8gc2VlIGlmIHVzZXIgaXMgY29uc3VtZXIvY29tbWVyY2lhbCB0byBkeW5hbWljYWxseSBkaXNwbGF5IFVJXHJcblx0aXNDb21tZXJjaWFsSG9zdD86IGJvb2xlYW47XHJcblx0Ly8gT3B0aW9uIHRvIHNlZSBpZiB0aGUgaG9zdCB3aWxsIGJlIHByb3ZpZGluZyB0aGVpciBvd24gcmVzb3VyY2VzIHN1Y2ggYXMgc3RyaW5ncyBvciBDU1NcclxuXHRjdXN0b21SZXNvdXJjZXNTZXRFeHRlcm5hbGx5PzogQ3VzdG9tUmVzb3VyY2VzO1xyXG5cdC8vIHRoZSBlbWFpbCBwb2xpY3kgdmFsdWUgZnJvbSBPQ1BTIHRvIGRldGVybWluZXMgaWYgdGhlIHVzZXIgY2FuIHNlZSBhbiBvcHRpb24gdG8gaW5jbHVkZSB0aGVpciBlbWFpbCB3aGVuIHRoZXkgc3VibWl0IGZlZWRiYWNrXHJcblx0ZW1haWxQb2xpY3lWYWx1ZT86IENvbnN0YW50cy5PQ1BTVmFsdWVzO1xyXG5cdC8vIHRoZSBzY3JlZW5zaG90IHBvbGljeSB2YWx1ZSBmcm9tIE9DUFMgdG8gZGV0ZXJtaW5lcyBpZiB0aGUgdXNlciBjYW4gc2VlIGFuIG9wdGlvbiB0byBpbmNsdWRlIHRoZWlyIHNjcmVlbnNob3Qgd2hlbiB0aGV5IHN1Ym1pdCBmZWVkYmFja1xyXG5cdHNjcmVlbnNob3RQb2xpY3lWYWx1ZT86IENvbnN0YW50cy5PQ1BTVmFsdWVzO1xyXG5cdC8vIEFnZUdyb3VwIGVudW0gd2hpY2ggdXNlciBpcyBjbGFzc2ZpZWQgYXNcclxuXHRhZ2VHcm91cD86IEFnZUdyb3VwO1xyXG5cdC8vIEF1dGhlbnRpY2F0aW9uIFR5cGUgb2YgdXNlclxyXG5cdGF1dGhlbnRpY2F0aW9uVHlwZT86IEF1dGhlbnRpY2F0aW9uVHlwZTtcclxuXHQvLyBBcHBsaWNhdGlvbiBzZXR0aW5nc1xyXG5cdGFwcGxpY2F0aW9uU2V0dGluZ3M/OiBJQXBwbGljYXRpb25TZXR0aW5ncztcclxuXHQvLyBQYWNrYWdlIHNldHRpbmdzIGZvciB0aGUgbmV3IHdlYiBzdXJmYWNlcyB1cmxzIChhZnRlciBtaWdyYXRpb24gb2YgdGhlIENETilcclxuXHR3ZWJTdXJmYWNlc1NldHRpbmdzPzogSVdlYlN1cmZhY2VzU2V0dGluZ3M7XHJcblx0Ly8gUHJpdmFjeSBVcmxcclxuXHRwcml2YWN5VXJsPzogc3RyaW5nO1xyXG5cdC8vIFJldGVudGlvbiBEdXJhdGlvbiBpbiBEYXlzIFxyXG5cdHJldGVudGlvbkR1cmF0aW9uRGF5cz86IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVyZmFjZSBmb3IgbWVzc2FnaW5nIHNlcnZpY2Ugc2V0dGluZ3NcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1lc3NhZ2luZ1NlcnZpY2VTZXR0aW5ncyB7XHJcblx0Ly8gSW50ZXJuYWwgY2FtcGFpZ24gbWV0YWRhdGEgYWdncmVnYXRvciB1cmxcclxuXHRjYW1wYWlnbk1ldGFkYXRhQWdncmVnYXRvckludD86IHN0cmluZztcclxuXHQvLyBQcm9kdWN0aW9uIGNhbXBhaWduIG1ldGFkYXRhIGFnZ3JlZ2F0b3IgdXJsIFxyXG5cdGNhbXBhaWduTWV0YWRhdGFBZ2dyZWdhdG9yUHJvZD86IHN0cmluZztcclxuXHQvLyBJbnRlcm5hbCBzZXQgY2FtcGFpZ24gYWN0aW9uIHVybFxyXG5cdHNldENhbXBhaWduQWN0aW9uSW50Pzogc3RyaW5nO1xyXG5cdC8vIFByb2R1Y3Rpb24gc2V0IGNhbXBhaWduIGFjdGlvbiB1cmxcclxuXHRzZXRDYW1wYWlnbkFjdGlvblByb2Q/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbnRlcmZhY2UgZm9yIHBhY2thZ2Ugc2V0dGluZ3NcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVdlYlN1cmZhY2VzU2V0dGluZ3Mge1xyXG5cdC8vIEludGVybmFsIHdlYiBzdXJmYWNlcyB1cmxcclxuXHR3ZWJTdXJmYWNlc0ludFVybD86IHN0cmluZztcclxuXHQvLyBQcm9kdWN0aW9uIHdlYiBzdXJmYWNlcyB1cmwgXHJcblx0d2ViU3VyZmFjZXNQcm9kVXJsPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciBob3N0IGFwcGxpY2F0aW9uIHNldHRpbmdzXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBcHBsaWNhdGlvblNldHRpbmdzIHtcclxuXHRyZWFkb25seSBba2V5OiBzdHJpbmddOiB1bmtub3duO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciBpbkFwcEZlZWRiYWNrIGluaXRpYWxpemF0aW9uIG9wdGlvbnNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUluaXRPcHRpb25zSW5BcHBGZWVkYmFjayB7XHJcblx0Ly8gTWV0aG9kIGNhbGxlZCBvbiBmZWVkYmFjayBzdWJtaXNzaW9uXHJcblx0b25EaXNtaXNzPzogSU9uRGlzbWlzc0RlbGVnYXRlO1xyXG5cdC8vIEJ1ZyBmb3JtIHRvZ2dsZVxyXG5cdGJ1Z0Zvcm0/OiBib29sZWFuO1xyXG5cdC8vIGVtYWlsIGVuYWJsZWRcclxuXHRzaG93RW1haWxBZGRyZXNzPzogYm9vbGVhbjtcclxuXHQvLyBVc2VyIGVtYWlsXHJcblx0dXNlckVtYWlsPzogc3RyaW5nO1xyXG5cdC8vIFNjcmVlbnNob3QgdG9nZ2xlXHJcblx0c2NyZWVuc2hvdD86IGJvb2xlYW47XHJcblx0Ly8gVGhlIHN3aXRjaCB0byBzaG93IGEgdGhhbmsgeW91IHBhbmVsXHJcblx0aXNTaG93VGhhbmtzPzogYm9vbGVhbjtcclxuXHQvLyBGbGFnIHRvIGVuYWJsZS9kaXNhYmxlIHRyYW5zaXN0aW9uIG9uIHRoZSBVSS5cclxuXHR0cmFuc2l0aW9uRW5hYmxlZD86IGJvb2xlYW47XHJcblx0Ly8gdGhlIGZlZWRiYWNrIHBvbGljeSB2YWx1ZSBmcm9tIE9DUFMgdG8gZGV0ZXJtaW5lcyBpZiB0aGUgdXNlciBjYW4gc3VibWl0IGZlZWRiYWNrXHJcblx0c2VuZEZlZWRiYWNrUG9saWN5VmFsdWU/OiBDb25zdGFudHMuT0NQU1ZhbHVlcztcclxuXHQvLyBGZWVkYmFjayBGb3J1bSBVUkxcclxuXHRmZWVkYmFja0ZvcnVtVXJsPzogc3RyaW5nO1xyXG5cdC8vIE15IGZlZWRiYWNrIEZvcnVtIFVSTFxyXG5cdG15RmVlZGJhY2tGb3J1bVVybD86IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVyZmFjZSBmb3IgZmxvb2RnYXRlIGluaXRpYWxpemF0aW9uIG9wdGlvbnNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUluaXRPcHRpb25zRmxvb2RnYXRlIHtcclxuXHQvLyBTaG91bGQgdGhlIGZsb29kZ2F0ZSBwcm9tcHQgYXV0b21hdGljYWxseSBkaXNtaXNzIGlmIG5vdCBjbGlja2VkPyBEZWZhdWx0IGlzIGZhbHNlXHJcblx0YXV0b0Rpc21pc3M/OiBDb25zdGFudHMuQXV0b0Rpc21pc3NWYWx1ZXM7XHJcblxyXG5cdC8vIENhbXBhaWduIGRlZmluaXRpb25zXHJcblx0Y2FtcGFpZ25EZWZpbml0aW9ucz86IENhbXBhaWduRGVmaW5pdGlvbltdO1xyXG5cclxuXHQvLyBGbGlnaHRzIGZvciBUTVMgc2VydmljZVxyXG5cdGNhbXBhaWduRmxpZ2h0cz86IHN0cmluZztcclxuXHJcblx0Ly8gQWRkaXRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzIGZvciBUTVMgc2VydmljZVxyXG5cdGNhbXBhaWduUXVlcnlQYXJhbWV0ZXJzPzogc3RyaW5nO1xyXG5cclxuXHQvLyBEZWxlZ2F0ZSB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZmxvb2RnYXRlIFVJIGlzIGRpc21pc3NlZCwgd2hldGhlciBvbiBhIHN1Ym1pc3Npb24gb3Igbm90XHJcblx0b25EaXNtaXNzPzogKGNhbXBpYWduSWQ6IHN0cmluZywgc3VibWl0dGVkOiBib29sZWFuKSA9PiB2b2lkO1xyXG5cclxuXHQvLyBUaGUgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgd2hlbiBhIHN1cnZleSBpcyBhY3RpdmF0ZWRcclxuXHRvblN1cnZleUFjdGl2YXRlZENhbGxiYWNrPzogSU9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2s7XHJcblxyXG5cdC8vIFRoZSBjYWxsYmFjayB0byBiZSBleGVjdXRlZCB3aGVuIGhvc3QtYmFzZWQgZGF0YSBvcGVyYXRpb25zIGFyZSBuZWVkZWRcclxuXHRzZXR0aW5nU3RvcmFnZUNhbGxiYWNrPzogSUZsb29kZ2F0ZVNldHRpbmdTdG9yYWdlQ2FsbGJhY2s7XHJcblxyXG5cdC8vIE9wdGlvbmFsbHkgcHJvdmlkZSBhIG1ldGhvZCB3aGljaCB3aWxsIGFjY2VwdCB0aGUgY3VzdG9tIHN0cmluZ3MgaW4gQ2FtcGFpZ24gRGVmaW5pdGlvbnMgYW5kIHJldHVybiBhY3R1YWxcclxuXHQvLyBzdHJpbmdzIHRoYXQgbXVzdCBiZSBkaXNwbGF5ZWQuIFVzZWQgZm9yIGxvY2FsaXphdGlvbi5cclxuXHR1SVN0cmluZ0dldHRlcj86IChzdHI6IHN0cmluZykgPT4gc3RyaW5nO1xyXG5cclxuXHQvLyBUaGUgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgd2hlbiBob3N0LWJhc2VkIGF1dGggdG9rZW4gaXMgbmVlZGVkXHJcblx0YXV0aFRva2VuQ2FsbGJhY2s/OiBJRmxvb2RnYXRlQXV0aFRva2VuQ2FsbGJhY2s7XHJcblxyXG5cdC8vIFRoZSBib29sZWFuIG9wdGlvbiB0byBlbmZvcmNlIGlmIHN1cnZleXMgYXJlIGFsbG93ZWQgYnkgYSBwb2xpY3ksIHN1Y2ggYXMgYW4gT0NQUyBwb2xpY3kgZm9yIGEgdGVuYW50LlxyXG5cdC8vIFRydWU6IFN1cnZleXMgYXJlIGVuYWJsZWQsIGZsb29kZ2F0ZSB3b3JrcyBub3JtYWxseTsgRmFsc2U6IFN1cnZleXMgYXJlIGRpc2FibGVkXHJcblx0c3VydmV5RW5hYmxlZD86IGJvb2xlYW47XHJcblxyXG5cdC8vIFRoZSBib29sZWFuIG9wdGlvbiB0byBlbmZvcmNlIGlmIGVtYWlsIGFkZHJlc3MgY29sbGVjdGlvbiBpbiBhIHN1cnZleSBpcyBhbGxvd2VkIGJ5IGEgcG9saWN5LCBzdWNoIGFzIGFuIE9DUFMgcG9saWN5IGZvciBhIHRlbmFudC5cclxuXHQvLyBUcnVlOiBlbWFpbCBhZGRyZXNzIGNvbGxlY3Rpb24gaXMgZW5hYmxlZCwgZmxvb2RnYXRlIHdvcmtzIG5vcm1hbGx5OyBGYWxzZTogZW1haWwgYWRkcmVzcyBjb2xsZWN0aW9uIGlzIGRpc2FibGVkXHJcblx0c2hvd0VtYWlsQWRkcmVzcz86IGJvb2xlYW47XHJcblxyXG5cdC8vIEludGVyZmFjZSB0byBlbmFibGUvZGlzYWJsZSBhbmQgcGFzcyBhdWdMb29wIGhvc3QgcmVmZXJlbmNlc1xyXG5cdGF1Z0xvb3BDYWxsYmFjaz86IElBdWdMb29wQ2FsbGJhY2s8SVNlc3Npb24+O1xyXG5cclxuXHQvLyBJbnRlcmZhY2UgdG8gcGFzcyB0aGUgcGFyYW1zIGZvciB0aGUgQ3VzdG9tZXIgVm9pY2UgU3VydmV5XHJcblx0Y3VzdG9tZXJWb2ljZVN1cnZleVBhcmFtcz86IElDVlN1cnZleVBhcmFtcztcclxuXHJcblx0Ly8gSW50ZXJmYWNlIGZvciBDU1MgcGFyYW1zIHRvIG1vZGlmeSBzdXJ2ZXkgcG9zaXRpb25cclxuXHRzdXJ2ZXlDU1NQYXJhbXM/OiBJU3VydmV5Q1NTUGFyYW1zO1xyXG5cclxuXHQvLyBUaGUgYm9vbGVhbiBvcHRpb24gdG8gZW5hYmwgdGhlIGdvdmVybmFuY2Ugc2VydmljZVxyXG5cdGdvdmVybmFuY2VTZXJ2aWNlRW5hYmxlZD86IGJvb2xlYW47XHJcblxyXG5cdC8vIGNvbmZpZ3VyYXRpb24gZm9yIGdvdmVybmFuY2Ugc2VydmljZVxyXG5cdGdvdmVybmFuY2VTZXJ2aWNlQ29uZmlnPzogSUdvdmVybmFuY2VTZXJ2aWNlQ29uZmlnO1xyXG5cclxuXHQvLyBpcyBwZXJzb25hbGl6ZXIgZW5hYmxlZCBvbiBjbGllbnQgc2lkZS5cclxuXHRwZXJzb25hbGl6ZXJFbmFibGVkPzogYm9vbGVhbjtcclxuXHJcblx0Ly8gTWVzc2FnaW5nIHNlcnZpY2Ugc2V0dGluZ3MgZm9yIHRoZSBuZXcgYmFzZSB1cmxzIChhZnRlciBtaWdyYXRpb24gb2YgdGhlIENETilcclxuXHRtZXNzYWdpbmdTZXJ2aWNlU2V0dGluZ3M/OiBJTWVzc2FnaW5nU2VydmljZVNldHRpbmdzO1xyXG5cclxuXHQvLyBpcyBwcmlvcml0eSBmaWx0ZXIgZW5hYmxlZCBvbiBjbGllbnQgc2lkZS5cclxuXHRpc1ByaW9yaXR5RW5hYmxlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbnRlcmZhY2UgZm9yIGZsb29kZ2F0ZSBldmVudCBzYW1wbGluZyBvcHRpb25zXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElTYW1wbGluZ0V2ZW50IHtcclxuXHR0eXBlOiBzdHJpbmc7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdHNhbXBsZVJhdGU6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU2FtcGxpbmdJbml0T3B0aW9uIHtcclxuXHRldmVudD86IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdvdmVybmFuY2VTZXJ2aWNlQ29uZmlnIHtcclxuXHQvLyBsaW1pdCBudW1iZXIgb2YgcmV0cnlcclxuXHRyZXRyeT86IG51bWJlcjtcclxuXHJcblx0Ly8gdGltZW91dCBpbiBzZWNvbmRcclxuXHR0aW1lb3V0PzogbnVtYmVyO1xyXG5cclxuXHQvLyBJbiBjYXNlIG9mIGZhaWx1cmUgY2FsbCwgb3B0aW9uIHRvIHdoZXRoZXIgY29udGludWUgZGlzcGxheSBzdXJ2ZXkgb3IgZmFsbCBvZmZcclxuXHRmb3JjZVNlcnZpY2VsZXNzU3VydmV5RGlzcGxheT86IGJvb2xlYW47XHJcblxyXG5cdC8vIE9wdGlvbiB0byB1c2Ugc2ltcGxlIHJlcXVlc3RcclxuXHRzaW1wbGVSZXF1ZXN0RW5hYmxlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbi8vIGJpdCBtYXNrIGZsYWc6IHZhbHVlcyBzaG91bGQgYmUgc2V0IDAsMSwyLDQsOCwxNiwgZXRjLi4uXHJcbi8vIEV4YW1wbGUgZm9yIENzcyBhbmQgU3RyaW5ncyBib3RoLCB1c2UgMy5cclxuZXhwb3J0IGVudW0gQ3VzdG9tUmVzb3VyY2VzIHtcclxuXHROb25lID0gMCxcclxuXHRDc3MgPSAxLFxyXG5cdFN0cmluZ3MgPSAyLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBBZ2VHcm91cCB7XHJcblx0VW5kZWZpbmVkLCAvLyBVbmtub3duIGFnZVxyXG5cdE1pbm9yV2l0aG91dFBhcmVudGFsQ29uc2VudCwgLy8gTWlub3IgdW5kZXIgdGhlIGFnZSBvZiBjb25zZW50XHJcblx0TWlub3JXaXRoUGFyZW50YWxDb25zZW50LCAvLyBNaW5vciB1bmRlciBhZ2Ugb2YgY29uc2VudFxyXG5cdEFkdWx0LCAvLyBBZHVsdFxyXG5cdE5vdEFkdWx0LCAvLyBNaW5vciBhYm92ZSBhZ2Ugb2YgY29uc2VudFx0XHJcblx0TWlub3JOb1BhcmVudGFsQ29uc2VudFJlcXVpcmVkLCAvLyBNaW5vciBhYm92ZSBhZ2Ugb2YgY29uc2VudFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBBdXRoZW50aWNhdGlvblR5cGUge1xyXG5cdE1TQSxcclxuXHRBQUQsXHJcblx0VW5hdXRoZW50aWNhdGVkXHJcbn1cclxuXHJcbi8vIFRha2VuIGZyb20gJVNSQ1JPT1QlXFxwcml2YWN5XFxvcHRpb25zXFxwdWJsaWNcXFVzZXJDb25zZW50R3JvdXAuaFxyXG4vLyBFbnVtIHRoYXQgZGVzY3JpYmVzIHRoZSBkaWZmZXJlbnQgY29uc2VudCBjYXRlZ29yaWVzIG9mIHRoZSB1c2VyLlxyXG5leHBvcnQgY29uc3QgZW51bSBVc2VyQ29uc2VudEdyb3VwIHtcclxuXHQvLyBVbmtub3duIGNvbnNlbnQgZ3JvdXAsIHdlIGRvIG5vdCBoYXZlIGluZm8gdG8gZGV0ZXJtaW5lIHRoaXNcclxuXHRVbmtub3duID0gMCxcclxuXHQvLyBDYW4gZ2l2ZSBjb25zZW50IHRvIGRhdGEgY29sbGVjdGlvbiwgdXBzZWxsIG1lc3NhZ2VzXHJcblx0Q2FuQ29uc2VudCA9IDEsXHJcblx0Ly8gQ2FuIHN0aWxsIGdpdmUgY29uc2VudCBidXQgaXMgb25seSBhIGxpbWl0ZWQgY29uc2VudC5cclxuXHQvLyBBcyBhbiBleGFtcGxlLCB1cHNlbGwgLyBjcm9zcyBzZWxsIHNob3VsZCBub3QgYmUgc2hvd24uXHJcblx0UGFydGlhbENvbnNlbnQgPSAyLFxyXG5cdC8vIFRoZXkgY2Fubm90IHByb3ZpZGUgYW55IGZvcm0gb2YgY29uc2VudC4gTm8gY29uc2VudCBkaWFsb2dzIC8gdXBzZWxsIHNob3VsZCBub3QgYmUgc2hvd24uXHJcblx0Q2Fubm90Q29uc2VudCA9IDMsXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/Configuration/IInitOptions.ts\n')},"./scripts/app/Configuration/ILaunchOptions.ts":function(){eval("/**\r\n * LaunchOptions interfaces\r\n */\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Db25maWd1cmF0aW9uL0lMYXVuY2hPcHRpb25zLnRzP2YyOWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUciLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9Db25maWd1cmF0aW9uL0lMYXVuY2hPcHRpb25zLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIExhdW5jaE9wdGlvbnMgaW50ZXJmYWNlc1xyXG4gKi9cclxuXHJcbmltcG9ydCB7SUNhdGVnb3J5T3B0aW9uc30gZnJvbSBcIi4vSUNhdGVnb3J5T3B0aW9uc1wiO1xyXG5pbXBvcnQge0lNYW5pZmVzdERhdGFBcHBsaWNhdGlvbiwgSU1hbmlmZXN0RGF0YVRlbGVtZXRyeSwgSU1hbmlmZXN0RGF0YVdlYn0gZnJvbSBcIi4vLi4vVHJhbnNwb3J0L1RyYW5zcG9ydFwiO1xyXG5cclxuLyoqXHJcbiAqIEludGVyZmFjZSBmb3IgbGF1bmNoIG9wdGlvbnMgZm9yIGluQXBwRmVlZGJhY2tcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUxhdW5jaE9wdGlvbnNJbkFwcEZlZWRiYWNrIHtcclxuXHRhcHBsaWNhdGlvbkdyb3VwPzogSU1hbmlmZXN0RGF0YUFwcGxpY2F0aW9uO1xyXG5cdHRlbGVtZXRyeUdyb3VwPzogSU1hbmlmZXN0RGF0YVRlbGVtZXRyeTtcclxuXHR3ZWJHcm91cD86IElNYW5pZmVzdERhdGFXZWI7XHJcblx0Y2F0ZWdvcmllcz86IElDYXRlZ29yeU9wdGlvbnM7XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/Configuration/ILaunchOptions.ts\n")},"./scripts/app/Constants.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "customerVoiceLauncherType", function() { return customerVoiceLauncherType; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "customerVoiceSurveyUX", function() { return customerVoiceSurveyUX; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FeedbackType", function() { return FeedbackType; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicScriptUrls", function() { return DynamicScriptUrls; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GUIDs", function() { return GUIDs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SDK_VERSION_PREFIX", function() { return SDK_VERSION_PREFIX; });\n/**\r\n * Constants.ts\r\n *\r\n * A module for non-UI constants.\r\n */\r\n/**\r\n * Value for the Customer Voice Launcher Type\r\n */\r\nvar customerVoiceLauncherType = "customervoice";\r\n/**\r\n * Value for the Customer Voice Survey text for adding to App data\r\n */\r\nvar customerVoiceSurveyUX = "Customer Voice Survey UX";\r\n/**\r\n * Values for types of feedback that go into the json\r\n * Also used to determine the FormTemplate used on each one of the feedback types.\r\n */\r\nvar FeedbackType;\r\n(function (FeedbackType) {\r\n    FeedbackType[FeedbackType["Smile"] = 0] = "Smile";\r\n    FeedbackType[FeedbackType["Frown"] = 1] = "Frown";\r\n    FeedbackType[FeedbackType["Idea"] = 2] = "Idea";\r\n    FeedbackType[FeedbackType["Bug"] = 3] = "Bug";\r\n    FeedbackType[FeedbackType["IdeaRedirect"] = 4] = "IdeaRedirect";\r\n})(FeedbackType || (FeedbackType = {}));\r\n/**\r\n * Dynamic scripts\r\n */\r\nvar DynamicScriptUrls = /** @class */ (function () {\r\n    function DynamicScriptUrls() {\r\n    }\r\n    /**\r\n     * Link to the Office WebSurfaces UX package\r\n     */\r\n    /* tslint:disable:max-line-length */\r\n    DynamicScriptUrls.WebSurfacesIntLink = "https://res-sdf.cdn.office.net/office-growth/resources/programmablesurfaces/int/officewebsurfaces.core.min.js";\r\n    DynamicScriptUrls.WebSurfacesProdLink = "https://res.cdn.office.net/office-growth/resources/programmablesurfaces/prod/officewebsurfaces.core.min.js";\r\n    return DynamicScriptUrls;\r\n}());\r\n\r\n/**\r\n * Constant GUIDs\r\n */\r\nvar GUIDs = /** @class */ (function () {\r\n    function GUIDs() {\r\n    }\r\n    GUIDs.TMSAppID = "4c4f550b-42b2-4a16-93f9-fdb9e01bb6ed";\r\n    GUIDs.TULIPSAppID = "05c88d91-956e-46b4-91b0-77a33cc21a4d";\r\n    return GUIDs;\r\n}());\r\n\r\n/**\r\n * Prefix for SDK version string\r\n */\r\nvar SDK_VERSION_PREFIX = "Web SDK v";\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Db25zdGFudHMudHM/MTBhZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O0dBSUc7QUFFSDs7R0FFRztBQUNJLElBQU0seUJBQXlCLEdBQUcsZUFBZSxDQUFDO0FBRXpEOztHQUVHO0FBQ0ksSUFBTSxxQkFBcUIsR0FBRywwQkFBMEIsQ0FBQztBQUVoRTs7O0dBR0c7QUFDSCxJQUFZLFlBTVg7QUFORCxXQUFZLFlBQVk7SUFDdkIsaURBQUs7SUFDTCxpREFBSztJQUNMLCtDQUFJO0lBQ0osNkNBQUc7SUFDSCwrREFBWTtBQUNiLENBQUMsRUFOVyxZQUFZLEtBQVosWUFBWSxRQU12QjtBQWlDRDs7R0FFRztBQUNIO0lBQUE7SUFPQSxDQUFDO0lBTkE7O09BRUc7SUFDSCxvQ0FBb0M7SUFDdEIsb0NBQWtCLEdBQVcsK0dBQStHLENBQUM7SUFDN0kscUNBQW1CLEdBQVcsNEdBQTRHLENBQUM7SUFDMUosd0JBQUM7Q0FBQTtBQVA2QjtBQVM5Qjs7R0FFRztBQUNIO0lBQUE7SUFHQSxDQUFDO0lBRmMsY0FBUSxHQUFXLHNDQUFzQyxDQUFDO0lBQzFELGlCQUFXLEdBQVcsc0NBQXNDLENBQUM7SUFDNUUsWUFBQztDQUFBO0FBSGlCO0FBaUJsQjs7R0FFRztBQUNJLElBQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvQ29uc3RhbnRzLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbnN0YW50cy50c1xyXG4gKlxyXG4gKiBBIG1vZHVsZSBmb3Igbm9uLVVJIGNvbnN0YW50cy5cclxuICovXHJcblxyXG4vKipcclxuICogVmFsdWUgZm9yIHRoZSBDdXN0b21lciBWb2ljZSBMYXVuY2hlciBUeXBlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY3VzdG9tZXJWb2ljZUxhdW5jaGVyVHlwZSA9IFwiY3VzdG9tZXJ2b2ljZVwiO1xyXG5cclxuLyoqXHJcbiAqIFZhbHVlIGZvciB0aGUgQ3VzdG9tZXIgVm9pY2UgU3VydmV5IHRleHQgZm9yIGFkZGluZyB0byBBcHAgZGF0YVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGN1c3RvbWVyVm9pY2VTdXJ2ZXlVWCA9IFwiQ3VzdG9tZXIgVm9pY2UgU3VydmV5IFVYXCI7XHJcblxyXG4vKipcclxuICogVmFsdWVzIGZvciB0eXBlcyBvZiBmZWVkYmFjayB0aGF0IGdvIGludG8gdGhlIGpzb25cclxuICogQWxzbyB1c2VkIHRvIGRldGVybWluZSB0aGUgRm9ybVRlbXBsYXRlIHVzZWQgb24gZWFjaCBvbmUgb2YgdGhlIGZlZWRiYWNrIHR5cGVzLlxyXG4gKi9cclxuZXhwb3J0IGVudW0gRmVlZGJhY2tUeXBlIHtcclxuXHRTbWlsZSxcclxuXHRGcm93bixcclxuXHRJZGVhLFxyXG5cdEJ1ZyxcclxuXHRJZGVhUmVkaXJlY3QsXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWYWx1ZXMgZm9yIHR5cGVzIG9mIHBhbmVscyB0aGF0IGdvIGludG8gdGhlIGpzb25cclxuICogQWxzbyB1c2VkIHRvIGRldGVybWluZSB0aGUgUGFuZWxUZW1wbGF0ZSB1c2VkIG9uIGVhY2ggb25lIG9mIHRoZSBwYW5lbCB0eXBlcy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBlbnVtIFBhbmVsVHlwZSB7XHJcblx0VGhhbmtzXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWYWx1ZXMgZm9yIHRoZSBlbnZpcm9ubWVudFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGVudW0gRW52aXJvbm1lbnQge1xyXG5cdFByb2R1Y3Rpb24sXHJcblx0SW50XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWYWx1ZXMgZm9yIGF1dG9kaXNtaXNzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZW51bSBBdXRvRGlzbWlzc1ZhbHVlcyB7XHJcblx0Tm9BdXRvRGlzbWlzcyxcclxuXHRTZXZlblNlY29uZHMsXHJcblx0Rm91cnRlZW5TZWNvbmRzLFxyXG5cdFR3ZW50eU9uZVNlY29uZHMsXHJcblx0VHdlbnR5RWlnaHRTZWNvbmRzLFxyXG5cdFNpeHR5U2Vjb25kcyxcclxuXHROaW5ldHlTZWNvbmRzLFxyXG5cdE9uZUh1bmRyZWRBbmRUd2VudHlTZWNvbmRzLFxyXG5cdE9uZUh1bmRyZWRBbmRGaWZ0eVNlY29uZHMsXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEeW5hbWljIHNjcmlwdHNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljU2NyaXB0VXJscyB7XHJcblx0LyoqXHJcblx0ICogTGluayB0byB0aGUgT2ZmaWNlIFdlYlN1cmZhY2VzIFVYIHBhY2thZ2VcclxuXHQgKi9cclxuXHQvKiB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGggKi9cclxuXHRwdWJsaWMgc3RhdGljIFdlYlN1cmZhY2VzSW50TGluazogc3RyaW5nID0gXCJodHRwczovL3Jlcy1zZGYuY2RuLm9mZmljZS5uZXQvb2ZmaWNlLWdyb3d0aC9yZXNvdXJjZXMvcHJvZ3JhbW1hYmxlc3VyZmFjZXMvaW50L29mZmljZXdlYnN1cmZhY2VzLmNvcmUubWluLmpzXCI7XHJcblx0cHVibGljIHN0YXRpYyBXZWJTdXJmYWNlc1Byb2RMaW5rOiBzdHJpbmcgPSBcImh0dHBzOi8vcmVzLmNkbi5vZmZpY2UubmV0L29mZmljZS1ncm93dGgvcmVzb3VyY2VzL3Byb2dyYW1tYWJsZXN1cmZhY2VzL3Byb2Qvb2ZmaWNld2Vic3VyZmFjZXMuY29yZS5taW4uanNcIjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnN0YW50IEdVSURzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgR1VJRHMge1xyXG5cdHB1YmxpYyBzdGF0aWMgVE1TQXBwSUQ6IHN0cmluZyA9IFwiNGM0ZjU1MGItNDJiMi00YTE2LTkzZjktZmRiOWUwMWJiNmVkXCI7XHJcblx0cHVibGljIHN0YXRpYyBUVUxJUFNBcHBJRDogc3RyaW5nID0gXCIwNWM4OGQ5MS05NTZlLTQ2YjQtOTFiMC03N2EzM2NjMjFhNGRcIjtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gT0NQU1ZhbHVlcyB7XHJcblx0Tm90Q29uZmlndXJlZCA9IDAsXHJcblx0RW5hYmxlZCA9IDEsXHJcblx0RGlzYWJsZWQgPSAyXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBlbnVtIEZlZWRiYWNrU3RhdHVzIHtcclxuXHRFbmFibGVkLFxyXG5cdERpc2FibGVkQnlBZG1pbixcclxuXHREaXNhYmxlZEJ5QWdlR3JvdXBcclxufVxyXG5cclxuLyoqXHJcbiAqIFByZWZpeCBmb3IgU0RLIHZlcnNpb24gc3RyaW5nXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgU0RLX1ZFUlNJT05fUFJFRklYID0gXCJXZWIgU0RLIHZcIjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/Constants.ts\n')},"./scripts/app/DynamicContent/DynamicContentTransport.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicContentTransport", function() { return DynamicContentTransport; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Utils */ "../FloodgateCore/dist/src/Utils.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Polyfills_Fetch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Polyfills/Fetch */ "./scripts/app/Polyfills/Fetch.ts");\n/* harmony import */ var _TargetedMessaging_TargetedMessagingTransport__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../TargetedMessaging/TargetedMessagingTransport */ "./scripts/app/TargetedMessaging/TargetedMessagingTransport.ts");\n\r\n\r\n\r\n\r\n\r\nvar DynamicContentTransport = /** @class */ (function (_super) {\r\n    Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(DynamicContentTransport, _super);\r\n    function DynamicContentTransport(simpleRequestEnabled) {\r\n        var _this = _super.call(this) || this;\r\n        _this.simpleRequestEnabled = false;\r\n        // Default to use the normal request\r\n        _this.simpleRequestEnabled = simpleRequestEnabled !== null && simpleRequestEnabled !== void 0 ? simpleRequestEnabled : false;\r\n        return _this;\r\n    }\r\n    DynamicContentTransport.prototype.postRequestWithRetry = function (requestUrl, body, retry, timeout) {\r\n        var thisDynamicContentTransport = this;\r\n        return new Promise(function (resolve, reject) {\r\n            thisDynamicContentTransport.sendPostRequest(requestUrl, body, undefined, true, timeout)\r\n                .then(resolve)\r\n                .catch(function (error) {\r\n                _Logging_Logging__WEBPACK_IMPORTED_MODULE_1__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_1__["EventIds"].DYNAMICTRANSPORT_POST_ERROR, 2 /* Error */, {\r\n                    ErrorMessage: error.toString(),\r\n                    TimeMilliseconds: timeout,\r\n                    Count: retry,\r\n                    CorrelationId: thisDynamicContentTransport.requestId,\r\n                });\r\n                if (retry <= 1) {\r\n                    return reject(error);\r\n                }\r\n                thisDynamicContentTransport.postRequestWithRetry(requestUrl, body, retry - 1, timeout)\r\n                    .then(resolve)\r\n                    .catch(reject);\r\n            });\r\n        });\r\n    };\r\n    DynamicContentTransport.prototype.createHeaders = function (token) {\r\n        var headers = typeof Headers !== "undefined" && new Headers();\r\n        if (headers) {\r\n            // Create header based on the request\r\n            if (this.simpleRequestEnabled) {\r\n                this.createSimpleHeaders(headers);\r\n            }\r\n            else {\r\n                this.createNormalHeaders(headers);\r\n            }\r\n            // Governance Service doesn\'t need to use token for now\r\n            if (!Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_2__["isNOU"])(token)) {\r\n                headers.append("Authorization", "Bearer " + token);\r\n            }\r\n        }\r\n        return headers;\r\n    };\r\n    DynamicContentTransport.prototype.createNormalHeaders = function (headers) {\r\n        this.requestId = Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_2__["guid"])();\r\n        headers.append("X-Request-ID", this.requestId);\r\n        headers.append("Content-Type", "application/json");\r\n    };\r\n    DynamicContentTransport.prototype.createSimpleHeaders = function (headers) {\r\n        headers.append("Content-Type", "text/plain");\r\n    };\r\n    return DynamicContentTransport;\r\n}(_TargetedMessaging_TargetedMessagingTransport__WEBPACK_IMPORTED_MODULE_4__["TargetedMessagingTransport"]));\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9EeW5hbWljQ29udGVudC9EeW5hbWljQ29udGVudFRyYW5zcG9ydC50cz8wNDRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUE4QztBQUMyQjtBQUM3QztBQUNpRTtBQUU3RjtJQUE2Qyx5RkFBMEI7SUFJdEUsaUNBQVksb0JBQThCO1FBQTFDLFlBQ0MsaUJBQU8sU0FJUDtRQVBPLDBCQUFvQixHQUFZLEtBQUssQ0FBQztRQUs3QyxvQ0FBb0M7UUFDcEMsS0FBSSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixhQUFwQixvQkFBb0IsY0FBcEIsb0JBQW9CLEdBQUksS0FBSyxDQUFDOztJQUMzRCxDQUFDO0lBRU0sc0RBQW9CLEdBQTNCLFVBQTRCLFVBQWtCLEVBQUUsSUFBWSxFQUFFLEtBQWEsRUFBRSxPQUFlO1FBQzNGLElBQU0sMkJBQTJCLEdBQUcsSUFBSSxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBUyxPQUFPLEVBQUUsTUFBTTtZQUMxQywyQkFBMkIsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztpQkFDdEYsSUFBSSxDQUFDLE9BQU8sQ0FBQztpQkFDYixLQUFLLENBQUMsVUFBUyxLQUFLO2dCQUNwQiwwREFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FDM0IseURBQWdCLENBQUMsMkJBQTJCLGlCQUU1QztvQkFDQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRTtvQkFDOUIsZ0JBQWdCLEVBQUUsT0FBTztvQkFDekIsS0FBSyxFQUFFLEtBQUs7b0JBQ1osYUFBYSxFQUFFLDJCQUEyQixDQUFDLFNBQVM7aUJBQ3BELENBQUMsQ0FBQztnQkFFSixJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7b0JBQ2YsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3JCO2dCQUNELDJCQUEyQixDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUM7cUJBQ3JGLElBQUksQ0FBQyxPQUFPLENBQUM7cUJBQ2IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRVMsK0NBQWEsR0FBdkIsVUFBd0IsS0FBYztRQUNyQyxJQUFNLE9BQU8sR0FBWSxPQUFPLE9BQU8sS0FBSyxXQUFXLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUV6RSxJQUFJLE9BQU8sRUFBRTtZQUNaLHFDQUFxQztZQUNyQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2xDO2lCQUFNO2dCQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNsQztZQUVELHVEQUF1RDtZQUN2RCxJQUFJLENBQUMsd0ZBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO2FBQ25EO1NBQ0Q7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNoQixDQUFDO0lBRU8scURBQW1CLEdBQTNCLFVBQTRCLE9BQWdCO1FBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsdUZBQUksRUFBRSxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxxREFBbUIsR0FBM0IsVUFBNEIsT0FBZ0I7UUFDM0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNGLDhCQUFDO0FBQUQsQ0FBQyxDQWpFNEMsd0dBQTBCLEdBaUV0RSIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0R5bmFtaWNDb250ZW50L0R5bmFtaWNDb250ZW50VHJhbnNwb3J0LnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgTG9nZ2luZyBmcm9tIFwiLi4vTG9nZ2luZy9Mb2dnaW5nXCI7XHJcbmltcG9ydCB7IGlzTk9VLCBndWlkIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9VdGlsc1wiO1xyXG5pbXBvcnQgXCIuLi9Qb2x5ZmlsbHMvRmV0Y2hcIjtcclxuaW1wb3J0IHsgVGFyZ2V0ZWRNZXNzYWdpbmdUcmFuc3BvcnQgfSBmcm9tIFwiLi4vVGFyZ2V0ZWRNZXNzYWdpbmcvVGFyZ2V0ZWRNZXNzYWdpbmdUcmFuc3BvcnRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljQ29udGVudFRyYW5zcG9ydCBleHRlbmRzIFRhcmdldGVkTWVzc2FnaW5nVHJhbnNwb3J0IHtcclxuXHRwdWJsaWMgcmVxdWVzdElkOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBzaW1wbGVSZXF1ZXN0RW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihzaW1wbGVSZXF1ZXN0RW5hYmxlZD86IGJvb2xlYW4pIHtcclxuXHRcdHN1cGVyKCk7XHJcblxyXG5cdFx0Ly8gRGVmYXVsdCB0byB1c2UgdGhlIG5vcm1hbCByZXF1ZXN0XHJcblx0XHR0aGlzLnNpbXBsZVJlcXVlc3RFbmFibGVkID0gc2ltcGxlUmVxdWVzdEVuYWJsZWQgPz8gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcG9zdFJlcXVlc3RXaXRoUmV0cnkocmVxdWVzdFVybDogc3RyaW5nLCBib2R5OiBzdHJpbmcsIHJldHJ5OiBudW1iZXIsIHRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8UmVzcG9uc2U+IHtcclxuXHRcdGNvbnN0IHRoaXNEeW5hbWljQ29udGVudFRyYW5zcG9ydCA9IHRoaXM7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcblx0XHRcdHRoaXNEeW5hbWljQ29udGVudFRyYW5zcG9ydC5zZW5kUG9zdFJlcXVlc3QocmVxdWVzdFVybCwgYm9keSwgdW5kZWZpbmVkLCB0cnVlLCB0aW1lb3V0KVxyXG5cdFx0XHQudGhlbihyZXNvbHZlKVxyXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHtcclxuXHRcdFx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KFxyXG5cdFx0XHRcdFx0TG9nZ2luZy5FdmVudElkcy5EWU5BTUlDVFJBTlNQT1JUX1BPU1RfRVJST1IsXHJcblx0XHRcdFx0XHRMb2dnaW5nLkxvZ0xldmVsLkVycm9yLFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRFcnJvck1lc3NhZ2U6IGVycm9yLnRvU3RyaW5nKCksXHJcblx0XHRcdFx0XHRcdFRpbWVNaWxsaXNlY29uZHM6IHRpbWVvdXQsXHJcblx0XHRcdFx0XHRcdENvdW50OiByZXRyeSxcclxuXHRcdFx0XHRcdFx0Q29ycmVsYXRpb25JZDogdGhpc0R5bmFtaWNDb250ZW50VHJhbnNwb3J0LnJlcXVlc3RJZCxcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRpZiAocmV0cnkgPD0gMSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXNEeW5hbWljQ29udGVudFRyYW5zcG9ydC5wb3N0UmVxdWVzdFdpdGhSZXRyeShyZXF1ZXN0VXJsLCBib2R5LCByZXRyeSAtIDEsIHRpbWVvdXQpXHJcblx0XHRcdFx0LnRoZW4ocmVzb2x2ZSlcclxuXHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCBjcmVhdGVIZWFkZXJzKHRva2VuPzogc3RyaW5nKTogSGVhZGVycyB7XHJcblx0XHRjb25zdCBoZWFkZXJzOiBIZWFkZXJzID0gdHlwZW9mIEhlYWRlcnMgIT09IFwidW5kZWZpbmVkXCIgJiYgbmV3IEhlYWRlcnMoKTtcclxuXHJcblx0XHRpZiAoaGVhZGVycykge1xyXG5cdFx0XHQvLyBDcmVhdGUgaGVhZGVyIGJhc2VkIG9uIHRoZSByZXF1ZXN0XHJcblx0XHRcdGlmICh0aGlzLnNpbXBsZVJlcXVlc3RFbmFibGVkKSB7XHJcblx0XHRcdFx0dGhpcy5jcmVhdGVTaW1wbGVIZWFkZXJzKGhlYWRlcnMpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY3JlYXRlTm9ybWFsSGVhZGVycyhoZWFkZXJzKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gR292ZXJuYW5jZSBTZXJ2aWNlIGRvZXNuJ3QgbmVlZCB0byB1c2UgdG9rZW4gZm9yIG5vd1xyXG5cdFx0XHRpZiAoIWlzTk9VKHRva2VuKSkge1xyXG5cdFx0XHRcdGhlYWRlcnMuYXBwZW5kKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIiArIHRva2VuKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGhlYWRlcnM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNyZWF0ZU5vcm1hbEhlYWRlcnMoaGVhZGVyczogSGVhZGVycykge1xyXG5cdFx0dGhpcy5yZXF1ZXN0SWQgPSBndWlkKCk7XHJcblx0XHRoZWFkZXJzLmFwcGVuZChcIlgtUmVxdWVzdC1JRFwiLCB0aGlzLnJlcXVlc3RJZCk7XHJcblx0XHRoZWFkZXJzLmFwcGVuZChcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNyZWF0ZVNpbXBsZUhlYWRlcnMoaGVhZGVyczogSGVhZGVycykge1xyXG5cdFx0aGVhZGVycy5hcHBlbmQoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L3BsYWluXCIpO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/DynamicContent/DynamicContentTransport.ts\n')},"./scripts/app/FloodgateCore/AdaptiveSurveyLauncherFactory.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore */ "../FloodgateCore/dist/index.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _CoachingUXLauncherFactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CoachingUXLauncherFactory */ "./scripts/app/FloodgateCore/CoachingUXLauncherFactory.ts");\n/* harmony import */ var _RudeSurveyLauncherFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./RudeSurveyLauncherFactory */ "./scripts/app/FloodgateCore/RudeSurveyLauncherFactory.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/**\r\n * Survey launcher factory for Web SDK\r\n */\r\n\r\n\r\n\r\n\r\nvar isNOU = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Utils"].isNOU;\r\nvar AdaptiveSurveyLauncherFactory = /** @class */ (function () {\r\n    function AdaptiveSurveyLauncherFactory(rudeSurveyLauncherFactory, coachingUXLauncherFactory) {\r\n        this.rudeSurveyLauncherFactory = rudeSurveyLauncherFactory;\r\n        this.coachingUXLauncherFactory = coachingUXLauncherFactory;\r\n    }\r\n    AdaptiveSurveyLauncherFactory.make = function () {\r\n        return new AdaptiveSurveyLauncherFactory(new _RudeSurveyLauncherFactory__WEBPACK_IMPORTED_MODULE_2__["default"](), new _CoachingUXLauncherFactory__WEBPACK_IMPORTED_MODULE_1__["default"]());\r\n    };\r\n    AdaptiveSurveyLauncherFactory.prototype.makeSurveyLauncher = function (survey) {\r\n        if (isNOU(survey)) {\r\n            return null;\r\n        }\r\n        switch (survey.getLauncherType().toLocaleLowerCase()) {\r\n            case _CoachingUXLauncherFactory__WEBPACK_IMPORTED_MODULE_1__["default"].LAUNCHER_TYPE:\r\n                return this.makeGenericMessagingSurfaceLauncher(survey);\r\n            case _RudeSurveyLauncherFactory__WEBPACK_IMPORTED_MODULE_2__["default"].LAUNCHER_TYPE:\r\n            default:\r\n                return this.makeRudeSurveyLauncher(survey);\r\n        }\r\n    };\r\n    AdaptiveSurveyLauncherFactory.prototype.AcceptsSurvey = function (survey) {\r\n        if (isNOU(survey)) {\r\n            return false;\r\n        }\r\n        switch (survey.getType()) {\r\n            case _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Api"].ISurvey.Type.GenericMessagingSurface:\r\n                return (!isNOU(this.coachingUXLauncherFactory)\r\n                    && this.coachingUXLauncherFactory.AcceptsSurvey(survey));\r\n            default:\r\n                return _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_3__["get"]().checkIfSurveysEnabled() &&\r\n                    !isNOU(this.rudeSurveyLauncherFactory) &&\r\n                    this.rudeSurveyLauncherFactory.AcceptsSurvey(survey);\r\n        }\r\n    };\r\n    AdaptiveSurveyLauncherFactory.prototype.makeGenericMessagingSurfaceLauncher = function (survey) {\r\n        if (!isNOU(this.coachingUXLauncherFactory)) {\r\n            return this.coachingUXLauncherFactory.makeSurveyLauncher(survey);\r\n        }\r\n        return null;\r\n    };\r\n    AdaptiveSurveyLauncherFactory.prototype.makeRudeSurveyLauncher = function (survey) {\r\n        if (!isNOU(this.rudeSurveyLauncherFactory)) {\r\n            return this.rudeSurveyLauncherFactory.makeSurveyLauncher(survey);\r\n        }\r\n        return null;\r\n    };\r\n    return AdaptiveSurveyLauncherFactory;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (AdaptiveSurveyLauncherFactory);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL0FkYXB0aXZlU3VydmV5TGF1bmNoZXJGYWN0b3J5LnRzPzg4ZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0dBRUc7QUFFc0Q7QUFDVztBQUNBO0FBQ0o7QUFFeEQsU0FBSyxHQUFLLGlFQUFLLE1BQVYsQ0FBVztBQUV4QjtJQVVDLHVDQUFvQix5QkFBb0QsRUFDdkUseUJBQW9EO1FBQ3BELElBQUksQ0FBQyx5QkFBeUIsR0FBRyx5QkFBeUIsQ0FBQztRQUMzRCxJQUFJLENBQUMseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7SUFDNUQsQ0FBQztJQWJhLGtDQUFJLEdBQWxCO1FBQ0MsT0FBTyxJQUFJLDZCQUE2QixDQUN2QyxJQUFJLGtFQUF5QixFQUFFLEVBQy9CLElBQUksa0VBQXlCLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFXTSwwREFBa0IsR0FBekIsVUFBMEIsTUFBbUI7UUFDNUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELFFBQVEsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7WUFDckQsS0FBSyxrRUFBeUIsQ0FBQyxhQUFhO2dCQUMzQyxPQUFPLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6RCxLQUFLLGtFQUF5QixDQUFDLGFBQWEsQ0FBQztZQUM3QztnQkFDQyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM1QztJQUNGLENBQUM7SUFFTSxxREFBYSxHQUFwQixVQUFxQixNQUFtQjtRQUN2QyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsQixPQUFPLEtBQUssQ0FBQztTQUNiO1FBRUQsUUFBUSxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDekIsS0FBSywrREFBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCO2dCQUM1QyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDO3VCQUN6QyxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDNUQ7Z0JBQ0MsT0FBTyxnRUFBaUIsRUFBRSxDQUFDLHFCQUFxQixFQUFFO29CQUNqRCxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUM7b0JBQ3RDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkQ7SUFDRixDQUFDO0lBRU8sMkVBQW1DLEdBQTNDLFVBQTRDLE1BQW1CO1FBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakU7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFTyw4REFBc0IsR0FBOUIsVUFBK0IsTUFBbUI7UUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsRUFBRTtZQUMzQyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqRTtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUNGLG9DQUFDO0FBQUQsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0Zsb29kZ2F0ZUNvcmUvQWRhcHRpdmVTdXJ2ZXlMYXVuY2hlckZhY3RvcnkudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogU3VydmV5IGxhdW5jaGVyIGZhY3RvcnkgZm9yIFdlYiBTREtcclxuICovXHJcblxyXG5pbXBvcnQgeyBBcGksIFV0aWxzIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZVwiO1xyXG5pbXBvcnQgQ29hY2hpbmdVWExhdW5jaGVyRmFjdG9yeSBmcm9tIFwiLi9Db2FjaGluZ1VYTGF1bmNoZXJGYWN0b3J5XCI7XHJcbmltcG9ydCBSdWRlU3VydmV5TGF1bmNoZXJGYWN0b3J5IGZyb20gXCIuL1J1ZGVTdXJ2ZXlMYXVuY2hlckZhY3RvcnlcIjtcclxuaW1wb3J0ICogYXMgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi4vQ29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uXCI7XHJcblxyXG5jb25zdCB7IGlzTk9VIH0gPSBVdGlscztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFkYXB0aXZlU3VydmV5TGF1bmNoZXJGYWN0b3J5IGltcGxlbWVudHMgQXBpLklTdXJ2ZXlMYXVuY2hlckZhY3Rvcnkge1xyXG5cdHB1YmxpYyBzdGF0aWMgbWFrZSgpOiBBcGkuSVN1cnZleUxhdW5jaGVyRmFjdG9yeSB7XHJcblx0XHRyZXR1cm4gbmV3IEFkYXB0aXZlU3VydmV5TGF1bmNoZXJGYWN0b3J5KFxyXG5cdFx0XHRuZXcgUnVkZVN1cnZleUxhdW5jaGVyRmFjdG9yeSgpLFxyXG5cdFx0XHRuZXcgQ29hY2hpbmdVWExhdW5jaGVyRmFjdG9yeSgpKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcnVkZVN1cnZleUxhdW5jaGVyRmFjdG9yeTogUnVkZVN1cnZleUxhdW5jaGVyRmFjdG9yeTtcclxuXHRwcml2YXRlIGNvYWNoaW5nVVhMYXVuY2hlckZhY3Rvcnk6IENvYWNoaW5nVVhMYXVuY2hlckZhY3Rvcnk7XHJcblxyXG5cdHByaXZhdGUgY29uc3RydWN0b3IocnVkZVN1cnZleUxhdW5jaGVyRmFjdG9yeTogUnVkZVN1cnZleUxhdW5jaGVyRmFjdG9yeSxcclxuXHRcdGNvYWNoaW5nVVhMYXVuY2hlckZhY3Rvcnk6IENvYWNoaW5nVVhMYXVuY2hlckZhY3RvcnkpIHtcclxuXHRcdHRoaXMucnVkZVN1cnZleUxhdW5jaGVyRmFjdG9yeSA9IHJ1ZGVTdXJ2ZXlMYXVuY2hlckZhY3Rvcnk7XHJcblx0XHR0aGlzLmNvYWNoaW5nVVhMYXVuY2hlckZhY3RvcnkgPSBjb2FjaGluZ1VYTGF1bmNoZXJGYWN0b3J5O1xyXG5cdH1cclxuXHJcblx0cHVibGljIG1ha2VTdXJ2ZXlMYXVuY2hlcihzdXJ2ZXk6IEFwaS5JU3VydmV5KTogQXBpLklTdXJ2ZXlMYXVuY2hlciB7XHJcblx0XHRpZiAoaXNOT1Uoc3VydmV5KSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRzd2l0Y2ggKHN1cnZleS5nZXRMYXVuY2hlclR5cGUoKS50b0xvY2FsZUxvd2VyQ2FzZSgpKSB7XHJcblx0XHRcdGNhc2UgQ29hY2hpbmdVWExhdW5jaGVyRmFjdG9yeS5MQVVOQ0hFUl9UWVBFOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLm1ha2VHZW5lcmljTWVzc2FnaW5nU3VyZmFjZUxhdW5jaGVyKHN1cnZleSk7XHJcblx0XHRcdGNhc2UgUnVkZVN1cnZleUxhdW5jaGVyRmFjdG9yeS5MQVVOQ0hFUl9UWVBFOlxyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLm1ha2VSdWRlU3VydmV5TGF1bmNoZXIoc3VydmV5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBBY2NlcHRzU3VydmV5KHN1cnZleTogQXBpLklTdXJ2ZXkpOiBib29sZWFuIHtcclxuXHRcdGlmIChpc05PVShzdXJ2ZXkpKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRzd2l0Y2ggKHN1cnZleS5nZXRUeXBlKCkpIHtcclxuXHRcdFx0Y2FzZSBBcGkuSVN1cnZleS5UeXBlLkdlbmVyaWNNZXNzYWdpbmdTdXJmYWNlOlxyXG5cdFx0XHRcdHJldHVybiAoIWlzTk9VKHRoaXMuY29hY2hpbmdVWExhdW5jaGVyRmFjdG9yeSlcclxuXHRcdFx0XHRcdFx0JiYgdGhpcy5jb2FjaGluZ1VYTGF1bmNoZXJGYWN0b3J5LkFjY2VwdHNTdXJ2ZXkoc3VydmV5KSk7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIENvbmZpZ3VyYXRpb24uZ2V0KCkuY2hlY2tJZlN1cnZleXNFbmFibGVkKCkgJiZcclxuXHRcdFx0XHRcdCFpc05PVSh0aGlzLnJ1ZGVTdXJ2ZXlMYXVuY2hlckZhY3RvcnkpICYmXHJcblx0XHRcdFx0XHR0aGlzLnJ1ZGVTdXJ2ZXlMYXVuY2hlckZhY3RvcnkuQWNjZXB0c1N1cnZleShzdXJ2ZXkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYWtlR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2VMYXVuY2hlcihzdXJ2ZXk6IEFwaS5JU3VydmV5KTogQXBpLklTdXJ2ZXlMYXVuY2hlciB7XHJcblx0XHRpZiAoIWlzTk9VKHRoaXMuY29hY2hpbmdVWExhdW5jaGVyRmFjdG9yeSkpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuY29hY2hpbmdVWExhdW5jaGVyRmFjdG9yeS5tYWtlU3VydmV5TGF1bmNoZXIoc3VydmV5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWFrZVJ1ZGVTdXJ2ZXlMYXVuY2hlcihzdXJ2ZXk6IEFwaS5JU3VydmV5KTogQXBpLklTdXJ2ZXlMYXVuY2hlciB7XHJcblx0XHRpZiAoIWlzTk9VKHRoaXMucnVkZVN1cnZleUxhdW5jaGVyRmFjdG9yeSkpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMucnVkZVN1cnZleUxhdW5jaGVyRmFjdG9yeS5tYWtlU3VydmV5TGF1bmNoZXIoc3VydmV5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/FloodgateCore/AdaptiveSurveyLauncherFactory.ts\n')},"./scripts/app/FloodgateCore/CoachingUXLauncherFactory.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getWebSurfacesLink", function() { return getWebSurfacesLink; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CoachingUXLauncher", function() { return CoachingUXLauncher; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Configuration/DynamicConfiguration */ "./scripts/app/Configuration/DynamicConfiguration.ts");\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Constants */ "./scripts/app/Constants.ts");\n/* harmony import */ var _Window_DomUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Window/DomUtils */ "./scripts/app/Window/DomUtils.ts");\n/* harmony import */ var _Window_Window__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Window/Window */ "./scripts/app/Window/Window.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/* harmony import */ var _TargetedMessaging_AssetsProvider__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../TargetedMessaging/AssetsProvider */ "./scripts/app/TargetedMessaging/AssetsProvider.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../Utils */ "./scripts/app/Utils.ts");\n/**\r\n * CoachingUX launcher factory for Web SDK\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction getWebSurfacesLink() {\r\n    var _a, _b, _c, _d;\r\n    var internalEnvs = ["dogfood", "edog", "int", "microsoft"];\r\n    var commonInitOptions = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().getCommonInitOptions();\r\n    var audience = ((_a = commonInitOptions.telemetryGroup) === null || _a === void 0 ? void 0 : _a.audienceGroup) || ((_b = commonInitOptions.telemetryGroup) === null || _b === void 0 ? void 0 : _b.audience);\r\n    var isInternalEnv = audience && internalEnvs.indexOf(audience.toLowerCase()) !== -1;\r\n    var webSurfacesConfigLink = isInternalEnv ? (_c = commonInitOptions.webSurfacesSettings) === null || _c === void 0 ? void 0 : _c.webSurfacesIntUrl : (_d = commonInitOptions.webSurfacesSettings) === null || _d === void 0 ? void 0 : _d.webSurfacesProdUrl;\r\n    var webSurfacesDefaultLink = isInternalEnv ?\r\n        _Constants__WEBPACK_IMPORTED_MODULE_4__["DynamicScriptUrls"].WebSurfacesIntLink : _Constants__WEBPACK_IMPORTED_MODULE_4__["DynamicScriptUrls"].WebSurfacesProdLink;\r\n    var settingKey = isInternalEnv ? "WebSurfacesIntLink" /* webSurfacesIntLink */ : "WebSurfacesProdLink" /* webSurfacesProdLink */;\r\n    var webSurfacesLink = webSurfacesConfigLink || Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_3__["getDynamicSetting"])(settingKey, webSurfacesDefaultLink);\r\n    return webSurfacesLink;\r\n}\r\n// web surfaces script url load promise\r\nvar WebSurfacesScriptPromise;\r\nfunction createwebSurfacesScriptPromise() {\r\n    if (!WebSurfacesScriptPromise) {\r\n        WebSurfacesScriptPromise = _Window_DomUtils__WEBPACK_IMPORTED_MODULE_5__["loadScript"](getWebSurfacesLink(), null);\r\n    }\r\n}\r\nvar CoachingUXLauncherFactory = /** @class */ (function () {\r\n    function CoachingUXLauncherFactory() {\r\n    }\r\n    CoachingUXLauncherFactory.prototype.makeSurveyLauncher = function (survey) {\r\n        if (this.AcceptsSurvey(survey)) {\r\n            return new CoachingUXLauncher(survey);\r\n        }\r\n        return null;\r\n    };\r\n    CoachingUXLauncherFactory.prototype.AcceptsSurvey = function (survey) {\r\n        if (!Object(_Utils__WEBPACK_IMPORTED_MODULE_9__["isNOU"])(survey) && survey.getType() === _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__["ISurvey"].Type.GenericMessagingSurface\r\n            && survey.getLauncherType().toLocaleLowerCase() === CoachingUXLauncherFactory.LAUNCHER_TYPE) {\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    CoachingUXLauncherFactory.LAUNCHER_TYPE = "coachingux";\r\n    return CoachingUXLauncherFactory;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (CoachingUXLauncherFactory);\r\nvar CoachingUXLauncher = /** @class */ (function () {\r\n    function CoachingUXLauncher(survey) {\r\n        var _a;\r\n        this.survey = survey;\r\n        // pre-load web surface package if there are any critical campaigns\r\n        if (!WebSurfacesScriptPromise &&\r\n            survey && survey.getSurveyInfo &&\r\n            ((_a = survey.getSurveyInfo()) === null || _a === void 0 ? void 0 : _a.getBusinessLevel()) === _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__["ISurveyInfo"].BusinessLevel.Critical) {\r\n            setTimeout(createwebSurfacesScriptPromise, 1000);\r\n        }\r\n    }\r\n    CoachingUXLauncher.prototype.launch = function (surveyParams) {\r\n        var _this = this;\r\n        var surveyInfo = this.survey && this.survey.getSurveyInfo();\r\n        var surveyMetadata = surveyInfo && surveyInfo.getMetadata();\r\n        var contentMetadata = surveyMetadata && surveyMetadata.getContentMetadata();\r\n        if (!contentMetadata) {\r\n            return;\r\n        }\r\n        var startTime = new Date();\r\n        var getWebSurfacesInstance = function () {\r\n            var windowInstance = _Window_Window__WEBPACK_IMPORTED_MODULE_6__["getGlobal"]();\r\n            return windowInstance && windowInstance.OfficeWebSurfaces;\r\n        };\r\n        var renderWebSurface = function (uxInitOptions) {\r\n            var officeWebSurfaces = getWebSurfacesInstance();\r\n            if (uxInitOptions) {\r\n                officeWebSurfaces.Initialize(uxInitOptions);\r\n            }\r\n            officeWebSurfaces.RemoveSurface();\r\n            var surfaceParams = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({}, contentMetadata), { surfaceContext: {\r\n                    surveyForm: _this.survey,\r\n                    surveyParams: surveyParams,\r\n                } });\r\n            officeWebSurfaces.RenderSurface(surfaceParams, null /* targetElementId */, surveyInfo.getBackEndId());\r\n        };\r\n        var logErrorEvent = function (error) {\r\n            _Logging_Logging__WEBPACK_IMPORTED_MODULE_7__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_7__["EventIds"].WebSurfaces.Common.Error.VALUE, 1 /* Critical */, {\r\n                ErrorMessage: "Error loading websurfaces" + (error && error.message ? ": " + error.message : ""),\r\n                TimeMilliseconds: Date.now() - (+startTime),\r\n            });\r\n        };\r\n        try {\r\n            if (getWebSurfacesInstance()) {\r\n                renderWebSurface();\r\n                return;\r\n            }\r\n            createwebSurfacesScriptPromise();\r\n            // if UX package isn\'t already loaded, download package and render surface\r\n            WebSurfacesScriptPromise\r\n                .then(function () {\r\n                var initOptions = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().getCommonInitOptions();\r\n                var floodgateInitOptions = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().getFloodgateInitOptions();\r\n                var surveyActivatedCallback = floodgateInitOptions && floodgateInitOptions.onSurveyActivatedCallback;\r\n                var beaconCallback = function (beaconParameters) {\r\n                    if (beaconParameters) {\r\n                        return _TargetedMessaging_AssetsProvider__WEBPACK_IMPORTED_MODULE_8__["get"]().setCampaignAction(beaconParameters);\r\n                    }\r\n                };\r\n                var uxOptions = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({}, initOptions), floodgateInitOptions), { beaconCallback: beaconCallback, surfaceInitTime: startTime, surfaceId: surveyInfo.getBackEndId(), logSessionId: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().getSdkSessionId(), logSettings: Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_3__["getDynamicSetting"])("LogLevelSettings" /* logLevelSettings */, undefined), renderer: surveyActivatedCallback, renderCallback: surveyActivatedCallback && surveyActivatedCallback.onTeachingCampaignRender });\r\n                renderWebSurface(uxOptions);\r\n            }).catch(function (error) {\r\n                logErrorEvent(error);\r\n            });\r\n        }\r\n        catch (error) {\r\n            logErrorEvent(error);\r\n        }\r\n    };\r\n    return CoachingUXLauncher;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL0NvYWNoaW5nVVhMYXVuY2hlckZhY3RvcnkudHM/NDA2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0dBRUc7O0FBRWlFO0FBRUY7QUFFb0I7QUFFNUM7QUFDSztBQUNKO0FBQ0c7QUFDd0I7QUFDckM7QUF5QjFCLFNBQVMsa0JBQWtCOztJQUNqQyxJQUFNLFlBQVksR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdELElBQU0saUJBQWlCLEdBQUcsZ0VBQWlCLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ3JFLElBQU0sUUFBUSxHQUFHLHdCQUFpQixDQUFDLGNBQWMsMENBQUUsYUFBYSxZQUFJLGlCQUFpQixDQUFDLGNBQWMsMENBQUUsUUFBUSxFQUFDO0lBQy9HLElBQU0sYUFBYSxHQUFHLFFBQVEsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLElBQU0scUJBQXFCLEdBQUcsYUFBYSxDQUFDLENBQUMsT0FDNUMsaUJBQWlCLENBQUMsbUJBQW1CLDBDQUFFLGlCQUFpQixDQUFDLENBQUMsT0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsMENBQUUsa0JBQWtCLENBQUM7SUFDdEgsSUFBTSxzQkFBc0IsR0FBRyxhQUFhLENBQUMsQ0FBQztRQUM3Qyw0REFBMkIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsNERBQTJCLENBQUMsbUJBQW1CLENBQUM7SUFDbEcsSUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLENBQUMsK0NBQStCLENBQUMsZ0RBQStCLENBQUM7SUFDbEcsSUFBTSxlQUFlLEdBQUcscUJB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QUFDLFlBQVksRUFBRSxFQUNwQyxZQUFZLEVBQUUsZ0VBQWlCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsRUFDbkQsV0FBVyxFQUFFLDZGQUFpQiw0Q0FBOEIsU0FBUyxDQUFDLEVBQ3RFLFFBQVEsRUFBRSx1QkFBdUIsRUFDakMsY0FBYyxFQUFFLHVCQUF1QixJQUFJLHVCQUF1QixDQUFDLHdCQUF3QixHQUMzRixDQUFDO2dCQUVGLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFLO2dCQUNiLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztTQUNIO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZixhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckI7SUFDRixDQUFDO0lBQ0YseUJBQUM7QUFBRCxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvRmxvb2RnYXRlQ29yZS9Db2FjaGluZ1VYTGF1bmNoZXJGYWN0b3J5LnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvYWNoaW5nVVggbGF1bmNoZXIgZmFjdG9yeSBmb3IgV2ViIFNES1xyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIEFwaSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9BcGlcIjtcclxuXHJcbmltcG9ydCAqIGFzIENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vLi4vQ29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IElJbml0T3B0aW9uc0NvbW1vbiB9IGZyb20gXCIuLy4uL0NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBnZXREeW5hbWljU2V0dGluZywgU2V0dGluZ0tleSB9IGZyb20gXCIuLi9Db25maWd1cmF0aW9uL0R5bmFtaWNDb25maWd1cmF0aW9uXCI7XHJcblxyXG5pbXBvcnQgKiBhcyBDb25zdGFudHMgZnJvbSBcIi4uL0NvbnN0YW50c1wiO1xyXG5pbXBvcnQgKiBhcyBEb21VdGlscyBmcm9tIFwiLi4vV2luZG93L0RvbVV0aWxzXCI7XHJcbmltcG9ydCAqIGFzIFdpbmRvdyBmcm9tIFwiLi4vV2luZG93L1dpbmRvd1wiO1xyXG5pbXBvcnQgKiBhcyBMb2dnaW5nIGZyb20gXCIuLi9Mb2dnaW5nL0xvZ2dpbmdcIjtcclxuaW1wb3J0ICogYXMgQXNzZXRzUHJvdmlkZXIgZnJvbSBcIi4uL1RhcmdldGVkTWVzc2FnaW5nL0Fzc2V0c1Byb3ZpZGVyXCI7XHJcbmltcG9ydCB7IGlzTk9VIH0gZnJvbSBcIi4uL1V0aWxzXCI7XHJcblxyXG5pbXBvcnQgeyBJU3VydmV5UGFyYW1zIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9BcGkvSU9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2tcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJlYWNvblBhcmFtZXRlcnMge1xyXG5cdGFjdGlvbk5hbWU6IHN0cmluZztcclxuXHRhY3Rpb25Vcmw6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT2ZmaWNlV2ViU3VyZmFjZXMge1xyXG5cdEluaXRpYWxpemUoaW50T3B0aW9uczogSUluaXRPcHRpb25zQ29tbW9uKTogdm9pZDtcclxuXHRSZW5kZXJTdXJmYWNlKFxyXG5cdFx0c3VyZmFjZVBhcmFtczogYW55LFxyXG5cdFx0dGFyZ2V0RWxlbWVudElkPzogc3RyaW5nLFxyXG5cdFx0c3VyZmFjZUlkPzogc3RyaW5nKTogdm9pZDtcclxuXHRSZW1vdmVTdXJmYWNlKCk6IHZvaWQ7XHJcblx0R2V0U3VyZmFjZUNvbnRhaW5lcklkKCk6IHN0cmluZztcclxufVxyXG5cclxuZGVjbGFyZSBtb2R1bGUgXCIuLi9XaW5kb3cvV2luZG93XCIge1xyXG5cdGludGVyZmFjZSBJV2luZG93IHtcclxuXHRcdE9mZmljZVdlYlN1cmZhY2VzOiBJT2ZmaWNlV2ViU3VyZmFjZXM7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2ViU3VyZmFjZXNMaW5rKCkge1xyXG5cdGNvbnN0IGludGVybmFsRW52cyA9IFtcImRvZ2Zvb2RcIiwgXCJlZG9nXCIsIFwiaW50XCIsIFwibWljcm9zb2Z0XCJdO1xyXG5cdGNvbnN0IGNvbW1vbkluaXRPcHRpb25zID0gQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpO1xyXG5cdGNvbnN0IGF1ZGllbmNlID0gY29tbW9uSW5pdE9wdGlvbnMudGVsZW1ldHJ5R3JvdXA/LmF1ZGllbmNlR3JvdXAgfHwgY29tbW9uSW5pdE9wdGlvbnMudGVsZW1ldHJ5R3JvdXA/LmF1ZGllbmNlO1xyXG5cdGNvbnN0IGlzSW50ZXJuYWxFbnYgPSBhdWRpZW5jZSAmJiBpbnRlcm5hbEVudnMuaW5kZXhPZihhdWRpZW5jZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTE7XHJcblx0Y29uc3Qgd2ViU3VyZmFjZXNDb25maWdMaW5rID0gaXNJbnRlcm5hbEVudiA/XHJcblx0XHRjb21tb25Jbml0T3B0aW9ucy53ZWJTdXJmYWNlc1NldHRpbmdzPy53ZWJTdXJmYWNlc0ludFVybCA6IGNvbW1vbkluaXRPcHRpb25zLndlYlN1cmZhY2VzU2V0dGluZ3M/LndlYlN1cmZhY2VzUHJvZFVybDtcclxuXHRjb25zdCB3ZWJTdXJmYWNlc0RlZmF1bHRMaW5rID0gaXNJbnRlcm5hbEVudiA/XHJcblx0XHRDb25zdGFudHMuRHluYW1pY1NjcmlwdFVybHMuV2ViU3VyZmFjZXNJbnRMaW5rIDogQ29uc3RhbnRzLkR5bmFtaWNTY3JpcHRVcmxzLldlYlN1cmZhY2VzUHJvZExpbms7XHJcblx0Y29uc3Qgc2V0dGluZ0tleSA9IGlzSW50ZXJuYWxFbnYgPyBTZXR0aW5nS2V5LndlYlN1cmZhY2VzSW50TGluayA6IFNldHRpbmdLZXkud2ViU3VyZmFjZXNQcm9kTGluaztcclxuXHRjb25zdCB3ZWJTdXJmYWNlc0xpbmsgPSB3ZWJTdXJmYWNlc0NvbmZpZ0xpbmsgfHwgZ2V0RHluYW1pY1NldHRpbmcoc2V0dGluZ0tleSwgd2ViU3VyZmFjZXNEZWZhdWx0TGluayk7XHJcblx0cmV0dXJuIHdlYlN1cmZhY2VzTGluaztcclxufVxyXG5cclxuLy8gd2ViIHN1cmZhY2VzIHNjcmlwdCB1cmwgbG9hZCBwcm9taXNlXHJcbmxldCBXZWJTdXJmYWNlc1NjcmlwdFByb21pc2U6IFByb21pc2U8dm9pZD47XHJcbmZ1bmN0aW9uIGNyZWF0ZXdlYlN1cmZhY2VzU2NyaXB0UHJvbWlzZSgpIHtcclxuXHRpZiAoIVdlYlN1cmZhY2VzU2NyaXB0UHJvbWlzZSkge1xyXG5cdFx0V2ViU3VyZmFjZXNTY3JpcHRQcm9taXNlID0gRG9tVXRpbHMubG9hZFNjcmlwdChnZXRXZWJTdXJmYWNlc0xpbmsoKSwgbnVsbCk7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2FjaGluZ1VYTGF1bmNoZXJGYWN0b3J5IGltcGxlbWVudHMgQXBpLklTdXJ2ZXlMYXVuY2hlckZhY3Rvcnkge1xyXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTEFVTkNIRVJfVFlQRTogc3RyaW5nID0gXCJjb2FjaGluZ3V4XCI7XHJcblxyXG5cdHB1YmxpYyBtYWtlU3VydmV5TGF1bmNoZXIoc3VydmV5OiBBcGkuSVN1cnZleSk6IEFwaS5JU3VydmV5TGF1bmNoZXIge1xyXG5cdFx0aWYgKHRoaXMuQWNjZXB0c1N1cnZleShzdXJ2ZXkpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgQ29hY2hpbmdVWExhdW5jaGVyKHN1cnZleSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgQWNjZXB0c1N1cnZleShzdXJ2ZXk6IEFwaS5JU3VydmV5KTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWlzTk9VKHN1cnZleSkgJiYgc3VydmV5LmdldFR5cGUoKSA9PT0gQXBpLklTdXJ2ZXkuVHlwZS5HZW5lcmljTWVzc2FnaW5nU3VyZmFjZVxyXG5cdFx0XHQmJiBzdXJ2ZXkuZ2V0TGF1bmNoZXJUeXBlKCkudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gQ29hY2hpbmdVWExhdW5jaGVyRmFjdG9yeS5MQVVOQ0hFUl9UWVBFKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb2FjaGluZ1VYTGF1bmNoZXIgaW1wbGVtZW50cyBBcGkuSVN1cnZleUxhdW5jaGVyIHtcclxuXHRwcml2YXRlIHN1cnZleTogQXBpLklTdXJ2ZXk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHN1cnZleTogQXBpLklTdXJ2ZXkpIHtcclxuXHRcdHRoaXMuc3VydmV5ID0gc3VydmV5O1xyXG5cclxuXHRcdC8vIHByZS1sb2FkIHdlYiBzdXJmYWNlIHBhY2thZ2UgaWYgdGhlcmUgYXJlIGFueSBjcml0aWNhbCBjYW1wYWlnbnNcclxuXHRcdGlmICghV2ViU3VyZmFjZXNTY3JpcHRQcm9taXNlICYmXHJcblx0XHRcdHN1cnZleSAmJiBzdXJ2ZXkuZ2V0U3VydmV5SW5mbyAmJlxyXG5cdFx0XHRzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpPy5nZXRCdXNpbmVzc0xldmVsKCkgPT09IEFwaS5JU3VydmV5SW5mby5CdXNpbmVzc0xldmVsLkNyaXRpY2FsKSB7XHJcblx0XHRcdHNldFRpbWVvdXQoY3JlYXRld2ViU3VyZmFjZXNTY3JpcHRQcm9taXNlLCAxMDAwKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBsYXVuY2goc3VydmV5UGFyYW1zPzogSVN1cnZleVBhcmFtcyk6IHZvaWQge1xyXG5cdFx0Y29uc3Qgc3VydmV5SW5mbyA9IHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmdldFN1cnZleUluZm8oKTtcclxuXHRcdGNvbnN0IHN1cnZleU1ldGFkYXRhID0gc3VydmV5SW5mbyAmJiBzdXJ2ZXlJbmZvLmdldE1ldGFkYXRhKCk7XHJcblx0XHRjb25zdCBjb250ZW50TWV0YWRhdGEgPSBzdXJ2ZXlNZXRhZGF0YSAmJiBzdXJ2ZXlNZXRhZGF0YS5nZXRDb250ZW50TWV0YWRhdGEoKTtcclxuXHRcdGlmICghY29udGVudE1ldGFkYXRhKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0Y29uc3QgZ2V0V2ViU3VyZmFjZXNJbnN0YW5jZSA9ICgpID0+IHtcclxuXHRcdFx0Y29uc3Qgd2luZG93SW5zdGFuY2UgPSBXaW5kb3cuZ2V0R2xvYmFsKCk7XHJcblx0XHRcdHJldHVybiB3aW5kb3dJbnN0YW5jZSAmJiB3aW5kb3dJbnN0YW5jZS5PZmZpY2VXZWJTdXJmYWNlcztcclxuXHRcdH07XHJcblxyXG5cdFx0Y29uc3QgcmVuZGVyV2ViU3VyZmFjZSA9ICh1eEluaXRPcHRpb25zPzogYW55KSA9PiB7XHJcblx0XHRcdGNvbnN0IG9mZmljZVdlYlN1cmZhY2VzID0gZ2V0V2ViU3VyZmFjZXNJbnN0YW5jZSgpO1xyXG5cdFx0XHRpZiAodXhJbml0T3B0aW9ucykge1xyXG5cdFx0XHRcdG9mZmljZVdlYlN1cmZhY2VzLkluaXRpYWxpemUodXhJbml0T3B0aW9ucyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdG9mZmljZVdlYlN1cmZhY2VzLlJlbW92ZVN1cmZhY2UoKTtcclxuXHJcblx0XHRcdGNvbnN0IHN1cmZhY2VQYXJhbXMgPSB7XHJcblx0XHRcdFx0Li4uY29udGVudE1ldGFkYXRhLFxyXG5cdFx0XHRcdHN1cmZhY2VDb250ZXh0OiB7XHJcblx0XHRcdFx0XHRzdXJ2ZXlGb3JtOiB0aGlzLnN1cnZleSxcclxuXHRcdFx0XHRcdHN1cnZleVBhcmFtcyxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9O1xyXG5cdFx0XHRvZmZpY2VXZWJTdXJmYWNlcy5SZW5kZXJTdXJmYWNlKFxyXG5cdFx0XHRcdHN1cmZhY2VQYXJhbXMsXHJcblx0XHRcdFx0bnVsbCAvKiB0YXJnZXRFbGVtZW50SWQgKi8sXHJcblx0XHRcdFx0c3VydmV5SW5mby5nZXRCYWNrRW5kSWQoKSk7XHJcblx0XHR9O1xyXG5cclxuXHRcdGNvbnN0IGxvZ0Vycm9yRXZlbnQgPSAoZXJyb3I/OiBFcnJvcikgPT4ge1xyXG5cdFx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KFxyXG5cdFx0XHRcdExvZ2dpbmcuRXZlbnRJZHMuV2ViU3VyZmFjZXMuQ29tbW9uLkVycm9yLlZBTFVFLFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuQ3JpdGljYWwsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0RXJyb3JNZXNzYWdlOiBcIkVycm9yIGxvYWRpbmcgd2Vic3VyZmFjZXNcIiArIChlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gXCI6IFwiICsgZXJyb3IubWVzc2FnZSA6IFwiXCIpLFxyXG5cdFx0XHRcdFx0VGltZU1pbGxpc2Vjb25kczogRGF0ZS5ub3coKSAtICgrc3RhcnRUaW1lKSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdH07XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKGdldFdlYlN1cmZhY2VzSW5zdGFuY2UoKSkge1xyXG5cdFx0XHRcdHJlbmRlcldlYlN1cmZhY2UoKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNyZWF0ZXdlYlN1cmZhY2VzU2NyaXB0UHJvbWlzZSgpO1xyXG5cclxuXHRcdFx0Ly8gaWYgVVggcGFja2FnZSBpc24ndCBhbHJlYWR5IGxvYWRlZCwgZG93bmxvYWQgcGFja2FnZSBhbmQgcmVuZGVyIHN1cmZhY2VcclxuXHRcdFx0V2ViU3VyZmFjZXNTY3JpcHRQcm9taXNlXHJcblx0XHRcdC50aGVuKCgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBpbml0T3B0aW9ucyA9IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKTtcclxuXHRcdFx0XHRjb25zdCBmbG9vZGdhdGVJbml0T3B0aW9ucyA9IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlSW5pdE9wdGlvbnMoKTtcclxuXHRcdFx0XHRjb25zdCBzdXJ2ZXlBY3RpdmF0ZWRDYWxsYmFjayA9IGZsb29kZ2F0ZUluaXRPcHRpb25zICYmIGZsb29kZ2F0ZUluaXRPcHRpb25zLm9uU3VydmV5QWN0aXZhdGVkQ2FsbGJhY2s7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGJlYWNvbkNhbGxiYWNrID0gKGJlYWNvblBhcmFtZXRlcnM6IElCZWFjb25QYXJhbWV0ZXJzKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XHJcblx0XHRcdFx0XHRpZiAoYmVhY29uUGFyYW1ldGVycykge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gQXNzZXRzUHJvdmlkZXIuZ2V0KCkuc2V0Q2FtcGFpZ25BY3Rpb24oYmVhY29uUGFyYW1ldGVycyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0Y29uc3QgdXhPcHRpb25zID0ge1xyXG5cdFx0XHRcdFx0Li4uaW5pdE9wdGlvbnMsXHJcblx0XHRcdFx0XHQuLi5mbG9vZGdhdGVJbml0T3B0aW9ucyxcclxuXHRcdFx0XHRcdGJlYWNvbkNhbGxiYWNrLFxyXG5cdFx0XHRcdFx0c3VyZmFjZUluaXRUaW1lOiBzdGFydFRpbWUsXHJcblx0XHRcdFx0XHRzdXJmYWNlSWQ6IHN1cnZleUluZm8uZ2V0QmFja0VuZElkKCksXHJcblx0XHRcdFx0XHRsb2dTZXNzaW9uSWQ6IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0U2RrU2Vzc2lvbklkKCksXHJcblx0XHRcdFx0XHRsb2dTZXR0aW5nczogZ2V0RHluYW1pY1NldHRpbmcoU2V0dGluZ0tleS5sb2dMZXZlbFNldHRpbmdzLCB1bmRlZmluZWQpLFxyXG5cdFx0XHRcdFx0cmVuZGVyZXI6IHN1cnZleUFjdGl2YXRlZENhbGxiYWNrLFxyXG5cdFx0XHRcdFx0cmVuZGVyQ2FsbGJhY2s6IHN1cnZleUFjdGl2YXRlZENhbGxiYWNrICYmIHN1cnZleUFjdGl2YXRlZENhbGxiYWNrLm9uVGVhY2hpbmdDYW1wYWlnblJlbmRlcixcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRyZW5kZXJXZWJTdXJmYWNlKHV4T3B0aW9ucyk7XHJcblx0XHRcdH0pLmNhdGNoKGVycm9yID0+IHtcclxuXHRcdFx0XHRsb2dFcnJvckV2ZW50KGVycm9yKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRsb2dFcnJvckV2ZW50KGVycm9yKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/FloodgateCore/CoachingUXLauncherFactory.ts\n')},"./scripts/app/FloodgateCore/FloodgateEnvironmentProvider.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/**\r\n * Implementation for IFloodgateEnvironmentProvider for web SDK.\r\n * We pass the SDK\'s internal locale here and not the one which the host app specifies.\r\n */\r\n\r\nvar FloodgateEnvironmentProvider = /** @class */ (function () {\r\n    function FloodgateEnvironmentProvider() {\r\n    }\r\n    FloodgateEnvironmentProvider.prototype.getLanguage = function () {\r\n        return _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__["get"]().getCommonInitOptions().originalLocale;\r\n    };\r\n    return FloodgateEnvironmentProvider;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (FloodgateEnvironmentProvider);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL0Zsb29kZ2F0ZUVudmlyb25tZW50UHJvdmlkZXIudHM/NGY0ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7OztHQUdHO0FBRytEO0FBRWxFO0lBQUE7SUFJQSxDQUFDO0lBSE8sa0RBQVcsR0FBbEI7UUFDQyxPQUFPLGdFQUFpQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxjQUFjLENBQUM7SUFDbEUsQ0FBQztJQUNGLG1DQUFDO0FBQUQsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0Zsb29kZ2F0ZUNvcmUvRmxvb2RnYXRlRW52aXJvbm1lbnRQcm92aWRlci50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBJbXBsZW1lbnRhdGlvbiBmb3IgSUZsb29kZ2F0ZUVudmlyb25tZW50UHJvdmlkZXIgZm9yIHdlYiBTREsuXHJcbiAqIFdlIHBhc3MgdGhlIFNESydzIGludGVybmFsIGxvY2FsZSBoZXJlIGFuZCBub3QgdGhlIG9uZSB3aGljaCB0aGUgaG9zdCBhcHAgc3BlY2lmaWVzLlxyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIEFwaSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9BcGlcIjtcclxuaW1wb3J0ICogYXMgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi8uLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb29kZ2F0ZUVudmlyb25tZW50UHJvdmlkZXIgaW1wbGVtZW50cyBBcGkuSUZsb29kZ2F0ZUVudmlyb25tZW50UHJvdmlkZXIge1xyXG5cdHB1YmxpYyBnZXRMYW5ndWFnZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5vcmlnaW5hbExvY2FsZTtcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/FloodgateCore/FloodgateEnvironmentProvider.ts\n')},"./scripts/app/FloodgateCore/FloodgateStorageProvider.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Window_Window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../Window/Window */ "./scripts/app/Window/Window.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/**\r\n * Implementation of IFloodgateStorageProvider for Web SDK\r\n */\r\nvar _a;\r\n\r\n\r\n\r\nvar FileType = _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_0__["IFloodgateStorageProvider"].FileType;\r\nvar fileTypeToKeyMap = (_a = {},\r\n    _a[FileType.CampaignDefinitions] = "obf-CampaignDefinitions",\r\n    _a[FileType.CampaignStates] = "obf-CampaignStates",\r\n    _a[FileType.FloodgateSettings] = "obf-FloodgateSettings",\r\n    _a[FileType.GovernedChannelStates] = "obf-GovernedChannelStates",\r\n    _a[FileType.SurveyActivationStats] = "obf-SurveyActivationStats",\r\n    _a[FileType.SurveyEventActivityStats] = "obf-SurveyEventActivityStats",\r\n    _a[FileType.TmsCache_CampaignContent] = "obf-TmsCampaignContent",\r\n    _a[FileType.TmsCache_MessageMetadata] = "obf-TmsMessageMetadata",\r\n    _a[FileType.TmsCache_UserGovernance] = "obf-TmsUserGovernance",\r\n    _a[FileType.Tms_DynamicSettings] = "obf-TmsDynamicSettings",\r\n    _a[FileType.LogLevelSettings] = "obf-LogLevelSettings",\r\n    _a[FileType.UserFacts] = "obf-UserFacts",\r\n    _a[FileType.DebugOverrides] = "obf-DebugOverrides",\r\n    _a);\r\nvar FloodgateStorageProvider = /** @class */ (function () {\r\n    function FloodgateStorageProvider() {\r\n    }\r\n    /**\r\n     * Code to detect localStorage presence.\r\n     * Copied from MDN: https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API\r\n     */\r\n    FloodgateStorageProvider.isStorageAvailable = function () {\r\n        try {\r\n            var x = "__storage_test__";\r\n            _Window_Window__WEBPACK_IMPORTED_MODULE_1__["getGlobal"]().localStorage.setItem(x, x);\r\n            _Window_Window__WEBPACK_IMPORTED_MODULE_1__["getGlobal"]().localStorage.removeItem(x);\r\n            return true;\r\n        }\r\n        catch (e) {\r\n            return e instanceof DOMException && (\r\n            // everything except Firefox\r\n            e.code === 22 ||\r\n                // Firefox\r\n                e.code === 1014 ||\r\n                // test name field too, because code might not be present\r\n                // everything except Firefox\r\n                e.name === "QuotaExceededError" ||\r\n                // Firefox\r\n                e.name === "NS_ERROR_DOM_QUOTA_REACHED") &&\r\n                // acknowledge QuotaExceededError only if there\'s something already stored\r\n                _Window_Window__WEBPACK_IMPORTED_MODULE_1__["getGlobal"]().localStorage.length !== 0;\r\n        }\r\n    };\r\n    /**\r\n     * Safely read an object\r\n     */\r\n    FloodgateStorageProvider.safeReadObject = function (fileType, defaultValue) {\r\n        if (defaultValue === void 0) { defaultValue = undefined; }\r\n        if (!(fileType in FileType)) {\r\n            return defaultValue;\r\n        }\r\n        try {\r\n            var storageKey = fileTypeToKeyMap[fileType];\r\n            var result = _Window_Window__WEBPACK_IMPORTED_MODULE_1__["getGlobal"]().localStorage.getItem(storageKey);\r\n            var parsedObject = result && (result[0] === "{" || result[0] === "[") ? JSON.parse(result) : result;\r\n            return parsedObject !== null && parsedObject !== void 0 ? parsedObject : defaultValue;\r\n        }\r\n        catch (e) {\r\n            // ignore\r\n        }\r\n        return defaultValue;\r\n    };\r\n    /**\r\n     * Lock the file to prevent access from another process.\r\n     */\r\n    FloodgateStorageProvider.prototype.fileLock = function (fileType) {\r\n        // JS runs on a single thread in the browser.\r\n        return;\r\n    };\r\n    /**\r\n     * Unlock the file.\r\n     */\r\n    FloodgateStorageProvider.prototype.fileUnlock = function (fileType) {\r\n        // JS runs on a single thread in the browser.\r\n        return;\r\n    };\r\n    /**\r\n     * Read the file\r\n     */\r\n    FloodgateStorageProvider.prototype.read = function (fileType) {\r\n        if (!(fileType in FileType)) {\r\n            return "";\r\n        }\r\n        var storageKey = fileTypeToKeyMap[fileType];\r\n        var result;\r\n        try {\r\n            result = _Window_Window__WEBPACK_IMPORTED_MODULE_1__["getGlobal"]().localStorage.getItem(storageKey);\r\n        }\r\n        catch (e) {\r\n            _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["EventIds"].SURVEY_FLOODGATE_FILEREAD_FAILED, 2 /* Error */, {\r\n                ErrorMessage: e.toString(),\r\n                FileName: storageKey,\r\n            });\r\n            return "";\r\n        }\r\n        return result;\r\n    };\r\n    /**\r\n     * Write to the file\r\n     */\r\n    FloodgateStorageProvider.prototype.write = function (fileType, content) {\r\n        if (!(fileType in FileType)) {\r\n            return;\r\n        }\r\n        var storageKey = fileTypeToKeyMap[fileType];\r\n        try {\r\n            _Window_Window__WEBPACK_IMPORTED_MODULE_1__["getGlobal"]().localStorage.setItem(storageKey, content);\r\n        }\r\n        catch (e) {\r\n            _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["EventIds"].SURVEY_FLOODGATE_FILEWRITE_FAILED, 2 /* Error */, {\r\n                ErrorMessage: e.toString(),\r\n                FileName: storageKey,\r\n            });\r\n            return;\r\n        }\r\n    };\r\n    return FloodgateStorageProvider;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (FloodgateStorageProvider);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL0Zsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlci50cz84YTc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7R0FFRzs7QUFFc0Y7QUFDNUM7QUFDRztBQUNoRCxJQUFPLFFBQVEsR0FBRyxzR0FBeUIsQ0FBQyxRQUFRLENBQUM7QUFFckQsSUFBTSxnQkFBZ0I7SUFDckIsR0FBQyxRQUFRLENBQUMsbUJBQW1CLElBQUcseUJBQXlCO0lBQ3pELEdBQUMsUUFBUSxDQUFDLGNBQWMsSUFBRyxvQkFBb0I7SUFDL0MsR0FBQyxRQUFRLENBQUMsaUJBQWlCLElBQUcsdUJBQXVCO0lBQ3JELEdBQUMsUUFBUSxDQUFDLHFCQUFxQixJQUFHLDJCQUEyQjtJQUM3RCxHQUFDLFFBQVEsQ0FBQyxxQkFBcUIsSUFBRywyQkFBMkI7SUFDN0QsR0FBQyxRQUFRLENBQUMsd0JBQXdCLElBQUcsOEJBQThCO0lBQ25FLEdBQUMsUUFBUSxDQUFDLHdCQUF3QixJQUFHLHdCQUF3QjtJQUM3RCxHQUFDLFFBQVEsQ0FBQyx3QkFBd0IsSUFBRyx3QkFBd0I7SUFDN0QsR0FBQyxRQUFRLENBQUMsdUJBQXVCLElBQUcsdUJBQXVCO0lBQzNELEdBQUMsUUFBUSxDQUFDLG1CQUFtQixJQUFHLHdCQUF3QjtJQUN4RCxHQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBRyxzQkFBc0I7SUFDbkQsR0FBQyxRQUFRLENBQUMsU0FBUyxJQUFHLGVBQWU7SUFDckMsR0FBQyxRQUFRLENBQUMsY0FBYyxJQUFHLG9CQUFvQjtPQUMvQyxDQUFDO0FBRUY7SUFBQTtJQTZHQSxDQUFDO0lBNUdBOzs7T0FHRztJQUNXLDJDQUFrQixHQUFoQztRQUNDLElBQUk7WUFDSCxJQUFJLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztZQUMzQix3REFBZ0IsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FB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QUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDN0Q7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNYLDBEQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLHlEQUFnQixDQUFDLGlDQUFpQyxpQkFFOUU7Z0JBQ0MsWUFBWSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQzFCLFFBQVEsRUFBRSxVQUFVO2FBQ3BCLENBQUMsQ0FBQztZQUNKLE9BQU87U0FDUDtJQUNGLENBQUM7SUFDRiwrQkFBQztBQUFELENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL0Zsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlci50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyIGZvciBXZWIgU0RLXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlciB9IGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvQXBpL0FwaVwiO1xyXG5pbXBvcnQgKiBhcyBXaW5kb3cgZnJvbSBcIi4vLi4vV2luZG93L1dpbmRvd1wiO1xyXG5pbXBvcnQgKiBhcyBMb2dnaW5nIGZyb20gXCIuLy4uL0xvZ2dpbmcvTG9nZ2luZ1wiO1xyXG5pbXBvcnQgRmlsZVR5cGUgPSBJRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyLkZpbGVUeXBlO1xyXG5cclxuY29uc3QgZmlsZVR5cGVUb0tleU1hcDogeyBbayBpbiBGaWxlVHlwZV06IHN0cmluZyB9ID0ge1xyXG5cdFtGaWxlVHlwZS5DYW1wYWlnbkRlZmluaXRpb25zXTogXCJvYmYtQ2FtcGFpZ25EZWZpbml0aW9uc1wiLFxyXG5cdFtGaWxlVHlwZS5DYW1wYWlnblN0YXRlc106IFwib2JmLUNhbXBhaWduU3RhdGVzXCIsXHJcblx0W0ZpbGVUeXBlLkZsb29kZ2F0ZVNldHRpbmdzXTogXCJvYmYtRmxvb2RnYXRlU2V0dGluZ3NcIixcclxuXHRbRmlsZVR5cGUuR292ZXJuZWRDaGFubmVsU3RhdGVzXTogXCJvYmYtR292ZXJuZWRDaGFubmVsU3RhdGVzXCIsXHJcblx0W0ZpbGVUeXBlLlN1cnZleUFjdGl2YXRpb25TdGF0c106IFwib2JmLVN1cnZleUFjdGl2YXRpb25TdGF0c1wiLFxyXG5cdFtGaWxlVHlwZS5TdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHNdOiBcIm9iZi1TdXJ2ZXlFdmVudEFjdGl2aXR5U3RhdHNcIixcclxuXHRbRmlsZVR5cGUuVG1zQ2FjaGVfQ2FtcGFpZ25Db250ZW50XTogXCJvYmYtVG1zQ2FtcGFpZ25Db250ZW50XCIsXHJcblx0W0ZpbGVUeXBlLlRtc0NhY2hlX01lc3NhZ2VNZXRhZGF0YV06IFwib2JmLVRtc01lc3NhZ2VNZXRhZGF0YVwiLFxyXG5cdFtGaWxlVHlwZS5UbXNDYWNoZV9Vc2VyR292ZXJuYW5jZV06IFwib2JmLVRtc1VzZXJHb3Zlcm5hbmNlXCIsXHJcblx0W0ZpbGVUeXBlLlRtc19EeW5hbWljU2V0dGluZ3NdOiBcIm9iZi1UbXNEeW5hbWljU2V0dGluZ3NcIixcclxuXHRbRmlsZVR5cGUuTG9nTGV2ZWxTZXR0aW5nc106IFwib2JmLUxvZ0xldmVsU2V0dGluZ3NcIixcclxuXHRbRmlsZVR5cGUuVXNlckZhY3RzXTogXCJvYmYtVXNlckZhY3RzXCIsXHJcblx0W0ZpbGVUeXBlLkRlYnVnT3ZlcnJpZGVzXTogXCJvYmYtRGVidWdPdmVycmlkZXNcIixcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlciBpbXBsZW1lbnRzIElGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIge1xyXG5cdC8qKlxyXG5cdCAqIENvZGUgdG8gZGV0ZWN0IGxvY2FsU3RvcmFnZSBwcmVzZW5jZS5cclxuXHQgKiBDb3BpZWQgZnJvbSBNRE46IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJfU3RvcmFnZV9BUEkvVXNpbmdfdGhlX1dlYl9TdG9yYWdlX0FQSVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdGF0aWMgaXNTdG9yYWdlQXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0bGV0IHggPSBcIl9fc3RvcmFnZV90ZXN0X19cIjtcclxuXHRcdFx0V2luZG93LmdldEdsb2JhbCgpLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHgsIHgpO1xyXG5cdFx0XHRXaW5kb3cuZ2V0R2xvYmFsKCkubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oeCk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRyZXR1cm4gZSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiAmJiAoXHJcblx0XHRcdFx0Ly8gZXZlcnl0aGluZyBleGNlcHQgRmlyZWZveFxyXG5cdFx0XHRcdGUuY29kZSA9PT0gMjIgfHxcclxuXHRcdFx0XHQvLyBGaXJlZm94XHJcblx0XHRcdFx0ZS5jb2RlID09PSAxMDE0IHx8XHJcblx0XHRcdFx0Ly8gdGVzdCBuYW1lIGZpZWxkIHRvbywgYmVjYXVzZSBjb2RlIG1pZ2h0IG5vdCBiZSBwcmVzZW50XHJcblx0XHRcdFx0Ly8gZXZlcnl0aGluZyBleGNlcHQgRmlyZWZveFxyXG5cdFx0XHRcdGUubmFtZSA9PT0gXCJRdW90YUV4Y2VlZGVkRXJyb3JcIiB8fFxyXG5cdFx0XHRcdC8vIEZpcmVmb3hcclxuXHRcdFx0XHRlLm5hbWUgPT09IFwiTlNfRVJST1JfRE9NX1FVT1RBX1JFQUNIRURcIikgJiZcclxuXHRcdFx0XHQvLyBhY2tub3dsZWRnZSBRdW90YUV4Y2VlZGVkRXJyb3Igb25seSBpZiB0aGVyZSdzIHNvbWV0aGluZyBhbHJlYWR5IHN0b3JlZFxyXG5cdFx0XHRcdFdpbmRvdy5nZXRHbG9iYWwoKS5sb2NhbFN0b3JhZ2UubGVuZ3RoICE9PSAwO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2FmZWx5IHJlYWQgYW4gb2JqZWN0XHJcblx0ICovXHJcblx0cHVibGljIHN0YXRpYyBzYWZlUmVhZE9iamVjdDxUPihmaWxlVHlwZTogRmlsZVR5cGUsIGRlZmF1bHRWYWx1ZTogVCA9IHVuZGVmaW5lZCk6IFQge1xyXG5cdFx0aWYgKCEoZmlsZVR5cGUgaW4gRmlsZVR5cGUpKSB7XHJcblx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0bGV0IHN0b3JhZ2VLZXkgPSBmaWxlVHlwZVRvS2V5TWFwW2ZpbGVUeXBlXTtcclxuXHRcdFx0Y29uc3QgcmVzdWx0ID0gV2luZG93LmdldEdsb2JhbCgpLmxvY2FsU3RvcmFnZS5nZXRJdGVtKHN0b3JhZ2VLZXkpO1xyXG5cdFx0XHRjb25zdCBwYXJzZWRPYmplY3QgPSByZXN1bHQgJiYgKHJlc3VsdFswXSA9PT0gXCJ7XCIgfHwgcmVzdWx0WzBdID09PSBcIltcIikgPyBKU09OLnBhcnNlKHJlc3VsdCkgOiByZXN1bHQ7XHJcblx0XHRcdHJldHVybiBwYXJzZWRPYmplY3QgPz8gZGVmYXVsdFZhbHVlO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHQvLyBpZ25vcmVcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9jayB0aGUgZmlsZSB0byBwcmV2ZW50IGFjY2VzcyBmcm9tIGFub3RoZXIgcHJvY2Vzcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgZmlsZUxvY2soZmlsZVR5cGU6IEZpbGVUeXBlKTogdm9pZCB7XHJcblx0XHQvLyBKUyBydW5zIG9uIGEgc2luZ2xlIHRocmVhZCBpbiB0aGUgYnJvd3Nlci5cclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVubG9jayB0aGUgZmlsZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgZmlsZVVubG9jayhmaWxlVHlwZTogRmlsZVR5cGUpOiB2b2lkIHtcclxuXHRcdC8vIEpTIHJ1bnMgb24gYSBzaW5nbGUgdGhyZWFkIGluIHRoZSBicm93c2VyLlxyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVhZCB0aGUgZmlsZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyByZWFkKGZpbGVUeXBlOiBGaWxlVHlwZSk6IHN0cmluZyB7XHJcblx0XHRpZiAoIShmaWxlVHlwZSBpbiBGaWxlVHlwZSkpIHtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IHN0b3JhZ2VLZXkgPSBmaWxlVHlwZVRvS2V5TWFwW2ZpbGVUeXBlXTtcclxuXHRcdGxldCByZXN1bHQ6IHN0cmluZztcclxuXHRcdHRyeSB7XHJcblx0XHRcdHJlc3VsdCA9IFdpbmRvdy5nZXRHbG9iYWwoKS5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShzdG9yYWdlS2V5KTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9GTE9PREdBVEVfRklMRVJFQURfRkFJTEVELFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuRXJyb3IsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0RXJyb3JNZXNzYWdlOiBlLnRvU3RyaW5nKCksXHJcblx0XHRcdFx0XHRGaWxlTmFtZTogc3RvcmFnZUtleSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0cmV0dXJuIFwiXCI7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFdyaXRlIHRvIHRoZSBmaWxlXHJcblx0ICovXHJcblx0cHVibGljIHdyaXRlKGZpbGVUeXBlOiBGaWxlVHlwZSwgY29udGVudDogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRpZiAoIShmaWxlVHlwZSBpbiBGaWxlVHlwZSkpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBzdG9yYWdlS2V5ID0gZmlsZVR5cGVUb0tleU1hcFtmaWxlVHlwZV07XHJcblx0XHR0cnkge1xyXG5cdFx0XHRXaW5kb3cuZ2V0R2xvYmFsKCkubG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgY29udGVudCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfRkxPT0RHQVRFX0ZJTEVXUklURV9GQUlMRUQsXHJcblx0XHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5FcnJvcixcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRFcnJvck1lc3NhZ2U6IGUudG9TdHJpbmcoKSxcclxuXHRcdFx0XHRcdEZpbGVOYW1lOiBzdG9yYWdlS2V5LFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/FloodgateCore/FloodgateStorageProvider.ts\n')},"./scripts/app/FloodgateCore/FloodgateStringProvider.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../UIStrings/UIStrings */ "./scripts/app/UIStrings/UIStrings.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/**\r\n * Implementation of IFloodgateStringProvider for Web SDK\r\n */\r\n\r\n\r\n\r\n/* tslint:disable:max-line-length */\r\nvar FloodgateStringProvider = /** @class */ (function () {\r\n    function FloodgateStringProvider() {\r\n    }\r\n    FloodgateStringProvider.prototype.loadStringResource = function (stringId) {\r\n        var uiStrings = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_1__["getUIStrings"]();\r\n        switch (stringId) {\r\n            case (5 /* Nps11RatingValue0 */): return uiStrings.Floodgate.Nps.Rating.Points11Value0;\r\n            case (6 /* Nps11RatingValue1 */): return uiStrings.Floodgate.Nps.Rating.Points11Value1;\r\n            case (7 /* Nps11RatingValue2 */): return uiStrings.Floodgate.Nps.Rating.Points11Value2;\r\n            case (8 /* Nps11RatingValue3 */): return uiStrings.Floodgate.Nps.Rating.Points11Value3;\r\n            case (9 /* Nps11RatingValue4 */): return uiStrings.Floodgate.Nps.Rating.Points11Value4;\r\n            case (10 /* Nps11RatingValue5 */): return uiStrings.Floodgate.Nps.Rating.Points11Value5;\r\n            case (11 /* Nps11RatingValue6 */): return uiStrings.Floodgate.Nps.Rating.Points11Value6;\r\n            case (12 /* Nps11RatingValue7 */): return uiStrings.Floodgate.Nps.Rating.Points11Value7;\r\n            case (13 /* Nps11RatingValue8 */): return uiStrings.Floodgate.Nps.Rating.Points11Value8;\r\n            case (14 /* Nps11RatingValue9 */): return uiStrings.Floodgate.Nps.Rating.Points11Value9;\r\n            case (15 /* Nps11RatingValue10 */): return uiStrings.Floodgate.Nps.Rating.Points11Value10;\r\n            case (16 /* Nps5RatingValue1 */): return uiStrings.Floodgate.Nps.Rating.Points5Value1;\r\n            case (17 /* Nps5RatingValue2 */): return uiStrings.Floodgate.Nps.Rating.Points5Value2;\r\n            case (18 /* Nps5RatingValue3 */): return uiStrings.Floodgate.Nps.Rating.Points5Value3;\r\n            case (19 /* Nps5RatingValue4 */): return uiStrings.Floodgate.Nps.Rating.Points5Value4;\r\n            case (20 /* Nps5RatingValue5 */): return uiStrings.Floodgate.Nps.Rating.Points5Value5;\r\n            case (4 /* NpsRatingQuestion */): return uiStrings.Floodgate.Nps.Rating.Question;\r\n            case (21 /* NpsCommentQuestion */): return uiStrings.Floodgate.Nps.Comment.Question;\r\n            case (3 /* NpsPromptNotNowLabel */): return uiStrings.Floodgate.Nps.Prompt.No;\r\n            case (1 /* NpsPromptQuestion */): return uiStrings.Floodgate.Nps.Prompt.Question;\r\n            case (0 /* NpsPromptTitle */): return uiStrings.Floodgate.Nps.Prompt.Title;\r\n            case (2 /* NpsPromptYesLabel */): return uiStrings.Floodgate.Nps.Prompt.Yes;\r\n            default:\r\n                return "";\r\n        }\r\n    };\r\n    FloodgateStringProvider.prototype.getCustomString = function (str) {\r\n        return _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_2__["get"]().getFloodgateInitOptions().uIStringGetter(str);\r\n    };\r\n    return FloodgateStringProvider;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (FloodgateStringProvider);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL0Zsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLnRzPzZiZDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztHQUVHO0FBRWlFO0FBQ2Q7QUFDWTtBQUVsRSxvQ0FBb0M7QUFFcEM7SUFBQTtJQW1DQSxDQUFDO0lBbENPLG9EQUFrQixHQUF6QixVQUEwQixRQUFpRDtRQUMxRSxJQUFJLFNBQVMsR0FBRyxpRUFBc0IsRUFBRSxDQUFDO1FBRXpDLFFBQVEsUUFBUSxFQUFFO1lBQ2pCLEtBQUssMkJBQTJELENBQUMsQ0FBRSxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDeEgsS0FBSywyQkFBMkQsQ0FBQyxDQUFFLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztZQUN4SCxLQUFLLDJCQUEyRCxDQUFDLENBQUUsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1lBQ3hILEtBQUssMkJBQTJELENBQUMsQ0FBRSxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDeEgsS0FBSywyQkFBMkQsQ0FBQyxDQUFFLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztZQUN4SCxLQUFLLDRCQUEyRCxDQUFDLENBQUUsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1lBQ3hILEtBQUssNEJBQTJELENBQUMsQ0FBRSxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDeEgsS0FBSyw0QkFBMkQsQ0FBQyxDQUFFLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztZQUN4SCxLQUFLLDRCQUEyRCxDQUFDLENBQUUsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1lBQ3hILEtBQUssNEJBQTJELENBQUMsQ0FBRSxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDeEgsS0FBSyw2QkFBNEQsQ0FBQyxDQUFFLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUMxSCxLQUFLLDJCQUEwRCxDQUFDLENBQUUsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQ3RILEtBQUssMkJBQTBELENBQUMsQ0FBRSxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7WUFDdEgsS0FBSywyQkFBMEQsQ0FBQyxDQUFFLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUN0SCxLQUFLLDJCQUEwRCxDQUFDLENBQUUsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQ3RILEtBQUssMkJBQTBELENBQUMsQ0FBRSxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7WUFDdEgsS0FBSywyQkFBMkQsQ0FBQyxDQUFFLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNsSCxLQUFLLDZCQUE0RCxDQUFDLENBQUUsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3BILEtBQUssOEJBQThELENBQUMsQ0FBQyxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDOUcsS0FBSywyQkFBMkQsQ0FBQyxDQUFFLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNsSCxLQUFLLHdCQUF3RCxDQUFDLENBQUcsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQzdHLEtBQUssMkJBQTJELENBQUMsQ0FBRSxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDN0c7Z0JBQ0MsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNGLENBQUM7SUFFTSxpREFBZSxHQUF0QixVQUF1QixHQUFXO1FBQ2pDLE9BQU8sZ0VBQWlCLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0YsOEJBQUM7QUFBRCxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvRmxvb2RnYXRlQ29yZS9GbG9vZGdhdGVTdHJpbmdQcm92aWRlci50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBJRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIgZm9yIFdlYiBTREtcclxuICovXHJcblxyXG5pbXBvcnQgKiBhcyBBcGkgZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9BcGkvQXBpXCI7XHJcbmltcG9ydCAqIGFzIFVJU3RyaW5ncyBmcm9tIFwiLi8uLi9VSVN0cmluZ3MvVUlTdHJpbmdzXCI7XHJcbmltcG9ydCAqIGFzIENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vLi4vQ29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uXCI7XHJcblxyXG4vKiB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGggKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyIGltcGxlbWVudHMgQXBpLklGbG9vZGdhdGVTdHJpbmdQcm92aWRlciB7XHJcblx0cHVibGljIGxvYWRTdHJpbmdSZXNvdXJjZShzdHJpbmdJZDogQXBpLklGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlKTogc3RyaW5nIHtcclxuXHRcdGxldCB1aVN0cmluZ3MgPSBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCk7XHJcblxyXG5cdFx0c3dpdGNoIChzdHJpbmdJZCkge1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTApOlx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUmF0aW5nLlBvaW50czExVmFsdWUwO1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTEpOlx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUmF0aW5nLlBvaW50czExVmFsdWUxO1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTIpOlx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUmF0aW5nLlBvaW50czExVmFsdWUyO1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTMpOlx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUmF0aW5nLlBvaW50czExVmFsdWUzO1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTQpOlx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUmF0aW5nLlBvaW50czExVmFsdWU0O1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTUpOlx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUmF0aW5nLlBvaW50czExVmFsdWU1O1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTYpOlx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUmF0aW5nLlBvaW50czExVmFsdWU2O1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTcpOlx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUmF0aW5nLlBvaW50czExVmFsdWU3O1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTgpOlx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUmF0aW5nLlBvaW50czExVmFsdWU4O1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTkpOlx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUmF0aW5nLlBvaW50czExVmFsdWU5O1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzMTFSYXRpbmdWYWx1ZTEwKTpcdFx0cmV0dXJuIHVpU3RyaW5ncy5GbG9vZGdhdGUuTnBzLlJhdGluZy5Qb2ludHMxMVZhbHVlMTA7XHJcblx0XHRcdGNhc2UgKEFwaS5JRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIuU3RyaW5nVHlwZS5OcHM1UmF0aW5nVmFsdWUxKTpcdFx0cmV0dXJuIHVpU3RyaW5ncy5GbG9vZGdhdGUuTnBzLlJhdGluZy5Qb2ludHM1VmFsdWUxO1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzNVJhdGluZ1ZhbHVlMik6XHRcdHJldHVybiB1aVN0cmluZ3MuRmxvb2RnYXRlLk5wcy5SYXRpbmcuUG9pbnRzNVZhbHVlMjtcclxuXHRcdFx0Y2FzZSAoQXBpLklGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wczVSYXRpbmdWYWx1ZTMpOlx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUmF0aW5nLlBvaW50czVWYWx1ZTM7XHJcblx0XHRcdGNhc2UgKEFwaS5JRmxvb2RnYXRlU3RyaW5nUHJvdmlkZXIuU3RyaW5nVHlwZS5OcHM1UmF0aW5nVmFsdWU0KTpcdFx0cmV0dXJuIHVpU3RyaW5ncy5GbG9vZGdhdGUuTnBzLlJhdGluZy5Qb2ludHM1VmFsdWU0O1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzNVJhdGluZ1ZhbHVlNSk6XHRcdHJldHVybiB1aVN0cmluZ3MuRmxvb2RnYXRlLk5wcy5SYXRpbmcuUG9pbnRzNVZhbHVlNTtcclxuXHRcdFx0Y2FzZSAoQXBpLklGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wc1JhdGluZ1F1ZXN0aW9uKTpcdFx0cmV0dXJuIHVpU3RyaW5ncy5GbG9vZGdhdGUuTnBzLlJhdGluZy5RdWVzdGlvbjtcclxuXHRcdFx0Y2FzZSAoQXBpLklGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wc0NvbW1lbnRRdWVzdGlvbik6XHRcdHJldHVybiB1aVN0cmluZ3MuRmxvb2RnYXRlLk5wcy5Db21tZW50LlF1ZXN0aW9uO1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzUHJvbXB0Tm90Tm93TGFiZWwpOlx0cmV0dXJuIHVpU3RyaW5ncy5GbG9vZGdhdGUuTnBzLlByb21wdC5ObztcclxuXHRcdFx0Y2FzZSAoQXBpLklGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wc1Byb21wdFF1ZXN0aW9uKTpcdFx0cmV0dXJuIHVpU3RyaW5ncy5GbG9vZGdhdGUuTnBzLlByb21wdC5RdWVzdGlvbjtcclxuXHRcdFx0Y2FzZSAoQXBpLklGbG9vZGdhdGVTdHJpbmdQcm92aWRlci5TdHJpbmdUeXBlLk5wc1Byb21wdFRpdGxlKTpcdFx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUHJvbXB0LlRpdGxlO1xyXG5cdFx0XHRjYXNlIChBcGkuSUZsb29kZ2F0ZVN0cmluZ1Byb3ZpZGVyLlN0cmluZ1R5cGUuTnBzUHJvbXB0WWVzTGFiZWwpOlx0XHRyZXR1cm4gdWlTdHJpbmdzLkZsb29kZ2F0ZS5OcHMuUHJvbXB0LlllcztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRDdXN0b21TdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlSW5pdE9wdGlvbnMoKS51SVN0cmluZ0dldHRlcihzdHIpO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/FloodgateCore/FloodgateStringProvider.ts\n')},"./scripts/app/FloodgateCore/FloodgateTelemetryLogger.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/**\r\n * Implementation of IFloodgateTelemetryLogger for Web SDK\r\n */\r\n\r\nvar IFloodgateTelemetryLogger = /** @class */ (function () {\r\n    function IFloodgateTelemetryLogger() {\r\n    }\r\n    /**\r\n     * Log that a survey\'s trigger was met.\r\n     * @param campaignId Id of the campaign the survey belongs to.\r\n     * @param surveyId Id of the survey.\r\n     * @param surveyType Type of the survey.\r\n     * @param surveyActivityInfo The survey\'s activities\' information such as names, counts, isAggregate and if the list is ordered.\r\n     * @param additionalSurveyInfo additional survey info in a stringified json object:\r\n     * \t\t- surveyLauncherType: LauncherType of the survey.\r\n     * \t\t- channelType: The channel type of the survey\'s campaign.\r\n     * \t\t- surveyPercentageNumerator: Percentage numerator of the survey\'s Campaign.\r\n     * \t\t- surveyPercentageDenominator: Percentage denominator of the survey\'s Campaign.\r\n     * \t\t- surveyNominationPeriodNumber: The Nomination Period of the survey\'s Campaign in seconds, -1 if not applicable.\r\n     * \t\t- surveyCooldownPeriodNumber: The Cooldown Period of the survey\'s Campaign in seconds, -1 if not applicable.\r\n     * \t\t- allCandidateCampaignDefinitionIDs: The list of campaign definition IDs that have corresponding surveys which are candidates.\r\n     * \t\t- allCampaignDefinitionIDs: The list of all campaign definition IDs.\r\n     */\r\n    IFloodgateTelemetryLogger.prototype.log_TriggerMet = function (campaignId, surveyId, surveyType, surveyActivityInfo, additionalSurveyInfo) {\r\n        _Logging_Logging__WEBPACK_IMPORTED_MODULE_0__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_0__["EventIds"].SURVEY_FLOODGATE_TRIGGERMET, 1 /* Critical */, {\r\n            CampaignId: campaignId,\r\n            SurveyId: surveyId,\r\n            SurveyType: surveyType,\r\n            SurveyActivityInfo: surveyActivityInfo,\r\n            AdditionalSurveyInfo: additionalSurveyInfo,\r\n        });\r\n    };\r\n    /**\r\n     * Log that a user was selected(nominated) for a survey if it\'s not sampled\r\n     * @param campaignId Id of the campaign the survey belongs to.\r\n     * @param surveyId Id of the survey.\r\n     * @param surveyType Type of the survey.\r\n     * @param additionalSurveyInfo additional survey info in a stringified json object:\r\n     * \t\t- surveyLauncherType LauncherType of the survey.\r\n     * \t\t- channelType The channel type of the survey\'s campaign.\r\n     * \t\t- surveyPercentageNumerator Percentage numerator of the survey\'s Campaign.\r\n     * \t\t- surveyPercentageDenominator Percentage denominator of the survey\'s Campaign.\r\n     * \t\t- surveyNominationPeriodNumber The Nomination Period of the survey\'s Campaign in seconds, -1 if not applicable.\r\n     * \t\t- surveyCooldownPeriodNumber The Cooldown Period of the survey\'s Campaign in seconds, -1 if not applicable.\r\n     * \t\t- allCandidateCampaignDefinitionIDs: The list of campaign definition IDs that have corresponding surveys which are candidates.\r\n     * \t\t- allCampaignDefinitionIDs: The list of all campaign definition IDs.\r\n     */\r\n    IFloodgateTelemetryLogger.prototype.log_UserSelected = function (campaignId, surveyId, surveyType, additionalSurveyInfo) {\r\n        _Logging_Logging__WEBPACK_IMPORTED_MODULE_0__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_0__["EventIds"].SURVEY_FLOODGATE_USERSELECTED, 1 /* Critical */, {\r\n            CampaignId: campaignId,\r\n            SurveyId: surveyId,\r\n            SurveyType: surveyType,\r\n            AdditionalSurveyInfo: additionalSurveyInfo,\r\n        });\r\n    };\r\n    /**\r\n     * Log that campaign definitions failed to load.\r\n     * @param errorMessage error message\r\n     */\r\n    IFloodgateTelemetryLogger.prototype.log_CampaignLoad_Failed = function (errorMessage) {\r\n        _Logging_Logging__WEBPACK_IMPORTED_MODULE_0__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_0__["EventIds"].SURVEY_FLOODGATE_CAMPAIGNLOAD_FAILED, 2 /* Error */, {\r\n            ErrorMessage: errorMessage,\r\n        });\r\n    };\r\n    /**\r\n     * Log an event with error message\r\n     * @param eventId event id\r\n     * @param errorMessage error message\r\n     */\r\n    IFloodgateTelemetryLogger.prototype.log_Error = function (eventId, errorMessage) {\r\n        var event = { name: eventId };\r\n        _Logging_Logging__WEBPACK_IMPORTED_MODULE_0__["getLogger"]().logEvent(event, 2 /* Error */, {\r\n            ErrorMessage: errorMessage,\r\n        });\r\n    };\r\n    /**\r\n     * Log an event with properties\r\n     * @param eventId event id\r\n     * @param properties telemetry event properties\r\n     * @param internalSampleRate sample rate for this event in decimal (example: 0.05 for 5%). (Does not override host set sampleRate)\r\n     */\r\n    IFloodgateTelemetryLogger.prototype.log_Event = function (eventId, properties, internalSampleRate) {\r\n        var event = { name: eventId };\r\n        _Logging_Logging__WEBPACK_IMPORTED_MODULE_0__["getLogger"]().logEvent(event, 1 /* Critical */, properties, internalSampleRate);\r\n    };\r\n    /**\r\n     * Log message locally\r\n     * @param message message\r\n     * @param data message data\r\n     */\r\n    IFloodgateTelemetryLogger.prototype.log_LocalError = function (message) {\r\n        var data = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            data[_i - 1] = arguments[_i];\r\n        }\r\n        this.log_Local(2 /* Error */, message, data);\r\n    };\r\n    ;\r\n    IFloodgateTelemetryLogger.prototype.log_Local = function (logSeverity, message) {\r\n        var others = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            others[_i - 2] = arguments[_i];\r\n        }\r\n        _Logging_Logging__WEBPACK_IMPORTED_MODULE_0__["getLogger"]().logLocal(logSeverity, others);\r\n    };\r\n    return IFloodgateTelemetryLogger;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (IFloodgateTelemetryLogger);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL0Zsb29kZ2F0ZVRlbGVtZXRyeUxvZ2dlci50cz9iNWMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTs7R0FFRztBQUcyQztBQUU5QztJQUFBO0lBMkdBLENBQUM7SUF6R0E7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0ksa0RBQWMsR0FBckIsVUFBc0IsVUFBa0IsRUFBRSxRQUFnQixFQUFFLFVBQTRCLEVBQUUsa0JBQTBCLEVBQ25ILG9CQUE0QjtRQUM1QiwwREFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyx5REFBZ0IsQ0FBQywyQkFBMkIsb0JBRXhFO1lBQ0MsVUFBVSxFQUFFLFVBQVU7WUFDdEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsVUFBVSxFQUFFLFVBQVU7WUFDdEIsa0JBQWtCLEVBQUUsa0JBQWtCO1lBQ3RDLG9CQUFvQixFQUFHLG9CQUFvQjtTQUMzQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxvREFBZ0IsR0FBdkIsVUFBd0IsVUFBa0IsRUFBRSxRQUFnQixFQUFFLFVBQTRCLEVBQUUsb0JBQTRCO1FBRXZILDBEQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLHlEQUFnQixDQUFDLDZCQUE2QixvQkFFMUU7WUFDQyxVQUFVLEVBQUUsVUFBVTtZQUN0QixRQUFRLEVBQUUsUUFBUTtZQUNsQixVQUFVLEVBQUUsVUFBVTtZQUN0QixvQkFBb0IsRUFBRyxvQkFBb0I7U0FDM0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLDJEQUF1QixHQUE5QixVQUErQixZQUFvQjtRQUNsRCwwREFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyx5REFBZ0IsQ0FBQyxvQ0FBb0MsaUJBRWpGO1lBQ0MsWUFBWSxFQUFFLFlBQVk7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSw2Q0FBUyxHQUFoQixVQUFpQixPQUFlLEVBQUUsWUFBb0I7UUFDckQsSUFBTSxLQUFLLEdBQXFCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2xELDBEQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssaUJBRWpDO1lBQ0MsWUFBWSxFQUFFLFlBQVk7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksNkNBQVMsR0FBaEIsVUFBaUIsT0FBZSxFQUFFLFVBQW9DLEVBQUUsa0JBQTJCO1FBQ2xHLElBQU0sS0FBSyxHQUFxQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNsRCwwREFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLG9CQUE2QixVQUFVLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGtEQUFjLEdBQXJCLFVBQXNCLE9BQWU7UUFBRSxjQUFjO2FBQWQsVUFBYyxFQUFkLHFCQUFjLEVBQWQsSUFBYztZQUFkLDZCQUFjOztRQUNwRCxJQUFJLENBQUMsU0FBUyxnQkFBeUIsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFBQSxDQUFDO0lBRU0sNkNBQVMsR0FBakIsVUFBa0IsV0FBNkIsRUFBRSxPQUFlO1FBQUUsZ0JBQWdCO2FBQWhCLFVBQWdCLEVBQWhCLHFCQUFnQixFQUFoQixJQUFnQjtZQUFoQiwrQkFBZ0I7O1FBQ2pGLDBEQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0YsZ0NBQUM7QUFBRCxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvRmxvb2RnYXRlQ29yZS9GbG9vZGdhdGVUZWxlbWV0cnlMb2dnZXIudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogSW1wbGVtZW50YXRpb24gb2YgSUZsb29kZ2F0ZVRlbGVtZXRyeUxvZ2dlciBmb3IgV2ViIFNES1xyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIEFwaSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9BcGlcIjtcclxuaW1wb3J0ICogYXMgTG9nZ2luZyBmcm9tIFwiLi4vTG9nZ2luZy9Mb2dnaW5nXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJRmxvb2RnYXRlVGVsZW1ldHJ5TG9nZ2VyIGltcGxlbWVudHMgQXBpLklGbG9vZGdhdGVUZWxlbWV0cnlMb2dnZXIge1xyXG5cclxuXHQvKipcclxuXHQgKiBMb2cgdGhhdCBhIHN1cnZleSdzIHRyaWdnZXIgd2FzIG1ldC5cclxuXHQgKiBAcGFyYW0gY2FtcGFpZ25JZCBJZCBvZiB0aGUgY2FtcGFpZ24gdGhlIHN1cnZleSBiZWxvbmdzIHRvLlxyXG5cdCAqIEBwYXJhbSBzdXJ2ZXlJZCBJZCBvZiB0aGUgc3VydmV5LlxyXG5cdCAqIEBwYXJhbSBzdXJ2ZXlUeXBlIFR5cGUgb2YgdGhlIHN1cnZleS5cclxuXHQgKiBAcGFyYW0gc3VydmV5QWN0aXZpdHlJbmZvIFRoZSBzdXJ2ZXkncyBhY3Rpdml0aWVzJyBpbmZvcm1hdGlvbiBzdWNoIGFzIG5hbWVzLCBjb3VudHMsIGlzQWdncmVnYXRlIGFuZCBpZiB0aGUgbGlzdCBpcyBvcmRlcmVkLlxyXG5cdCAqIEBwYXJhbSBhZGRpdGlvbmFsU3VydmV5SW5mbyBhZGRpdGlvbmFsIHN1cnZleSBpbmZvIGluIGEgc3RyaW5naWZpZWQganNvbiBvYmplY3Q6XHJcblx0ICogXHRcdC0gc3VydmV5TGF1bmNoZXJUeXBlOiBMYXVuY2hlclR5cGUgb2YgdGhlIHN1cnZleS5cclxuXHQgKiBcdFx0LSBjaGFubmVsVHlwZTogVGhlIGNoYW5uZWwgdHlwZSBvZiB0aGUgc3VydmV5J3MgY2FtcGFpZ24uXHJcblx0ICogXHRcdC0gc3VydmV5UGVyY2VudGFnZU51bWVyYXRvcjogUGVyY2VudGFnZSBudW1lcmF0b3Igb2YgdGhlIHN1cnZleSdzIENhbXBhaWduLlxyXG5cdCAqIFx0XHQtIHN1cnZleVBlcmNlbnRhZ2VEZW5vbWluYXRvcjogUGVyY2VudGFnZSBkZW5vbWluYXRvciBvZiB0aGUgc3VydmV5J3MgQ2FtcGFpZ24uXHJcblx0ICogXHRcdC0gc3VydmV5Tm9taW5hdGlvblBlcmlvZE51bWJlcjogVGhlIE5vbWluYXRpb24gUGVyaW9kIG9mIHRoZSBzdXJ2ZXkncyBDYW1wYWlnbiBpbiBzZWNvbmRzLCAtMSBpZiBub3QgYXBwbGljYWJsZS5cclxuXHQgKiBcdFx0LSBzdXJ2ZXlDb29sZG93blBlcmlvZE51bWJlcjogVGhlIENvb2xkb3duIFBlcmlvZCBvZiB0aGUgc3VydmV5J3MgQ2FtcGFpZ24gaW4gc2Vjb25kcywgLTEgaWYgbm90IGFwcGxpY2FibGUuXHJcblx0ICogXHRcdC0gYWxsQ2FuZGlkYXRlQ2FtcGFpZ25EZWZpbml0aW9uSURzOiBUaGUgbGlzdCBvZiBjYW1wYWlnbiBkZWZpbml0aW9uIElEcyB0aGF0IGhhdmUgY29ycmVzcG9uZGluZyBzdXJ2ZXlzIHdoaWNoIGFyZSBjYW5kaWRhdGVzLlxyXG5cdCAqIFx0XHQtIGFsbENhbXBhaWduRGVmaW5pdGlvbklEczogVGhlIGxpc3Qgb2YgYWxsIGNhbXBhaWduIGRlZmluaXRpb24gSURzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2dfVHJpZ2dlck1ldChjYW1wYWlnbklkOiBzdHJpbmcsIHN1cnZleUlkOiBzdHJpbmcsIHN1cnZleVR5cGU6IEFwaS5JU3VydmV5LlR5cGUsIHN1cnZleUFjdGl2aXR5SW5mbzogc3RyaW5nLFxyXG5cdFx0YWRkaXRpb25hbFN1cnZleUluZm86IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9GTE9PREdBVEVfVFJJR0dFUk1FVCxcclxuXHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5Dcml0aWNhbCxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdENhbXBhaWduSWQ6IGNhbXBhaWduSWQsXHJcblx0XHRcdFx0U3VydmV5SWQ6IHN1cnZleUlkLFxyXG5cdFx0XHRcdFN1cnZleVR5cGU6IHN1cnZleVR5cGUsXHJcblx0XHRcdFx0U3VydmV5QWN0aXZpdHlJbmZvOiBzdXJ2ZXlBY3Rpdml0eUluZm8sXHJcblx0XHRcdFx0QWRkaXRpb25hbFN1cnZleUluZm8gOiBhZGRpdGlvbmFsU3VydmV5SW5mbyxcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2cgdGhhdCBhIHVzZXIgd2FzIHNlbGVjdGVkKG5vbWluYXRlZCkgZm9yIGEgc3VydmV5IGlmIGl0J3Mgbm90IHNhbXBsZWRcclxuXHQgKiBAcGFyYW0gY2FtcGFpZ25JZCBJZCBvZiB0aGUgY2FtcGFpZ24gdGhlIHN1cnZleSBiZWxvbmdzIHRvLlxyXG5cdCAqIEBwYXJhbSBzdXJ2ZXlJZCBJZCBvZiB0aGUgc3VydmV5LlxyXG5cdCAqIEBwYXJhbSBzdXJ2ZXlUeXBlIFR5cGUgb2YgdGhlIHN1cnZleS5cclxuXHQgKiBAcGFyYW0gYWRkaXRpb25hbFN1cnZleUluZm8gYWRkaXRpb25hbCBzdXJ2ZXkgaW5mbyBpbiBhIHN0cmluZ2lmaWVkIGpzb24gb2JqZWN0OlxyXG5cdCAqIFx0XHQtIHN1cnZleUxhdW5jaGVyVHlwZSBMYXVuY2hlclR5cGUgb2YgdGhlIHN1cnZleS5cclxuXHQgKiBcdFx0LSBjaGFubmVsVHlwZSBUaGUgY2hhbm5lbCB0eXBlIG9mIHRoZSBzdXJ2ZXkncyBjYW1wYWlnbi5cclxuXHQgKiBcdFx0LSBzdXJ2ZXlQZXJjZW50YWdlTnVtZXJhdG9yIFBlcmNlbnRhZ2UgbnVtZXJhdG9yIG9mIHRoZSBzdXJ2ZXkncyBDYW1wYWlnbi5cclxuXHQgKiBcdFx0LSBzdXJ2ZXlQZXJjZW50YWdlRGVub21pbmF0b3IgUGVyY2VudGFnZSBkZW5vbWluYXRvciBvZiB0aGUgc3VydmV5J3MgQ2FtcGFpZ24uXHJcblx0ICogXHRcdC0gc3VydmV5Tm9taW5hdGlvblBlcmlvZE51bWJlciBUaGUgTm9taW5hdGlvbiBQZXJpb2Qgb2YgdGhlIHN1cnZleSdzIENhbXBhaWduIGluIHNlY29uZHMsIC0xIGlmIG5vdCBhcHBsaWNhYmxlLlxyXG5cdCAqIFx0XHQtIHN1cnZleUNvb2xkb3duUGVyaW9kTnVtYmVyIFRoZSBDb29sZG93biBQZXJpb2Qgb2YgdGhlIHN1cnZleSdzIENhbXBhaWduIGluIHNlY29uZHMsIC0xIGlmIG5vdCBhcHBsaWNhYmxlLlxyXG5cdCAqIFx0XHQtIGFsbENhbmRpZGF0ZUNhbXBhaWduRGVmaW5pdGlvbklEczogVGhlIGxpc3Qgb2YgY2FtcGFpZ24gZGVmaW5pdGlvbiBJRHMgdGhhdCBoYXZlIGNvcnJlc3BvbmRpbmcgc3VydmV5cyB3aGljaCBhcmUgY2FuZGlkYXRlcy5cclxuXHQgKiBcdFx0LSBhbGxDYW1wYWlnbkRlZmluaXRpb25JRHM6IFRoZSBsaXN0IG9mIGFsbCBjYW1wYWlnbiBkZWZpbml0aW9uIElEcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgbG9nX1VzZXJTZWxlY3RlZChjYW1wYWlnbklkOiBzdHJpbmcsIHN1cnZleUlkOiBzdHJpbmcsIHN1cnZleVR5cGU6IEFwaS5JU3VydmV5LlR5cGUsIGFkZGl0aW9uYWxTdXJ2ZXlJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcblx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX0ZMT09ER0FURV9VU0VSU0VMRUNURUQsXHJcblx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuQ3JpdGljYWwsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRDYW1wYWlnbklkOiBjYW1wYWlnbklkLFxyXG5cdFx0XHRcdFN1cnZleUlkOiBzdXJ2ZXlJZCxcclxuXHRcdFx0XHRTdXJ2ZXlUeXBlOiBzdXJ2ZXlUeXBlLFxyXG5cdFx0XHRcdEFkZGl0aW9uYWxTdXJ2ZXlJbmZvIDogYWRkaXRpb25hbFN1cnZleUluZm8sXHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9nIHRoYXQgY2FtcGFpZ24gZGVmaW5pdGlvbnMgZmFpbGVkIHRvIGxvYWQuXHJcblx0ICogQHBhcmFtIGVycm9yTWVzc2FnZSBlcnJvciBtZXNzYWdlXHJcblx0ICovXHJcblx0cHVibGljIGxvZ19DYW1wYWlnbkxvYWRfRmFpbGVkKGVycm9yTWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX0ZMT09ER0FURV9DQU1QQUlHTkxPQURfRkFJTEVELFxyXG5cdFx0XHRMb2dnaW5nLkxvZ0xldmVsLkVycm9yLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0RXJyb3JNZXNzYWdlOiBlcnJvck1lc3NhZ2UsXHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9nIGFuIGV2ZW50IHdpdGggZXJyb3IgbWVzc2FnZVxyXG5cdCAqIEBwYXJhbSBldmVudElkIGV2ZW50IGlkXHJcblx0ICogQHBhcmFtIGVycm9yTWVzc2FnZSBlcnJvciBtZXNzYWdlXHJcblx0ICovXHJcblx0cHVibGljIGxvZ19FcnJvcihldmVudElkOiBzdHJpbmcsIGVycm9yTWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRjb25zdCBldmVudDogTG9nZ2luZy5JRXZlbnRJZCA9IHsgbmFtZTogZXZlbnRJZCB9O1xyXG5cdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChldmVudCxcclxuXHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5FcnJvcixcclxuXHRcdFx0e1xyXG5cdFx0XHRcdEVycm9yTWVzc2FnZTogZXJyb3JNZXNzYWdlLFxyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvZyBhbiBldmVudCB3aXRoIHByb3BlcnRpZXNcclxuXHQgKiBAcGFyYW0gZXZlbnRJZCBldmVudCBpZFxyXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzIHRlbGVtZXRyeSBldmVudCBwcm9wZXJ0aWVzXHJcblx0ICogQHBhcmFtIGludGVybmFsU2FtcGxlUmF0ZSBzYW1wbGUgcmF0ZSBmb3IgdGhpcyBldmVudCBpbiBkZWNpbWFsIChleGFtcGxlOiAwLjA1IGZvciA1JSkuIChEb2VzIG5vdCBvdmVycmlkZSBob3N0IHNldCBzYW1wbGVSYXRlKVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2dfRXZlbnQoZXZlbnRJZDogc3RyaW5nLCBwcm9wZXJ0aWVzOiBBcGkuSVRlbGVtZXRyeVByb3BlcnRpZXMsIGludGVybmFsU2FtcGxlUmF0ZT86IG51bWJlcik6IHZvaWQge1xyXG5cdFx0Y29uc3QgZXZlbnQ6IExvZ2dpbmcuSUV2ZW50SWQgPSB7IG5hbWU6IGV2ZW50SWQgfTtcclxuXHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoZXZlbnQsIExvZ2dpbmcuTG9nTGV2ZWwuQ3JpdGljYWwsIHByb3BlcnRpZXMsIGludGVybmFsU2FtcGxlUmF0ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2cgbWVzc2FnZSBsb2NhbGx5XHJcblx0ICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZVxyXG5cdCAqIEBwYXJhbSBkYXRhIG1lc3NhZ2UgZGF0YVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2dfTG9jYWxFcnJvcihtZXNzYWdlOiBzdHJpbmcsIC4uLmRhdGE6IGFueVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmxvZ19Mb2NhbChMb2dnaW5nLkxvZ0xldmVsLkVycm9yLCBtZXNzYWdlLCBkYXRhKTtcclxuXHR9O1xyXG5cclxuXHRwcml2YXRlIGxvZ19Mb2NhbChsb2dTZXZlcml0eTogTG9nZ2luZy5Mb2dMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCAuLi5vdGhlcnM6IGFueVtdKTogdm9pZCB7XHJcblx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0xvY2FsKGxvZ1NldmVyaXR5LCBvdGhlcnMpO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/FloodgateCore/FloodgateTelemetryLogger.ts\n')},"./scripts/app/FloodgateCore/RudeSurveyLauncherFactory.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RudeSurveyLauncher", function() { return RudeSurveyLauncher; });\n/* harmony import */ var _FloodgateCore_UISurvey_UISurvey__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../FloodgateCore/UISurvey/UISurvey */ "./scripts/app/FloodgateCore/UISurvey/UISurvey.ts");\n/* harmony import */ var _Window_Window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../Window/Window */ "./scripts/app/Window/Window.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore */ "../FloodgateCore/dist/index.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_2__);\n/**\r\n * Rude survey launcher factory for Web SDK\r\n */\r\n\r\n\r\n\r\nvar isNOU = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_2__["Utils"].isNOU;\r\nvar RudeSurveyLauncherFactory = /** @class */ (function () {\r\n    function RudeSurveyLauncherFactory() {\r\n    }\r\n    RudeSurveyLauncherFactory.prototype.makeSurveyLauncher = function (survey) {\r\n        if (this.AcceptsSurvey(survey)) {\r\n            return new RudeSurveyLauncher(survey);\r\n        }\r\n        return null;\r\n    };\r\n    RudeSurveyLauncherFactory.prototype.AcceptsSurvey = function (survey) {\r\n        // This factory should accept any type that is not of type GenericMessagingSurface\r\n        // This will ensure that a rude survey launcher is returned for any survey type old or new\r\n        // as a launcher is needed to invoke survey activated callback\r\n        if (!isNOU(survey) && survey.getType() !== _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_2__["Api"].ISurvey.Type.GenericMessagingSurface) {\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    RudeSurveyLauncherFactory.LAUNCHER_TYPE = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_2__["Api"].ISurvey.LAUNCHER_TYPE_DEFAULT;\r\n    return RudeSurveyLauncherFactory;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (RudeSurveyLauncherFactory);\r\nvar RudeSurveyLauncher = /** @class */ (function () {\r\n    function RudeSurveyLauncher(survey) {\r\n        this.survey = survey;\r\n    }\r\n    RudeSurveyLauncher.prototype.launch = function () {\r\n        _Window_Window__WEBPACK_IMPORTED_MODULE_1__["get"]().OfficeBrowserFeedback.floodgate.showSurvey(new _FloodgateCore_UISurvey_UISurvey__WEBPACK_IMPORTED_MODULE_0__["default"](this.survey));\r\n    };\r\n    return RudeSurveyLauncher;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL1J1ZGVTdXJ2ZXlMYXVuY2hlckZhY3RvcnkudHM/NDQyMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7R0FFRztBQUV5RDtBQUNmO0FBQ1k7QUFFakQsU0FBSyxHQUFLLGlFQUFLLE1BQVYsQ0FBVztBQUV4QjtJQUFBO0lBcUJBLENBQUM7SUFsQk8sc0RBQWtCLEdBQXpCLFVBQTBCLE1BQW1CO1FBQzVDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvQixPQUFPLElBQUksa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFTSxpREFBYSxHQUFwQixVQUFxQixNQUFtQjtRQUN2QyxrRkFBa0Y7UUFDbEYsMEZBQTBGO1FBQzFGLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSywrREFBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDckYsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQW5Cc0IsdUNBQWEsR0FBVywrREFBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztJQW9CbEYsZ0NBQUM7Q0FBQTtBQXJCb0Isd0ZBQXlCO0FBdUI5QztJQUdDLDRCQUFZLE1BQW1CO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxtQ0FBTSxHQUFiO1FBQ0Msa0RBQVUsRUFBRSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSx3RUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFDRix5QkFBQztBQUFELENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL1J1ZGVTdXJ2ZXlMYXVuY2hlckZhY3RvcnkudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogUnVkZSBzdXJ2ZXkgbGF1bmNoZXIgZmFjdG9yeSBmb3IgV2ViIFNES1xyXG4gKi9cclxuXHJcbmltcG9ydCBVSVN1cnZleSBmcm9tIFwiLi8uLi9GbG9vZGdhdGVDb3JlL1VJU3VydmV5L1VJU3VydmV5XCI7XHJcbmltcG9ydCAqIGFzIFdpbmRvdyBmcm9tIFwiLi8uLi9XaW5kb3cvV2luZG93XCI7XHJcbmltcG9ydCB7IEFwaSwgVXRpbHMgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlXCI7XHJcblxyXG5jb25zdCB7IGlzTk9VIH0gPSBVdGlscztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1ZGVTdXJ2ZXlMYXVuY2hlckZhY3RvcnkgaW1wbGVtZW50cyBBcGkuSVN1cnZleUxhdW5jaGVyRmFjdG9yeSB7XHJcblx0cHVibGljIHN0YXRpYyByZWFkb25seSBMQVVOQ0hFUl9UWVBFOiBzdHJpbmcgPSBBcGkuSVN1cnZleS5MQVVOQ0hFUl9UWVBFX0RFRkFVTFQ7XHJcblxyXG5cdHB1YmxpYyBtYWtlU3VydmV5TGF1bmNoZXIoc3VydmV5OiBBcGkuSVN1cnZleSk6IEFwaS5JU3VydmV5TGF1bmNoZXIge1xyXG5cdFx0aWYgKHRoaXMuQWNjZXB0c1N1cnZleShzdXJ2ZXkpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUnVkZVN1cnZleUxhdW5jaGVyKHN1cnZleSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgQWNjZXB0c1N1cnZleShzdXJ2ZXk6IEFwaS5JU3VydmV5KTogYm9vbGVhbiB7XHJcblx0XHQvLyBUaGlzIGZhY3Rvcnkgc2hvdWxkIGFjY2VwdCBhbnkgdHlwZSB0aGF0IGlzIG5vdCBvZiB0eXBlIEdlbmVyaWNNZXNzYWdpbmdTdXJmYWNlXHJcblx0XHQvLyBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgYSBydWRlIHN1cnZleSBsYXVuY2hlciBpcyByZXR1cm5lZCBmb3IgYW55IHN1cnZleSB0eXBlIG9sZCBvciBuZXdcclxuXHRcdC8vIGFzIGEgbGF1bmNoZXIgaXMgbmVlZGVkIHRvIGludm9rZSBzdXJ2ZXkgYWN0aXZhdGVkIGNhbGxiYWNrXHJcblx0XHRpZiAoIWlzTk9VKHN1cnZleSkgICYmIHN1cnZleS5nZXRUeXBlKCkgIT09IEFwaS5JU3VydmV5LlR5cGUuR2VuZXJpY01lc3NhZ2luZ1N1cmZhY2UpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJ1ZGVTdXJ2ZXlMYXVuY2hlciBpbXBsZW1lbnRzIEFwaS5JU3VydmV5TGF1bmNoZXIge1xyXG5cdHByaXZhdGUgc3VydmV5OiBBcGkuSVN1cnZleTtcclxuXHJcblx0Y29uc3RydWN0b3Ioc3VydmV5OiBBcGkuSVN1cnZleSkge1xyXG5cdFx0dGhpcy5zdXJ2ZXkgPSBzdXJ2ZXk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgbGF1bmNoKCk6IHZvaWQge1xyXG5cdFx0V2luZG93LmdldCgpLk9mZmljZUJyb3dzZXJGZWVkYmFjay5mbG9vZGdhdGUuc2hvd1N1cnZleShuZXcgVUlTdXJ2ZXkodGhpcy5zdXJ2ZXkpKTtcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/FloodgateCore/RudeSurveyLauncherFactory.ts\n')},"./scripts/app/FloodgateCore/TransporterFactory.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Transport_Transport__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../Transport/Transport */ "./scripts/app/Transport/Transport.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/**\r\n * Implementation of Transporter Factory Interface for calling submit directly to petrol\r\n */\r\n\r\n\r\nvar TransporterFactory = /** @class */ (function () {\r\n    function TransporterFactory() {\r\n    }\r\n    TransporterFactory.prototype.makeTransporter = function (surveyType) {\r\n        return new _Transport_Transport__WEBPACK_IMPORTED_MODULE_0__["Transporter"](_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().environment, surveyType, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().appId, "Survey", _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().applicationGroup, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().telemetryGroup, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().webGroup);\r\n    };\r\n    return TransporterFactory;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (TransporterFactory);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL1RyYW5zcG9ydGVyRmFjdG9yeS50cz80NGVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBOztHQUVHO0FBR29EO0FBQ1c7QUFFbEU7SUFBQTtJQVlBLENBQUM7SUFYTyw0Q0FBZSxHQUF0QixVQUF1QixVQUFrQjtRQUN4QyxPQUFPLElBQUksZ0VBQVcsQ0FDckIsZ0VBQWlCLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFdBQVcsRUFDdEQsVUFBVSxFQUNWLGdFQUFpQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLEVBQ2hELFFBQVEsRUFDUixnRUFBaUIsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsZ0JBQWdCLEVBQzNELGdFQUFpQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxjQUFjLEVBQ3pELGdFQUFpQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQ25ELENBQUM7SUFDSCxDQUFDO0lBQ0YseUJBQUM7QUFBRCxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvRmxvb2RnYXRlQ29yZS9UcmFuc3BvcnRlckZhY3RvcnkudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogSW1wbGVtZW50YXRpb24gb2YgVHJhbnNwb3J0ZXIgRmFjdG9yeSBJbnRlcmZhY2UgZm9yIGNhbGxpbmcgc3VibWl0IGRpcmVjdGx5IHRvIHBldHJvbFxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEFwaSB9IGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmVcIjtcclxuaW1wb3J0IHsgVHJhbnNwb3J0ZXIgfSBmcm9tIFwiLi8uLi9UcmFuc3BvcnQvVHJhbnNwb3J0XCI7XHJcbmltcG9ydCAqIGFzIENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vLi4vQ29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUcmFuc3BvcnRlckZhY3RvcnkgaW1wbGVtZW50cyBBcGkuSVRyYW5zcG9ydGVyRmFjdG9yeSB7XHJcblx0cHVibGljIG1ha2VUcmFuc3BvcnRlcihzdXJ2ZXlUeXBlOiBzdHJpbmcpOiBBcGkuSVRyYW5zcG9ydGVyIHtcclxuXHRcdHJldHVybiBuZXcgVHJhbnNwb3J0ZXIoXHJcblx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5lbnZpcm9ubWVudCxcclxuXHRcdFx0c3VydmV5VHlwZSxcclxuXHRcdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLmFwcElkLFxyXG5cdFx0XHRcIlN1cnZleVwiLFxyXG5cdFx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkuYXBwbGljYXRpb25Hcm91cCxcclxuXHRcdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLnRlbGVtZXRyeUdyb3VwLFxyXG5cdFx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkud2ViR3JvdXBcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/FloodgateCore/TransporterFactory.ts\n')},"./scripts/app/FloodgateCore/UISurvey/CustomUISurvey.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Utils */ "./scripts/app/Utils.ts");\n/**\r\n * IUISurvey implementation based on an ICustomSurvey object\r\n */\r\n\r\nvar CustomUISurvey = /** @class */ (function () {\r\n    function CustomUISurvey(survey) {\r\n        this.comment = "";\r\n        this.ratingIndex = -1;\r\n        this.showPrompt = survey.showPrompt;\r\n        this.showEmailRequest = _Utils__WEBPACK_IMPORTED_MODULE_0__["isBoolean"](survey.showEmailRequest) ? survey.showEmailRequest : false;\r\n        this.survey = survey;\r\n    }\r\n    CustomUISurvey.prototype.getLauncherType = function () {\r\n        return this.survey.launcherType;\r\n    };\r\n    CustomUISurvey.prototype.getCVSurveyFormId = function () {\r\n        return this.survey.customerVoiceFormId;\r\n    };\r\n    CustomUISurvey.prototype.getPreGeneratedClientFeedbackId = function () {\r\n        return undefined;\r\n    };\r\n    CustomUISurvey.prototype.getPromptQuestion = function () {\r\n        return this.survey.promptQuestion;\r\n    };\r\n    CustomUISurvey.prototype.getTitle = function () {\r\n        return this.survey.title;\r\n    };\r\n    CustomUISurvey.prototype.getPromptYesButtonText = function () {\r\n        return this.survey.promptYesButtonText;\r\n    };\r\n    CustomUISurvey.prototype.getPromptNoButtonText = function () {\r\n        return this.survey.promptNoButtonText;\r\n    };\r\n    CustomUISurvey.prototype.getRatingValuesAscending = function () {\r\n        return this.survey.ratingValuesAscending;\r\n    };\r\n    CustomUISurvey.prototype.getRatingQuestion = function () {\r\n        return this.survey.ratingQuestion;\r\n    };\r\n    CustomUISurvey.prototype.getCommentQuestion = function () {\r\n        return this.survey.commentQuestion;\r\n    };\r\n    CustomUISurvey.prototype.getInterceptTitle = function () {\r\n        return undefined;\r\n    };\r\n    CustomUISurvey.prototype.getInterceptQuestion = function () {\r\n        return undefined;\r\n    };\r\n    CustomUISurvey.prototype.getInterceptUrl = function () {\r\n        return undefined;\r\n    };\r\n    CustomUISurvey.prototype.setValues = function (ratingIndex, comment) {\r\n        this.comment = comment;\r\n        if (this.isRatingIndexValid(ratingIndex)) {\r\n            this.ratingIndex = ratingIndex;\r\n        }\r\n        else {\r\n            this.ratingIndex = -1;\r\n        }\r\n    };\r\n    CustomUISurvey.prototype.getJsonElements = function () {\r\n        var result = {};\r\n        result.comment = this.comment;\r\n        result.rating = this.getNormalizedRatingScore();\r\n        result.survey = {\r\n            surveyId: this.getCampaignId(),\r\n        };\r\n        return result;\r\n    };\r\n    CustomUISurvey.prototype.getSurveyType = function () {\r\n        return this.survey.surveyType;\r\n    };\r\n    CustomUISurvey.prototype.getCampaignId = function () {\r\n        return this.survey.campaignId;\r\n    };\r\n    CustomUISurvey.prototype.getId = function () {\r\n        return this.getCampaignId();\r\n    };\r\n    CustomUISurvey.prototype.getGoverenedChannelType = function () {\r\n        return undefined;\r\n    };\r\n    CustomUISurvey.prototype.isRatingIndexValid = function (index) {\r\n        return (index >= 0 && index < this.survey.ratingValuesAscending.length);\r\n    };\r\n    CustomUISurvey.prototype.getNormalizedRatingScore = function () {\r\n        if (!this.isRatingIndexValid(this.ratingIndex)) {\r\n            return -1;\r\n        }\r\n        if (this.survey.isZeroBased) {\r\n            return (this.ratingIndex) / (this.survey.ratingValuesAscending.length - 1);\r\n        }\r\n        else {\r\n            return (this.ratingIndex + 1.0) / this.survey.ratingValuesAscending.length;\r\n        }\r\n    };\r\n    return CustomUISurvey;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (CustomUISurvey);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL1VJU3VydmV5L0N1c3RvbVVJU3VydmV5LnRzPzNkYzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBOztHQUVHO0FBR2tDO0FBS3JDO0lBU0Msd0JBQW1CLE1BQXFCO1FBSmhDLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsZ0JBQVcsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUloQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFJLGdEQUFlLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3RCLENBQUM7SUFFTSx3Q0FBZSxHQUF0QjtRQUNDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDakMsQ0FBQztJQUVNLDBDQUFpQixHQUF4QjtRQUNDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztJQUN4QyxDQUFDO0lBRU0sd0RBQStCLEdBQXRDO1FBQ0MsT0FBTyxTQUFTLENBQUM7SUFDbEIsQ0FBQztJQUVNLDBDQUFpQixHQUF4QjtRQUNDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDbkMsQ0FBQztJQUVNLGlDQUFRLEdBQWY7UUFDQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFTSwrQ0FBc0IsR0FBN0I7UUFDQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUM7SUFDeEMsQ0FBQztJQUVNLDhDQUFxQixHQUE1QjtRQUNDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUN2QyxDQUFDO0lBRU0saURBQXdCLEdBQS9CO1FBQ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDO0lBQzFDLENBQUM7SUFFTSwwQ0FBaUIsR0FBeEI7UUFDQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO0lBQ25DLENBQUM7SUFFTSwyQ0FBa0IsR0FBekI7UUFDQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO0lBQ3BDLENBQUM7SUFFTSwwQ0FBaUIsR0FBeEI7UUFDQyxPQUFPLFNBQVMsQ0FBQztJQUNsQixDQUFDO0lBRU0sNkNBQW9CLEdBQTNCO1FBQ0MsT0FBTyxTQUFTLENBQUM7SUFDbEIsQ0FBQztJQUVNLHdDQUFlLEdBQXRCO1FBQ0MsT0FBTyxTQUFTLENBQUM7SUFDbEIsQ0FBQztJQUVNLGtDQUFTLEdBQWhCLFVBQWlCLFdBQW1CLEVBQUUsT0FBZTtRQUNwRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztTQUMvQjthQUFNO1lBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0QjtJQUNGLENBQUM7SUFFTSx3Q0FBZSxHQUF0QjtRQUNDLElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUVyQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDOUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoRCxNQUFNLENBQUMsTUFBTSxHQUFHO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7U0FDOUIsQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQztJQUVNLHNDQUFhLEdBQXBCO1FBQ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRU0sc0NBQWEsR0FBcEI7UUFDQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFTSw4QkFBSyxHQUFaO1FBQ0MsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLGdEQUF1QixHQUE5QjtRQUNDLE9BQU8sU0FBUyxDQUFDO0lBQ2xCLENBQUM7SUFFTywyQ0FBa0IsR0FBMUIsVUFBMkIsS0FBYTtRQUN2QyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU8saURBQXdCLEdBQWhDO1FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0MsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDM0U7YUFBTTtZQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDO1NBQzNFO0lBQ0YsQ0FBQztJQUNGLHFCQUFDO0FBQUQsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0Zsb29kZ2F0ZUNvcmUvVUlTdXJ2ZXkvQ3VzdG9tVUlTdXJ2ZXkudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogSVVJU3VydmV5IGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIGFuIElDdXN0b21TdXJ2ZXkgb2JqZWN0XHJcbiAqL1xyXG5cclxuaW1wb3J0IElDdXN0b21TdXJ2ZXkgZnJvbSBcIi4uL0lDdXN0b21TdXJ2ZXlcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uLy4uL1V0aWxzXCI7XHJcbmltcG9ydCBJVUlTdXJ2ZXkgZnJvbSBcIi4vSVVJU3VydmV5XCI7XHJcbmltcG9ydCAqIGFzIEFwaSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9BcGlcIjtcclxuaW1wb3J0IHsgR292ZXJuZWRDaGFubmVsVHlwZSB9IGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvR292ZXJuZWRDaGFubmVsXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdXN0b21VSVN1cnZleSBpbXBsZW1lbnRzIElVSVN1cnZleSB7XHJcblx0cHVibGljIHNob3dQcm9tcHQ6IGJvb2xlYW47XHJcblxyXG5cdHB1YmxpYyBzaG93RW1haWxSZXF1ZXN0OiBib29sZWFuO1xyXG5cclxuXHRwcml2YXRlIGNvbW1lbnQ6IHN0cmluZyA9IFwiXCI7XHJcblx0cHJpdmF0ZSByYXRpbmdJbmRleDogbnVtYmVyID0gLTE7XHJcblx0cHJpdmF0ZSBzdXJ2ZXk6IElDdXN0b21TdXJ2ZXk7XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihzdXJ2ZXk6IElDdXN0b21TdXJ2ZXkpIHtcclxuXHRcdHRoaXMuc2hvd1Byb21wdCA9IHN1cnZleS5zaG93UHJvbXB0O1xyXG5cdFx0dGhpcy5zaG93RW1haWxSZXF1ZXN0ID0gIFV0aWxzLmlzQm9vbGVhbihzdXJ2ZXkuc2hvd0VtYWlsUmVxdWVzdCkgPyBzdXJ2ZXkuc2hvd0VtYWlsUmVxdWVzdCA6IGZhbHNlO1xyXG5cdFx0dGhpcy5zdXJ2ZXkgPSBzdXJ2ZXk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0TGF1bmNoZXJUeXBlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5zdXJ2ZXkubGF1bmNoZXJUeXBlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENWU3VydmV5Rm9ybUlkKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5zdXJ2ZXkuY3VzdG9tZXJWb2ljZUZvcm1JZDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRQcmVHZW5lcmF0ZWRDbGllbnRGZWVkYmFja0lkKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFByb21wdFF1ZXN0aW9uKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5zdXJ2ZXkucHJvbXB0UXVlc3Rpb247XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0VGl0bGUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnN1cnZleS50aXRsZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRQcm9tcHRZZXNCdXR0b25UZXh0KCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5zdXJ2ZXkucHJvbXB0WWVzQnV0dG9uVGV4dDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRQcm9tcHROb0J1dHRvblRleHQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnN1cnZleS5wcm9tcHROb0J1dHRvblRleHQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0UmF0aW5nVmFsdWVzQXNjZW5kaW5nKCk6IHN0cmluZ1tdIHtcclxuXHRcdHJldHVybiB0aGlzLnN1cnZleS5yYXRpbmdWYWx1ZXNBc2NlbmRpbmc7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0UmF0aW5nUXVlc3Rpb24oKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnN1cnZleS5yYXRpbmdRdWVzdGlvbjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRDb21tZW50UXVlc3Rpb24oKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnN1cnZleS5jb21tZW50UXVlc3Rpb247XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0SW50ZXJjZXB0VGl0bGUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0SW50ZXJjZXB0UXVlc3Rpb24oKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0SW50ZXJjZXB0VXJsKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldFZhbHVlcyhyYXRpbmdJbmRleDogbnVtYmVyLCBjb21tZW50OiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7XHJcblx0XHRpZiAodGhpcy5pc1JhdGluZ0luZGV4VmFsaWQocmF0aW5nSW5kZXgpKSB7XHJcblx0XHRcdHRoaXMucmF0aW5nSW5kZXggPSByYXRpbmdJbmRleDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMucmF0aW5nSW5kZXggPSAtMTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRKc29uRWxlbWVudHMoKTogYW55IHtcclxuXHRcdGxldCByZXN1bHQ6IGFueSA9IHt9O1xyXG5cclxuXHRcdHJlc3VsdC5jb21tZW50ID0gdGhpcy5jb21tZW50O1xyXG5cdFx0cmVzdWx0LnJhdGluZyA9IHRoaXMuZ2V0Tm9ybWFsaXplZFJhdGluZ1Njb3JlKCk7XHJcblx0XHRyZXN1bHQuc3VydmV5ID0ge1xyXG5cdFx0XHRzdXJ2ZXlJZDogdGhpcy5nZXRDYW1wYWlnbklkKCksXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0U3VydmV5VHlwZSgpOiBBcGkuSVN1cnZleS5UeXBlIHtcclxuXHRcdHJldHVybiB0aGlzLnN1cnZleS5zdXJ2ZXlUeXBlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENhbXBhaWduSWQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnN1cnZleS5jYW1wYWlnbklkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldElkKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRDYW1wYWlnbklkKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0R292ZXJlbmVkQ2hhbm5lbFR5cGUoKTogR292ZXJuZWRDaGFubmVsVHlwZSB7XHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBpc1JhdGluZ0luZGV4VmFsaWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5zdXJ2ZXkucmF0aW5nVmFsdWVzQXNjZW5kaW5nLmxlbmd0aCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldE5vcm1hbGl6ZWRSYXRpbmdTY29yZSgpOiBudW1iZXIge1xyXG5cdFx0aWYgKCF0aGlzLmlzUmF0aW5nSW5kZXhWYWxpZCh0aGlzLnJhdGluZ0luZGV4KSkge1xyXG5cdFx0XHRyZXR1cm4gLTE7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc3VydmV5LmlzWmVyb0Jhc2VkKSB7XHJcblx0XHRcdHJldHVybiAodGhpcy5yYXRpbmdJbmRleCkgLyAodGhpcy5zdXJ2ZXkucmF0aW5nVmFsdWVzQXNjZW5kaW5nLmxlbmd0aCAtIDEpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuICh0aGlzLnJhdGluZ0luZGV4ICsgMS4wKSAvIHRoaXMuc3VydmV5LnJhdGluZ1ZhbHVlc0FzY2VuZGluZy5sZW5ndGg7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/FloodgateCore/UISurvey/CustomUISurvey.ts\n')},"./scripts/app/FloodgateCore/UISurvey/DummyUISurvey.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../Utils */ "./scripts/app/Utils.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/GovernedChannel */ "../FloodgateCore/dist/src/GovernedChannel.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_2__);\n/**\r\n * Dummy IUISurvey implementation without dependancy on officefloodgatecore\r\n */\r\n\r\n\r\n\r\nvar DummySurvey = /** @class */ (function () {\r\n    function DummySurvey() {\r\n        this.showPrompt = true;\r\n        this.showEmailRequest = true;\r\n        this.comment = "";\r\n    }\r\n    DummySurvey.prototype.getCVSurveyFormId = function () {\r\n        return "Form ID";\r\n    };\r\n    DummySurvey.prototype.getLauncherType = function () {\r\n        return "Launcher Type";\r\n    };\r\n    DummySurvey.prototype.getPromptQuestion = function () {\r\n        return "Prompt question?";\r\n    };\r\n    DummySurvey.prototype.getTitle = function () {\r\n        return "Title";\r\n    };\r\n    DummySurvey.prototype.getPromptYesButtonText = function () {\r\n        return "Yes";\r\n    };\r\n    DummySurvey.prototype.getPromptNoButtonText = function () {\r\n        return "No";\r\n    };\r\n    DummySurvey.prototype.getRatingValuesAscending = function () {\r\n        return ["worst", "worse", "ok", "better", "best"];\r\n    };\r\n    DummySurvey.prototype.getRatingQuestion = function () {\r\n        return "Rating question?";\r\n    };\r\n    DummySurvey.prototype.getCommentQuestion = function () {\r\n        return "Comment question?";\r\n    };\r\n    DummySurvey.prototype.getInterceptTitle = function () {\r\n        return "Intercept Title";\r\n    };\r\n    DummySurvey.prototype.getInterceptQuestion = function () {\r\n        return "Intercept question?";\r\n    };\r\n    DummySurvey.prototype.getInterceptUrl = function () {\r\n        return "https://example.com";\r\n    };\r\n    DummySurvey.prototype.setValues = function (selectedIndex, comment) {\r\n        if (comment) {\r\n            this.comment = comment;\r\n        }\r\n        if (_Utils__WEBPACK_IMPORTED_MODULE_0__["isInteger"](selectedIndex) && selectedIndex >= 0 && selectedIndex <= 4) {\r\n            this.rating = selectedIndex / 4.0;\r\n        }\r\n    };\r\n    DummySurvey.prototype.getJsonElements = function () {\r\n        var result = {};\r\n        if (this.comment) {\r\n            result.comment = this.comment;\r\n        }\r\n        if (this.rating) {\r\n            result.rating = this.rating;\r\n        }\r\n        return result;\r\n    };\r\n    DummySurvey.prototype.getSurveyType = function () {\r\n        return _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__["ISurvey"].Type.Nps;\r\n    };\r\n    DummySurvey.prototype.getCampaignId = function () {\r\n        return "10000000-0000-0000-0000-000000000000";\r\n    };\r\n    DummySurvey.prototype.getId = function () {\r\n        return "00000000-0000-0000-0000-000000000000";\r\n    };\r\n    DummySurvey.prototype.getGoverenedChannelType = function () {\r\n        return _ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_2__["GovernedChannelType"].Standard;\r\n    };\r\n    DummySurvey.prototype.getPreGeneratedClientFeedbackId = function () {\r\n        return "00000000-0000-0000-0000-000000000000";\r\n    };\r\n    return DummySurvey;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (DummySurvey);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL1VJU3VydmV5L0R1bW15VUlTdXJ2ZXkudHM/MGZjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7R0FFRztBQUdrQztBQUMrQjtBQUN1QjtBQUUzRjtJQUFBO1FBQ1EsZUFBVSxHQUFZLElBQUksQ0FBQztRQUUzQixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFFaEMsWUFBTyxHQUFXLEVBQUUsQ0FBQztJQXNGOUIsQ0FBQztJQW5GTyx1Q0FBaUIsR0FBeEI7UUFDQyxPQUFPLFNBQVMsQ0FBQztJQUNsQixDQUFDO0lBRU0scUNBQWUsR0FBdEI7UUFDQyxPQUFPLGVBQWUsQ0FBQztJQUN4QixDQUFDO0lBRU0sdUNBQWlCLEdBQXhCO1FBQ0MsT0FBTyxrQkFBa0IsQ0FBQztJQUMzQixDQUFDO0lBRU0sOEJBQVEsR0FBZjtRQUNDLE9BQU8sT0FBTyxDQUFDO0lBQ2hCLENBQUM7SUFFTSw0Q0FBc0IsR0FBN0I7UUFDQyxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFTSwyQ0FBcUIsR0FBNUI7UUFDQyxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFTSw4Q0FBd0IsR0FBL0I7UUFDQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSx1Q0FBaUIsR0FBeEI7UUFDQyxPQUFPLGtCQUFrQixDQUFDO0lBQzNCLENBQUM7SUFFTSx3Q0FBa0IsR0FBekI7UUFDQyxPQUFPLG1CQUFtQixDQUFDO0lBQzVCLENBQUM7SUFFTSx1Q0FBaUIsR0FBeEI7UUFDQyxPQUFPLGlCQUFpQixDQUFDO0lBQzFCLENBQUM7SUFFTSwwQ0FBb0IsR0FBM0I7UUFDQyxPQUFPLHFCQUFxQixDQUFDO0lBQzlCLENBQUM7SUFFTSxxQ0FBZSxHQUF0QjtRQUNDLE9BQU8scUJBQXFCLENBQUM7SUFDOUIsQ0FBQztJQUVNLCtCQUFTLEdBQWhCLFVBQWlCLGFBQXFCLEVBQUUsT0FBZTtRQUN0RCxJQUFJLE9BQU8sRUFBRTtZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1NBQUU7UUFDeEMsSUFBSSxnREFBZSxDQUFDLGFBQWEsQ0FBQyxJQUFJLGFBQWEsSUFBSSxDQUFDLElBQUksYUFBYSxJQUFJLENBQUMsRUFBRTtZQUMvRSxJQUFJLENBQUMsTUFBTSxHQUFHLGFBQWEsR0FBRyxHQUFHLENBQUM7U0FDbEM7SUFDRixDQUFDO0lBRU0scUNBQWUsR0FBdEI7UUFDQyxJQUFJLE1BQU0sR0FBUSxFQUFFLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUU7UUFDcEQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUU7UUFFakQsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDO0lBRU0sbUNBQWEsR0FBcEI7UUFDQyxPQUFPLG9GQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBRU0sbUNBQWEsR0FBcEI7UUFDQyxPQUFPLHNDQUFzQyxDQUFDO0lBQy9DLENBQUM7SUFFTSwyQkFBSyxHQUFaO1FBQ0MsT0FBTyxzQ0FBc0MsQ0FBQztJQUMvQyxDQUFDO0lBRU0sNkNBQXVCLEdBQTlCO1FBQ0MsT0FBTyx3R0FBbUIsQ0FBQyxRQUFRLENBQUM7SUFDckMsQ0FBQztJQUVNLHFEQUErQixHQUF0QztRQUNDLE9BQU8sc0NBQXNDLENBQUM7SUFDL0MsQ0FBQztJQUNGLGtCQUFDO0FBQUQsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0Zsb29kZ2F0ZUNvcmUvVUlTdXJ2ZXkvRHVtbXlVSVN1cnZleS50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBEdW1teSBJVUlTdXJ2ZXkgaW1wbGVtZW50YXRpb24gd2l0aG91dCBkZXBlbmRhbmN5IG9uIG9mZmljZWZsb29kZ2F0ZWNvcmVcclxuICovXHJcblxyXG5pbXBvcnQgSVVJU3VydmV5IGZyb20gXCIuL0lVSVN1cnZleVwiO1xyXG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tIFwiLi4vLi4vVXRpbHNcIjtcclxuaW1wb3J0ICogYXMgQXBpIGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvQXBpL0FwaVwiO1xyXG5pbXBvcnQgeyBHb3Zlcm5lZENoYW5uZWxUeXBlIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9Hb3Zlcm5lZENoYW5uZWxcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1bW15U3VydmV5IGltcGxlbWVudHMgSVVJU3VydmV5IHtcclxuXHRwdWJsaWMgc2hvd1Byb21wdDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdHB1YmxpYyBzaG93RW1haWxSZXF1ZXN0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0cHJpdmF0ZSBjb21tZW50OiBzdHJpbmcgPSBcIlwiO1xyXG5cdHByaXZhdGUgcmF0aW5nOiBudW1iZXI7XHJcblxyXG5cdHB1YmxpYyBnZXRDVlN1cnZleUZvcm1JZCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIFwiRm9ybSBJRFwiO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldExhdW5jaGVyVHlwZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIFwiTGF1bmNoZXIgVHlwZVwiO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFByb21wdFF1ZXN0aW9uKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gXCJQcm9tcHQgcXVlc3Rpb24/XCI7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0VGl0bGUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBcIlRpdGxlXCI7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0UHJvbXB0WWVzQnV0dG9uVGV4dCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIFwiWWVzXCI7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0UHJvbXB0Tm9CdXR0b25UZXh0KCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gXCJOb1wiO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFJhdGluZ1ZhbHVlc0FzY2VuZGluZygpOiBzdHJpbmdbXSB7XHJcblx0XHRyZXR1cm4gW1wid29yc3RcIiwgXCJ3b3JzZVwiLCBcIm9rXCIsIFwiYmV0dGVyXCIsIFwiYmVzdFwiXTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRSYXRpbmdRdWVzdGlvbigpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIFwiUmF0aW5nIHF1ZXN0aW9uP1wiO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENvbW1lbnRRdWVzdGlvbigpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIFwiQ29tbWVudCBxdWVzdGlvbj9cIjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRJbnRlcmNlcHRUaXRsZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIFwiSW50ZXJjZXB0IFRpdGxlXCI7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0SW50ZXJjZXB0UXVlc3Rpb24oKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBcIkludGVyY2VwdCBxdWVzdGlvbj9cIjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRJbnRlcmNlcHRVcmwoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBcImh0dHBzOi8vZXhhbXBsZS5jb21cIjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRWYWx1ZXMoc2VsZWN0ZWRJbmRleDogbnVtYmVyLCBjb21tZW50OiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGlmIChjb21tZW50KSB7IHRoaXMuY29tbWVudCA9IGNvbW1lbnQ7IH1cclxuXHRcdGlmIChVdGlscy5pc0ludGVnZXIoc2VsZWN0ZWRJbmRleCkgJiYgc2VsZWN0ZWRJbmRleCA+PSAwICYmIHNlbGVjdGVkSW5kZXggPD0gNCkge1xyXG5cdFx0XHR0aGlzLnJhdGluZyA9IHNlbGVjdGVkSW5kZXggLyA0LjA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0SnNvbkVsZW1lbnRzKCk6IGFueSB7XHJcblx0XHRsZXQgcmVzdWx0OiBhbnkgPSB7fTtcclxuXHJcblx0XHRpZiAodGhpcy5jb21tZW50KSB7IHJlc3VsdC5jb21tZW50ID0gdGhpcy5jb21tZW50OyB9XHJcblx0XHRpZiAodGhpcy5yYXRpbmcpIHsgcmVzdWx0LnJhdGluZyA9IHRoaXMucmF0aW5nOyB9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRTdXJ2ZXlUeXBlKCk6IEFwaS5JU3VydmV5LlR5cGUge1xyXG5cdFx0cmV0dXJuIEFwaS5JU3VydmV5LlR5cGUuTnBzO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENhbXBhaWduSWQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBcIjEwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldElkKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gXCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRHb3ZlcmVuZWRDaGFubmVsVHlwZSgpOiBHb3Zlcm5lZENoYW5uZWxUeXBlIHtcclxuXHRcdHJldHVybiBHb3Zlcm5lZENoYW5uZWxUeXBlLlN0YW5kYXJkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFByZUdlbmVyYXRlZENsaWVudEZlZWRiYWNrSWQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/FloodgateCore/UISurvey/DummyUISurvey.ts\n')},"./scripts/app/FloodgateCore/UISurvey/UISurvey.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../Constants */ "./scripts/app/Constants.ts");\n/**\r\n * An implementation of IUISurvey based on floodgate.core INpsSurvey\r\n */\r\n\r\n\r\nvar UISurvey = /** @class */ (function () {\r\n    function UISurvey(survey) {\r\n        this.showPrompt = true;\r\n        this.showEmailRequest = false;\r\n        if (!survey) {\r\n            throw Error("survey must not be null");\r\n        }\r\n        else {\r\n            this.survey = survey;\r\n        }\r\n        if (survey.getType() === _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_0__["ISurvey"].Type.Intercept) {\r\n            this.isIntercept = true;\r\n            var interceptComponent = survey.getComponent("Intercept" /* Intercept */);\r\n            if (interceptComponent) {\r\n                this.intercept = interceptComponent;\r\n            }\r\n            else {\r\n                throw Error("intercept component must not be null");\r\n            }\r\n        }\r\n        else {\r\n            this.isIntercept = false;\r\n            var promptComponent = survey.getComponent("Prompt" /* Prompt */);\r\n            var commentComponent = survey.getComponent("Comment" /* Comment */);\r\n            var ratingComponent = survey.getComponent("Rating" /* Rating */);\r\n            var cvSurveyComponent = survey.getComponent("CVSurvey" /* CVSurvey */);\r\n            if (promptComponent) {\r\n                this.prompt = promptComponent;\r\n            }\r\n            else {\r\n                throw Error("prompt component must not be null");\r\n            }\r\n            // Check for additonalDataRequested options\r\n            this.showEmailRequest = survey.getSurveyInfo().isAdditionalDataRequested(0 /* EmailAddress */);\r\n            if (commentComponent) {\r\n                this.comment = commentComponent;\r\n            }\r\n            else {\r\n                throw Error("comment component must not be null");\r\n            }\r\n            if (ratingComponent) {\r\n                this.rating = ratingComponent;\r\n            }\r\n            else {\r\n                throw Error("rating component must not be null");\r\n            }\r\n            if (cvSurveyComponent) {\r\n                this.cvSurvey = cvSurveyComponent;\r\n                if (this.getLauncherType() === _Constants__WEBPACK_IMPORTED_MODULE_1__["customerVoiceLauncherType"] && !this.getCVSurveyFormId()) {\r\n                    throw Error("CvSurveyId should not be null");\r\n                }\r\n            }\r\n        }\r\n    }\r\n    UISurvey.prototype.getLauncherType = function () {\r\n        return this.isIntercept ? undefined : this.survey.getLauncherType();\r\n    };\r\n    UISurvey.prototype.getCVSurveyFormId = function () {\r\n        return this.isIntercept ? undefined : this.cvSurvey.getFormId();\r\n    };\r\n    UISurvey.prototype.getPreGeneratedClientFeedbackId = function () {\r\n        return this.survey.getPreGeneratedClientFeedbackId();\r\n    };\r\n    UISurvey.prototype.getPromptQuestion = function () {\r\n        return this.isIntercept ? undefined : this.prompt.getQuestion();\r\n    };\r\n    UISurvey.prototype.getTitle = function () {\r\n        return this.isIntercept ? undefined : this.prompt.getTitle();\r\n    };\r\n    UISurvey.prototype.getPromptYesButtonText = function () {\r\n        return this.isIntercept ? undefined : this.prompt.getYesButtonText();\r\n    };\r\n    UISurvey.prototype.getPromptNoButtonText = function () {\r\n        return this.isIntercept ? undefined : this.prompt.getNoButtonText();\r\n    };\r\n    UISurvey.prototype.getRatingValuesAscending = function () {\r\n        return this.isIntercept ? undefined : this.rating.getRatingValuesAscending();\r\n    };\r\n    UISurvey.prototype.getRatingQuestion = function () {\r\n        return this.isIntercept ? undefined : this.rating.getQuestion();\r\n    };\r\n    UISurvey.prototype.getCommentQuestion = function () {\r\n        return this.isIntercept ? undefined : this.comment.getQuestion();\r\n    };\r\n    UISurvey.prototype.getInterceptTitle = function () {\r\n        return this.isIntercept ? this.intercept.getTitle() : undefined;\r\n    };\r\n    UISurvey.prototype.getInterceptQuestion = function () {\r\n        return this.isIntercept ? this.intercept.getQuestion() : undefined;\r\n    };\r\n    UISurvey.prototype.getInterceptUrl = function () {\r\n        return this.isIntercept ? this.intercept.getUrl() : undefined;\r\n    };\r\n    UISurvey.prototype.setValues = function (selectedIndex, comment) {\r\n        if (!this.isIntercept) {\r\n            this.rating.setSelectedRatingIndex(selectedIndex);\r\n            this.comment.setSubmittedText(comment);\r\n        }\r\n    };\r\n    UISurvey.prototype.getJsonElements = function () {\r\n        return this.survey.getJsonElements();\r\n    };\r\n    UISurvey.prototype.getSurveyType = function () {\r\n        return this.survey.getType();\r\n    };\r\n    UISurvey.prototype.getCampaignId = function () {\r\n        return this.survey.getSurveyInfo().getBackEndId();\r\n    };\r\n    UISurvey.prototype.getId = function () {\r\n        return this.survey.getSurveyInfo().getId();\r\n    };\r\n    UISurvey.prototype.getGoverenedChannelType = function () {\r\n        return this.survey.getSurveyInfo().getGovernedChannelType();\r\n    };\r\n    return UISurvey;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (UISurvey);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9GbG9vZGdhdGVDb3JlL1VJU3VydmV5L1VJU3VydmV5LnRzP2EwMDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7R0FFRztBQUdpRTtBQUVSO0FBRTVEO0lBY0Msa0JBQVksTUFBbUI7UUFieEIsZUFBVSxHQUFZLElBQUksQ0FBQztRQUUzQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFZeEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNaLE1BQU0sS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDdkM7YUFBTTtZQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssb0ZBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3BELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBRXhCLElBQUksa0JBQWtCLEdBQXlCLE1BQU0sQ0FBQyxZQUFZLDZCQUFxQyxDQUFDO1lBRXhHLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUksa0JBQThDLENBQUM7YUFDakU7aUJBQU07Z0JBQ04sTUFBTSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQzthQUNwRDtTQUVEO2FBQU07WUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUV6QixJQUFJLGVBQWUsR0FBeUIsTUFBTSxDQUFDLFlBQVksdUJBQWtDLENBQUM7WUFDbEcsSUFBSSxnQkFBZ0IsR0FBeUIsTUFBTSxDQUFDLFlBQVkseUJBQW1DLENBQUM7WUFDcEcsSUFBSSxlQUFlLEdBQXlCLE1BQU0sQ0FBQyxZQUFZLHVCQUFrQyxDQUFDO1lBQ2xHLElBQUksaUJBQWlCLEdBQXlCLE1BQU0sQ0FBQyxZQUFZLDJCQUFvQyxDQUFDO1lBRXRHLElBQUksZUFBZSxFQUFFO2dCQUNwQixJQUFJLENB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QTlCO1FBQ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUNGLGVBQUM7QUFBRCxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvRmxvb2RnYXRlQ29yZS9VSVN1cnZleS9VSVN1cnZleS50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBJVUlTdXJ2ZXkgYmFzZWQgb24gZmxvb2RnYXRlLmNvcmUgSU5wc1N1cnZleVxyXG4gKi9cclxuXHJcbmltcG9ydCBJVUlTdXJ2ZXkgZnJvbSBcIi4vSVVJU3VydmV5XCI7XHJcbmltcG9ydCAqIGFzIEFwaSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9BcGlcIjtcclxuaW1wb3J0IHsgR292ZXJuZWRDaGFubmVsVHlwZSB9IGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvR292ZXJuZWRDaGFubmVsXCI7XHJcbmltcG9ydCB7IGN1c3RvbWVyVm9pY2VMYXVuY2hlclR5cGUgfSBmcm9tIFwiLi4vLi4vQ29uc3RhbnRzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVSVN1cnZleSBpbXBsZW1lbnRzIElVSVN1cnZleSB7XHJcblx0cHVibGljIHNob3dQcm9tcHQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHRwdWJsaWMgc2hvd0VtYWlsUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRwcml2YXRlIGlzSW50ZXJjZXB0OiBib29sZWFuO1xyXG5cclxuXHRwcml2YXRlIHN1cnZleTogQXBpLklTdXJ2ZXk7XHJcblx0cHJpdmF0ZSBwcm9tcHQ6IEFwaS5JUHJvbXB0Q29tcG9uZW50O1xyXG5cdHByaXZhdGUgY29tbWVudDogQXBpLklDb21tZW50Q29tcG9uZW50O1xyXG5cdHByaXZhdGUgcmF0aW5nOiBBcGkuSVJhdGluZ0NvbXBvbmVudDtcclxuXHRwcml2YXRlIGludGVyY2VwdDogQXBpLklJbnRlcmNlcHRDb21wb25lbnQ7XHJcblx0cHJpdmF0ZSBjdlN1cnZleTogQXBpLklDVlN1cnZleUNvbXBvbmVudDtcclxuXHJcblx0Y29uc3RydWN0b3Ioc3VydmV5OiBBcGkuSVN1cnZleSkge1xyXG5cdFx0aWYgKCFzdXJ2ZXkpIHtcclxuXHRcdFx0dGhyb3cgRXJyb3IoXCJzdXJ2ZXkgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc3VydmV5ID0gc3VydmV5O1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChzdXJ2ZXkuZ2V0VHlwZSgpID09PSBBcGkuSVN1cnZleS5UeXBlLkludGVyY2VwdCkge1xyXG5cdFx0XHR0aGlzLmlzSW50ZXJjZXB0ID0gdHJ1ZTtcclxuXHJcblx0XHRcdGxldCBpbnRlcmNlcHRDb21wb25lbnQ6IEFwaS5JU3VydmV5Q29tcG9uZW50ID0gc3VydmV5LmdldENvbXBvbmVudChBcGkuSVN1cnZleUNvbXBvbmVudC5UeXBlLkludGVyY2VwdCk7XHJcblxyXG5cdFx0XHRpZiAoaW50ZXJjZXB0Q29tcG9uZW50KSB7XHJcblx0XHRcdFx0dGhpcy5pbnRlcmNlcHQgPSAoaW50ZXJjZXB0Q29tcG9uZW50IGFzIEFwaS5JSW50ZXJjZXB0Q29tcG9uZW50KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aHJvdyBFcnJvcihcImludGVyY2VwdCBjb21wb25lbnQgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuaXNJbnRlcmNlcHQgPSBmYWxzZTtcclxuXHJcblx0XHRcdGxldCBwcm9tcHRDb21wb25lbnQ6IEFwaS5JU3VydmV5Q29tcG9uZW50ID0gc3VydmV5LmdldENvbXBvbmVudChBcGkuSVN1cnZleUNvbXBvbmVudC5UeXBlLlByb21wdCk7XHJcblx0XHRcdGxldCBjb21tZW50Q29tcG9uZW50OiBBcGkuSVN1cnZleUNvbXBvbmVudCA9IHN1cnZleS5nZXRDb21wb25lbnQoQXBpLklTdXJ2ZXlDb21wb25lbnQuVHlwZS5Db21tZW50KTtcclxuXHRcdFx0bGV0IHJhdGluZ0NvbXBvbmVudDogQXBpLklTdXJ2ZXlDb21wb25lbnQgPSBzdXJ2ZXkuZ2V0Q29tcG9uZW50KEFwaS5JU3VydmV5Q29tcG9uZW50LlR5cGUuUmF0aW5nKTtcclxuXHRcdFx0bGV0IGN2U3VydmV5Q29tcG9uZW50OiBBcGkuSVN1cnZleUNvbXBvbmVudCA9IHN1cnZleS5nZXRDb21wb25lbnQoQXBpLklTdXJ2ZXlDb21wb25lbnQuVHlwZS5DVlN1cnZleSk7XHJcblxyXG5cdFx0XHRpZiAocHJvbXB0Q29tcG9uZW50KSB7XHJcblx0XHRcdFx0dGhpcy5wcm9tcHQgPSAocHJvbXB0Q29tcG9uZW50IGFzIEFwaS5JUHJvbXB0Q29tcG9uZW50KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aHJvdyBFcnJvcihcInByb21wdCBjb21wb25lbnQgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGFkZGl0b25hbERhdGFSZXF1ZXN0ZWQgb3B0aW9uc1xyXG5cdFx0XHR0aGlzLnNob3dFbWFpbFJlcXVlc3QgPSBzdXJ2ZXkuZ2V0U3VydmV5SW5mbygpLmlzQWRkaXRpb25hbERhdGFSZXF1ZXN0ZWQoXHJcblx0XHRcdFx0QXBpLklTdXJ2ZXlJbmZvLkFkZGl0aW9uYWxEYXRhVHlwZS5FbWFpbEFkZHJlc3MpO1xyXG5cclxuXHRcdFx0aWYgKGNvbW1lbnRDb21wb25lbnQpIHtcclxuXHRcdFx0XHR0aGlzLmNvbW1lbnQgPSAoY29tbWVudENvbXBvbmVudCBhcyBBcGkuSUNvbW1lbnRDb21wb25lbnQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRocm93IEVycm9yKFwiY29tbWVudCBjb21wb25lbnQgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHJhdGluZ0NvbXBvbmVudCkge1xyXG5cdFx0XHRcdHRoaXMucmF0aW5nID0gKHJhdGluZ0NvbXBvbmVudCBhcyBBcGkuSVJhdGluZ0NvbXBvbmVudCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhyb3cgRXJyb3IoXCJyYXRpbmcgY29tcG9uZW50IG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjdlN1cnZleUNvbXBvbmVudCkge1xyXG5cdFx0XHRcdHRoaXMuY3ZTdXJ2ZXkgPSAoY3ZTdXJ2ZXlDb21wb25lbnQgYXMgQXBpLklDVlN1cnZleUNvbXBvbmVudCk7XHJcblx0XHRcdFx0aWYgKHRoaXMuZ2V0TGF1bmNoZXJUeXBlKCkgPT09IGN1c3RvbWVyVm9pY2VMYXVuY2hlclR5cGUgJiYgIXRoaXMuZ2V0Q1ZTdXJ2ZXlGb3JtSWQoKSkge1xyXG5cdFx0XHRcdFx0dGhyb3cgRXJyb3IoXCJDdlN1cnZleUlkIHNob3VsZCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0cHVibGljIGdldExhdW5jaGVyVHlwZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXNJbnRlcmNlcHQgPyB1bmRlZmluZWQgOiB0aGlzLnN1cnZleS5nZXRMYXVuY2hlclR5cGUoKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRDVlN1cnZleUZvcm1JZCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXNJbnRlcmNlcHQgPyB1bmRlZmluZWQgOiB0aGlzLmN2U3VydmV5LmdldEZvcm1JZCgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFByZUdlbmVyYXRlZENsaWVudEZlZWRiYWNrSWQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnN1cnZleS5nZXRQcmVHZW5lcmF0ZWRDbGllbnRGZWVkYmFja0lkKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0UHJvbXB0UXVlc3Rpb24oKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmlzSW50ZXJjZXB0ID8gdW5kZWZpbmVkIDogdGhpcy5wcm9tcHQuZ2V0UXVlc3Rpb24oKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRUaXRsZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXNJbnRlcmNlcHQgPyB1bmRlZmluZWQgOiB0aGlzLnByb21wdC5nZXRUaXRsZSgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFByb21wdFllc0J1dHRvblRleHQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmlzSW50ZXJjZXB0ID8gdW5kZWZpbmVkIDogdGhpcy5wcm9tcHQuZ2V0WWVzQnV0dG9uVGV4dCgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFByb21wdE5vQnV0dG9uVGV4dCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXNJbnRlcmNlcHQgPyB1bmRlZmluZWQgOiB0aGlzLnByb21wdC5nZXROb0J1dHRvblRleHQoKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRSYXRpbmdWYWx1ZXNBc2NlbmRpbmcoKTogc3RyaW5nW10ge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXNJbnRlcmNlcHQgPyB1bmRlZmluZWQgOiB0aGlzLnJhdGluZy5nZXRSYXRpbmdWYWx1ZXNBc2NlbmRpbmcoKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRSYXRpbmdRdWVzdGlvbigpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXNJbnRlcmNlcHQgPyB1bmRlZmluZWQgOiB0aGlzLnJhdGluZy5nZXRRdWVzdGlvbigpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENvbW1lbnRRdWVzdGlvbigpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXNJbnRlcmNlcHQgPyB1bmRlZmluZWQgOiB0aGlzLmNvbW1lbnQuZ2V0UXVlc3Rpb24oKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRJbnRlcmNlcHRUaXRsZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXNJbnRlcmNlcHQgPyB0aGlzLmludGVyY2VwdC5nZXRUaXRsZSgpIDogdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldEludGVyY2VwdFF1ZXN0aW9uKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5pc0ludGVyY2VwdCA/IHRoaXMuaW50ZXJjZXB0LmdldFF1ZXN0aW9uKCkgOiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0SW50ZXJjZXB0VXJsKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5pc0ludGVyY2VwdCA/IHRoaXMuaW50ZXJjZXB0LmdldFVybCgpIDogdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldFZhbHVlcyhzZWxlY3RlZEluZGV4OiBudW1iZXIsIGNvbW1lbnQ6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLmlzSW50ZXJjZXB0KSB7XHJcblx0XHRcdHRoaXMucmF0aW5nLnNldFNlbGVjdGVkUmF0aW5nSW5kZXgoc2VsZWN0ZWRJbmRleCk7XHJcblx0XHRcdHRoaXMuY29tbWVudC5zZXRTdWJtaXR0ZWRUZXh0KGNvbW1lbnQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGdldEpzb25FbGVtZW50cygpOiBhbnkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc3VydmV5LmdldEpzb25FbGVtZW50cygpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFN1cnZleVR5cGUoKTogQXBpLklTdXJ2ZXkuVHlwZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0VHlwZSgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENhbXBhaWduSWQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0QmFja0VuZElkKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0SWQoKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRHb3ZlcmVuZWRDaGFubmVsVHlwZSgpOiBHb3Zlcm5lZENoYW5uZWxUeXBlIHtcclxuXHRcdHJldHVybiB0aGlzLnN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0R292ZXJuZWRDaGFubmVsVHlwZSgpO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/FloodgateCore/UISurvey/UISurvey.ts\n')},"./scripts/app/GovernanceService/GovernanceServiceClient.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GovernanceServiceClient", function() { return GovernanceServiceClient; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "get", function() { return get; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/* harmony import */ var _DynamicContent_DynamicContentTransport__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../DynamicContent/DynamicContentTransport */ "./scripts/app/DynamicContent/DynamicContentTransport.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Utils */ "../FloodgateCore/dist/src/Utils.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_IGovernanceServiceClient__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/IGovernanceServiceClient */ "../FloodgateCore/dist/src/Api/IGovernanceServiceClient.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_IGovernanceServiceClient__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_IGovernanceServiceClient__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/GovernedChannel */ "../FloodgateCore/dist/src/GovernedChannel.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../Personalizer/PersonalizerClient */ "./scripts/app/Personalizer/PersonalizerClient.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Utils */ "./scripts/app/Utils.ts");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar govServiceInt = "https://onessppe.microsoft.com/api/v1.0/UserSurvey";\r\nvar govServiceProd = "https://oness.microsoft.com/api/v1.0/UserSurvey";\r\nvar GovernanceServiceClient = /** @class */ (function () {\r\n    function GovernanceServiceClient() {\r\n        this.personalizerClient = _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_7__["get"]();\r\n        this.governanceServiceEnabled = false;\r\n        this.forceServicelessSurveyDisplay = false;\r\n        this.lastSurveyFailedSync = undefined;\r\n        this.clientState = _ms_ofb_officefloodgatecore_dist_src_Api_IGovernanceServiceClient__WEBPACK_IMPORTED_MODULE_5__["GovernanceServiceClientState"].Disabled;\r\n    }\r\n    GovernanceServiceClient.prototype.setup = function (configuration) {\r\n        this.governanceServiceEnabled = configuration.getFloodgateInitOptions().governanceServiceEnabled;\r\n        if (this.governanceServiceEnabled) {\r\n            // setup config and client info\r\n            this.clientInfo = {\r\n                applicationId: configuration.getCommonInitOptions().appId.toString(),\r\n                sessionId: configuration.getCommonInitOptions().sessionId,\r\n                version: configuration.getCommonInitOptions().build,\r\n                surveyPlatform: 1 /* Floodgate */,\r\n                hostPlatform: 6 /* Web */,\r\n                tenantId: configuration.getCommonInitOptions().telemetryGroup.tenantId,\r\n                deviceId: configuration.getCommonInitOptions().telemetryGroup.deviceId,\r\n                audience: configuration.getCommonInitOptions().telemetryGroup.audience,\r\n            };\r\n            this.userId = configuration.getCommonInitOptions().telemetryGroup.loggableUserId;\r\n            // Ensure all the client info is needed\r\n            if (Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_4__["isNOU"])(this.clientInfo.sessionId)) {\r\n                this.clientState = _ms_ofb_officefloodgatecore_dist_src_Api_IGovernanceServiceClient__WEBPACK_IMPORTED_MODULE_5__["GovernanceServiceClientState"].InitializationFailed;\r\n                return;\r\n            }\r\n            if (Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_4__["isNOU"])(this.clientInfo.version)) {\r\n                this.clientState = _ms_ofb_officefloodgatecore_dist_src_Api_IGovernanceServiceClient__WEBPACK_IMPORTED_MODULE_5__["GovernanceServiceClientState"].InitializationFailed;\r\n                return;\r\n            }\r\n            if (!Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_4__["isValidUserId"])(this.userId)) {\r\n                this.clientState = _ms_ofb_officefloodgatecore_dist_src_Api_IGovernanceServiceClient__WEBPACK_IMPORTED_MODULE_5__["GovernanceServiceClientState"].InitializationFailed;\r\n                return;\r\n            }\r\n            // Setup governance service config parameters\r\n            this.forceServicelessSurveyDisplay = configuration.getFloodgateInitOptions().governanceServiceConfig.forceServicelessSurveyDisplay;\r\n            this.retryLimit = configuration.getFloodgateInitOptions().governanceServiceConfig.retry;\r\n            this.timeout = configuration.getFloodgateInitOptions().governanceServiceConfig.timeout;\r\n            this.simpleRequestEnabled = configuration.getFloodgateInitOptions().governanceServiceConfig.simpleRequestEnabled;\r\n            this.isProduction = configuration.getCommonInitOptions().environment === 0 /* Production */;\r\n            this.clientState = _ms_ofb_officefloodgatecore_dist_src_Api_IGovernanceServiceClient__WEBPACK_IMPORTED_MODULE_5__["GovernanceServiceClientState"].Enabled;\r\n            this.dynamicTransport = new _DynamicContent_DynamicContentTransport__WEBPACK_IMPORTED_MODULE_3__["DynamicContentTransport"](this.simpleRequestEnabled);\r\n        }\r\n    };\r\n    GovernanceServiceClient.prototype.isEnabled = function (governedChannelType) {\r\n        return this.clientState === _ms_ofb_officefloodgatecore_dist_src_Api_IGovernanceServiceClient__WEBPACK_IMPORTED_MODULE_5__["GovernanceServiceClientState"].Enabled &&\r\n            this.governanceServiceEnabled &&\r\n            governedChannelType === _ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_6__["GovernedChannelType"].Standard;\r\n    };\r\n    GovernanceServiceClient.prototype.shouldForceDisplay = function () {\r\n        return this.forceServicelessSurveyDisplay;\r\n    };\r\n    GovernanceServiceClient.prototype.getClientInfo = function () {\r\n        return this.clientInfo;\r\n    };\r\n    GovernanceServiceClient.prototype.getClientState = function () {\r\n        return this.clientState;\r\n    };\r\n    GovernanceServiceClient.prototype.getLastSurveyFailedSync = function () {\r\n        return this.lastSurveyFailedSync;\r\n    };\r\n    GovernanceServiceClient.prototype.checkGovernancePermitAsync = function (survey, surveyLevelCooldown, userLevelCooldown, channel) {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var requestUrl, surveyInfo, body, serviceResult, response, serviceCallTime, timeBefore, responseText, jsonResponse, e_1;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        requestUrl = (this.isProduction ? govServiceProd : govServiceInt) + (this.simpleRequestEnabled ? "/SimpleRequest" : "");\r\n                        surveyInfo = this.buildSurveyInfo(survey, surveyLevelCooldown, channel);\r\n                        body = this.buildBodyRequest(surveyInfo, userLevelCooldown);\r\n                        serviceResult = {\r\n                            permission: false,\r\n                            error: false,\r\n                        };\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        _a.trys.push([1, 4, , 5]);\r\n                        timeBefore = performance.now();\r\n                        return [4 /*yield*/, this.dynamicTransport.postRequestWithRetry(requestUrl, body, this.retryLimit, this.timeout)];\r\n                    case 2:\r\n                        response = _a.sent();\r\n                        serviceCallTime = performance.now() - timeBefore;\r\n                        responseText = void 0;\r\n                        if (!response.ok) {\r\n                            this.lastSurveyFailedSync = surveyInfo;\r\n                            serviceResult.errorMessage = "Server Error, status: " + response.status + ", status text: " + response.statusText;\r\n                            serviceResult.error = true;\r\n                            // Log the successful post criteria with time\r\n                            _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["EventIds"].GOVERNANCE_SERVICERESULT, 1 /* Critical */, {\r\n                                TimeMilliseconds: serviceCallTime,\r\n                                HttpStatusCode: response.status,\r\n                                HttpStatusText: response.statusText,\r\n                                AdditionalSurveyInfo: this.buildConfigTelemetryString(),\r\n                                CorrelationId: this.dynamicTransport.requestId,\r\n                                GovernanceRequestBody: body,\r\n                                GovernanceResponseText: responseText,\r\n                                CampaignId: survey.getCampaignId(),\r\n                                SurveyId: survey.getSurveyInfo().getId(),\r\n                            });\r\n                            return [2 /*return*/, serviceResult];\r\n                        }\r\n                        return [4 /*yield*/, response.text()];\r\n                    case 3:\r\n                        // Get the response text\r\n                        responseText = _a.sent();\r\n                        // Log the successful post criteria with time\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["EventIds"].GOVERNANCE_SERVICERESULT, 1 /* Critical */, {\r\n                            TimeMilliseconds: serviceCallTime,\r\n                            HttpStatusCode: response.status,\r\n                            HttpStatusText: response.statusText,\r\n                            AdditionalSurveyInfo: this.buildConfigTelemetryString(),\r\n                            CorrelationId: this.dynamicTransport.requestId,\r\n                            GovernanceRequestBody: body,\r\n                            GovernanceResponseText: responseText,\r\n                            CampaignId: survey.getCampaignId(),\r\n                            SurveyId: survey.getSurveyInfo().getId(),\r\n                        });\r\n                        jsonResponse = JSON.parse(responseText);\r\n                        // Reparsing the date to correct ISO format\r\n                        jsonResponse.lastTriggerSurveyTime = Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_4__["stringToDate"])(new Date(jsonResponse.lastTriggerSurveyTime).toISOString());\r\n                        // Check the response integrity\r\n                        if (!Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_4__["isNumber"])(jsonResponse.timeUntilNextSurveyAllowed) ||\r\n                            !Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_4__["isDate"])(jsonResponse.lastTriggerSurveyTime)) {\r\n                            // Throw error with the response\r\n                            serviceResult.errorMessage = "Service Response is not formatted correctly: " + responseText;\r\n                            serviceResult.error = true;\r\n                            this.lastSurveyFailedSync = surveyInfo;\r\n                        }\r\n                        else {\r\n                            // Check if this is permitted\r\n                            if (jsonResponse.timeUntilNextSurveyAllowed === 0) {\r\n                                serviceResult.permission = true;\r\n                                // Set the personalizer data for AutoDismiss recommendation override (if enabled)\r\n                                if (this.personalizerClient.isEnabled(survey.getType(), survey.getLauncherType(), survey.getSurveyInfo().getGovernedChannelType())) {\r\n                                    this.personalizerClient.setEventIdAndOverrideValueForSurveyId(this.dynamicTransport.requestId, 0 /* AutoDismissTime */, jsonResponse.actionId, survey.getSurveyInfo().getId(), survey.getCampaignId());\r\n                                }\r\n                            }\r\n                            // Save the response trigger time\r\n                            serviceResult.lastTriggerSurvey = jsonResponse;\r\n                            // Clear the last failure\r\n                            this.lastSurveyFailedSync = undefined;\r\n                        }\r\n                        return [3 /*break*/, 5];\r\n                    case 4:\r\n                        e_1 = _a.sent();\r\n                        this.lastSurveyFailedSync = surveyInfo;\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["EventIds"].GOVERNANCE_SERVICEFAILURE, 2 /* Error */, {\r\n                            ErrorMessage: e_1.toString(),\r\n                            AdditionalSurveyInfo: this.buildConfigTelemetryString(),\r\n                            CorrelationId: this.dynamicTransport.requestId,\r\n                            HttpStatusCode: response === null || response === void 0 ? void 0 : response.status,\r\n                            HttpStatusText: response === null || response === void 0 ? void 0 : response.statusText,\r\n                            GovernanceRequestBody: body,\r\n                        });\r\n                        serviceResult.error = true;\r\n                        serviceResult.errorMessage = "Error: " + e_1.toString() + ", Error stack: " + e_1.stack;\r\n                        return [3 /*break*/, 5];\r\n                    case 5: return [2 /*return*/, serviceResult];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    GovernanceServiceClient.prototype.buildSurveyInfo = function (survey, surveyLevelCooldown, channel) {\r\n        var stringType = _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__["ISurvey"].Type[survey.getType()];\r\n        var surveyType = _ms_ofb_officefloodgatecore_dist_src_Api_IGovernanceServiceClient__WEBPACK_IMPORTED_MODULE_5__["GovernanceServiceSurveyType"][stringType];\r\n        var newDate = new Date();\r\n        var isPersonalizerEnabled = this.personalizerClient.isEnabled(survey.getType(), survey.getLauncherType(), survey.getSurveyInfo().getGovernedChannelType());\r\n        return {\r\n            surveyId: survey.getCampaignId(),\r\n            surveyTriggerTime: newDate,\r\n            surveyType: surveyType,\r\n            surveyLevelCooldown: surveyLevelCooldown,\r\n            surveyChannel: channel,\r\n            localOffsetTime: newDate.getTimezoneOffset(),\r\n            personalizerEnabled: isPersonalizerEnabled,\r\n        };\r\n    };\r\n    GovernanceServiceClient.prototype.buildBodyRequest = function (surveyInfo, userLevelCooldown) {\r\n        var result = {\r\n            userId: this.userId,\r\n            userLevelCooldown: userLevelCooldown,\r\n            survey: surveyInfo,\r\n            client: this.clientInfo,\r\n        };\r\n        if (this.simpleRequestEnabled) {\r\n            this.dynamicTransport.requestId = Object(_Utils__WEBPACK_IMPORTED_MODULE_8__["guid"])();\r\n            result.requestId = this.dynamicTransport.requestId;\r\n        }\r\n        return JSON.stringify(result);\r\n    };\r\n    GovernanceServiceClient.prototype.buildConfigTelemetryString = function () {\r\n        var objectTelemetry = {\r\n            retry: this.retryLimit,\r\n            timeout: this.timeout,\r\n            simpleRequestEnabled: this.simpleRequestEnabled,\r\n        };\r\n        return JSON.stringify(objectTelemetry);\r\n    };\r\n    return GovernanceServiceClient;\r\n}());\r\n\r\nvar governanceServiceClient = new GovernanceServiceClient();\r\n/**\r\n * Get the current Governance Service Client\r\n */\r\nfunction get() {\r\n    return governanceServiceClient;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Hb3Zlcm5hbmNlU2VydmljZS9Hb3Zlcm5hbmNlU2VydmljZUNsaWVudC50cz85OGMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQW9FO0FBRXRCO0FBQ3NDO0FBRThCO0FBTXpDO0FBQ2tCO0FBQ2xCO0FBQ3pDO0FBRWhDLElBQU0sYUFBYSxHQUFXLG9EQUFvRCxDQUFDO0FBQ25GLElBQU0sY0FBYyxHQUFXLGlEQUFpRCxDQUFDO0FBRWpGO0lBc0JDO1FBQ0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLG9FQUFzQixFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxDQUFDO1FBQzNDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyw4SEFBNEIsQ0FBQyxRQUFRLENBQUM7SUFDMUQsQ0FBQztJQUVNLHVDQUFLLEdBQVosVUFBYSxhQUE0QjtRQUN4QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsYUFBYSxDQUFDLHVCQUF1QixFQUFFLENBQUMsd0JBQXdCLENBQUM7UUFFakcsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDbEMsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUc7Z0JBQ2pCLGFBQWEsRUFBRSxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUNwRSxTQUFTLEVBQUUsYUFBYSxDQUFDLG9CQUFvQixFQUFFLENBQUMsU0FBUztnQkFDekQsT0FBTyxFQUFFLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEtBQUs7Z0JBQ25ELGNBQWMsbUJBQTJDO2dCQUN6RCxZQUFZLGFBQW1DO2dCQUMvQyxRQUFRLEVBQUUsYUFBYSxDQUFDLG9CQUFvQixFQUFFLENBQUMsY0FBYyxD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VUFBeUIsVUFBaUMsRUFBRSxpQkFBeUI7UUFDcEYsSUFBTSxNQUFNLEdBQTZCO1lBQ3hDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixpQkFBaUIsRUFBRSxpQkFBaUI7WUFDcEMsTUFBTSxFQUFFLFVBQVU7WUFDbEIsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQ3ZCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLG1EQUFJLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7U0FDbkQ7UUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVPLDREQUEwQixHQUFsQztRQUNDLElBQU0sZUFBZSxHQUFHO1lBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVTtZQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtTQUMvQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRiw4QkFBQztBQUFELENBQUM7O0FBRUQsSUFBTSx1QkFBdUIsR0FBNEIsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0FBRXZGOztHQUVHO0FBQ0ksU0FBUyxHQUFHO0lBQ2xCLE9BQU8sdUJBQXVCLENBQUM7QUFDaEMsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0dvdmVybmFuY2VTZXJ2aWNlL0dvdmVybmFuY2VTZXJ2aWNlQ2xpZW50LnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQXBpIGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvQXBpL0FwaVwiO1xyXG5pbXBvcnQgKiBhcyBDb25zdGFudHMgZnJvbSBcIi4vLi4vQ29uc3RhbnRzXCI7XHJcbmltcG9ydCAqIGFzIExvZ2dpbmcgZnJvbSBcIi4uL0xvZ2dpbmcvTG9nZ2luZ1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljQ29udGVudFRyYW5zcG9ydCB9IGZyb20gXCIuLi9EeW5hbWljQ29udGVudC9EeW5hbWljQ29udGVudFRyYW5zcG9ydFwiO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL0NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBpc0RhdGUsIGlzTk9VLCBpc051bWJlciwgaXNWYWxpZFVzZXJJZCwgc3RyaW5nVG9EYXRlIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9VdGlsc1wiO1xyXG5pbXBvcnQgeyBJR292ZXJuYW5jZUNsaWVudEluZm8sIElHb3Zlcm5hbmNlU3VydmV5SW5mbywgSUdvdmVybmFuY2VTdXJ2ZXlSZXF1ZXN0LCBJR292ZXJuYW5jZVN1cnZleVJlc3BvbnNlLCBJR292ZXJuYW5jZVNlcnZpY2VSZXN1bHQgfVxyXG5mcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9JR292ZXJuYW5jZVNlcnZpY2VDbGllbnRcIjtcclxuaW1wb3J0IHsgU3VwcG9ydGVkT3ZlcnJpZGVzIH1cclxuZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9BcGkvSVBlcnNvbmFsaXplckNsaWVudFwiO1xyXG5pbXBvcnQgeyBHb3Zlcm5hbmNlU2VydmljZUNsaWVudFN0YXRlLCBHb3Zlcm5hbmNlU2VydmljZUhvc3RQbGF0Zm9ybSwgR292ZXJuYW5jZVNlcnZpY2VTdXJ2ZXlQbGF0Zm9ybSwgR292ZXJuYW5jZVNlcnZpY2VTdXJ2ZXlUeXBlIH1cclxuZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9BcGkvSUdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50XCI7XHJcbmltcG9ydCB7IEdvdmVybmVkQ2hhbm5lbFR5cGUgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0dvdmVybmVkQ2hhbm5lbFwiO1xyXG5pbXBvcnQgKiBhcyBQZXJzb25hbGl6ZXJDbGllbnQgZnJvbSBcIi4uL1BlcnNvbmFsaXplci9QZXJzb25hbGl6ZXJDbGllbnRcIjtcclxuaW1wb3J0IHsgZ3VpZCB9IGZyb20gXCIuLi9VdGlsc1wiO1xyXG5cclxuY29uc3QgZ292U2VydmljZUludDogc3RyaW5nID0gXCJodHRwczovL29uZXNzcHBlLm1pY3Jvc29mdC5jb20vYXBpL3YxLjAvVXNlclN1cnZleVwiO1xyXG5jb25zdCBnb3ZTZXJ2aWNlUHJvZDogc3RyaW5nID0gXCJodHRwczovL29uZXNzLm1pY3Jvc29mdC5jb20vYXBpL3YxLjAvVXNlclN1cnZleVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50IGltcGxlbWVudHMgQXBpLklHb3Zlcm5hbmNlU2VydmljZUNsaWVudCB7XHJcblxyXG5cdC8vIG1ha2luZyB0aGVzZSBkYXRhIHB1YmxpYyBzbyB0aGV5IGNhbiBiZSBhY2Nlc3MgZm9yIHRlc3RpbmdcclxuXHRwdWJsaWMgZHluYW1pY1RyYW5zcG9ydDogRHluYW1pY0NvbnRlbnRUcmFuc3BvcnQ7XHJcblx0cHVibGljIHBlcnNvbmFsaXplckNsaWVudDogQXBpLklQZXJzb25hbGl6ZXJDbGllbnQ7XHJcblx0cHVibGljIGNsaWVudFN0YXRlOiBHb3Zlcm5hbmNlU2VydmljZUNsaWVudFN0YXRlO1xyXG5cclxuXHQvLyBDb25maWd1cmF0aW9uIGRhdGFcclxuXHRwcml2YXRlIGdvdmVybmFuY2VTZXJ2aWNlRW5hYmxlZDogYm9vbGVhbjtcclxuXHRwcml2YXRlIGZvcmNlU2VydmljZWxlc3NTdXJ2ZXlEaXNwbGF5OiBib29sZWFuO1xyXG5cdHByaXZhdGUgcmV0cnlMaW1pdDogbnVtYmVyO1xyXG5cdHByaXZhdGUgdGltZW91dDogbnVtYmVyO1xyXG5cdHByaXZhdGUgc2ltcGxlUmVxdWVzdEVuYWJsZWQ6IGJvb2xlYW47XHJcblx0cHJpdmF0ZSBpc1Byb2R1Y3Rpb246IGJvb2xlYW47XHJcblxyXG5cdC8vIGNsaWVudCBpbmZvXHJcblx0cHJpdmF0ZSBjbGllbnRJbmZvOiBJR292ZXJuYW5jZUNsaWVudEluZm87XHJcblx0cHJpdmF0ZSB1c2VySWQ6IHN0cmluZztcclxuXHJcblx0Ly8gc3VydmV5IGRhdGFcclxuXHRwcml2YXRlIGxhc3RTdXJ2ZXlGYWlsZWRTeW5jOiBJR292ZXJuYW5jZVN1cnZleUluZm87XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0dGhpcy5wZXJzb25hbGl6ZXJDbGllbnQgPSBQZXJzb25hbGl6ZXJDbGllbnQuZ2V0KCk7XHJcblx0XHR0aGlzLmdvdmVybmFuY2VTZXJ2aWNlRW5hYmxlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5mb3JjZVNlcnZpY2VsZXNzU3VydmV5RGlzcGxheSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5sYXN0U3VydmV5RmFpbGVkU3luYyA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuY2xpZW50U3RhdGUgPSBHb3Zlcm5hbmNlU2VydmljZUNsaWVudFN0YXRlLkRpc2FibGVkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldHVwKGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24pIHtcclxuXHRcdHRoaXMuZ292ZXJuYW5jZVNlcnZpY2VFbmFibGVkID0gY29uZmlndXJhdGlvbi5nZXRGbG9vZGdhdGVJbml0T3B0aW9ucygpLmdvdmVybmFuY2VTZXJ2aWNlRW5hYmxlZDtcclxuXHJcblx0XHRpZiAodGhpcy5nb3Zlcm5hbmNlU2VydmljZUVuYWJsZWQpIHtcclxuXHRcdFx0Ly8gc2V0dXAgY29uZmlnIGFuZCBjbGllbnQgaW5mb1xyXG5cdFx0XHR0aGlzLmNsaWVudEluZm8gPSB7XHJcblx0XHRcdFx0YXBwbGljYXRpb25JZDogY29uZmlndXJhdGlvbi5nZXRDb21tb25Jbml0T3B0aW9ucygpLmFwcElkLnRvU3RyaW5nKCksXHJcblx0XHRcdFx0c2Vzc2lvbklkOiBjb25maWd1cmF0aW9uLmdldENvbW1vbkluaXRPcHRpb25zKCkuc2Vzc2lvbklkLFxyXG5cdFx0XHRcdHZlcnNpb246IGNvbmZpZ3VyYXRpb24uZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5idWlsZCxcclxuXHRcdFx0XHRzdXJ2ZXlQbGF0Zm9ybTogR292ZXJuYW5jZVNlcnZpY2VTdXJ2ZXlQbGF0Zm9ybS5GbG9vZGdhdGUsXHJcblx0XHRcdFx0aG9zdFBsYXRmb3JtOiBHb3Zlcm5hbmNlU2VydmljZUhvc3RQbGF0Zm9ybS5XZWIsXHJcblx0XHRcdFx0dGVuYW50SWQ6IGNvbmZpZ3VyYXRpb24uZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS50ZWxlbWV0cnlHcm91cC50ZW5hbnRJZCxcclxuXHRcdFx0XHRkZXZpY2VJZDogY29uZmlndXJhdGlvbi5nZXRDb21tb25Jbml0T3B0aW9ucygpLnRlbGVtZXRyeUdyb3VwLmRldmljZUlkLFxyXG5cdFx0XHRcdGF1ZGllbmNlOiBjb25maWd1cmF0aW9uLmdldENvbW1vbkluaXRPcHRpb25zKCkudGVsZW1ldHJ5R3JvdXAuYXVkaWVuY2UsXHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMudXNlcklkID0gY29uZmlndXJhdGlvbi5nZXRDb21tb25Jbml0T3B0aW9ucygpLnRlbGVtZXRyeUdyb3VwLmxvZ2dhYmxlVXNlcklkO1xyXG5cclxuXHRcdFx0Ly8gRW5zdXJlIGFsbCB0aGUgY2xpZW50IGluZm8gaXMgbmVlZGVkXHJcblx0XHRcdGlmIChpc05PVSh0aGlzLmNsaWVudEluZm8uc2Vzc2lvbklkKSkge1xyXG5cdFx0XHRcdHRoaXMuY2xpZW50U3RhdGUgPSBHb3Zlcm5hbmNlU2VydmljZUNsaWVudFN0YXRlLkluaXRpYWxpemF0aW9uRmFpbGVkO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGlzTk9VKHRoaXMuY2xpZW50SW5mby52ZXJzaW9uKSkge1xyXG5cdFx0XHRcdHRoaXMuY2xpZW50U3RhdGUgPSBHb3Zlcm5hbmNlU2VydmljZUNsaWVudFN0YXRlLkluaXRpYWxpemF0aW9uRmFpbGVkO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCFpc1ZhbGlkVXNlcklkKHRoaXMudXNlcklkKSkge1xyXG5cdFx0XHRcdHRoaXMuY2xpZW50U3RhdGUgPSBHb3Zlcm5hbmNlU2VydmljZUNsaWVudFN0YXRlLkluaXRpYWxpemF0aW9uRmFpbGVkO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU2V0dXAgZ292ZXJuYW5jZSBzZXJ2aWNlIGNvbmZpZyBwYXJhbWV0ZXJzXHJcblx0XHRcdHRoaXMuZm9yY2VTZXJ2aWNlbGVzc1N1cnZleURpc3BsYXkgPSBjb25maWd1cmF0aW9uLmdldEZsb29kZ2F0ZUluaXRPcHRpb25zKCkuZ292ZXJuYW5jZVNlcnZpY2VDb25maWcuZm9yY2VTZXJ2aWNlbGVzc1N1cnZleURpc3BsYXk7XHJcblx0XHRcdHRoaXMucmV0cnlMaW1pdCA9IGNvbmZpZ3VyYXRpb24uZ2V0Rmxvb2RnYXRlSW5pdE9wdGlvbnMoKS5nb3Zlcm5hbmNlU2VydmljZUNvbmZpZy5yZXRyeTtcclxuXHRcdFx0dGhpcy50aW1lb3V0ID0gY29uZmlndXJhdGlvbi5nZXRGbG9vZGdhdGVJbml0T3B0aW9ucygpLmdvdmVybmFuY2VTZXJ2aWNlQ29uZmlnLnRpbWVvdXQ7XHJcblx0XHRcdHRoaXMuc2ltcGxlUmVxdWVzdEVuYWJsZWQgPSBjb25maWd1cmF0aW9uLmdldEZsb29kZ2F0ZUluaXRPcHRpb25zKCkuZ292ZXJuYW5jZVNlcnZpY2VDb25maWcuc2ltcGxlUmVxdWVzdEVuYWJsZWQ7XHJcblx0XHRcdHRoaXMuaXNQcm9kdWN0aW9uID0gY29uZmlndXJhdGlvbi5nZXRDb21tb25Jbml0T3B0aW9ucygpLmVudmlyb25tZW50ID09PSBDb25zdGFudHMuRW52aXJvbm1lbnQuUHJvZHVjdGlvbjtcclxuXHRcdFx0dGhpcy5jbGllbnRTdGF0ZSA9IEdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50U3RhdGUuRW5hYmxlZDtcclxuXHRcdFx0dGhpcy5keW5hbWljVHJhbnNwb3J0ID0gbmV3IER5bmFtaWNDb250ZW50VHJhbnNwb3J0KHRoaXMuc2ltcGxlUmVxdWVzdEVuYWJsZWQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGlzRW5hYmxlZChnb3Zlcm5lZENoYW5uZWxUeXBlOiBHb3Zlcm5lZENoYW5uZWxUeXBlKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jbGllbnRTdGF0ZSA9PT0gR292ZXJuYW5jZVNlcnZpY2VDbGllbnRTdGF0ZS5FbmFibGVkICYmXHJcblx0XHRcdFx0dGhpcy5nb3Zlcm5hbmNlU2VydmljZUVuYWJsZWQgJiZcclxuXHRcdFx0XHRnb3Zlcm5lZENoYW5uZWxUeXBlID09PSBHb3Zlcm5lZENoYW5uZWxUeXBlLlN0YW5kYXJkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNob3VsZEZvcmNlRGlzcGxheSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmZvcmNlU2VydmljZWxlc3NTdXJ2ZXlEaXNwbGF5O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENsaWVudEluZm8oKTogSUdvdmVybmFuY2VDbGllbnRJbmZvIHtcclxuXHRcdHJldHVybiB0aGlzLmNsaWVudEluZm87XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0Q2xpZW50U3RhdGUoKTogR292ZXJuYW5jZVNlcnZpY2VDbGllbnRTdGF0ZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jbGllbnRTdGF0ZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRMYXN0U3VydmV5RmFpbGVkU3luYygpOiBJR292ZXJuYW5jZVN1cnZleUluZm8ge1xyXG5cdFx0cmV0dXJuIHRoaXMubGFzdFN1cnZleUZhaWxlZFN5bmM7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgY2hlY2tHb3Zlcm5hbmNlUGVybWl0QXN5bmMoXHJcblx0XHRzdXJ2ZXk6IEFwaS5JU3VydmV5LFxyXG5cdFx0c3VydmV5TGV2ZWxDb29sZG93bjogbnVtYmVyLFxyXG5cdFx0dXNlckxldmVsQ29vbGRvd246IG51bWJlcixcclxuXHRcdGNoYW5uZWw6IEdvdmVybmVkQ2hhbm5lbFR5cGUpOiBQcm9taXNlPElHb3Zlcm5hbmNlU2VydmljZVJlc3VsdD4ge1xyXG5cclxuXHRcdGNvbnN0IHJlcXVlc3RVcmw6IHN0cmluZyA9ICh0aGlzLmlzUHJvZHVjdGlvbiA/IGdvdlNlcnZpY2VQcm9kIDogZ292U2VydmljZUludCkgKyAodGhpcy5zaW1wbGVSZXF1ZXN0RW5hYmxlZCA/IFwiL1NpbXBsZVJlcXVlc3RcIiA6IFwiXCIpO1xyXG5cdFx0Y29uc3Qgc3VydmV5SW5mbzogSUdvdmVybmFuY2VTdXJ2ZXlJbmZvID0gdGhpcy5idWlsZFN1cnZleUluZm8oc3VydmV5LCBzdXJ2ZXlMZXZlbENvb2xkb3duLCBjaGFubmVsKTtcclxuXHRcdGNvbnN0IGJvZHk6IHN0cmluZyA9IHRoaXMuYnVpbGRCb2R5UmVxdWVzdChzdXJ2ZXlJbmZvLCB1c2VyTGV2ZWxDb29sZG93bik7XHJcblx0XHRjb25zdCBzZXJ2aWNlUmVzdWx0OiBJR292ZXJuYW5jZVNlcnZpY2VSZXN1bHQgPSB7XHJcblx0XHRcdHBlcm1pc3Npb246IGZhbHNlLFxyXG5cdFx0XHRlcnJvcjogZmFsc2UsXHJcblx0XHR9O1xyXG5cclxuXHRcdGxldCByZXNwb25zZTogUmVzcG9uc2U7XHJcblx0XHRsZXQgc2VydmljZUNhbGxUaW1lOiBudW1iZXI7XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgdGltZUJlZm9yZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cdFx0XHRyZXNwb25zZSA9IGF3YWl0IHRoaXMuZHluYW1pY1RyYW5zcG9ydC5wb3N0UmVxdWVzdFdpdGhSZXRyeShyZXF1ZXN0VXJsLCBib2R5LCB0aGlzLnJldHJ5TGltaXQsIHRoaXMudGltZW91dCk7XHJcblx0XHRcdHNlcnZpY2VDYWxsVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gdGltZUJlZm9yZTtcclxuXHJcblx0XHRcdGxldCByZXNwb25zZVRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcblx0XHRcdGlmICghcmVzcG9uc2Uub2spIHtcclxuXHRcdFx0XHR0aGlzLmxhc3RTdXJ2ZXlGYWlsZWRTeW5jID0gc3VydmV5SW5mbztcclxuXHRcdFx0XHRzZXJ2aWNlUmVzdWx0LmVycm9yTWVzc2FnZSA9IGBTZXJ2ZXIgRXJyb3IsIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9LCBzdGF0dXMgdGV4dDogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWA7XHJcblx0XHRcdFx0c2VydmljZVJlc3VsdC5lcnJvciA9IHRydWU7XHJcblx0XHRcdFx0Ly8gTG9nIHRoZSBzdWNjZXNzZnVsIHBvc3QgY3JpdGVyaWEgd2l0aCB0aW1lXHJcblx0XHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChMb2dnaW5nLkV2ZW50SWRzLkdPVkVSTkFOQ0VfU0VSVklDRVJFU1VMVCxcclxuXHRcdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuQ3JpdGljYWwsXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFRpbWVNaWxsaXNlY29uZHM6IHNlcnZpY2VDYWxsVGltZSxcclxuXHRcdFx0XHRcdFx0SHR0cFN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcclxuXHRcdFx0XHRcdFx0SHR0cFN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXHJcblx0XHRcdFx0XHRcdEFkZGl0aW9uYWxTdXJ2ZXlJbmZvOiB0aGlzLmJ1aWxkQ29uZmlnVGVsZW1ldHJ5U3RyaW5nKCksXHJcblx0XHRcdFx0XHRcdENvcnJlbGF0aW9uSWQ6IHRoaXMuZHluYW1pY1RyYW5zcG9ydC5yZXF1ZXN0SWQsXHJcblx0XHRcdFx0XHRcdEdvdmVybmFuY2VSZXF1ZXN0Qm9keTogYm9keSxcclxuXHRcdFx0XHRcdFx0R292ZXJuYW5jZVJlc3BvbnNlVGV4dDogcmVzcG9uc2VUZXh0LFxyXG5cdFx0XHRcdFx0XHRDYW1wYWlnbklkOiBzdXJ2ZXkuZ2V0Q2FtcGFpZ25JZCgpLFxyXG5cdFx0XHRcdFx0XHRTdXJ2ZXlJZDogc3VydmV5LmdldFN1cnZleUluZm8oKS5nZXRJZCgpLFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gc2VydmljZVJlc3VsdDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gR2V0IHRoZSByZXNwb25zZSB0ZXh0XHJcblx0XHRcdHJlc3BvbnNlVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcclxuXHJcblx0XHRcdC8vIExvZyB0aGUgc3VjY2Vzc2Z1bCBwb3N0IGNyaXRlcmlhIHdpdGggdGltZVxyXG5cdFx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KExvZ2dpbmcuRXZlbnRJZHMuR09WRVJOQU5DRV9TRVJWSUNFUkVTVUxULFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuQ3JpdGljYWwsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0VGltZU1pbGxpc2Vjb25kczogc2VydmljZUNhbGxUaW1lLFxyXG5cdFx0XHRcdFx0SHR0cFN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcclxuXHRcdFx0XHRcdEh0dHBTdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxyXG5cdFx0XHRcdFx0QWRkaXRpb25hbFN1cnZleUluZm86IHRoaXMuYnVpbGRDb25maWdUZWxlbWV0cnlTdHJpbmcoKSxcclxuXHRcdFx0XHRcdENvcnJlbGF0aW9uSWQ6IHRoaXMuZHluYW1pY1RyYW5zcG9ydC5yZXF1ZXN0SWQsXHJcblx0XHRcdFx0XHRHb3Zlcm5hbmNlUmVxdWVzdEJvZHk6IGJvZHksXHJcblx0XHRcdFx0XHRHb3Zlcm5hbmNlUmVzcG9uc2VUZXh0OiByZXNwb25zZVRleHQsXHJcblx0XHRcdFx0XHRDYW1wYWlnbklkOiBzdXJ2ZXkuZ2V0Q2FtcGFpZ25JZCgpLFxyXG5cdFx0XHRcdFx0U3VydmV5SWQ6IHN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0SWQoKSxcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHQvLyBQYXJzZSB0aGUgcmVzcG9uc2VcclxuXHRcdFx0Y29uc3QganNvblJlc3BvbnNlOiBJR292ZXJuYW5jZVN1cnZleVJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXNwb25zZVRleHQpO1xyXG5cclxuXHRcdFx0Ly8gUmVwYXJzaW5nIHRoZSBkYXRlIHRvIGNvcnJlY3QgSVNPIGZvcm1hdFxyXG5cdFx0XHRqc29uUmVzcG9uc2UubGFzdFRyaWdnZXJTdXJ2ZXlUaW1lID0gc3RyaW5nVG9EYXRlKG5ldyBEYXRlKGpzb25SZXNwb25zZS5sYXN0VHJpZ2dlclN1cnZleVRpbWUpLnRvSVNPU3RyaW5nKCkpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgdGhlIHJlc3BvbnNlIGludGVncml0eVxyXG5cdFx0XHRpZiAoIWlzTnVtYmVyKGpzb25SZXNwb25zZS50aW1lVW50aWxOZXh0U3VydmV5QWxsb3dlZCkgfHxcclxuXHRcdFx0XHQhaXNEYXRlKGpzb25SZXNwb25zZS5sYXN0VHJpZ2dlclN1cnZleVRpbWUpKSB7XHJcblx0XHRcdFx0Ly8gVGhyb3cgZXJyb3Igd2l0aCB0aGUgcmVzcG9uc2VcclxuXHRcdFx0XHRzZXJ2aWNlUmVzdWx0LmVycm9yTWVzc2FnZSA9IFwiU2VydmljZSBSZXNwb25zZSBpcyBub3QgZm9ybWF0dGVkIGNvcnJlY3RseTogXCIgKyByZXNwb25zZVRleHQ7XHJcblx0XHRcdFx0c2VydmljZVJlc3VsdC5lcnJvciA9IHRydWU7XHJcblx0XHRcdFx0dGhpcy5sYXN0U3VydmV5RmFpbGVkU3luYyA9IHN1cnZleUluZm87XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhpcyBpcyBwZXJtaXR0ZWRcclxuXHRcdFx0XHRpZiAoanNvblJlc3BvbnNlLnRpbWVVbnRpbE5leHRTdXJ2ZXlBbGxvd2VkID09PSAwKSB7XHJcblx0XHRcdFx0XHRzZXJ2aWNlUmVzdWx0LnBlcm1pc3Npb24gPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdC8vIFNldCB0aGUgcGVyc29uYWxpemVyIGRhdGEgZm9yIEF1dG9EaXNtaXNzIHJlY29tbWVuZGF0aW9uIG92ZXJyaWRlIChpZiBlbmFibGVkKVxyXG5cdFx0XHRcdFx0aWYgKHRoaXMucGVyc29uYWxpemVyQ2xpZW50LmlzRW5hYmxlZChzdXJ2ZXkuZ2V0VHlwZSgpLCBzdXJ2ZXkuZ2V0TGF1bmNoZXJUeXBlKCksIHN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0R292ZXJuZWRDaGFubmVsVHlwZSgpKSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBlcnNvbmFsaXplckNsaWVudC5zZXRFdmVudElkQW5kT3ZlcnJpZGVWYWx1ZUZvclN1cnZleUlkKFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZHluYW1pY1RyYW5zcG9ydC5yZXF1ZXN0SWQsXHJcblx0XHRcdFx0XHRcdFx0U3VwcG9ydGVkT3ZlcnJpZGVzLkF1dG9EaXNtaXNzVGltZSxcclxuXHRcdFx0XHRcdFx0XHRqc29uUmVzcG9uc2UuYWN0aW9uSWQsXHJcblx0XHRcdFx0XHRcdFx0c3VydmV5LmdldFN1cnZleUluZm8oKS5nZXRJZCgpLFxyXG5cdFx0XHRcdFx0XHRcdHN1cnZleS5nZXRDYW1wYWlnbklkKCkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gU2F2ZSB0aGUgcmVzcG9uc2UgdHJpZ2dlciB0aW1lXHJcblx0XHRcdFx0c2VydmljZVJlc3VsdC5sYXN0VHJpZ2dlclN1cnZleSA9IGpzb25SZXNwb25zZTtcclxuXHJcblx0XHRcdFx0Ly8gQ2xlYXIgdGhlIGxhc3QgZmFpbHVyZVxyXG5cdFx0XHRcdHRoaXMubGFzdFN1cnZleUZhaWxlZFN5bmMgPSB1bmRlZmluZWQ7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0dGhpcy5sYXN0U3VydmV5RmFpbGVkU3luYyA9IHN1cnZleUluZm87XHJcblx0XHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoTG9nZ2luZy5FdmVudElkcy5HT1ZFUk5BTkNFX1NFUlZJQ0VGQUlMVVJFLFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuRXJyb3IsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0RXJyb3JNZXNzYWdlOiBlLnRvU3RyaW5nKCksXHJcblx0XHRcdFx0XHRBZGRpdGlvbmFsU3VydmV5SW5mbzogdGhpcy5idWlsZENvbmZpZ1RlbGVtZXRyeVN0cmluZygpLFxyXG5cdFx0XHRcdFx0Q29ycmVsYXRpb25JZDogdGhpcy5keW5hbWljVHJhbnNwb3J0LnJlcXVlc3RJZCxcclxuXHRcdFx0XHRcdEh0dHBTdGF0dXNDb2RlOiByZXNwb25zZT8uc3RhdHVzLFxyXG5cdFx0XHRcdFx0SHR0cFN0YXR1c1RleHQ6IHJlc3BvbnNlPy5zdGF0dXNUZXh0LFxyXG5cdFx0XHRcdFx0R292ZXJuYW5jZVJlcXVlc3RCb2R5OiBib2R5LFxyXG5cdFx0XHR9KTtcclxuXHRcdFx0c2VydmljZVJlc3VsdC5lcnJvciA9IHRydWU7XHJcblx0XHRcdHNlcnZpY2VSZXN1bHQuZXJyb3JNZXNzYWdlID0gYEVycm9yOiAke2UudG9TdHJpbmcoKX0sIEVycm9yIHN0YWNrOiAke2Uuc3RhY2t9YDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gc2VydmljZVJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYnVpbGRTdXJ2ZXlJbmZvKHN1cnZleTogQXBpLklTdXJ2ZXksIHN1cnZleUxldmVsQ29vbGRvd246IG51bWJlciwgY2hhbm5lbDogbnVtYmVyKTogSUdvdmVybmFuY2VTdXJ2ZXlJbmZvIHtcclxuXHRcdGNvbnN0IHN0cmluZ1R5cGUgPSBBcGkuSVN1cnZleS5UeXBlW3N1cnZleS5nZXRUeXBlKCldO1xyXG5cdFx0Y29uc3Qgc3VydmV5VHlwZTogbnVtYmVyID0gR292ZXJuYW5jZVNlcnZpY2VTdXJ2ZXlUeXBlW3N0cmluZ1R5cGUgYXMga2V5b2YgdHlwZW9mIEdvdmVybmFuY2VTZXJ2aWNlU3VydmV5VHlwZV07XHJcblx0XHRjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoKTtcclxuXHRcdGNvbnN0IGlzUGVyc29uYWxpemVyRW5hYmxlZCA9IHRoaXMucGVyc29uYWxpemVyQ2xpZW50LmlzRW5hYmxlZChzdXJ2ZXkuZ2V0VHlwZSgpLFxyXG5cdFx0XHRzdXJ2ZXkuZ2V0TGF1bmNoZXJUeXBlKCksXHJcblx0XHRcdHN1cnZleS5nZXRTdXJ2ZXlJbmZvKCkuZ2V0R292ZXJuZWRDaGFubmVsVHlwZSgpKTtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHN1cnZleUlkOiBzdXJ2ZXkuZ2V0Q2FtcGFpZ25JZCgpLFxyXG5cdFx0XHRzdXJ2ZXlUcmlnZ2VyVGltZTogbmV3RGF0ZSxcclxuXHRcdFx0c3VydmV5VHlwZTogc3VydmV5VHlwZSxcclxuXHRcdFx0c3VydmV5TGV2ZWxDb29sZG93bjogc3VydmV5TGV2ZWxDb29sZG93bixcclxuXHRcdFx0c3VydmV5Q2hhbm5lbDogY2hhbm5lbCxcclxuXHRcdFx0bG9jYWxPZmZzZXRUaW1lOiBuZXdEYXRlLmdldFRpbWV6b25lT2Zmc2V0KCksXHJcblx0XHRcdHBlcnNvbmFsaXplckVuYWJsZWQ6IGlzUGVyc29uYWxpemVyRW5hYmxlZCxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGJ1aWxkQm9keVJlcXVlc3Qoc3VydmV5SW5mbzogSUdvdmVybmFuY2VTdXJ2ZXlJbmZvLCB1c2VyTGV2ZWxDb29sZG93bjogbnVtYmVyKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IElHb3Zlcm5hbmNlU3VydmV5UmVxdWVzdCA9IHtcclxuXHRcdFx0dXNlcklkOiB0aGlzLnVzZXJJZCxcclxuXHRcdFx0dXNlckxldmVsQ29vbGRvd246IHVzZXJMZXZlbENvb2xkb3duLFxyXG5cdFx0XHRzdXJ2ZXk6IHN1cnZleUluZm8sXHJcblx0XHRcdGNsaWVudDogdGhpcy5jbGllbnRJbmZvLFxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAodGhpcy5zaW1wbGVSZXF1ZXN0RW5hYmxlZCkge1xyXG5cdFx0XHR0aGlzLmR5bmFtaWNUcmFuc3BvcnQucmVxdWVzdElkID0gZ3VpZCgpO1xyXG5cdFx0XHRyZXN1bHQucmVxdWVzdElkID0gdGhpcy5keW5hbWljVHJhbnNwb3J0LnJlcXVlc3RJZDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYnVpbGRDb25maWdUZWxlbWV0cnlTdHJpbmcoKSB7XHJcblx0XHRjb25zdCBvYmplY3RUZWxlbWV0cnkgPSB7XHJcblx0XHRcdHJldHJ5OiB0aGlzLnJldHJ5TGltaXQsXHJcblx0XHRcdHRpbWVvdXQ6IHRoaXMudGltZW91dCxcclxuXHRcdFx0c2ltcGxlUmVxdWVzdEVuYWJsZWQ6IHRoaXMuc2ltcGxlUmVxdWVzdEVuYWJsZWQsXHJcblx0XHR9O1xyXG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iamVjdFRlbGVtZXRyeSk7XHJcblx0fVxyXG59XHJcblxyXG5jb25zdCBnb3Zlcm5hbmNlU2VydmljZUNsaWVudDogR292ZXJuYW5jZVNlcnZpY2VDbGllbnQgPSBuZXcgR292ZXJuYW5jZVNlcnZpY2VDbGllbnQoKTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIGN1cnJlbnQgR292ZXJuYW5jZSBTZXJ2aWNlIENsaWVudFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldCgpOiBHb3Zlcm5hbmNlU2VydmljZUNsaWVudCB7XHJcblx0cmV0dXJuIGdvdmVybmFuY2VTZXJ2aWNlQ2xpZW50O1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/GovernanceService/GovernanceServiceClient.ts\n')},"./scripts/app/Localization.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validate", function() { return validate; });\n/**\r\n * Localization.ts\r\n *\r\n * Module for Localization\r\n */\r\n/**\r\n * List of supported Locales\r\n * REMINDER: update readme to match the list below if change is made\r\n */\r\nvar supportedLocales = [\r\n    "af",\r\n    "am",\r\n    "ar",\r\n    "as",\r\n    "az",\r\n    "be",\r\n    "bg",\r\n    "bn-BD",\r\n    "bn-IN",\r\n    "bs",\r\n    "ca",\r\n    "ca-Es-VALENCIA",\r\n    "chr-Cher",\r\n    "cs",\r\n    "cy",\r\n    "da",\r\n    "de",\r\n    "el",\r\n    "en-GB",\r\n    "es",\r\n    "es-MX",\r\n    "et",\r\n    "eu",\r\n    "fa",\r\n    "fi",\r\n    "fil",\r\n    "fr",\r\n    "fr-CA",\r\n    "ga",\r\n    "gd",\r\n    "gl",\r\n    "gu",\r\n    "ha-Latn-NG",\r\n    "he",\r\n    "hi",\r\n    "hr",\r\n    "hu",\r\n    "hy",\r\n    "id",\r\n    "is",\r\n    "it",\r\n    "ja",\r\n    "ka",\r\n    "kk",\r\n    "km-KH",\r\n    "kn",\r\n    "ko",\r\n    "kok",\r\n    "ky",\r\n    "lb",\r\n    "lo",\r\n    "lt",\r\n    "lv",\r\n    "mi",\r\n    "mk",\r\n    "ml",\r\n    "mn",\r\n    "mr",\r\n    "ms",\r\n    "mt",\r\n    "nb-NO",\r\n    "ne",\r\n    "nl",\r\n    "nn-NO",\r\n    "or",\r\n    "pa",\r\n    "pl",\r\n    "prs",\r\n    "pt-BR",\r\n    "pt-PT",\r\n    "quz",\r\n    "ro",\r\n    "ru",\r\n    "sd",\r\n    "si",\r\n    "sk",\r\n    "sl",\r\n    "sq",\r\n    "sr-Cyrl-BA",\r\n    "sr-Cyrl-RS",\r\n    "sr-Latn-RS",\r\n    "sv",\r\n    "sw",\r\n    "ta",\r\n    "te",\r\n    "th",\r\n    "tk",\r\n    "tr",\r\n    "tt",\r\n    "ug",\r\n    "uk",\r\n    "ur",\r\n    "uz-Latn-UZ",\r\n    "vi",\r\n    "zh-Hans",\r\n    "zh-Hant",\r\n];\r\nvar localeVariantToSupportedlocaleMap = {\r\n    "ZH-CN": "zh-Hans",\r\n    "ZH-HK": "zh-Hant",\r\n    "ZH-MO": "zh-Hant",\r\n    "ZH-SG": "zh-Hans",\r\n    "ZH-TW": "zh-Hant",\r\n};\r\nfunction validate(locale) {\r\n    var localeUpperCase = locale.toLocaleUpperCase();\r\n    // support for Chinese ll-cc, VSO Bug 1583389\r\n    if (localeUpperCase in localeVariantToSupportedlocaleMap) {\r\n        return localeVariantToSupportedlocaleMap[localeUpperCase];\r\n    }\r\n    // return supported locale if exact match found\r\n    for (var _i = 0, supportedLocales_1 = supportedLocales; _i < supportedLocales_1.length; _i++) {\r\n        var supportedLocale = supportedLocales_1[_i];\r\n        if (supportedLocale.toUpperCase() === localeUpperCase) {\r\n            return supportedLocale;\r\n        }\r\n    }\r\n    var localePartOne = localeUpperCase.split("-")[0];\r\n    // return supported "ll" if exact match not found, but "ll" matches\r\n    for (var _a = 0, supportedLocales_2 = supportedLocales; _a < supportedLocales_2.length; _a++) {\r\n        var supportedLocale = supportedLocales_2[_a];\r\n        if (supportedLocale.toUpperCase() === localePartOne) {\r\n            return supportedLocale;\r\n        }\r\n    }\r\n    // default everything else to en\r\n    return "en";\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Mb2NhbGl6YXRpb24udHM/MmNmNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7Ozs7R0FJRztBQUVIOzs7R0FHRztBQUNILElBQUksZ0JBQWdCLEdBQWE7SUFDaEMsSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLE9BQU87SUFDUCxPQUFPO0lBQ1AsSUFBSTtJQUNKLElBQUk7SUFDSixnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osT0FBTztJQUNQLElBQUk7SUFDSixPQUFPO0lBQ1AsSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLEtBQUs7SUFDTCxJQUFJO0lBQ0osT0FBTztJQUNQLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixZQUFZO0lBQ1osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixPQUFPO0lBQ1AsSUFBSTtJQUNKLElBQUk7SUFDSixLQUFLO0lBQ0wsSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osT0FBTztJQUNQLElBQUk7SUFDSixJQUFJO0lBQ0osT0FBTztJQUNQLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLEtBQUs7SUFDTCxPQUFPO0lBQ1AsT0FBTztJQUNQLEtBQUs7SUFDTCxJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osWUFBWTtJQUNaLFlBQVk7SUFDWixZQUFZO0lBQ1osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLElBQUk7SUFDSixZQUFZO0lBQ1osSUFBSTtJQUNKLFNBQVM7SUFDVCxTQUFTO0NBQ1QsQ0FBQztBQUVGLElBQU0saUNBQWlDLEdBQThCO0lBQ3BFLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE9BQU8sRUFBRSxTQUFTO0NBQ2xCLENBQUM7QUFFSyxTQUFTLFFBQVEsQ0FBQyxNQUFjO0lBQ3RDLElBQUksZUFBZSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBRWpELDZDQUE2QztJQUM3QyxJQUFJLGVBQWUsSUFBSSxpQ0FBaUMsRUFBRTtRQUN6RCxPQUFPLGlDQUFpQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsK0NBQStDO0lBQy9DLEtBQTRCLFVBQWdCLEVBQWhCLHFDQUFnQixFQUFoQiw4QkFBZ0IsRUFBaEIsSUFBZ0IsRUFBRTtRQUF6QyxJQUFJLGVBQWU7UUFDdkIsSUFBSSxlQUFlLENBQUMsV0FBVyxFQUFFLEtBQUssZUFBZSxFQUFFO1lBQ3RELE9BQU8sZUFBZSxDQUFDO1NBQ3ZCO0tBQ0Q7SUFFRCxJQUFJLGFBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELG1FQUFtRTtJQUNuRSxLQUE0QixVQUFnQixFQUFoQixxQ0FBZ0IsRUFBaEIsOEJBQWdCLEVBQWhCLElBQWdCLEVBQUU7UUFBekMsSUFBSSxlQUFlO1FBQ3ZCLElBQUksZUFBZSxDQUFDLFdBQVcsRUFBRSxLQUFLLGFBQWEsRUFBRTtZQUNwRCxPQUFPLGVBQWUsQ0FBQztTQUN2QjtLQUNEO0lBRUQsZ0NBQWdDO0lBQ2hDLE9BQU8sSUFBSSxDQUFDO0FBQ2IsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0xvY2FsaXphdGlvbi50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBMb2NhbGl6YXRpb24udHNcclxuICpcclxuICogTW9kdWxlIGZvciBMb2NhbGl6YXRpb25cclxuICovXHJcblxyXG4vKipcclxuICogTGlzdCBvZiBzdXBwb3J0ZWQgTG9jYWxlc1xyXG4gKiBSRU1JTkRFUjogdXBkYXRlIHJlYWRtZSB0byBtYXRjaCB0aGUgbGlzdCBiZWxvdyBpZiBjaGFuZ2UgaXMgbWFkZVxyXG4gKi9cclxubGV0IHN1cHBvcnRlZExvY2FsZXM6IHN0cmluZ1tdID0gW1xyXG5cdFwiYWZcIixcclxuXHRcImFtXCIsXHJcblx0XCJhclwiLFxyXG5cdFwiYXNcIixcclxuXHRcImF6XCIsXHJcblx0XCJiZVwiLFxyXG5cdFwiYmdcIixcclxuXHRcImJuLUJEXCIsXHJcblx0XCJibi1JTlwiLFxyXG5cdFwiYnNcIixcclxuXHRcImNhXCIsXHJcblx0XCJjYS1Fcy1WQUxFTkNJQVwiLFxyXG5cdFwiY2hyLUNoZXJcIixcclxuXHRcImNzXCIsXHJcblx0XCJjeVwiLFxyXG5cdFwiZGFcIixcclxuXHRcImRlXCIsXHJcblx0XCJlbFwiLFxyXG5cdFwiZW4tR0JcIixcclxuXHRcImVzXCIsXHJcblx0XCJlcy1NWFwiLFxyXG5cdFwiZXRcIixcclxuXHRcImV1XCIsXHJcblx0XCJmYVwiLFxyXG5cdFwiZmlcIixcclxuXHRcImZpbFwiLFxyXG5cdFwiZnJcIixcclxuXHRcImZyLUNBXCIsXHJcblx0XCJnYVwiLFxyXG5cdFwiZ2RcIixcclxuXHRcImdsXCIsXHJcblx0XCJndVwiLFxyXG5cdFwiaGEtTGF0bi1OR1wiLFxyXG5cdFwiaGVcIixcclxuXHRcImhpXCIsXHJcblx0XCJoclwiLFxyXG5cdFwiaHVcIixcclxuXHRcImh5XCIsXHJcblx0XCJpZFwiLFxyXG5cdFwiaXNcIixcclxuXHRcIml0XCIsXHJcblx0XCJqYVwiLFxyXG5cdFwia2FcIixcclxuXHRcImtrXCIsXHJcblx0XCJrbS1LSFwiLFxyXG5cdFwia25cIixcclxuXHRcImtvXCIsXHJcblx0XCJrb2tcIixcclxuXHRcImt5XCIsXHJcblx0XCJsYlwiLFxyXG5cdFwibG9cIixcclxuXHRcImx0XCIsXHJcblx0XCJsdlwiLFxyXG5cdFwibWlcIixcclxuXHRcIm1rXCIsXHJcblx0XCJtbFwiLFxyXG5cdFwibW5cIixcclxuXHRcIm1yXCIsXHJcblx0XCJtc1wiLFxyXG5cdFwibXRcIixcclxuXHRcIm5iLU5PXCIsXHJcblx0XCJuZVwiLFxyXG5cdFwibmxcIixcclxuXHRcIm5uLU5PXCIsXHJcblx0XCJvclwiLFxyXG5cdFwicGFcIixcclxuXHRcInBsXCIsXHJcblx0XCJwcnNcIixcclxuXHRcInB0LUJSXCIsXHJcblx0XCJwdC1QVFwiLFxyXG5cdFwicXV6XCIsXHJcblx0XCJyb1wiLFxyXG5cdFwicnVcIixcclxuXHRcInNkXCIsXHJcblx0XCJzaVwiLFxyXG5cdFwic2tcIixcclxuXHRcInNsXCIsXHJcblx0XCJzcVwiLFxyXG5cdFwic3ItQ3lybC1CQVwiLFxyXG5cdFwic3ItQ3lybC1SU1wiLFxyXG5cdFwic3ItTGF0bi1SU1wiLFxyXG5cdFwic3ZcIixcclxuXHRcInN3XCIsXHJcblx0XCJ0YVwiLFxyXG5cdFwidGVcIixcclxuXHRcInRoXCIsXHJcblx0XCJ0a1wiLFxyXG5cdFwidHJcIixcclxuXHRcInR0XCIsXHJcblx0XCJ1Z1wiLFxyXG5cdFwidWtcIixcclxuXHRcInVyXCIsXHJcblx0XCJ1ei1MYXRuLVVaXCIsXHJcblx0XCJ2aVwiLFxyXG5cdFwiemgtSGFuc1wiLFxyXG5cdFwiemgtSGFudFwiLFxyXG5dO1xyXG5cclxuY29uc3QgbG9jYWxlVmFyaWFudFRvU3VwcG9ydGVkbG9jYWxlTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG5cdFwiWkgtQ05cIjogXCJ6aC1IYW5zXCIsXHJcblx0XCJaSC1IS1wiOiBcInpoLUhhbnRcIixcclxuXHRcIlpILU1PXCI6IFwiemgtSGFudFwiLFxyXG5cdFwiWkgtU0dcIjogXCJ6aC1IYW5zXCIsXHJcblx0XCJaSC1UV1wiOiBcInpoLUhhbnRcIixcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZShsb2NhbGU6IHN0cmluZyk6IHN0cmluZyB7XHJcblx0bGV0IGxvY2FsZVVwcGVyQ2FzZSA9IGxvY2FsZS50b0xvY2FsZVVwcGVyQ2FzZSgpO1xyXG5cclxuXHQvLyBzdXBwb3J0IGZvciBDaGluZXNlIGxsLWNjLCBWU08gQnVnIDE1ODMzODlcclxuXHRpZiAobG9jYWxlVXBwZXJDYXNlIGluIGxvY2FsZVZhcmlhbnRUb1N1cHBvcnRlZGxvY2FsZU1hcCkge1xyXG5cdFx0cmV0dXJuIGxvY2FsZVZhcmlhbnRUb1N1cHBvcnRlZGxvY2FsZU1hcFtsb2NhbGVVcHBlckNhc2VdO1xyXG5cdH1cclxuXHJcblx0Ly8gcmV0dXJuIHN1cHBvcnRlZCBsb2NhbGUgaWYgZXhhY3QgbWF0Y2ggZm91bmRcclxuXHRmb3IgKGxldCBzdXBwb3J0ZWRMb2NhbGUgb2Ygc3VwcG9ydGVkTG9jYWxlcykge1xyXG5cdFx0aWYgKHN1cHBvcnRlZExvY2FsZS50b1VwcGVyQ2FzZSgpID09PSBsb2NhbGVVcHBlckNhc2UpIHtcclxuXHRcdFx0cmV0dXJuIHN1cHBvcnRlZExvY2FsZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGxldCBsb2NhbGVQYXJ0T25lID0gbG9jYWxlVXBwZXJDYXNlLnNwbGl0KFwiLVwiKVswXTtcclxuXHQvLyByZXR1cm4gc3VwcG9ydGVkIFwibGxcIiBpZiBleGFjdCBtYXRjaCBub3QgZm91bmQsIGJ1dCBcImxsXCIgbWF0Y2hlc1xyXG5cdGZvciAobGV0IHN1cHBvcnRlZExvY2FsZSBvZiBzdXBwb3J0ZWRMb2NhbGVzKSB7XHJcblx0XHRpZiAoc3VwcG9ydGVkTG9jYWxlLnRvVXBwZXJDYXNlKCkgPT09IGxvY2FsZVBhcnRPbmUpIHtcclxuXHRcdFx0cmV0dXJuIHN1cHBvcnRlZExvY2FsZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIGRlZmF1bHQgZXZlcnl0aGluZyBlbHNlIHRvIGVuXHJcblx0cmV0dXJuIFwiZW5cIjtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Localization.ts\n')},"./scripts/app/Logging/Constants.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventIds", function() { return EventIds; });\n/**\r\n * Constants.ts\r\n *\r\n * Module to hold logging-related constants\r\n */\r\nvar EventIds = /** @class */ (function () {\r\n    function EventIds() {\r\n    }\r\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20;\r\n    EventIds.InApp = (_a = /** @class */ (function () {\r\n            function class_1() {\r\n            }\r\n            return class_1;\r\n        }()),\r\n        _a.UI = (_b = /** @class */ (function () {\r\n                function class_2() {\r\n                }\r\n                return class_2;\r\n            }()),\r\n            _b.Picker = (_c = /** @class */ (function () {\r\n                    function class_3() {\r\n                    }\r\n                    return class_3;\r\n                }()),\r\n                _c.Shown = (_d = /** @class */ (function () {\r\n                        function class_4() {\r\n                        }\r\n                        return class_4;\r\n                    }()),\r\n                    _d.VALUE = { name: "InApp_UI_Picker_Shown" },\r\n                    _d),\r\n                _c),\r\n            _b.Form = (_e = /** @class */ (function () {\r\n                    function class_5() {\r\n                    }\r\n                    return class_5;\r\n                }()),\r\n                _e.Shown = (_f = /** @class */ (function () {\r\n                        function class_6() {\r\n                        }\r\n                        return class_6;\r\n                    }()),\r\n                    _f.VALUE = { name: "InApp_UI_Form_Shown" },\r\n                    _f),\r\n                _e.Submit = (_g = /** @class */ (function () {\r\n                        function class_7() {\r\n                        }\r\n                        return class_7;\r\n                    }()),\r\n                    _g.VALUE = { name: "InApp_UI_Form_Submit" },\r\n                    _g),\r\n                _e),\r\n            _b),\r\n        _a);\r\n    // This saves ~400 bytes (minified) vs nested classes\r\n    EventIds.SURVEY_FLOODGATE_CAMPAIGNLOAD_FAILED = { name: "Survey_Floodgate_CampaignLoad_Failed" };\r\n    EventIds.SURVEY_FLOODGATE_FILEREAD_FAILED = { name: "Survey_Floodgate_FileRead_Failed" };\r\n    EventIds.SURVEY_FLOODGATE_FILEWRITE_FAILED = { name: "Survey_Floodgate_FileWrite_Failed" };\r\n    EventIds.SURVEY_FLOODGATE_TRIGGERMET = { name: "Survey_Floodgate_TriggerMet" };\r\n    EventIds.SURVEY_FLOODGATE_USERSELECTED = { name: "Survey_Floodgate_UserSelected" };\r\n    EventIds.SURVEY_UI_FORM_SHOWN = { name: "Survey_UI_Form_Shown" };\r\n    EventIds.SURVEY_UI_FORM_DISPATCHER_IMPLEMENTED = { name: "Survey_UI_Form_Dispatcher_Implemented" };\r\n    EventIds.SURVEY_UI_FORM_SUBMIT = { name: "Survey_UI_Form_Submit" };\r\n    EventIds.SURVEY_UI_FORM_SECONDARY_SUBMIT = { name: "Survey_UI_Form_Secondary_Submit" };\r\n    EventIds.SURVEY_UI_FORM_SUBMIT_ERROR = { name: "Survey_UI_Form_Submit_Error" };\r\n    EventIds.SURVEY_UI_FORM_USERCLOSED = { name: "Survey_UI_Form_UserClosed" };\r\n    EventIds.SURVEY_UI_THANKYOUPAGE_USERCLOSED = { name: "Survey_UI_ThankYouPage_UserClosed" };\r\n    EventIds.SURVEY_UI_FORM_NO_RETURN_TYPE = { name: "Survey_UI_Form_No_Return_Type" };\r\n    EventIds.SURVEY_UI_PROMPT_AUTODISMISSED = { name: "Survey_UI_Prompt_AutoDismissed" };\r\n    EventIds.SURVEY_UI_THANKYOUPAGE_AUTODISMISSED = { name: "Survey_UI_ThankYouPage_AutoDismissed" };\r\n    EventIds.SURVEY_UI_PROMPT_SHOWN = { name: "Survey_UI_Prompt_Shown" };\r\n    EventIds.SURVEY_UI_PROMPT_USERCLOSED = { name: "Survey_UI_Prompt_UserClosed" };\r\n    EventIds.SURVEY_UI_ADDITIONALPROMPT_USERCLOSED = { name: "Survey_UI_AdditionalPrompt_UserClosed" };\r\n    EventIds.SURVEY_UI_PROMPT_CLICKED = { name: "Survey_UI_Prompt_Clicked" };\r\n    EventIds.SURVEY_UI_ADDITIONALPROMPT_CLICKED = { name: "Survey_UI_AdditionalPrompt_Clicked" };\r\n    EventIds.SURVEY_UI_REDIRECTIONFAILURE = { name: "Survey_UI_RedirectionFailure" };\r\n    EventIds.GOVERNANCE_SERVICEFAILURE = { name: "Gorvenance_ServiceFailure" };\r\n    EventIds.GOVERNANCE_SERVICERESULT = { name: "Gorvenance_ServiceResult" };\r\n    EventIds.DYNAMICTRANSPORT_POST_ERROR = { name: "DynamicTransport_Post_Error" };\r\n    EventIds.FEEDBACK_SURVEYSDISABLED_AADC = { name: "Feedback_SurveysDisabled_AADC" };\r\n    EventIds.SURVEY_UI_DISABLED_AADC = { name: "Survey_UI_Prevented_AADC" };\r\n    EventIds.PERSONALIZER_SERVICEREWARDRESULT = { name: "Personalizer_ServiceRewardResult" };\r\n    EventIds.PERSONALIZER_CLIENTFAILURE = { name: "Personalizer_ClientFailure" };\r\n    EventIds.APPDATA_JSON_PARSE_ERROR = { name: "AppData_JSON_Parse_Error" };\r\n    EventIds.SURVEY_RENDER_OVERRIDE_ERROR = { name: "Survey_Render_Override_Error" };\r\n    EventIds.SURVEY_RENDER_OVERRIDE_SUCCESS = { name: "Survey_Render_Override_Success" };\r\n    EventIds.SURVEY_EVENT_KEY_ERROR = { name: "Survey_Event_Key_Error" };\r\n    EventIds.Shared = (_h = /** @class */ (function () {\r\n            function class_8() {\r\n            }\r\n            return class_8;\r\n        }()),\r\n        _h.Upload = (_j = /** @class */ (function () {\r\n                function class_9() {\r\n                }\r\n                return class_9;\r\n            }()),\r\n            _j.Failed = (_k = /** @class */ (function () {\r\n                    function class_10() {\r\n                    }\r\n                    return class_10;\r\n                }()),\r\n                _k.VALUE = { name: "Shared_Upload_Failed" },\r\n                _k),\r\n            _j.Prevented = (_l = /** @class */ (function () {\r\n                    function class_11() {\r\n                    }\r\n                    return class_11;\r\n                }()),\r\n                _l.VALUE = { name: "Shared_Upload_Prevented_AADC" },\r\n                _l),\r\n            _j),\r\n        _h.Screenshot = (_m = /** @class */ (function () {\r\n                function class_12() {\r\n                }\r\n                return class_12;\r\n            }()),\r\n            _m.Render = (_o = /** @class */ (function () {\r\n                    function class_13() {\r\n                    }\r\n                    return class_13;\r\n                }()),\r\n                _o.Failed = (_p = /** @class */ (function () {\r\n                        function class_14() {\r\n                        }\r\n                        return class_14;\r\n                    }()),\r\n                    _p.VALUE = { name: "Shared_Screenshot_Render_Failed" },\r\n                    _p),\r\n                _o.Success = (_q = /** @class */ (function () {\r\n                        function class_15() {\r\n                        }\r\n                        return class_15;\r\n                    }()),\r\n                    _q.VALUE = { name: "Shared_Screenshot_Render_Success" },\r\n                    _q),\r\n                _o),\r\n            _m.GetContent = (_r = /** @class */ (function () {\r\n                    function class_16() {\r\n                    }\r\n                    return class_16;\r\n                }()),\r\n                _r.Failed = (_s = /** @class */ (function () {\r\n                        function class_17() {\r\n                        }\r\n                        return class_17;\r\n                    }()),\r\n                    _s.DefaultImage = (_t = /** @class */ (function () {\r\n                            function class_18() {\r\n                            }\r\n                            return class_18;\r\n                        }()),\r\n                        _t.Returned = (_u = /** @class */ (function () {\r\n                                function class_19() {\r\n                                }\r\n                                return class_19;\r\n                            }()),\r\n                            _u.VALUE = { name: "Shared_Screenshot_GetContent_Failed_DefaultImage_Returned" },\r\n                            _u),\r\n                        _t),\r\n                    _s),\r\n                _r),\r\n            _m),\r\n        _h);\r\n    EventIds.WebSurfaces = (_v = /** @class */ (function () {\r\n            function class_20() {\r\n            }\r\n            return class_20;\r\n        }()),\r\n        _v.Common = (_w = /** @class */ (function () {\r\n                function class_21() {\r\n                }\r\n                return class_21;\r\n            }()),\r\n            _w.Error = (_x = /** @class */ (function () {\r\n                    function class_22() {\r\n                    }\r\n                    return class_22;\r\n                }()),\r\n                _x.VALUE = { name: "WebSurfaces_Common_Error" },\r\n                _x),\r\n            _w.Info = (_y = /** @class */ (function () {\r\n                    function class_23() {\r\n                    }\r\n                    return class_23;\r\n                }()),\r\n                _y.VALUE = { name: "WebSurfaces_Common_Info" },\r\n                _y),\r\n            _w),\r\n        _v.CampaignMetadataAggregator = (_z = /** @class */ (function () {\r\n                function class_24() {\r\n                }\r\n                return class_24;\r\n            }()),\r\n            _z.Error = (_0 = /** @class */ (function () {\r\n                    function class_25() {\r\n                    }\r\n                    return class_25;\r\n                }()),\r\n                _0.VALUE = { name: "WebSurfaces_CampaignMetadataAggregator_Error" },\r\n                _0),\r\n            _z.Requests = (_1 = /** @class */ (function () {\r\n                    function class_26() {\r\n                    }\r\n                    return class_26;\r\n                }()),\r\n                _1.VALUE = { name: "WebSurfaces_CampaignMetadataAggregator_Requests" },\r\n                _1),\r\n            _z),\r\n        _v.SetCampaignAction = (_2 = /** @class */ (function () {\r\n                function class_27() {\r\n                }\r\n                return class_27;\r\n            }()),\r\n            _2.Error = (_3 = /** @class */ (function () {\r\n                    function class_28() {\r\n                    }\r\n                    return class_28;\r\n                }()),\r\n                _3.VALUE = { name: "WebSurfaces_SetCampaignAction_Error" },\r\n                _3),\r\n            _2.Requests = (_4 = /** @class */ (function () {\r\n                    function class_29() {\r\n                    }\r\n                    return class_29;\r\n                }()),\r\n                _4.VALUE = { name: "WebSurfaces_SetCampaignAction_Requests" },\r\n                _4),\r\n            _2),\r\n        _v);\r\n    EventIds.UserFacts = (_5 = /** @class */ (function () {\r\n            function class_30() {\r\n            }\r\n            return class_30;\r\n        }()),\r\n        _5.Common = (_6 = /** @class */ (function () {\r\n                function class_31() {\r\n                }\r\n                return class_31;\r\n            }()),\r\n            _6.Error = (_7 = /** @class */ (function () {\r\n                    function class_32() {\r\n                    }\r\n                    return class_32;\r\n                }()),\r\n                _7.VALUE = { name: "UserFacts_Common_Error" },\r\n                _7),\r\n            _6.Info = (_8 = /** @class */ (function () {\r\n                    function class_33() {\r\n                    }\r\n                    return class_33;\r\n                }()),\r\n                _8.VALUE = { name: "UserFacts_Common_Info" },\r\n                _8),\r\n            _6),\r\n        _5.LocalFact = (_9 = /** @class */ (function () {\r\n                function class_34() {\r\n                }\r\n                return class_34;\r\n            }()),\r\n            _9.Error = (_10 = /** @class */ (function () {\r\n                    function class_35() {\r\n                    }\r\n                    return class_35;\r\n                }()),\r\n                _10.VALUE = { name: "UserFacts_LocalFact_Error" },\r\n                _10),\r\n            _9),\r\n        _5.Messaging = (_11 = /** @class */ (function () {\r\n                function class_36() {\r\n                }\r\n                return class_36;\r\n            }()),\r\n            _11.Requests = (_12 = /** @class */ (function () {\r\n                    function class_37() {\r\n                    }\r\n                    return class_37;\r\n                }()),\r\n                _12.VALUE = { name: "UserFacts_Messaging_Requests" },\r\n                _12),\r\n            _11),\r\n        _5.AugLoop = (_13 = /** @class */ (function () {\r\n                function class_38() {\r\n                }\r\n                return class_38;\r\n            }()),\r\n            _13.Requests = (_14 = /** @class */ (function () {\r\n                    function class_39() {\r\n                    }\r\n                    return class_39;\r\n                }()),\r\n                _14.VALUE = { name: "UserFacts_AugLoop_Requests" },\r\n                _14),\r\n            _13.Error = (_15 = /** @class */ (function () {\r\n                    function class_40() {\r\n                    }\r\n                    return class_40;\r\n                }()),\r\n                _15.VALUE = { name: "UserFacts_AugLoop_Error" },\r\n                _15),\r\n            _13),\r\n        _5.Provider = (_16 = /** @class */ (function () {\r\n                function class_41() {\r\n                }\r\n                return class_41;\r\n            }()),\r\n            _16.Info = (_17 = /** @class */ (function () {\r\n                    function class_42() {\r\n                    }\r\n                    return class_42;\r\n                }()),\r\n                _17.VALUE = { name: "UserFacts_Provider_Summary" },\r\n                _17),\r\n            _16),\r\n        _5);\r\n    EventIds.Common = (_18 = /** @class */ (function () {\r\n            function class_43() {\r\n            }\r\n            return class_43;\r\n        }()),\r\n        _18.Error = (_19 = /** @class */ (function () {\r\n                function class_44() {\r\n                }\r\n                return class_44;\r\n            }()),\r\n            _19.VALUE = { name: "Common_Error" },\r\n            _19),\r\n        _18.Info = (_20 = /** @class */ (function () {\r\n                function class_45() {\r\n                }\r\n                return class_45;\r\n            }()),\r\n            _20.VALUE = { name: "Common_Info" },\r\n            _20),\r\n        _18);\r\n    return EventIds;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Mb2dnaW5nL0NvbnN0YW50cy50cz9hZmEwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBMENIO0lBQUE7SUFpS0EsQ0FBQzs7SUFoS2MsY0FBSztZQUFHO1lBa0J0QixDQUFDO1lBQUQsY0FBQztRQUFELENBQUM7UUFqQmMsS0FBRTtnQkFBRztnQkFnQm5CLENBQUM7Z0JBQUQsY0FBQztZQUFELENBQUM7WUFmYyxTQUFNO29CQUFHO29CQUl2QixDQUFDO29CQUFELGNBQUM7Z0JBQUQsQ0FBQztnQkFIYyxRQUFLO3dCQUFHO3dCQUV0QixDQUFDO3dCQUFELGNBQUM7b0JBQUQsQ0FBQztvQkFEYyxRQUFLLEdBQWEsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUc7dUJBQ2pFO21CQUNEO1lBRVksT0FBSTtvQkFBRztvQkFRckIsQ0FBQztvQkFBRCxjQUFDO2dCQUFELENBQUM7Z0JBUGMsUUFBSzt3QkFBRzt3QkFFdEIsQ0FBQzt3QkFBRCxjQUFDO29CQUFELENBQUM7b0JBRGMsUUFBSyxHQUFhLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFHO3VCQUMvRDtnQkFFWSxTQUFNO3dCQUFHO3dCQUV2QixDQUFDO3dCQUFELGNBQUM7b0JBQUQsQ0FBQztvQkFEYyxRQUFLLEdBQWEsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUc7dUJBQ2hFO21CQUNEO2VBQ0Q7WUFDRDtJQUVGLHFEQUFxRDtJQUN2Qyw2Q0FBb0MsR0FBYSxFQUFFLElBQUksRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO0lBQ2xHLHlDQUFnQyxHQUFhLEVBQUUsSUFBSSxFQUFFLGtDQUFrQyxFQUFFLENBQUM7SUFDMUYsMENBQWlDLEdBQWEsRUFBRSxJQUFJLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQztJQUM1RixvQ0FBMkIsR0FBYSxFQUFFLElBQUksRUFBRSw2QkFBNkIsRUFBRSxDQUFDO0lBQ2hGLHNDQUE2QixHQUFh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QztZQUhjLFlBQVE7b0JBQUc7b0JBRXpCLENBQUM7b0JBQUQsZUFBQztnQkFBRCxDQUFDO2dCQURjLFNBQUssR0FBYSxFQUFFLElBQUksRUFBRSw4QkFBOEIsRUFBRztvQkFDeEU7Z0JBQ0Q7UUFFWSxVQUFPO2dCQUFHO2dCQU94QixDQUFDO2dCQUFELGVBQUM7WUFBRCxDQUFDO1lBTmMsWUFBUTtvQkFBRztvQkFFekIsQ0FBQztvQkFBRCxlQUFDO2dCQUFELENBQUM7Z0JBRGMsU0FBSyxHQUFhLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFHO29CQUN0RTtZQUNZLFNBQUs7b0JBQUc7b0JBRXRCLENBQUM7b0JBQUQsZUFBQztnQkFBRCxDQUFDO2dCQURjLFNBQUssR0FBYSxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRztvQkFDbkU7Z0JBQ0Q7UUFFWSxXQUFRO2dCQUFHO2dCQUl6QixDQUFDO2dCQUFELGVBQUM7WUFBRCxDQUFDO1lBSGMsUUFBSTtvQkFBRztvQkFFckIsQ0FBQztvQkFBRCxlQUFDO2dCQUFELENBQUM7Z0JBRGMsU0FBSyxHQUFhLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFHO29CQUN0RTtnQkFDRDtZQUNEO0lBRVksZUFBTTtZQUFHO1lBT3ZCLENBQUM7WUFBRCxlQUFDO1FBQUQsQ0FBQztRQU5jLFNBQUs7Z0JBQUc7Z0JBRXRCLENBQUM7Z0JBQUQsZUFBQztZQUFELENBQUM7WUFEYyxTQUFLLEdBQWEsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFHO2dCQUN4RDtRQUNZLFFBQUk7Z0JBQUc7Z0JBRXJCLENBQUM7Z0JBQUQsZUFBQztZQUFELENBQUM7WUFEYyxTQUFLLEdBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFHO2dCQUN2RDthQUNEO0lBQ0gsZUFBQztDQUFBO0FBaktvQiIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0xvZ2dpbmcvQ29uc3RhbnRzLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbnN0YW50cy50c1xyXG4gKlxyXG4gKiBNb2R1bGUgdG8gaG9sZCBsb2dnaW5nLXJlbGF0ZWQgY29uc3RhbnRzXHJcbiAqL1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ3VzdG9tUHJvcGVydGllcyB7XHJcblx0Q2FtcGFpZ25JZD86IHN0cmluZztcclxuXHRDb3JyZWxhdGlvbklkPzogc3RyaW5nO1xyXG5cdENvdW50PzogbnVtYmVyO1xyXG5cdERhdGE/OiBzdHJpbmc7XHJcblx0RXJyb3JNZXNzYWdlPzogc3RyaW5nO1xyXG5cdEZlZWRiYWNrVHlwZT86IG51bWJlcjtcclxuXHRQYW5lbFR5cGU/OiBudW1iZXI7XHJcblx0RmlsZU5hbWU/OiBzdHJpbmc7XHJcblx0RmxpZ2h0cz86IHN0cmluZztcclxuXHRIdHRwU3RhdHVzQ29kZT86IG51bWJlcjtcclxuXHRIdHRwU3RhdHVzVGV4dD86IHN0cmluZztcclxuXHRJc0J1Z0VuYWJsZWQ/OiBib29sZWFuO1xyXG5cdElzRGlhZ25vc3RpY3NJbmNsdWRlZD86IGJvb2xlYW47XHJcblx0SXNFbWFpbEluY2x1ZGVkPzogYm9vbGVhbjtcclxuXHRJc0VtYWlsUG9saWN5RW5hYmxlZD86IGJvb2xlYW47XHJcblx0SXNJZGVhRW5hYmxlZD86IGJvb2xlYW47XHJcblx0SXNTY3JlZW5zaG90SW5jbHVkZWQ/OiBib29sZWFuO1xyXG5cdE1lc3NhZ2U/OiBzdHJpbmc7XHJcblx0U2Vzc2lvbklkPzogc3RyaW5nO1xyXG5cdFN1cnZleUlkPzogc3RyaW5nO1xyXG5cdFN1cnZleVR5cGU/OiBudW1iZXI7XHJcblx0VGltZU1pbGxpc2Vjb25kcz86IG51bWJlcjtcclxuXHRUeXBlPzogc3RyaW5nO1xyXG5cdENsaWVudEZlZWRiYWNrSWQ/OiBzdHJpbmc7XHJcblx0UHJvbXB0QXV0b0Rpc21pc3M/OiBzdHJpbmc7XHJcblx0QWRkaXRpb25hbFN1cnZleUluZm8/OiBzdHJpbmc7XHJcblx0U3VydmV5QWN0aXZpdHlJbmZvPzogc3RyaW5nO1xyXG5cdFBlcnNvbmFsaXplclVzZXJBY3Rpb24/OiBudW1iZXI7XHJcblx0UGVyc29uYWxpemVyRXZlbnRJZD86IHN0cmluZztcclxuXHRHb3Zlcm5hbmNlUmVxdWVzdEJvZHk/OiBzdHJpbmc7XHJcblx0R292ZXJuYW5jZVJlc3BvbnNlVGV4dD86IHN0cmluZztcclxuXHRBY3R1YWxTZXRBdXRvRGlzbWlzc1ZhbHVlPzogbnVtYmVyO1xyXG5cdENWRm9ybUlkPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudElkIHtcclxuXHRuYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFdmVudElkcyB7XHJcblx0cHVibGljIHN0YXRpYyBJbkFwcCA9IGNsYXNzIHtcclxuXHRcdHB1YmxpYyBzdGF0aWMgVUkgPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgUGlja2VyID0gY2xhc3Mge1xyXG5cdFx0XHRcdHB1YmxpYyBzdGF0aWMgU2hvd24gPSBjbGFzcyB7XHJcblx0XHRcdFx0XHRwdWJsaWMgc3RhdGljIFZBTFVFOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJJbkFwcF9VSV9QaWNrZXJfU2hvd25cIiB9O1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRwdWJsaWMgc3RhdGljIEZvcm0gPSBjbGFzcyB7XHJcblx0XHRcdFx0cHVibGljIHN0YXRpYyBTaG93biA9IGNsYXNzIHtcclxuXHRcdFx0XHRcdHB1YmxpYyBzdGF0aWMgVkFMVUU6IElFdmVudElkID0geyBuYW1lOiBcIkluQXBwX1VJX0Zvcm1fU2hvd25cIiB9O1xyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdHB1YmxpYyBzdGF0aWMgU3VibWl0ID0gY2xhc3Mge1xyXG5cdFx0XHRcdFx0cHVibGljIHN0YXRpYyBWQUxVRTogSUV2ZW50SWQgPSB7IG5hbWU6IFwiSW5BcHBfVUlfRm9ybV9TdWJtaXRcIiB9O1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cdH07XHJcblxyXG5cdC8vIFRoaXMgc2F2ZXMgfjQwMCBieXRlcyAobWluaWZpZWQpIHZzIG5lc3RlZCBjbGFzc2VzXHJcblx0cHVibGljIHN0YXRpYyBTVVJWRVlfRkxPT0RHQVRFX0NBTVBBSUdOTE9BRF9GQUlMRUQ6IElFdmVudElkID0geyBuYW1lOiBcIlN1cnZleV9GbG9vZGdhdGVfQ2FtcGFpZ25Mb2FkX0ZhaWxlZFwiIH07XHJcblx0cHVibGljIHN0YXRpYyBTVVJWRVlfRkxPT0RHQVRFX0ZJTEVSRUFEX0ZBSUxFRDogSUV2ZW50SWQgPSB7IG5hbWU6IFwiU3VydmV5X0Zsb29kZ2F0ZV9GaWxlUmVhZF9GYWlsZWRcIiB9O1xyXG5cdHB1YmxpYyBzdGF0aWMgU1VSVkVZX0ZMT09ER0FURV9GSUxFV1JJVEVfRkFJTEVEOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJTdXJ2ZXlfRmxvb2RnYXRlX0ZpbGVXcml0ZV9GYWlsZWRcIiB9O1xyXG5cdHB1YmxpYyBzdGF0aWMgU1VSVkVZX0ZMT09ER0FURV9UUklHR0VSTUVUOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJTdXJ2ZXlfRmxvb2RnYXRlX1RyaWdnZXJNZXRcIiB9O1xyXG5cdHB1YmxpYyBzdGF0aWMgU1VSVkVZX0ZMT09ER0FURV9VU0VSU0VMRUNURUQ6IElFdmVudElkID0geyBuYW1lOiBcIlN1cnZleV9GbG9vZGdhdGVfVXNlclNlbGVjdGVkXCIgfTtcclxuXHRwdWJsaWMgc3RhdGljIFNVUlZFWV9VSV9GT1JNX1NIT1dOOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJTdXJ2ZXlfVUlfRm9ybV9TaG93blwiIH07XHJcblx0cHVibGljIHN0YXRpYyBTVVJWRVlfVUlfRk9STV9ESVNQQVRDSEVSX0lNUExFTUVOVEVEOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJTdXJ2ZXlfVUlfRm9ybV9EaXNwYXRjaGVyX0ltcGxlbWVudGVkXCIgfTtcclxuXHRwdWJsaWMgc3RhdGljIFNVUlZFWV9VSV9GT1JNX1NVQk1JVDogSUV2ZW50SWQgPSB7IG5hbWU6IFwiU3VydmV5X1VJX0Zvcm1fU3VibWl0XCIgfTtcclxuXHRwdWJsaWMgc3RhdGljIFNVUlZFWV9VSV9GT1JNX1NFQ09OREFSWV9TVUJNSVQ6IElFdmVudElkID0geyBuYW1lOiBcIlN1cnZleV9VSV9Gb3JtX1NlY29uZGFyeV9TdWJtaXRcIiB9O1xyXG5cdHB1YmxpYyBzdGF0aWMgU1VSVkVZX1VJX0ZPUk1fU1VCTUlUX0VSUk9SOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJTdXJ2ZXlfVUlfRm9ybV9TdWJtaXRfRXJyb3JcIiB9O1xyXG5cdHB1YmxpYyBzdGF0aWMgU1VSVkVZX1VJX0ZPUk1fVVNFUkNMT1NFRDogSUV2ZW50SWQgPSB7IG5hbWU6IFwiU3VydmV5X1VJX0Zvcm1fVXNlckNsb3NlZFwiIH07XHJcblx0cHVibGljIHN0YXRpYyBTVVJWRVlfVUlfVEhBTktZT1VQQUdFX1VTRVJDTE9TRUQ6IElFdmVudElkID0geyBuYW1lOiBcIlN1cnZleV9VSV9UaGFua1lvdVBhZ2VfVXNlckNsb3NlZFwiIH07XHJcblx0cHVibGljIHN0YXRpYyBTVVJWRVlfVUlfRk9STV9OT19SRVRVUk5fVFlQRTogSUV2ZW50SWQgPSB7IG5hbWU6IFwiU3VydmV5X1VJX0Zvcm1fTm9fUmV0dXJuX1R5cGVcIn07XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgU1VSVkVZX1VJX1BST01QVF9BVVRPRElTTUlTU0VEOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJTdXJ2ZXlfVUlfUHJvbXB0X0F1dG9EaXNtaXNzZWRcIiB9O1xyXG5cdHB1YmxpYyBzdGF0aWMgU1VSVkVZX1VJX1RIQU5LWU9VUEFHRV9BVVRPRElTTUlTU0VEOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJTdXJ2ZXlfVUlfVGhhbmtZb3VQYWdlX0F1dG9EaXNtaXNzZWRcIiB9O1xyXG5cdHB1YmxpYyBzdGF0aWMgU1VSVkVZX1VJX1BST01QVF9TSE9XTjogSUV2ZW50SWQgPSB7IG5hbWU6IFwiU3VydmV5X1VJX1Byb21wdF9TaG93blwiIH07XHJcblx0cHVibGljIHN0YXRpYyBTVVJWRVlfVUlfUFJPTVBUX1VTRVJDTE9TRUQ6IElFdmVudElkID0geyBuYW1lOiBcIlN1cnZleV9VSV9Qcm9tcHRfVXNlckNsb3NlZFwiIH07XHJcblx0cHVibGljIHN0YXRpYyBTVVJWRVlfVUlfQURESVRJT05BTFBST01QVF9VU0VSQ0xPU0VEOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJTdXJ2ZXlfVUlfQWRkaXRpb25hbFByb21wdF9Vc2VyQ2xvc2VkXCIgfTtcclxuXHRwdWJsaWMgc3RhdGljIFNVUlZFWV9VSV9QUk9NUFRfQ0xJQ0tFRDogSUV2ZW50SWQgPSB7IG5hbWU6IFwiU3VydmV5X1VJX1Byb21wdF9DbGlja2VkXCIgfTtcclxuXHRwdWJsaWMgc3RhdGljIFNVUlZFWV9VSV9BRERJVElPTkFMUFJPTVBUX0NMSUNLRUQ6IElFdmVudElkID0geyBuYW1lOiBcIlN1cnZleV9VSV9BZGRpdGlvbmFsUHJvbXB0X0NsaWNrZWRcIiB9O1xyXG5cdHB1YmxpYyBzdGF0aWMgU1VSVkVZX1VJX1JFRElSRUNUSU9ORkFJTFVSRTogSUV2ZW50SWQgPSB7IG5hbWU6IFwiU3VydmV5X1VJX1JlZGlyZWN0aW9uRmFpbHVyZVwiIH07XHJcblx0cHVibGljIHN0YXRpYyBHT1ZFUk5BTkNFX1NFUlZJQ0VGQUlMVVJFOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJHb3J2ZW5hbmNlX1NlcnZpY2VGYWlsdXJlXCIgfTtcclxuXHRwdWJsaWMgc3RhdGljIEdPVkVSTkFOQ0VfU0VSVklDRVJFU1VMVDogSUV2ZW50SWQgPSB7IG5hbWU6IFwiR29ydmVuYW5jZV9TZXJ2aWNlUmVzdWx0XCIgfTtcclxuXHRwdWJsaWMgc3RhdGljIERZTkFNSUNUUkFOU1BPUlRfUE9TVF9FUlJPUjogSUV2ZW50SWQgPSB7IG5hbWU6IFwiRHluYW1pY1RyYW5zcG9ydF9Qb3N0X0Vycm9yXCIgfTtcclxuXHRwdWJsaWMgc3RhdGljIEZFRURCQUNLX1NVUlZFWVNESVNBQkxFRF9BQURDOiBJRXZlbnRJZCA9IHtuYW1lOiBcIkZlZWRiYWNrX1N1cnZleXNEaXNhYmxlZF9BQURDXCJ9O1xyXG5cdHB1YmxpYyBzdGF0aWMgU1VSVkVZX1VJX0RJU0FCTEVEX0FBREM6IElFdmVudElkID0geyBuYW1lOiBcIlN1cnZleV9VSV9QcmV2ZW50ZWRfQUFEQ1wiIH07XHJcblx0cHVibGljIHN0YXRpYyBQRVJTT05BTElaRVJfU0VSVklDRVJFV0FSRFJFU1VMVDogSUV2ZW50SWQgPSB7IG5hbWU6IFwiUGVyc29uYWxpemVyX1NlcnZpY2VSZXdhcmRSZXN1bHRcIiB9O1xyXG5cdHB1YmxpYyBzdGF0aWMgUEVSU09OQUxJWkVSX0NMSUVOVEZBSUxVUkU6IElFdmVudElkID0geyBuYW1lOiBcIlBlcnNvbmFsaXplcl9DbGllbnRGYWlsdXJlXCIgfTtcclxuXHRwdWJsaWMgc3RhdGljIEFQUERBVEFfSlNPTl9QQVJTRV9FUlJPUjogSUV2ZW50SWQgPSB7IG5hbWU6IFwiQXBwRGF0YV9KU09OX1BhcnNlX0Vycm9yXCIgfTtcclxuXHRwdWJsaWMgc3RhdGljIFNVUlZFWV9SRU5ERVJfT1ZFUlJJREVfRVJST1I6IElFdmVudElkID0geyBuYW1lOiBcIlN1cnZleV9SZW5kZXJfT3ZlcnJpZGVfRXJyb3JcIiB9O1xyXG5cdHB1YmxpYyBzdGF0aWMgU1VSVkVZX1JFTkRFUl9PVkVSUklERV9TVUNDRVNTOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJTdXJ2ZXlfUmVuZGVyX092ZXJyaWRlX1N1Y2Nlc3NcIiB9O1xyXG5cdHB1YmxpYyBzdGF0aWMgU1VSVkVZX0VWRU5UX0tFWV9FUlJPUjogSUV2ZW50SWQgPSB7IG5hbWU6IFwiU3VydmV5X0V2ZW50X0tleV9FcnJvclwiIH07XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgU2hhcmVkID0gY2xhc3Mge1xyXG5cdFx0cHVibGljIHN0YXRpYyBVcGxvYWQgPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRmFpbGVkID0gY2xhc3Mge1xyXG5cdFx0XHRcdHB1YmxpYyBzdGF0aWMgVkFMVUU6IElFdmVudElkID0geyBuYW1lOiBcIlNoYXJlZF9VcGxvYWRfRmFpbGVkXCIgfTtcclxuXHRcdFx0fTtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBQcmV2ZW50ZWQgPSBjbGFzcyB7XHJcblx0XHRcdFx0cHVibGljIHN0YXRpYyBWQUxVRTogSUV2ZW50SWQgPSB7IG5hbWU6IFwiU2hhcmVkX1VwbG9hZF9QcmV2ZW50ZWRfQUFEQ1wiIH07XHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cclxuXHRcdHB1YmxpYyBzdGF0aWMgU2NyZWVuc2hvdCA9IGNsYXNzIHtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBSZW5kZXIgPSBjbGFzcyB7XHJcblx0XHRcdFx0cHVibGljIHN0YXRpYyBGYWlsZWQgPSBjbGFzcyB7XHJcblx0XHRcdFx0XHRwdWJsaWMgc3RhdGljIFZBTFVFOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJTaGFyZWRfU2NyZWVuc2hvdF9SZW5kZXJfRmFpbGVkXCIgfTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHB1YmxpYyBzdGF0aWMgU3VjY2VzcyA9IGNsYXNzIHtcclxuXHRcdFx0XHRcdHB1YmxpYyBzdGF0aWMgVkFMVUU6IElFdmVudElkID0geyBuYW1lOiBcIlNoYXJlZF9TY3JlZW5zaG90X1JlbmRlcl9TdWNjZXNzXCIgfTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0cHVibGljIHN0YXRpYyBHZXRDb250ZW50ID0gY2xhc3Mge1xyXG5cdFx0XHRcdHB1YmxpYyBzdGF0aWMgRmFpbGVkID0gY2xhc3Mge1xyXG5cdFx0XHRcdFx0cHVibGljIHN0YXRpYyBEZWZhdWx0SW1hZ2UgPSBjbGFzcyB7XHJcblx0XHRcdFx0XHRcdHB1YmxpYyBzdGF0aWMgUmV0dXJuZWQgPSBjbGFzcyB7XHJcblx0XHRcdFx0XHRcdFx0cHVibGljIHN0YXRpYyBWQUxVRTogSUV2ZW50SWQgPSB7IG5hbWU6IFwiU2hhcmVkX1NjcmVlbnNob3RfR2V0Q29udGVudF9GYWlsZWRfRGVmYXVsdEltYWdlX1JldHVybmVkXCIgfTtcclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBXZWJTdXJmYWNlcyA9IGNsYXNzIHtcclxuXHRcdHB1YmxpYyBzdGF0aWMgQ29tbW9uID0gY2xhc3Mge1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIEVycm9yID0gY2xhc3Mge1xyXG5cdFx0XHRcdHB1YmxpYyBzdGF0aWMgVkFMVUU6IElFdmVudElkID0geyBuYW1lOiBcIldlYlN1cmZhY2VzX0NvbW1vbl9FcnJvclwiIH07XHJcblx0XHRcdH07XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgSW5mbyA9IGNsYXNzIHtcclxuXHRcdFx0XHRwdWJsaWMgc3RhdGljIFZBTFVFOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJXZWJTdXJmYWNlc19Db21tb25fSW5mb1wiIH07XHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cdFx0cHVibGljIHN0YXRpYyBDYW1wYWlnbk1ldGFkYXRhQWdncmVnYXRvciA9IGNsYXNzIHtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBFcnJvciA9IGNsYXNzIHtcclxuXHRcdFx0XHRwdWJsaWMgc3RhdGljIFZBTFVFOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJXZWJTdXJmYWNlc19DYW1wYWlnbk1ldGFkYXRhQWdncmVnYXRvcl9FcnJvclwiIH07XHJcblx0XHRcdH07XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgUmVxdWVzdHMgPSBjbGFzcyB7XHJcblx0XHRcdFx0cHVibGljIHN0YXRpYyBWQUxVRTogSUV2ZW50SWQgPSB7IG5hbWU6IFwiV2ViU3VyZmFjZXNfQ2FtcGFpZ25NZXRhZGF0YUFnZ3JlZ2F0b3JfUmVxdWVzdHNcIiB9O1xyXG5cdFx0XHR9O1xyXG5cdFx0fTtcclxuXHRcdHB1YmxpYyBzdGF0aWMgU2V0Q2FtcGFpZ25BY3Rpb24gPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgRXJyb3IgPSBjbGFzcyB7XHJcblx0XHRcdFx0cHVibGljIHN0YXRpYyBWQUxVRTogSUV2ZW50SWQgPSB7IG5hbWU6IFwiV2ViU3VyZmFjZXNfU2V0Q2FtcGFpZ25BY3Rpb25fRXJyb3JcIiB9O1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIFJlcXVlc3RzID0gY2xhc3Mge1xyXG5cdFx0XHRcdHB1YmxpYyBzdGF0aWMgVkFMVUU6IElFdmVudElkID0geyBuYW1lOiBcIldlYlN1cmZhY2VzX1NldENhbXBhaWduQWN0aW9uX1JlcXVlc3RzXCIgfTtcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblx0fTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBVc2VyRmFjdHMgPSBjbGFzcyB7XHJcblx0XHRwdWJsaWMgc3RhdGljIENvbW1vbiA9IGNsYXNzIHtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBFcnJvciA9IGNsYXNzIHtcclxuXHRcdFx0XHRwdWJsaWMgc3RhdGljIFZBTFVFOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJVc2VyRmFjdHNfQ29tbW9uX0Vycm9yXCIgfTtcclxuXHRcdFx0fTtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBJbmZvID0gY2xhc3Mge1xyXG5cdFx0XHRcdHB1YmxpYyBzdGF0aWMgVkFMVUU6IElFdmVudElkID0geyBuYW1lOiBcIlVzZXJGYWN0c19Db21tb25fSW5mb1wiIH07XHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cclxuXHRcdHB1YmxpYyBzdGF0aWMgTG9jYWxGYWN0ID0gY2xhc3Mge1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIEVycm9yID0gY2xhc3Mge1xyXG5cdFx0XHRcdHB1YmxpYyBzdGF0aWMgVkFMVUU6IElFdmVudElkID0geyBuYW1lOiBcIlVzZXJGYWN0c19Mb2NhbEZhY3RfRXJyb3JcIiB9O1xyXG5cdFx0XHR9O1xyXG5cdFx0fTtcclxuXHJcblx0XHRwdWJsaWMgc3RhdGljIE1lc3NhZ2luZyA9IGNsYXNzIHtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBSZXF1ZXN0cyA9IGNsYXNzIHtcclxuXHRcdFx0XHRwdWJsaWMgc3RhdGljIFZBTFVFOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJVc2VyRmFjdHNfTWVzc2FnaW5nX1JlcXVlc3RzXCIgfTtcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblxyXG5cdFx0cHVibGljIHN0YXRpYyBBdWdMb29wID0gY2xhc3Mge1xyXG5cdFx0XHRwdWJsaWMgc3RhdGljIFJlcXVlc3RzID0gY2xhc3Mge1xyXG5cdFx0XHRcdHB1YmxpYyBzdGF0aWMgVkFMVUU6IElFdmVudElkID0geyBuYW1lOiBcIlVzZXJGYWN0c19BdWdMb29wX1JlcXVlc3RzXCIgfTtcclxuXHRcdFx0fTtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBFcnJvciA9IGNsYXNzIHtcclxuXHRcdFx0XHRwdWJsaWMgc3RhdGljIFZBTFVFOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJVc2VyRmFjdHNfQXVnTG9vcF9FcnJvclwiIH07XHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cclxuXHRcdHB1YmxpYyBzdGF0aWMgUHJvdmlkZXIgPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgSW5mbyA9IGNsYXNzIHtcclxuXHRcdFx0XHRwdWJsaWMgc3RhdGljIFZBTFVFOiBJRXZlbnRJZCA9IHsgbmFtZTogXCJVc2VyRmFjdHNfUHJvdmlkZXJfU3VtbWFyeVwiIH07XHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cdH07XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgQ29tbW9uID0gY2xhc3Mge1xyXG5cdFx0cHVibGljIHN0YXRpYyBFcnJvciA9IGNsYXNzIHtcclxuXHRcdFx0cHVibGljIHN0YXRpYyBWQUxVRTogSUV2ZW50SWQgPSB7IG5hbWU6IFwiQ29tbW9uX0Vycm9yXCIgfTtcclxuXHRcdH07XHJcblx0XHRwdWJsaWMgc3RhdGljIEluZm8gPSBjbGFzcyB7XHJcblx0XHRcdHB1YmxpYyBzdGF0aWMgVkFMVUU6IElFdmVudElkID0geyBuYW1lOiBcIkNvbW1vbl9JbmZvXCIgfTtcclxuXHRcdH07XHJcblx0fTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Logging/Constants.ts\n')},"./scripts/app/Logging/Logging.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initialize", function() { return initialize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLogger", function() { return getLogger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Logger", function() { return Logger; });\n/* harmony import */ var _Telemetry_Contracts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Telemetry/Contracts */ "./scripts/app/Logging/Telemetry/Contracts.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../Utils */ "./scripts/app/Utils.ts");\n/* harmony import */ var _Telemetry_TelemetryLoggerFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Telemetry/TelemetryLoggerFactory */ "./scripts/app/Logging/Telemetry/TelemetryLoggerFactory.ts");\n/* harmony import */ var _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../FloodgateCore/FloodgateStorageProvider */ "./scripts/app/FloodgateCore/FloodgateStorageProvider.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/IFloodgateStorageProvider */ "../FloodgateCore/dist/src/Api/IFloodgateStorageProvider.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Constants */ "./scripts/app/Logging/Constants.ts");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EventIds", function() { return _Constants__WEBPACK_IMPORTED_MODULE_5__["EventIds"]; });\n\n/* harmony import */ var _Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Configuration/DynamicConfiguration */ "./scripts/app/Configuration/DynamicConfiguration.ts");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar isNOU = _Utils__WEBPACK_IMPORTED_MODULE_1__["isNOU"];\r\nvar NAMESPACE = "Office_Feedback";\r\nvar logger;\r\nvar env;\r\n/**\r\n * Initialize the logging module\r\n * @param initOptionsCommon object contains common init options\r\n * @param appName app name\r\n * @param appVersion app version\r\n * @param logSessionId local SDK session id\r\n */\r\nfunction initialize(initOptionsCommon, appName, appVersion, logSessionId, samplingOption) {\r\n    var telemetryGroup = initOptionsCommon.telemetryGroup ? initOptionsCommon.telemetryGroup : {};\r\n    var webGroup = initOptionsCommon.webGroup ? initOptionsCommon.webGroup : {};\r\n    logger = new Logger(_Telemetry_TelemetryLoggerFactory__WEBPACK_IMPORTED_MODULE_2__["default"].create(TokenManager.getTenantToken(initOptionsCommon.environment), NAMESPACE, new _Telemetry_Contracts__WEBPACK_IMPORTED_MODULE_0__["App"](appName, appVersion), new _Telemetry_Contracts__WEBPACK_IMPORTED_MODULE_0__["Session"](logSessionId), new _Telemetry_Contracts__WEBPACK_IMPORTED_MODULE_0__["Host"](initOptionsCommon.appId.toString(), initOptionsCommon.originalLocale, initOptionsCommon.sessionId, initOptionsCommon.build), new _Telemetry_Contracts__WEBPACK_IMPORTED_MODULE_0__["Release"](telemetryGroup.audienceGroup), new _Telemetry_Contracts__WEBPACK_IMPORTED_MODULE_0__["Browser"](webGroup.browser, webGroup.browserVersion), new _Telemetry_Contracts__WEBPACK_IMPORTED_MODULE_0__["Device"](telemetryGroup.deviceId), new _Telemetry_Contracts__WEBPACK_IMPORTED_MODULE_0__["User"](telemetryGroup.loggableUserId ? telemetryGroup.loggableUserId : initOptionsCommon.cid, telemetryGroup.tenantId)), samplingOption, initOptionsCommon);\r\n    env = initOptionsCommon.environment;\r\n}\r\n/**\r\n * Get the logger object\r\n */\r\nfunction getLogger() {\r\n    return logger;\r\n}\r\n;\r\n;\r\n/**\r\n * Class representing a logger for the feedback SDK\r\n */\r\nvar Logger = /** @class */ (function () {\r\n    function Logger(telemetryLogger, samplingOptions, initOptionsCommon) {\r\n        this.SAMPLING_RESULT = Math.random();\r\n        if (!telemetryLogger) {\r\n            throw new Error("telemetryLogger must not be null");\r\n        }\r\n        this.telemetryLogger = telemetryLogger;\r\n        this.eventSampling = samplingOptions;\r\n        this.initOptionsCommon = initOptionsCommon;\r\n    }\r\n    /**\r\n     * Log an event\r\n     * @param eventId event Id\r\n     * @param logSeverity the log level severity for the message\r\n     * @param customProperties custom properties to add to the log\r\n     * @param internalSampleRate sample rate for this event in decimal (example: 0.05 for 5%). (Does not override host set sampleRate)\r\n     */\r\n    Logger.prototype.logEvent = function (eventId, logSeverity, customProperties, internalSampleRate) {\r\n        if (!eventId) {\r\n            throw new Error("eventId must not be null");\r\n        }\r\n        var sampleRate;\r\n        // Host set sample rate has precedence over internalSampleRate.\r\n        if (this.isEventSampled(eventId.name)) {\r\n            sampleRate = this.getEventSamplingRate(eventId.name);\r\n        }\r\n        else if (internalSampleRate !== undefined) {\r\n            sampleRate = internalSampleRate;\r\n        }\r\n        if (isNOU(logSeverity) || logSeverity === 0 /* None */) {\r\n            if (env === 0 /* Production */) {\r\n                var errorMessage = "logSeverity must not be null or none";\r\n                if (this.isConsoleLogEnabled && console) {\r\n                    // tslint:disable:no-console\r\n                    console.log("Floodgate event: ", Logger.EVENT_NAME, errorMessage);\r\n                }\r\n                this.telemetryLogger.logEvent(Logger.EVENT_NAME, { ErrorMessage: errorMessage }, sampleRate);\r\n            }\r\n            return false;\r\n        }\r\n        customProperties = customProperties || {};\r\n        customProperties[Logger.EVENT_ID] = eventId.name;\r\n        if (this.isLoggingEnabled(logSeverity, sampleRate) || this.isEventTelemetryEnabled(eventId.name)) {\r\n            sampleRate = sampleRate !== null && sampleRate !== void 0 ? sampleRate : Logger.DEFAULT_SAMPLE_RATE;\r\n            this.telemetryLogger.logEvent(Logger.EVENT_NAME, customProperties, sampleRate);\r\n        }\r\n        if (this.isConsoleLogEnabled && console) {\r\n            // tslint:disable:no-console\r\n            console.log("Floodgate event: ", Logger.EVENT_NAME, logSeverity, customProperties);\r\n        }\r\n        return true;\r\n    };\r\n    Logger.prototype.logLocal = function (logSeverity) {\r\n        var others = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            others[_i - 1] = arguments[_i];\r\n        }\r\n        if (this.isLoggingEnabled(logSeverity) && this.isConsoleLogEnabled && console) {\r\n            // tslint:disable:no-console\r\n            console.log("LPP FG: ", logSeverity, others);\r\n        }\r\n    };\r\n    Logger.prototype.getUserSamplingRate = function () {\r\n        return this.SAMPLING_RESULT;\r\n    };\r\n    Logger.prototype.isEventTelemetryEnabled = function (eventName) {\r\n        var _a, _b, _c, _d;\r\n        try {\r\n            if (!this.dynamicLogSettings) {\r\n                return false;\r\n            }\r\n            var appId = (_b = (_a = this.initOptionsCommon) === null || _a === void 0 ? void 0 : _a.appId) === null || _b === void 0 ? void 0 : _b.toString();\r\n            var locale = (_d = (_c = this.initOptionsCommon) === null || _c === void 0 ? void 0 : _c.originalLocale) === null || _d === void 0 ? void 0 : _d.toLowerCase();\r\n            var settingName = "content_" + eventName;\r\n            // try settings from more specific to generic order\r\n            var overrideSettings = this.dynamicLogSettings[settingName + "_" + appId + "_" + locale] ||\r\n                this.dynamicLogSettings[settingName + "_" + appId] ||\r\n                this.dynamicLogSettings[settingName + "_" + locale] ||\r\n                this.dynamicLogSettings[settingName];\r\n            return overrideSettings === null || overrideSettings === void 0 ? void 0 : overrideSettings.isEnabled;\r\n        }\r\n        catch (e) {\r\n            if (this.isConsoleLogEnabled) {\r\n                // tslint:disable:no-console\r\n                console.log("FG: Error checking for dynamic log settings: ", e);\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    /**\r\n     * This method enables logging if either the log severity of the event is less than or equal to the current log level set or if the event\r\n     * has an inputSampleRate and the current log level is not set to None, and if the sample rate is greater than 0 and the random generated\r\n     * number is within the sample rate.\r\n     *\r\n     * For example, if the log severity of the event is LogLevel.Error and the current log level is set as LogLevel.Critical, then\r\n     * isLoggingEnabled will return false due to the condition LogLevel.Error <= LogLevel.Critical unless the event has an inputSampleRate.\r\n     * If the event meets either of these conditions, then a random number will be generated. If the random generated number is less than\r\n     * the sample rate and the sample rate itself is not full blocking (0 value), the event will be logged.\r\n     *\r\n     * If no current log level is set, then log level is set as LogLevel.Error by default. In this case, all events with critical log\r\n     * severity, events with error log severity, and events with a given sample rate get logged. If the current log level is None, no\r\n     * events are logged.\r\n     *\r\n     * @param inputLogLevel the log severity of the event. This follows the order defined in the LogLevel enum (None < Critical < Error < Info)\r\n     * @param inputSampleRate the percentage of users allowed to send the event back (given either through the host or the internalSampleRate)\r\n     */\r\n    Logger.prototype.isLoggingEnabled = function (inputLogLevel, inputSampleRate) {\r\n        if (isNOU(this.logLevel)) {\r\n            var currentLogLevel = this.getCurrentLogLevel();\r\n            this.logLevel = isNOU(currentLogLevel) ? 2 /* Error */ : currentLogLevel;\r\n        }\r\n        var sampleRate = inputSampleRate !== null && inputSampleRate !== void 0 ? inputSampleRate : Logger.DEFAULT_SAMPLE_RATE;\r\n        return ((inputLogLevel <= this.logLevel || (this.logLevel !== 0 /* None */ && inputSampleRate !== undefined))\r\n            && this.SAMPLING_RESULT <= sampleRate && sampleRate !== 0);\r\n    };\r\n    /**\r\n     * This method returns the current log level if it is set in either url query parameters or floodgate local storage.\r\n     * Following table summarizes whether the log event calls with a log severity will log the events or not according\r\n     * to the current log level set. For example, the first row in the table demonstrates that when the current log level\r\n     * enabled is critical, then the log event will log the events only if the log severity is critical.\r\n     *\r\n     * Current Log Level Enabled | LogSeverity: Critical\t| LogSeverity: Error\t| LogSeverity: Info\r\n     * --------------------------------------------------------------------------------------------\r\n     * Critical Enabled\t\t\t | yes      \t\t\t\t| no    \t\t\t \t| no\r\n     * Error Enabled       \t\t | yes      \t\t\t\t| yes   \t\t\t \t| no\r\n     * Info Enabled        \t\t | yes      \t\t\t\t| yes   \t\t\t \t| yes\r\n     * None Enabled        \t\t | no       \t\t\t\t| no    \t\t\t \t| no\r\n     *\r\n     * Console logging will be enabled when the current log level is set through the url query parameters or\r\n     * when the url query parameter "obfconsolelog" is explicitly set to true.\r\n     */\r\n    Logger.prototype.getCurrentLogLevel = function () {\r\n        try {\r\n            // Check if console log is enabled in local browser session with query parameter overrides\r\n            var urlParams = typeof URLSearchParams !== "undefined" && new URLSearchParams(window.location.search) || undefined;\r\n            var consoleLogParam = urlParams && urlParams.get("obfconsolelog");\r\n            if (!consoleLogParam) {\r\n                // for getting iframe host url - eg: WAC\r\n                var documentReferrer = typeof document !== "undefined" && document.referrer;\r\n                consoleLogParam = documentReferrer && documentReferrer.indexOf("obfconsolelog") !== -1;\r\n            }\r\n            if (consoleLogParam) {\r\n                this.isConsoleLogEnabled = true;\r\n            }\r\n            // Check if log level is set in local browser session with query parameter overrides\r\n            var logLevelParam = urlParams && urlParams.get("obfloglevel");\r\n            if (!isNOU(logLevelParam)) {\r\n                this.isConsoleLogEnabled = true;\r\n                return parseInt(logLevelParam, 10);\r\n            }\r\n            // Check if log level is set in floodgate local storage (manually or with remotely fetched settings)\r\n            if (_FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_3__["default"].isStorageAvailable()) {\r\n                var floodgateStorageProvider = new _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_3__["default"]();\r\n                var tempStorageItem = floodgateStorageProvider.read(_ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_4__["FileType"].LogLevelSettings);\r\n                if (!tempStorageItem) {\r\n                    tempStorageItem = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_6__["getDynamicSetting"])("LogLevelSettings" /* logLevelSettings */, "");\r\n                }\r\n                var settingsObj = tempStorageItem && this.parseObject(tempStorageItem);\r\n                if (settingsObj) {\r\n                    this.dynamicLogSettings = settingsObj;\r\n                    var logSettings = settingsObj.content;\r\n                    if (this.initOptionsCommon) {\r\n                        var appId = this.initOptionsCommon.appId && this.initOptionsCommon.appId.toString();\r\n                        var locale = this.initOptionsCommon.originalLocale && this.initOptionsCommon.originalLocale.toLowerCase();\r\n                        // log settings from more specific to generic order\r\n                        logSettings = settingsObj["content_" + appId + "_" + locale] ||\r\n                            settingsObj["content_" + appId] ||\r\n                            settingsObj["content_" + locale] ||\r\n                            settingsObj["content"];\r\n                    }\r\n                    if (logSettings) {\r\n                        if (logSettings.consoleLog) {\r\n                            this.isConsoleLogEnabled = true;\r\n                        }\r\n                        return logSettings.logLevel;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        catch (e) {\r\n            if (this.isConsoleLogEnabled) {\r\n                // tslint:disable:no-console\r\n                console.log("Error while getting the current log level: ", e);\r\n            }\r\n            return undefined;\r\n        }\r\n        return null;\r\n    };\r\n    Logger.prototype.parseObject = function (tempItem) {\r\n        try {\r\n            return JSON.parse(tempItem);\r\n        }\r\n        catch (e) {\r\n            if (this.isConsoleLogEnabled) {\r\n                // tslint:disable:no-console\r\n                console.log("Error while parsing the json string for log level: ", e);\r\n            }\r\n            return null;\r\n        }\r\n    };\r\n    Logger.prototype.getEventSamplingRate = function (eventId) {\r\n        var sampleRate = 1;\r\n        if (this.eventSampling.event) {\r\n            // If the event is init with sample rate\r\n            // check the sampling result against the sample rate\r\n            if (eventId in this.eventSampling.event) {\r\n                sampleRate = this.eventSampling.event[eventId];\r\n            }\r\n        }\r\n        return sampleRate;\r\n    };\r\n    Logger.prototype.isEventSampled = function (eventId) {\r\n        if (this.eventSampling.event) {\r\n            if (eventId in this.eventSampling.event) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    Logger.EVENT_NAME = "SDK";\r\n    Logger.EVENT_ID = "EventId";\r\n    Logger.DEFAULT_SAMPLE_RATE = 1;\r\n    return Logger;\r\n}());\r\n\r\nvar TokenManager = /** @class */ (function () {\r\n    function TokenManager() {\r\n    }\r\n    TokenManager.getTenantToken = function (environment) {\r\n        if (environment === 0 /* Production */) {\r\n            return TokenManager.TENANT_TOKEN_PRODUCTION;\r\n        }\r\n        else {\r\n            return TokenManager.TENANT_TOKEN_PRE_PRODUCTION;\r\n        }\r\n    };\r\n    TokenManager.TENANT_TOKEN_PRODUCTION = "d79e824386c4441cb8c1d4ae15690526-bd443309-5494-444a-aba9-0af9eef99f84-7360"; // "Office Feedback" Prod Aria tenant\r\n    TokenManager.TENANT_TOKEN_PRE_PRODUCTION = "2bf6a2ffddca4a80a892a0b182132961-625cb102-8b0c-480e-af53-92e48695d08d-7736"; // "Office Feedback" Sandbox Aria tenant\r\n    return TokenManager;\r\n}());\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Mb2dnaW5nL0xvZ2dpbmcudHM/ZDhlYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQTJGO0FBQ3ZEO0FBRW9DO0FBQ1M7QUFDYTtBQUUxQjtBQUNrQjtBQUU5RSxTQUFLLEdBQUssNENBQUwsQ0FBVztBQUN4QixJQUFNLFNBQVMsR0FBVyxpQkFBaUIsQ0FBQztBQUU1QyxJQUFJLE1BQWUsQ0FBQztBQUNwQixJQUFJLEdBQWdCLENBQUM7QUFFckI7Ozs7OztHQU1HO0FBQ0ksU0FBUyxVQUFVLENBQUMsaUJBQXFDLEVBQUUsT0FBZSxFQUFFLFVBQWtCLEVBQ3BHLFlBQW9CLEVBQUUsY0FBbUM7SUFFekQsSUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNoRyxJQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRTlFLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FDbEIseUVBQXNCLENBQUMsTUFBTSxDQUM1QixZQUFZLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxFQUMxRCxTQUFTLEVBQ1QsSUFBSSx3REFBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFDNUIsSUFBSSw0REFBTyxDQUFDLFlBQVksQ0FBQyxFQUN6QixJQUFJLHlEQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQ3BJ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QUFDO0lBWmMsMkJBQWMsR0FBNUIsVUFBNkIsV0FBd0I7UUFDcEQsSUFBSSxXQUFXLHVCQUEyQixFQUFFO1lBQzNDLE9BQU8sWUFBWSxDQUFDLHVCQUF1QixDQUFDO1NBQzVDO2FBQU07WUFDTixPQUFPLFlBQVksQ0FBQywyQkFBMkIsQ0FBQztTQUNoRDtJQUNGLENBQUM7SUFFYyxvQ0FBdUIsR0FDdEMsNEVBQTRFLENBQUMsQ0FBQyxxQ0FBcUM7SUFDcEcsd0NBQTJCLEdBQzFDLDRFQUE0RSxDQUFDLENBQUMsd0NBQXdDO0lBQ3ZILG1CQUFDO0NBQUEiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9Mb2dnaW5nL0xvZ2dpbmcudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJSW5pdE9wdGlvbnNDb21tb24sIElTYW1wbGluZ0luaXRPcHRpb24gfSBmcm9tIFwiLi8uLi9Db25maWd1cmF0aW9uL0lJbml0T3B0aW9uc1wiO1xyXG5pbXBvcnQgeyBJRXZlbnRJZCwgSUN1c3RvbVByb3BlcnRpZXMgfSBmcm9tIFwiLi9Db25zdGFudHNcIjtcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi8uLi9Db25zdGFudHNcIjtcclxuaW1wb3J0IHsgQXBwLCBCcm93c2VyLCBEZXZpY2UsIEhvc3QsIFJlbGVhc2UsIFNlc3Npb24sIFVzZXIgfSBmcm9tIFwiLi9UZWxlbWV0cnkvQ29udHJhY3RzXCI7XHJcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gXCIuLy4uL1V0aWxzXCI7XHJcbmltcG9ydCBJVGVsZW1ldHJ5TG9nZ2VyIGZyb20gXCIuL1RlbGVtZXRyeS9JVGVsZW1ldHJ5TG9nZ2VyXCI7XHJcbmltcG9ydCBUZWxlbWV0cnlMb2dnZXJGYWN0b3J5IGZyb20gXCIuL1RlbGVtZXRyeS9UZWxlbWV0cnlMb2dnZXJGYWN0b3J5XCI7XHJcbmltcG9ydCBGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIgZnJvbSBcIi4uL0Zsb29kZ2F0ZUNvcmUvRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyXCI7XHJcbmltcG9ydCB7IEZpbGVUeXBlIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9BcGkvSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlclwiO1xyXG5cclxuZXhwb3J0IHsgSUN1c3RvbVByb3BlcnRpZXMsIElFdmVudElkLCBFdmVudElkcyB9IGZyb20gXCIuL0NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBnZXREeW5hbWljU2V0dGluZywgU2V0dGluZ0tleSB9IGZyb20gXCIuLi9Db25maWd1cmF0aW9uL0R5bmFtaWNDb25maWd1cmF0aW9uXCI7XHJcblxyXG5jb25zdCB7IGlzTk9VIH0gPSBVdGlscztcclxuY29uc3QgTkFNRVNQQUNFOiBzdHJpbmcgPSBcIk9mZmljZV9GZWVkYmFja1wiO1xyXG5cclxubGV0IGxvZ2dlcjogSUxvZ2dlcjtcclxubGV0IGVudjogRW52aXJvbm1lbnQ7XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZSB0aGUgbG9nZ2luZyBtb2R1bGVcclxuICogQHBhcmFtIGluaXRPcHRpb25zQ29tbW9uIG9iamVjdCBjb250YWlucyBjb21tb24gaW5pdCBvcHRpb25zXHJcbiAqIEBwYXJhbSBhcHBOYW1lIGFwcCBuYW1lXHJcbiAqIEBwYXJhbSBhcHBWZXJzaW9uIGFwcCB2ZXJzaW9uXHJcbiAqIEBwYXJhbSBsb2dTZXNzaW9uSWQgbG9jYWwgU0RLIHNlc3Npb24gaWRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplKGluaXRPcHRpb25zQ29tbW9uOiBJSW5pdE9wdGlvbnNDb21tb24sIGFwcE5hbWU6IHN0cmluZywgYXBwVmVyc2lvbjogc3RyaW5nLFxyXG5cdGxvZ1Nlc3Npb25JZDogc3RyaW5nLCBzYW1wbGluZ09wdGlvbjogSVNhbXBsaW5nSW5pdE9wdGlvbik6IHZvaWQge1xyXG5cclxuXHRjb25zdCB0ZWxlbWV0cnlHcm91cCA9IGluaXRPcHRpb25zQ29tbW9uLnRlbGVtZXRyeUdyb3VwID8gaW5pdE9wdGlvbnNDb21tb24udGVsZW1ldHJ5R3JvdXAgOiB7fTtcclxuXHRjb25zdCB3ZWJHcm91cCA9IGluaXRPcHRpb25zQ29tbW9uLndlYkdyb3VwID8gaW5pdE9wdGlvbnNDb21tb24ud2ViR3JvdXAgOiB7fTtcclxuXHJcblx0bG9nZ2VyID0gbmV3IExvZ2dlcihcclxuXHRcdFRlbGVtZXRyeUxvZ2dlckZhY3RvcnkuY3JlYXRlKFxyXG5cdFx0XHRUb2tlbk1hbmFnZXIuZ2V0VGVuYW50VG9rZW4oaW5pdE9wdGlvbnNDb21tb24uZW52aXJvbm1lbnQpLFxyXG5cdFx0XHROQU1FU1BBQ0UsXHJcblx0XHRcdG5ldyBBcHAoYXBwTmFtZSwgYXBwVmVyc2lvbiksXHJcblx0XHRcdG5ldyBTZXNzaW9uKGxvZ1Nlc3Npb25JZCksXHJcblx0XHRcdG5ldyBIb3N0KGluaXRPcHRpb25zQ29tbW9uLmFwcElkLnRvU3RyaW5nKCksIGluaXRPcHRpb25zQ29tbW9uLm9yaWdpbmFsTG9jYWxlLCBpbml0T3B0aW9uc0NvbW1vbi5zZXNzaW9uSWQsIGluaXRPcHRpb25zQ29tbW9uLmJ1aWxkKSxcclxuXHRcdFx0bmV3IFJlbGVhc2UodGVsZW1ldHJ5R3JvdXAuYXVkaWVuY2VHcm91cCksXHJcblx0XHRcdG5ldyBCcm93c2VyKHdlYkdyb3VwLmJyb3dzZXIsIHdlYkdyb3VwLmJyb3dzZXJWZXJzaW9uKSxcclxuXHRcdFx0bmV3IERldmljZSh0ZWxlbWV0cnlHcm91cC5kZXZpY2VJZCksXHJcblx0XHRcdG5ldyBVc2VyKHRlbGVtZXRyeUdyb3VwLmxvZ2dhYmxlVXNlcklkID8gdGVsZW1ldHJ5R3JvdXAubG9nZ2FibGVVc2VySWQgOiBpbml0T3B0aW9uc0NvbW1vbi5jaWQsIHRlbGVtZXRyeUdyb3VwLnRlbmFudElkKVxyXG5cdFx0KSxcclxuXHRcdHNhbXBsaW5nT3B0aW9uLFxyXG5cdFx0aW5pdE9wdGlvbnNDb21tb25cclxuXHQpO1xyXG5cclxuXHRlbnYgPSBpbml0T3B0aW9uc0NvbW1vbi5lbnZpcm9ubWVudDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgbG9nZ2VyIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcigpOiBJTG9nZ2VyIHtcclxuXHRyZXR1cm4gbG9nZ2VyO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciBhIGxvZ2dlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyIHtcclxuXHRsb2dFdmVudChldmVudElkOiBJRXZlbnRJZCwgbG9nU2V2ZXJpdHk6IExvZ0xldmVsLCBjdXN0b21Qcm9wZXJ0aWVzPzogSUN1c3RvbVByb3BlcnRpZXMsIGludGVybmFsU2FtcGxlUmF0ZT86IG51bWJlcik6IHZvaWQ7XHJcblx0bG9nTG9jYWw/KGxvZ1NldmVyaXR5OiBMb2dMZXZlbCwgLi4ub3RoZXJzOiBhbnlbXSk6IHZvaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgbGV2ZWwgc2V0dGluZ3NcclxuICovXHJcbmV4cG9ydCBjb25zdCBlbnVtIExvZ0xldmVsIHtcclxuXHROb25lLFxyXG5cdENyaXRpY2FsLFxyXG5cdEVycm9yLFxyXG5cdEluZm9cclxufVxyXG5cclxuaW50ZXJmYWNlIElMb2dTZXR0aW5ncyB7XHJcblx0Y29uc29sZUxvZz86IGJvb2xlYW47XHJcblx0aXNFbmFibGVkPzogYm9vbGVhbjtcclxuXHRsb2dMZXZlbD86IExvZ0xldmVsO1xyXG59O1xyXG5cclxuaW50ZXJmYWNlIElMb2dMZXZlbFNldHRpbmdzIHtcclxuXHRjb250ZW50OiBJTG9nU2V0dGluZ3M7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xhc3MgcmVwcmVzZW50aW5nIGEgbG9nZ2VyIGZvciB0aGUgZmVlZGJhY2sgU0RLXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciB7XHJcblx0cHJpdmF0ZSBzdGF0aWMgRVZFTlRfTkFNRTogc3RyaW5nID0gXCJTREtcIjtcclxuXHRwcml2YXRlIHN0YXRpYyBFVkVOVF9JRDogc3RyaW5nID0gXCJFdmVudElkXCI7XHJcblx0cHJpdmF0ZSBzdGF0aWMgREVGQVVMVF9TQU1QTEVfUkFURTogbnVtYmVyID0gMTtcclxuXHJcblx0cHJpdmF0ZSB0ZWxlbWV0cnlMb2dnZXI6IElUZWxlbWV0cnlMb2dnZXI7XHJcblx0cHJpdmF0ZSBsb2dMZXZlbDogTG9nTGV2ZWw7XHJcblx0cHJpdmF0ZSBpc0NvbnNvbGVMb2dFbmFibGVkOiBib29sZWFuO1xyXG5cdHByaXZhdGUgZHluYW1pY0xvZ1NldHRpbmdzOiBJTG9nTGV2ZWxTZXR0aW5ncztcclxuXHJcblx0cHJpdmF0ZSBldmVudFNhbXBsaW5nOiBJU2FtcGxpbmdJbml0T3B0aW9uO1xyXG5cdHByaXZhdGUgaW5pdE9wdGlvbnNDb21tb246IElJbml0T3B0aW9uc0NvbW1vbjtcclxuXHJcblx0cHJpdmF0ZSByZWFkb25seSBTQU1QTElOR19SRVNVTFQgPSBNYXRoLnJhbmRvbSgpO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlMb2dnZXI6IElUZWxlbWV0cnlMb2dnZXIsIHNhbXBsaW5nT3B0aW9uczogSVNhbXBsaW5nSW5pdE9wdGlvbiwgaW5pdE9wdGlvbnNDb21tb24/OiBJSW5pdE9wdGlvbnNDb21tb24pIHtcclxuXHRcdGlmICghdGVsZW1ldHJ5TG9nZ2VyKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRlbGVtZXRyeUxvZ2dlciBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMudGVsZW1ldHJ5TG9nZ2VyID0gdGVsZW1ldHJ5TG9nZ2VyO1xyXG5cdFx0dGhpcy5ldmVudFNhbXBsaW5nID0gc2FtcGxpbmdPcHRpb25zO1xyXG5cdFx0dGhpcy5pbml0T3B0aW9uc0NvbW1vbiA9IGluaXRPcHRpb25zQ29tbW9uO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9nIGFuIGV2ZW50XHJcblx0ICogQHBhcmFtIGV2ZW50SWQgZXZlbnQgSWRcclxuXHQgKiBAcGFyYW0gbG9nU2V2ZXJpdHkgdGhlIGxvZyBsZXZlbCBzZXZlcml0eSBmb3IgdGhlIG1lc3NhZ2VcclxuXHQgKiBAcGFyYW0gY3VzdG9tUHJvcGVydGllcyBjdXN0b20gcHJvcGVydGllcyB0byBhZGQgdG8gdGhlIGxvZ1xyXG5cdCAqIEBwYXJhbSBpbnRlcm5hbFNhbXBsZVJhdGUgc2FtcGxlIHJhdGUgZm9yIHRoaXMgZXZlbnQgaW4gZGVjaW1hbCAoZXhhbXBsZTogMC4wNSBmb3IgNSUpLiAoRG9lcyBub3Qgb3ZlcnJpZGUgaG9zdCBzZXQgc2FtcGxlUmF0ZSlcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9nRXZlbnQoZXZlbnRJZDogSUV2ZW50SWQsIGxvZ1NldmVyaXR5OiBMb2dMZXZlbCwgY3VzdG9tUHJvcGVydGllcz86IElDdXN0b21Qcm9wZXJ0aWVzLCBpbnRlcm5hbFNhbXBsZVJhdGU/OiBudW1iZXIpOiBib29sZWFuIHtcclxuXHRcdGlmICghZXZlbnRJZCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJldmVudElkIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IHNhbXBsZVJhdGU6IG51bWJlcjtcclxuXHJcblx0XHQvLyBIb3N0IHNldCBzYW1wbGUgcmF0ZSBoYXMgcHJlY2VkZW5jZSBvdmVyIGludGVybmFsU2FtcGxlUmF0ZS5cclxuXHRcdGlmICh0aGlzLmlzRXZlbnRTYW1wbGVkKGV2ZW50SWQubmFtZSkpIHtcclxuXHRcdFx0c2FtcGxlUmF0ZSA9IHRoaXMuZ2V0RXZlbnRTYW1wbGluZ1JhdGUoZXZlbnRJZC5uYW1lKTtcclxuXHRcdH0gZWxzZSBpZiAoaW50ZXJuYWxTYW1wbGVSYXRlICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0c2FtcGxlUmF0ZSA9IGludGVybmFsU2FtcGxlUmF0ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNOT1UobG9nU2V2ZXJpdHkpIHx8IGxvZ1NldmVyaXR5ID09PSBMb2dMZXZlbC5Ob25lKSB7XHJcblx0XHRcdGlmIChlbnYgPT09IEVudmlyb25tZW50LlByb2R1Y3Rpb24pIHtcclxuXHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSBcImxvZ1NldmVyaXR5IG11c3Qgbm90IGJlIG51bGwgb3Igbm9uZVwiO1xyXG5cdFx0XHRcdGlmICh0aGlzLmlzQ29uc29sZUxvZ0VuYWJsZWQgJiYgY29uc29sZSkge1xyXG5cdFx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coXCJGbG9vZGdhdGUgZXZlbnQ6IFwiLCBMb2dnZXIuRVZFTlRfTkFNRSwgZXJyb3JNZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy50ZWxlbWV0cnlMb2dnZXIubG9nRXZlbnQoTG9nZ2VyLkVWRU5UX05BTUUsIHsgRXJyb3JNZXNzYWdlOiBlcnJvck1lc3NhZ2UgfSwgc2FtcGxlUmF0ZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGN1c3RvbVByb3BlcnRpZXMgPSBjdXN0b21Qcm9wZXJ0aWVzIHx8IHt9O1xyXG5cdFx0KDxhbnk+IGN1c3RvbVByb3BlcnRpZXMpW0xvZ2dlci5FVkVOVF9JRF0gPSBldmVudElkLm5hbWU7XHJcblxyXG5cdFx0aWYgKHRoaXMuaXNMb2dnaW5nRW5hYmxlZChsb2dTZXZlcml0eSwgc2FtcGxlUmF0ZSkgfHwgdGhpcy5pc0V2ZW50VGVsZW1ldHJ5RW5hYmxlZChldmVudElkLm5hbWUpKSB7XHJcblx0XHRcdHNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlID8/IExvZ2dlci5ERUZBVUxUX1NBTVBMRV9SQVRFO1xyXG5cdFx0XHR0aGlzLnRlbGVtZXRyeUxvZ2dlci5sb2dFdmVudChMb2dnZXIuRVZFTlRfTkFNRSwgY3VzdG9tUHJvcGVydGllcywgc2FtcGxlUmF0ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuaXNDb25zb2xlTG9nRW5hYmxlZCAmJiBjb25zb2xlKSB7XHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcclxuXHRcdFx0Y29uc29sZS5sb2coXCJGbG9vZGdhdGUgZXZlbnQ6IFwiLCBMb2dnZXIuRVZFTlRfTkFNRSwgbG9nU2V2ZXJpdHksIGN1c3RvbVByb3BlcnRpZXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGxvZ0xvY2FsPyhsb2dTZXZlcml0eTogTG9nTGV2ZWwsIC4uLm90aGVyczogYW55W10pOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmlzTG9nZ2luZ0VuYWJsZWQobG9nU2V2ZXJpdHkpICYmIHRoaXMuaXNDb25zb2xlTG9nRW5hYmxlZCAmJiBjb25zb2xlKSB7XHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcclxuXHRcdFx0Y29uc29sZS5sb2coXCJMUFAgRkc6IFwiLCBsb2dTZXZlcml0eSwgb3RoZXJzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRVc2VyU2FtcGxpbmdSYXRlKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5TQU1QTElOR19SRVNVTFQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgaXNFdmVudFRlbGVtZXRyeUVuYWJsZWQoZXZlbnROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICghdGhpcy5keW5hbWljTG9nU2V0dGluZ3MpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGFwcElkID0gdGhpcy5pbml0T3B0aW9uc0NvbW1vbj8uYXBwSWQ/LnRvU3RyaW5nKCk7XHJcblx0XHRcdGNvbnN0IGxvY2FsZSA9IHRoaXMuaW5pdE9wdGlvbnNDb21tb24/Lm9yaWdpbmFsTG9jYWxlPy50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRjb25zdCBzZXR0aW5nTmFtZSA9IGBjb250ZW50XyR7ZXZlbnROYW1lfWA7XHJcblxyXG5cdFx0XHQvLyB0cnkgc2V0dGluZ3MgZnJvbSBtb3JlIHNwZWNpZmljIHRvIGdlbmVyaWMgb3JkZXJcclxuXHRcdFx0Y29uc3Qgb3ZlcnJpZGVTZXR0aW5ncyA9XHJcblx0XHRcdFx0dGhpcy5keW5hbWljTG9nU2V0dGluZ3NbYCR7c2V0dGluZ05hbWV9XyR7YXBwSWR9XyR7bG9jYWxlfWAgYXMga2V5b2YgSUxvZ0xldmVsU2V0dGluZ3NdIHx8XHJcblx0XHRcdFx0dGhpcy5keW5hbWljTG9nU2V0dGluZ3NbYCR7c2V0dGluZ05hbWV9XyR7YXBwSWR9YCBhcyBrZXlvZiBJTG9nTGV2ZWxTZXR0aW5nc10gfHxcclxuXHRcdFx0XHR0aGlzLmR5bmFtaWNMb2dTZXR0aW5nc1tgJHtzZXR0aW5nTmFtZX1fJHtsb2NhbGV9YCBhcyBrZXlvZiBJTG9nTGV2ZWxTZXR0aW5nc10gfHxcclxuXHRcdFx0XHR0aGlzLmR5bmFtaWNMb2dTZXR0aW5nc1tzZXR0aW5nTmFtZSBhcyBrZXlvZiBJTG9nTGV2ZWxTZXR0aW5nc107XHJcblxyXG5cdFx0XHRyZXR1cm4gb3ZlcnJpZGVTZXR0aW5ncz8uaXNFbmFibGVkO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRpZiAodGhpcy5pc0NvbnNvbGVMb2dFbmFibGVkKSB7XHJcblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiRkc6IEVycm9yIGNoZWNraW5nIGZvciBkeW5hbWljIGxvZyBzZXR0aW5nczogXCIsIGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGhpcyBtZXRob2QgZW5hYmxlcyBsb2dnaW5nIGlmIGVpdGhlciB0aGUgbG9nIHNldmVyaXR5IG9mIHRoZSBldmVudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgbG9nIGxldmVsIHNldCBvciBpZiB0aGUgZXZlbnRcclxuXHQgKiBoYXMgYW4gaW5wdXRTYW1wbGVSYXRlIGFuZCB0aGUgY3VycmVudCBsb2cgbGV2ZWwgaXMgbm90IHNldCB0byBOb25lLCBhbmQgaWYgdGhlIHNhbXBsZSByYXRlIGlzIGdyZWF0ZXIgdGhhbiAwIGFuZCB0aGUgcmFuZG9tIGdlbmVyYXRlZFxyXG5cdCAqIG51bWJlciBpcyB3aXRoaW4gdGhlIHNhbXBsZSByYXRlLiBcclxuXHQgKiBcclxuXHQgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGxvZyBzZXZlcml0eSBvZiB0aGUgZXZlbnQgaXMgTG9nTGV2ZWwuRXJyb3IgYW5kIHRoZSBjdXJyZW50IGxvZyBsZXZlbCBpcyBzZXQgYXMgTG9nTGV2ZWwuQ3JpdGljYWwsIHRoZW5cclxuXHQgKiBpc0xvZ2dpbmdFbmFibGVkIHdpbGwgcmV0dXJuIGZhbHNlIGR1ZSB0byB0aGUgY29uZGl0aW9uIExvZ0xldmVsLkVycm9yIDw9IExvZ0xldmVsLkNyaXRpY2FsIHVubGVzcyB0aGUgZXZlbnQgaGFzIGFuIGlucHV0U2FtcGxlUmF0ZS4gXHJcblx0ICogSWYgdGhlIGV2ZW50IG1lZXRzIGVpdGhlciBvZiB0aGVzZSBjb25kaXRpb25zLCB0aGVuIGEgcmFuZG9tIG51bWJlciB3aWxsIGJlIGdlbmVyYXRlZC4gSWYgdGhlIHJhbmRvbSBnZW5lcmF0ZWQgbnVtYmVyIGlzIGxlc3MgdGhhblxyXG5cdCAqIHRoZSBzYW1wbGUgcmF0ZSBhbmQgdGhlIHNhbXBsZSByYXRlIGl0c2VsZiBpcyBub3QgZnVsbCBibG9ja2luZyAoMCB2YWx1ZSksIHRoZSBldmVudCB3aWxsIGJlIGxvZ2dlZC4gXHJcblx0ICogXHJcblx0ICogSWYgbm8gY3VycmVudCBsb2cgbGV2ZWwgaXMgc2V0LCB0aGVuIGxvZyBsZXZlbCBpcyBzZXQgYXMgTG9nTGV2ZWwuRXJyb3IgYnkgZGVmYXVsdC4gSW4gdGhpcyBjYXNlLCBhbGwgZXZlbnRzIHdpdGggY3JpdGljYWwgbG9nXHJcblx0ICogc2V2ZXJpdHksIGV2ZW50cyB3aXRoIGVycm9yIGxvZyBzZXZlcml0eSwgYW5kIGV2ZW50cyB3aXRoIGEgZ2l2ZW4gc2FtcGxlIHJhdGUgZ2V0IGxvZ2dlZC4gSWYgdGhlIGN1cnJlbnQgbG9nIGxldmVsIGlzIE5vbmUsIG5vXHJcblx0ICogZXZlbnRzIGFyZSBsb2dnZWQuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGlucHV0TG9nTGV2ZWwgdGhlIGxvZyBzZXZlcml0eSBvZiB0aGUgZXZlbnQuIFRoaXMgZm9sbG93cyB0aGUgb3JkZXIgZGVmaW5lZCBpbiB0aGUgTG9nTGV2ZWwgZW51bSAoTm9uZSA8IENyaXRpY2FsIDwgRXJyb3IgPCBJbmZvKVxyXG5cdCAqIEBwYXJhbSBpbnB1dFNhbXBsZVJhdGUgdGhlIHBlcmNlbnRhZ2Ugb2YgdXNlcnMgYWxsb3dlZCB0byBzZW5kIHRoZSBldmVudCBiYWNrIChnaXZlbiBlaXRoZXIgdGhyb3VnaCB0aGUgaG9zdCBvciB0aGUgaW50ZXJuYWxTYW1wbGVSYXRlKVxyXG5cdCAqL1xyXG5cdHByaXZhdGUgaXNMb2dnaW5nRW5hYmxlZChpbnB1dExvZ0xldmVsOiBMb2dMZXZlbCwgaW5wdXRTYW1wbGVSYXRlPzogbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoaXNOT1UodGhpcy5sb2dMZXZlbCkpIHtcclxuXHRcdFx0Y29uc3QgY3VycmVudExvZ0xldmVsID0gdGhpcy5nZXRDdXJyZW50TG9nTGV2ZWwoKTtcclxuXHRcdFx0dGhpcy5sb2dMZXZlbCA9IGlzTk9VKGN1cnJlbnRMb2dMZXZlbCkgPyBMb2dMZXZlbC5FcnJvciA6IGN1cnJlbnRMb2dMZXZlbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBzYW1wbGVSYXRlID0gaW5wdXRTYW1wbGVSYXRlID8/IExvZ2dlci5ERUZBVUxUX1NBTVBMRV9SQVRFO1xyXG5cclxuXHRcdHJldHVybiAoKGlucHV0TG9nTGV2ZWwgPD0gdGhpcy5sb2dMZXZlbCB8fCAodGhpcy5sb2dMZXZlbCAhPT0gTG9nTGV2ZWwuTm9uZSAmJiBpbnB1dFNhbXBsZVJhdGUgIT09IHVuZGVmaW5lZCkpXHJcblx0XHRcdCYmIHRoaXMuU0FNUExJTkdfUkVTVUxUIDw9IHNhbXBsZVJhdGUgJiYgc2FtcGxlUmF0ZSAhPT0gMCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IGxvZyBsZXZlbCBpZiBpdCBpcyBzZXQgaW4gZWl0aGVyIHVybCBxdWVyeSBwYXJhbWV0ZXJzIG9yIGZsb29kZ2F0ZSBsb2NhbCBzdG9yYWdlLlxyXG5cdCAqIEZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHdoZXRoZXIgdGhlIGxvZyBldmVudCBjYWxscyB3aXRoIGEgbG9nIHNldmVyaXR5IHdpbGwgbG9nIHRoZSBldmVudHMgb3Igbm90IGFjY29yZGluZ1xyXG5cdCAqIHRvIHRoZSBjdXJyZW50IGxvZyBsZXZlbCBzZXQuIEZvciBleGFtcGxlLCB0aGUgZmlyc3Qgcm93IGluIHRoZSB0YWJsZSBkZW1vbnN0cmF0ZXMgdGhhdCB3aGVuIHRoZSBjdXJyZW50IGxvZyBsZXZlbFxyXG5cdCAqIGVuYWJsZWQgaXMgY3JpdGljYWwsIHRoZW4gdGhlIGxvZyBldmVudCB3aWxsIGxvZyB0aGUgZXZlbnRzIG9ubHkgaWYgdGhlIGxvZyBzZXZlcml0eSBpcyBjcml0aWNhbC5cclxuXHQgKlxyXG5cdCAqIEN1cnJlbnQgTG9nIExldmVsIEVuYWJsZWQgfCBMb2dTZXZlcml0eTogQ3JpdGljYWxcdHwgTG9nU2V2ZXJpdHk6IEVycm9yXHR8IExvZ1NldmVyaXR5OiBJbmZvXHJcblx0ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQgKiBDcml0aWNhbCBFbmFibGVkXHRcdFx0IHwgeWVzICAgICAgXHRcdFx0XHR8IG5vICAgIFx0XHRcdCBcdHwgbm9cclxuXHQgKiBFcnJvciBFbmFibGVkICAgICAgIFx0XHQgfCB5ZXMgICAgICBcdFx0XHRcdHwgeWVzICAgXHRcdFx0IFx0fCBub1xyXG5cdCAqIEluZm8gRW5hYmxlZCAgICAgICAgXHRcdCB8IHllcyAgICAgIFx0XHRcdFx0fCB5ZXMgICBcdFx0XHQgXHR8IHllc1xyXG5cdCAqIE5vbmUgRW5hYmxlZCAgICAgICAgXHRcdCB8IG5vICAgICAgIFx0XHRcdFx0fCBubyAgICBcdFx0XHQgXHR8IG5vXHJcblx0ICpcclxuXHQgKiBDb25zb2xlIGxvZ2dpbmcgd2lsbCBiZSBlbmFibGVkIHdoZW4gdGhlIGN1cnJlbnQgbG9nIGxldmVsIGlzIHNldCB0aHJvdWdoIHRoZSB1cmwgcXVlcnkgcGFyYW1ldGVycyBvclxyXG5cdCAqIHdoZW4gdGhlIHVybCBxdWVyeSBwYXJhbWV0ZXIgXCJvYmZjb25zb2xlbG9nXCIgaXMgZXhwbGljaXRseSBzZXQgdG8gdHJ1ZS5cclxuXHQgKi9cclxuXHRwcml2YXRlIGdldEN1cnJlbnRMb2dMZXZlbCgpOiBMb2dMZXZlbCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHQvLyBDaGVjayBpZiBjb25zb2xlIGxvZyBpcyBlbmFibGVkIGluIGxvY2FsIGJyb3dzZXIgc2Vzc2lvbiB3aXRoIHF1ZXJ5IHBhcmFtZXRlciBvdmVycmlkZXNcclxuXHRcdFx0Y29uc3QgdXJsUGFyYW1zID0gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpIHx8IHVuZGVmaW5lZDtcclxuXHRcdFx0bGV0IGNvbnNvbGVMb2dQYXJhbTogc3RyaW5nIHwgYm9vbGVhbiA9IHVybFBhcmFtcyAmJiB1cmxQYXJhbXMuZ2V0KFwib2JmY29uc29sZWxvZ1wiKTtcclxuXHRcdFx0aWYgKCFjb25zb2xlTG9nUGFyYW0pIHtcclxuXHRcdFx0XHQvLyBmb3IgZ2V0dGluZyBpZnJhbWUgaG9zdCB1cmwgLSBlZzogV0FDXHJcblx0XHRcdFx0Y29uc3QgZG9jdW1lbnRSZWZlcnJlciA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5yZWZlcnJlcjtcclxuXHRcdFx0XHRjb25zb2xlTG9nUGFyYW0gPSBkb2N1bWVudFJlZmVycmVyICYmIGRvY3VtZW50UmVmZXJyZXIuaW5kZXhPZihcIm9iZmNvbnNvbGVsb2dcIikgIT09IC0xO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoY29uc29sZUxvZ1BhcmFtKSB7XHJcblx0XHRcdFx0dGhpcy5pc0NvbnNvbGVMb2dFbmFibGVkID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgbG9nIGxldmVsIGlzIHNldCBpbiBsb2NhbCBicm93c2VyIHNlc3Npb24gd2l0aCBxdWVyeSBwYXJhbWV0ZXIgb3ZlcnJpZGVzXHJcblx0XHRcdGNvbnN0IGxvZ0xldmVsUGFyYW0gPSB1cmxQYXJhbXMgJiYgdXJsUGFyYW1zLmdldChcIm9iZmxvZ2xldmVsXCIpO1xyXG5cdFx0XHRpZiAoIWlzTk9VKGxvZ0xldmVsUGFyYW0pKSB7XHJcblx0XHRcdFx0dGhpcy5pc0NvbnNvbGVMb2dFbmFibGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQobG9nTGV2ZWxQYXJhbSwgMTApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBDaGVjayBpZiBsb2cgbGV2ZWwgaXMgc2V0IGluIGZsb29kZ2F0ZSBsb2NhbCBzdG9yYWdlIChtYW51YWxseSBvciB3aXRoIHJlbW90ZWx5IGZldGNoZWQgc2V0dGluZ3MpXHJcblx0XHRcdGlmIChGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIuaXNTdG9yYWdlQXZhaWxhYmxlKCkpIHtcclxuXHRcdFx0XHRjb25zdCBmbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXI6IEZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlciA9IG5ldyBGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIoKTtcclxuXHRcdFx0XHRsZXQgdGVtcFN0b3JhZ2VJdGVtOiBzdHJpbmcgPSBmbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIucmVhZChGaWxlVHlwZS5Mb2dMZXZlbFNldHRpbmdzKTtcclxuXHRcdFx0XHRpZiAoIXRlbXBTdG9yYWdlSXRlbSkge1xyXG5cdFx0XHRcdFx0dGVtcFN0b3JhZ2VJdGVtID0gZ2V0RHluYW1pY1NldHRpbmcoU2V0dGluZ0tleS5sb2dMZXZlbFNldHRpbmdzLCBcIlwiKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbnN0IHNldHRpbmdzT2JqID0gdGVtcFN0b3JhZ2VJdGVtICYmIHRoaXMucGFyc2VPYmplY3QodGVtcFN0b3JhZ2VJdGVtKTtcclxuXHRcdFx0XHRpZiAoc2V0dGluZ3NPYmopIHtcclxuXHRcdFx0XHRcdHRoaXMuZHluYW1pY0xvZ1NldHRpbmdzID0gc2V0dGluZ3NPYmo7XHJcblx0XHRcdFx0XHRsZXQgbG9nU2V0dGluZ3MgPSBzZXR0aW5nc09iai5jb250ZW50IGFzIElMb2dTZXR0aW5ncztcclxuXHJcblx0XHRcdFx0XHRpZiAodGhpcy5pbml0T3B0aW9uc0NvbW1vbikge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBhcHBJZCA9IHRoaXMuaW5pdE9wdGlvbnNDb21tb24uYXBwSWQgJiYgdGhpcy5pbml0T3B0aW9uc0NvbW1vbi5hcHBJZC50b1N0cmluZygpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBsb2NhbGUgPSAgdGhpcy5pbml0T3B0aW9uc0NvbW1vbi5vcmlnaW5hbExvY2FsZSAmJiB0aGlzLmluaXRPcHRpb25zQ29tbW9uLm9yaWdpbmFsTG9jYWxlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBsb2cgc2V0dGluZ3MgZnJvbSBtb3JlIHNwZWNpZmljIHRvIGdlbmVyaWMgb3JkZXJcclxuXHRcdFx0XHRcdFx0bG9nU2V0dGluZ3MgPSBzZXR0aW5nc09ialtgY29udGVudF8ke2FwcElkfV8ke2xvY2FsZX1gXSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzT2JqW2Bjb250ZW50XyR7YXBwSWR9YF0gfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nc09ialtgY29udGVudF8ke2xvY2FsZX1gXSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzT2JqW2Bjb250ZW50YF07XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aWYgKGxvZ1NldHRpbmdzKSB7XHJcblx0XHRcdFx0XHRcdGlmIChsb2dTZXR0aW5ncy5jb25zb2xlTG9nKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5pc0NvbnNvbGVMb2dFbmFibGVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGxvZ1NldHRpbmdzLmxvZ0xldmVsO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRpZiAodGhpcy5pc0NvbnNvbGVMb2dFbmFibGVkKSB7XHJcblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgY3VycmVudCBsb2cgbGV2ZWw6IFwiLCBlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZU9iamVjdCh0ZW1wSXRlbTogc3RyaW5nKTogYW55IHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHJldHVybiBKU09OLnBhcnNlKHRlbXBJdGVtKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0aWYgKHRoaXMuaXNDb25zb2xlTG9nRW5hYmxlZCkge1xyXG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhcIkVycm9yIHdoaWxlIHBhcnNpbmcgdGhlIGpzb24gc3RyaW5nIGZvciBsb2cgbGV2ZWw6IFwiLCBlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0RXZlbnRTYW1wbGluZ1JhdGUoZXZlbnRJZDogc3RyaW5nKTogbnVtYmVyIHtcclxuXHRcdGxldCBzYW1wbGVSYXRlID0gMTtcclxuXHRcdGlmICh0aGlzLmV2ZW50U2FtcGxpbmcuZXZlbnQpIHtcclxuXHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIGluaXQgd2l0aCBzYW1wbGUgcmF0ZVxyXG5cdFx0XHQvLyBjaGVjayB0aGUgc2FtcGxpbmcgcmVzdWx0IGFnYWluc3QgdGhlIHNhbXBsZSByYXRlXHJcblx0XHRcdGlmIChldmVudElkIGluIHRoaXMuZXZlbnRTYW1wbGluZy5ldmVudCkge1xyXG5cdFx0XHRcdHNhbXBsZVJhdGUgPSB0aGlzLmV2ZW50U2FtcGxpbmcuZXZlbnRbZXZlbnRJZF07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBzYW1wbGVSYXRlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBpc0V2ZW50U2FtcGxlZChldmVudElkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmV2ZW50U2FtcGxpbmcuZXZlbnQpIHtcclxuXHRcdFx0aWYgKGV2ZW50SWQgaW4gdGhpcy5ldmVudFNhbXBsaW5nLmV2ZW50KSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuXHJcbmNsYXNzIFRva2VuTWFuYWdlciB7XHJcblx0cHVibGljIHN0YXRpYyBnZXRUZW5hbnRUb2tlbihlbnZpcm9ubWVudDogRW52aXJvbm1lbnQpOiBzdHJpbmcge1xyXG5cdFx0aWYgKGVudmlyb25tZW50ID09PSBFbnZpcm9ubWVudC5Qcm9kdWN0aW9uKSB7XHJcblx0XHRcdHJldHVybiBUb2tlbk1hbmFnZXIuVEVOQU5UX1RPS0VOX1BST0RVQ1RJT047XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gVG9rZW5NYW5hZ2VyLlRFTkFOVF9UT0tFTl9QUkVfUFJPRFVDVElPTjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIFRFTkFOVF9UT0tFTl9QUk9EVUNUSU9OOiBzdHJpbmcgPVxyXG5cdFwiZDc5ZTgyNDM4NmM0NDQxY2I4YzFkNGFlMTU2OTA1MjYtYmQ0NDMzMDktNTQ5NC00NDRhLWFiYTktMGFmOWVlZjk5Zjg0LTczNjBcIjsgLy8gXCJPZmZpY2UgRmVlZGJhY2tcIiBQcm9kIEFyaWEgdGVuYW50XHJcblx0cHJpdmF0ZSBzdGF0aWMgVEVOQU5UX1RPS0VOX1BSRV9QUk9EVUNUSU9OOiBzdHJpbmcgPVxyXG5cdFwiMmJmNmEyZmZkZGNhNGE4MGE4OTJhMGIxODIxMzI5NjEtNjI1Y2IxMDItOGIwYy00ODBlLWFmNTMtOTJlNDg2OTVkMDhkLTc3MzZcIjsgLy8gXCJPZmZpY2UgRmVlZGJhY2tcIiBTYW5kYm94IEFyaWEgdGVuYW50XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/Logging/Logging.ts\n')},"./scripts/app/Logging/Telemetry/Aria.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AWT", function() { return AWT; });\n/**\r\n * Aria.ts\r\n *\r\n * Module for wrapper around Aria\r\n */\r\nvar aria = __webpack_require__(/*! ./../../thirdparty/aria-webjs-compact-sdk-1.2.2 */ "./scripts/app/thirdparty/aria-webjs-compact-sdk-1.2.2.js");\r\nfunction AWT() { return aria.AWT; }\r\n;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Mb2dnaW5nL1RlbGVtZXRyeS9BcmlhLnRzP2NhOWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBOzs7O0dBSUc7QUFFSCxJQUFJLElBQUksR0FBUSxtQkFBTyxDQUFDLGlIQUFpRCxDQUFDLENBQUM7QUFFcEUsU0FBUyxHQUFHLEtBQUssT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUFBLENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9Mb2dnaW5nL1RlbGVtZXRyeS9BcmlhLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEFyaWEudHNcclxuICpcclxuICogTW9kdWxlIGZvciB3cmFwcGVyIGFyb3VuZCBBcmlhXHJcbiAqL1xyXG5cclxubGV0IGFyaWE6IGFueSA9IHJlcXVpcmUoXCIuLy4uLy4uL3RoaXJkcGFydHkvYXJpYS13ZWJqcy1jb21wYWN0LXNkay0xLjIuMlwiKTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBBV1QoKSB7IHJldHVybiBhcmlhLkFXVDsgfTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/Logging/Telemetry/Aria.ts\n')},"./scripts/app/Logging/Telemetry/AriaTelemetryLogger.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Aria__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Aria */ "./scripts/app/Logging/Telemetry/Aria.ts");\n/* harmony import */ var _Contracts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Contracts */ "./scripts/app/Logging/Telemetry/Contracts.ts");\n/**\r\n * An Aria-based logger\r\n */\r\n\r\n\r\nvar AriaTelemetryLogger = /** @class */ (function () {\r\n    function AriaTelemetryLogger(tenantToken, namespace, app, session, host, release, browser, device, user) {\r\n        if (!tenantToken) {\r\n            throw new Error("tenantToken must not be null");\r\n        }\r\n        if (!namespace) {\r\n            throw new Error("namespace must not be null");\r\n        }\r\n        if (!app) {\r\n            throw new Error("app must not be null");\r\n        }\r\n        if (!session) {\r\n            throw new Error("session must not be null");\r\n        }\r\n        _Aria__WEBPACK_IMPORTED_MODULE_0__["AWT"]().initialize(tenantToken);\r\n        this.namespace = namespace;\r\n        this.oesApp = app;\r\n        this.oesSession = session;\r\n        this.oesHost = host;\r\n        this.oesRelease = release;\r\n        this.oesBrowser = browser;\r\n        this.oesDevice = device;\r\n        this.oesUser = user;\r\n        this.sequence = 1; // Sequence starts at 1 not 0\r\n    }\r\n    AriaTelemetryLogger.setApp = function (properties, app) {\r\n        properties["App.Name"] = app.getName();\r\n        properties["App.Platform"] = app.getPlatform();\r\n        properties["App.Version"] = app.getVersion();\r\n    };\r\n    AriaTelemetryLogger.setSession = function (properties, session) {\r\n        properties["Session.Id"] = session.getId();\r\n    };\r\n    AriaTelemetryLogger.setHost = function (properties, host) {\r\n        if (host) {\r\n            properties["Host.Id"] = host.getId();\r\n            properties["Host.SessionId2"] = host.getSessionId();\r\n            properties["Host.Version"] = host.getVersion();\r\n            properties["Host.Locale"] = host.getLocale();\r\n        }\r\n    };\r\n    AriaTelemetryLogger.setEvent = function (properties, event) {\r\n        properties["Event.Name"] = event.getName();\r\n        properties["Event.Id"] = event.getId();\r\n        properties["Event.Source"] = event.getSource();\r\n        properties["Event.SchemaVersion"] = event.getSchemaVersion();\r\n        properties["Event.Sequence"] = event.getSequence();\r\n        properties["Event.SampleRate"] = event.getSampleRate();\r\n    };\r\n    AriaTelemetryLogger.setRelease = function (properties, release) {\r\n        if (release) {\r\n            properties["Release.AudienceGroup"] = release.getAudienceGroup();\r\n        }\r\n    };\r\n    AriaTelemetryLogger.setBrowser = function (properties, browser) {\r\n        if (browser) {\r\n            properties["Browser.Name"] = browser.getName();\r\n            properties["Browser.Version"] = browser.getVersion();\r\n        }\r\n    };\r\n    AriaTelemetryLogger.setDevice = function (properties, device) {\r\n        if (device) {\r\n            properties["Device.Id"] = device.getId();\r\n        }\r\n    };\r\n    AriaTelemetryLogger.setUser = function (properties, user) {\r\n        if (user) {\r\n            properties["User.PrimaryIdentityHash"] = user.getPrimaryIdentityHash();\r\n            properties["User.PrimaryIdentitySpace"] = user.getPrimaryIdentitySpace();\r\n            properties["User.TenantId"] = user.getTenantId();\r\n        }\r\n    };\r\n    AriaTelemetryLogger.prototype.logEvent = function (eventName, customProperties, sampleRate) {\r\n        if (sampleRate === void 0) { sampleRate = 1; }\r\n        if (!eventName) {\r\n            throw new Error("eventName must not be null");\r\n        }\r\n        var oesEvent = new _Contracts__WEBPACK_IMPORTED_MODULE_1__["Event"](this.namespace + AriaTelemetryLogger.EVENT_NAME_DELIMITER + eventName, this.oesSession.getId(), this.sequence, sampleRate);\r\n        var ariaProperties = {};\r\n        if (customProperties != null) {\r\n            for (var key in customProperties) {\r\n                if (customProperties.hasOwnProperty(key)) {\r\n                    ariaProperties[AriaTelemetryLogger.CUSTOM_PROPERTIES_FIELD_PREFIX + key] = customProperties[key];\r\n                }\r\n            }\r\n        }\r\n        AriaTelemetryLogger.setApp(ariaProperties, this.oesApp);\r\n        AriaTelemetryLogger.setSession(ariaProperties, this.oesSession);\r\n        AriaTelemetryLogger.setHost(ariaProperties, this.oesHost);\r\n        AriaTelemetryLogger.setRelease(ariaProperties, this.oesRelease);\r\n        AriaTelemetryLogger.setEvent(ariaProperties, oesEvent);\r\n        AriaTelemetryLogger.setBrowser(ariaProperties, this.oesBrowser);\r\n        AriaTelemetryLogger.setDevice(ariaProperties, this.oesDevice);\r\n        AriaTelemetryLogger.setUser(ariaProperties, this.oesUser);\r\n        _Aria__WEBPACK_IMPORTED_MODULE_0__["AWT"]().logEvent({\r\n            name: oesEvent.getName(),\r\n            properties: ariaProperties,\r\n        });\r\n        this.sequence++;\r\n    };\r\n    // Event.name is set as namespace<DELIMITER>eventName\r\n    AriaTelemetryLogger.EVENT_NAME_DELIMITER = "_";\r\n    AriaTelemetryLogger.CUSTOM_PROPERTIES_FIELD_PREFIX = "Data.";\r\n    return AriaTelemetryLogger;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (AriaTelemetryLogger);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Mb2dnaW5nL1RlbGVtZXRyeS9BcmlhVGVsZW1ldHJ5TG9nZ2VyLnRzPzlhMDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7O0dBRUc7QUFFNEI7QUFDeUQ7QUFHeEY7SUF1RUMsNkJBQVksV0FBbUIsRUFBRSxTQUFpQixFQUFFLEdBQVEsRUFBRSxPQUFnQixFQUFFLElBQVcsRUFBRSxPQUFpQixFQUM3RyxPQUFpQixFQUFFLE1BQWUsRUFBRSxJQUFXO1FBRS9DLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztTQUM5QztRQUNELElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDeEM7UUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzVDO1FBRUQseUNBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNw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LG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlELG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFELHlDQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFDbkIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUU7WUFDeEIsVUFBVSxFQUFFLGNBQWM7U0FDMUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUF2SUQscURBQXFEO0lBQ3RDLHdDQUFvQixHQUFXLEdBQUcsQ0FBQztJQUNuQyxrREFBOEIsR0FBVyxPQUFPLENBQUM7SUFzSWpFLDBCQUFDO0NBQUE7QUF6SW9CLGtGQUFtQiIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0xvZ2dpbmcvVGVsZW1ldHJ5L0FyaWFUZWxlbWV0cnlMb2dnZXIudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQW4gQXJpYS1iYXNlZCBsb2dnZXJcclxuICovXHJcblxyXG5pbXBvcnQgKiBhcyBBcmlhIGZyb20gXCIuL0FyaWFcIjtcclxuaW1wb3J0IHsgQXBwLCBCcm93c2VyLCBEZXZpY2UsIEV2ZW50LCBIb3N0LCBSZWxlYXNlLCBTZXNzaW9uLCBVc2VyIH0gZnJvbSBcIi4vQ29udHJhY3RzXCI7XHJcbmltcG9ydCBJVGVsZW1ldHJ5TG9nZ2VyIGZyb20gXCIuL0lUZWxlbWV0cnlMb2dnZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFyaWFUZWxlbWV0cnlMb2dnZXIgaW1wbGVtZW50cyBJVGVsZW1ldHJ5TG9nZ2VyIHtcclxuXHQvLyBFdmVudC5uYW1lIGlzIHNldCBhcyBuYW1lc3BhY2U8REVMSU1JVEVSPmV2ZW50TmFtZVxyXG5cdHByaXZhdGUgc3RhdGljIEVWRU5UX05BTUVfREVMSU1JVEVSOiBzdHJpbmcgPSBcIl9cIjtcclxuXHRwcml2YXRlIHN0YXRpYyBDVVNUT01fUFJPUEVSVElFU19GSUVMRF9QUkVGSVg6IHN0cmluZyA9IFwiRGF0YS5cIjtcclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgc2V0QXBwKHByb3BlcnRpZXM6IGFueSwgYXBwOiBBcHApOiB2b2lkIHtcclxuXHRcdHByb3BlcnRpZXNbXCJBcHAuTmFtZVwiXSA9IGFwcC5nZXROYW1lKCk7XHJcblx0XHRwcm9wZXJ0aWVzW1wiQXBwLlBsYXRmb3JtXCJdID0gYXBwLmdldFBsYXRmb3JtKCk7XHJcblx0XHRwcm9wZXJ0aWVzW1wiQXBwLlZlcnNpb25cIl0gPSBhcHAuZ2V0VmVyc2lvbigpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgc2V0U2Vzc2lvbihwcm9wZXJ0aWVzOiBhbnksIHNlc3Npb246IFNlc3Npb24pIHtcclxuXHRcdHByb3BlcnRpZXNbXCJTZXNzaW9uLklkXCJdID0gc2Vzc2lvbi5nZXRJZCgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgc2V0SG9zdChwcm9wZXJ0aWVzOiBhbnksIGhvc3Q6IEhvc3QpIHtcclxuXHRcdGlmIChob3N0KSB7XHJcblx0XHRcdHByb3BlcnRpZXNbXCJIb3N0LklkXCJdID0gaG9zdC5nZXRJZCgpO1xyXG5cdFx0XHRwcm9wZXJ0aWVzW1wiSG9zdC5TZXNzaW9uSWQyXCJdID0gaG9zdC5nZXRTZXNzaW9uSWQoKTtcclxuXHRcdFx0cHJvcGVydGllc1tcIkhvc3QuVmVyc2lvblwiXSA9IGhvc3QuZ2V0VmVyc2lvbigpO1xyXG5cdFx0XHRwcm9wZXJ0aWVzW1wiSG9zdC5Mb2NhbGVcIl0gPSBob3N0LmdldExvY2FsZSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgc2V0RXZlbnQocHJvcGVydGllczogYW55LCBldmVudDogRXZlbnQpIHtcclxuXHRcdHByb3BlcnRpZXNbXCJFdmVudC5OYW1lXCJdID0gZXZlbnQuZ2V0TmFtZSgpO1xyXG5cdFx0cHJvcGVydGllc1tcIkV2ZW50LklkXCJdID0gZXZlbnQuZ2V0SWQoKTtcclxuXHRcdHByb3BlcnRpZXNbXCJFdmVudC5Tb3VyY2VcIl0gPSBldmVudC5nZXRTb3VyY2UoKTtcclxuXHRcdHByb3BlcnRpZXNbXCJFdmVudC5TY2hlbWFWZXJzaW9uXCJdID0gZXZlbnQuZ2V0U2NoZW1hVmVyc2lvbigpO1xyXG5cdFx0cHJvcGVydGllc1tcIkV2ZW50LlNlcXVlbmNlXCJdID0gZXZlbnQuZ2V0U2VxdWVuY2UoKTtcclxuXHRcdHByb3BlcnRpZXNbXCJFdmVudC5TYW1wbGVSYXRlXCJdID0gZXZlbnQuZ2V0U2FtcGxlUmF0ZSgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgc2V0UmVsZWFzZShwcm9wZXJ0aWVzOiBhbnksIHJlbGVhc2U6IFJlbGVhc2UpIHtcclxuXHRcdGlmIChyZWxlYXNlKSB7XHJcblx0XHRcdHByb3BlcnRpZXNbXCJSZWxlYXNlLkF1ZGllbmNlR3JvdXBcIl0gPSByZWxlYXNlLmdldEF1ZGllbmNlR3JvdXAoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIHNldEJyb3dzZXIocHJvcGVydGllczogYW55LCBicm93c2VyOiBCcm93c2VyKSB7XHJcblx0XHRpZiAoYnJvd3Nlcikge1xyXG5cdFx0XHRwcm9wZXJ0aWVzW1wiQnJvd3Nlci5OYW1lXCJdID0gYnJvd3Nlci5nZXROYW1lKCk7XHJcblx0XHRcdHByb3BlcnRpZXNbXCJCcm93c2VyLlZlcnNpb25cIl0gPSBicm93c2VyLmdldFZlcnNpb24oKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIHNldERldmljZShwcm9wZXJ0aWVzOiBhbnksIGRldmljZTogRGV2aWNlKSB7XHJcblx0XHRpZiAoZGV2aWNlKSB7XHJcblx0XHRcdHByb3BlcnRpZXNbXCJEZXZpY2UuSWRcIl0gPSBkZXZpY2UuZ2V0SWQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIHNldFVzZXIocHJvcGVydGllczogYW55LCB1c2VyOiBVc2VyKSB7XHJcblx0XHRpZiAodXNlcikge1xyXG5cdFx0XHRwcm9wZXJ0aWVzW1wiVXNlci5QcmltYXJ5SWRlbnRpdHlIYXNoXCJdID0gdXNlci5nZXRQcmltYXJ5SWRlbnRpdHlIYXNoKCk7XHJcblx0XHRcdHByb3BlcnRpZXNbXCJVc2VyLlByaW1hcnlJZGVudGl0eVNwYWNlXCJdID0gdXNlci5nZXRQcmltYXJ5SWRlbnRpdHlTcGFjZSgpO1xyXG5cdFx0XHRwcm9wZXJ0aWVzW1wiVXNlci5UZW5hbnRJZFwiXSA9IHVzZXIuZ2V0VGVuYW50SWQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgb2VzQXBwOiBBcHA7XHJcblx0cHJpdmF0ZSBvZXNTZXNzaW9uOiBTZXNzaW9uO1xyXG5cdHByaXZhdGUgb2VzSG9zdDogSG9zdDtcclxuXHRwcml2YXRlIG9lc1JlbGVhc2U6IFJlbGVhc2U7XHJcblx0cHJpdmF0ZSBvZXNCcm93c2VyOiBCcm93c2VyO1xyXG5cdHByaXZhdGUgb2VzRGV2aWNlOiBEZXZpY2U7XHJcblx0cHJpdmF0ZSBvZXNVc2VyOiBVc2VyO1xyXG5cclxuXHRwcml2YXRlIG5hbWVzcGFjZTogc3RyaW5nO1xyXG5cdHByaXZhdGUgc2VxdWVuY2U6IG51bWJlcjtcclxuXHJcblx0Y29uc3RydWN0b3IodGVuYW50VG9rZW46IHN0cmluZywgbmFtZXNwYWNlOiBzdHJpbmcsIGFwcDogQXBwLCBzZXNzaW9uOiBTZXNzaW9uLCBob3N0PzogSG9zdCwgcmVsZWFzZT86IFJlbGVhc2UsXHJcblx0XHRicm93c2VyPzogQnJvd3NlciwgZGV2aWNlPzogRGV2aWNlLCB1c2VyPzogVXNlcikge1xyXG5cclxuXHRcdGlmICghdGVuYW50VG9rZW4pIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGVuYW50VG9rZW4gbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghbmFtZXNwYWNlKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5hbWVzcGFjZSBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFhcHApIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYXBwIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIXNlc3Npb24pIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic2Vzc2lvbiBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdEFyaWEuQVdUKCkuaW5pdGlhbGl6ZSh0ZW5hbnRUb2tlbik7XHJcblx0XHR0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcclxuXHRcdHRoaXMub2VzQXBwID0gYXBwO1xyXG5cdFx0dGhpcy5vZXNTZXNzaW9uID0gc2Vzc2lvbjtcclxuXHRcdHRoaXMub2VzSG9zdCA9IGhvc3Q7XHJcblx0XHR0aGlzLm9lc1JlbGVhc2UgPSByZWxlYXNlO1xyXG5cdFx0dGhpcy5vZXNCcm93c2VyID0gYnJvd3NlcjtcclxuXHRcdHRoaXMub2VzRGV2aWNlID0gZGV2aWNlO1xyXG5cdFx0dGhpcy5vZXNVc2VyID0gdXNlcjtcclxuXHRcdHRoaXMuc2VxdWVuY2UgPSAxOyAvLyBTZXF1ZW5jZSBzdGFydHMgYXQgMSBub3QgMFxyXG5cdH1cclxuXHJcblx0cHVibGljIGxvZ0V2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBjdXN0b21Qcm9wZXJ0aWVzPzogeyBbY3VzdG9tRmllbGQ6IHN0cmluZ106IGFueSB9LCBzYW1wbGVSYXRlOiBudW1iZXIgPSAxKSB7XHJcblx0XHRpZiAoIWV2ZW50TmFtZSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJldmVudE5hbWUgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgb2VzRXZlbnQ6IEV2ZW50ID0gbmV3IEV2ZW50KFxyXG5cdFx0XHR0aGlzLm5hbWVzcGFjZSArIEFyaWFUZWxlbWV0cnlMb2dnZXIuRVZFTlRfTkFNRV9ERUxJTUlURVIgKyBldmVudE5hbWUsXHJcblx0XHRcdHRoaXMub2VzU2Vzc2lvbi5nZXRJZCgpLFxyXG5cdFx0XHR0aGlzLnNlcXVlbmNlLFxyXG5cdFx0XHRzYW1wbGVSYXRlXHJcblx0XHQpO1xyXG5cclxuXHRcdGxldCBhcmlhUHJvcGVydGllczogYW55ID0ge307XHJcblxyXG5cdFx0aWYgKGN1c3RvbVByb3BlcnRpZXMgIT0gbnVsbCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBjdXN0b21Qcm9wZXJ0aWVzKSB7XHJcblx0XHRcdFx0aWYgKGN1c3RvbVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdFx0YXJpYVByb3BlcnRpZXNbQXJpYVRlbGVtZXRyeUxvZ2dlci5DVVNUT01fUFJPUEVSVElFU19GSUVMRF9QUkVGSVggKyBrZXldID0gY3VzdG9tUHJvcGVydGllc1trZXldO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdEFyaWFUZWxlbWV0cnlMb2dnZXIuc2V0QXBwKGFyaWFQcm9wZXJ0aWVzLCB0aGlzLm9lc0FwcCk7XHJcblx0XHRBcmlhVGVsZW1ldHJ5TG9nZ2VyLnNldFNlc3Npb24oYXJpYVByb3BlcnRpZXMsIHRoaXMub2VzU2Vzc2lvbik7XHJcblx0XHRBcmlhVGVsZW1ldHJ5TG9nZ2VyLnNldEhvc3QoYXJpYVByb3BlcnRpZXMsIHRoaXMub2VzSG9zdCk7XHJcblx0XHRBcmlhVGVsZW1ldHJ5TG9nZ2VyLnNldFJlbGVhc2UoYXJpYVByb3BlcnRpZXMsIHRoaXMub2VzUmVsZWFzZSk7XHJcblx0XHRBcmlhVGVsZW1ldHJ5TG9nZ2VyLnNldEV2ZW50KGFyaWFQcm9wZXJ0aWVzLCBvZXNFdmVudCk7XHJcblx0XHRBcmlhVGVsZW1ldHJ5TG9nZ2VyLnNldEJyb3dzZXIoYXJpYVByb3BlcnRpZXMsIHRoaXMub2VzQnJvd3Nlcik7XHJcblx0XHRBcmlhVGVsZW1ldHJ5TG9nZ2VyLnNldERldmljZShhcmlhUHJvcGVydGllcywgdGhpcy5vZXNEZXZpY2UpO1xyXG5cdFx0QXJpYVRlbGVtZXRyeUxvZ2dlci5zZXRVc2VyKGFyaWFQcm9wZXJ0aWVzLCB0aGlzLm9lc1VzZXIpO1xyXG5cclxuXHRcdEFyaWEuQVdUKCkubG9nRXZlbnQoe1xyXG5cdFx0XHRuYW1lOiBvZXNFdmVudC5nZXROYW1lKCksXHJcblx0XHRcdHByb3BlcnRpZXM6IGFyaWFQcm9wZXJ0aWVzLFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5zZXF1ZW5jZSsrO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Logging/Telemetry/AriaTelemetryLogger.ts\n')},"./scripts/app/Logging/Telemetry/Contracts.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "App", function() { return App; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Session", function() { return Session; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Host", function() { return Host; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Event", function() { return Event; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Release", function() { return Release; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Browser", function() { return Browser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Device", function() { return Device; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "User", function() { return User; });\n/**\r\n * Contracts enforced by OfficeEventSchema (OES)\r\n */\r\nvar App = /** @class */ (function () {\r\n    function App(name, version) {\r\n        if (!name) {\r\n            throw new Error("name must not be null");\r\n        }\r\n        if (!version) {\r\n            throw new Error("version must not be null");\r\n        }\r\n        this.name = name;\r\n        this.version = version;\r\n    }\r\n    App.prototype.getName = function () {\r\n        return this.name;\r\n    };\r\n    App.prototype.getPlatform = function () {\r\n        return App.PLATFORM;\r\n    };\r\n    App.prototype.getVersion = function () {\r\n        return this.version;\r\n    };\r\n    App.PLATFORM = "Web";\r\n    return App;\r\n}());\r\n\r\nvar Session = /** @class */ (function () {\r\n    function Session(id) {\r\n        if (!id) {\r\n            throw new Error("id must not be null");\r\n        }\r\n        this.id = id;\r\n    }\r\n    Session.prototype.getId = function () {\r\n        return this.id;\r\n    };\r\n    return Session;\r\n}());\r\n\r\nvar Host = /** @class */ (function () {\r\n    function Host(id, locale, sessionId, version) {\r\n        this.id = id;\r\n        this.locale = locale;\r\n        this.sessionId = sessionId;\r\n        this.version = version;\r\n    }\r\n    Host.prototype.getId = function () {\r\n        return this.id;\r\n    };\r\n    Host.prototype.getLocale = function () {\r\n        return this.locale;\r\n    };\r\n    Host.prototype.getSessionId = function () {\r\n        return this.sessionId;\r\n    };\r\n    Host.prototype.getVersion = function () {\r\n        return this.version;\r\n    };\r\n    return Host;\r\n}());\r\n\r\nvar Event = /** @class */ (function () {\r\n    function Event(name, sessionId, sequence, sampleRate) {\r\n        if (!name) {\r\n            throw new Error("name must not be null");\r\n        }\r\n        if (!sessionId) {\r\n            throw new Error("sessionId must not be null");\r\n        }\r\n        if ((!sequence && sequence !== 0) || sequence < 0) {\r\n            throw new Error("sequence must not be negative");\r\n        }\r\n        this.name = name;\r\n        this.id = sessionId + Event.ID_DELIMITER + sequence;\r\n        this.sequence = sequence;\r\n        this.sampleRate = sampleRate;\r\n    }\r\n    Event.prototype.getName = function () {\r\n        return this.name;\r\n    };\r\n    Event.prototype.getId = function () {\r\n        return this.id;\r\n    };\r\n    Event.prototype.getSource = function () {\r\n        return Event.SOURCE;\r\n    };\r\n    Event.prototype.getSchemaVersion = function () {\r\n        return Event.SCHEMA_VERSION;\r\n    };\r\n    Event.prototype.getSequence = function () {\r\n        return this.sequence;\r\n    };\r\n    Event.prototype.getSampleRate = function () {\r\n        return this.sampleRate;\r\n    };\r\n    // Id is set to sessionId<DELIMITER>sequence\r\n    Event.ID_DELIMITER = ".";\r\n    Event.SOURCE = "MsoThin";\r\n    Event.SCHEMA_VERSION = 1;\r\n    return Event;\r\n}());\r\n\r\nvar Release = /** @class */ (function () {\r\n    function Release(audienceGroup) {\r\n        this.audienceGroup = audienceGroup;\r\n    }\r\n    Release.prototype.getAudienceGroup = function () {\r\n        return this.audienceGroup;\r\n    };\r\n    return Release;\r\n}());\r\n\r\nvar Browser = /** @class */ (function () {\r\n    function Browser(name, version) {\r\n        this.name = name;\r\n        this.version = version;\r\n    }\r\n    Browser.prototype.getName = function () {\r\n        return this.name;\r\n    };\r\n    Browser.prototype.getVersion = function () {\r\n        return this.version;\r\n    };\r\n    return Browser;\r\n}());\r\n\r\nvar Device = /** @class */ (function () {\r\n    function Device(id) {\r\n        this.id = id;\r\n    }\r\n    Device.prototype.getId = function () {\r\n        return this.id;\r\n    };\r\n    return Device;\r\n}());\r\n\r\nvar User = /** @class */ (function () {\r\n    function User(primaryIdentityHash, tenantId) {\r\n        this.tenantId = tenantId;\r\n        this.primaryIdentityHash = primaryIdentityHash ? primaryIdentityHash.trim() : primaryIdentityHash;\r\n        this.primaryIdentitySpace = this.generatePrimaryIdentitySpace();\r\n    }\r\n    User.prototype.getTenantId = function () {\r\n        return this.tenantId;\r\n    };\r\n    User.prototype.getPrimaryIdentityHash = function () {\r\n        return this.primaryIdentityHash;\r\n    };\r\n    User.prototype.getPrimaryIdentitySpace = function () {\r\n        return this.primaryIdentitySpace;\r\n    };\r\n    User.prototype.generatePrimaryIdentitySpace = function () {\r\n        if (this.primaryIdentityHash) {\r\n            if (this.primaryIdentityHash.startsWith("a:")) {\r\n                return "UserObjectId";\r\n            }\r\n            if (this.primaryIdentityHash.startsWith("p:")) {\r\n                return "MsaPuid";\r\n            }\r\n            if (this.primaryIdentityHash.startsWith("ap:")) {\r\n                return "OrgIdPuid";\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return User;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Mb2dnaW5nL1RlbGVtZXRyeS9Db250cmFjdHMudHM/Mzc0ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7R0FFRztBQUVIO0lBTUMsYUFBbUIsSUFBWSxFQUFFLE9BQWU7UUFDL0MsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUN6QztRQUNELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDNUM7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRU0scUJBQU8sR0FBZDtRQUNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNsQixDQUFDO0lBRU0seUJBQVcsR0FBbEI7UUFDQyxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDckIsQ0FBQztJQUVNLHdCQUFVLEdBQWpCO1FBQ0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3JCLENBQUM7SUEzQmMsWUFBUSxHQUFXLEtBQUssQ0FBQztJQTRCekMsVUFBQztDQUFBO0FBN0JlO0FBK0JoQjtJQUdDLGlCQUFtQixFQUFVO1FBQzVCLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDUixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDdkM7UUFFRCxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFTSx1QkFBSyxHQUFaO1FBQ0MsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFDRixjQUFDO0FBQUQsQ0FBQzs7QUFFRDtJQU1DLGNBQVksRUFBVSxFQUFFLE1BQWMs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LENBQUM7SUFDRixXQUFDO0FBQUQsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL0xvZ2dpbmcvVGVsZW1ldHJ5L0NvbnRyYWN0cy50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb250cmFjdHMgZW5mb3JjZWQgYnkgT2ZmaWNlRXZlbnRTY2hlbWEgKE9FUylcclxuICovXHJcblxyXG5leHBvcnQgY2xhc3MgQXBwIHtcclxuXHRwcml2YXRlIHN0YXRpYyBQTEFURk9STTogc3RyaW5nID0gXCJXZWJcIjtcclxuXHJcblx0cHJpdmF0ZSBuYW1lOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSB2ZXJzaW9uOiBzdHJpbmc7XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZykge1xyXG5cdFx0aWYgKCFuYW1lKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5hbWUgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghdmVyc2lvbikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ2ZXJzaW9uIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcclxuXHRcdHRoaXMudmVyc2lvbiA9IHZlcnNpb247XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMubmFtZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRQbGF0Zm9ybSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIEFwcC5QTEFURk9STTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy52ZXJzaW9uO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNlc3Npb24ge1xyXG5cdHByaXZhdGUgaWQ6IHN0cmluZztcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcpIHtcclxuXHRcdGlmICghaWQpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaWQgbXVzdCBub3QgYmUgbnVsbFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmlkID0gaWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmlkO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEhvc3Qge1xyXG5cdHByaXZhdGUgaWQ6IHN0cmluZztcclxuXHRwcml2YXRlIGxvY2FsZTogc3RyaW5nO1xyXG5cdHByaXZhdGUgc2Vzc2lvbklkOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSB2ZXJzaW9uOiBzdHJpbmc7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nLCBzZXNzaW9uSWQ6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKSB7XHJcblx0XHR0aGlzLmlkID0gaWQ7XHJcblx0XHR0aGlzLmxvY2FsZSA9IGxvY2FsZTtcclxuXHRcdHRoaXMuc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xyXG5cdFx0dGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuaWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5sb2NhbGU7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0U2Vzc2lvbklkKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5zZXNzaW9uSWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMudmVyc2lvbjtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFdmVudCB7XHJcblx0Ly8gSWQgaXMgc2V0IHRvIHNlc3Npb25JZDxERUxJTUlURVI+c2VxdWVuY2VcclxuXHRwcml2YXRlIHN0YXRpYyBJRF9ERUxJTUlURVIgPSBcIi5cIjtcclxuXHRwcml2YXRlIHN0YXRpYyBTT1VSQ0U6IHN0cmluZyA9IFwiTXNvVGhpblwiO1xyXG5cdHByaXZhdGUgc3RhdGljIFNDSEVNQV9WRVJTSU9OOiBudW1iZXIgPSAxO1xyXG5cclxuXHRwcml2YXRlIG5hbWU6IHN0cmluZztcclxuXHRwcml2YXRlIGlkOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBzZXF1ZW5jZTogbnVtYmVyO1xyXG5cdHByaXZhdGUgc2FtcGxlUmF0ZTogbnVtYmVyO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBzZXNzaW9uSWQ6IHN0cmluZywgc2VxdWVuY2U6IG51bWJlciwgc2FtcGxlUmF0ZTogbnVtYmVyKSB7XHJcblx0XHRpZiAoIW5hbWUpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibmFtZSBtdXN0IG5vdCBiZSBudWxsXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFzZXNzaW9uSWQpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic2Vzc2lvbklkIG11c3Qgbm90IGJlIG51bGxcIik7XHJcblx0XHR9XHJcblx0XHRpZiAoKCFzZXF1ZW5jZSAmJiBzZXF1ZW5jZSAhPT0gMCkgfHwgc2VxdWVuY2UgPCAwKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInNlcXVlbmNlIG11c3Qgbm90IGJlIG5lZ2F0aXZlXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMubmFtZSA9IG5hbWU7XHJcblx0XHR0aGlzLmlkID0gc2Vzc2lvbklkICsgRXZlbnQuSURfREVMSU1JVEVSICsgc2VxdWVuY2U7XHJcblx0XHR0aGlzLnNlcXVlbmNlID0gc2VxdWVuY2U7XHJcblx0XHR0aGlzLnNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLm5hbWU7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmlkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFNvdXJjZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIEV2ZW50LlNPVVJDRTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRTY2hlbWFWZXJzaW9uKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gRXZlbnQuU0NIRU1BX1ZFUlNJT047XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0U2VxdWVuY2UoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLnNlcXVlbmNlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFNhbXBsZVJhdGUoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLnNhbXBsZVJhdGU7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVsZWFzZSB7XHJcblx0cHJpdmF0ZSBhdWRpZW5jZUdyb3VwOiBzdHJpbmc7XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihhdWRpZW5jZUdyb3VwOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuYXVkaWVuY2VHcm91cCA9IGF1ZGllbmNlR3JvdXA7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0QXVkaWVuY2VHcm91cCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuYXVkaWVuY2VHcm91cDtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCcm93c2VyIHtcclxuXHRwcml2YXRlIG5hbWU6IHN0cmluZztcclxuXHRwcml2YXRlIHZlcnNpb246IHN0cmluZztcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKSB7XHJcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xyXG5cdFx0dGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5uYW1lO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFZlcnNpb24oKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnZlcnNpb247XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRGV2aWNlIHtcclxuXHRwcml2YXRlIGlkOiBzdHJpbmc7XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihpZDogc3RyaW5nKSB7XHJcblx0XHR0aGlzLmlkID0gaWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmlkO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXIge1xyXG5cdHByaXZhdGUgcHJpbWFyeUlkZW50aXR5SGFzaDogc3RyaW5nO1xyXG5cdHByaXZhdGUgcHJpbWFyeUlkZW50aXR5U3BhY2U6IHN0cmluZztcclxuXHRwcml2YXRlIHRlbmFudElkOiBzdHJpbmc7XHJcblxyXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwcmltYXJ5SWRlbnRpdHlIYXNoOiBzdHJpbmcsIHRlbmFudElkOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMudGVuYW50SWQgPSB0ZW5hbnRJZDtcclxuXHRcdHRoaXMucHJpbWFyeUlkZW50aXR5SGFzaCA9IHByaW1hcnlJZGVudGl0eUhhc2ggPyBwcmltYXJ5SWRlbnRpdHlIYXNoLnRyaW0oKSA6IHByaW1hcnlJZGVudGl0eUhhc2g7XHJcblx0XHR0aGlzLnByaW1hcnlJZGVudGl0eVNwYWNlID0gdGhpcy5nZW5lcmF0ZVByaW1hcnlJZGVudGl0eVNwYWNlKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0VGVuYW50SWQoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnRlbmFudElkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFByaW1hcnlJZGVudGl0eUhhc2goKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnByaW1hcnlJZGVudGl0eUhhc2g7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0UHJpbWFyeUlkZW50aXR5U3BhY2UoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnByaW1hcnlJZGVudGl0eVNwYWNlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZW5lcmF0ZVByaW1hcnlJZGVudGl0eVNwYWNlKCk6IHN0cmluZyB7XHJcblx0XHRpZiAodGhpcy5wcmltYXJ5SWRlbnRpdHlIYXNoKSB7XHJcblx0XHRcdGlmICh0aGlzLnByaW1hcnlJZGVudGl0eUhhc2guc3RhcnRzV2l0aChcImE6XCIpKSB7XHJcblx0XHRcdFx0cmV0dXJuIFwiVXNlck9iamVjdElkXCI7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMucHJpbWFyeUlkZW50aXR5SGFzaC5zdGFydHNXaXRoKFwicDpcIikpIHtcclxuXHRcdFx0XHRyZXR1cm4gXCJNc2FQdWlkXCI7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMucHJpbWFyeUlkZW50aXR5SGFzaC5zdGFydHNXaXRoKFwiYXA6XCIpKSB7XHJcblx0XHRcdFx0cmV0dXJuIFwiT3JnSWRQdWlkXCI7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Logging/Telemetry/Contracts.ts\n')},"./scripts/app/Logging/Telemetry/TelemetryLoggerFactory.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _AriaTelemetryLogger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AriaTelemetryLogger */ "./scripts/app/Logging/Telemetry/AriaTelemetryLogger.ts");\n/**\r\n * Factory to return ITelemetryLogger objects\r\n */\r\n\r\nvar TelemetryLoggerFactory = /** @class */ (function () {\r\n    function TelemetryLoggerFactory() {\r\n    }\r\n    TelemetryLoggerFactory.create = function (tenantToken, namespace, app, session, host, release, browser, device, user) {\r\n        return new _AriaTelemetryLogger__WEBPACK_IMPORTED_MODULE_0__["default"](tenantToken, namespace, app, session, host, release, browser, device, user);\r\n    };\r\n    return TelemetryLoggerFactory;\r\n}());\r\n/* harmony default export */ __webpack_exports__["default"] = (TelemetryLoggerFactory);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Mb2dnaW5nL1RlbGVtZXRyeS9UZWxlbWV0cnlMb2dnZXJGYWN0b3J5LnRzPzA4YmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBOztHQUVHO0FBSXFEO0FBRXhEO0lBQUE7SUFLQSxDQUFDO0lBSmMsNkJBQU0sR0FBcEIsVUFBcUIsV0FBbUIsRUFBRSxTQUFpQixFQUFFLEdBQVEsRUFBRSxPQUFnQixFQUN0RixJQUFVLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQixFQUFFLE1BQWMsRUFBRSxJQUFVO1FBQ3pFLE9BQU8sSUFBSSw0REFBbUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFDSCw2QkFBQztBQUFELENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9Mb2dnaW5nL1RlbGVtZXRyeS9UZWxlbWV0cnlMb2dnZXJGYWN0b3J5LnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEZhY3RvcnkgdG8gcmV0dXJuIElUZWxlbWV0cnlMb2dnZXIgb2JqZWN0c1xyXG4gKi9cclxuXHJcbmltcG9ydCB7IEFwcCwgQnJvd3NlciwgRGV2aWNlLCBIb3N0LCBSZWxlYXNlLCBTZXNzaW9uLCBVc2VyIH0gZnJvbSBcIi4vQ29udHJhY3RzXCI7XHJcbmltcG9ydCBJVGVsZW1ldHJ5TG9nZ2VyIGZyb20gXCIuL0lUZWxlbWV0cnlMb2dnZXJcIjtcclxuaW1wb3J0IEFyaWFUZWxlbWV0cnlMb2dnZXIgZnJvbSBcIi4vQXJpYVRlbGVtZXRyeUxvZ2dlclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5TG9nZ2VyRmFjdG9yeSB7XHJcblx0cHVibGljIHN0YXRpYyBjcmVhdGUodGVuYW50VG9rZW46IHN0cmluZywgbmFtZXNwYWNlOiBzdHJpbmcsIGFwcDogQXBwLCBzZXNzaW9uOiBTZXNzaW9uLFxyXG5cdFx0aG9zdDogSG9zdCwgcmVsZWFzZTogUmVsZWFzZSwgYnJvd3NlcjogQnJvd3NlciwgZGV2aWNlOiBEZXZpY2UsIHVzZXI6IFVzZXIpOiBJVGVsZW1ldHJ5TG9nZ2VyIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBBcmlhVGVsZW1ldHJ5TG9nZ2VyKHRlbmFudFRva2VuLCBuYW1lc3BhY2UsIGFwcCwgc2Vzc2lvbiwgaG9zdCwgcmVsZWFzZSwgYnJvd3NlciwgZGV2aWNlLCB1c2VyKTtcclxuXHRcdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Logging/Telemetry/TelemetryLoggerFactory.ts\n')},"./scripts/app/Personalizer/PersonalizerClient.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PersonalizerClient", function() { return PersonalizerClient; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "get", function() { return get; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Constants */ "./scripts/app/Constants.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore */ "../FloodgateCore/dist/index.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/* harmony import */ var _DynamicContent_DynamicContentTransport__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../DynamicContent/DynamicContentTransport */ "./scripts/app/DynamicContent/DynamicContentTransport.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/GovernedChannel */ "../FloodgateCore/dist/src/GovernedChannel.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_6__);\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar govServiceIntReward = "https://onessppe.microsoft.com/api/v1.0/Reward";\r\nvar govServiceProdReward = "https://oness.microsoft.com/api/v1.0/Reward";\r\nvar PersonalizerClient = /** @class */ (function () {\r\n    function PersonalizerClient() {\r\n        // Check if personalizer is enabled, otherwise set personalizerEnabled to false and do nothing (log?)\r\n        // set enabled to false, this we will check in setup.\r\n        this.personalizerEnabled = false;\r\n        this.dynamicTransport = new _DynamicContent_DynamicContentTransport__WEBPACK_IMPORTED_MODULE_5__["DynamicContentTransport"]();\r\n        this.personalizerSurveyInformationMap = {};\r\n    }\r\n    PersonalizerClient.prototype.setup = function (configuration) {\r\n        this.personalizerEnabled = configuration.getFloodgateInitOptions().governanceServiceEnabled &&\r\n            configuration.getFloodgateInitOptions().personalizerEnabled;\r\n        if (this.personalizerEnabled) {\r\n            this.isProduction = configuration.getCommonInitOptions().environment === 0 /* Production */;\r\n            this.retryLimit = configuration.getFloodgateInitOptions().governanceServiceConfig.retry;\r\n            this.timeout = configuration.getFloodgateInitOptions().governanceServiceConfig.timeout;\r\n            this.requestUrl = this.isProduction ? govServiceProdReward : govServiceIntReward;\r\n        }\r\n    };\r\n    PersonalizerClient.prototype.setEventIdAndOverrideValueForSurveyId = function (eventId, configType, configValue, surveyId, campaignId) {\r\n        if (!this.personalizerEnabled || _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__["Utils"].isNOU(eventId) || _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__["Utils"].isNOU(surveyId)) {\r\n            return false;\r\n        }\r\n        if (configType !== 0 /* AutoDismissTime */) {\r\n            return false;\r\n        }\r\n        var newRecommendedAutoDismissValue = this.validateAndGetAutoDismissTime(configValue);\r\n        if (_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__["Utils"].isNOU(newRecommendedAutoDismissValue)) {\r\n            return false;\r\n        }\r\n        this.personalizerSurveyInformationMap[surveyId] = {\r\n            eventId: eventId,\r\n            recommendedAutoDismissValue: newRecommendedAutoDismissValue,\r\n            userAction: undefined,\r\n        };\r\n        return true;\r\n    };\r\n    PersonalizerClient.prototype.getOverrideValueForSurveyId = function (configType, surveyId) {\r\n        if (!this.personalizerEnabled || _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__["Utils"].isNOU(surveyId) ||\r\n            !this.infoExistsForSurveyId(surveyId) || configType !== 0 /* AutoDismissTime */) {\r\n            return undefined;\r\n        }\r\n        return this.personalizerSurveyInformationMap[surveyId].recommendedAutoDismissValue;\r\n    };\r\n    PersonalizerClient.prototype.logUserActionForSurveyAsync = function (userAction, surveyId, campaignId) {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var responseResult, actionPayload, response, timeBefore, timeAfter, error_1;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__["Utils"].isNOU(userAction) && this.infoExistsForSurveyId(surveyId)) {\r\n                            this.personalizerSurveyInformationMap[surveyId].userAction = userAction;\r\n                        }\r\n                        responseResult = {\r\n                            error: false,\r\n                        };\r\n                        actionPayload = this.getValidatedActionPayloadForSurveyId(surveyId);\r\n                        // validate the actionPayload. Log and early return with error if it fails.\r\n                        if (_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__["Utils"].isNOU(actionPayload)) {\r\n                            responseResult.error = true;\r\n                            responseResult.errorMessage = "Action Payload validation failed.";\r\n                            _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].PERSONALIZER_CLIENTFAILURE, 1 /* Critical */, {\r\n                                Message: "(PersonalizerClient.logUserActionForSurveyAsync) Error logging personalizer user action: " + responseResult.errorMessage,\r\n                                CampaignId: campaignId,\r\n                                SurveyId: surveyId,\r\n                            });\r\n                            return [2 /*return*/, responseResult];\r\n                        }\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        _a.trys.push([1, 3, , 4]);\r\n                        timeBefore = performance.now();\r\n                        return [4 /*yield*/, this.dynamicTransport.postRequestWithRetry(this.requestUrl, JSON.stringify(actionPayload), this.retryLimit, this.timeout)];\r\n                    case 2:\r\n                        response = _a.sent();\r\n                        timeAfter = performance.now();\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].PERSONALIZER_SERVICEREWARDRESULT, 1 /* Critical */, {\r\n                            TimeMilliseconds: timeAfter - timeBefore,\r\n                            HttpStatusCode: response.status,\r\n                            HttpStatusText: response.statusText,\r\n                            AdditionalSurveyInfo: this.buildConfigTelemetryString(),\r\n                            CorrelationId: this.dynamicTransport.requestId,\r\n                            CampaignId: campaignId,\r\n                            PersonalizerUserAction: actionPayload.UserAction,\r\n                            PersonalizerEventId: actionPayload.EventId,\r\n                            SurveyId: surveyId,\r\n                        });\r\n                        if (!response.ok) {\r\n                            // Error on service side.\r\n                            responseResult.error = true;\r\n                            responseResult.errorMessage = "Server Error, status: " + response.status + ", status text: " + response.statusText;\r\n                        }\r\n                        return [2 /*return*/, responseResult];\r\n                    case 3:\r\n                        error_1 = _a.sent();\r\n                        responseResult.error = true;\r\n                        responseResult.errorMessage = "Error: " + error_1.toString() + ", Error stack: " + error_1.stack;\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].PERSONALIZER_CLIENTFAILURE, 1 /* Critical */, {\r\n                            Message: "(PersonalizerClient.logUserActionForSurveyAsync) Error logging personalizer user action: " + responseResult.errorMessage,\r\n                            CampaignId: campaignId,\r\n                            SurveyId: surveyId,\r\n                            PersonalizerUserAction: actionPayload.UserAction,\r\n                            PersonalizerEventId: actionPayload.EventId,\r\n                        });\r\n                        return [2 /*return*/, responseResult];\r\n                    case 4: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    PersonalizerClient.prototype.getEventIdForSurveyId = function (surveyId) {\r\n        if (!this.infoExistsForSurveyId(surveyId)) {\r\n            return undefined;\r\n        }\r\n        return this.personalizerSurveyInformationMap[surveyId].eventId;\r\n    };\r\n    PersonalizerClient.prototype.isEnabled = function (surveyType, launcherType, governedChannelType) {\r\n        // Only enabled for:\r\n        // - FPS surveys \r\n        // - No \'customervoice\' launcher type.\r\n        // - GovernedChannelType: Standard channel\r\n        if (surveyType !== _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_1__["ISurvey"].Type.Fps\r\n            || launcherType === _Constants__WEBPACK_IMPORTED_MODULE_2__["customerVoiceLauncherType"]\r\n            || launcherType === "customux"\r\n            || governedChannelType !== _ms_ofb_officefloodgatecore_dist_src_GovernedChannel__WEBPACK_IMPORTED_MODULE_6__["GovernedChannelType"].Standard) {\r\n            return false;\r\n        }\r\n        return this.personalizerEnabled;\r\n    };\r\n    PersonalizerClient.prototype.getValidatedActionPayloadForSurveyId = function (surveyId) {\r\n        if (!this.infoExistsForSurveyId(surveyId)) {\r\n            return undefined;\r\n        }\r\n        var surveyPersonalizerInfo = this.personalizerSurveyInformationMap[surveyId];\r\n        if (_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__["Utils"].isNOU(surveyPersonalizerInfo.eventId)) {\r\n            return undefined;\r\n        }\r\n        if (_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__["Utils"].isNOU(surveyPersonalizerInfo.userAction)\r\n            || (surveyPersonalizerInfo.userAction !== 2 /* Accept */\r\n                && surveyPersonalizerInfo.userAction !== 0 /* Cancel */\r\n                && surveyPersonalizerInfo.userAction !== 1 /* Ignore */)) {\r\n            return undefined;\r\n        }\r\n        return {\r\n            UserAction: surveyPersonalizerInfo.userAction,\r\n            EventId: surveyPersonalizerInfo.eventId,\r\n        };\r\n    };\r\n    PersonalizerClient.prototype.validateAndGetAutoDismissTime = function (configValue) {\r\n        if (_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__["Utils"].isNOU(configValue) || typeof (configValue) !== "string") {\r\n            return undefined;\r\n        }\r\n        // value should be not null, not undefined; a string that parses to an int; \r\n        // an int that is in the AutoDismissTimes enum and can be mapped to the AutoDismissValues enum.\r\n        var parsedConfigValue = parseInt(configValue, 10);\r\n        switch (parsedConfigValue) {\r\n            case 0 /* NoAutoDismiss */:\r\n                return 0 /* NoAutoDismiss */;\r\n            case 7 /* SevenSeconds */:\r\n                return 1 /* SevenSeconds */;\r\n            case 14 /* FourteenSeconds */:\r\n                return 2 /* FourteenSeconds */;\r\n            case 21 /* TwentyOneSeconds */:\r\n                return 3 /* TwentyOneSeconds */;\r\n            case 28 /* TwentyEightSeconds */:\r\n                return 4 /* TwentyEightSeconds */;\r\n            case 60 /* SixtySeconds */:\r\n                return 5 /* SixtySeconds */;\r\n            case 90 /* NinetySeconds */:\r\n                return 6 /* NinetySeconds */;\r\n            case 120 /* OneHundredAndTwentySeconds */:\r\n                return 7 /* OneHundredAndTwentySeconds */;\r\n            case 150 /* OneHundredAndFiftySeconds */:\r\n                return 8 /* OneHundredAndFiftySeconds */;\r\n            default:\r\n                return undefined;\r\n        }\r\n    };\r\n    PersonalizerClient.prototype.infoExistsForSurveyId = function (surveyId) {\r\n        if (_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__["Utils"].isNOU(surveyId)) {\r\n            return false;\r\n        }\r\n        return !_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_3__["Utils"].isNOU(this.personalizerSurveyInformationMap[surveyId]);\r\n    };\r\n    PersonalizerClient.prototype.buildConfigTelemetryString = function () {\r\n        var objectTelemetry = {\r\n            retry: this.retryLimit,\r\n            timeout: this.timeout,\r\n        };\r\n        return JSON.stringify(objectTelemetry);\r\n    };\r\n    return PersonalizerClient;\r\n}());\r\n\r\nvar personalizerClient = new PersonalizerClient();\r\n/**\r\n * Get the current Personalizer Client\r\n */\r\nfunction get() {\r\n    return personalizerClient;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9QZXJzb25hbGl6ZXIvUGVyc29uYWxpemVyQ2xpZW50LnRzPzU5OWQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBb0U7QUFFMUI7QUFDVTtBQUNOO0FBQ3NDO0FBR087QUFFM0YsSUFBTSxtQkFBbUIsR0FBVyxnREFBZ0QsQ0FBQztBQUNyRixJQUFNLG9CQUFvQixHQUFXLDZDQUE2QyxDQUFDO0FBU25GO0lBcUJDO1FBQ0MscUdBQXFHO1FBQ3JHLHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLCtGQUF1QixFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRU0sa0NBQUssR0FBWixVQUFhLGFBQTRCO1FBQ3hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxhQUFhLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyx3QkFBd0I7WUFDMUYsYUFBYSxDQUFDLHVCQUF1QixFQUFFLENBQUMsbUJBQW1CLENBQUM7UUFFN0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxXQUFXLHVCQUFxQyxDQUFDO1lBQzFHLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDLHVCQUF1QixFQUFFLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLHVCQUF1QixFQUFFLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1NBQ2pGO0lBQ0YsQ0FBQztJ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QUM7SUFDeEMsQ0FBQztJQUNGLHlCQUFDO0FBQUQsQ0FBQzs7QUFFRCxJQUFNLGtCQUFrQixHQUF1QixJQUFJLGtCQUFrQixFQUFFLENBQUM7QUFFeEU7O0dBRUc7QUFDSSxTQUFTLEdBQUc7SUFDbEIsT0FBTyxrQkFBa0IsQ0FBQztBQUMzQixDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvUGVyc29uYWxpemVyL1BlcnNvbmFsaXplckNsaWVudC50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFwaSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9BcGlcIjtcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0ICogYXMgQ29uc3RhbnRzIGZyb20gXCIuLi9Db25zdGFudHNcIjtcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlXCI7XHJcbmltcG9ydCAqIGFzIExvZ2dpbmcgZnJvbSBcIi4uL0xvZ2dpbmcvTG9nZ2luZ1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljQ29udGVudFRyYW5zcG9ydCB9IGZyb20gXCIuLi9EeW5hbWljQ29udGVudC9EeW5hbWljQ29udGVudFRyYW5zcG9ydFwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uUGF5bG9hZCwgSVBlcnNvbmFsaXplckNsaWVudCwgRW5kVXNlckFjdGlvbnMsIFN1cHBvcnRlZE92ZXJyaWRlcywgQXV0b0Rpc21pc3NUaW1lcywgSVBlcnNvbmFsaXplclJld2FyZFJlc3BvbnNlIH1cclxuZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9BcGkvSVBlcnNvbmFsaXplckNsaWVudFwiO1xyXG5pbXBvcnQgeyBHb3Zlcm5lZENoYW5uZWxUeXBlIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9Hb3Zlcm5lZENoYW5uZWxcIjtcclxuXHJcbmNvbnN0IGdvdlNlcnZpY2VJbnRSZXdhcmQ6IHN0cmluZyA9IFwiaHR0cHM6Ly9vbmVzc3BwZS5taWNyb3NvZnQuY29tL2FwaS92MS4wL1Jld2FyZFwiO1xyXG5jb25zdCBnb3ZTZXJ2aWNlUHJvZFJld2FyZDogc3RyaW5nID0gXCJodHRwczovL29uZXNzLm1pY3Jvc29mdC5jb20vYXBpL3YxLjAvUmV3YXJkXCI7XHJcblxyXG5pbnRlcmZhY2UgSVBlcnNvbmFsaXplclN1cnZleUluZm9ybWF0aW9uIHtcclxuXHQvLyB2YXJpYWJsZXMgdG8gdHJhY2sgdGhlIHVzZXIncyBhY3Rpb24gYW5kIHBlcnNvbmFsaXplciBzZXJ2aWNlIHJlY29tbWVuZGF0aW9uXHJcblx0ZXZlbnRJZDogc3RyaW5nOyAvLyBVbmlxdWUgSUQgdmFyaWFibGUgdG8gbWF0Y2ggcmFuayBhbmQgcmV3YXJkXHJcblx0cmVjb21tZW5kZWRBdXRvRGlzbWlzc1ZhbHVlOiBDb25zdGFudHMuQXV0b0Rpc21pc3NWYWx1ZXM7XHJcblx0dXNlckFjdGlvbjogRW5kVXNlckFjdGlvbnMgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQZXJzb25hbGl6ZXJDbGllbnQgaW1wbGVtZW50cyBJUGVyc29uYWxpemVyQ2xpZW50IHtcclxuXHJcblx0cHVibGljIGR5bmFtaWNUcmFuc3BvcnQ6IER5bmFtaWNDb250ZW50VHJhbnNwb3J0O1xyXG5cdHByaXZhdGUgcGVyc29uYWxpemVyRW5hYmxlZDogYm9vbGVhbjtcclxuXHJcblx0Ly8gLS0tIFN0YXRlIERhdGEgLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gLS0tLS0tLVxyXG5cclxuXHQvLyBtYXAgb2Ygc3VydmV5SWQgdG8gSVBlcnNvbmFsaXplclN1cnZleUluZm9ybWF0aW9uIGluc3RhbmNlLlxyXG5cdHByaXZhdGUgcGVyc29uYWxpemVyU3VydmV5SW5mb3JtYXRpb25NYXA6IHtcclxuXHRcdFtzdXJ2ZXlJZDogc3RyaW5nXTogSVBlcnNvbmFsaXplclN1cnZleUluZm9ybWF0aW9uLFxyXG5cdH07XHJcblxyXG5cdC8vIC0tLS0tLS1cclxuXHQvLyAtLS0gU3RhdGUgRGF0YSAoZW5kKSAtLS0tLS0tLS0tLS0tLS1cclxuXHJcblx0cHJpdmF0ZSBpc1Byb2R1Y3Rpb246IGJvb2xlYW47XHJcblx0cHJpdmF0ZSByZXRyeUxpbWl0OiBudW1iZXI7XHJcblx0cHJpdmF0ZSB0aW1lb3V0OiBudW1iZXI7XHJcblx0cHJpdmF0ZSByZXF1ZXN0VXJsOiBzdHJpbmc7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0Ly8gQ2hlY2sgaWYgcGVyc29uYWxpemVyIGlzIGVuYWJsZWQsIG90aGVyd2lzZSBzZXQgcGVyc29uYWxpemVyRW5hYmxlZCB0byBmYWxzZSBhbmQgZG8gbm90aGluZyAobG9nPylcclxuXHRcdC8vIHNldCBlbmFibGVkIHRvIGZhbHNlLCB0aGlzIHdlIHdpbGwgY2hlY2sgaW4gc2V0dXAuXHJcblx0XHR0aGlzLnBlcnNvbmFsaXplckVuYWJsZWQgPSBmYWxzZTtcclxuXHRcdHRoaXMuZHluYW1pY1RyYW5zcG9ydCA9IG5ldyBEeW5hbWljQ29udGVudFRyYW5zcG9ydCgpO1xyXG5cdFx0dGhpcy5wZXJzb25hbGl6ZXJTdXJ2ZXlJbmZvcm1hdGlvbk1hcCA9IHt9O1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldHVwKGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24pOiB2b2lkIHtcclxuXHRcdHRoaXMucGVyc29uYWxpemVyRW5hYmxlZCA9IGNvbmZpZ3VyYXRpb24uZ2V0Rmxvb2RnYXRlSW5pdE9wdGlvbnMoKS5nb3Zlcm5hbmNlU2VydmljZUVuYWJsZWQgJiZcclxuXHRcdFx0Y29uZmlndXJhdGlvbi5nZXRGbG9vZGdhdGVJbml0T3B0aW9ucygpLnBlcnNvbmFsaXplckVuYWJsZWQ7XHJcblxyXG5cdFx0aWYgKHRoaXMucGVyc29uYWxpemVyRW5hYmxlZCkge1xyXG5cdFx0XHR0aGlzLmlzUHJvZHVjdGlvbiA9IGNvbmZpZ3VyYXRpb24uZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5lbnZpcm9ubWVudCA9PT0gQ29uc3RhbnRzLkVudmlyb25tZW50LlByb2R1Y3Rpb247XHJcblx0XHRcdHRoaXMucmV0cnlMaW1pdCA9IGNvbmZpZ3VyYXRpb24uZ2V0Rmxvb2RnYXRlSW5pdE9wdGlvbnMoKS5nb3Zlcm5hbmNlU2VydmljZUNvbmZpZy5yZXRyeTtcclxuXHRcdFx0dGhpcy50aW1lb3V0ID0gY29uZmlndXJhdGlvbi5nZXRGbG9vZGdhdGVJbml0T3B0aW9ucygpLmdvdmVybmFuY2VTZXJ2aWNlQ29uZmlnLnRpbWVvdXQ7XHJcblx0XHRcdHRoaXMucmVxdWVzdFVybCA9IHRoaXMuaXNQcm9kdWN0aW9uID8gZ292U2VydmljZVByb2RSZXdhcmQgOiBnb3ZTZXJ2aWNlSW50UmV3YXJkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIHNldEV2ZW50SWRBbmRPdmVycmlkZVZhbHVlRm9yU3VydmV5SWQoZXZlbnRJZDogc3RyaW5nLFxyXG5cdFx0Y29uZmlnVHlwZTogU3VwcG9ydGVkT3ZlcnJpZGVzLFxyXG5cdFx0Y29uZmlnVmFsdWU6IHN0cmluZyxcclxuXHRcdHN1cnZleUlkOiBzdHJpbmcsXHJcblx0XHRjYW1wYWlnbklkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHJcblx0XHRpZiAoIXRoaXMucGVyc29uYWxpemVyRW5hYmxlZCB8fCBVdGlscy5pc05PVShldmVudElkKSB8fCBVdGlscy5pc05PVShzdXJ2ZXlJZCkpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjb25maWdUeXBlICE9PSBTdXBwb3J0ZWRPdmVycmlkZXMuQXV0b0Rpc21pc3NUaW1lKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBuZXdSZWNvbW1lbmRlZEF1dG9EaXNtaXNzVmFsdWUgPSB0aGlzLnZhbGlkYXRlQW5kR2V0QXV0b0Rpc21pc3NUaW1lKGNvbmZpZ1ZhbHVlKTtcclxuXHJcblx0XHRpZiAoVXRpbHMuaXNOT1UobmV3UmVjb21tZW5kZWRBdXRvRGlzbWlzc1ZhbHVlKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5wZXJzb25hbGl6ZXJTdXJ2ZXlJbmZvcm1hdGlvbk1hcFtzdXJ2ZXlJZF0gPSB7XHJcblx0XHRcdGV2ZW50SWQ6IGV2ZW50SWQsXHJcblx0XHRcdHJlY29tbWVuZGVkQXV0b0Rpc21pc3NWYWx1ZTogbmV3UmVjb21tZW5kZWRBdXRvRGlzbWlzc1ZhbHVlLFxyXG5cdFx0XHR1c2VyQWN0aW9uOiB1bmRlZmluZWQsXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldE92ZXJyaWRlVmFsdWVGb3JTdXJ2ZXlJZChjb25maWdUeXBlOiBTdXBwb3J0ZWRPdmVycmlkZXMsIHN1cnZleUlkOiBzdHJpbmcpOiBDb25zdGFudHMuQXV0b0Rpc21pc3NWYWx1ZXMgfCB1bmRlZmluZWQge1xyXG5cclxuXHRcdGlmICghdGhpcy5wZXJzb25hbGl6ZXJFbmFibGVkIHx8IFV0aWxzLmlzTk9VKHN1cnZleUlkKSB8fFxyXG5cdFx0XHQhdGhpcy5pbmZvRXhpc3RzRm9yU3VydmV5SWQoc3VydmV5SWQpIHx8IGNvbmZpZ1R5cGUgIT09IFN1cHBvcnRlZE92ZXJyaWRlcy5BdXRvRGlzbWlzc1RpbWUpIHtcclxuXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucGVyc29uYWxpemVyU3VydmV5SW5mb3JtYXRpb25NYXBbc3VydmV5SWRdLnJlY29tbWVuZGVkQXV0b0Rpc21pc3NWYWx1ZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBsb2dVc2VyQWN0aW9uRm9yU3VydmV5QXN5bmModXNlckFjdGlvbjogRW5kVXNlckFjdGlvbnMsXHJcblx0XHRzdXJ2ZXlJZDogc3RyaW5nLFxyXG5cdFx0Y2FtcGFpZ25JZDogc3RyaW5nKTogUHJvbWlzZTxJUGVyc29uYWxpemVyUmV3YXJkUmVzcG9uc2U+IHtcclxuXHJcblx0XHRpZiAoIVV0aWxzLmlzTk9VKHVzZXJBY3Rpb24pICYmIHRoaXMuaW5mb0V4aXN0c0ZvclN1cnZleUlkKHN1cnZleUlkKSkge1xyXG5cdFx0XHR0aGlzLnBlcnNvbmFsaXplclN1cnZleUluZm9ybWF0aW9uTWFwW3N1cnZleUlkXS51c2VyQWN0aW9uID0gdXNlckFjdGlvbjtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCByZXNwb25zZVJlc3VsdDogSVBlcnNvbmFsaXplclJld2FyZFJlc3BvbnNlID0ge1xyXG5cdFx0XHRlcnJvcjogZmFsc2UsXHJcblx0XHR9O1xyXG5cclxuXHRcdGNvbnN0IGFjdGlvblBheWxvYWQgPSB0aGlzLmdldFZhbGlkYXRlZEFjdGlvblBheWxvYWRGb3JTdXJ2ZXlJZChzdXJ2ZXlJZCk7XHJcblxyXG5cdFx0Ly8gdmFsaWRhdGUgdGhlIGFjdGlvblBheWxvYWQuIExvZyBhbmQgZWFybHkgcmV0dXJuIHdpdGggZXJyb3IgaWYgaXQgZmFpbHMuXHJcblx0XHRpZiAoVXRpbHMuaXNOT1UoYWN0aW9uUGF5bG9hZCkpIHtcclxuXHRcdFx0cmVzcG9uc2VSZXN1bHQuZXJyb3IgPSB0cnVlO1xyXG5cdFx0XHRyZXNwb25zZVJlc3VsdC5lcnJvck1lc3NhZ2UgPSBcIkFjdGlvbiBQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiO1xyXG5cclxuXHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChMb2dnaW5nLkV2ZW50SWRzLlBFUlNPTkFMSVpFUl9DTElFTlRGQUlMVVJFLFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuQ3JpdGljYWwsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0TWVzc2FnZTogXCIoUGVyc29uYWxpemVyQ2xpZW50LmxvZ1VzZXJBY3Rpb25Gb3JTdXJ2ZXlBc3luYykgRXJyb3IgbG9nZ2luZyBwZXJzb25hbGl6ZXIgdXNlciBhY3Rpb246IFwiICsgcmVzcG9uc2VSZXN1bHQuZXJyb3JNZXNzYWdlLFxyXG5cdFx0XHRcdFx0Q2FtcGFpZ25JZDogY2FtcGFpZ25JZCxcclxuXHRcdFx0XHRcdFN1cnZleUlkOiBzdXJ2ZXlJZCxcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VSZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IHJlc3BvbnNlOiBSZXNwb25zZTtcclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCB0aW1lQmVmb3JlID0gcGVyZm9ybWFuY2Uubm93KCk7XHJcblx0XHRcdHJlc3BvbnNlID0gYXdhaXQgdGhpcy5keW5hbWljVHJhbnNwb3J0LnBvc3RSZXF1ZXN0V2l0aFJldHJ5KHRoaXMucmVxdWVzdFVybCxcclxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeShhY3Rpb25QYXlsb2FkKSxcclxuXHRcdFx0XHR0aGlzLnJldHJ5TGltaXQsXHJcblx0XHRcdFx0dGhpcy50aW1lb3V0KTtcclxuXHJcblx0XHRcdGNvbnN0IHRpbWVBZnRlciA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cclxuXHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChMb2dnaW5nLkV2ZW50SWRzLlBFUlNPTkFMSVpFUl9TRVJWSUNFUkVXQVJEUkVTVUxULFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuQ3JpdGljYWwsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0VGltZU1pbGxpc2Vjb25kczogdGltZUFmdGVyIC0gdGltZUJlZm9yZSxcclxuXHRcdFx0XHRcdEh0dHBTdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXHJcblx0XHRcdFx0XHRIdHRwU3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcclxuXHRcdFx0XHRcdEFkZGl0aW9uYWxTdXJ2ZXlJbmZvOiB0aGlzLmJ1aWxkQ29uZmlnVGVsZW1ldHJ5U3RyaW5nKCksXHJcblx0XHRcdFx0XHRDb3JyZWxhdGlvbklkOiB0aGlzLmR5bmFtaWNUcmFuc3BvcnQucmVxdWVzdElkLFxyXG5cdFx0XHRcdFx0Q2FtcGFpZ25JZDogY2FtcGFpZ25JZCxcclxuXHRcdFx0XHRcdFBlcnNvbmFsaXplclVzZXJBY3Rpb246IGFjdGlvblBheWxvYWQuVXNlckFjdGlvbixcclxuXHRcdFx0XHRcdFBlcnNvbmFsaXplckV2ZW50SWQ6IGFjdGlvblBheWxvYWQuRXZlbnRJZCxcclxuXHRcdFx0XHRcdFN1cnZleUlkOiBzdXJ2ZXlJZCxcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpZiAoIXJlc3BvbnNlLm9rKSB7XHJcblx0XHRcdFx0Ly8gRXJyb3Igb24gc2VydmljZSBzaWRlLlxyXG5cdFx0XHRcdHJlc3BvbnNlUmVzdWx0LmVycm9yID0gdHJ1ZTtcclxuXHRcdFx0XHRyZXNwb25zZVJlc3VsdC5lcnJvck1lc3NhZ2UgPSBgU2VydmVyIEVycm9yLCBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfSwgc3RhdHVzIHRleHQ6ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VSZXN1bHQ7XHJcblxyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0cmVzcG9uc2VSZXN1bHQuZXJyb3IgPSB0cnVlO1xyXG5cdFx0XHRyZXNwb25zZVJlc3VsdC5lcnJvck1lc3NhZ2UgPSBgRXJyb3I6ICR7ZXJyb3IudG9TdHJpbmcoKX0sIEVycm9yIHN0YWNrOiAke2Vycm9yLnN0YWNrfWA7XHJcblx0XHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoTG9nZ2luZy5FdmVudElkcy5QRVJTT05BTElaRVJfQ0xJRU5URkFJTFVSRSxcclxuXHRcdFx0XHRMb2dnaW5nLkxvZ0xldmVsLkNyaXRpY2FsLFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdE1lc3NhZ2U6IFwiKFBlcnNvbmFsaXplckNsaWVudC5sb2dVc2VyQWN0aW9uRm9yU3VydmV5QXN5bmMpIEVycm9yIGxvZ2dpbmcgcGVyc29uYWxpemVyIHVzZXIgYWN0aW9uOiBcIiArIHJlc3BvbnNlUmVzdWx0LmVycm9yTWVzc2FnZSxcclxuXHRcdFx0XHRcdENhbXBhaWduSWQ6IGNhbXBhaWduSWQsXHJcblx0XHRcdFx0XHRTdXJ2ZXlJZDogc3VydmV5SWQsXHJcblx0XHRcdFx0XHRQZXJzb25hbGl6ZXJVc2VyQWN0aW9uOiBhY3Rpb25QYXlsb2FkLlVzZXJBY3Rpb24sXHJcblx0XHRcdFx0XHRQZXJzb25hbGl6ZXJFdmVudElkOiBhY3Rpb25QYXlsb2FkLkV2ZW50SWQsXHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlUmVzdWx0O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGdldEV2ZW50SWRGb3JTdXJ2ZXlJZChzdXJ2ZXlJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuXHRcdGlmICghdGhpcy5pbmZvRXhpc3RzRm9yU3VydmV5SWQoc3VydmV5SWQpKSB7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucGVyc29uYWxpemVyU3VydmV5SW5mb3JtYXRpb25NYXBbc3VydmV5SWRdLmV2ZW50SWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgaXNFbmFibGVkKHN1cnZleVR5cGU6IEFwaS5JU3VydmV5LlR5cGUsIGxhdW5jaGVyVHlwZTogc3RyaW5nLCBnb3Zlcm5lZENoYW5uZWxUeXBlOiBHb3Zlcm5lZENoYW5uZWxUeXBlKTogYm9vbGVhbiB7XHJcblx0XHQvLyBPbmx5IGVuYWJsZWQgZm9yOlxyXG5cdFx0Ly8gLSBGUFMgc3VydmV5cyBcclxuXHRcdC8vIC0gTm8gJ2N1c3RvbWVydm9pY2UnIGxhdW5jaGVyIHR5cGUuXHJcblx0XHQvLyAtIEdvdmVybmVkQ2hhbm5lbFR5cGU6IFN0YW5kYXJkIGNoYW5uZWxcclxuXHJcblx0XHRpZiAoc3VydmV5VHlwZSAhPT0gQXBpLklTdXJ2ZXkuVHlwZS5GcHNcclxuXHRcdFx0fHwgbGF1bmNoZXJUeXBlID09PSBDb25zdGFudHMuY3VzdG9tZXJWb2ljZUxhdW5jaGVyVHlwZVxyXG5cdFx0XHR8fCBsYXVuY2hlclR5cGUgPT09IFwiY3VzdG9tdXhcIlxyXG5cdFx0XHR8fCBnb3Zlcm5lZENoYW5uZWxUeXBlICE9PSBHb3Zlcm5lZENoYW5uZWxUeXBlLlN0YW5kYXJkKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wZXJzb25hbGl6ZXJFbmFibGVkO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRWYWxpZGF0ZWRBY3Rpb25QYXlsb2FkRm9yU3VydmV5SWQoc3VydmV5SWQ6IHN0cmluZyk6IElBY3Rpb25QYXlsb2FkIHwgdW5kZWZpbmVkIHtcclxuXHJcblx0XHRpZiAoIXRoaXMuaW5mb0V4aXN0c0ZvclN1cnZleUlkKHN1cnZleUlkKSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHN1cnZleVBlcnNvbmFsaXplckluZm8gPSB0aGlzLnBlcnNvbmFsaXplclN1cnZleUluZm9ybWF0aW9uTWFwW3N1cnZleUlkXTtcclxuXHJcblx0XHRpZiAoVXRpbHMuaXNOT1Uoc3VydmV5UGVyc29uYWxpemVySW5mby5ldmVudElkKSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChVdGlscy5pc05PVShzdXJ2ZXlQZXJzb25hbGl6ZXJJbmZvLnVzZXJBY3Rpb24pXHJcblx0XHRcdHx8IChzdXJ2ZXlQZXJzb25hbGl6ZXJJbmZvLnVzZXJBY3Rpb24gIT09IEVuZFVzZXJBY3Rpb25zLkFjY2VwdFxyXG5cdFx0XHRcdFx0JiYgc3VydmV5UGVyc29uYWxpemVySW5mby51c2VyQWN0aW9uICE9PSBFbmRVc2VyQWN0aW9ucy5DYW5jZWxcclxuXHRcdFx0XHRcdCYmIHN1cnZleVBlcnNvbmFsaXplckluZm8udXNlckFjdGlvbiAhPT0gRW5kVXNlckFjdGlvbnMuSWdub3JlKSkge1xyXG5cclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRVc2VyQWN0aW9uOiBzdXJ2ZXlQZXJzb25hbGl6ZXJJbmZvLnVzZXJBY3Rpb24sXHJcblx0XHRcdEV2ZW50SWQ6IHN1cnZleVBlcnNvbmFsaXplckluZm8uZXZlbnRJZCxcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHZhbGlkYXRlQW5kR2V0QXV0b0Rpc21pc3NUaW1lKGNvbmZpZ1ZhbHVlOiBzdHJpbmcpOiB1bmRlZmluZWQgfCBDb25zdGFudHMuQXV0b0Rpc21pc3NWYWx1ZXMge1xyXG5cclxuXHRcdGlmIChVdGlscy5pc05PVShjb25maWdWYWx1ZSkgfHwgdHlwZW9mKGNvbmZpZ1ZhbHVlKSAhPT0gXCJzdHJpbmdcIikge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIHZhbHVlIHNob3VsZCBiZSBub3QgbnVsbCwgbm90IHVuZGVmaW5lZDsgYSBzdHJpbmcgdGhhdCBwYXJzZXMgdG8gYW4gaW50OyBcclxuXHRcdC8vIGFuIGludCB0aGF0IGlzIGluIHRoZSBBdXRvRGlzbWlzc1RpbWVzIGVudW0gYW5kIGNhbiBiZSBtYXBwZWQgdG8gdGhlIEF1dG9EaXNtaXNzVmFsdWVzIGVudW0uXHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkQ29uZmlnVmFsdWUgPSBwYXJzZUludChjb25maWdWYWx1ZSwgMTApO1xyXG5cclxuXHRcdHN3aXRjaCAocGFyc2VkQ29uZmlnVmFsdWUpIHtcclxuXHRcdFx0Y2FzZSBBdXRvRGlzbWlzc1RpbWVzLk5vQXV0b0Rpc21pc3M6XHJcblx0XHRcdFx0cmV0dXJuIENvbnN0YW50cy5BdXRvRGlzbWlzc1ZhbHVlcy5Ob0F1dG9EaXNtaXNzO1xyXG5cdFx0XHRjYXNlIEF1dG9EaXNtaXNzVGltZXMuU2V2ZW5TZWNvbmRzOlxyXG5cdFx0XHRcdHJldHVybiBDb25zdGFudHMuQXV0b0Rpc21pc3NWYWx1ZXMuU2V2ZW5TZWNvbmRzO1xyXG5cdFx0XHRjYXNlIEF1dG9EaXNtaXNzVGltZXMuRm91cnRlZW5TZWNvbmRzOlxyXG5cdFx0XHRcdHJldHVybiBDb25zdGFudHMuQXV0b0Rpc21pc3NWYWx1ZXMuRm91cnRlZW5TZWNvbmRzO1xyXG5cdFx0XHRjYXNlIEF1dG9EaXNtaXNzVGltZXMuVHdlbnR5T25lU2Vjb25kczpcclxuXHRcdFx0XHRyZXR1cm4gQ29uc3RhbnRzLkF1dG9EaXNtaXNzVmFsdWVzLlR3ZW50eU9uZVNlY29uZHM7XHJcblx0XHRcdGNhc2UgQXV0b0Rpc21pc3NUaW1lcy5Ud2VudHlFaWdodFNlY29uZHM6XHJcblx0XHRcdFx0cmV0dXJuIENvbnN0YW50cy5BdXRvRGlzbWlzc1ZhbHVlcy5Ud2VudHlFaWdodFNlY29uZHM7XHJcblx0XHRcdGNhc2UgQXV0b0Rpc21pc3NUaW1lcy5TaXh0eVNlY29uZHM6XHJcblx0XHRcdFx0cmV0dXJuIENvbnN0YW50cy5BdXRvRGlzbWlzc1ZhbHVlcy5TaXh0eVNlY29uZHM7XHJcblx0XHRcdGNhc2UgQXV0b0Rpc21pc3NUaW1lcy5OaW5ldHlTZWNvbmRzOlxyXG5cdFx0XHRcdHJldHVybiBDb25zdGFudHMuQXV0b0Rpc21pc3NWYWx1ZXMuTmluZXR5U2Vjb25kcztcclxuXHRcdFx0Y2FzZSBBdXRvRGlzbWlzc1RpbWVzLk9uZUh1bmRyZWRBbmRUd2VudHlTZWNvbmRzOlxyXG5cdFx0XHRcdHJldHVybiBDb25zdGFudHMuQXV0b0Rpc21pc3NWYWx1ZXMuT25lSHVuZHJlZEFuZFR3ZW50eVNlY29uZHM7XHJcblx0XHRcdGNhc2UgQXV0b0Rpc21pc3NUaW1lcy5PbmVIdW5kcmVkQW5kRmlmdHlTZWNvbmRzOlxyXG5cdFx0XHRcdHJldHVybiBDb25zdGFudHMuQXV0b0Rpc21pc3NWYWx1ZXMuT25lSHVuZHJlZEFuZEZpZnR5U2Vjb25kcztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBpbmZvRXhpc3RzRm9yU3VydmV5SWQoc3VydmV5SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKFV0aWxzLmlzTk9VKHN1cnZleUlkKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuICFVdGlscy5pc05PVSh0aGlzLnBlcnNvbmFsaXplclN1cnZleUluZm9ybWF0aW9uTWFwW3N1cnZleUlkXSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGJ1aWxkQ29uZmlnVGVsZW1ldHJ5U3RyaW5nKCkge1xyXG5cdFx0Y29uc3Qgb2JqZWN0VGVsZW1ldHJ5ID0ge1xyXG5cdFx0XHRyZXRyeTogdGhpcy5yZXRyeUxpbWl0LFxyXG5cdFx0XHR0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXHJcblx0XHR9O1xyXG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iamVjdFRlbGVtZXRyeSk7XHJcblx0fVxyXG59XHJcblxyXG5jb25zdCBwZXJzb25hbGl6ZXJDbGllbnQ6IFBlcnNvbmFsaXplckNsaWVudCA9IG5ldyBQZXJzb25hbGl6ZXJDbGllbnQoKTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIGN1cnJlbnQgUGVyc29uYWxpemVyIENsaWVudFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldCgpOiBQZXJzb25hbGl6ZXJDbGllbnQge1xyXG5cdHJldHVybiBwZXJzb25hbGl6ZXJDbGllbnQ7XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/Personalizer/PersonalizerClient.ts\n')},"./scripts/app/Polyfills/Fetch.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var whatwg_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! whatwg-fetch */ "./node_modules/whatwg-fetch/fetch.js");\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Qb2x5ZmlsbHMvRmV0Y2gudHM/Y2M3YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQXNCIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvUG9seWZpbGxzL0ZldGNoLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwid2hhdHdnLWZldGNoXCI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/Polyfills/Fetch.ts\n')},"./scripts/app/Polyfills/Promise.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var es6_promise_auto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! es6-promise/auto */ "./node_modules/es6-promise/auto.js");\n/* harmony import */ var es6_promise_auto__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(es6_promise_auto__WEBPACK_IMPORTED_MODULE_0__);\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9Qb2x5ZmlsbHMvUHJvbWlzZS50cz85Zjg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUEwQiIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL1BvbHlmaWxscy9Qcm9taXNlLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwiZXM2LXByb21pc2UvYXV0b1wiO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Polyfills/Promise.ts\n')},"./scripts/app/Screenshot.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createScreenshot", function() { return createScreenshot; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");\n/**\r\n * Screenshot.ts\r\n *\r\n * A module for screenshot. It uses the html2canvas package.\r\n */\r\n\r\nvar html2canvas = __webpack_require__(/*! @karankeswani99/html2canvas */ "./node_modules/@karankeswani99/html2canvas/dist/html2canvas.js");\r\n/**\r\n * Get screenshot\r\n * @param domElement document element or document body\r\n * @param options background color\r\n */\r\nfunction createScreenshot(domElement, options) {\r\n    return html2canvas(domElement || document.body, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ background: "#ffffff" }, options));\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9TY3JlZW5zaG90LnRzPzUwMDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7R0FJRzs7QUFFSCxJQUFNLFdBQVcsR0FBUSxtQkFBTyxDQUFDLG1HQUE2QixDQUFDLENBQUM7QUFFaEU7Ozs7R0FJRztBQUNJLFNBQVMsZ0JBQWdCLENBQUMsVUFBbUIsRUFBRSxPQUFhO0lBQ2xFLE9BQU8sV0FBVyxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLHlEQUFFLFVBQVUsRUFBRSxTQUFTLElBQUssT0FBTyxFQUFHLENBQUM7QUFDeEYsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL1NjcmVlbnNob3QudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogU2NyZWVuc2hvdC50c1xyXG4gKlxyXG4gKiBBIG1vZHVsZSBmb3Igc2NyZWVuc2hvdC4gSXQgdXNlcyB0aGUgaHRtbDJjYW52YXMgcGFja2FnZS5cclxuICovXHJcblxyXG5jb25zdCBodG1sMmNhbnZhczogYW55ID0gcmVxdWlyZShcIkBrYXJhbmtlc3dhbmk5OS9odG1sMmNhbnZhc1wiKTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgc2NyZWVuc2hvdFxyXG4gKiBAcGFyYW0gZG9tRWxlbWVudCBkb2N1bWVudCBlbGVtZW50IG9yIGRvY3VtZW50IGJvZHkgXHJcbiAqIEBwYXJhbSBvcHRpb25zIGJhY2tncm91bmQgY29sb3JcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY3JlZW5zaG90KGRvbUVsZW1lbnQ/OiBvYmplY3QsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEhUTUxDYW52YXNFbGVtZW50PiB7XHJcblx0cmV0dXJuIGh0bWwyY2FudmFzKGRvbUVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSwgeyBiYWNrZ3JvdW5kOiBcIiNmZmZmZmZcIiwgLi4ub3B0aW9ucyB9KTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Screenshot.ts\n')},"./scripts/app/TargetedMessaging/AssetsProvider.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AssetsProvider", function() { return AssetsProvider; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "get", function() { return get; });\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Configuration/DynamicConfiguration */ "./scripts/app/Configuration/DynamicConfiguration.ts");\n/* harmony import */ var _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TargetedMessagingConstants */ "./scripts/app/TargetedMessaging/TargetedMessagingConstants.ts");\n/* harmony import */ var _TargetedMessagingClient__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./TargetedMessagingClient */ "./scripts/app/TargetedMessaging/TargetedMessagingClient.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Utils */ "./scripts/app/Utils.ts");\n/**\r\n * Module that provides campaign definitions,\r\n * governance rules & message metadata from\r\n * targeted messaging service.\r\n */\r\n\r\n\r\n\r\n\r\n\r\nvar AssetsProvider = /** @class */ (function () {\r\n    function AssetsProvider() {\r\n        var _a, _b;\r\n        this.configuration = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__["get"]();\r\n        // Enable TargetedMessaging client only if authCallback is provided\r\n        // This is for cases where existing Floodgate hosts are not yet on-boarded into web surfaces flow\r\n        var floodgateInitOptions = this.configuration && this.configuration.getFloodgateInitOptions();\r\n        var commonInitOptions = this.configuration && this.configuration.getCommonInitOptions();\r\n        var authTokenCallback = floodgateInitOptions && floodgateInitOptions.authTokenCallback;\r\n        if ((authTokenCallback && (authTokenCallback.getAuthToken || authTokenCallback.getUserPuid)) ||\r\n            this.isAugLoopEnabled()) {\r\n            var initOptions = this.configuration.getCommonInitOptions();\r\n            this.tmsgClient = new _TargetedMessagingClient__WEBPACK_IMPORTED_MODULE_3__["TargetedMessagingClient"](initOptions.appId.toString(), "Web" /*platform*/, initOptions.build, initOptions.originalLocale, this.extractCountryFromLocale(initOptions.originalLocale), this.configuration.getSdkSessionId(), floodgateInitOptions.authTokenCallback, floodgateInitOptions.augLoopCallback, floodgateInitOptions.campaignFlights, floodgateInitOptions.campaignQueryParameters, commonInitOptions.ageGroup, commonInitOptions.authenticationType, ((_a = commonInitOptions.telemetryGroup) === null || _a === void 0 ? void 0 : _a.audienceGroup) || ((_b = commonInitOptions.telemetryGroup) === null || _b === void 0 ? void 0 : _b.audience), floodgateInitOptions.messagingServiceSettings);\r\n        }\r\n    }\r\n    /**\r\n     * Get campaign definitions from TMS\r\n     */\r\n    AssetsProvider.prototype.getCampaignDefinitions = function () {\r\n        var debugResponse = Object(_TargetedMessagingClient__WEBPACK_IMPORTED_MODULE_3__["getDebugCampaignDefinitions"])();\r\n        if (debugResponse && debugResponse.content) {\r\n            return Promise.resolve(debugResponse.content);\r\n        }\r\n        if (!this.tmsgClient) {\r\n            return Promise.resolve(null);\r\n        }\r\n        return this.tmsgClient.getContent("CampaignContent" /* campaignContent */)\r\n            .then(function (_a) {\r\n            var content = _a.content;\r\n            return content;\r\n        });\r\n    };\r\n    AssetsProvider.prototype.getCachedCampaignDefinitions = function () {\r\n        var _a;\r\n        return (_a = this.tmsgClient) === null || _a === void 0 ? void 0 : _a.getCachedContent("CampaignContent" /* campaignContent */);\r\n    };\r\n    AssetsProvider.prototype.getUserGovernanceRules = function () {\r\n        if (!this.tmsgClient) {\r\n            return Promise.resolve(null);\r\n        }\r\n        return this.tmsgClient.getContent("UserGovernance" /* userGovernanceRules */)\r\n            .then(function (_a) {\r\n            var content = _a.content;\r\n            return content;\r\n        });\r\n    };\r\n    AssetsProvider.prototype.getMessageMetadata = function () {\r\n        if (!this.tmsgClient) {\r\n            return Promise.resolve(null);\r\n        }\r\n        return this.tmsgClient.getContent("MessageMetadata" /* messageMetadata */)\r\n            .then(function (_a) {\r\n            var content = _a.content;\r\n            return content;\r\n        });\r\n    };\r\n    /**\r\n     * Get TULIPS user facts from AugLoop or GWS endpoint\r\n     */\r\n    AssetsProvider.prototype.getUserFacts = function () {\r\n        var _this = this;\r\n        var debugResponse = Object(_TargetedMessagingClient__WEBPACK_IMPORTED_MODULE_3__["getDebugUserFacts"])();\r\n        if (debugResponse && debugResponse.content) {\r\n            return Promise.resolve(debugResponse.content);\r\n        }\r\n        if (!this.tmsgClient) {\r\n            return Promise.resolve(null);\r\n        }\r\n        // Try to get facts from AL first\r\n        if (this.isAugLoopEnabled()) {\r\n            var timeoutMilliseconds = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_1__["getDynamicSetting"])("TulipsLoadTimeout" /* tulipsLoadTimeout */, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_2__["TULIPS_LOAD_TIMEOUT"]);\r\n            var timeoutPromise = Object(_Utils__WEBPACK_IMPORTED_MODULE_4__["createTimeoutPromise"])(timeoutMilliseconds, this.getAugLoopUserFacts());\r\n            return timeoutPromise\r\n                .then(function (userFacts) { return userFacts; })\r\n                .catch(function () { return _this.getSubstrateUserFacts(); });\r\n        }\r\n        return this.getSubstrateUserFacts();\r\n    };\r\n    AssetsProvider.prototype.getCachedUserFacts = function () {\r\n        var _a;\r\n        return (_a = this.tmsgClient) === null || _a === void 0 ? void 0 : _a.getCachedContent("UserFacts" /* userFacts */);\r\n    };\r\n    AssetsProvider.prototype.setCampaignAction = function (beaconParameters) {\r\n        if (!this.tmsgClient) {\r\n            return;\r\n        }\r\n        var initOptions = this.configuration.getCommonInitOptions();\r\n        var floodgateInitOptions = this.configuration.getFloodgateInitOptions();\r\n        return this.tmsgClient.sendBeaconRequestToService(initOptions.appId.toString(), beaconParameters, "Web" /*platform*/, initOptions.build, initOptions.originalLocale, this.extractCountryFromLocale(initOptions.originalLocale), this.configuration.getSdkSessionId(), floodgateInitOptions.authTokenCallback);\r\n    };\r\n    // Floodgate doesn\'t have country, so we have to use locale as a proxy and extract the country code\r\n    AssetsProvider.prototype.extractCountryFromLocale = function (locale) {\r\n        if (!locale) {\r\n            return undefined;\r\n        }\r\n        var splitLocale = locale.split("-");\r\n        if (splitLocale.length === 2) {\r\n            return splitLocale[1];\r\n        }\r\n        else {\r\n            return undefined;\r\n        }\r\n    };\r\n    AssetsProvider.prototype.getSubstrateUserFacts = function () {\r\n        if (!this.tmsgClient) {\r\n            return Promise.resolve(null);\r\n        }\r\n        return this.tmsgClient.getUserFactsContent("UserFacts" /* userFacts */)\r\n            .then(function (_a) {\r\n            var content = _a.content;\r\n            return content;\r\n        });\r\n    };\r\n    AssetsProvider.prototype.getAugLoopUserFacts = function () {\r\n        if (!this.tmsgClient) {\r\n            return Promise.resolve(null);\r\n        }\r\n        return this.tmsgClient.getAugLoopUserFactsContent("UserFacts" /* userFacts */)\r\n            .then(function (_a) {\r\n            var content = _a.content;\r\n            return content;\r\n        });\r\n    };\r\n    AssetsProvider.prototype.isAugLoopEnabled = function () {\r\n        var _a, _b, _c;\r\n        return (_c = (_b = (_a = this.configuration) === null || _a === void 0 ? void 0 : _a.getFloodgateInitOptions()) === null || _b === void 0 ? void 0 : _b.augLoopCallback) === null || _c === void 0 ? void 0 : _c.isEnabled;\r\n    };\r\n    return AssetsProvider;\r\n}());\r\n\r\nvar assetsProvider;\r\nfunction get() {\r\n    if (!assetsProvider) {\r\n        assetsProvider = new AssetsProvider();\r\n    }\r\n    return assetsProvider;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9Bc3NldHNQcm92aWRlci50cz83MTY4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBTzZEO0FBQ3NCO0FBQ25CO0FBRWtFO0FBRXJGO0FBR2hEO0lBSUM7O1FBQ0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxnRUFBaUIsRUFBRSxDQUFDO1FBRXpDLG1FQUFtRTtRQUNuRSxpR0FBaUc7UUFDakcsSUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNoRyxJQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzFGLElBQU0saUJBQWlCLEdBQUcsb0JBQW9CLElBQUksb0JBQW9CLENBQUMsaUJBQWlCLENBQUM7UUFDekYsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxJQUFJLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQ3pCLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0ZBQXVCLENBQzVDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQzVCLEtBQUssQ0FBQyxZQUFZLEVBQ2xCLFdBQVcsQ0FBQyxLQUFLLEVBQ2pCLFdBQVcsQ0FBQyxjQUFjLEVBQzFCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQ3pELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLEVBQ3BDLG9C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T0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQiw2QkFBdUI7YUFDL0QsSUFBSSxDQUFDLFVBQUMsRUFBNEI7Z0JBQTFCLE9BQU87WUFBd0IsY0FBTztRQUFQLENBQU8sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTyw0Q0FBbUIsR0FBM0I7UUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNyQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsMEJBQTBCLDZCQUF1QjthQUN0RSxJQUFJLENBQUMsVUFBQyxFQUE0QjtnQkFBMUIsT0FBTztZQUF3QixjQUFPO1FBQVAsQ0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLHlDQUFnQixHQUF4Qjs7UUFDQyx5QkFBTyxJQUFJLENBQUMsYUFBYSwwQ0FBRSx1QkFBdUIsNENBQUksZUFBZSwwQ0FBRSxTQUFTLENBQUM7SUFDbEYsQ0FBQztJQUNGLHFCQUFDO0FBQUQsQ0FBQzs7QUFFRCxJQUFJLGNBQThCLENBQUM7QUFFNUIsU0FBUyxHQUFHO0lBQ2xCLElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDcEIsY0FBYyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7S0FDdEM7SUFFRCxPQUFPLGNBQWMsQ0FBQztBQUN2QixDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVGFyZ2V0ZWRNZXNzYWdpbmcvQXNzZXRzUHJvdmlkZXIudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogTW9kdWxlIHRoYXQgcHJvdmlkZXMgY2FtcGFpZ24gZGVmaW5pdGlvbnMsXHJcbiAqIGdvdmVybmFuY2UgcnVsZXMgJiBtZXNzYWdlIG1ldGFkYXRhIGZyb21cclxuICogdGFyZ2V0ZWQgbWVzc2FnaW5nIHNlcnZpY2UuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQXBpIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZVwiO1xyXG5pbXBvcnQgeyBDYW1wYWlnbkRlZmluaXRpb25zIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9Hb3Zlcm5hbmNlL0NhbXBhaWduRGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNwZWMgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0dvdmVybmFuY2UvTWVzc2FnZU1ldGFkYXRhXCI7XHJcbmltcG9ydCB7IFVzZXJHb3Zlcm5hbmNlUnVsZXMgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0dvdmVybmFuY2UvVXNlckdvdmVybmFuY2VSdWxlc1wiO1xyXG5cclxuaW1wb3J0ICogYXMgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi4vQ29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IGdldER5bmFtaWNTZXR0aW5nLCBTZXR0aW5nS2V5IH0gZnJvbSBcIi4uL0NvbmZpZ3VyYXRpb24vRHluYW1pY0NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHsgVFVMSVBTX0xPQURfVElNRU9VVCB9IGZyb20gXCIuL1RhcmdldGVkTWVzc2FnaW5nQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IENvbnRlbnRUeXBlIH0gZnJvbSBcIi4vVGFyZ2V0ZWRNZXNzYWdpbmdDb250ZW50VHlwZVwiO1xyXG5pbXBvcnQgeyBUYXJnZXRlZE1lc3NhZ2luZ0NsaWVudCwgQ29udGVudFJlc3BvbnNlLCBnZXREZWJ1Z0NhbXBhaWduRGVmaW5pdGlvbnMsIGdldERlYnVnVXNlckZhY3RzIH0gZnJvbSBcIi4vVGFyZ2V0ZWRNZXNzYWdpbmdDbGllbnRcIjtcclxuXHJcbmltcG9ydCB7IGNyZWF0ZVRpbWVvdXRQcm9taXNlIH0gZnJvbSBcIi4uL1V0aWxzXCI7XHJcbmltcG9ydCB7IElCZWFjb25QYXJhbWV0ZXJzIH0gZnJvbSBcIi4uL0Zsb29kZ2F0ZUNvcmUvQ29hY2hpbmdVWExhdW5jaGVyRmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2V0c1Byb3ZpZGVyIGltcGxlbWVudHMgQXBpLklBc3NldHNQcm92aWRlciB7XHJcblx0cHJpdmF0ZSBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uLkNvbmZpZ3VyYXRpb247XHJcblx0cHJpdmF0ZSB0bXNnQ2xpZW50OiBUYXJnZXRlZE1lc3NhZ2luZ0NsaWVudDtcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0dGhpcy5jb25maWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbi5nZXQoKTtcclxuXHJcblx0XHQvLyBFbmFibGUgVGFyZ2V0ZWRNZXNzYWdpbmcgY2xpZW50IG9ubHkgaWYgYXV0aENhbGxiYWNrIGlzIHByb3ZpZGVkXHJcblx0XHQvLyBUaGlzIGlzIGZvciBjYXNlcyB3aGVyZSBleGlzdGluZyBGbG9vZGdhdGUgaG9zdHMgYXJlIG5vdCB5ZXQgb24tYm9hcmRlZCBpbnRvIHdlYiBzdXJmYWNlcyBmbG93XHJcblx0XHRjb25zdCBmbG9vZGdhdGVJbml0T3B0aW9ucyA9IHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0Rmxvb2RnYXRlSW5pdE9wdGlvbnMoKTtcclxuXHRcdGNvbnN0IGNvbW1vbkluaXRPcHRpb25zID0gdGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5nZXRDb21tb25Jbml0T3B0aW9ucygpO1xyXG5cdFx0Y29uc3QgYXV0aFRva2VuQ2FsbGJhY2sgPSBmbG9vZGdhdGVJbml0T3B0aW9ucyAmJiBmbG9vZGdhdGVJbml0T3B0aW9ucy5hdXRoVG9rZW5DYWxsYmFjaztcclxuXHRcdGlmICgoYXV0aFRva2VuQ2FsbGJhY2sgJiYgKGF1dGhUb2tlbkNhbGxiYWNrLmdldEF1dGhUb2tlbiB8fCBhdXRoVG9rZW5DYWxsYmFjay5nZXRVc2VyUHVpZCkpIHx8XHJcblx0XHRcdHRoaXMuaXNBdWdMb29wRW5hYmxlZCgpKSB7XHJcblx0XHRcdGNvbnN0IGluaXRPcHRpb25zID0gdGhpcy5jb25maWd1cmF0aW9uLmdldENvbW1vbkluaXRPcHRpb25zKCk7XHJcblx0XHRcdHRoaXMudG1zZ0NsaWVudCA9IG5ldyBUYXJnZXRlZE1lc3NhZ2luZ0NsaWVudChcclxuXHRcdFx0XHRpbml0T3B0aW9ucy5hcHBJZC50b1N0cmluZygpLFxyXG5cdFx0XHRcdFwiV2ViXCIgLypwbGF0Zm9ybSovLFxyXG5cdFx0XHRcdGluaXRPcHRpb25zLmJ1aWxkLFxyXG5cdFx0XHRcdGluaXRPcHRpb25zLm9yaWdpbmFsTG9jYWxlLFxyXG5cdFx0XHRcdHRoaXMuZXh0cmFjdENvdW50cnlGcm9tTG9jYWxlKGluaXRPcHRpb25zLm9yaWdpbmFsTG9jYWxlKSxcclxuXHRcdFx0XHR0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0U2RrU2Vzc2lvbklkKCksXHJcblx0XHRcdFx0Zmxvb2RnYXRlSW5pdE9wdGlvbnMuYXV0aFRva2VuQ2FsbGJhY2ssXHJcblx0XHRcdFx0Zmxvb2RnYXRlSW5pdE9wdGlvbnMuYXVnTG9vcENhbGxiYWNrLFxyXG5cdFx0XHRcdGZsb29kZ2F0ZUluaXRPcHRpb25zLmNhbXBhaWduRmxpZ2h0cyxcclxuXHRcdFx0XHRmbG9vZGdhdGVJbml0T3B0aW9ucy5jYW1wYWlnblF1ZXJ5UGFyYW1ldGVycyxcclxuXHRcdFx0XHRjb21tb25Jbml0T3B0aW9ucy5hZ2VHcm91cCxcclxuXHRcdFx0XHRjb21tb25Jbml0T3B0aW9ucy5hdXRoZW50aWNhdGlvblR5cGUsXHJcblx0XHRcdFx0Y29tbW9uSW5pdE9wdGlvbnMudGVsZW1ldHJ5R3JvdXA/LmF1ZGllbmNlR3JvdXAgfHwgY29tbW9uSW5pdE9wdGlvbnMudGVsZW1ldHJ5R3JvdXA/LmF1ZGllbmNlLFxyXG5cdFx0XHRcdGZsb29kZ2F0ZUluaXRPcHRpb25zLm1lc3NhZ2luZ1NlcnZpY2VTZXR0aW5nc1xyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0IGNhbXBhaWduIGRlZmluaXRpb25zIGZyb20gVE1TXHJcblx0ICovXHJcblx0cHVibGljIGdldENhbXBhaWduRGVmaW5pdGlvbnMoKTogUHJvbWlzZTxDYW1wYWlnbkRlZmluaXRpb25zPiB7XHJcblx0XHRjb25zdCBkZWJ1Z1Jlc3BvbnNlID0gZ2V0RGVidWdDYW1wYWlnbkRlZmluaXRpb25zKCk7XHJcblx0XHRpZiAoZGVidWdSZXNwb25zZSAmJiBkZWJ1Z1Jlc3BvbnNlLmNvbnRlbnQpIHtcclxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkZWJ1Z1Jlc3BvbnNlLmNvbnRlbnQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghdGhpcy50bXNnQ2xpZW50KSB7XHJcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudG1zZ0NsaWVudC5nZXRDb250ZW50KENvbnRlbnRUeXBlLmNhbXBhaWduQ29udGVudClcclxuXHRcdFx0LnRoZW4oKHsgY29udGVudCB9OiBDb250ZW50UmVzcG9uc2UpID0+IGNvbnRlbnQpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENhY2hlZENhbXBhaWduRGVmaW5pdGlvbnMoKTogQ2FtcGFpZ25EZWZpbml0aW9ucyB7XHJcblx0XHRyZXR1cm4gdGhpcy50bXNnQ2xpZW50Py5nZXRDYWNoZWRDb250ZW50KENvbnRlbnRUeXBlLmNhbXBhaWduQ29udGVudCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0VXNlckdvdmVybmFuY2VSdWxlcygpOiBQcm9taXNlPFVzZXJHb3Zlcm5hbmNlUnVsZXM+IHtcclxuXHRcdGlmICghdGhpcy50bXNnQ2xpZW50KSB7XHJcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudG1zZ0NsaWVudC5nZXRDb250ZW50KENvbnRlbnRUeXBlLnVzZXJHb3Zlcm5hbmNlUnVsZXMpXHJcblx0XHRcdC50aGVuKCh7IGNvbnRlbnQgfTogQ29udGVudFJlc3BvbnNlKSA9PiBjb250ZW50KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRNZXNzYWdlTWV0YWRhdGEoKTogUHJvbWlzZTxNZXNzYWdlU3BlYz4ge1xyXG5cdFx0aWYgKCF0aGlzLnRtc2dDbGllbnQpIHtcclxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy50bXNnQ2xpZW50LmdldENvbnRlbnQoQ29udGVudFR5cGUubWVzc2FnZU1ldGFkYXRhKVxyXG5cdFx0XHQudGhlbigoeyBjb250ZW50IH06IENvbnRlbnRSZXNwb25zZSkgPT4gY29udGVudCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgVFVMSVBTIHVzZXIgZmFjdHMgZnJvbSBBdWdMb29wIG9yIEdXUyBlbmRwb2ludFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRVc2VyRmFjdHMoKTogUHJvbWlzZTxBcGkuSVVzZXJGYWN0W10+IHtcclxuXHRcdGNvbnN0IGRlYnVnUmVzcG9uc2UgPSBnZXREZWJ1Z1VzZXJGYWN0cygpO1xyXG5cdFx0aWYgKGRlYnVnUmVzcG9uc2UgJiYgZGVidWdSZXNwb25zZS5jb250ZW50KSB7XHJcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZGVidWdSZXNwb25zZS5jb250ZW50KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXRoaXMudG1zZ0NsaWVudCkge1xyXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFRyeSB0byBnZXQgZmFjdHMgZnJvbSBBTCBmaXJzdFxyXG5cdFx0aWYgKHRoaXMuaXNBdWdMb29wRW5hYmxlZCgpKSB7XHJcblx0XHRcdGNvbnN0IHRpbWVvdXRNaWxsaXNlY29uZHMgPSBnZXREeW5hbWljU2V0dGluZyhTZXR0aW5nS2V5LnR1bGlwc0xvYWRUaW1lb3V0LCBUVUxJUFNfTE9BRF9USU1FT1VUKTtcclxuXHRcdFx0Y29uc3QgdGltZW91dFByb21pc2UgPSBjcmVhdGVUaW1lb3V0UHJvbWlzZSh0aW1lb3V0TWlsbGlzZWNvbmRzLCB0aGlzLmdldEF1Z0xvb3BVc2VyRmFjdHMoKSk7XHJcblx0XHRcdHJldHVybiB0aW1lb3V0UHJvbWlzZVxyXG5cdFx0XHRcdC50aGVuKHVzZXJGYWN0cyA9PiB1c2VyRmFjdHMpXHJcblx0XHRcdFx0LmNhdGNoKCgpID0+IHRoaXMuZ2V0U3Vic3RyYXRlVXNlckZhY3RzKCkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmdldFN1YnN0cmF0ZVVzZXJGYWN0cygpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENhY2hlZFVzZXJGYWN0cygpOiBBcGkuSVVzZXJGYWN0W10ge1xyXG5cdFx0cmV0dXJuIHRoaXMudG1zZ0NsaWVudD8uZ2V0Q2FjaGVkQ29udGVudChDb250ZW50VHlwZS51c2VyRmFjdHMpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldENhbXBhaWduQWN0aW9uKGJlYWNvblBhcmFtZXRlcnM6IElCZWFjb25QYXJhbWV0ZXJzKTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRpZiAoIXRoaXMudG1zZ0NsaWVudCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaW5pdE9wdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKTtcclxuXHRcdGNvbnN0IGZsb29kZ2F0ZUluaXRPcHRpb25zID0gdGhpcy5jb25maWd1cmF0aW9uLmdldEZsb29kZ2F0ZUluaXRPcHRpb25zKCk7XHJcblx0XHRyZXR1cm4gdGhpcy50bXNnQ2xpZW50LnNlbmRCZWFjb25SZXF1ZXN0VG9TZXJ2aWNlKFxyXG5cdFx0XHRpbml0T3B0aW9ucy5hcHBJZC50b1N0cmluZygpLFxyXG5cdFx0XHRiZWFjb25QYXJhbWV0ZXJzLFxyXG5cdFx0XHRcIldlYlwiIC8qcGxhdGZvcm0qLyxcclxuXHRcdFx0aW5pdE9wdGlvbnMuYnVpbGQsXHJcblx0XHRcdGluaXRPcHRpb25zLm9yaWdpbmFsTG9jYWxlLFxyXG5cdFx0XHR0aGlzLmV4dHJhY3RDb3VudHJ5RnJvbUxvY2FsZShpbml0T3B0aW9ucy5vcmlnaW5hbExvY2FsZSksXHJcblx0XHRcdHRoaXMuY29uZmlndXJhdGlvbi5nZXRTZGtTZXNzaW9uSWQoKSxcclxuXHRcdFx0Zmxvb2RnYXRlSW5pdE9wdGlvbnMuYXV0aFRva2VuQ2FsbGJhY2spO1xyXG5cdH1cclxuXHJcblx0Ly8gRmxvb2RnYXRlIGRvZXNuJ3QgaGF2ZSBjb3VudHJ5LCBzbyB3ZSBoYXZlIHRvIHVzZSBsb2NhbGUgYXMgYSBwcm94eSBhbmQgZXh0cmFjdCB0aGUgY291bnRyeSBjb2RlXHJcblx0cHJpdmF0ZSBleHRyYWN0Q291bnRyeUZyb21Mb2NhbGUobG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcclxuXHRcdGlmICghbG9jYWxlKSB7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc3BsaXRMb2NhbGUgPSBsb2NhbGUuc3BsaXQoXCItXCIpO1xyXG5cdFx0aWYgKHNwbGl0TG9jYWxlLmxlbmd0aCA9PT0gMikge1xyXG5cdFx0XHRyZXR1cm4gc3BsaXRMb2NhbGVbMV07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRTdWJzdHJhdGVVc2VyRmFjdHMoKTogUHJvbWlzZTxBcGkuSVVzZXJGYWN0W10+IHtcclxuXHRcdGlmICghdGhpcy50bXNnQ2xpZW50KSB7XHJcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudG1zZ0NsaWVudC5nZXRVc2VyRmFjdHNDb250ZW50KENvbnRlbnRUeXBlLnVzZXJGYWN0cylcclxuXHRcdFx0LnRoZW4oKHsgY29udGVudCB9OiBDb250ZW50UmVzcG9uc2UpID0+IGNvbnRlbnQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRBdWdMb29wVXNlckZhY3RzKCk6IFByb21pc2U8QXBpLklVc2VyRmFjdFtdPiB7XHJcblx0XHRpZiAoIXRoaXMudG1zZ0NsaWVudCkge1xyXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnRtc2dDbGllbnQuZ2V0QXVnTG9vcFVzZXJGYWN0c0NvbnRlbnQoQ29udGVudFR5cGUudXNlckZhY3RzKVxyXG5cdFx0XHQudGhlbigoeyBjb250ZW50IH06IENvbnRlbnRSZXNwb25zZSkgPT4gY29udGVudCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGlzQXVnTG9vcEVuYWJsZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uPy5nZXRGbG9vZGdhdGVJbml0T3B0aW9ucygpPy5hdWdMb29wQ2FsbGJhY2s/LmlzRW5hYmxlZDtcclxuXHR9XHJcbn1cclxuXHJcbmxldCBhc3NldHNQcm92aWRlcjogQXNzZXRzUHJvdmlkZXI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0KCkge1xyXG5cdGlmICghYXNzZXRzUHJvdmlkZXIpIHtcclxuXHRcdGFzc2V0c1Byb3ZpZGVyID0gbmV3IEFzc2V0c1Byb3ZpZGVyKCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gYXNzZXRzUHJvdmlkZXI7XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/TargetedMessaging/AssetsProvider.ts\n')},"./scripts/app/TargetedMessaging/AugLoopHelper.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAugLoopAnnotationData", function() { return getAugLoopAnnotationData; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");\n/* harmony import */ var _augloop_types_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @augloop/types-core */ "./node_modules/@augloop/types-core/dist/src/index.js");\n/* harmony import */ var _augloop_types_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_augloop_types_core__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Configuration/DynamicConfiguration */ "./scripts/app/Configuration/DynamicConfiguration.ts");\n/* harmony import */ var _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./TargetedMessagingConstants */ "./scripts/app/TargetedMessaging/TargetedMessagingConstants.ts");\n/*\r\n * AugLoopHelper.ts\r\n */\r\n\r\n\r\n\r\n\r\nfunction sleep(milliseconds) {\r\n    return new Promise(function (resolve) {\r\n        setTimeout(resolve, milliseconds);\r\n    });\r\n}\r\nfunction getObjectProperty(targetObject, propertyName) {\r\n    var propertyValue = targetObject && targetObject[propertyName];\r\n    return (propertyValue || Object.getOwnPropertyDescriptor(targetObject, propertyName)) ? propertyValue : undefined;\r\n}\r\n// listen to property change on targetObject and return the value when it is set\r\nfunction getDelayDefinedObjectValue(targetObject, propertyName) {\r\n    if (!targetObject) {\r\n        return Promise.resolve(null);\r\n    }\r\n    var currentPropertyValue = getObjectProperty(targetObject, propertyName);\r\n    if (currentPropertyValue) {\r\n        return Promise.resolve(currentPropertyValue);\r\n    }\r\n    return new Promise(function (resolve, reject) {\r\n        var propertyValue;\r\n        Object.defineProperty(targetObject, propertyName, {\r\n            configurable: true,\r\n            enumerable: true,\r\n            get: function () { return propertyValue; },\r\n            set: function (newValue) {\r\n                propertyValue = newValue;\r\n                resolve(propertyValue);\r\n            },\r\n        });\r\n    });\r\n}\r\nfunction getDelayDefinedValueWithWait(targetObject, propertyName, retryTimes, delay) {\r\n    if (delay === void 0) { delay = 100; }\r\n    return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n        var definedProperty;\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n            switch (_a.label) {\r\n                case 0:\r\n                    definedProperty = getObjectProperty(targetObject, propertyName);\r\n                    if (definedProperty || retryTimes === 0) {\r\n                        return [2 /*return*/, definedProperty];\r\n                    }\r\n                    return [4 /*yield*/, sleep(delay)];\r\n                case 1:\r\n                    _a.sent();\r\n                    return [2 /*return*/, getDelayDefinedValueWithWait(targetObject, propertyName, retryTimes - 1, delay)];\r\n            }\r\n        });\r\n    });\r\n}\r\n// Invoke AL calls and get the data\r\nfunction getAnnotationData(augLoopSession, annotationName) {\r\n    return new Promise(function (resolve, reject) {\r\n        augLoopSession.activateAnnotation(annotationName, {\r\n            callback: function (operation) {\r\n                try {\r\n                    var operationItems = operation && operation.items ? operation.items : [];\r\n                    var schemaObjects = operationItems.filter(function (item) { return annotationName === _augloop_types_core__WEBPACK_IMPORTED_MODULE_1__["SchemaObject"].getTypeNameFor(item.body); });\r\n                    resolve(schemaObjects && schemaObjects[0] && schemaObjects[0].body);\r\n                }\r\n                catch (error) {\r\n                    resolve({ error: error });\r\n                }\r\n            },\r\n        });\r\n    });\r\n}\r\n// Get the Augloop global object - window.augLoop\r\nfunction getGlobalAugLoopRuntime(loadDelay) {\r\n    if (loadDelay === void 0) { loadDelay = 100; }\r\n    return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n        var augLoopRuntime, delayLoadTime, retryTimes;\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n            switch (_a.label) {\r\n                case 0:\r\n                    augLoopRuntime = getObjectProperty(window, "augLoop");\r\n                    if (!!augLoopRuntime) return [3 /*break*/, 7];\r\n                    delayLoadTime = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_2__["getDynamicSetting"])("TulipsAugLoopPackageDelayLoad" /* tulipsAugLoopPackageDelayLoad */, -1);\r\n                    if (!(delayLoadTime > 0)) return [3 /*break*/, 2];\r\n                    // wait for augloop to load after sometime\r\n                    return [4 /*yield*/, sleep(delayLoadTime)];\r\n                case 1:\r\n                    // wait for augloop to load after sometime\r\n                    _a.sent();\r\n                    augLoopRuntime = getObjectProperty(window, "augLoop");\r\n                    return [3 /*break*/, 7];\r\n                case 2:\r\n                    retryTimes = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_2__["getDynamicSetting"])("TulipsAugLoopLoadRetryTimes" /* tulipsAugLoopLoadRetryTimes */, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_3__["AUGLOOP_INIT_CHECK_RETRY_TIMES"]);\r\n                    return [4 /*yield*/, getDelayDefinedValueWithWait(window, "augLoop", retryTimes, loadDelay)];\r\n                case 3:\r\n                    augLoopRuntime = _a.sent();\r\n                    if (!!augLoopRuntime) return [3 /*break*/, 5];\r\n                    return [4 /*yield*/, getDelayDefinedObjectValue(window, "augLoop")];\r\n                case 4:\r\n                    // Wait for augloop to mount on window\r\n                    augLoopRuntime = _a.sent();\r\n                    _a.label = 5;\r\n                case 5:\r\n                    if (!(loadDelay > 0)) return [3 /*break*/, 7];\r\n                    return [4 /*yield*/, sleep(loadDelay)];\r\n                case 6:\r\n                    _a.sent();\r\n                    _a.label = 7;\r\n                case 7: return [2 /*return*/, augLoopRuntime];\r\n            }\r\n        });\r\n    });\r\n}\r\nfunction getAugLoopAnnotationData(annotationName, getRuntimeSession, loadDelay) {\r\n    if (loadDelay === void 0) { loadDelay = 100; }\r\n    return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n        var augLoopSession, _a, augLoopRuntime, augLoopSessionPromise;\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_b) {\r\n            switch (_b.label) {\r\n                case 0:\r\n                    _a = getRuntimeSession;\r\n                    if (!_a) return [3 /*break*/, 2];\r\n                    return [4 /*yield*/, getRuntimeSession()];\r\n                case 1:\r\n                    _a = (_b.sent());\r\n                    _b.label = 2;\r\n                case 2:\r\n                    augLoopSession = _a;\r\n                    if (!!augLoopSession) return [3 /*break*/, 5];\r\n                    return [4 /*yield*/, getGlobalAugLoopRuntime(loadDelay)];\r\n                case 3:\r\n                    augLoopRuntime = _b.sent();\r\n                    if (!augLoopRuntime) {\r\n                        throw new Error("Unable to get AL runtime");\r\n                    }\r\n                    augLoopSessionPromise = window.augLoop.ALFactoryGlobal.getAugLoopRuntimeManager().getSession();\r\n                    if (!augLoopSessionPromise) {\r\n                        throw new Error("Unable to get AL session promise");\r\n                    }\r\n                    return [4 /*yield*/, augLoopSessionPromise];\r\n                case 4:\r\n                    augLoopSession = _b.sent();\r\n                    if (!augLoopSession) {\r\n                        throw new Error("Unable to get AL session");\r\n                    }\r\n                    _b.label = 5;\r\n                case 5: return [2 /*return*/, getAnnotationData(augLoopSession, annotationName)];\r\n            }\r\n        });\r\n    });\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9BdWdMb29wSGVscGVyLnRzPzlmMjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7R0FFRzs7QUFHMkU7QUFDUTtBQUNSO0FBTTlFLFNBQVMsS0FBSyxDQUFDLFlBQW9CO0lBQ2xDLE9BQU8sSUFBSSxPQUFPLENBQU8saUJBQU87UUFDL0IsVUFBVSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFJLFlBQWlCLEVBQUUsWUFBb0I7SUFDcEUsSUFBTSxhQUFhLEdBQUcsWUFBWSxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRSxPQUFPLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDbkgsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixTQUFTLDBCQUEwQixDQUFJLFlBQWlCLEVBQUUsWUFBb0I7SUFDN0UsSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNsQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDN0I7SUFFRCxJQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFJLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5RSxJQUFJLG9CQUFvQixFQUFFO1FBQ3pCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0tBQzdDO0lBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO1FBQ2xDLElBQUksYUFBZ0IsQ0FBQztRQUNyQixNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksRUFB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Q3RDLGNBQWMsR0FBRyxTQUFtRCxDQUFDOzs7eUJBR2xFLFVBQVMsR0FBRyxDQUFDLEdBQWIsd0JBQWE7b0JBQ2hCLHFCQUFNLEtBQUssQ0FBQyxTQUFTLENBQUM7O29CQUF0QixTQUFzQixDQUFDOzt3QkFLMUIsc0JBQU8sY0FBYyxFQUFDOzs7O0NBQ3RCO0FBRU0sU0FBZSx3QkFBd0IsQ0FDN0MsY0FBc0IsRUFDdEIsaUJBQTJDLEVBQzNDLFNBQWU7SUFBZiwyQ0FBZTs7Ozs7O29CQUNNLHNCQUFpQjs2QkFBakIsd0JBQWlCO29CQUFJLHFCQUFNLGlCQUFpQixFQUFFOzswQkFBekIsU0FBeUI7OztvQkFBL0QsY0FBYyxLQUFpRDt5QkFDL0QsQ0FBQyxjQUFjLEVBQWYsd0JBQWU7b0JBQ0sscUJBQU0sdUJBQXVCLENBQUMsU0FBUyxDQUFDOztvQkFBekQsY0FBYyxHQUFHLFNBQXdDO29CQUMvRCxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7cUJBQzVDO29CQUVLLHFCQUFxQixHQUFJLE1BQWMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLHdCQUF3QixFQUFFLENBQUMsVUFBVSxFQUF1QixDQUFDO29CQUNuSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7d0JBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztxQkFDcEQ7b0JBRWdCLHFCQUFNLHFCQUFxQjs7b0JBQTVDLGNBQWMsR0FBRyxTQUEyQixDQUFDO29CQUM3QyxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7cUJBQzVDOzt3QkFHRixzQkFBTyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLEVBQUM7Ozs7Q0FDekQiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9BdWdMb29wSGVscGVyLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQXVnTG9vcEhlbHBlci50c1xyXG4gKi9cclxuXHJcbmltcG9ydCB7IElTZXNzaW9uIH0gZnJvbSBcIkBhdWdsb29wL3J1bnRpbWUtY2xpZW50XCI7XHJcbmltcG9ydCB7IElPcGVyYXRpb24sIElTY2hlbWFPYmplY3QsIFNjaGVtYU9iamVjdCB9IGZyb20gXCJAYXVnbG9vcC90eXBlcy1jb3JlXCI7XHJcbmltcG9ydCB7IGdldER5bmFtaWNTZXR0aW5nLCBTZXR0aW5nS2V5IH0gZnJvbSBcIi4uL0NvbmZpZ3VyYXRpb24vRHluYW1pY0NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHsgQVVHTE9PUF9JTklUX0NIRUNLX1JFVFJZX1RJTUVTIH0gZnJvbSBcIi4vVGFyZ2V0ZWRNZXNzYWdpbmdDb25zdGFudHNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUF1Z0xvb3BSZXNwb25zZSBleHRlbmRzIElTY2hlbWFPYmplY3Qge1xyXG5cdGVycm9yPzogYW55O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzbGVlcChtaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG5cdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcclxuXHRcdHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKTtcclxuXHR9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0T2JqZWN0UHJvcGVydHk8VD4odGFyZ2V0T2JqZWN0OiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nKTogVCB7XHJcblx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IHRhcmdldE9iamVjdCAmJiB0YXJnZXRPYmplY3RbcHJvcGVydHlOYW1lXTtcclxuXHRyZXR1cm4gKHByb3BlcnR5VmFsdWUgfHwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXRPYmplY3QsIHByb3BlcnR5TmFtZSkpID8gcHJvcGVydHlWYWx1ZSA6IHVuZGVmaW5lZDtcclxufVxyXG5cclxuLy8gbGlzdGVuIHRvIHByb3BlcnR5IGNoYW5nZSBvbiB0YXJnZXRPYmplY3QgYW5kIHJldHVybiB0aGUgdmFsdWUgd2hlbiBpdCBpcyBzZXRcclxuZnVuY3Rpb24gZ2V0RGVsYXlEZWZpbmVkT2JqZWN0VmFsdWU8VD4odGFyZ2V0T2JqZWN0OiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxUPiB7XHJcblx0aWYgKCF0YXJnZXRPYmplY3QpIHtcclxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XHJcblx0fVxyXG5cclxuXHRjb25zdCBjdXJyZW50UHJvcGVydHlWYWx1ZSA9IGdldE9iamVjdFByb3BlcnR5PFQ+KHRhcmdldE9iamVjdCwgcHJvcGVydHlOYW1lKTtcclxuXHRpZiAoY3VycmVudFByb3BlcnR5VmFsdWUpIHtcclxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoY3VycmVudFByb3BlcnR5VmFsdWUpO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdGxldCBwcm9wZXJ0eVZhbHVlOiBUO1xyXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldE9iamVjdCwgcHJvcGVydHlOYW1lLCB7XHJcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcclxuXHRcdFx0Z2V0OiAoKSA9PiBwcm9wZXJ0eVZhbHVlLFxyXG5cdFx0XHRzZXQ6IChuZXdWYWx1ZTogVCkgPT4ge1xyXG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBuZXdWYWx1ZTtcclxuXHRcdFx0XHRyZXNvbHZlKHByb3BlcnR5VmFsdWUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblx0fSk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldERlbGF5RGVmaW5lZFZhbHVlV2l0aFdhaXQ8VD4odGFyZ2V0T2JqZWN0OiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nLCByZXRyeVRpbWVzOiBudW1iZXIsIGRlbGF5ID0gMTAwKTogUHJvbWlzZTxUPiB7XHJcblx0Y29uc3QgZGVmaW5lZFByb3BlcnR5ID0gZ2V0T2JqZWN0UHJvcGVydHkodGFyZ2V0T2JqZWN0LCBwcm9wZXJ0eU5hbWUpIGFzIFQ7XHJcblx0aWYgKGRlZmluZWRQcm9wZXJ0eSB8fCByZXRyeVRpbWVzID09PSAwKSB7XHJcblx0XHRyZXR1cm4gZGVmaW5lZFByb3BlcnR5O1xyXG5cdH1cclxuXHJcblx0YXdhaXQgc2xlZXAoZGVsYXkpO1xyXG5cdHJldHVybiBnZXREZWxheURlZmluZWRWYWx1ZVdpdGhXYWl0KHRhcmdldE9iamVjdCwgcHJvcGVydHlOYW1lLCByZXRyeVRpbWVzIC0gMSwgZGVsYXkpO1xyXG59XHJcblxyXG4vLyBJbnZva2UgQUwgY2FsbHMgYW5kIGdldCB0aGUgZGF0YVxyXG5mdW5jdGlvbiBnZXRBbm5vdGF0aW9uRGF0YShhdWdMb29wU2Vzc2lvbjogSVNlc3Npb24sIGFubm90YXRpb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPElBdWdMb29wUmVzcG9uc2U+IHtcclxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0YXVnTG9vcFNlc3Npb24uYWN0aXZhdGVBbm5vdGF0aW9uKGFubm90YXRpb25OYW1lLCB7XHJcblx0XHRcdGNhbGxiYWNrOiAob3BlcmF0aW9uOiBJT3BlcmF0aW9uKSA9PiB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGNvbnN0IG9wZXJhdGlvbkl0ZW1zID0gb3BlcmF0aW9uICYmIG9wZXJhdGlvbi5pdGVtcyA/IG9wZXJhdGlvbi5pdGVtcyA6IFtdO1xyXG5cdFx0XHRcdFx0Y29uc3Qgc2NoZW1hT2JqZWN0cyA9IG9wZXJhdGlvbkl0ZW1zLmZpbHRlcihpdGVtID0+IGFubm90YXRpb25OYW1lID09PSBTY2hlbWFPYmplY3QuZ2V0VHlwZU5hbWVGb3IoaXRlbS5ib2R5KSk7XHJcblx0XHRcdFx0XHRyZXNvbHZlKHNjaGVtYU9iamVjdHMgJiYgc2NoZW1hT2JqZWN0c1swXSAmJiBzY2hlbWFPYmplY3RzWzBdLmJvZHkpO1xyXG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0XHRyZXNvbHZlKHtlcnJvcjogZXJyb3J9IGFzIGFueSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIEdldCB0aGUgQXVnbG9vcCBnbG9iYWwgb2JqZWN0IC0gd2luZG93LmF1Z0xvb3BcclxuYXN5bmMgZnVuY3Rpb24gZ2V0R2xvYmFsQXVnTG9vcFJ1bnRpbWUobG9hZERlbGF5ID0gMTAwKSB7XHJcblx0Ly8gdHJ5IHRvIGdldCB0aGUgYXVnbG9vcCBnbG9iYWwgcnVudGltZSB3aW5kb3cuYXVnTG9vcFxyXG5cdGxldCBhdWdMb29wUnVudGltZSA9IGdldE9iamVjdFByb3BlcnR5KHdpbmRvdywgXCJhdWdMb29wXCIpO1xyXG5cdGlmICghYXVnTG9vcFJ1bnRpbWUpIHtcclxuXHRcdGNvbnN0IGRlbGF5TG9hZFRpbWUgPSBnZXREeW5hbWljU2V0dGluZyhTZXR0aW5nS2V5LnR1bGlwc0F1Z0xvb3BQYWNrYWdlRGVsYXlMb2FkLCAtMSk7XHJcblx0XHRpZiAoZGVsYXlMb2FkVGltZSA+IDApIHtcclxuXHRcdFx0Ly8gd2FpdCBmb3IgYXVnbG9vcCB0byBsb2FkIGFmdGVyIHNvbWV0aW1lXHJcblx0XHRcdGF3YWl0IHNsZWVwKGRlbGF5TG9hZFRpbWUpO1xyXG5cdFx0XHRhdWdMb29wUnVudGltZSA9IGdldE9iamVjdFByb3BlcnR5KHdpbmRvdywgXCJhdWdMb29wXCIpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc3QgcmV0cnlUaW1lcyA9IGdldER5bmFtaWNTZXR0aW5nKFNldHRpbmdLZXkudHVsaXBzQXVnTG9vcExvYWRSZXRyeVRpbWVzLCBBVUdMT09QX0lOSVRfQ0hFQ0tfUkVUUllfVElNRVMpO1xyXG5cdFx0XHRhdWdMb29wUnVudGltZSA9IGF3YWl0IGdldERlbGF5RGVmaW5lZFZhbHVlV2l0aFdhaXQod2luZG93LCBcImF1Z0xvb3BcIiwgcmV0cnlUaW1lcywgbG9hZERlbGF5KTtcclxuXHRcdFx0aWYgKCFhdWdMb29wUnVudGltZSkge1xyXG5cdFx0XHRcdC8vIFdhaXQgZm9yIGF1Z2xvb3AgdG8gbW91bnQgb24gd2luZG93XHJcblx0XHRcdFx0YXVnTG9vcFJ1bnRpbWUgPSBhd2FpdCBnZXREZWxheURlZmluZWRPYmplY3RWYWx1ZSh3aW5kb3csIFwiYXVnTG9vcFwiKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGxvYWREZWxheSA+IDApIHtcclxuXHRcdFx0XHRhd2FpdCBzbGVlcChsb2FkRGVsYXkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gYXVnTG9vcFJ1bnRpbWU7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdWdMb29wQW5ub3RhdGlvbkRhdGEoXHJcblx0YW5ub3RhdGlvbk5hbWU6IHN0cmluZyxcclxuXHRnZXRSdW50aW1lU2Vzc2lvbj86ICgpID0+IFByb21pc2U8SVNlc3Npb24+LFxyXG5cdGxvYWREZWxheSA9IDEwMCk6IFByb21pc2U8SVNjaGVtYU9iamVjdD4ge1xyXG5cdGxldCBhdWdMb29wU2Vzc2lvbiA9IGdldFJ1bnRpbWVTZXNzaW9uICYmIGF3YWl0IGdldFJ1bnRpbWVTZXNzaW9uKCk7XHJcblx0aWYgKCFhdWdMb29wU2Vzc2lvbikge1xyXG5cdFx0Y29uc3QgYXVnTG9vcFJ1bnRpbWUgPSBhd2FpdCBnZXRHbG9iYWxBdWdMb29wUnVudGltZShsb2FkRGVsYXkpO1xyXG5cdFx0aWYgKCFhdWdMb29wUnVudGltZSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZ2V0IEFMIHJ1bnRpbWVcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYXVnTG9vcFNlc3Npb25Qcm9taXNlID0gKHdpbmRvdyBhcyBhbnkpLmF1Z0xvb3AuQUxGYWN0b3J5R2xvYmFsLmdldEF1Z0xvb3BSdW50aW1lTWFuYWdlcigpLmdldFNlc3Npb24oKSBhcyBQcm9taXNlPElTZXNzaW9uPjtcclxuXHRcdGlmICghYXVnTG9vcFNlc3Npb25Qcm9taXNlKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgQUwgc2Vzc2lvbiBwcm9taXNlXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGF1Z0xvb3BTZXNzaW9uID0gYXdhaXQgYXVnTG9vcFNlc3Npb25Qcm9taXNlO1xyXG5cdFx0aWYgKCFhdWdMb29wU2Vzc2lvbikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZ2V0IEFMIHNlc3Npb25cIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZ2V0QW5ub3RhdGlvbkRhdGEoYXVnTG9vcFNlc3Npb24sIGFubm90YXRpb25OYW1lKTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/TargetedMessaging/AugLoopHelper.ts\n')},"./scripts/app/TargetedMessaging/LocalUserFactHelper.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createUserFact", function() { return createUserFact; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocalUserFact", function() { return getLocalUserFact; });\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore */ "../FloodgateCore/dist/index.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/*\r\n * LocalUserFactHelper.ts\r\n */\r\n\r\n\r\n\r\nfunction getBrowserSettings() {\r\n    try {\r\n        // Screen dimensions\r\n        var documentElement = document && (document.documentElement || document.getElementsByTagName("body")[0]);\r\n        var browserSettings = {\r\n            pageWidth: (window === null || window === void 0 ? void 0 : window.innerWidth) || (documentElement === null || documentElement === void 0 ? void 0 : documentElement.clientWidth),\r\n            pageHeight: (window === null || window === void 0 ? void 0 : window.innerHeight) || (documentElement === null || documentElement === void 0 ? void 0 : documentElement.clientHeight),\r\n            pageTop: (window === null || window === void 0 ? void 0 : window.pageYOffset) || (documentElement === null || documentElement === void 0 ? void 0 : documentElement.scrollTop),\r\n            pageLeft: (window === null || window === void 0 ? void 0 : window.pageXOffset) || (documentElement === null || documentElement === void 0 ? void 0 : documentElement.scrollLeft),\r\n            screenWidth: screen ? screen.width : 0,\r\n            screenHeight: screen ? screen.height : 0,\r\n            colorDepth: screen ? screen.colorDepth : 0,\r\n            userAgent: navigator === null || navigator === void 0 ? void 0 : navigator.userAgent,\r\n        };\r\n        return browserSettings;\r\n    }\r\n    catch (error) {\r\n        // ignore\r\n        return null;\r\n    }\r\n}\r\n// Currently used for AADC but can be extended to any other settings\r\nfunction getCustomSettings() {\r\n    // Custom settings\r\n    var customSettings = {\r\n        // AADC related values\r\n        userConsentGroup: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getUserConsentGroup(),\r\n        feedbackEnabledByAADC: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().isFeedbackSurveyEnabledByAADC(),\r\n    };\r\n    return customSettings;\r\n}\r\n// input userFactName is expected to be of form window__obj1___obj2\r\nfunction getBrowserLocalFact(userFactName) {\r\n    var factNameValues = userFactName && userFactName.split("__");\r\n    if (!factNameValues || factNameValues.length <= 1) {\r\n        return null;\r\n    }\r\n    var userFact = null;\r\n    var objectName = factNameValues[0];\r\n    var propertyName = factNameValues.pop();\r\n    // common top level objects eg: window__status\r\n    if (propertyName && factNameValues.length === 1) {\r\n        userFact = createUserFact(window[objectName] || window, propertyName);\r\n    }\r\n    // handle names like window__navigator__userAgent__length\r\n    if (!userFact && propertyName && factNameValues.length > 1) {\r\n        if (objectName === "window") {\r\n            // remove the window object.. it will be used as first/default\r\n            factNameValues.shift();\r\n        }\r\n        // try getting target as object path eg: window[\'navigator\'][\'userAgent\']\r\n        var globalObject = factNameValues.reduce(function (prev, curr) { return prev && prev[curr]; }, window);\r\n        if (globalObject) {\r\n            // get the fact value eg: \'length\'\r\n            userFact = createUserFact(globalObject, propertyName);\r\n        }\r\n    }\r\n    if (userFact) {\r\n        userFact.userFactName = userFactName;\r\n    }\r\n    return userFact;\r\n}\r\n// For consistency, fact names should match %SRCROOT%\\personalization\\common\\LocalUserFactsDataProvider.cpp\r\nfunction createUserFact(targetObject, factName) {\r\n    if (!targetObject) {\r\n        return null;\r\n    }\r\n    // get fact value\r\n    var factValue = targetObject[factName];\r\n    if (!factValue) {\r\n        // try looking up with case insensitive key\r\n        var loweCaseFactName_1 = factName.toLowerCase();\r\n        var caseInsensitiveKey = Object.keys(targetObject).find(function (key) { return key.toLowerCase() === loweCaseFactName_1; });\r\n        factValue = targetObject[caseInsensitiveKey];\r\n    }\r\n    if (_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Utils"].isNOU(factValue)) {\r\n        return null;\r\n    }\r\n    // ignore object and function type values\r\n    if (!_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Utils"].isArray(factValue) && (_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Utils"].isObject(factValue) || _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Utils"].isFunction(factValue))) {\r\n        return null;\r\n    }\r\n    // Handle serialized values\r\n    var currentDateTime = new Date().toISOString();\r\n    return {\r\n        userFactType: "Local",\r\n        userFactName: factName,\r\n        userFactValue: factValue.toString(),\r\n        sourceDateTime: currentDateTime,\r\n        storageDateTime: currentDateTime,\r\n        clientIngestionDateTime: currentDateTime,\r\n    };\r\n}\r\nvar localFactTargetObjects;\r\nfunction getLocalUserFact(userFactName) {\r\n    try {\r\n        if (!localFactTargetObjects) {\r\n            var commonInitOptions = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions();\r\n            localFactTargetObjects = [\r\n                commonInitOptions,\r\n                commonInitOptions === null || commonInitOptions === void 0 ? void 0 : commonInitOptions.applicationSettings,\r\n                commonInitOptions === null || commonInitOptions === void 0 ? void 0 : commonInitOptions.telemetryGroup,\r\n                commonInitOptions === null || commonInitOptions === void 0 ? void 0 : commonInitOptions.applicationGroup,\r\n                commonInitOptions === null || commonInitOptions === void 0 ? void 0 : commonInitOptions.webGroup,\r\n                _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateInitOptions(),\r\n                _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"](),\r\n                getBrowserSettings(),\r\n                getCustomSettings(),\r\n            ];\r\n        }\r\n        // lookup in target objects and create fact\r\n        var userFact = localFactTargetObjects.reduce(function (generatedFact, targetObject) { return generatedFact || createUserFact(targetObject, userFactName); }, null);\r\n        // lookup global browser objects for names like navigator__userAgent or location__href\r\n        if (!userFact) {\r\n            userFact = getBrowserLocalFact(userFactName);\r\n        }\r\n        return userFact;\r\n    }\r\n    catch (error) {\r\n        _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["EventIds"].UserFacts.LocalFact.Error.VALUE, 2 /* Error */, {\r\n            ErrorMessage: "Error getting local fact - " + userFactName + " " + (error && error.message ? ": " + error.message : "") + " ",\r\n        });\r\n        return null;\r\n    }\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9Mb2NhbFVzZXJGYWN0SGVscGVyLnRzPzFlMzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7R0FFRztBQUVzRDtBQUVPO0FBQ2xCO0FBRTlDLFNBQVMsa0JBQWtCO0lBQzFCLElBQUk7UUFDSCxvQkFBb0I7UUFDcEIsSUFBTSxlQUFlLEdBQUcsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsSUFBSSxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRyxJQUFNLGVBQWUsR0FBRztZQUN2QixTQUFTLEVBQUUsT0FBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFVBQVUsTUFBSSxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUUsV0FBVztZQUM3RCxVQUFVLEVBQUUsT0FBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFdBQVcsTUFBSSxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUUsWUFBWTtZQUNoRSxPQUFPLEVBQUUsT0FBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFdBQVcsTUFBSSxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUUsU0FBUztZQUMxRCxRQUFRLEVBQUUsT0FBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFdBQVcsTUFBSSxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUUsVUFBVTtZQUM1RCxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxD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QUFpQixFQUFFO2dCQUNuQixrQkFBa0IsRUFBRTtnQkFDcEIsaUJBQWlCLEVBQUU7YUFDbkIsQ0FBQztTQUNGO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksUUFBUSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FDM0MsVUFBQyxhQUFhLEVBQUUsWUFBWSxJQUFLLG9CQUFhLElBQUksY0FBYyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsRUFBM0QsQ0FBMkQsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVyRyxzRkFBc0Y7UUFDdEYsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNkLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM3QztRQUVELE9BQU8sUUFBUSxDQUFDO0tBQ2hCO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZiwwREFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FDM0IseURBQWdCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxpQkFFaEQ7WUFDQyxZQUFZLEVBQUUsZ0NBQThCLFlBQVksVUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBRztTQUNqSCxDQUFDLENBQUM7UUFFSixPQUFPLElBQUksQ0FBQztLQUNaO0FBQ0YsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL1RhcmdldGVkTWVzc2FnaW5nL0xvY2FsVXNlckZhY3RIZWxwZXIudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBMb2NhbFVzZXJGYWN0SGVscGVyLnRzXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQXBpLCBVdGlscyB9IGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmVcIjtcclxuXHJcbmltcG9ydCAqIGFzIENvbmZpZ3VyYXRpb24gZnJvbSBcIi4uL0NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgKiBhcyBMb2dnaW5nIGZyb20gXCIuLi9Mb2dnaW5nL0xvZ2dpbmdcIjtcclxuXHJcbmZ1bmN0aW9uIGdldEJyb3dzZXJTZXR0aW5ncygpIHtcclxuXHR0cnkge1xyXG5cdFx0Ly8gU2NyZWVuIGRpbWVuc2lvbnNcclxuXHRcdGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50ICYmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdKTtcclxuXHRcdGNvbnN0IGJyb3dzZXJTZXR0aW5ncyA9IHtcclxuXHRcdFx0cGFnZVdpZHRoOiB3aW5kb3c/LmlubmVyV2lkdGggfHwgZG9jdW1lbnRFbGVtZW50Py5jbGllbnRXaWR0aCxcclxuXHRcdFx0cGFnZUhlaWdodDogd2luZG93Py5pbm5lckhlaWdodCB8fCBkb2N1bWVudEVsZW1lbnQ/LmNsaWVudEhlaWdodCxcclxuXHRcdFx0cGFnZVRvcDogd2luZG93Py5wYWdlWU9mZnNldCB8fCBkb2N1bWVudEVsZW1lbnQ/LnNjcm9sbFRvcCxcclxuXHRcdFx0cGFnZUxlZnQ6IHdpbmRvdz8ucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnRFbGVtZW50Py5zY3JvbGxMZWZ0LFxyXG5cdFx0XHRzY3JlZW5XaWR0aDogc2NyZWVuID8gc2NyZWVuLndpZHRoIDogMCxcclxuXHRcdFx0c2NyZWVuSGVpZ2h0OiBzY3JlZW4gPyBzY3JlZW4uaGVpZ2h0IDogMCxcclxuXHRcdFx0Y29sb3JEZXB0aDogc2NyZWVuID8gc2NyZWVuLmNvbG9yRGVwdGggOiAwLFxyXG5cdFx0XHR1c2VyQWdlbnQ6IG5hdmlnYXRvcj8udXNlckFnZW50LFxyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gYnJvd3NlclNldHRpbmdzO1xyXG5cdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHQvLyBpZ25vcmVcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxufVxyXG5cclxuLy8gQ3VycmVudGx5IHVzZWQgZm9yIEFBREMgYnV0IGNhbiBiZSBleHRlbmRlZCB0byBhbnkgb3RoZXIgc2V0dGluZ3NcclxuZnVuY3Rpb24gZ2V0Q3VzdG9tU2V0dGluZ3MoKTogUmVjb3JkPHN0cmluZywgYW55PiAge1xyXG5cdC8vIEN1c3RvbSBzZXR0aW5nc1xyXG5cdGNvbnN0IGN1c3RvbVNldHRpbmdzID0ge1xyXG5cdFx0Ly8gQUFEQyByZWxhdGVkIHZhbHVlc1xyXG5cdFx0dXNlckNvbnNlbnRHcm91cDogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRVc2VyQ29uc2VudEdyb3VwKCksXHJcblx0XHRmZWVkYmFja0VuYWJsZWRCeUFBREM6IENvbmZpZ3VyYXRpb24uZ2V0KCkuaXNGZWVkYmFja1N1cnZleUVuYWJsZWRCeUFBREMoKSxcclxuXHJcblx0XHQvLyBPdGhlciB2YWx1ZXNcclxuXHR9O1xyXG5cclxuXHRyZXR1cm4gY3VzdG9tU2V0dGluZ3M7XHJcbn1cclxuXHJcbi8vIGlucHV0IHVzZXJGYWN0TmFtZSBpcyBleHBlY3RlZCB0byBiZSBvZiBmb3JtIHdpbmRvd19fb2JqMV9fX29iajJcclxuZnVuY3Rpb24gZ2V0QnJvd3NlckxvY2FsRmFjdCh1c2VyRmFjdE5hbWU6IHN0cmluZyk6IEFwaS5JVXNlckZhY3Qge1xyXG5cdGNvbnN0IGZhY3ROYW1lVmFsdWVzID0gdXNlckZhY3ROYW1lICYmIHVzZXJGYWN0TmFtZS5zcGxpdChcIl9fXCIpO1xyXG5cdGlmICghZmFjdE5hbWVWYWx1ZXMgfHwgZmFjdE5hbWVWYWx1ZXMubGVuZ3RoIDw9IDEpIHtcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0bGV0IHVzZXJGYWN0OiBBcGkuSVVzZXJGYWN0ID0gbnVsbDtcclxuXHRjb25zdCBvYmplY3ROYW1lID0gZmFjdE5hbWVWYWx1ZXNbMF07XHJcblx0Y29uc3QgcHJvcGVydHlOYW1lID0gZmFjdE5hbWVWYWx1ZXMucG9wKCk7XHJcblxyXG5cdC8vIGNvbW1vbiB0b3AgbGV2ZWwgb2JqZWN0cyBlZzogd2luZG93X19zdGF0dXNcclxuXHRpZiAocHJvcGVydHlOYW1lICYmIGZhY3ROYW1lVmFsdWVzLmxlbmd0aCA9PT0gMSkge1xyXG5cdFx0dXNlckZhY3QgPSBjcmVhdGVVc2VyRmFjdCh3aW5kb3dbPGFueT4gb2JqZWN0TmFtZV0gfHwgd2luZG93LCBwcm9wZXJ0eU5hbWUpO1xyXG5cdH1cclxuXHJcblx0Ly8gaGFuZGxlIG5hbWVzIGxpa2Ugd2luZG93X19uYXZpZ2F0b3JfX3VzZXJBZ2VudF9fbGVuZ3RoXHJcblx0aWYgKCF1c2VyRmFjdCAmJiBwcm9wZXJ0eU5hbWUgJiYgZmFjdE5hbWVWYWx1ZXMubGVuZ3RoID4gMSkge1xyXG5cdFx0aWYgKG9iamVjdE5hbWUgPT09IFwid2luZG93XCIpIHtcclxuXHRcdFx0Ly8gcmVtb3ZlIHRoZSB3aW5kb3cgb2JqZWN0Li4gaXQgd2lsbCBiZSB1c2VkIGFzIGZpcnN0L2RlZmF1bHRcclxuXHRcdFx0ZmFjdE5hbWVWYWx1ZXMuc2hpZnQoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyB0cnkgZ2V0dGluZyB0YXJnZXQgYXMgb2JqZWN0IHBhdGggZWc6IHdpbmRvd1snbmF2aWdhdG9yJ11bJ3VzZXJBZ2VudCddXHJcblx0XHRjb25zdCBnbG9iYWxPYmplY3QgPSBmYWN0TmFtZVZhbHVlcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgJiYgcHJldls8YW55PiBjdXJyXSwgd2luZG93KTtcclxuXHRcdGlmIChnbG9iYWxPYmplY3QpIHtcclxuXHRcdFx0Ly8gZ2V0IHRoZSBmYWN0IHZhbHVlIGVnOiAnbGVuZ3RoJ1xyXG5cdFx0XHR1c2VyRmFjdCA9IGNyZWF0ZVVzZXJGYWN0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmICh1c2VyRmFjdCkge1xyXG5cdFx0dXNlckZhY3QudXNlckZhY3ROYW1lID0gdXNlckZhY3ROYW1lO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHVzZXJGYWN0O1xyXG59XHJcblxyXG4vLyBGb3IgY29uc2lzdGVuY3ksIGZhY3QgbmFtZXMgc2hvdWxkIG1hdGNoICVTUkNST09UJVxccGVyc29uYWxpemF0aW9uXFxjb21tb25cXExvY2FsVXNlckZhY3RzRGF0YVByb3ZpZGVyLmNwcFxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXNlckZhY3QodGFyZ2V0T2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBmYWN0TmFtZTogc3RyaW5nKTogQXBpLklVc2VyRmFjdCB7XHJcblx0aWYgKCF0YXJnZXRPYmplY3QpIHtcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Ly8gZ2V0IGZhY3QgdmFsdWVcclxuXHRsZXQgZmFjdFZhbHVlID0gdGFyZ2V0T2JqZWN0W2ZhY3ROYW1lXTtcclxuXHRpZiAoIWZhY3RWYWx1ZSkge1xyXG5cdFx0Ly8gdHJ5IGxvb2tpbmcgdXAgd2l0aCBjYXNlIGluc2Vuc2l0aXZlIGtleVxyXG5cdFx0Y29uc3QgbG93ZUNhc2VGYWN0TmFtZSA9IGZhY3ROYW1lLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRjb25zdCBjYXNlSW5zZW5zaXRpdmVLZXkgPSBPYmplY3Qua2V5cyh0YXJnZXRPYmplY3QpLmZpbmQoa2V5ID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSBsb3dlQ2FzZUZhY3ROYW1lKTtcclxuXHRcdGZhY3RWYWx1ZSA9IHRhcmdldE9iamVjdFtjYXNlSW5zZW5zaXRpdmVLZXldO1xyXG5cdH1cclxuXHJcblx0aWYgKFV0aWxzLmlzTk9VKGZhY3RWYWx1ZSkpIHtcclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Ly8gaWdub3JlIG9iamVjdCBhbmQgZnVuY3Rpb24gdHlwZSB2YWx1ZXNcclxuXHRpZiAoIVV0aWxzLmlzQXJyYXkoZmFjdFZhbHVlKSAmJiAoVXRpbHMuaXNPYmplY3QoZmFjdFZhbHVlKSB8fCBVdGlscy5pc0Z1bmN0aW9uKGZhY3RWYWx1ZSkpKSB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdC8vIEhhbmRsZSBzZXJpYWxpemVkIHZhbHVlc1xyXG5cdGNvbnN0IGN1cnJlbnREYXRlVGltZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcclxuXHRyZXR1cm4ge1xyXG5cdFx0dXNlckZhY3RUeXBlOiBcIkxvY2FsXCIsXHJcblx0XHR1c2VyRmFjdE5hbWU6IGZhY3ROYW1lLFxyXG5cdFx0dXNlckZhY3RWYWx1ZTogZmFjdFZhbHVlLnRvU3RyaW5nKCksXHJcblx0XHRzb3VyY2VEYXRlVGltZTogY3VycmVudERhdGVUaW1lLFxyXG5cdFx0c3RvcmFnZURhdGVUaW1lOiBjdXJyZW50RGF0ZVRpbWUsXHJcblx0XHRjbGllbnRJbmdlc3Rpb25EYXRlVGltZTogY3VycmVudERhdGVUaW1lLFxyXG5cdH07XHJcbn1cclxuXHJcbmxldCBsb2NhbEZhY3RUYXJnZXRPYmplY3RzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbFVzZXJGYWN0KHVzZXJGYWN0TmFtZTogc3RyaW5nKTogQXBpLklVc2VyRmFjdCB7XHJcblx0dHJ5IHtcclxuXHRcdGlmICghbG9jYWxGYWN0VGFyZ2V0T2JqZWN0cykge1xyXG5cdFx0XHRjb25zdCBjb21tb25Jbml0T3B0aW9ucyA9IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKTtcclxuXHRcdFx0bG9jYWxGYWN0VGFyZ2V0T2JqZWN0cyA9IFtcclxuXHRcdFx0XHRjb21tb25Jbml0T3B0aW9ucyxcclxuXHRcdFx0XHRjb21tb25Jbml0T3B0aW9ucz8uYXBwbGljYXRpb25TZXR0aW5ncyxcclxuXHRcdFx0XHRjb21tb25Jbml0T3B0aW9ucz8udGVsZW1ldHJ5R3JvdXAsXHJcblx0XHRcdFx0Y29tbW9uSW5pdE9wdGlvbnM/LmFwcGxpY2F0aW9uR3JvdXAsXHJcblx0XHRcdFx0Y29tbW9uSW5pdE9wdGlvbnM/LndlYkdyb3VwLFxyXG5cdFx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlSW5pdE9wdGlvbnMoKSxcclxuXHRcdFx0XHRDb25maWd1cmF0aW9uLmdldCgpLFxyXG5cdFx0XHRcdGdldEJyb3dzZXJTZXR0aW5ncygpLFxyXG5cdFx0XHRcdGdldEN1c3RvbVNldHRpbmdzKCksXHJcblx0XHRcdF07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gbG9va3VwIGluIHRhcmdldCBvYmplY3RzIGFuZCBjcmVhdGUgZmFjdFxyXG5cdFx0bGV0IHVzZXJGYWN0ID0gbG9jYWxGYWN0VGFyZ2V0T2JqZWN0cy5yZWR1Y2U8QXBpLklVc2VyRmFjdD4oXHJcblx0XHRcdChnZW5lcmF0ZWRGYWN0LCB0YXJnZXRPYmplY3QpID0+IGdlbmVyYXRlZEZhY3QgfHwgY3JlYXRlVXNlckZhY3QodGFyZ2V0T2JqZWN0LCB1c2VyRmFjdE5hbWUpLCBudWxsKTtcclxuXHJcblx0XHQvLyBsb29rdXAgZ2xvYmFsIGJyb3dzZXIgb2JqZWN0cyBmb3IgbmFtZXMgbGlrZSBuYXZpZ2F0b3JfX3VzZXJBZ2VudCBvciBsb2NhdGlvbl9faHJlZlxyXG5cdFx0aWYgKCF1c2VyRmFjdCkge1xyXG5cdFx0XHR1c2VyRmFjdCA9IGdldEJyb3dzZXJMb2NhbEZhY3QodXNlckZhY3ROYW1lKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdXNlckZhY3Q7XHJcblx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoXHJcblx0XHRcdExvZ2dpbmcuRXZlbnRJZHMuVXNlckZhY3RzLkxvY2FsRmFjdC5FcnJvci5WQUxVRSxcclxuXHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5FcnJvcixcclxuXHRcdFx0e1xyXG5cdFx0XHRcdEVycm9yTWVzc2FnZTogYEVycm9yIGdldHRpbmcgbG9jYWwgZmFjdCAtICR7dXNlckZhY3ROYW1lfSAke2Vycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBcIjogXCIgKyBlcnJvci5tZXNzYWdlIDogXCJcIn0gYCxcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/TargetedMessaging/LocalUserFactHelper.ts\n')},"./scripts/app/TargetedMessaging/TargetedMessagingCache.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TargetedMessagingCache", function() { return TargetedMessagingCache; });\n/* harmony import */ var _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../FloodgateCore/FloodgateStorageProvider */ "./scripts/app/FloodgateCore/FloodgateStorageProvider.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Utils */ "./scripts/app/Utils.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/IFloodgateStorageProvider */ "../FloodgateCore/dist/src/Api/IFloodgateStorageProvider.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_2__);\n\r\n\r\n\r\nvar isNOU = _Utils__WEBPACK_IMPORTED_MODULE_1__["isNOU"];\r\nvar TargetedMessagingCache = /** @class */ (function () {\r\n    function TargetedMessagingCache(items) {\r\n        this.useLocalStorage = false;\r\n        this.cachedItems = {};\r\n        this.initialize(items);\r\n    }\r\n    TargetedMessagingCache.prototype.setContentItem = function (contentType, content, expiryTime) {\r\n        var cacheItem = this.createItem(contentType, content, expiryTime);\r\n        this.setItem(cacheItem);\r\n        return cacheItem;\r\n    };\r\n    TargetedMessagingCache.prototype.getItemContent = function (contentType) {\r\n        var cacheItem = this.getItem(contentType);\r\n        return cacheItem && cacheItem.content;\r\n    };\r\n    TargetedMessagingCache.prototype.has = function (contentType) {\r\n        return contentType in this.cachedItems;\r\n    };\r\n    TargetedMessagingCache.prototype.isItemExpired = function (contentType) {\r\n        var cacheItem = this.getItem(contentType);\r\n        return !cacheItem\r\n            || !cacheItem.expiryDate\r\n            || cacheItem.expiryDate < new Date();\r\n    };\r\n    TargetedMessagingCache.prototype.createItem = function (contentType, content, expiryTime) {\r\n        var cacheItem = {\r\n            contentType: contentType,\r\n            content: content,\r\n            expiryDate: new Date(Date.now() + expiryTime),\r\n            lastRetrievedDate: new Date(),\r\n        };\r\n        return cacheItem;\r\n    };\r\n    TargetedMessagingCache.prototype.setItem = function (cacheItem) {\r\n        this.cachedItems[cacheItem.contentType] = cacheItem;\r\n        this.updateItemInLocalStorage(cacheItem);\r\n    };\r\n    TargetedMessagingCache.prototype.getItem = function (contentType) {\r\n        return this.cachedItems[contentType];\r\n    };\r\n    TargetedMessagingCache.prototype.initialize = function (items) {\r\n        this.cachedItems = {};\r\n        if (_FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_0__["default"].isStorageAvailable()) {\r\n            this.floodgateStorage = new _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_0__["default"]();\r\n            this.useLocalStorage = true;\r\n            // try to fetch items from local storage if available from prior sessions\r\n            this.initCachedItemsFromLocalStorage(items);\r\n        }\r\n        else {\r\n            // no LocalStorage support, only active object cache only\r\n        }\r\n    };\r\n    TargetedMessagingCache.prototype.initCachedItemsFromLocalStorage = function (items) {\r\n        if (this.useLocalStorage) {\r\n            if (!isNOU(items)) {\r\n                for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\r\n                    var contentKey = items_1[_i];\r\n                    var tempStorageItem = this.floodgateStorage.read(this.mapContentTypeToFloodgateProviderKey(contentKey));\r\n                    if (!isNOU(tempStorageItem)) {\r\n                        var tempCacheItem = this.parseObjectFromCache(tempStorageItem);\r\n                        if (!isNOU(tempCacheItem)) {\r\n                            tempCacheItem.expiryDate = typeof tempCacheItem.expiryDate === "string" ?\r\n                                new Date(tempCacheItem.expiryDate) : tempCacheItem.expiryDate;\r\n                            this.cachedItems[tempCacheItem.contentType] = tempCacheItem;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    TargetedMessagingCache.prototype.updateItemInLocalStorage = function (cacheItem) {\r\n        if (this.useLocalStorage) {\r\n            this.floodgateStorage.write(this.mapContentTypeToFloodgateProviderKey(cacheItem.contentType), JSON.stringify(cacheItem));\r\n        }\r\n    };\r\n    TargetedMessagingCache.prototype.parseObjectFromCache = function (tempItem) {\r\n        try {\r\n            var tempCacheItem = JSON.parse(tempItem);\r\n            return tempCacheItem;\r\n        }\r\n        catch (e) {\r\n            return null;\r\n        }\r\n    };\r\n    TargetedMessagingCache.prototype.mapContentTypeToFloodgateProviderKey = function (contentType) {\r\n        switch (contentType) {\r\n            case "CampaignContent" /* campaignContent */:\r\n                return _ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_2__["FileType"].TmsCache_CampaignContent;\r\n            case "MessageMetadata" /* messageMetadata */:\r\n                return _ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_2__["FileType"].TmsCache_MessageMetadata;\r\n            case "UserGovernance" /* userGovernanceRules */:\r\n                return _ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_2__["FileType"].TmsCache_UserGovernance;\r\n            case "DynamicSettings" /* dynamicSettings */:\r\n                return _ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_2__["FileType"].Tms_DynamicSettings;\r\n            case "LogLevelSettings" /* logLevelSettings */:\r\n                return _ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_2__["FileType"].LogLevelSettings;\r\n            case "UserFacts" /* userFacts */:\r\n                return _ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_2__["FileType"].UserFacts;\r\n            default:\r\n                throw new Error("Unmapped ContentType in TmsCache");\r\n        }\r\n    };\r\n    return TargetedMessagingCache;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9UYXJnZXRlZE1lc3NhZ2luZ0NhY2hlLnRzP2I5YjAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQWlGO0FBQy9DO0FBQzREO0FBRXRGLFNBQUssR0FBSyw0Q0FBTCxDQUFXO0FBU3hCO0lBS0MsZ0NBQVksS0FBeUI7UUFKN0Isb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsZ0JBQVcsR0FBa0MsRUFBRSxDQUFDO1FBSXZELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVNLCtDQUFjLEdBQXJCLFVBQXNCLFdBQXdCLEVBQUUsT0FBWSxFQUFFLFVBQWtCO1FBQy9FLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sU0FBUyxDQUFDO0lBQ2xCLENBQUM7SUFFTSwrQ0FBYyxHQUFyQixVQUF5QixXQUF3QjtRQUNoRCxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDdkMsQ0FBQztJQUVNLG9DQUFHLEdBQVYsVUFBVyxXQUF3QjtRQUNsQyxPQUFPLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3hDLENBQUM7SUFFTSw4Q0FBYSxHQUFwQixVQUFxQixXQUF3QjtRQUM1QyxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxTQUFTO2VBQ2IsQ0FBQyxTQUFTLENBQUMsVUFBVTtlQUNyQixTQUFTLENBQUMsVUFBVSxHQUFH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QztTQUNaO0lBQ0YsQ0FBQztJQUVPLHFFQUFvQyxHQUE1QyxVQUE2QyxXQUF3QjtRQUNwRSxRQUFRLFdBQVcsRUFBRTtZQUNwQjtnQkFDQyxPQUFPLDJHQUFRLENBQUMsd0JBQXdCLENBQUM7WUFDMUM7Z0JBQ0MsT0FBTywyR0FBUSxDQUFDLHdCQUF3QixDQUFDO1lBQzFDO2dCQUNDLE9BQU8sMkdBQVEsQ0FBQyx1QkFBdUIsQ0FBQztZQUN6QztnQkFDQyxPQUFPLDJHQUFRLENBQUMsbUJBQW1CLENBQUM7WUFDckM7Z0JBQ0MsT0FBTywyR0FBUSxDQUFDLGdCQUFnQixDQUFDO1lBQ2xDO2dCQUNDLE9BQU8sMkdBQVEsQ0FBQyxTQUFTLENBQUM7WUFDM0I7Z0JBQ0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1NBQ3JEO0lBQ0YsQ0FBQztJQUNGLDZCQUFDO0FBQUQsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL1RhcmdldGVkTWVzc2FnaW5nL1RhcmdldGVkTWVzc2FnaW5nQ2FjaGUudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250ZW50VHlwZSB9IGZyb20gXCIuL1RhcmdldGVkTWVzc2FnaW5nQ29udGVudFR5cGVcIjtcclxuaW1wb3J0IEZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlciBmcm9tIFwiLi4vRmxvb2RnYXRlQ29yZS9GbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXJcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uL1V0aWxzXCI7XHJcbmltcG9ydCB7IEZpbGVUeXBlIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9BcGkvSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlclwiO1xyXG5cclxuY29uc3QgeyBpc05PVSB9ID0gVXRpbHM7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDYWNoZUl0ZW0ge1xyXG5cdGNvbnRlbnRUeXBlOiBDb250ZW50VHlwZTtcclxuXHRjb250ZW50OiBhbnk7XHJcblx0ZXhwaXJ5RGF0ZTogRGF0ZTtcclxuXHRsYXN0UmV0cmlldmVkRGF0ZTogRGF0ZTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRhcmdldGVkTWVzc2FnaW5nQ2FjaGUge1xyXG5cdHByaXZhdGUgdXNlTG9jYWxTdG9yYWdlOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHJpdmF0ZSBjYWNoZWRJdGVtczogeyBba2V5OiBzdHJpbmddOiBJQ2FjaGVJdGVtIH0gPSB7fTtcclxuXHRwcml2YXRlIGZsb29kZ2F0ZVN0b3JhZ2U6IEZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlcjtcclxuXHJcblx0Y29uc3RydWN0b3IoaXRlbXM6IEFycmF5PENvbnRlbnRUeXBlPikge1xyXG5cdFx0dGhpcy5pbml0aWFsaXplKGl0ZW1zKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRDb250ZW50SXRlbShjb250ZW50VHlwZTogQ29udGVudFR5cGUsIGNvbnRlbnQ6IGFueSwgZXhwaXJ5VGltZTogbnVtYmVyKTogSUNhY2hlSXRlbSB7XHJcblx0XHRjb25zdCBjYWNoZUl0ZW0gPSB0aGlzLmNyZWF0ZUl0ZW0oY29udGVudFR5cGUsIGNvbnRlbnQsIGV4cGlyeVRpbWUpO1xyXG5cdFx0dGhpcy5zZXRJdGVtKGNhY2hlSXRlbSk7XHJcblx0XHRyZXR1cm4gY2FjaGVJdGVtO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldEl0ZW1Db250ZW50PFQ+KGNvbnRlbnRUeXBlOiBDb250ZW50VHlwZSk6IFQge1xyXG5cdFx0Y29uc3QgY2FjaGVJdGVtID0gdGhpcy5nZXRJdGVtKGNvbnRlbnRUeXBlKTtcclxuXHRcdHJldHVybiBjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLmNvbnRlbnQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgaGFzKGNvbnRlbnRUeXBlOiBDb250ZW50VHlwZSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGNvbnRlbnRUeXBlIGluIHRoaXMuY2FjaGVkSXRlbXM7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgaXNJdGVtRXhwaXJlZChjb250ZW50VHlwZTogQ29udGVudFR5cGUpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IGNhY2hlSXRlbSA9IHRoaXMuZ2V0SXRlbShjb250ZW50VHlwZSk7XHJcblx0XHRyZXR1cm4gIWNhY2hlSXRlbVxyXG5cdFx0XHR8fCAhY2FjaGVJdGVtLmV4cGlyeURhdGVcclxuXHRcdFx0fHwgY2FjaGVJdGVtLmV4cGlyeURhdGUgPCBuZXcgRGF0ZSgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVJdGVtKGNvbnRlbnRUeXBlOiBDb250ZW50VHlwZSwgY29udGVudDogYW55LCBleHBpcnlUaW1lOiBudW1iZXIpOiBJQ2FjaGVJdGVtIHtcclxuXHRcdGNvbnN0IGNhY2hlSXRlbTogSUNhY2hlSXRlbSA9IHtcclxuXHRcdFx0Y29udGVudFR5cGUsXHJcblx0XHRcdGNvbnRlbnQsXHJcblx0XHRcdGV4cGlyeURhdGU6ICBuZXcgRGF0ZShEYXRlLm5vdygpICsgZXhwaXJ5VGltZSksXHJcblx0XHRcdGxhc3RSZXRyaWV2ZWREYXRlOiBuZXcgRGF0ZSgpLFxyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gY2FjaGVJdGVtO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRJdGVtKGNhY2hlSXRlbTogSUNhY2hlSXRlbSk6IHZvaWQge1xyXG5cdFx0dGhpcy5jYWNoZWRJdGVtc1tjYWNoZUl0ZW0uY29udGVudFR5cGVdID0gY2FjaGVJdGVtO1xyXG5cdFx0dGhpcy51cGRhdGVJdGVtSW5Mb2NhbFN0b3JhZ2UoY2FjaGVJdGVtKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0SXRlbShjb250ZW50VHlwZTogQ29udGVudFR5cGUpOiBJQ2FjaGVJdGVtIHtcclxuXHRcdHJldHVybiB0aGlzLmNhY2hlZEl0ZW1zW2NvbnRlbnRUeXBlXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaW5pdGlhbGl6ZShpdGVtczogQXJyYXk8Q29udGVudFR5cGU+KTogdm9pZCB7XHJcblx0XHR0aGlzLmNhY2hlZEl0ZW1zID0ge307XHJcblx0XHRpZiAoRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyLmlzU3RvcmFnZUF2YWlsYWJsZSgpKSB7XHJcblx0XHRcdHRoaXMuZmxvb2RnYXRlU3RvcmFnZSA9IG5ldyBGbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXIoKTtcclxuXHRcdFx0dGhpcy51c2VMb2NhbFN0b3JhZ2UgPSB0cnVlO1xyXG5cclxuXHRcdFx0Ly8gdHJ5IHRvIGZldGNoIGl0ZW1zIGZyb20gbG9jYWwgc3RvcmFnZSBpZiBhdmFpbGFibGUgZnJvbSBwcmlvciBzZXNzaW9uc1xyXG5cdFx0XHR0aGlzLmluaXRDYWNoZWRJdGVtc0Zyb21Mb2NhbFN0b3JhZ2UoaXRlbXMpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gbm8gTG9jYWxTdG9yYWdlIHN1cHBvcnQsIG9ubHkgYWN0aXZlIG9iamVjdCBjYWNoZSBvbmx5XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGluaXRDYWNoZWRJdGVtc0Zyb21Mb2NhbFN0b3JhZ2UoaXRlbXM6IEFycmF5PENvbnRlbnRUeXBlPik6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMudXNlTG9jYWxTdG9yYWdlKSB7XHJcblx0XHRcdGlmICghaXNOT1UoaXRlbXMpKSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgY29udGVudEtleSBvZiBpdGVtcykge1xyXG5cdFx0XHRcdFx0bGV0IHRlbXBTdG9yYWdlSXRlbTogc3RyaW5nID0gdGhpcy5mbG9vZGdhdGVTdG9yYWdlLnJlYWQodGhpcy5tYXBDb250ZW50VHlwZVRvRmxvb2RnYXRlUHJvdmlkZXJLZXkoY29udGVudEtleSkpO1xyXG5cdFx0XHRcdFx0aWYgKCFpc05PVSh0ZW1wU3RvcmFnZUl0ZW0pKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHRlbXBDYWNoZUl0ZW06IElDYWNoZUl0ZW0gPSB0aGlzLnBhcnNlT2JqZWN0RnJvbUNhY2hlKHRlbXBTdG9yYWdlSXRlbSk7XHJcblx0XHRcdFx0XHRcdGlmICghaXNOT1UodGVtcENhY2hlSXRlbSkpIHtcclxuXHRcdFx0XHRcdFx0XHR0ZW1wQ2FjaGVJdGVtLmV4cGlyeURhdGUgPSB0eXBlb2YgdGVtcENhY2hlSXRlbS5leHBpcnlEYXRlID09PSBcInN0cmluZ1wiID9cclxuXHRcdFx0XHRcdFx0XHRcdG5ldyBEYXRlKHRlbXBDYWNoZUl0ZW0uZXhwaXJ5RGF0ZSkgOiB0ZW1wQ2FjaGVJdGVtLmV4cGlyeURhdGU7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jYWNoZWRJdGVtc1t0ZW1wQ2FjaGVJdGVtLmNvbnRlbnRUeXBlXSA9IHRlbXBDYWNoZUl0ZW07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlSXRlbUluTG9jYWxTdG9yYWdlKGNhY2hlSXRlbTogSUNhY2hlSXRlbSk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMudXNlTG9jYWxTdG9yYWdlKSB7XHJcblx0XHRcdHRoaXMuZmxvb2RnYXRlU3RvcmFnZS53cml0ZShcclxuXHRcdFx0XHR0aGlzLm1hcENvbnRlbnRUeXBlVG9GbG9vZGdhdGVQcm92aWRlcktleShjYWNoZUl0ZW0uY29udGVudFR5cGUpLFxyXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KGNhY2hlSXRlbSkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZU9iamVjdEZyb21DYWNoZSh0ZW1wSXRlbTogc3RyaW5nKTogSUNhY2hlSXRlbSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCB0ZW1wQ2FjaGVJdGVtOiBJQ2FjaGVJdGVtID0gSlNPTi5wYXJzZSh0ZW1wSXRlbSk7XHJcblx0XHRcdHJldHVybiB0ZW1wQ2FjaGVJdGVtO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWFwQ29udGVudFR5cGVUb0Zsb29kZ2F0ZVByb3ZpZGVyS2V5KGNvbnRlbnRUeXBlOiBDb250ZW50VHlwZSk6IEZpbGVUeXBlIHtcclxuXHRcdHN3aXRjaCAoY29udGVudFR5cGUpIHtcclxuXHRcdFx0Y2FzZSBDb250ZW50VHlwZS5jYW1wYWlnbkNvbnRlbnQ6XHJcblx0XHRcdFx0cmV0dXJuIEZpbGVUeXBlLlRtc0NhY2hlX0NhbXBhaWduQ29udGVudDtcclxuXHRcdFx0Y2FzZSBDb250ZW50VHlwZS5tZXNzYWdlTWV0YWRhdGE6XHJcblx0XHRcdFx0cmV0dXJuIEZpbGVUeXBlLlRtc0NhY2hlX01lc3NhZ2VNZXRhZGF0YTtcclxuXHRcdFx0Y2FzZSBDb250ZW50VHlwZS51c2VyR292ZXJuYW5jZVJ1bGVzOlxyXG5cdFx0XHRcdHJldHVybiBGaWxlVHlwZS5UbXNDYWNoZV9Vc2VyR292ZXJuYW5jZTtcclxuXHRcdFx0Y2FzZSBDb250ZW50VHlwZS5keW5hbWljU2V0dGluZ3M6XHJcblx0XHRcdFx0cmV0dXJuIEZpbGVUeXBlLlRtc19EeW5hbWljU2V0dGluZ3M7XHJcblx0XHRcdGNhc2UgQ29udGVudFR5cGUubG9nTGV2ZWxTZXR0aW5nczpcclxuXHRcdFx0XHRyZXR1cm4gRmlsZVR5cGUuTG9nTGV2ZWxTZXR0aW5ncztcclxuXHRcdFx0Y2FzZSBDb250ZW50VHlwZS51c2VyRmFjdHM6XHJcblx0XHRcdFx0cmV0dXJuIEZpbGVUeXBlLlVzZXJGYWN0cztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbm1hcHBlZCBDb250ZW50VHlwZSBpbiBUbXNDYWNoZVwiKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/TargetedMessaging/TargetedMessagingCache.ts\n')},"./scripts/app/TargetedMessaging/TargetedMessagingCampaignDefinitionProvider.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TargetedMessagingCampaignDefinitionProvider", function() { return TargetedMessagingCampaignDefinitionProvider; });\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Campaign_CampaignDefinitionProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Campaign/CampaignDefinitionProvider */ "../FloodgateCore/dist/src/Campaign/CampaignDefinitionProvider.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Campaign_CampaignDefinitionProvider__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Campaign_CampaignDefinitionProvider__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Configuration/DynamicConfiguration */ "./scripts/app/Configuration/DynamicConfiguration.ts");\n/* harmony import */ var _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TargetedMessagingConstants */ "./scripts/app/TargetedMessaging/TargetedMessagingConstants.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Utils */ "./scripts/app/Utils.ts");\n/* harmony import */ var _AssetsProvider__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AssetsProvider */ "./scripts/app/TargetedMessaging/AssetsProvider.ts");\n/**\r\n * TargetedMessagingProvider.ts\r\n *\r\n * Module for targeted messaging campaign definition provider.\r\n */\r\n\r\n\r\n\r\n\r\n\r\nvar TargetedMessagingCampaignDefinitionProvider = /** @class */ (function () {\r\n    function TargetedMessagingCampaignDefinitionProvider() {\r\n        this.loadAsyncTriggered = false;\r\n        this.campaignDefinitions = [];\r\n    }\r\n    TargetedMessagingCampaignDefinitionProvider.prototype.load = function () {\r\n        if (!this.loadAsyncTriggered) {\r\n            this.loadAsync();\r\n            this.loadAsyncTriggered = true;\r\n        }\r\n        return this.campaignDefinitions || [];\r\n    };\r\n    TargetedMessagingCampaignDefinitionProvider.prototype.loadAsync = function () {\r\n        var thisObj = this;\r\n        var campaignDefinitionsPromise = _AssetsProvider__WEBPACK_IMPORTED_MODULE_4__["get"]().getCampaignDefinitions();\r\n        campaignDefinitionsPromise.then(function (response) {\r\n            thisObj.loadCampaignDefinitions(response);\r\n            thisObj.loadAsyncTriggered = true;\r\n        });\r\n        var timeoutMilliseconds = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_1__["getDynamicSetting"])("TmsLoadTimeout" /* tmsLoadTimeout */, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_2__["TMS_CAMPAIGN_LOAD_TIMEOUT"]);\r\n        var timeoutPromise = Object(_Utils__WEBPACK_IMPORTED_MODULE_3__["createTimeoutPromise"])(timeoutMilliseconds, campaignDefinitionsPromise);\r\n        return new Promise(function (resolve, reject) {\r\n            timeoutPromise.then(function onFulfilled(response) {\r\n                thisObj.loadCampaignDefinitions(response);\r\n                thisObj.loadAsyncTriggered = true;\r\n                resolve(thisObj.campaignDefinitions);\r\n            }).catch(\r\n            // might have timed out or getCampaignDefinitions might have failed\r\n            // In either case we resolve with cached content\r\n            function onRejected(error) {\r\n                if (thisObj.campaignDefinitions.length <= 0) {\r\n                    thisObj.loadCampaignDefinitions(_AssetsProvider__WEBPACK_IMPORTED_MODULE_4__["get"]().getCachedCampaignDefinitions());\r\n                }\r\n                resolve(thisObj.campaignDefinitions);\r\n            }).catch(\r\n            // handle any errors from catch block\r\n            function onRejected(error) {\r\n                resolve(thisObj.campaignDefinitions);\r\n            });\r\n        });\r\n    };\r\n    TargetedMessagingCampaignDefinitionProvider.prototype.loadCampaignDefinitions = function (response) {\r\n        var definitions = response && response.campaigns;\r\n        if (definitions) {\r\n            this.campaignDefinitions = Object(_ms_ofb_officefloodgatecore_dist_src_Campaign_CampaignDefinitionProvider__WEBPACK_IMPORTED_MODULE_0__["FilterValidCampaignDefinitions"])(definitions).result;\r\n        }\r\n    };\r\n    return TargetedMessagingCampaignDefinitionProvider;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9UYXJnZXRlZE1lc3NhZ2luZ0NhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyLnRzPzVmNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O0dBSUc7QUFLeUU7QUFDVTtBQUNiO0FBQ3pCO0FBRUc7QUFFbkQ7SUFBQTtRQUNTLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQyx3QkFBbUIsR0FBNkIsRUFBRSxDQUFDO0lBcUQ1RCxDQUFDO0lBbkRPLDBEQUFJLEdBQVg7UUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzdCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1NBQy9CO1FBRUQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSwrREFBUyxHQUFoQjtRQUNDLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFNLDBCQUEwQixHQUFHLG1EQUFrQixFQUFFLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNqRiwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsVUFBQyxRQUFRO1lBQ3hDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBTSxtQkFBbUIsR0FBRyw2RkFBaUIsd0NBQTRCLHFGQUF5QixDQUFDLENBQUM7UUFDcEcsSUFBTSxjQUFjLEdBQUcsbUVBQW9CLENBQUMsbUJBQW1CLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztRQUM3RixPQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTyxFQUFFLE1BQU07WUFDbEMsY0FBYyxDQUFDLElBQUksQ0FDbEIsU0FBUyxXQUFXLENBQUMsUUFBUTtnQkFDNUIsT0FBTyxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO2dCQUNsQyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUNELENBQUMsS0FBSztZQUNOLG1FQUFtRTtZQUNuRSxnREFBZ0Q7WUFDaEQsU0FBUyxVQUFVLENBQUMsS0FBSztnQkFDeEIsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtvQkFDNUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLG1EQUFrQixFQUFFLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO2lCQUNyRjtnQkFFRCxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUNELENBQUMsS0FBSztZQUNOLHFDQUFxQztZQUNyQyxTQUFTLFVBQVUsQ0FBQyxLQUFLO2dCQUN4QixPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUNELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyw2RUFBdUIsR0FBL0IsVUFBZ0MsUUFBNkI7UUFDNUQsSUFBTSxXQUFXLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDbkQsSUFBSSxXQUFXLEVBQUU7WUFDaEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLCtJQUE4QixDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUM5RTtJQUNGLENBQUM7SUFDRixrREFBQztBQUFELENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9UYXJnZXRlZE1lc3NhZ2luZ0NhbXBhaWduRGVmaW5pdGlvblByb3ZpZGVyLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFRhcmdldGVkTWVzc2FnaW5nUHJvdmlkZXIudHNcclxuICpcclxuICogTW9kdWxlIGZvciB0YXJnZXRlZCBtZXNzYWdpbmcgY2FtcGFpZ24gZGVmaW5pdGlvbiBwcm92aWRlci5cclxuICovXHJcblxyXG5pbXBvcnQgeyBBcGkgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlXCI7XHJcbmltcG9ydCB7IENhbXBhaWduRGVmaW5pdGlvbnMgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0dvdmVybmFuY2UvQ2FtcGFpZ25EZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBGaWx0ZXJWYWxpZENhbXBhaWduRGVmaW5pdGlvbnMgfSBmcm9tXHJcblx0XCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvQ2FtcGFpZ24vQ2FtcGFpZ25EZWZpbml0aW9uUHJvdmlkZXJcIjtcclxuaW1wb3J0IHsgZ2V0RHluYW1pY1NldHRpbmcsIFNldHRpbmdLZXkgfSBmcm9tIFwiLi4vQ29uZmlndXJhdGlvbi9EeW5hbWljQ29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBUTVNfQ0FNUEFJR05fTE9BRF9USU1FT1VUIH0gZnJvbSBcIi4vVGFyZ2V0ZWRNZXNzYWdpbmdDb25zdGFudHNcIjtcclxuaW1wb3J0IHsgY3JlYXRlVGltZW91dFByb21pc2UgfSBmcm9tIFwiLi4vVXRpbHNcIjtcclxuXHJcbmltcG9ydCAqIGFzIEFzc2V0c1Byb3ZpZGVyIGZyb20gXCIuL0Fzc2V0c1Byb3ZpZGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVGFyZ2V0ZWRNZXNzYWdpbmdDYW1wYWlnbkRlZmluaXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIEFwaS5JQ2FtcGFpZ25EZWZpbml0aW9uUHJvdmlkZXIge1xyXG5cdHByaXZhdGUgbG9hZEFzeW5jVHJpZ2dlcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHJpdmF0ZSBjYW1wYWlnbkRlZmluaXRpb25zOiBBcGkuQ2FtcGFpZ25EZWZpbml0aW9uW10gPSBbXTtcclxuXHJcblx0cHVibGljIGxvYWQoKTogQXBpLkNhbXBhaWduRGVmaW5pdGlvbltdIHtcclxuXHRcdGlmICghdGhpcy5sb2FkQXN5bmNUcmlnZ2VyZWQpIHtcclxuXHRcdFx0dGhpcy5sb2FkQXN5bmMoKTtcclxuXHRcdFx0dGhpcy5sb2FkQXN5bmNUcmlnZ2VyZWQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmNhbXBhaWduRGVmaW5pdGlvbnMgfHwgW107XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgbG9hZEFzeW5jKCk6IFByb21pc2U8QXBpLkNhbXBhaWduRGVmaW5pdGlvbltdPiB7XHJcblx0XHRjb25zdCB0aGlzT2JqID0gdGhpcztcclxuXHRcdGNvbnN0IGNhbXBhaWduRGVmaW5pdGlvbnNQcm9taXNlID0gQXNzZXRzUHJvdmlkZXIuZ2V0KCkuZ2V0Q2FtcGFpZ25EZWZpbml0aW9ucygpO1xyXG5cdFx0Y2FtcGFpZ25EZWZpbml0aW9uc1Byb21pc2UudGhlbigocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0dGhpc09iai5sb2FkQ2FtcGFpZ25EZWZpbml0aW9ucyhyZXNwb25zZSk7XHJcblx0XHRcdHRoaXNPYmoubG9hZEFzeW5jVHJpZ2dlcmVkID0gdHJ1ZTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGNvbnN0IHRpbWVvdXRNaWxsaXNlY29uZHMgPSBnZXREeW5hbWljU2V0dGluZyhTZXR0aW5nS2V5LnRtc0xvYWRUaW1lb3V0LCBUTVNfQ0FNUEFJR05fTE9BRF9USU1FT1VUKTtcclxuXHRcdGNvbnN0IHRpbWVvdXRQcm9taXNlID0gY3JlYXRlVGltZW91dFByb21pc2UodGltZW91dE1pbGxpc2Vjb25kcywgY2FtcGFpZ25EZWZpbml0aW9uc1Byb21pc2UpO1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0dGltZW91dFByb21pc2UudGhlbihcclxuXHRcdFx0XHRmdW5jdGlvbiBvbkZ1bGZpbGxlZChyZXNwb25zZSkge1xyXG5cdFx0XHRcdFx0dGhpc09iai5sb2FkQ2FtcGFpZ25EZWZpbml0aW9ucyhyZXNwb25zZSk7XHJcblx0XHRcdFx0XHR0aGlzT2JqLmxvYWRBc3luY1RyaWdnZXJlZCA9IHRydWU7XHJcblx0XHRcdFx0XHRyZXNvbHZlKHRoaXNPYmouY2FtcGFpZ25EZWZpbml0aW9ucyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpLmNhdGNoKFxyXG5cdFx0XHRcdC8vIG1pZ2h0IGhhdmUgdGltZWQgb3V0IG9yIGdldENhbXBhaWduRGVmaW5pdGlvbnMgbWlnaHQgaGF2ZSBmYWlsZWRcclxuXHRcdFx0XHQvLyBJbiBlaXRoZXIgY2FzZSB3ZSByZXNvbHZlIHdpdGggY2FjaGVkIGNvbnRlbnRcclxuXHRcdFx0XHRmdW5jdGlvbiBvblJlamVjdGVkKGVycm9yKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpc09iai5jYW1wYWlnbkRlZmluaXRpb25zLmxlbmd0aCA8PSAwKSB7XHJcblx0XHRcdFx0XHRcdHRoaXNPYmoubG9hZENhbXBhaWduRGVmaW5pdGlvbnMoQXNzZXRzUHJvdmlkZXIuZ2V0KCkuZ2V0Q2FjaGVkQ2FtcGFpZ25EZWZpbml0aW9ucygpKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRyZXNvbHZlKHRoaXNPYmouY2FtcGFpZ25EZWZpbml0aW9ucyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpLmNhdGNoKFxyXG5cdFx0XHRcdC8vIGhhbmRsZSBhbnkgZXJyb3JzIGZyb20gY2F0Y2ggYmxvY2tcclxuXHRcdFx0XHRmdW5jdGlvbiBvblJlamVjdGVkKGVycm9yKSB7XHJcblx0XHRcdFx0XHRyZXNvbHZlKHRoaXNPYmouY2FtcGFpZ25EZWZpbml0aW9ucyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGxvYWRDYW1wYWlnbkRlZmluaXRpb25zKHJlc3BvbnNlOiBDYW1wYWlnbkRlZmluaXRpb25zKSB7XHJcblx0XHRjb25zdCBkZWZpbml0aW9ucyA9IHJlc3BvbnNlICYmIHJlc3BvbnNlLmNhbXBhaWducztcclxuXHRcdGlmIChkZWZpbml0aW9ucykge1xyXG5cdFx0XHR0aGlzLmNhbXBhaWduRGVmaW5pdGlvbnMgPSBGaWx0ZXJWYWxpZENhbXBhaWduRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpLnJlc3VsdDtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/TargetedMessaging/TargetedMessagingCampaignDefinitionProvider.ts\n')},"./scripts/app/TargetedMessaging/TargetedMessagingClient.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContentResponse", function() { return ContentResponse; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDebugCampaignDefinitions", function() { return getDebugCampaignDefinitions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDebugUserFacts", function() { return getDebugUserFacts; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TargetedMessagingClient", function() { return TargetedMessagingClient; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/IFloodgateStorageProvider */ "../FloodgateCore/dist/src/Api/IFloodgateStorageProvider.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _TargetedMessagingTransport__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TargetedMessagingTransport */ "./scripts/app/TargetedMessaging/TargetedMessagingTransport.ts");\n/* harmony import */ var _Common_UrlUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Common/UrlUtils */ "./scripts/app/Common/UrlUtils.ts");\n/* harmony import */ var _TargetedMessagingCache__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./TargetedMessagingCache */ "./scripts/app/TargetedMessaging/TargetedMessagingCache.ts");\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Constants */ "./scripts/app/Constants.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/* harmony import */ var _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./TargetedMessagingConstants */ "./scripts/app/TargetedMessaging/TargetedMessagingConstants.ts");\n/* harmony import */ var _Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Configuration/DynamicConfiguration */ "./scripts/app/Configuration/DynamicConfiguration.ts");\n/* harmony import */ var _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../FloodgateCore/FloodgateStorageProvider */ "./scripts/app/FloodgateCore/FloodgateStorageProvider.ts");\n/* harmony import */ var _AugLoopHelper__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./AugLoopHelper */ "./scripts/app/TargetedMessaging/AugLoopHelper.ts");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar ContentResponse = /** @class */ (function () {\r\n    function ContentResponse() {\r\n    }\r\n    return ContentResponse;\r\n}());\r\n\r\nfunction getDebugCampaignDefinitions() {\r\n    var debugOverrides = _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_9__["default"].safeReadObject(_ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_1__["FileType"].DebugOverrides, {});\r\n    return debugOverrides && debugOverrides.tmsResponse && debugOverrides.tmsResponse.CampaignContent && {\r\n        contentType: "CampaignContent" /* campaignContent */,\r\n        content: debugOverrides.tmsResponse.CampaignContent,\r\n    };\r\n}\r\nfunction getDebugUserFacts() {\r\n    var debugOverrides = _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_9__["default"].safeReadObject(_ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_1__["FileType"].DebugOverrides, {});\r\n    return debugOverrides && debugOverrides.userFactsResponse && {\r\n        contentType: "UserFacts" /* userFacts */,\r\n        content: debugOverrides.userFactsResponse,\r\n    };\r\n}\r\nvar TargetedMessagingClient = /** @class */ (function () {\r\n    function TargetedMessagingClient(app, platform, version, locale, country, sessionId, authTokenCallback, augLoopCallback, campaignFlights, campaignParameters, ageGroup, authType, audience, messagingServiceSettings, tmsgCacheIn) {\r\n        var _a, _b, _c, _d;\r\n        this.locale = "en-us";\r\n        this.country = "US";\r\n        this.locale = locale;\r\n        this.country = country;\r\n        this.authTokenCallback = authTokenCallback;\r\n        this.augLoopCallback = augLoopCallback;\r\n        this.app = app;\r\n        this.platform = platform;\r\n        this.version = version;\r\n        this.sessionId = sessionId;\r\n        this.campaignFlights = campaignFlights;\r\n        this.campaignParameters = campaignParameters;\r\n        this.ageGroup = ageGroup;\r\n        this.authType = authType;\r\n        this.messagingServiceSettings = messagingServiceSettings;\r\n        var internalEnvs = ["dogfood", "edog", "int", "microsoft"];\r\n        var isInternalEnv = audience && internalEnvs.indexOf(audience.toLowerCase()) !== -1;\r\n        var campaignMetadataAggregatorConfig = isInternalEnv ? (_a = this.messagingServiceSettings) === null || _a === void 0 ? void 0 : _a.campaignMetadataAggregatorInt : (_b = this.messagingServiceSettings) === null || _b === void 0 ? void 0 : _b.campaignMetadataAggregatorProd;\r\n        var setCampaignActionConfig = isInternalEnv ? (_c = this.messagingServiceSettings) === null || _c === void 0 ? void 0 : _c.setCampaignActionInt : (_d = this.messagingServiceSettings) === null || _d === void 0 ? void 0 : _d.setCampaignActionProd;\r\n        var cmaDefaultBaseUrlPrefix = isInternalEnv ? _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["TMS_CAMPAIGNMETADATAAGGREGATOR_PREFIX_EDOG"]\r\n            : _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["TMS_CAMPAIGNMETADATAAGGREGATOR_PREFIX_PROD"];\r\n        var scaDefaultBaseUrlPrefix = isInternalEnv ? _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["TMS_SETCAMPAIGNACTION_PREFIX_EDOG"]\r\n            : _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["TMS_SETCAMPAIGNACTION_PREFIX_PROD"];\r\n        this.campaignMetadataAggregatorPrefix = campaignMetadataAggregatorConfig || cmaDefaultBaseUrlPrefix;\r\n        this.setCampaignActionPrefix = setCampaignActionConfig || scaDefaultBaseUrlPrefix;\r\n        this.tmsgCache = this.tmsgCache || tmsgCacheIn || new _TargetedMessagingCache__WEBPACK_IMPORTED_MODULE_4__["TargetedMessagingCache"]([\r\n            "MessageMetadata" /* messageMetadata */,\r\n            "UserGovernance" /* userGovernanceRules */,\r\n            "CampaignContent" /* campaignContent */,\r\n            "DynamicSettings" /* dynamicSettings */,\r\n            "LogLevelSettings" /* logLevelSettings */,\r\n            "UserFacts" /* userFacts */,\r\n        ]);\r\n    }\r\n    TargetedMessagingClient.prototype.getContent = function (requestedContent) {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var response;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!this.tmsgCache.isItemExpired(requestedContent)) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, this.refreshItemsInCacheFromTmsService([requestedContent])];\r\n                    case 1:\r\n                        _a.sent();\r\n                        _a.label = 2;\r\n                    case 2:\r\n                        response = this.retrieveCacheItemAndCreateContentResponse(requestedContent);\r\n                        return [2 /*return*/, response];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    TargetedMessagingClient.prototype.getMultipleContents = function (requestedContent) {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var contentResponses, bulkRefreshList, _i, requestedContent_1, contentType, responseItem;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.refreshItemsInCacheFromTmsService(requestedContent)];\r\n                    case 1:\r\n                        _a.sent();\r\n                        contentResponses = new Array();\r\n                        bulkRefreshList = new Array();\r\n                        for (_i = 0, requestedContent_1 = requestedContent; _i < requestedContent_1.length; _i++) {\r\n                            contentType = requestedContent_1[_i];\r\n                            responseItem = this.createCachedContentResponse(contentType);\r\n                            contentResponses.push(responseItem);\r\n                        }\r\n                        this.refreshItemsInCacheFromTmsService(bulkRefreshList);\r\n                        return [2 /*return*/, contentResponses];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    TargetedMessagingClient.prototype.getUserFactsContent = function (requestedContent) {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var response;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.refreshItemsInCacheFromTulipsService(requestedContent)];\r\n                    case 1:\r\n                        _a.sent();\r\n                        response = this.retrieveCacheItemAndCreateContentResponse(requestedContent);\r\n                        return [2 /*return*/, response];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    TargetedMessagingClient.prototype.sendBeaconRequestToService = function (app, beaconParameters, platform, version, locale, country, sessionId, authTokenCallback) {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var tmsAppId, authToken, puid, _a, requestStartTime, tmsQueryParams, requestBody, response, error_1;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_b) {\r\n                switch (_b.label) {\r\n                    case 0:\r\n                        this.sessionId = sessionId;\r\n                        this.authTokenCallback = authTokenCallback;\r\n                        tmsAppId = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_8__["getDynamicSetting"])("TmsAppId" /* tmsAppId */, _Constants__WEBPACK_IMPORTED_MODULE_5__["GUIDs"].TMSAppID);\r\n                        return [4 /*yield*/, this.getAuthToken(tmsAppId)];\r\n                    case 1:\r\n                        authToken = _b.sent();\r\n                        puid = undefined;\r\n                        if (!!authToken) return [3 /*break*/, 4];\r\n                        _a = this.authTokenCallback.getUserPuid;\r\n                        if (!_a) return [3 /*break*/, 3];\r\n                        return [4 /*yield*/, this.authTokenCallback.getUserPuid()];\r\n                    case 2:\r\n                        _a = (_b.sent());\r\n                        _b.label = 3;\r\n                    case 3:\r\n                        puid = _a;\r\n                        _b.label = 4;\r\n                    case 4:\r\n                        requestStartTime = +new Date();\r\n                        _b.label = 5;\r\n                    case 5:\r\n                        _b.trys.push([5, 7, , 8]);\r\n                        tmsQueryParams = {\r\n                            app: app,\r\n                            country: country,\r\n                            locale: locale,\r\n                            platform: platform,\r\n                            puid: puid,\r\n                            version: version,\r\n                        };\r\n                        requestBody = JSON.stringify({\r\n                            actionName: beaconParameters.actionName,\r\n                            actionUrl: beaconParameters.actionUrl,\r\n                        });\r\n                        return [4 /*yield*/, this.sendRequest(tmsQueryParams, authToken, "TmsActionUrl" /* tmsActionUrl */, this.setCampaignActionPrefix + _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["TMS_SETCAMPAIGNACTION_ENDPOINT"] + "?", requestBody, "POST")];\r\n                    case 6:\r\n                        response = _b.sent();\r\n                        if (!response || response.status !== 200) {\r\n                            _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].WebSurfaces.SetCampaignAction.Error.VALUE, 2 /* Error */, this.createTelemetryData(requestStartTime, response, "Beacon" + beaconParameters.actionName));\r\n                            return [2 /*return*/, false];\r\n                        }\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].WebSurfaces.SetCampaignAction.Requests.VALUE, 3 /* Info */, this.createTelemetryData(requestStartTime, response, "Beacon" + beaconParameters.actionName), .01);\r\n                        return [2 /*return*/, true];\r\n                    case 7:\r\n                        error_1 = _b.sent();\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].WebSurfaces.SetCampaignAction.Error.VALUE, 2 /* Error */, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ ErrorMessage: "Error fetching from TMS SetCampaignAction endpoint" + (error_1 && error_1.message ? ": " + error_1.message : "") }, this.createTelemetryData(requestStartTime, null, "Beacon" + beaconParameters.actionName)));\r\n                        return [2 /*return*/, false];\r\n                    case 8: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    TargetedMessagingClient.prototype.getCachedContent = function (requestedContent) {\r\n        return this.tmsgCache.getItemContent(requestedContent);\r\n    };\r\n    TargetedMessagingClient.prototype.getAugLoopUserFactsContent = function (requestedContent) {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var response;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!this.tmsgCache.isItemExpired("UserFacts" /* userFacts */)) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, this.refreshUserFactsInCacheFromAugLoop()];\r\n                    case 1:\r\n                        _a.sent();\r\n                        _a.label = 2;\r\n                    case 2:\r\n                        response = this.retrieveCacheItemAndCreateContentResponse(requestedContent);\r\n                        return [2 /*return*/, response];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    TargetedMessagingClient.prototype.refreshUserFactsInCacheFromAugLoop = function () {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var cachedUserFacts, requestStartTime, userFacts, annotationName, augLoopSessionPromise, response, augLoopError, error_2;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!this.tmsgCache.isItemExpired("UserFacts" /* userFacts */)) {\r\n                            cachedUserFacts = this.tmsgCache.getItemContent("UserFacts" /* userFacts */);\r\n                            _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].UserFacts.AugLoop.Requests.VALUE, 3 /* Info */, {\r\n                                Count: cachedUserFacts ? cachedUserFacts.length : -1,\r\n                                Type: "AugLoopUserFactsCached",\r\n                                Flights: this.campaignFlights,\r\n                            }, .01);\r\n                            return [2 /*return*/, cachedUserFacts];\r\n                        }\r\n                        requestStartTime = +new Date();\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        _a.trys.push([1, 3, , 4]);\r\n                        annotationName = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_8__["getDynamicSetting"])("TulipsAugLoopAnnotationName" /* tulipsAugLoopAnnotationName */, "AugLoop_User_UserLifecycleFactsAnnotation");\r\n                        augLoopSessionPromise = this.augLoopCallback.getRuntimeSession;\r\n                        return [4 /*yield*/, Object(_AugLoopHelper__WEBPACK_IMPORTED_MODULE_10__["getAugLoopAnnotationData"])(annotationName, augLoopSessionPromise)];\r\n                    case 2:\r\n                        response = _a.sent();\r\n                        if (response && response.userFacts) {\r\n                            userFacts = this.addClientIngestionTimeAndNormalizeKeysInArray(response.userFacts);\r\n                            this.tmsgCache.setContentItem("UserFacts" /* userFacts */, userFacts, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["CACHE_EXPIRY_USERFACTS"]);\r\n                            _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].UserFacts.AugLoop.Requests.VALUE, 3 /* Info */, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ Count: userFacts ? userFacts.length : -1 }, this.createTelemetryData(requestStartTime, null, "AugLoopUserFacts")), .01);\r\n                        }\r\n                        else {\r\n                            augLoopError = response && response.error;\r\n                            _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].UserFacts.AugLoop.Error.VALUE, 2 /* Error */, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ ErrorMessage: "Error getting augloop facts " + (augLoopError && augLoopError.toString()) }, this.createTelemetryData(requestStartTime, null, "AugLoopUserFacts")));\r\n                        }\r\n                        return [3 /*break*/, 4];\r\n                    case 3:\r\n                        error_2 = _a.sent();\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].UserFacts.AugLoop.Error.VALUE, 2 /* Error */, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ ErrorMessage: "Error getting facts " + (error_2 && error_2.message) }, this.createTelemetryData(requestStartTime, null, "AugLoopUserFacts")));\r\n                        return [3 /*break*/, 4];\r\n                    case 4: return [2 /*return*/, userFacts];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    TargetedMessagingClient.prototype.createTelemetryData = function (requestStartTimestamp, response, type) {\r\n        var _a = response || {}, headers = _a.headers, status = _a.status, statusText = _a.statusText;\r\n        var serverSessionId = headers && headers.get("X-UserSessionId");\r\n        var serverCorrelationId = headers && headers.get("X-CorrelationId");\r\n        return {\r\n            Type: type,\r\n            TimeMilliseconds: +new Date() - requestStartTimestamp,\r\n            SessionId: serverSessionId || this.sessionId,\r\n            CorrelationId: serverCorrelationId || undefined,\r\n            HttpStatusCode: status || undefined,\r\n            HttpStatusText: statusText || undefined,\r\n            Flights: this.campaignFlights,\r\n        };\r\n    };\r\n    TargetedMessagingClient.prototype.sendRequest = function (tmsgQueryParams, authToken, key, defaultBaseUrl, requestBody, verb) {\r\n        this.tmsgTransport = this.tmsgTransport || new _TargetedMessagingTransport__WEBPACK_IMPORTED_MODULE_2__["TargetedMessagingTransport"](this.sessionId);\r\n        var queryParamStr = Object(_Common_UrlUtils__WEBPACK_IMPORTED_MODULE_3__["buildQueryParameters"])(tmsgQueryParams);\r\n        var tmsgBaseUrl = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_8__["getDynamicSetting"])(key, defaultBaseUrl);\r\n        var requestPromise = verb === "POST" ?\r\n            this.tmsgTransport.sendPostRequest(tmsgBaseUrl + queryParamStr, requestBody, authToken) :\r\n            this.tmsgTransport.sendGetRequest(tmsgBaseUrl + queryParamStr, authToken);\r\n        return requestPromise;\r\n    };\r\n    TargetedMessagingClient.prototype.retrieveCacheItemAndCreateContentResponse = function (contentType) {\r\n        var responseItem = this.createCachedContentResponse(contentType);\r\n        if (this.tmsgCache.isItemExpired(contentType)) {\r\n            if (contentType === "UserFacts" /* userFacts */) {\r\n                this.refreshItemsInCacheFromTulipsService(contentType);\r\n            }\r\n            else {\r\n                this.refreshItemsInCacheFromTmsService([contentType]);\r\n            }\r\n        }\r\n        return responseItem;\r\n    };\r\n    TargetedMessagingClient.prototype.createCachedContentResponse = function (requestedContent) {\r\n        var contentResponse = new ContentResponse();\r\n        contentResponse.content = this.tmsgCache.getItemContent(requestedContent);\r\n        contentResponse.contentType = requestedContent;\r\n        return contentResponse;\r\n    };\r\n    TargetedMessagingClient.prototype.getAuthToken = function (appIdOrUri) {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var startTime, getDuration, createAuthTelemetryData, retVal, error_3;\r\n            var _this = this;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!this.authTokenCallback || !this.authTokenCallback.getAuthToken) {\r\n                            return [2 /*return*/, null];\r\n                        }\r\n                        startTime = +new Date();\r\n                        getDuration = function () { return +new Date() - startTime; };\r\n                        createAuthTelemetryData = function (errorMessage) {\r\n                            if (errorMessage === void 0) { errorMessage = undefined; }\r\n                            return {\r\n                                ErrorMessage: errorMessage,\r\n                                SessionId: _this.sessionId,\r\n                                TimeMilliseconds: getDuration(),\r\n                                Type: appIdOrUri,\r\n                            };\r\n                        };\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        _a.trys.push([1, 3, , 4]);\r\n                        return [4 /*yield*/, this.authTokenCallback.getAuthToken(appIdOrUri)];\r\n                    case 2:\r\n                        retVal = _a.sent();\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].WebSurfaces.Common.Info.VALUE, 3 /* Info */, createAuthTelemetryData());\r\n                        return [2 /*return*/, retVal];\r\n                    case 3:\r\n                        error_3 = _a.sent();\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].WebSurfaces.Common.Error.VALUE, 2 /* Error */, createAuthTelemetryData("Error getting token " + (error_3 && error_3.message ? ": " + error_3.message : "")));\r\n                        return [3 /*break*/, 4];\r\n                    case 4: return [2 /*return*/, null];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    TargetedMessagingClient.prototype.refreshItemsInCacheFromTmsService = function (contentTypes) {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var bulkRefreshList, _i, contentTypes_1, contentType, tmsAppId, authToken, userPuid, _a, requestStartTime, documentElement, browserParams, debugOverrides, tmsQueryParams, response, tmsServiceResponse, error_4;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_b) {\r\n                switch (_b.label) {\r\n                    case 0:\r\n                        if (contentTypes.length === 0) {\r\n                            return [2 /*return*/];\r\n                        }\r\n                        bulkRefreshList = new Array();\r\n                        for (_i = 0, contentTypes_1 = contentTypes; _i < contentTypes_1.length; _i++) {\r\n                            contentType = contentTypes_1[_i];\r\n                            if (this.tmsgCache.isItemExpired(contentType)) {\r\n                                bulkRefreshList.push(contentType);\r\n                            }\r\n                        }\r\n                        if (bulkRefreshList.length === 0) {\r\n                            // exit out if all items in cache are still valid to avoid unnecessary service roundtrips \r\n                            return [2 /*return*/];\r\n                        }\r\n                        // always request for dynamic settings\r\n                        if (contentTypes.indexOf("DynamicSettings" /* dynamicSettings */) === -1) {\r\n                            contentTypes.push("DynamicSettings" /* dynamicSettings */);\r\n                        }\r\n                        tmsAppId = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_8__["getDynamicSetting"])("TmsAppId" /* tmsAppId */, _Constants__WEBPACK_IMPORTED_MODULE_5__["GUIDs"].TMSAppID);\r\n                        return [4 /*yield*/, this.getAuthToken(tmsAppId)];\r\n                    case 1:\r\n                        authToken = _b.sent();\r\n                        userPuid = undefined;\r\n                        if (!!authToken) return [3 /*break*/, 4];\r\n                        _a = this.authTokenCallback.getUserPuid;\r\n                        if (!_a) return [3 /*break*/, 3];\r\n                        return [4 /*yield*/, this.authTokenCallback.getUserPuid()];\r\n                    case 2:\r\n                        _a = (_b.sent());\r\n                        _b.label = 3;\r\n                    case 3:\r\n                        userPuid = _a;\r\n                        _b.label = 4;\r\n                    case 4:\r\n                        requestStartTime = +new Date();\r\n                        _b.label = 5;\r\n                    case 5:\r\n                        _b.trys.push([5, 10, , 11]);\r\n                        documentElement = document && (document.documentElement || document.getElementsByTagName("body")[0]);\r\n                        browserParams = {\r\n                            pageWidth: window.innerWidth || documentElement.clientWidth,\r\n                            pageHeight: window.innerHeight || documentElement.clientHeight,\r\n                            screenWidth: screen ? screen.width : undefined,\r\n                            screenHeight: screen ? screen.height : undefined,\r\n                            colorDepth: screen ? screen.colorDepth : undefined,\r\n                        };\r\n                        debugOverrides = _FloodgateCore_FloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_9__["default"].safeReadObject(_ms_ofb_officefloodgatecore_dist_src_Api_IFloodgateStorageProvider__WEBPACK_IMPORTED_MODULE_1__["FileType"].DebugOverrides, {});\r\n                        tmsQueryParams = debugOverrides.replaceTmsQueryParams || Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ country: this.country, locale: this.locale, app: this.app, platform: this.platform, version: this.version, campaignParams: Object(_Common_UrlUtils__WEBPACK_IMPORTED_MODULE_3__["buildQueryParameters"])(browserParams) + "&more=true&" + (this.campaignParameters || ""), contentType: contentTypes.join(";"), puid: userPuid, OFC_FLIGHTS: this.campaignFlights }, (debugOverrides.addTmsQueryParams || {})), { ageGroup: this.ageGroup, sessionUserType: this.authType });\r\n                        return [4 /*yield*/, this.sendRequest(tmsQueryParams, authToken, "TmsServiceUrl" /* tmsServiceUrl */, this.campaignMetadataAggregatorPrefix + _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["TMS_CAMPAIGNMETADATAAGGREGATOR_ENDPOINT"] + "?")];\r\n                    case 6:\r\n                        response = _b.sent();\r\n                        if (!(response.status === 200)) return [3 /*break*/, 8];\r\n                        return [4 /*yield*/, response.json()];\r\n                    case 7:\r\n                        tmsServiceResponse = _b.sent();\r\n                        if (contentTypes.indexOf("MessageMetadata" /* messageMetadata */) !== -1\r\n                            && tmsServiceResponse.MessageMetadata !== undefined) {\r\n                            this.tmsgCache.setContentItem("MessageMetadata" /* messageMetadata */, tmsServiceResponse.MessageMetadata, Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_8__["getDynamicSetting"])("TmsMessageMetadataExpiry" /* tmsMessageMetadataExpiry */, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["CACHE_EXPIRY_MESSAGEMETADATA"]));\r\n                        }\r\n                        if (contentTypes.indexOf("UserGovernance" /* userGovernanceRules */) !== -1\r\n                            && tmsServiceResponse.UserGovernanceRules !== undefined) {\r\n                            this.tmsgCache.setContentItem("UserGovernance" /* userGovernanceRules */, tmsServiceResponse.UserGovernanceRules, Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_8__["getDynamicSetting"])("TmsUserGovernanceRulesExpiry" /* tmsUserGovernanceRulesExpiry */, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["CACHE_EXPIRY_USERGOVERNANCERULES"]));\r\n                        }\r\n                        if (contentTypes.indexOf("CampaignContent" /* campaignContent */) !== -1\r\n                            && tmsServiceResponse.CampaignContent !== undefined) {\r\n                            this.tmsgCache.setContentItem("CampaignContent" /* campaignContent */, tmsServiceResponse.CampaignContent, Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_8__["getDynamicSetting"])("TmsCampaignContentExpiry" /* tmsCampaignContentExpiry */, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["CACHE_EXPIRY_CAMPAIGNCONTENT"]));\r\n                        }\r\n                        // There is no explicit request for the next set of ContentTypes in the code\r\n                        // If the server responds with these types save and use them later\r\n                        if (tmsServiceResponse.DynamicSettings !== undefined) {\r\n                            this.tmsgCache.setContentItem("DynamicSettings" /* dynamicSettings */, tmsServiceResponse.DynamicSettings, Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_8__["getDynamicSetting"])("TmsDynamicSettingsExpiry" /* tmsDynamicSettingsExpiry */, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["CACHE_EXPIRY_DYNAMICSETTINGS"]));\r\n                        }\r\n                        if (tmsServiceResponse.LogLevelSettings !== undefined) {\r\n                            this.tmsgCache.setContentItem("LogLevelSettings" /* logLevelSettings */, tmsServiceResponse.LogLevelSettings, Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_8__["getDynamicSetting"])("TmsLogLevelSettingsExpiry" /* tmsLogLevelSettingsExpiry */, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["CACHE_EXPIRY_LOGLEVELSETTINGS"]));\r\n                        }\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].WebSurfaces.CampaignMetadataAggregator.Requests.VALUE, 3 /* Info */, this.createTelemetryData(requestStartTime, response, contentTypes.join(";")), .01);\r\n                        return [3 /*break*/, 9];\r\n                    case 8:\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].WebSurfaces.CampaignMetadataAggregator.Error.VALUE, 2 /* Error */, this.createTelemetryData(requestStartTime, response, contentTypes.join(";")));\r\n                        _b.label = 9;\r\n                    case 9: return [3 /*break*/, 11];\r\n                    case 10:\r\n                        error_4 = _b.sent();\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].WebSurfaces.CampaignMetadataAggregator.Error.VALUE, 2 /* Error */, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ ErrorMessage: "Error fetching from TMS" + (error_4 && error_4.message ? ": " + error_4.message : "") }, this.createTelemetryData(requestStartTime, null, contentTypes.join(";"))));\r\n                        return [3 /*break*/, 11];\r\n                    case 11: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    TargetedMessagingClient.prototype.refreshItemsInCacheFromTulipsService = function (contentType) {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var tulipsAppId, authToken, requestStartTime, response, tulipsServiceResponse, normalizedUserFacts, error_5;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        // check if touched item is actually due for refresh or is still valid\r\n                        if (!this.tmsgCache.isItemExpired(contentType)) {\r\n                            // exit out if the cache is still valid to avoid unnecessary service roundtrips\r\n                            return [2 /*return*/];\r\n                        }\r\n                        tulipsAppId = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_8__["getDynamicSetting"])("TulipsAppId" /* tulipsAppId */, _Constants__WEBPACK_IMPORTED_MODULE_5__["GUIDs"].TULIPSAppID);\r\n                        return [4 /*yield*/, this.getAuthToken(tulipsAppId)];\r\n                    case 1:\r\n                        authToken = _a.sent();\r\n                        if (!authToken) {\r\n                            // if authToken is null then exit out since service call cannot be made without authToken\r\n                            return [2 /*return*/];\r\n                        }\r\n                        requestStartTime = +new Date();\r\n                        _a.label = 2;\r\n                    case 2:\r\n                        _a.trys.push([2, 7, , 8]);\r\n                        return [4 /*yield*/, this.sendRequest({}, authToken, "TulipsServiceUrl" /* tulipsServiceUrl */, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["TULIPS_SERVICEURL"])];\r\n                    case 3:\r\n                        response = _a.sent();\r\n                        if (!(response.status === 200 || response.status === 204)) return [3 /*break*/, 5];\r\n                        return [4 /*yield*/, response.json()];\r\n                    case 4:\r\n                        tulipsServiceResponse = _a.sent();\r\n                        if (contentType.indexOf("UserFacts" /* userFacts */) !== -1\r\n                            && tulipsServiceResponse !== undefined) {\r\n                            normalizedUserFacts = this.addClientIngestionTimeAndNormalizeKeys(tulipsServiceResponse);\r\n                            this.tmsgCache.setContentItem("UserFacts" /* userFacts */, normalizedUserFacts, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_7__["CACHE_EXPIRY_USERFACTS"]);\r\n                        }\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].UserFacts.Messaging.Requests.VALUE, 3 /* Info */, this.createTelemetryData(requestStartTime, response, contentType), .01);\r\n                        return [3 /*break*/, 6];\r\n                    case 5:\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].UserFacts.Common.Error.VALUE, 2 /* Error */, this.createTelemetryData(requestStartTime, response, contentType));\r\n                        _a.label = 6;\r\n                    case 6: return [3 /*break*/, 8];\r\n                    case 7:\r\n                        error_5 = _a.sent();\r\n                        _Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_6__["EventIds"].UserFacts.Common.Error.VALUE, 2 /* Error */, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ ErrorMessage: "Error fetching from TULIPS" + (error_5 && error_5.message ? ": " + error_5.message : "") }, this.createTelemetryData(requestStartTime, null, contentType)));\r\n                        return [3 /*break*/, 8];\r\n                    case 8: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    TargetedMessagingClient.prototype.addClientIngestionTimeAndNormalizeKeys = function (tulipsServiceResponse) {\r\n        var _this = this;\r\n        var currentDateTime = new Date(Date.now()).toISOString();\r\n        return tulipsServiceResponse.map(function (responseFact) {\r\n            var fact = _this.normalizeKeys(responseFact);\r\n            fact.clientIngestionDateTime = currentDateTime;\r\n            return fact;\r\n        });\r\n    };\r\n    TargetedMessagingClient.prototype.addClientIngestionTimeAndNormalizeKeysInArray = function (userFacts) {\r\n        var _this = this;\r\n        var currentDateTime = new Date(Date.now()).toISOString();\r\n        return userFacts.map(function (userFact) {\r\n            var fact = _this.normalizeKeys(userFact);\r\n            fact.clientIngestionDateTime = currentDateTime;\r\n            return fact;\r\n        });\r\n    };\r\n    /**\r\n     * This method normalizes the keys of the user fact object retrieved from the TULIPS service.\r\n     * Specifically it converts the first letter of each key in the object to lower case.\r\n     * For example the key "UserFactType" returned from the service will be converted to "userFactType".\r\n     * @param userFact the user fact object\r\n     */\r\n    TargetedMessagingClient.prototype.normalizeKeys = function (userFact) {\r\n        var normalizedUserFact = {};\r\n        for (var _i = 0, _a = Object.keys(userFact); _i < _a.length; _i++) {\r\n            var key = _a[_i];\r\n            var normalizedKey = (key.charAt(0).toLowerCase() + key.substring(1));\r\n            normalizedUserFact[normalizedKey] = userFact[key];\r\n        }\r\n        return normalizedUserFact;\r\n    };\r\n    return TargetedMessagingClient;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9UYXJnZXRlZE1lc3NhZ2luZ0NsaWVudC50cz8xMmM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUM4RjtBQUtwQjtBQUVGO0FBQ047QUFFeEI7QUFDSTtBQUNnQjtBQUV3QjtBQUNMO0FBR0o7QUFJN0U7SUFBQTtJQUdBLENBQUM7SUFBRCxzQkFBQztBQUFELENBQUM7O0FBMEJNLFNBQVMsMkJBQTJCO0lBQzFDLElBQU0sY0FBYyxHQUFHLCtFQUF3QixDQUFDLGNBQWMsQ0FBa0IsMkdBQVEsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0csT0FBTyxjQUFjLElBQUksY0FBYyxDQUFDLFdBQVcsSUFBSSxjQUFjLENBQUMsV0FBVyxDQUFDLGVBQWUsSUFBSTtRQUNwRyxXQUFXLHlDQUE2QjtRQUN4QyxPQUFPLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQyxlQUFlO0tBQ25ELENBQUM7QUFDSCxDQUFDO0FBRU0sU0FBUyxpQkFBaUI7SUFDaEMsSUFBTSxjQUFjLEdBQUcsK0VBQXdCLENBQUMsY0FBYyxDQUFrQiwyR0FBUSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RyxPQUFPLGNBQWMsSUFBSSxjQUFjLENBQUMsaUJBQWlCLElBQUk7UUFDNUQsV0FBVyw2QkFBdUI7UUFDbEMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxpQkFBaUI7S0FDekMsQ0FBQztBQUNILENBQUM7QUFFRDtJQW9CQyxpQ0FDQyxHQUFXLEVBQ1gsUUFBZ0IsRUFDaEIsT0FBZSxFQUNmLE1BQWMsRUFDZCxPQUFlLEVBQ2YsU0FBaUIsRUFDakIsaUJBQThDLEVBQzlDLGVBQTJDLEVBQzNDLGVBQXdCLEVBQ3hCLGtCQUEyQixFQUMzQixRQUFtQixFQUNuQixRQUE2QixFQUM3QixRQUFpQixFQUNqQix3QkFBb0QsRUFDcEQsV0FBb0M7O1FBbEM3QixXQUFN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O0lBQ0YsOEJBQUM7QUFBRCxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVGFyZ2V0ZWRNZXNzYWdpbmcvVGFyZ2V0ZWRNZXNzYWdpbmdDbGllbnQudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGkgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlXCI7XHJcbmltcG9ydCB7IEZpbGVUeXBlIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9BcGkvSUZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlclwiO1xyXG5pbXBvcnQgeyBJQXVnTG9vcENhbGxiYWNrIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9BcGkvSUF1Z0xvb3BDYWxsYmFja1wiO1xyXG5pbXBvcnQgeyBJRmxvb2RnYXRlQXV0aFRva2VuQ2FsbGJhY2sgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9JRmxvb2RnYXRlQXV0aFRva2VuQ2FsbGJhY2tcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNwZWMgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0dvdmVybmFuY2UvTWVzc2FnZU1ldGFkYXRhXCI7XHJcblxyXG5pbXBvcnQgeyBUYXJnZXRlZE1lc3NhZ2luZ1RyYW5zcG9ydCB9IGZyb20gXCIuL1RhcmdldGVkTWVzc2FnaW5nVHJhbnNwb3J0XCI7XHJcbmltcG9ydCB7IENvbnRlbnRUeXBlIH0gZnJvbSBcIi4vVGFyZ2V0ZWRNZXNzYWdpbmdDb250ZW50VHlwZVwiO1xyXG5pbXBvcnQgeyBidWlsZFF1ZXJ5UGFyYW1ldGVycywgSVF1ZXJ5UGFyYW1zIH0gZnJvbSBcIi4uL0NvbW1vbi9VcmxVdGlsc1wiO1xyXG5pbXBvcnQgeyBUYXJnZXRlZE1lc3NhZ2luZ0NhY2hlIH0gZnJvbSBcIi4vVGFyZ2V0ZWRNZXNzYWdpbmdDYWNoZVwiO1xyXG5cclxuaW1wb3J0ICogYXMgQ29uc3RhbnRzIGZyb20gXCIuLi9Db25zdGFudHNcIjtcclxuaW1wb3J0ICogYXMgTG9nZ2luZyBmcm9tIFwiLi4vTG9nZ2luZy9Mb2dnaW5nXCI7XHJcbmltcG9ydCAqIGFzIFRtc2dDb25zdGFudHMgZnJvbSBcIi4vVGFyZ2V0ZWRNZXNzYWdpbmdDb25zdGFudHNcIjtcclxuXHJcbmltcG9ydCB7IGdldER5bmFtaWNTZXR0aW5nLCBTZXR0aW5nS2V5IH0gZnJvbSBcIi4uL0NvbmZpZ3VyYXRpb24vRHluYW1pY0NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IEZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlciBmcm9tIFwiLi4vRmxvb2RnYXRlQ29yZS9GbG9vZGdhdGVTdG9yYWdlUHJvdmlkZXJcIjtcclxuaW1wb3J0IHsgSUJlYWNvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi4vRmxvb2RnYXRlQ29yZS9Db2FjaGluZ1VYTGF1bmNoZXJGYWN0b3J5XCI7XHJcblxyXG5pbXBvcnQgeyBnZXRBdWdMb29wQW5ub3RhdGlvbkRhdGEsIElBdWdMb29wUmVzcG9uc2UgfSBmcm9tIFwiLi9BdWdMb29wSGVscGVyXCI7XHJcbmltcG9ydCB7IElTZXNzaW9uIH0gZnJvbSBcIkBhdWdsb29wL3J1bnRpbWUtY2xpZW50XCI7XHJcbmltcG9ydCB7IEFnZUdyb3VwLCBBdXRoZW50aWNhdGlvblR5cGUsIElNZXNzYWdpbmdTZXJ2aWNlU2V0dGluZ3N9IGZyb20gXCIuLi9Db25maWd1cmF0aW9uL0lJbml0T3B0aW9uc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbnRlbnRSZXNwb25zZSB7XHJcblx0cHVibGljIGNvbnRlbnRUeXBlOiBDb250ZW50VHlwZTtcclxuXHRwdWJsaWMgY29udGVudDogYW55O1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSVRtc1NlcnZpY2VSZXNwb25zZSB7XHJcblx0TWVzc2FnZU1ldGFkYXRhOiBNZXNzYWdlU3BlYztcclxuXHRVc2VyR292ZXJuYW5jZVJ1bGVzOiBhbnk7XHJcblx0Q2FtcGFpZ25Db250ZW50OiBhbnk7XHJcblx0RHluYW1pY1NldHRpbmdzOiBhbnk7XHJcblx0TG9nTGV2ZWxTZXR0aW5nczogSUxvZ0xldmVsU2V0dGluZ3M7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJVXNlckZhY3RzQXVnTG9vcFJlc3BvbnNlIHtcclxuXHRwdWlkOiBzdHJpbmc7XHJcblx0dXNlckZhY3RzOiBBcGkuSVVzZXJGYWN0W107XHJcbn1cclxuXHJcbmludGVyZmFjZSBJTG9nTGV2ZWxTZXR0aW5ncyB7XHJcblx0bG9nTGV2ZWw6IExvZ2dpbmcuTG9nTGV2ZWw7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJRGVidWdPdmVycmlkZXMge1xyXG5cdGFkZFRtc1F1ZXJ5UGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuXHRyZXBsYWNlVG1zUXVlcnlQYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG5cdHRtc1Jlc3BvbnNlPzogSVRtc1NlcnZpY2VSZXNwb25zZTtcclxuXHR1c2VyRmFjdHNSZXNwb25zZT86IElUbXNTZXJ2aWNlUmVzcG9uc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWJ1Z0NhbXBhaWduRGVmaW5pdGlvbnMoKTogQ29udGVudFJlc3BvbnNlIHtcclxuXHRjb25zdCBkZWJ1Z092ZXJyaWRlcyA9IEZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlci5zYWZlUmVhZE9iamVjdDxJRGVidWdPdmVycmlkZXM+KEZpbGVUeXBlLkRlYnVnT3ZlcnJpZGVzLCB7fSk7XHJcblx0cmV0dXJuIGRlYnVnT3ZlcnJpZGVzICYmIGRlYnVnT3ZlcnJpZGVzLnRtc1Jlc3BvbnNlICYmIGRlYnVnT3ZlcnJpZGVzLnRtc1Jlc3BvbnNlLkNhbXBhaWduQ29udGVudCAmJiB7XHJcblx0XHRjb250ZW50VHlwZTogQ29udGVudFR5cGUuY2FtcGFpZ25Db250ZW50LFxyXG5cdFx0Y29udGVudDogZGVidWdPdmVycmlkZXMudG1zUmVzcG9uc2UuQ2FtcGFpZ25Db250ZW50LFxyXG5cdH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWJ1Z1VzZXJGYWN0cygpOiBDb250ZW50UmVzcG9uc2Uge1xyXG5cdGNvbnN0IGRlYnVnT3ZlcnJpZGVzID0gRmxvb2RnYXRlU3RvcmFnZVByb3ZpZGVyLnNhZmVSZWFkT2JqZWN0PElEZWJ1Z092ZXJyaWRlcz4oRmlsZVR5cGUuRGVidWdPdmVycmlkZXMsIHt9KTtcclxuXHRyZXR1cm4gZGVidWdPdmVycmlkZXMgJiYgZGVidWdPdmVycmlkZXMudXNlckZhY3RzUmVzcG9uc2UgJiYge1xyXG5cdFx0Y29udGVudFR5cGU6IENvbnRlbnRUeXBlLnVzZXJGYWN0cyxcclxuXHRcdGNvbnRlbnQ6IGRlYnVnT3ZlcnJpZGVzLnVzZXJGYWN0c1Jlc3BvbnNlLFxyXG5cdH07XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUYXJnZXRlZE1lc3NhZ2luZ0NsaWVudCB7XHJcblx0cHJpdmF0ZSBsb2NhbGU6IHN0cmluZyA9IFwiZW4tdXNcIjtcclxuXHRwcml2YXRlIGNvdW50cnk6IHN0cmluZyA9IFwiVVNcIjtcclxuXHRwcml2YXRlIGF1dGhUb2tlbkNhbGxiYWNrOiBJRmxvb2RnYXRlQXV0aFRva2VuQ2FsbGJhY2s7XHJcblx0cHJpdmF0ZSBhdWdMb29wQ2FsbGJhY2s6IElBdWdMb29wQ2FsbGJhY2s8SVNlc3Npb24+O1xyXG5cdHByaXZhdGUgYXBwOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBwbGF0Zm9ybTogc3RyaW5nO1xyXG5cdHByaXZhdGUgdmVyc2lvbjogc3RyaW5nO1xyXG5cdHByaXZhdGUgc2Vzc2lvbklkOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBjYW1wYWlnbkZsaWdodHM6IHN0cmluZztcclxuXHRwcml2YXRlIGNhbXBhaWduUGFyYW1ldGVyczogc3RyaW5nO1xyXG5cdHByaXZhdGUgYWdlR3JvdXA6IEFnZUdyb3VwO1xyXG5cdHByaXZhdGUgYXV0aFR5cGU6IEF1dGhlbnRpY2F0aW9uVHlwZTtcclxuXHRwcml2YXRlIGNhbXBhaWduTWV0YWRhdGFBZ2dyZWdhdG9yUHJlZml4OiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBzZXRDYW1wYWlnbkFjdGlvblByZWZpeDogc3RyaW5nO1xyXG5cdHByaXZhdGUgbWVzc2FnaW5nU2VydmljZVNldHRpbmdzOiBJTWVzc2FnaW5nU2VydmljZVNldHRpbmdzO1xyXG5cclxuXHRwcml2YXRlIHRtc2dDYWNoZTogVGFyZ2V0ZWRNZXNzYWdpbmdDYWNoZTtcclxuXHRwcml2YXRlIHRtc2dUcmFuc3BvcnQ6IFRhcmdldGVkTWVzc2FnaW5nVHJhbnNwb3J0O1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdGFwcDogc3RyaW5nLFxyXG5cdFx0cGxhdGZvcm06IHN0cmluZyxcclxuXHRcdHZlcnNpb246IHN0cmluZyxcclxuXHRcdGxvY2FsZTogc3RyaW5nLFxyXG5cdFx0Y291bnRyeTogc3RyaW5nLFxyXG5cdFx0c2Vzc2lvbklkOiBzdHJpbmcsXHJcblx0XHRhdXRoVG9rZW5DYWxsYmFjazogSUZsb29kZ2F0ZUF1dGhUb2tlbkNhbGxiYWNrLFxyXG5cdFx0YXVnTG9vcENhbGxiYWNrOiBJQXVnTG9vcENhbGxiYWNrPElTZXNzaW9uPixcclxuXHRcdGNhbXBhaWduRmxpZ2h0cz86IHN0cmluZyxcclxuXHRcdGNhbXBhaWduUGFyYW1ldGVycz86IHN0cmluZyxcclxuXHRcdGFnZUdyb3VwPzogQWdlR3JvdXAsXHJcblx0XHRhdXRoVHlwZT86IEF1dGhlbnRpY2F0aW9uVHlwZSxcclxuXHRcdGF1ZGllbmNlPzogc3RyaW5nLFxyXG5cdFx0bWVzc2FnaW5nU2VydmljZVNldHRpbmdzPzogSU1lc3NhZ2luZ1NlcnZpY2VTZXR0aW5ncyxcclxuXHRcdHRtc2dDYWNoZUluPzogVGFyZ2V0ZWRNZXNzYWdpbmdDYWNoZSkge1xyXG5cdFx0dGhpcy5sb2NhbGUgPSBsb2NhbGU7XHJcblx0XHR0aGlzLmNvdW50cnkgPSBjb3VudHJ5O1xyXG5cdFx0dGhpcy5hdXRoVG9rZW5DYWxsYmFjayA9IGF1dGhUb2tlbkNhbGxiYWNrO1xyXG5cdFx0dGhpcy5hdWdMb29wQ2FsbGJhY2sgPSBhdWdMb29wQ2FsbGJhY2s7XHJcblx0XHR0aGlzLmFwcCA9IGFwcDtcclxuXHRcdHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTtcclxuXHRcdHRoaXMudmVyc2lvbiA9IHZlcnNpb247XHJcblx0XHR0aGlzLnNlc3Npb25JZCA9IHNlc3Npb25JZDtcclxuXHRcdHRoaXMuY2FtcGFpZ25GbGlnaHRzID0gY2FtcGFpZ25GbGlnaHRzO1xyXG5cdFx0dGhpcy5jYW1wYWlnblBhcmFtZXRlcnMgPSBjYW1wYWlnblBhcmFtZXRlcnM7XHJcblx0XHR0aGlzLmFnZUdyb3VwID0gYWdlR3JvdXA7XHJcblx0XHR0aGlzLmF1dGhUeXBlID0gYXV0aFR5cGU7XHJcblx0XHR0aGlzLm1lc3NhZ2luZ1NlcnZpY2VTZXR0aW5ncyA9IG1lc3NhZ2luZ1NlcnZpY2VTZXR0aW5ncztcclxuXHJcblx0XHRjb25zdCBpbnRlcm5hbEVudnMgPSBbXCJkb2dmb29kXCIsIFwiZWRvZ1wiLCBcImludFwiLCBcIm1pY3Jvc29mdFwiXTtcclxuXHRcdGNvbnN0IGlzSW50ZXJuYWxFbnYgPSBhdWRpZW5jZSAmJiBpbnRlcm5hbEVudnMuaW5kZXhPZihhdWRpZW5jZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTE7XHJcblx0XHRjb25zdCBjYW1wYWlnbk1ldGFkYXRhQWdncmVnYXRvckNvbmZpZyA9IGlzSW50ZXJuYWxFbnYgPyB0aGlzLm1lc3NhZ2luZ1NlcnZpY2VTZXR0aW5ncz8uY2FtcGFpZ25NZXRhZGF0YUFnZ3JlZ2F0b3JJbnRcclxuXHRcdDogdGhpcy5tZXNzYWdpbmdTZXJ2aWNlU2V0dGluZ3M/LmNhbXBhaWduTWV0YWRhdGFBZ2dyZWdhdG9yUHJvZDtcclxuXHRcdGNvbnN0IHNldENhbXBhaWduQWN0aW9uQ29uZmlnID0gaXNJbnRlcm5hbEVudiA/IHRoaXMubWVzc2FnaW5nU2VydmljZVNldHRpbmdzPy5zZXRDYW1wYWlnbkFjdGlvbkludFxyXG5cdFx0OiB0aGlzLm1lc3NhZ2luZ1NlcnZpY2VTZXR0aW5ncz8uc2V0Q2FtcGFpZ25BY3Rpb25Qcm9kO1xyXG5cclxuXHRcdGNvbnN0IGNtYURlZmF1bHRCYXNlVXJsUHJlZml4ID0gaXNJbnRlcm5hbEVudiA/IFRtc2dDb25zdGFudHMuVE1TX0NBTVBBSUdOTUVUQURBVEFBR0dSRUdBVE9SX1BSRUZJWF9FRE9HXHJcblx0XHQ6IFRtc2dDb25zdGFudHMuVE1TX0NBTVBBSUdOTUVUQURBVEFBR0dSRUdBVE9SX1BSRUZJWF9QUk9EO1xyXG5cdFx0Y29uc3Qgc2NhRGVmYXVsdEJhc2VVcmxQcmVmaXggPSBpc0ludGVybmFsRW52ID8gVG1zZ0NvbnN0YW50cy5UTVNfU0VUQ0FNUEFJR05BQ1RJT05fUFJFRklYX0VET0dcclxuXHRcdDogVG1zZ0NvbnN0YW50cy5UTVNfU0VUQ0FNUEFJR05BQ1RJT05fUFJFRklYX1BST0Q7XHJcblxyXG5cdFx0dGhpcy5jYW1wYWlnbk1ldGFkYXRhQWdncmVnYXRvclByZWZpeCA9IGNhbXBhaWduTWV0YWRhdGFBZ2dyZWdhdG9yQ29uZmlnIHx8IGNtYURlZmF1bHRCYXNlVXJsUHJlZml4O1xyXG5cdFx0dGhpcy5zZXRDYW1wYWlnbkFjdGlvblByZWZpeCA9IHNldENhbXBhaWduQWN0aW9uQ29uZmlnIHx8IHNjYURlZmF1bHRCYXNlVXJsUHJlZml4O1xyXG5cclxuXHRcdHRoaXMudG1zZ0NhY2hlID0gdGhpcy50bXNnQ2FjaGUgfHwgdG1zZ0NhY2hlSW4gfHwgbmV3IFRhcmdldGVkTWVzc2FnaW5nQ2FjaGUoW1xyXG5cdFx0XHRDb250ZW50VHlwZS5tZXNzYWdlTWV0YWRhdGEsXHJcblx0XHRcdENvbnRlbnRUeXBlLnVzZXJHb3Zlcm5hbmNlUnVsZXMsXHJcblx0XHRcdENvbnRlbnRUeXBlLmNhbXBhaWduQ29udGVudCxcclxuXHRcdFx0Q29udGVudFR5cGUuZHluYW1pY1NldHRpbmdzLFxyXG5cdFx0XHRDb250ZW50VHlwZS5sb2dMZXZlbFNldHRpbmdzLFxyXG5cdFx0XHRDb250ZW50VHlwZS51c2VyRmFjdHMsXHJcblx0XHRdKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBnZXRDb250ZW50KFxyXG5cdFx0cmVxdWVzdGVkQ29udGVudDogQ29udGVudFR5cGUpOiBQcm9taXNlPENvbnRlbnRSZXNwb25zZT4ge1xyXG5cdFx0aWYgKHRoaXMudG1zZ0NhY2hlLmlzSXRlbUV4cGlyZWQocmVxdWVzdGVkQ29udGVudCkpIHtcclxuXHRcdFx0YXdhaXQgdGhpcy5yZWZyZXNoSXRlbXNJbkNhY2hlRnJvbVRtc1NlcnZpY2UoW3JlcXVlc3RlZENvbnRlbnRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCByZXNwb25zZTogQ29udGVudFJlc3BvbnNlID0gdGhpcy5yZXRyaWV2ZUNhY2hlSXRlbUFuZENyZWF0ZUNvbnRlbnRSZXNwb25zZShyZXF1ZXN0ZWRDb250ZW50KTtcclxuXHRcdHJldHVybiByZXNwb25zZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBnZXRNdWx0aXBsZUNvbnRlbnRzKFxyXG5cdFx0cmVxdWVzdGVkQ29udGVudDogQXJyYXk8Q29udGVudFR5cGU+KTogUHJvbWlzZTxDb250ZW50UmVzcG9uc2VbXT4ge1xyXG5cdFx0YXdhaXQgdGhpcy5yZWZyZXNoSXRlbXNJbkNhY2hlRnJvbVRtc1NlcnZpY2UocmVxdWVzdGVkQ29udGVudCk7XHJcblxyXG5cdFx0Y29uc3QgY29udGVudFJlc3BvbnNlczogQ29udGVudFJlc3BvbnNlW10gPSBuZXcgQXJyYXk8Q29udGVudFJlc3BvbnNlPigpO1xyXG5cdFx0Y29uc3QgYnVsa1JlZnJlc2hMaXN0OiBDb250ZW50VHlwZVtdID0gbmV3IEFycmF5PENvbnRlbnRUeXBlPigpO1xyXG5cdFx0Zm9yIChsZXQgY29udGVudFR5cGUgb2YgcmVxdWVzdGVkQ29udGVudCkge1xyXG5cdFx0XHRjb25zdCByZXNwb25zZUl0ZW0gPSB0aGlzLmNyZWF0ZUNhY2hlZENvbnRlbnRSZXNwb25zZShjb250ZW50VHlwZSk7XHJcblx0XHRcdGNvbnRlbnRSZXNwb25zZXMucHVzaChyZXNwb25zZUl0ZW0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMucmVmcmVzaEl0ZW1zSW5DYWNoZUZyb21UbXNTZXJ2aWNlKGJ1bGtSZWZyZXNoTGlzdCk7XHJcblxyXG5cdFx0cmV0dXJuIGNvbnRlbnRSZXNwb25zZXM7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgZ2V0VXNlckZhY3RzQ29udGVudChcclxuXHRcdHJlcXVlc3RlZENvbnRlbnQ6IENvbnRlbnRUeXBlKTogUHJvbWlzZTxDb250ZW50UmVzcG9uc2U+IHtcclxuXHRcdGF3YWl0IHRoaXMucmVmcmVzaEl0ZW1zSW5DYWNoZUZyb21UdWxpcHNTZXJ2aWNlKHJlcXVlc3RlZENvbnRlbnQpO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2U6IENvbnRlbnRSZXNwb25zZSA9IHRoaXMucmV0cmlldmVDYWNoZUl0ZW1BbmRDcmVhdGVDb250ZW50UmVzcG9uc2UocmVxdWVzdGVkQ29udGVudCk7XHJcblx0XHRyZXR1cm4gcmVzcG9uc2U7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgc2VuZEJlYWNvblJlcXVlc3RUb1NlcnZpY2UoXHJcblx0XHRhcHA6IHN0cmluZyxcclxuXHRcdGJlYWNvblBhcmFtZXRlcnM6IElCZWFjb25QYXJhbWV0ZXJzLFxyXG5cdFx0cGxhdGZvcm06IHN0cmluZyxcclxuXHRcdHZlcnNpb246IHN0cmluZyxcclxuXHRcdGxvY2FsZTogc3RyaW5nLFxyXG5cdFx0Y291bnRyeTogc3RyaW5nLFxyXG5cdFx0c2Vzc2lvbklkOiBzdHJpbmcsXHJcblx0XHRhdXRoVG9rZW5DYWxsYmFjazogSUZsb29kZ2F0ZUF1dGhUb2tlbkNhbGxiYWNrXHJcblx0XHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuXHRcdHRoaXMuc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xyXG5cdFx0dGhpcy5hdXRoVG9rZW5DYWxsYmFjayA9IGF1dGhUb2tlbkNhbGxiYWNrO1xyXG5cclxuXHRcdGNvbnN0IHRtc0FwcElkID0gZ2V0RHluYW1pY1NldHRpbmcoU2V0dGluZ0tleS50bXNBcHBJZCwgQ29uc3RhbnRzLkdVSURzLlRNU0FwcElEKTtcclxuXHRcdGNvbnN0IGF1dGhUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0QXV0aFRva2VuKHRtc0FwcElkKTtcclxuXHRcdGxldCBwdWlkOiBzdHJpbmcgPSB1bmRlZmluZWQ7XHJcblx0XHRpZiAoIWF1dGhUb2tlbikge1xyXG5cdFx0XHRwdWlkID0gdGhpcy5hdXRoVG9rZW5DYWxsYmFjay5nZXRVc2VyUHVpZCAmJiBhd2FpdCB0aGlzLmF1dGhUb2tlbkNhbGxiYWNrLmdldFVzZXJQdWlkKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcmVxdWVzdFN0YXJ0VGltZSA9ICtuZXcgRGF0ZSgpO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgdG1zUXVlcnlQYXJhbXM6IElRdWVyeVBhcmFtcyA9IHtcclxuXHRcdFx0XHRhcHAsXHJcblx0XHRcdFx0Y291bnRyeSxcclxuXHRcdFx0XHRsb2NhbGUsXHJcblx0XHRcdFx0cGxhdGZvcm0sXHJcblx0XHRcdFx0cHVpZCxcclxuXHRcdFx0XHR2ZXJzaW9uLFxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Y29uc3QgcmVxdWVzdEJvZHkgPSBKU09OLnN0cmluZ2lmeSh7XHJcblx0XHRcdFx0YWN0aW9uTmFtZTogYmVhY29uUGFyYW1ldGVycy5hY3Rpb25OYW1lLFxyXG5cdFx0XHRcdGFjdGlvblVybDogYmVhY29uUGFyYW1ldGVycy5hY3Rpb25VcmwsXHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0Y29uc3QgcmVzcG9uc2U6IFJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChcclxuXHRcdFx0XHR0bXNRdWVyeVBhcmFtcyxcclxuXHRcdFx0XHRhdXRoVG9rZW4sXHJcblx0XHRcdFx0U2V0dGluZ0tleS50bXNBY3Rpb25VcmwsXHJcblx0XHRcdFx0dGhpcy5zZXRDYW1wYWlnbkFjdGlvblByZWZpeCArIFRtc2dDb25zdGFudHMuVE1TX1NFVENBTVBBSUdOQUNUSU9OX0VORFBPSU5UICsgXCI/XCIsXHJcblx0XHRcdFx0cmVxdWVzdEJvZHksXHJcblx0XHRcdFx0XCJQT1NUXCIpO1xyXG5cclxuXHRcdFx0aWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xyXG5cdFx0XHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoXHJcblx0XHRcdFx0XHRMb2dnaW5nLkV2ZW50SWRzLldlYlN1cmZhY2VzLlNldENhbXBhaWduQWN0aW9uLkVycm9yLlZBTFVFLFxyXG5cdFx0XHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5FcnJvcixcclxuXHRcdFx0XHRcdHRoaXMuY3JlYXRlVGVsZW1ldHJ5RGF0YShyZXF1ZXN0U3RhcnRUaW1lLCByZXNwb25zZSwgYEJlYWNvbiR7YmVhY29uUGFyYW1ldGVycy5hY3Rpb25OYW1lfWApKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChcclxuXHRcdFx0XHRMb2dnaW5nLkV2ZW50SWRzLldlYlN1cmZhY2VzLlNldENhbXBhaWduQWN0aW9uLlJlcXVlc3RzLlZBTFVFLFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuSW5mbyxcclxuXHRcdFx0XHR0aGlzLmNyZWF0ZVRlbGVtZXRyeURhdGEocmVxdWVzdFN0YXJ0VGltZSwgcmVzcG9uc2UsIGBCZWFjb24ke2JlYWNvblBhcmFtZXRlcnMuYWN0aW9uTmFtZX1gKSwgLjAxKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KFxyXG5cdFx0XHRcdExvZ2dpbmcuRXZlbnRJZHMuV2ViU3VyZmFjZXMuU2V0Q2FtcGFpZ25BY3Rpb24uRXJyb3IuVkFMVUUsXHJcblx0XHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5FcnJvcixcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRFcnJvck1lc3NhZ2U6XHJcblx0XHRcdFx0XHRcdFwiRXJyb3IgZmV0Y2hpbmcgZnJvbSBUTVMgU2V0Q2FtcGFpZ25BY3Rpb24gZW5kcG9pbnRcIiArIChlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gXCI6IFwiICsgZXJyb3IubWVzc2FnZSA6IFwiXCIpLFxyXG5cdFx0XHRcdFx0Li4udGhpcy5jcmVhdGVUZWxlbWV0cnlEYXRhKHJlcXVlc3RTdGFydFRpbWUsIG51bGwsIGBCZWFjb24ke2JlYWNvblBhcmFtZXRlcnMuYWN0aW9uTmFtZX1gKSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGdldENhY2hlZENvbnRlbnQ8VD4ocmVxdWVzdGVkQ29udGVudDogQ29udGVudFR5cGUpOiBUIHtcclxuXHRcdHJldHVybiB0aGlzLnRtc2dDYWNoZS5nZXRJdGVtQ29udGVudChyZXF1ZXN0ZWRDb250ZW50KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBnZXRBdWdMb29wVXNlckZhY3RzQ29udGVudChyZXF1ZXN0ZWRDb250ZW50OiBDb250ZW50VHlwZSk6IFByb21pc2U8Q29udGVudFJlc3BvbnNlPiB7XHJcblx0XHRpZiAodGhpcy50bXNnQ2FjaGUuaXNJdGVtRXhwaXJlZChDb250ZW50VHlwZS51c2VyRmFjdHMpKSB7XHJcblx0XHRcdGF3YWl0IHRoaXMucmVmcmVzaFVzZXJGYWN0c0luQ2FjaGVGcm9tQXVnTG9vcCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHJlc3BvbnNlOiBDb250ZW50UmVzcG9uc2UgPSB0aGlzLnJldHJpZXZlQ2FjaGVJdGVtQW5kQ3JlYXRlQ29udGVudFJlc3BvbnNlKHJlcXVlc3RlZENvbnRlbnQpO1xyXG5cdFx0cmV0dXJuIHJlc3BvbnNlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyByZWZyZXNoVXNlckZhY3RzSW5DYWNoZUZyb21BdWdMb29wKCk6IFByb21pc2U8QXBpLklVc2VyRmFjdFtdPiB7XHJcblx0XHRpZiAoIXRoaXMudG1zZ0NhY2hlLmlzSXRlbUV4cGlyZWQoQ29udGVudFR5cGUudXNlckZhY3RzKSkge1xyXG5cdFx0XHRjb25zdCBjYWNoZWRVc2VyRmFjdHMgPSB0aGlzLnRtc2dDYWNoZS5nZXRJdGVtQ29udGVudChDb250ZW50VHlwZS51c2VyRmFjdHMpIGFzIEFwaS5JVXNlckZhY3RbXTtcclxuXHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChcclxuXHRcdFx0XHRMb2dnaW5nLkV2ZW50SWRzLlVzZXJGYWN0cy5BdWdMb29wLlJlcXVlc3RzLlZBTFVFLFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuSW5mbyxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRDb3VudDogY2FjaGVkVXNlckZhY3RzID8gY2FjaGVkVXNlckZhY3RzLmxlbmd0aCA6IC0xLFxyXG5cdFx0XHRcdFx0VHlwZTogXCJBdWdMb29wVXNlckZhY3RzQ2FjaGVkXCIsXHJcblx0XHRcdFx0XHRGbGlnaHRzOiB0aGlzLmNhbXBhaWduRmxpZ2h0cyxcclxuXHRcdFx0XHR9LCAuMDEpO1xyXG5cclxuXHRcdFx0cmV0dXJuIGNhY2hlZFVzZXJGYWN0cztcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCByZXF1ZXN0U3RhcnRUaW1lID0gK25ldyBEYXRlKCk7XHJcblx0XHRsZXQgdXNlckZhY3RzOiBBcGkuSVVzZXJGYWN0W107XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uTmFtZSA9IGdldER5bmFtaWNTZXR0aW5nKFNldHRpbmdLZXkudHVsaXBzQXVnTG9vcEFubm90YXRpb25OYW1lLCBcIkF1Z0xvb3BfVXNlcl9Vc2VyTGlmZWN5Y2xlRmFjdHNBbm5vdGF0aW9uXCIpO1xyXG5cdFx0XHRjb25zdCBhdWdMb29wU2Vzc2lvblByb21pc2UgPSB0aGlzLmF1Z0xvb3BDYWxsYmFjay5nZXRSdW50aW1lU2Vzc2lvbjtcclxuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBnZXRBdWdMb29wQW5ub3RhdGlvbkRhdGEoYW5ub3RhdGlvbk5hbWUsIGF1Z0xvb3BTZXNzaW9uUHJvbWlzZSkgYXMgSVVzZXJGYWN0c0F1Z0xvb3BSZXNwb25zZTtcclxuXHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnVzZXJGYWN0cykge1xyXG5cdFx0XHRcdHVzZXJGYWN0cyA9IHRoaXMuYWRkQ2xpZW50SW5nZXN0aW9uVGltZUFuZE5vcm1hbGl6ZUtleXNJbkFycmF5KHJlc3BvbnNlLnVzZXJGYWN0cyk7XHJcblx0XHRcdFx0dGhpcy50bXNnQ2FjaGUuc2V0Q29udGVudEl0ZW0oXHJcblx0XHRcdFx0XHRcdENvbnRlbnRUeXBlLnVzZXJGYWN0cyxcclxuXHRcdFx0XHRcdFx0dXNlckZhY3RzLFxyXG5cdFx0XHRcdFx0XHRUbXNnQ29uc3RhbnRzLkNBQ0hFX0VYUElSWV9VU0VSRkFDVFMpO1xyXG5cclxuXHRcdFx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KFxyXG5cdFx0XHRcdFx0TG9nZ2luZy5FdmVudElkcy5Vc2VyRmFjdHMuQXVnTG9vcC5SZXF1ZXN0cy5WQUxVRSxcclxuXHRcdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuSW5mbyxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0Q291bnQ6IHVzZXJGYWN0cyA/IHVzZXJGYWN0cy5sZW5ndGggOiAtMSxcclxuXHRcdFx0XHRcdFx0Li4udGhpcy5jcmVhdGVUZWxlbWV0cnlEYXRhKHJlcXVlc3RTdGFydFRpbWUsIG51bGwsIFwiQXVnTG9vcFVzZXJGYWN0c1wiKSxcclxuXHRcdFx0XHRcdH0sIC4wMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29uc3QgYXVnTG9vcEVycm9yID0gcmVzcG9uc2UgJiYgKHJlc3BvbnNlIGFzIElBdWdMb29wUmVzcG9uc2UpLmVycm9yO1xyXG5cdFx0XHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoXHJcblx0XHRcdFx0XHRMb2dnaW5nLkV2ZW50SWRzLlVzZXJGYWN0cy5BdWdMb29wLkVycm9yLlZBTFVFLFxyXG5cdFx0XHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5FcnJvcixcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0RXJyb3JNZXNzYWdlOiBcIkVycm9yIGdldHRpbmcgYXVnbG9vcCBmYWN0cyBcIiArIChhdWdMb29wRXJyb3IgJiYgYXVnTG9vcEVycm9yLnRvU3RyaW5nKCkpLFxyXG5cdFx0XHRcdFx0XHQuLi50aGlzLmNyZWF0ZVRlbGVtZXRyeURhdGEocmVxdWVzdFN0YXJ0VGltZSwgbnVsbCwgXCJBdWdMb29wVXNlckZhY3RzXCIpLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChcclxuXHRcdFx0XHRMb2dnaW5nLkV2ZW50SWRzLlVzZXJGYWN0cy5BdWdMb29wLkVycm9yLlZBTFVFLFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuRXJyb3IsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0RXJyb3JNZXNzYWdlOiBcIkVycm9yIGdldHRpbmcgZmFjdHMgXCIgKyAoZXJyb3IgJiYgZXJyb3IubWVzc2FnZSksXHJcblx0XHRcdFx0XHQuLi50aGlzLmNyZWF0ZVRlbGVtZXRyeURhdGEocmVxdWVzdFN0YXJ0VGltZSwgbnVsbCwgXCJBdWdMb29wVXNlckZhY3RzXCIpLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB1c2VyRmFjdHM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNyZWF0ZVRlbGVtZXRyeURhdGEocmVxdWVzdFN0YXJ0VGltZXN0YW1wOiBudW1iZXIsIHJlc3BvbnNlOiBSZXNwb25zZSwgdHlwZTogc3RyaW5nKTogTG9nZ2luZy5JQ3VzdG9tUHJvcGVydGllcyB7XHJcblx0XHRjb25zdCB7IGhlYWRlcnMsIHN0YXR1cywgc3RhdHVzVGV4dCB9ID0gcmVzcG9uc2UgfHwge30gYXMgUmVzcG9uc2U7XHJcblx0XHRjb25zdCBzZXJ2ZXJTZXNzaW9uSWQgPSBoZWFkZXJzICYmIGhlYWRlcnMuZ2V0KFwiWC1Vc2VyU2Vzc2lvbklkXCIpO1xyXG5cdFx0Y29uc3Qgc2VydmVyQ29ycmVsYXRpb25JZCA9IGhlYWRlcnMgJiYgaGVhZGVycy5nZXQoXCJYLUNvcnJlbGF0aW9uSWRcIik7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRUeXBlOiB0eXBlLFxyXG5cdFx0XHRUaW1lTWlsbGlzZWNvbmRzOiArbmV3IERhdGUoKSAtIHJlcXVlc3RTdGFydFRpbWVzdGFtcCxcclxuXHRcdFx0U2Vzc2lvbklkOiBzZXJ2ZXJTZXNzaW9uSWQgfHwgdGhpcy5zZXNzaW9uSWQsXHJcblx0XHRcdENvcnJlbGF0aW9uSWQ6IHNlcnZlckNvcnJlbGF0aW9uSWQgfHwgdW5kZWZpbmVkLFxyXG5cdFx0XHRIdHRwU3RhdHVzQ29kZTogc3RhdHVzIHx8IHVuZGVmaW5lZCxcclxuXHRcdFx0SHR0cFN0YXR1c1RleHQ6IHN0YXR1c1RleHQgfHwgdW5kZWZpbmVkLFxyXG5cclxuXHRcdFx0RmxpZ2h0czogdGhpcy5jYW1wYWlnbkZsaWdodHMsXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZW5kUmVxdWVzdChcclxuXHRcdHRtc2dRdWVyeVBhcmFtczogSVF1ZXJ5UGFyYW1zLFxyXG5cdFx0YXV0aFRva2VuOiBzdHJpbmcsXHJcblx0XHRrZXk6IFNldHRpbmdLZXksXHJcblx0XHRkZWZhdWx0QmFzZVVybDogc3RyaW5nLFxyXG5cdFx0cmVxdWVzdEJvZHk/OiBzdHJpbmcsXHJcblx0XHR2ZXJiPzogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZT4ge1xyXG5cdFx0dGhpcy50bXNnVHJhbnNwb3J0ID0gdGhpcy50bXNnVHJhbnNwb3J0IHx8IG5ldyBUYXJnZXRlZE1lc3NhZ2luZ1RyYW5zcG9ydCh0aGlzLnNlc3Npb25JZCk7XHJcblx0XHRjb25zdCBxdWVyeVBhcmFtU3RyID0gYnVpbGRRdWVyeVBhcmFtZXRlcnModG1zZ1F1ZXJ5UGFyYW1zKTtcclxuXHRcdGNvbnN0IHRtc2dCYXNlVXJsID0gZ2V0RHluYW1pY1NldHRpbmcoa2V5LCBkZWZhdWx0QmFzZVVybCk7XHJcblx0XHRjb25zdCByZXF1ZXN0UHJvbWlzZSA9IHZlcmIgPT09IFwiUE9TVFwiID9cclxuXHRcdFx0dGhpcy50bXNnVHJhbnNwb3J0LnNlbmRQb3N0UmVxdWVzdCh0bXNnQmFzZVVybCArIHF1ZXJ5UGFyYW1TdHIsIHJlcXVlc3RCb2R5LCBhdXRoVG9rZW4pIDpcclxuXHRcdFx0dGhpcy50bXNnVHJhbnNwb3J0LnNlbmRHZXRSZXF1ZXN0KHRtc2dCYXNlVXJsICsgcXVlcnlQYXJhbVN0ciwgYXV0aFRva2VuKTtcclxuXHRcdHJldHVybiByZXF1ZXN0UHJvbWlzZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmV0cmlldmVDYWNoZUl0ZW1BbmRDcmVhdGVDb250ZW50UmVzcG9uc2UoY29udGVudFR5cGU6IENvbnRlbnRUeXBlKTogQ29udGVudFJlc3BvbnNlIHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlSXRlbTogQ29udGVudFJlc3BvbnNlID0gdGhpcy5jcmVhdGVDYWNoZWRDb250ZW50UmVzcG9uc2UoY29udGVudFR5cGUpO1xyXG5cdFx0aWYgKHRoaXMudG1zZ0NhY2hlLmlzSXRlbUV4cGlyZWQoY29udGVudFR5cGUpKSB7XHJcblx0XHRcdGlmIChjb250ZW50VHlwZSA9PT0gQ29udGVudFR5cGUudXNlckZhY3RzKSB7XHJcblx0XHRcdFx0dGhpcy5yZWZyZXNoSXRlbXNJbkNhY2hlRnJvbVR1bGlwc1NlcnZpY2UoY29udGVudFR5cGUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMucmVmcmVzaEl0ZW1zSW5DYWNoZUZyb21UbXNTZXJ2aWNlKFtjb250ZW50VHlwZV0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzcG9uc2VJdGVtO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVDYWNoZWRDb250ZW50UmVzcG9uc2UocmVxdWVzdGVkQ29udGVudDogQ29udGVudFR5cGUpOiBDb250ZW50UmVzcG9uc2Uge1xyXG5cdFx0Y29uc3QgY29udGVudFJlc3BvbnNlOiBDb250ZW50UmVzcG9uc2UgPSBuZXcgQ29udGVudFJlc3BvbnNlKCk7XHJcblx0XHRjb250ZW50UmVzcG9uc2UuY29udGVudCA9IHRoaXMudG1zZ0NhY2hlLmdldEl0ZW1Db250ZW50KHJlcXVlc3RlZENvbnRlbnQpO1xyXG5cdFx0Y29udGVudFJlc3BvbnNlLmNvbnRlbnRUeXBlID0gcmVxdWVzdGVkQ29udGVudDtcclxuXHJcblx0XHRyZXR1cm4gY29udGVudFJlc3BvbnNlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBnZXRBdXRoVG9rZW4oYXBwSWRPclVyaTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuXHRcdGlmICghdGhpcy5hdXRoVG9rZW5DYWxsYmFjayB8fCAhdGhpcy5hdXRoVG9rZW5DYWxsYmFjay5nZXRBdXRoVG9rZW4pIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc3RhcnRUaW1lID0gK25ldyBEYXRlKCk7XHJcblx0XHRjb25zdCBnZXREdXJhdGlvbiA9ICgpID0+ICtuZXcgRGF0ZSgpIC0gc3RhcnRUaW1lO1xyXG5cdFx0Y29uc3QgY3JlYXRlQXV0aFRlbGVtZXRyeURhdGEgPSAoZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSB1bmRlZmluZWQpOiBMb2dnaW5nLklDdXN0b21Qcm9wZXJ0aWVzID0+IHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRFcnJvck1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcclxuXHRcdFx0XHRTZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxyXG5cdFx0XHRcdFRpbWVNaWxsaXNlY29uZHM6IGdldER1cmF0aW9uKCksXHJcblx0XHRcdFx0VHlwZTogYXBwSWRPclVyaSxcclxuXHRcdFx0fTtcclxuXHRcdH07XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgcmV0VmFsID0gYXdhaXQgdGhpcy5hdXRoVG9rZW5DYWxsYmFjay5nZXRBdXRoVG9rZW4oYXBwSWRPclVyaSk7XHJcblx0XHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoXHJcblx0XHRcdFx0TG9nZ2luZy5FdmVudElkcy5XZWJTdXJmYWNlcy5Db21tb24uSW5mby5WQUxVRSxcclxuXHRcdFx0XHRMb2dnaW5nLkxvZ0xldmVsLkluZm8sXHJcblx0XHRcdFx0Y3JlYXRlQXV0aFRlbGVtZXRyeURhdGEoKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gcmV0VmFsO1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChcclxuXHRcdFx0XHRMb2dnaW5nLkV2ZW50SWRzLldlYlN1cmZhY2VzLkNvbW1vbi5FcnJvci5WQUxVRSxcclxuXHRcdFx0XHRMb2dnaW5nLkxvZ0xldmVsLkVycm9yLFxyXG5cdFx0XHRcdGNyZWF0ZUF1dGhUZWxlbWV0cnlEYXRhKFwiRXJyb3IgZ2V0dGluZyB0b2tlbiBcIiArIChlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gXCI6IFwiICsgZXJyb3IubWVzc2FnZSA6IFwiXCIpKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIHJlZnJlc2hJdGVtc0luQ2FjaGVGcm9tVG1zU2VydmljZShjb250ZW50VHlwZXM6IEFycmF5PENvbnRlbnRUeXBlPik6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0aWYgKGNvbnRlbnRUeXBlcy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGNoZWNrIGlmIHRvdWNoZWQgaXRlbXMgYXJlIGFjdHVhbGx5IGR1ZSBmb3IgcmVmcmVzaCBvciBhcmUgc3RpbGwgdmFsaWRcclxuXHRcdGNvbnN0IGJ1bGtSZWZyZXNoTGlzdDogQ29udGVudFR5cGVbXSA9IG5ldyBBcnJheTxDb250ZW50VHlwZT4oKTtcclxuXHRcdGZvciAobGV0IGNvbnRlbnRUeXBlIG9mIGNvbnRlbnRUeXBlcykge1xyXG5cdFx0XHRpZiAodGhpcy50bXNnQ2FjaGUuaXNJdGVtRXhwaXJlZChjb250ZW50VHlwZSkpIHtcclxuXHRcdFx0XHRidWxrUmVmcmVzaExpc3QucHVzaChjb250ZW50VHlwZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoYnVsa1JlZnJlc2hMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHQvLyBleGl0IG91dCBpZiBhbGwgaXRlbXMgaW4gY2FjaGUgYXJlIHN0aWxsIHZhbGlkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHNlcnZpY2Ugcm91bmR0cmlwcyBcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGFsd2F5cyByZXF1ZXN0IGZvciBkeW5hbWljIHNldHRpbmdzXHJcblx0XHRpZiAoY29udGVudFR5cGVzLmluZGV4T2YoQ29udGVudFR5cGUuZHluYW1pY1NldHRpbmdzKSA9PT0gLTEpIHtcclxuXHRcdFx0Y29udGVudFR5cGVzLnB1c2goQ29udGVudFR5cGUuZHluYW1pY1NldHRpbmdzKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBnZXQgYXV0aCB0b2tlbiBvciB1c2VyIGlkXHJcblx0XHRjb25zdCB0bXNBcHBJZCA9IGdldER5bmFtaWNTZXR0aW5nKFNldHRpbmdLZXkudG1zQXBwSWQsIENvbnN0YW50cy5HVUlEcy5UTVNBcHBJRCk7XHJcblx0XHRjb25zdCBhdXRoVG9rZW4gPSBhd2FpdCB0aGlzLmdldEF1dGhUb2tlbih0bXNBcHBJZCk7XHJcblx0XHRsZXQgdXNlclB1aWQ6IHN0cmluZyA9IHVuZGVmaW5lZDtcclxuXHRcdGlmICghYXV0aFRva2VuKSB7XHJcblx0XHRcdHVzZXJQdWlkID0gdGhpcy5hdXRoVG9rZW5DYWxsYmFjay5nZXRVc2VyUHVpZCAmJiBhd2FpdCB0aGlzLmF1dGhUb2tlbkNhbGxiYWNrLmdldFVzZXJQdWlkKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcmVxdWVzdFN0YXJ0VGltZSA9ICtuZXcgRGF0ZSgpO1xyXG5cclxuXHRcdC8vIG1ha2Ugc2VydmljZSBjYWxsIGZvciBleHBpcmVkIG9yIHVuY2FjaGVkIGl0ZW1zXHJcblx0XHR0cnkge1xyXG5cdFx0XHQvLyBjYXB0dXJlIGJyb3dzZXIgZGF0YSB0byBwZXJmb3JtIGFkZGl0aW9uYWwgZmlsdGVycyBvbiBJUklTXHJcblx0XHRcdC8vIHRoaXMgaXMgdG8gYXZvaWQgc2hvd2luZyBiYWQgVUkgZXhwZXJpZW5jZSBvbiB1bnN1cHBvcnRlZCBicm93c2Vycy9kaW1lbnNpb25zXHJcblx0XHRcdGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50ICYmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdKTtcclxuXHRcdFx0Y29uc3QgYnJvd3NlclBhcmFtczogSVF1ZXJ5UGFyYW1zID0ge1xyXG5cdFx0XHRcdHBhZ2VXaWR0aDogd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLFxyXG5cdFx0XHRcdHBhZ2VIZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LFxyXG5cdFx0XHRcdHNjcmVlbldpZHRoOiBzY3JlZW4gPyBzY3JlZW4ud2lkdGggOiB1bmRlZmluZWQsXHJcblx0XHRcdFx0c2NyZWVuSGVpZ2h0OiBzY3JlZW4gPyBzY3JlZW4uaGVpZ2h0IDogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdGNvbG9yRGVwdGg6IHNjcmVlbiA/IHNjcmVlbi5jb2xvckRlcHRoIDogdW5kZWZpbmVkLFxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gYWxsb3cgdGVzdGluZyB3aXRoIHF1ZXJ5IHBhcmFtIG92ZXJyaWRlcyB3aXRoIGtleSBvYmYtRGVidWdPdmVycmlkZXNcclxuXHRcdFx0Ly8gZWc6IHtcImFkZFRtc1F1ZXJ5UGFyYW1zXCI6e1wia2V5MVwiOlwia2V5MXZhbHVlXCJ9LFwicmVwbGFjZVRtc1F1ZXJ5UGFyYW1zXCI6e1wia2V5MlwiOlwia2V5MnZhbHVlXCJ9LCBcInRtc1Jlc3BvbnNlXCI6IHt9fVxyXG5cdFx0XHRjb25zdCBkZWJ1Z092ZXJyaWRlcyA9IEZsb29kZ2F0ZVN0b3JhZ2VQcm92aWRlci5zYWZlUmVhZE9iamVjdDxJRGVidWdPdmVycmlkZXM+KEZpbGVUeXBlLkRlYnVnT3ZlcnJpZGVzLCB7fSk7XHJcblx0XHRcdGNvbnN0IHRtc1F1ZXJ5UGFyYW1zOiBJUXVlcnlQYXJhbXMgPSBkZWJ1Z092ZXJyaWRlcy5yZXBsYWNlVG1zUXVlcnlQYXJhbXMgfHwge1xyXG5cdFx0XHRcdGNvdW50cnk6IHRoaXMuY291bnRyeSxcclxuXHRcdFx0XHRsb2NhbGU6IHRoaXMubG9jYWxlLFxyXG5cdFx0XHRcdGFwcDogdGhpcy5hcHAsXHJcblx0XHRcdFx0cGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXHJcblx0XHRcdFx0dmVyc2lvbjogdGhpcy52ZXJzaW9uLFxyXG5cdFx0XHRcdGNhbXBhaWduUGFyYW1zOiBidWlsZFF1ZXJ5UGFyYW1ldGVycyhicm93c2VyUGFyYW1zKSArIFwiJm1vcmU9dHJ1ZSZcIiArICh0aGlzLmNhbXBhaWduUGFyYW1ldGVycyB8fCBcIlwiKSxcclxuXHRcdFx0XHRjb250ZW50VHlwZTogY29udGVudFR5cGVzLmpvaW4oXCI7XCIpLFxyXG5cdFx0XHRcdHB1aWQ6IHVzZXJQdWlkLFxyXG5cdFx0XHRcdE9GQ19GTElHSFRTOiB0aGlzLmNhbXBhaWduRmxpZ2h0cyxcclxuXHRcdFx0XHQuLi4oZGVidWdPdmVycmlkZXMuYWRkVG1zUXVlcnlQYXJhbXMgfHwge30pLFxyXG5cdFx0XHRcdGFnZUdyb3VwOiB0aGlzLmFnZUdyb3VwLFxyXG5cdFx0XHRcdHNlc3Npb25Vc2VyVHlwZTogdGhpcy5hdXRoVHlwZSxcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGNvbnN0IHJlc3BvbnNlOiBSZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QoXHJcblx0XHRcdFx0dG1zUXVlcnlQYXJhbXMsXHJcblx0XHRcdFx0YXV0aFRva2VuLFxyXG5cdFx0XHRcdFNldHRpbmdLZXkudG1zU2VydmljZVVybCxcclxuXHRcdFx0XHR0aGlzLmNhbXBhaWduTWV0YWRhdGFBZ2dyZWdhdG9yUHJlZml4ICsgVG1zZ0NvbnN0YW50cy5UTVNfQ0FNUEFJR05NRVRBREFUQUFHR1JFR0FUT1JfRU5EUE9JTlQgKyBcIj9cIik7XHJcblx0XHRcdGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xyXG5cdFx0XHRcdGNvbnN0IHRtc1NlcnZpY2VSZXNwb25zZTogSVRtc1NlcnZpY2VSZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcblx0XHRcdFx0aWYgKGNvbnRlbnRUeXBlcy5pbmRleE9mKENvbnRlbnRUeXBlLm1lc3NhZ2VNZXRhZGF0YSkgIT09IC0xXHJcblx0XHRcdFx0XHQmJiB0bXNTZXJ2aWNlUmVzcG9uc2UuTWVzc2FnZU1ldGFkYXRhICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdHRoaXMudG1zZ0NhY2hlLnNldENvbnRlbnRJdGVtKFxyXG5cdFx0XHRcdFx0XHRDb250ZW50VHlwZS5tZXNzYWdlTWV0YWRhdGEsXHJcblx0XHRcdFx0XHRcdHRtc1NlcnZpY2VSZXNwb25zZS5NZXNzYWdlTWV0YWRhdGEsXHJcblx0XHRcdFx0XHRcdGdldER5bmFtaWNTZXR0aW5nKFNldHRpbmdLZXkudG1zTWVzc2FnZU1ldGFkYXRhRXhwaXJ5LCBUbXNnQ29uc3RhbnRzLkNBQ0hFX0VYUElSWV9NRVNTQUdFTUVUQURBVEEpKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChjb250ZW50VHlwZXMuaW5kZXhPZihDb250ZW50VHlwZS51c2VyR292ZXJuYW5jZVJ1bGVzKSAhPT0gLTFcclxuXHRcdFx0XHRcdCYmIHRtc1NlcnZpY2VSZXNwb25zZS5Vc2VyR292ZXJuYW5jZVJ1bGVzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdHRoaXMudG1zZ0NhY2hlLnNldENvbnRlbnRJdGVtKFxyXG5cdFx0XHRcdFx0XHRDb250ZW50VHlwZS51c2VyR292ZXJuYW5jZVJ1bGVzLFxyXG5cdFx0XHRcdFx0XHR0bXNTZXJ2aWNlUmVzcG9uc2UuVXNlckdvdmVybmFuY2VSdWxlcyxcclxuXHRcdFx0XHRcdFx0Z2V0RHluYW1pY1NldHRpbmcoU2V0dGluZ0tleS50bXNVc2VyR292ZXJuYW5jZVJ1bGVzRXhwaXJ5LCBUbXNnQ29uc3RhbnRzLkNBQ0hFX0VYUElSWV9VU0VSR09WRVJOQU5DRVJVTEVTKSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoY29udGVudFR5cGVzLmluZGV4T2YoQ29udGVudFR5cGUuY2FtcGFpZ25Db250ZW50KSAhPT0gLTFcclxuXHRcdFx0XHRcdCYmIHRtc1NlcnZpY2VSZXNwb25zZS5DYW1wYWlnbkNvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0dGhpcy50bXNnQ2FjaGUuc2V0Q29udGVudEl0ZW0oXHJcblx0XHRcdFx0XHRcdENvbnRlbnRUeXBlLmNhbXBhaWduQ29udGVudCxcclxuXHRcdFx0XHRcdFx0dG1zU2VydmljZVJlc3BvbnNlLkNhbXBhaWduQ29udGVudCxcclxuXHRcdFx0XHRcdFx0Z2V0RHluYW1pY1NldHRpbmcoU2V0dGluZ0tleS50bXNDYW1wYWlnbkNvbnRlbnRFeHBpcnksIFRtc2dDb25zdGFudHMuQ0FDSEVfRVhQSVJZX0NBTVBBSUdOQ09OVEVOVCkpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gVGhlcmUgaXMgbm8gZXhwbGljaXQgcmVxdWVzdCBmb3IgdGhlIG5leHQgc2V0IG9mIENvbnRlbnRUeXBlcyBpbiB0aGUgY29kZVxyXG5cdFx0XHRcdC8vIElmIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCB0aGVzZSB0eXBlcyBzYXZlIGFuZCB1c2UgdGhlbSBsYXRlclxyXG5cdFx0XHRcdGlmICh0bXNTZXJ2aWNlUmVzcG9uc2UuRHluYW1pY1NldHRpbmdzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdHRoaXMudG1zZ0NhY2hlLnNldENvbnRlbnRJdGVtKFxyXG5cdFx0XHRcdFx0XHRDb250ZW50VHlwZS5keW5hbWljU2V0dGluZ3MsXHJcblx0XHRcdFx0XHRcdHRtc1NlcnZpY2VSZXNwb25zZS5EeW5hbWljU2V0dGluZ3MsXHJcblx0XHRcdFx0XHRcdGdldER5bmFtaWNTZXR0aW5nKFNldHRpbmdLZXkudG1zRHluYW1pY1NldHRpbmdzRXhwaXJ5LCBUbXNnQ29uc3RhbnRzLkNBQ0hFX0VYUElSWV9EWU5BTUlDU0VUVElOR1MpKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICh0bXNTZXJ2aWNlUmVzcG9uc2UuTG9nTGV2ZWxTZXR0aW5ncyAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHR0aGlzLnRtc2dDYWNoZS5zZXRDb250ZW50SXRlbShcclxuXHRcdFx0XHRcdFx0Q29udGVudFR5cGUubG9nTGV2ZWxTZXR0aW5ncyxcclxuXHRcdFx0XHRcdFx0dG1zU2VydmljZVJlc3BvbnNlLkxvZ0xldmVsU2V0dGluZ3MsXHJcblx0XHRcdFx0XHRcdGdldER5bmFtaWNTZXR0aW5nKFNldHRpbmdLZXkudG1zTG9nTGV2ZWxTZXR0aW5nc0V4cGlyeSwgVG1zZ0NvbnN0YW50cy5DQUNIRV9FWFBJUllfTE9HTEVWRUxTRVRUSU5HUykpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChcclxuXHRcdFx0XHRcdExvZ2dpbmcuRXZlbnRJZHMuV2ViU3VyZmFjZXMuQ2FtcGFpZ25NZXRhZGF0YUFnZ3JlZ2F0b3IuUmVxdWVzdHMuVkFMVUUsXHJcblx0XHRcdFx0XHRMb2dnaW5nLkxvZ0xldmVsLkluZm8sXHJcblx0XHRcdFx0XHR0aGlzLmNyZWF0ZVRlbGVtZXRyeURhdGEocmVxdWVzdFN0YXJ0VGltZSwgcmVzcG9uc2UsIGNvbnRlbnRUeXBlcy5qb2luKFwiO1wiKSksIC4wMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChcclxuXHRcdFx0XHRcdExvZ2dpbmcuRXZlbnRJZHMuV2ViU3VyZmFjZXMuQ2FtcGFpZ25NZXRhZGF0YUFnZ3JlZ2F0b3IuRXJyb3IuVkFMVUUsXHJcblx0XHRcdFx0XHRMb2dnaW5nLkxvZ0xldmVsLkVycm9yLFxyXG5cdFx0XHRcdFx0dGhpcy5jcmVhdGVUZWxlbWV0cnlEYXRhKHJlcXVlc3RTdGFydFRpbWUsIHJlc3BvbnNlLCBjb250ZW50VHlwZXMuam9pbihcIjtcIikpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChcclxuXHRcdFx0XHRMb2dnaW5nLkV2ZW50SWRzLldlYlN1cmZhY2VzLkNhbXBhaWduTWV0YWRhdGFBZ2dyZWdhdG9yLkVycm9yLlZBTFVFLFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuRXJyb3IsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0RXJyb3JNZXNzYWdlOiBcIkVycm9yIGZldGNoaW5nIGZyb20gVE1TXCIgKyAoZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IFwiOiBcIiArIGVycm9yLm1lc3NhZ2UgOiBcIlwiKSxcclxuXHRcdFx0XHRcdC4uLnRoaXMuY3JlYXRlVGVsZW1ldHJ5RGF0YShyZXF1ZXN0U3RhcnRUaW1lLCBudWxsLCBjb250ZW50VHlwZXMuam9pbihcIjtcIikpLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyByZWZyZXNoSXRlbXNJbkNhY2hlRnJvbVR1bGlwc1NlcnZpY2UoY29udGVudFR5cGU6IENvbnRlbnRUeXBlKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHQvLyBjaGVjayBpZiB0b3VjaGVkIGl0ZW0gaXMgYWN0dWFsbHkgZHVlIGZvciByZWZyZXNoIG9yIGlzIHN0aWxsIHZhbGlkXHJcblx0XHRpZiAoIXRoaXMudG1zZ0NhY2hlLmlzSXRlbUV4cGlyZWQoY29udGVudFR5cGUpKSB7XHJcblx0XHRcdC8vIGV4aXQgb3V0IGlmIHRoZSBjYWNoZSBpcyBzdGlsbCB2YWxpZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBzZXJ2aWNlIHJvdW5kdHJpcHNcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHR1bGlwc0FwcElkID0gZ2V0RHluYW1pY1NldHRpbmcoU2V0dGluZ0tleS50dWxpcHNBcHBJZCwgQ29uc3RhbnRzLkdVSURzLlRVTElQU0FwcElEKTtcclxuXHRcdGNvbnN0IGF1dGhUb2tlbiA9IGF3YWl0IHRoaXMuZ2V0QXV0aFRva2VuKHR1bGlwc0FwcElkKTtcclxuXHRcdGlmICghYXV0aFRva2VuKSB7XHJcblx0XHRcdC8vIGlmIGF1dGhUb2tlbiBpcyBudWxsIHRoZW4gZXhpdCBvdXQgc2luY2Ugc2VydmljZSBjYWxsIGNhbm5vdCBiZSBtYWRlIHdpdGhvdXQgYXV0aFRva2VuXHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCByZXF1ZXN0U3RhcnRUaW1lID0gK25ldyBEYXRlKCk7XHJcblxyXG5cdFx0Ly8gbWFrZSBzZXJ2aWNlIGNhbGwgZm9yIGV4cGlyZWQgb3IgdW5jYWNoZWQgaXRlbVxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgcmVzcG9uc2U6IFJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChcclxuXHRcdFx0XHR7fSxcclxuXHRcdFx0XHRhdXRoVG9rZW4sXHJcblx0XHRcdFx0U2V0dGluZ0tleS50dWxpcHNTZXJ2aWNlVXJsLFxyXG5cdFx0XHRcdFRtc2dDb25zdGFudHMuVFVMSVBTX1NFUlZJQ0VVUkwpO1xyXG5cdFx0XHRpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuXHRcdFx0XHRjb25zdCB0dWxpcHNTZXJ2aWNlUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcblxyXG5cdFx0XHRcdGlmIChjb250ZW50VHlwZS5pbmRleE9mKENvbnRlbnRUeXBlLnVzZXJGYWN0cykgIT09IC0xXHJcblx0XHRcdFx0XHQmJiB0dWxpcHNTZXJ2aWNlUmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0Y29uc3Qgbm9ybWFsaXplZFVzZXJGYWN0cyA9IHRoaXMuYWRkQ2xpZW50SW5nZXN0aW9uVGltZUFuZE5vcm1hbGl6ZUtleXModHVsaXBzU2VydmljZVJlc3BvbnNlKTtcclxuXHRcdFx0XHRcdHRoaXMudG1zZ0NhY2hlLnNldENvbnRlbnRJdGVtKFxyXG5cdFx0XHRcdFx0XHRcdENvbnRlbnRUeXBlLnVzZXJGYWN0cyxcclxuXHRcdFx0XHRcdFx0XHRub3JtYWxpemVkVXNlckZhY3RzLFxyXG5cdFx0XHRcdFx0XHRcdFRtc2dDb25zdGFudHMuQ0FDSEVfRVhQSVJZX1VTRVJGQUNUUyk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KFxyXG5cdFx0XHRcdFx0TG9nZ2luZy5FdmVudElkcy5Vc2VyRmFjdHMuTWVzc2FnaW5nLlJlcXVlc3RzLlZBTFVFLFxyXG5cdFx0XHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5JbmZvLFxyXG5cdFx0XHRcdFx0dGhpcy5jcmVhdGVUZWxlbWV0cnlEYXRhKHJlcXVlc3RTdGFydFRpbWUsIHJlc3BvbnNlLCBjb250ZW50VHlwZSksIC4wMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChcclxuXHRcdFx0XHRcdExvZ2dpbmcuRXZlbnRJZHMuVXNlckZhY3RzLkNvbW1vbi5FcnJvci5WQUxVRSxcclxuXHRcdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuRXJyb3IsXHJcblx0XHRcdFx0XHR0aGlzLmNyZWF0ZVRlbGVtZXRyeURhdGEocmVxdWVzdFN0YXJ0VGltZSwgcmVzcG9uc2UsIGNvbnRlbnRUeXBlKSk7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoXHJcblx0XHRcdFx0TG9nZ2luZy5FdmVudElkcy5Vc2VyRmFjdHMuQ29tbW9uLkVycm9yLlZBTFVFLFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuRXJyb3IsXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0RXJyb3JNZXNzYWdlOiBcIkVycm9yIGZldGNoaW5nIGZyb20gVFVMSVBTXCIgKyAoZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IFwiOiBcIiArIGVycm9yLm1lc3NhZ2UgOiBcIlwiKSxcclxuXHRcdFx0XHRcdC4uLnRoaXMuY3JlYXRlVGVsZW1ldHJ5RGF0YShyZXF1ZXN0U3RhcnRUaW1lLCBudWxsLCBjb250ZW50VHlwZSksXHJcblx0XHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFkZENsaWVudEluZ2VzdGlvblRpbWVBbmROb3JtYWxpemVLZXlzKHR1bGlwc1NlcnZpY2VSZXNwb25zZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdKTogQXBpLklVc2VyRmFjdFtdIHtcclxuXHRcdGNvbnN0IGN1cnJlbnREYXRlVGltZSA9IG5ldyBEYXRlKERhdGUubm93KCkpLnRvSVNPU3RyaW5nKCk7XHJcblxyXG5cdFx0cmV0dXJuIHR1bGlwc1NlcnZpY2VSZXNwb25zZS5tYXAocmVzcG9uc2VGYWN0ID0+IHtcclxuXHRcdFx0Y29uc3QgZmFjdCA9IHRoaXMubm9ybWFsaXplS2V5cyhyZXNwb25zZUZhY3QpO1xyXG5cdFx0XHRmYWN0LmNsaWVudEluZ2VzdGlvbkRhdGVUaW1lID0gY3VycmVudERhdGVUaW1lO1xyXG5cdFx0XHRyZXR1cm4gZmFjdDtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhZGRDbGllbnRJbmdlc3Rpb25UaW1lQW5kTm9ybWFsaXplS2V5c0luQXJyYXkodXNlckZhY3RzOiBBcGkuSVVzZXJGYWN0W10pOiBBcGkuSVVzZXJGYWN0W10ge1xyXG5cdFx0Y29uc3QgY3VycmVudERhdGVUaW1lID0gbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKTtcclxuXHJcblx0XHRyZXR1cm4gdXNlckZhY3RzLm1hcCh1c2VyRmFjdCA9PiB7XHJcblx0XHRcdGNvbnN0IGZhY3QgPSB0aGlzLm5vcm1hbGl6ZUtleXModXNlckZhY3QgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcclxuXHRcdFx0ZmFjdC5jbGllbnRJbmdlc3Rpb25EYXRlVGltZSA9IGN1cnJlbnREYXRlVGltZTtcclxuXHRcdFx0cmV0dXJuIGZhY3Q7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoaXMgbWV0aG9kIG5vcm1hbGl6ZXMgdGhlIGtleXMgb2YgdGhlIHVzZXIgZmFjdCBvYmplY3QgcmV0cmlldmVkIGZyb20gdGhlIFRVTElQUyBzZXJ2aWNlLlxyXG5cdCAqIFNwZWNpZmljYWxseSBpdCBjb252ZXJ0cyB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2gga2V5IGluIHRoZSBvYmplY3QgdG8gbG93ZXIgY2FzZS5cclxuXHQgKiBGb3IgZXhhbXBsZSB0aGUga2V5IFwiVXNlckZhY3RUeXBlXCIgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmljZSB3aWxsIGJlIGNvbnZlcnRlZCB0byBcInVzZXJGYWN0VHlwZVwiLlxyXG5cdCAqIEBwYXJhbSB1c2VyRmFjdCB0aGUgdXNlciBmYWN0IG9iamVjdFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgbm9ybWFsaXplS2V5cyh1c2VyRmFjdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xyXG5cdFx0Y29uc3Qgbm9ybWFsaXplZFVzZXJGYWN0ID0ge30gYXMgQXBpLklVc2VyRmFjdDtcclxuXHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHVzZXJGYWN0KSkge1xyXG5cdFx0XHRjb25zdCBub3JtYWxpemVkS2V5ID0gKGtleS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSkpIGFzIGtleW9mIEFwaS5JVXNlckZhY3Q7XHJcblx0XHRcdG5vcm1hbGl6ZWRVc2VyRmFjdFtub3JtYWxpemVkS2V5XSA9IHVzZXJGYWN0W2tleV07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG5vcm1hbGl6ZWRVc2VyRmFjdDtcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/TargetedMessaging/TargetedMessagingClient.ts\n')},"./scripts/app/TargetedMessaging/TargetedMessagingConstants.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CACHE_EXPIRY_MESSAGEMETADATA", function() { return CACHE_EXPIRY_MESSAGEMETADATA; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CACHE_EXPIRY_USERGOVERNANCERULES", function() { return CACHE_EXPIRY_USERGOVERNANCERULES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CACHE_EXPIRY_CAMPAIGNCONTENT", function() { return CACHE_EXPIRY_CAMPAIGNCONTENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CACHE_EXPIRY_DYNAMICSETTINGS", function() { return CACHE_EXPIRY_DYNAMICSETTINGS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CACHE_EXPIRY_LOGLEVELSETTINGS", function() { return CACHE_EXPIRY_LOGLEVELSETTINGS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CACHE_EXPIRY_USERFACTS", function() { return CACHE_EXPIRY_USERFACTS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TMS_CAMPAIGNMETADATAAGGREGATOR_ENDPOINT", function() { return TMS_CAMPAIGNMETADATAAGGREGATOR_ENDPOINT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TMS_CAMPAIGNMETADATAAGGREGATOR_PREFIX_EDOG", function() { return TMS_CAMPAIGNMETADATAAGGREGATOR_PREFIX_EDOG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TMS_CAMPAIGNMETADATAAGGREGATOR_PREFIX_PROD", function() { return TMS_CAMPAIGNMETADATAAGGREGATOR_PREFIX_PROD; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TMS_CAMPAIGN_LOAD_TIMEOUT", function() { return TMS_CAMPAIGN_LOAD_TIMEOUT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TMS_FETCH_TIMEOUT", function() { return TMS_FETCH_TIMEOUT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TMS_SETCAMPAIGNACTION_ENDPOINT", function() { return TMS_SETCAMPAIGNACTION_ENDPOINT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TMS_SETCAMPAIGNACTION_PREFIX_EDOG", function() { return TMS_SETCAMPAIGNACTION_PREFIX_EDOG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TMS_SETCAMPAIGNACTION_PREFIX_PROD", function() { return TMS_SETCAMPAIGNACTION_PREFIX_PROD; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TULIPS_SERVICEURL", function() { return TULIPS_SERVICEURL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TULIPS_LOAD_TIMEOUT", function() { return TULIPS_LOAD_TIMEOUT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TULIPS_FETCH_TIMEOUT", function() { return TULIPS_FETCH_TIMEOUT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TULIPS_INGESTION_TIME", function() { return TULIPS_INGESTION_TIME; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AUGLOOP_INIT_CHECK_RETRY_TIMES", function() { return AUGLOOP_INIT_CHECK_RETRY_TIMES; });\nvar CACHE_EXPIRY_MESSAGEMETADATA = 14400000; // expiry in ms - 4hrs\r\nvar CACHE_EXPIRY_USERGOVERNANCERULES = 14400000; // expiry in ms - 4hrs\r\nvar CACHE_EXPIRY_CAMPAIGNCONTENT = 14400000; // expiry in ms - 4hrs\r\nvar CACHE_EXPIRY_DYNAMICSETTINGS = 14400000; // expiry in ms - 4hrs\r\nvar CACHE_EXPIRY_LOGLEVELSETTINGS = 14400000; // expiry in ms - 4hrs\r\nvar CACHE_EXPIRY_USERFACTS = 86400000; // expiry in ms - 24hrs\r\nvar TMS_CAMPAIGNMETADATAAGGREGATOR_ENDPOINT = "campaignmetadataaggregator";\r\nvar TMS_CAMPAIGNMETADATAAGGREGATOR_PREFIX_EDOG = "https://messaging.officeppe.com/lifecycle/";\r\nvar TMS_CAMPAIGNMETADATAAGGREGATOR_PREFIX_PROD = "https://messaging.office.com/lifecycle/";\r\nvar TMS_CAMPAIGN_LOAD_TIMEOUT = 1000;\r\nvar TMS_FETCH_TIMEOUT = 5000; // timeout for fetching tms service requests\r\nvar TMS_SETCAMPAIGNACTION_ENDPOINT = "setcampaignaction";\r\nvar TMS_SETCAMPAIGNACTION_PREFIX_EDOG = "https://messaging.officeppe.com/lifecycle/";\r\nvar TMS_SETCAMPAIGNACTION_PREFIX_PROD = "https://messaging.office.com/lifecycle/";\r\nvar TULIPS_SERVICEURL = "https://substrate.office.com/OfficePersonalizationUserLifecycle/api/facts";\r\nvar TULIPS_LOAD_TIMEOUT = 1000;\r\nvar TULIPS_FETCH_TIMEOUT = 5000; // timeout for fetching tulips service requests\r\nvar TULIPS_INGESTION_TIME = 24 * 60 * 60 * 1000; // Tulips ingestion time\r\nvar AUGLOOP_INIT_CHECK_RETRY_TIMES = 5;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9UYXJnZXRlZE1lc3NhZ2luZ0NvbnN0YW50cy50cz9hOTQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBTyxJQUFNLDRCQUE0QixHQUFHLFFBQVEsQ0FBQyxDQUFDLHNCQUFzQjtBQUNyRSxJQUFNLGdDQUFnQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLHNCQUFzQjtBQUN6RSxJQUFNLDRCQUE0QixHQUFHLFFBQVEsQ0FBQyxDQUFDLHNCQUFzQjtBQUNyRSxJQUFNLDRCQUE0QixHQUFHLFFBQVEsQ0FBQyxDQUFDLHNCQUFzQjtBQUNyRSxJQUFNLDZCQUE2QixHQUFHLFFBQVEsQ0FBQyxDQUFDLHNCQUFzQjtBQUN0RSxJQUFNLHNCQUFzQixHQUFHLFFBQVEsQ0FBQyxDQUFDLHVCQUF1QjtBQUVoRSxJQUFNLHVDQUF1QyxHQUFHLDRCQUE0QixDQUFDO0FBQzdFLElBQU0sMENBQTBDLEdBQUcsNENBQTRDLENBQUM7QUFDaEcsSUFBTSwwQ0FBMEMsR0FBRyx5Q0FBeUMsQ0FBQztBQUU3RixJQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQztBQUV2QyxJQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxDQUFDLDRDQUE0QztBQUU1RSxJQUFNLDhCQUE4QixHQUFHLG1CQUFtQixDQUFDO0FBQzNELElBQU0saUNBQWlDLEdBQUcsNENBQTRDLENBQUM7QUFDdkYsSUFBTSxpQ0FBaUMsR0FBRyx5Q0FBeUMsQ0FBQztBQUVwRixJQUFNLGlCQUFpQixHQUM3QiwyRUFBMkUsQ0FBQztBQUV0RSxJQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUVqQyxJQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxDQUFDLCtDQUErQztBQUVsRixJQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLHdCQUF3QjtBQUUzRSxJQUFNLDhCQUE4QixHQUFHLENBQUMsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL1RhcmdldGVkTWVzc2FnaW5nL1RhcmdldGVkTWVzc2FnaW5nQ29uc3RhbnRzLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IENBQ0hFX0VYUElSWV9NRVNTQUdFTUVUQURBVEEgPSAxNDQwMDAwMDsgLy8gZXhwaXJ5IGluIG1zIC0gNGhyc1xyXG5leHBvcnQgY29uc3QgQ0FDSEVfRVhQSVJZX1VTRVJHT1ZFUk5BTkNFUlVMRVMgPSAxNDQwMDAwMDsgLy8gZXhwaXJ5IGluIG1zIC0gNGhyc1xyXG5leHBvcnQgY29uc3QgQ0FDSEVfRVhQSVJZX0NBTVBBSUdOQ09OVEVOVCA9IDE0NDAwMDAwOyAvLyBleHBpcnkgaW4gbXMgLSA0aHJzXHJcbmV4cG9ydCBjb25zdCBDQUNIRV9FWFBJUllfRFlOQU1JQ1NFVFRJTkdTID0gMTQ0MDAwMDA7IC8vIGV4cGlyeSBpbiBtcyAtIDRocnNcclxuZXhwb3J0IGNvbnN0IENBQ0hFX0VYUElSWV9MT0dMRVZFTFNFVFRJTkdTID0gMTQ0MDAwMDA7IC8vIGV4cGlyeSBpbiBtcyAtIDRocnNcclxuZXhwb3J0IGNvbnN0IENBQ0hFX0VYUElSWV9VU0VSRkFDVFMgPSA4NjQwMDAwMDsgLy8gZXhwaXJ5IGluIG1zIC0gMjRocnNcclxuXHJcbmV4cG9ydCBjb25zdCBUTVNfQ0FNUEFJR05NRVRBREFUQUFHR1JFR0FUT1JfRU5EUE9JTlQgPSBcImNhbXBhaWdubWV0YWRhdGFhZ2dyZWdhdG9yXCI7XHJcbmV4cG9ydCBjb25zdCBUTVNfQ0FNUEFJR05NRVRBREFUQUFHR1JFR0FUT1JfUFJFRklYX0VET0cgPSBcImh0dHBzOi8vbWVzc2FnaW5nLm9mZmljZXBwZS5jb20vbGlmZWN5Y2xlL1wiO1xyXG5leHBvcnQgY29uc3QgVE1TX0NBTVBBSUdOTUVUQURBVEFBR0dSRUdBVE9SX1BSRUZJWF9QUk9EID0gXCJodHRwczovL21lc3NhZ2luZy5vZmZpY2UuY29tL2xpZmVjeWNsZS9cIjtcclxuXHJcbmV4cG9ydCBjb25zdCBUTVNfQ0FNUEFJR05fTE9BRF9USU1FT1VUID0gMTAwMDtcclxuXHJcbmV4cG9ydCBjb25zdCBUTVNfRkVUQ0hfVElNRU9VVCA9IDUwMDA7IC8vIHRpbWVvdXQgZm9yIGZldGNoaW5nIHRtcyBzZXJ2aWNlIHJlcXVlc3RzXHJcblxyXG5leHBvcnQgY29uc3QgVE1TX1NFVENBTVBBSUdOQUNUSU9OX0VORFBPSU5UID0gXCJzZXRjYW1wYWlnbmFjdGlvblwiO1xyXG5leHBvcnQgY29uc3QgVE1TX1NFVENBTVBBSUdOQUNUSU9OX1BSRUZJWF9FRE9HID0gXCJodHRwczovL21lc3NhZ2luZy5vZmZpY2VwcGUuY29tL2xpZmVjeWNsZS9cIjtcclxuZXhwb3J0IGNvbnN0IFRNU19TRVRDQU1QQUlHTkFDVElPTl9QUkVGSVhfUFJPRCA9IFwiaHR0cHM6Ly9tZXNzYWdpbmcub2ZmaWNlLmNvbS9saWZlY3ljbGUvXCI7XHJcblxyXG5leHBvcnQgY29uc3QgVFVMSVBTX1NFUlZJQ0VVUkwgPVxyXG5cdFwiaHR0cHM6Ly9zdWJzdHJhdGUub2ZmaWNlLmNvbS9PZmZpY2VQZXJzb25hbGl6YXRpb25Vc2VyTGlmZWN5Y2xlL2FwaS9mYWN0c1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRVTElQU19MT0FEX1RJTUVPVVQgPSAxMDAwO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRVTElQU19GRVRDSF9USU1FT1VUID0gNTAwMDsgLy8gdGltZW91dCBmb3IgZmV0Y2hpbmcgdHVsaXBzIHNlcnZpY2UgcmVxdWVzdHNcclxuXHJcbmV4cG9ydCBjb25zdCBUVUxJUFNfSU5HRVNUSU9OX1RJTUUgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyBUdWxpcHMgaW5nZXN0aW9uIHRpbWVcclxuXHJcbmV4cG9ydCBjb25zdCBBVUdMT09QX0lOSVRfQ0hFQ0tfUkVUUllfVElNRVMgPSA1O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/TargetedMessaging/TargetedMessagingConstants.ts\n')},"./scripts/app/TargetedMessaging/TargetedMessagingTransport.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TargetedMessagingTransport", function() { return TargetedMessagingTransport; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");\n/* harmony import */ var _Polyfills_Fetch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Polyfills/Fetch */ "./scripts/app/Polyfills/Fetch.ts");\n/* harmony import */ var _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TargetedMessagingConstants */ "./scripts/app/TargetedMessaging/TargetedMessagingConstants.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Utils */ "./scripts/app/Utils.ts");\n\r\n\r\n\r\n\r\nvar isNOU = _Utils__WEBPACK_IMPORTED_MODULE_3__["isNOU"];\r\nvar TargetedMessagingTransport = /** @class */ (function () {\r\n    function TargetedMessagingTransport(sessionId) {\r\n        this.sessionId = sessionId;\r\n    }\r\n    TargetedMessagingTransport.prototype.sendGetRequest = function (requestUrl, token, useTimeout, timeout) {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var requestInit;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n                requestInit = {\r\n                    method: "GET",\r\n                    headers: this.createHeaders(token),\r\n                };\r\n                return [2 /*return*/, useTimeout ?\r\n                        this.timeoutFetch(requestUrl, requestInit, timeout !== null && timeout !== void 0 ? timeout : _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_2__["TMS_FETCH_TIMEOUT"]) :\r\n                        fetch(requestUrl, requestInit)];\r\n            });\r\n        });\r\n    };\r\n    TargetedMessagingTransport.prototype.sendPostRequest = function (requestUrl, requestBody, token, useTimeout, timeout) {\r\n        return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () {\r\n            var requestInit;\r\n            return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) {\r\n                requestInit = {\r\n                    method: "POST",\r\n                    headers: this.createHeaders(token),\r\n                    body: requestBody,\r\n                };\r\n                return [2 /*return*/, useTimeout ?\r\n                        this.timeoutFetch(requestUrl, requestInit, timeout !== null && timeout !== void 0 ? timeout : _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_2__["TMS_FETCH_TIMEOUT"]) :\r\n                        fetch(requestUrl, requestInit)];\r\n            });\r\n        });\r\n    };\r\n    TargetedMessagingTransport.prototype.createHeaders = function (token) {\r\n        var headers = typeof Headers !== "undefined" && new Headers();\r\n        if (headers) {\r\n            if (!isNOU(token)) {\r\n                headers.append("Authorization", "Bearer " + token);\r\n            }\r\n            headers.append("X-CorrelationId", _Utils__WEBPACK_IMPORTED_MODULE_3__["guid"]());\r\n            if (this.sessionId) {\r\n                headers.append("X-UserSessionId", this.sessionId);\r\n            }\r\n        }\r\n        return headers;\r\n    };\r\n    TargetedMessagingTransport.prototype.timeoutFetch = function (input, init, timeout) {\r\n        if (init === void 0) { init = {}; }\r\n        return new Promise(function (resolve, reject) {\r\n            fetch(input, init).then(resolve, reject);\r\n            setTimeout(function () { return reject(new Error("Service request timed out")); }, timeout);\r\n        });\r\n    };\r\n    return TargetedMessagingTransport;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9UYXJnZXRlZE1lc3NhZ2luZ1RyYW5zcG9ydC50cz8xMmE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBNEI7QUFDaUM7QUFDM0I7QUFFMUIsU0FBSyxHQUFLLDRDQUFMLENBQVc7QUFFeEI7SUFDQyxvQ0FBb0IsU0FBa0I7UUFBbEIsY0FBUyxHQUFULFNBQVMsQ0FBUztJQUN0QyxDQUFDO0lBRVksbURBQWMsR0FBM0IsVUFBNEIsVUFBa0IsRUFBRSxLQUFjLEVBQUUsVUFBb0IsRUFBRSxPQUFnQjs7OztnQkFDL0YsV0FBVyxHQUFHO29CQUNuQixNQUFNLEVBQUUsS0FBSztvQkFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7aUJBQ2xDLENBQUM7Z0JBRUYsc0JBQU8sVUFBVSxDQUFDLENBQUM7d0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSw2RUFBOEIsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZGLEtBQUssQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUM7OztLQUNoQztJQUVZLG9EQUFlLEdBQTVCLFVBQ0MsVUFBa0IsRUFBRSxXQUFtQixFQUFFLEtBQWMsRUFBRSxVQUFvQixFQUFFLE9BQWdCOzs7O2dCQUN6RixXQUFXLEdBQUc7b0JBQ25CLE1BQU0sRUFBRSxNQUFNO29CQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztvQkFDbEMsSUFBSSxFQUFFLFdBQVc7aUJBQ2pCLENBQUM7Z0JBRUYsc0JBQU8sVUFBVSxDQUFDLENBQUM7d0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSw2RUFBOEIsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZGLEtBQUssQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUM7OztLQUNoQztJQUVTLGtEQUFhLEdBQXZCLFVBQXdCLEtBQWM7UUFDckMsSUFBTSxPQUFPLEdBQVksT0FBTyxPQUFPLEtBQUssV0FBVyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7UUFDekUsSUFBSSxPQUFPLEVBQUU7WUFDWixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNsQixPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUM7YUFDbkQ7WUFFRCxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLDJDQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDbEQ7U0FDRDtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2hCLENBQUM7SUFFTyxpREFBWSxHQUFwQixVQUFxQixLQUFrQixFQUFFLElBQXNCLEVBQUUsT0FBZTtRQUF2QyxnQ0FBc0I7UUFDOUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO1lBQ2xDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN6QyxVQUFVLENBQUMsY0FBTSxhQUFNLENBQ3RCLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUMsRUFEdkIsQ0FDdUIsRUFDdkMsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFDRixpQ0FBQztBQUFELENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9UYXJnZXRlZE1lc3NhZ2luZ1RyYW5zcG9ydC50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4uL1BvbHlmaWxscy9GZXRjaFwiO1xyXG5pbXBvcnQgKiBhcyBUbXNDb25zdGFudHMgZnJvbSBcIi4vVGFyZ2V0ZWRNZXNzYWdpbmdDb25zdGFudHNcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4uL1V0aWxzXCI7XHJcblxyXG5jb25zdCB7IGlzTk9VIH0gPSBVdGlscztcclxuXHJcbmV4cG9ydCBjbGFzcyBUYXJnZXRlZE1lc3NhZ2luZ1RyYW5zcG9ydCB7XHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBzZXNzaW9uSWQ/OiBzdHJpbmcpIHtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBzZW5kR2V0UmVxdWVzdChyZXF1ZXN0VXJsOiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCB1c2VUaW1lb3V0PzogYm9vbGVhbiwgdGltZW91dD86IG51bWJlcik6IFByb21pc2U8UmVzcG9uc2U+IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RJbml0ID0ge1xyXG5cdFx0XHRtZXRob2Q6IFwiR0VUXCIsXHJcblx0XHRcdGhlYWRlcnM6IHRoaXMuY3JlYXRlSGVhZGVycyh0b2tlbiksXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB1c2VUaW1lb3V0ID9cclxuXHRcdFx0dGhpcy50aW1lb3V0RmV0Y2gocmVxdWVzdFVybCwgcmVxdWVzdEluaXQsIHRpbWVvdXQgPz8gVG1zQ29uc3RhbnRzLlRNU19GRVRDSF9USU1FT1VUKSA6XHJcblx0XHRcdGZldGNoKHJlcXVlc3RVcmwsIHJlcXVlc3RJbml0KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBzZW5kUG9zdFJlcXVlc3QoXHJcblx0XHRyZXF1ZXN0VXJsOiBzdHJpbmcsIHJlcXVlc3RCb2R5OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCB1c2VUaW1lb3V0PzogYm9vbGVhbiwgdGltZW91dD86IG51bWJlcik6IFByb21pc2U8UmVzcG9uc2U+IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RJbml0ID0ge1xyXG5cdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxyXG5cdFx0XHRoZWFkZXJzOiB0aGlzLmNyZWF0ZUhlYWRlcnModG9rZW4pLFxyXG5cdFx0XHRib2R5OiByZXF1ZXN0Qm9keSxcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIHVzZVRpbWVvdXQgP1xyXG5cdFx0XHR0aGlzLnRpbWVvdXRGZXRjaChyZXF1ZXN0VXJsLCByZXF1ZXN0SW5pdCwgdGltZW91dCA/PyBUbXNDb25zdGFudHMuVE1TX0ZFVENIX1RJTUVPVVQpIDpcclxuXHRcdFx0ZmV0Y2gocmVxdWVzdFVybCwgcmVxdWVzdEluaXQpO1xyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIGNyZWF0ZUhlYWRlcnModG9rZW4/OiBzdHJpbmcpOiBIZWFkZXJzIHtcclxuXHRcdGNvbnN0IGhlYWRlcnM6IEhlYWRlcnMgPSB0eXBlb2YgSGVhZGVycyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBuZXcgSGVhZGVycygpO1xyXG5cdFx0aWYgKGhlYWRlcnMpIHtcclxuXHRcdFx0aWYgKCFpc05PVSh0b2tlbikpIHtcclxuXHRcdFx0XHRoZWFkZXJzLmFwcGVuZChcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIgKyB0b2tlbik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGhlYWRlcnMuYXBwZW5kKFwiWC1Db3JyZWxhdGlvbklkXCIsIFV0aWxzLmd1aWQoKSk7XHJcblx0XHRcdGlmICh0aGlzLnNlc3Npb25JZCkge1xyXG5cdFx0XHRcdGhlYWRlcnMuYXBwZW5kKFwiWC1Vc2VyU2Vzc2lvbklkXCIsIHRoaXMuc2Vzc2lvbklkKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBoZWFkZXJzO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB0aW1lb3V0RmV0Y2goaW5wdXQ6IFJlcXVlc3RJbmZvLCBpbml0OiBSZXF1ZXN0SW5pdCA9IHt9LCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPFJlc3BvbnNlPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRmZXRjaChpbnB1dCwgaW5pdCkudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHJlamVjdChcclxuXHRcdFx0XHRuZXcgRXJyb3IoXCJTZXJ2aWNlIHJlcXVlc3QgdGltZWQgb3V0XCIpKSxcclxuXHRcdFx0XHR0aW1lb3V0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/TargetedMessaging/TargetedMessagingTransport.ts\n')},"./scripts/app/TargetedMessaging/UserFactsProvider.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UserFactsProvider", function() { return UserFactsProvider; });\n/* harmony import */ var _Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Configuration/DynamicConfiguration */ "./scripts/app/Configuration/DynamicConfiguration.ts");\n/* harmony import */ var _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TargetedMessagingConstants */ "./scripts/app/TargetedMessaging/TargetedMessagingConstants.ts");\n/* harmony import */ var _AssetsProvider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AssetsProvider */ "./scripts/app/TargetedMessaging/AssetsProvider.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Utils */ "./scripts/app/Utils.ts");\n/* harmony import */ var _LocalUserFactHelper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./LocalUserFactHelper */ "./scripts/app/TargetedMessaging/LocalUserFactHelper.ts");\n/**\r\n * UserFactsProvider.ts\r\n *\r\n * Module for user facts provider.\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar UserFactsProvider = /** @class */ (function () {\r\n    function UserFactsProvider() {\r\n        this.loadAsyncTriggered = false;\r\n        this.userFacts = [];\r\n        this.nameAndUserFactMap = {};\r\n    }\r\n    UserFactsProvider.prototype.load = function () {\r\n        if (!this.loadAsyncTriggered) {\r\n            this.loadAsync();\r\n            this.loadAsyncTriggered = true;\r\n        }\r\n        return this.userFacts || [];\r\n    };\r\n    UserFactsProvider.prototype.loadAsync = function () {\r\n        var _this = this;\r\n        var userFactsPromise = _AssetsProvider__WEBPACK_IMPORTED_MODULE_2__["get"]().getUserFacts().then(function (userFacts) {\r\n            _this.loadUserFacts(userFacts);\r\n        });\r\n        var timeoutMilliseconds = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_0__["getDynamicSetting"])("TulipsLoadTimeout" /* tulipsLoadTimeout */, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_1__["TULIPS_LOAD_TIMEOUT"]);\r\n        var timeoutPromise = Object(_Utils__WEBPACK_IMPORTED_MODULE_4__["createTimeoutPromise"])(timeoutMilliseconds, userFactsPromise);\r\n        return timeoutPromise.then(function () { return _this.userFacts; }).catch(function () {\r\n            if (!_this.userFacts || _this.userFacts.length <= 0) {\r\n                _this.loadUserFacts(_AssetsProvider__WEBPACK_IMPORTED_MODULE_2__["get"]().getCachedUserFacts());\r\n            }\r\n            return _this.userFacts;\r\n        }).catch(function () { return _this.userFacts; });\r\n    };\r\n    UserFactsProvider.prototype.getUserFact = function (userFactName) {\r\n        var userFact = this.nameAndUserFactMap[userFactName];\r\n        if (userFact || this.nameAndUserFactMap.hasOwnProperty(userFactName)) {\r\n            return userFact;\r\n        }\r\n        userFact = this.nameAndUserFactMap[userFactName] = Object(_LocalUserFactHelper__WEBPACK_IMPORTED_MODULE_5__["getLocalUserFact"])(userFactName);\r\n        return userFact;\r\n    };\r\n    UserFactsProvider.prototype.loadUserFacts = function (response) {\r\n        var _this = this;\r\n        if (response) {\r\n            this.userFacts = response || [];\r\n            this.userFacts.map(function (userFact) {\r\n                _this.nameAndUserFactMap[userFact.userFactName] = userFact;\r\n            });\r\n            this.loadAsyncTriggered = true;\r\n            this.logUserFactInfo(this.userFacts);\r\n        }\r\n    };\r\n    UserFactsProvider.prototype.logUserFactInfo = function (userFacts) {\r\n        if (!userFacts || userFacts.length <= 0) {\r\n            return;\r\n        }\r\n        var tulipsIngestionTimeInterval = Object(_Configuration_DynamicConfiguration__WEBPACK_IMPORTED_MODULE_0__["getDynamicSetting"])("TulipsIngestionTimeInterval" /* tulipsIngestionTimeInterval */, _TargetedMessagingConstants__WEBPACK_IMPORTED_MODULE_1__["TULIPS_INGESTION_TIME"]);\r\n        if (tulipsIngestionTimeInterval <= 0) {\r\n            return;\r\n        }\r\n        var userFactProperties;\r\n        try {\r\n            var nowDate_1 = Date.now();\r\n            var isExpired_1 = function (rawItemDate) {\r\n                var itemDate = Date.parse(rawItemDate);\r\n                return !isNaN(itemDate) ? nowDate_1 - itemDate > tulipsIngestionTimeInterval : true;\r\n            };\r\n            var factInfo = {\r\n                Count: userFacts.length,\r\n                RefreshTime: tulipsIngestionTimeInterval,\r\n                IngestionTime: userFacts[0].clientIngestionDateTime,\r\n                SourcesExpired: userFacts.filter(function (userFact) { return userFact && isExpired_1(userFact.sourceDateTime); }).length || undefined,\r\n                StoragesExpired: userFacts.filter(function (userFact) { return userFact && isExpired_1(userFact.storageDateTime); }).length || undefined,\r\n                IngestionsExpired: userFacts.filter(function (userFact) { return userFact && isExpired_1(userFact.clientIngestionDateTime); }).length || undefined,\r\n            };\r\n            userFactProperties = {\r\n                Message: "UserFacts",\r\n                Data: JSON.stringify(factInfo),\r\n            };\r\n        }\r\n        catch (error) {\r\n            userFactProperties = {\r\n                ErrorMessage: "Error getting UserFact info",\r\n            };\r\n        }\r\n        _Logging_Logging__WEBPACK_IMPORTED_MODULE_3__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_3__["EventIds"].UserFacts.Provider.Info.VALUE, 3 /* Info */, userFactProperties);\r\n    };\r\n    return UserFactsProvider;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9Vc2VyRmFjdHNQcm92aWRlci50cz80Yjc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBR21GO0FBQ0k7QUFFdkM7QUFDTDtBQUVFO0FBQ1M7QUFFekQ7SUFBQTtRQUNTLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQyxjQUFTLEdBQW9CLEVBQUUsQ0FBQztRQUNoQyx1QkFBa0IsR0FBa0MsRUFBRSxDQUFDO0lBMEZoRSxDQUFDO0lBeEZPLGdDQUFJLEdBQVg7UUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzdCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1NBQy9CO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0scUNBQVMsR0FBaEI7UUFBQSxpQkFjQztRQWJBLElBQU0sZ0JBQWdCLEdBQUcsbURBQWtCLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQVM7WUFDMUUsS0FBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILElBQU0sbUJBQW1CLEdBQUcsNkZBQWlCLDhDQUErQiwrRUFBbUIsQ0FBQyxDQUFDO1FBQ2pHLElBQU0sY0FBYyxHQUFHLG1FQUFvQixDQUFDLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDbkYsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQU0sWUFBSSxDQUFDLFNBQVMsRUFBZCxDQUFjLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDdEQsSUFBSSxDQUFDLEtBQUksQ0FBQyxTQUFTLElBQUksS0FBSSxDQUFDLFNBQVMsQ0FB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dkQsQ0FBdUQsQ0FBQyxDQUFDLE1BQU0sSUFBSSxTQUFTO2FBQzVILENBQUM7WUFFRixrQkFBa0IsR0FBRztnQkFDcEIsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzthQUM5QixDQUFDO1NBQ0Y7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNmLGtCQUFrQixHQUFHO2dCQUNwQixZQUFZLEVBQUUsNkJBQTZCO2FBQzNDLENBQUM7U0FDRjtRQUVELDBEQUFpQixFQUFFLENBQUMsUUFBUSxDQUMzQix5REFBZ0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLGdCQUU5QyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFDRix3QkFBQztBQUFELENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9UYXJnZXRlZE1lc3NhZ2luZy9Vc2VyRmFjdHNQcm92aWRlci50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBVc2VyRmFjdHNQcm92aWRlci50c1xyXG4gKlxyXG4gKiBNb2R1bGUgZm9yIHVzZXIgZmFjdHMgcHJvdmlkZXIuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQXBpIH0gZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZVwiO1xyXG5pbXBvcnQgeyBnZXREeW5hbWljU2V0dGluZywgU2V0dGluZ0tleSB9IGZyb20gXCIuLi9Db25maWd1cmF0aW9uL0R5bmFtaWNDb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IFRVTElQU19JTkdFU1RJT05fVElNRSwgVFVMSVBTX0xPQURfVElNRU9VVCB9IGZyb20gXCIuL1RhcmdldGVkTWVzc2FnaW5nQ29uc3RhbnRzXCI7XHJcblxyXG5pbXBvcnQgKiBhcyBBc3NldHNQcm92aWRlciBmcm9tIFwiLi9Bc3NldHNQcm92aWRlclwiO1xyXG5pbXBvcnQgKiBhcyBMb2dnaW5nIGZyb20gXCIuLi9Mb2dnaW5nL0xvZ2dpbmdcIjtcclxuXHJcbmltcG9ydCB7IGNyZWF0ZVRpbWVvdXRQcm9taXNlIH0gZnJvbSBcIi4uL1V0aWxzXCI7XHJcbmltcG9ydCB7IGdldExvY2FsVXNlckZhY3QgfSBmcm9tIFwiLi9Mb2NhbFVzZXJGYWN0SGVscGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlckZhY3RzUHJvdmlkZXIgaW1wbGVtZW50cyBBcGkuSVVzZXJGYWN0UHJvdmlkZXIge1xyXG5cdHByaXZhdGUgbG9hZEFzeW5jVHJpZ2dlcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHJpdmF0ZSB1c2VyRmFjdHM6IEFwaS5JVXNlckZhY3RbXSA9IFtdO1xyXG5cdHByaXZhdGUgbmFtZUFuZFVzZXJGYWN0TWFwOiBSZWNvcmQ8c3RyaW5nLCBBcGkuSVVzZXJGYWN0PiA9IHt9O1xyXG5cclxuXHRwdWJsaWMgbG9hZCgpOiBBcGkuSVVzZXJGYWN0W10ge1xyXG5cdFx0aWYgKCF0aGlzLmxvYWRBc3luY1RyaWdnZXJlZCkge1xyXG5cdFx0XHR0aGlzLmxvYWRBc3luYygpO1xyXG5cdFx0XHR0aGlzLmxvYWRBc3luY1RyaWdnZXJlZCA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMudXNlckZhY3RzIHx8IFtdO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGxvYWRBc3luYygpOiBQcm9taXNlPEFwaS5JVXNlckZhY3RbXT4ge1xyXG5cdFx0Y29uc3QgdXNlckZhY3RzUHJvbWlzZSA9IEFzc2V0c1Byb3ZpZGVyLmdldCgpLmdldFVzZXJGYWN0cygpLnRoZW4odXNlckZhY3RzID0+IHtcclxuXHRcdFx0dGhpcy5sb2FkVXNlckZhY3RzKHVzZXJGYWN0cyk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRjb25zdCB0aW1lb3V0TWlsbGlzZWNvbmRzID0gZ2V0RHluYW1pY1NldHRpbmcoU2V0dGluZ0tleS50dWxpcHNMb2FkVGltZW91dCwgVFVMSVBTX0xPQURfVElNRU9VVCk7XHJcblx0XHRjb25zdCB0aW1lb3V0UHJvbWlzZSA9IGNyZWF0ZVRpbWVvdXRQcm9taXNlKHRpbWVvdXRNaWxsaXNlY29uZHMsIHVzZXJGYWN0c1Byb21pc2UpO1xyXG5cdFx0cmV0dXJuIHRpbWVvdXRQcm9taXNlLnRoZW4oKCkgPT4gdGhpcy51c2VyRmFjdHMpLmNhdGNoKCgpID0+IHtcclxuXHRcdFx0aWYgKCF0aGlzLnVzZXJGYWN0cyB8fCB0aGlzLnVzZXJGYWN0cy5sZW5ndGggPD0gMCkge1xyXG5cdFx0XHRcdHRoaXMubG9hZFVzZXJGYWN0cyhBc3NldHNQcm92aWRlci5nZXQoKS5nZXRDYWNoZWRVc2VyRmFjdHMoKSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB0aGlzLnVzZXJGYWN0cztcclxuXHRcdH0pLmNhdGNoKCgpID0+IHRoaXMudXNlckZhY3RzKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRVc2VyRmFjdCh1c2VyRmFjdE5hbWU6IHN0cmluZykge1xyXG5cdFx0bGV0IHVzZXJGYWN0ID0gdGhpcy5uYW1lQW5kVXNlckZhY3RNYXBbdXNlckZhY3ROYW1lXTtcclxuXHRcdGlmICh1c2VyRmFjdCB8fCB0aGlzLm5hbWVBbmRVc2VyRmFjdE1hcC5oYXNPd25Qcm9wZXJ0eSh1c2VyRmFjdE5hbWUpKSB7XHJcblx0XHRcdHJldHVybiB1c2VyRmFjdDtcclxuXHRcdH1cclxuXHJcblx0XHR1c2VyRmFjdCA9IHRoaXMubmFtZUFuZFVzZXJGYWN0TWFwW3VzZXJGYWN0TmFtZV0gPSBnZXRMb2NhbFVzZXJGYWN0KHVzZXJGYWN0TmFtZSk7XHJcblx0XHRyZXR1cm4gdXNlckZhY3Q7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGxvYWRVc2VyRmFjdHMocmVzcG9uc2U6IEFwaS5JVXNlckZhY3RbXSkge1xyXG5cdFx0aWYgKHJlc3BvbnNlKSB7XHJcblx0XHRcdHRoaXMudXNlckZhY3RzID0gcmVzcG9uc2UgfHwgW107XHJcblx0XHRcdHRoaXMudXNlckZhY3RzLm1hcCgodXNlckZhY3QpID0+IHtcclxuXHRcdFx0XHR0aGlzLm5hbWVBbmRVc2VyRmFjdE1hcFt1c2VyRmFjdC51c2VyRmFjdE5hbWVdID0gdXNlckZhY3Q7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHR0aGlzLmxvYWRBc3luY1RyaWdnZXJlZCA9IHRydWU7XHJcblx0XHRcdHRoaXMubG9nVXNlckZhY3RJbmZvKHRoaXMudXNlckZhY3RzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbG9nVXNlckZhY3RJbmZvKHVzZXJGYWN0czogQXBpLklVc2VyRmFjdFtdKSB7XHJcblx0XHRpZiAoIXVzZXJGYWN0cyB8fCB1c2VyRmFjdHMubGVuZ3RoIDw9IDApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHR1bGlwc0luZ2VzdGlvblRpbWVJbnRlcnZhbCA9IGdldER5bmFtaWNTZXR0aW5nKFNldHRpbmdLZXkudHVsaXBzSW5nZXN0aW9uVGltZUludGVydmFsLCBUVUxJUFNfSU5HRVNUSU9OX1RJTUUpO1xyXG5cdFx0aWYgKHR1bGlwc0luZ2VzdGlvblRpbWVJbnRlcnZhbCA8PSAwKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgdXNlckZhY3RQcm9wZXJ0aWVzOiBMb2dnaW5nLklDdXN0b21Qcm9wZXJ0aWVzO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3Qgbm93RGF0ZSA9IERhdGUubm93KCk7XHJcblx0XHRcdGNvbnN0IGlzRXhwaXJlZCA9IChyYXdJdGVtRGF0ZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbURhdGUgPSBEYXRlLnBhcnNlKHJhd0l0ZW1EYXRlKTtcclxuXHRcdFx0XHRyZXR1cm4gIWlzTmFOKGl0ZW1EYXRlKSA/IG5vd0RhdGUgLSBpdGVtRGF0ZSA+IHR1bGlwc0luZ2VzdGlvblRpbWVJbnRlcnZhbCA6IHRydWU7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRjb25zdCBmYWN0SW5mbyA9IHtcclxuXHRcdFx0XHRDb3VudDogdXNlckZhY3RzLmxlbmd0aCxcclxuXHRcdFx0XHRSZWZyZXNoVGltZTogdHVsaXBzSW5nZXN0aW9uVGltZUludGVydmFsLFxyXG5cdFx0XHRcdEluZ2VzdGlvblRpbWU6IHVzZXJGYWN0c1swXS5jbGllbnRJbmdlc3Rpb25EYXRlVGltZSxcclxuXHRcdFx0XHRTb3VyY2VzRXhwaXJlZDogdXNlckZhY3RzLmZpbHRlcih1c2VyRmFjdCA9PiB1c2VyRmFjdCAmJiBpc0V4cGlyZWQodXNlckZhY3Quc291cmNlRGF0ZVRpbWUpKS5sZW5ndGggfHwgdW5kZWZpbmVkLFxyXG5cdFx0XHRcdFN0b3JhZ2VzRXhwaXJlZDogdXNlckZhY3RzLmZpbHRlcih1c2VyRmFjdCA9PiB1c2VyRmFjdCAmJiBpc0V4cGlyZWQodXNlckZhY3Quc3RvcmFnZURhdGVUaW1lKSkubGVuZ3RoIHx8IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRJbmdlc3Rpb25zRXhwaXJlZDogdXNlckZhY3RzLmZpbHRlcih1c2VyRmFjdCA9PiB1c2VyRmFjdCAmJiBpc0V4cGlyZWQodXNlckZhY3QuY2xpZW50SW5nZXN0aW9uRGF0ZVRpbWUpKS5sZW5ndGggfHwgdW5kZWZpbmVkLFxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0dXNlckZhY3RQcm9wZXJ0aWVzID0ge1xyXG5cdFx0XHRcdE1lc3NhZ2U6IFwiVXNlckZhY3RzXCIsXHJcblx0XHRcdFx0RGF0YTogSlNPTi5zdHJpbmdpZnkoZmFjdEluZm8pLFxyXG5cdFx0XHR9O1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0dXNlckZhY3RQcm9wZXJ0aWVzID0ge1xyXG5cdFx0XHRcdEVycm9yTWVzc2FnZTogXCJFcnJvciBnZXR0aW5nIFVzZXJGYWN0IGluZm9cIixcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHJcblx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KFxyXG5cdFx0XHRMb2dnaW5nLkV2ZW50SWRzLlVzZXJGYWN0cy5Qcm92aWRlci5JbmZvLlZBTFVFLFxyXG5cdFx0XHRMb2dnaW5nLkxvZ0xldmVsLkluZm8sXHJcblx0XHRcdHVzZXJGYWN0UHJvcGVydGllcyk7XHJcblx0fVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/TargetedMessaging/UserFactsProvider.ts\n')},"./scripts/app/Theme.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initialize", function() { return initialize; });\n/* harmony import */ var _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UI/UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/**\r\n * Theme.ts\r\n *\r\n * Module for the UI Theme\r\n */\r\n\r\nvar defaultPrimaryColour = "#0167B0";\r\nvar defaultSecondaryColour = "#194789";\r\n/**\r\n * Init\r\n * @param {string} primaryColour Primary Colour\r\n * @param {string} secondaryColour Secondary Colour\r\n */\r\nfunction initialize(primaryColour, secondaryColour) {\r\n    if (primaryColour === void 0) { primaryColour = undefined; }\r\n    if (secondaryColour === void 0) { secondaryColour = undefined; }\r\n    if (!primaryColour) {\r\n        primaryColour = defaultPrimaryColour;\r\n    }\r\n    if (!secondaryColour) {\r\n        secondaryColour = defaultSecondaryColour;\r\n    }\r\n    var sheet = document.createElement("style");\r\n    sheet.textContent =\r\n        "." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].OverallAnchor + ":focus { background-color: " + primaryColour + " } " +\r\n            ("." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].OverallAnchor + ":hover { background-color: " + secondaryColour + " } ") +\r\n            ("." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].OverallAnchorActive + " { background-color: " + primaryColour + " } ") +\r\n            ("." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].SpinnerCircle + " { background-color: " + primaryColour + " } ") +\r\n            (\r\n            // tslint:disable-next-line:max-line-length\r\n            "." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].ChoiceGroup + " input[type=radio]:checked+label>." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].ChoiceGroupIcon + " { border-color: " + primaryColour + " } ") +\r\n            (\r\n            // tslint:disable-next-line:max-line-length\r\n            "." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].ChoiceGroup + " input[type=radio]:hover+label>." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].ChoiceGroupIcon + " { border-color: " + secondaryColour + " } ") +\r\n            (\r\n            // tslint:disable-next-line:max-line-length\r\n            "." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].ChoiceGroup + " input[type=radio]:checked+label>." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].ChoiceGroupIcon + ">span { background-color: " + primaryColour + " } ") +\r\n            ("." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].SubmitButton + " { background-color: " + primaryColour + " } ") +\r\n            ("." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].SubmitButton + ":hover { background-color: " + secondaryColour + " } ") +\r\n            ("." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].CancelButton + " { background-color: " + primaryColour + " } ") +\r\n            ("." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].CancelButton + ":hover { background-color: " + secondaryColour + " } ") +\r\n            ("." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].Link + " { color: " + primaryColour + " } ") +\r\n            ("." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].Link + ":hover { color: " + secondaryColour + " } ") +\r\n            ("." + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].ThanksPanelTitle + " { color: " + primaryColour + " } ") +\r\n            ("#" + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].TPromptTitle + " { color: " + primaryColour + " } ") +\r\n            ("#" + _UI_UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].TFormTitle + " { color: " + primaryColour + " } ");\r\n    document.body.appendChild(sheet);\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UaGVtZS50cz9mMDRlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O0dBSUc7QUFFNkM7QUFFaEQsSUFBSSxvQkFBb0IsR0FBRyxTQUFTLENBQUM7QUFDckMsSUFBSSxzQkFBc0IsR0FBRyxTQUFTLENBQUM7QUFFdkM7Ozs7R0FJRztBQUNJLFNBQVMsVUFBVSxDQUFDLGFBQWlDLEVBQUUsZUFBbUM7SUFBdEUseURBQWlDO0lBQUUsNkRBQW1DO0lBQ2hHLElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDbkIsYUFBYSxHQUFHLG9CQUFvQixDQUFDO0tBQ3JDO0lBRUQsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUNyQixlQUFlLEdBQUcsc0JBQXNCLENBQUM7S0FDekM7SUFFRCxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVDLEtBQUssQ0FBQyxXQUFXO1FBQ2hCLE1BQUksdURBQU8sQ0FBQyxhQUFhLG1DQUE4QixhQUFhLFFBQUs7YUFDekUsTUFBSSx1REFBTyxDQUFDLGFBQWEsbUNBQThCLGVBQWUsUUFBSzthQUMzRSxNQUFJLHVEQUFPLENBQUMsbUJBQW1CLDZCQUF3QixhQUFhLFFBQUs7YUFDekUsTUFBSSx1REFBTyxDQUFDLGFBQWEsNkJBQXdCLGFBQWEsUUFBSzs7WUFDbkUsMkNBQTJDO1lBQzNDLE1BQUksdURBQU8sQ0FBQyxXQUFXLDBDQUFxQyx1REFBTyxDQUFDLGVBQWUseUJBQW9CLGFBQWEsUUFBSzs7WUFDekgsMkNBQTJDO1lBQzNDLE1BQUksdURBQU8sQ0FBQyxXQUFXLHdDQUFtQyx1REFBTyxDQUFDLGVBQWUseUJBQW9CLGVBQWUsUUFBSzs7WUFDekgsMkNBQTJDO1lBQzNDLE1BQUksdURBQU8sQ0FBQyxXQUFXLDBDQUFxQyx1REFBTyxDQUFDLGVBQWUsa0NBQTZCLGFBQWEsUUFBSzthQUNsSSxNQUFJLHVEQUFPLENBQUMsWUFBWSw2QkFBd0IsYUFBYSxRQUFLO2FBQ2xFLE1BQUksdURBQU8sQ0FBQyxZQUFZLG1DQUE4QixlQUFlLFFBQUs7YUFDMUUsTUFBSSx1REFBTyxDQUFDLFlBQVksNkJBQXdCLGFBQWEsUUFBSzthQUNsRSxNQUFJLHVEQUFPLENBQUMsWUFBWSxtQ0FBOEIsZUFBZSxRQUFLO2FBQzFFLE1BQUksdURBQU8sQ0FBQyxJQUFJLGtCQUFhLGFBQWEsUUFBSzthQUMvQyxNQUFJLHVEQUFPLENBQUMsSUFBSSx3QkFBbUIsZUFBZSxRQUFLO2FBQ3ZELE1BQUksdURBQU8sQ0FBQyxnQkFBZ0Isa0JBQWEsYUFBYSxRQUFLO2FBQzNELE1BQUksbURBQUcsQ0FBQyxZQUFZLGtCQUFhLGFBQWEsUUFBSzthQUNuRCxNQUFJLG1EQUFHLENBQUMsVUFBVSxrQkFBYSxhQUFhLFFBQUssRUFBQztJQUVuRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVGhlbWUudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVGhlbWUudHNcclxuICpcclxuICogTW9kdWxlIGZvciB0aGUgVUkgVGhlbWVcclxuICovXHJcblxyXG5pbXBvcnQgeyBDbGFzc2VzLCBJRHMgfSBmcm9tIFwiLi9VSS9VaUNvbnN0YW50c1wiO1xyXG5cclxubGV0IGRlZmF1bHRQcmltYXJ5Q29sb3VyID0gXCIjMDE2N0IwXCI7XHJcbmxldCBkZWZhdWx0U2Vjb25kYXJ5Q29sb3VyID0gXCIjMTk0Nzg5XCI7XHJcblxyXG4vKipcclxuICogSW5pdFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJpbWFyeUNvbG91ciBQcmltYXJ5IENvbG91clxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc2Vjb25kYXJ5Q29sb3VyIFNlY29uZGFyeSBDb2xvdXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplKHByaW1hcnlDb2xvdXI6IHN0cmluZyA9IHVuZGVmaW5lZCwgc2Vjb25kYXJ5Q29sb3VyOiBzdHJpbmcgPSB1bmRlZmluZWQpIHtcclxuXHRpZiAoIXByaW1hcnlDb2xvdXIpIHtcclxuXHRcdHByaW1hcnlDb2xvdXIgPSBkZWZhdWx0UHJpbWFyeUNvbG91cjtcclxuXHR9XHJcblxyXG5cdGlmICghc2Vjb25kYXJ5Q29sb3VyKSB7XHJcblx0XHRzZWNvbmRhcnlDb2xvdXIgPSBkZWZhdWx0U2Vjb25kYXJ5Q29sb3VyO1xyXG5cdH1cclxuXHJcblx0bGV0IHNoZWV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xyXG5cclxuXHRzaGVldC50ZXh0Q29udGVudCA9XHJcblx0XHRgLiR7Q2xhc3Nlcy5PdmVyYWxsQW5jaG9yfTpmb2N1cyB7IGJhY2tncm91bmQtY29sb3I6ICR7cHJpbWFyeUNvbG91cn0gfSBgICtcclxuXHRcdGAuJHtDbGFzc2VzLk92ZXJhbGxBbmNob3J9OmhvdmVyIHsgYmFja2dyb3VuZC1jb2xvcjogJHtzZWNvbmRhcnlDb2xvdXJ9IH0gYCArXHJcblx0XHRgLiR7Q2xhc3Nlcy5PdmVyYWxsQW5jaG9yQWN0aXZlfSB7IGJhY2tncm91bmQtY29sb3I6ICR7cHJpbWFyeUNvbG91cn0gfSBgICtcclxuXHRcdGAuJHtDbGFzc2VzLlNwaW5uZXJDaXJjbGV9IHsgYmFja2dyb3VuZC1jb2xvcjogJHtwcmltYXJ5Q29sb3VyfSB9IGAgK1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG5cdFx0YC4ke0NsYXNzZXMuQ2hvaWNlR3JvdXB9IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+LiR7Q2xhc3Nlcy5DaG9pY2VHcm91cEljb259IHsgYm9yZGVyLWNvbG9yOiAke3ByaW1hcnlDb2xvdXJ9IH0gYCArXHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcblx0XHRgLiR7Q2xhc3Nlcy5DaG9pY2VHcm91cH0gaW5wdXRbdHlwZT1yYWRpb106aG92ZXIrbGFiZWw+LiR7Q2xhc3Nlcy5DaG9pY2VHcm91cEljb259IHsgYm9yZGVyLWNvbG9yOiAke3NlY29uZGFyeUNvbG91cn0gfSBgICtcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcclxuXHRcdGAuJHtDbGFzc2VzLkNob2ljZUdyb3VwfSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPi4ke0NsYXNzZXMuQ2hvaWNlR3JvdXBJY29ufT5zcGFuIHsgYmFja2dyb3VuZC1jb2xvcjogJHtwcmltYXJ5Q29sb3VyfSB9IGAgK1xyXG5cdFx0YC4ke0NsYXNzZXMuU3VibWl0QnV0dG9ufSB7IGJhY2tncm91bmQtY29sb3I6ICR7cHJpbWFyeUNvbG91cn0gfSBgICtcclxuXHRcdGAuJHtDbGFzc2VzLlN1Ym1pdEJ1dHRvbn06aG92ZXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiAke3NlY29uZGFyeUNvbG91cn0gfSBgICtcclxuXHRcdGAuJHtDbGFzc2VzLkNhbmNlbEJ1dHRvbn0geyBiYWNrZ3JvdW5kLWNvbG9yOiAke3ByaW1hcnlDb2xvdXJ9IH0gYCArXHJcblx0XHRgLiR7Q2xhc3Nlcy5DYW5jZWxCdXR0b259OmhvdmVyIHsgYmFja2dyb3VuZC1jb2xvcjogJHtzZWNvbmRhcnlDb2xvdXJ9IH0gYCArXHJcblx0XHRgLiR7Q2xhc3Nlcy5MaW5rfSB7IGNvbG9yOiAke3ByaW1hcnlDb2xvdXJ9IH0gYCArXHJcblx0XHRgLiR7Q2xhc3Nlcy5MaW5rfTpob3ZlciB7IGNvbG9yOiAke3NlY29uZGFyeUNvbG91cn0gfSBgICtcclxuXHRcdGAuJHtDbGFzc2VzLlRoYW5rc1BhbmVsVGl0bGV9IHsgY29sb3I6ICR7cHJpbWFyeUNvbG91cn0gfSBgICtcclxuXHRcdGAjJHtJRHMuVFByb21wdFRpdGxlfSB7IGNvbG9yOiAke3ByaW1hcnlDb2xvdXJ9IH0gYCArXHJcblx0XHRgIyR7SURzLlRGb3JtVGl0bGV9IHsgY29sb3I6ICR7cHJpbWFyeUNvbG91cn0gfSBgO1xyXG5cclxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNoZWV0KTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Theme.ts\n')},"./scripts/app/Transport/Files/Manifest.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Manifest", function() { return Manifest; });\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../Constants */ "./scripts/app/Constants.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../Utils */ "./scripts/app/Utils.ts");\n/* harmony import */ var _Version__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../Version */ "./scripts/app/Version.ts");\n/* harmony import */ var _Window_Window__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../Window/Window */ "./scripts/app/Window/Window.ts");\n/**\r\n * Manifest.ts\r\n * Module for managing the manifest file\r\n */\r\n\r\n\r\n\r\n\r\nvar Manifest = /** @class */ (function () {\r\n    function Manifest(manifestType, appId, submitTime, type, clientFeedbackId, applicationGroup, telemetryGroup, webGroup, retentionDurationDays) {\r\n        this.manifestData = {\r\n            appId: appId,\r\n            application: applicationGroup,\r\n            clientFeedbackId: clientFeedbackId,\r\n            manifestType: manifestType,\r\n            source: "Client",\r\n            submitTime: submitTime,\r\n            telemetry: telemetryGroup,\r\n            type: sanitizeType(type),\r\n            web: webGroup,\r\n            sdkVersion: _Constants__WEBPACK_IMPORTED_MODULE_0__["SDK_VERSION_PREFIX"]\r\n                + (_Window_Window__WEBPACK_IMPORTED_MODULE_3__["get"]().OfficeBrowserFeedback.sdkVersion !== undefined ?\r\n                    _Window_Window__WEBPACK_IMPORTED_MODULE_3__["get"]().OfficeBrowserFeedback.sdkVersion : _Version__WEBPACK_IMPORTED_MODULE_2__["default"]),\r\n            retentionDurationDays: retentionDurationDays,\r\n        };\r\n    }\r\n    Manifest.prototype.getExtendedManifestData = function () {\r\n        return this.manifestData.application.extendedManifestData;\r\n    };\r\n    Manifest.prototype.setComment = function (comment) {\r\n        this.manifestData.comment = comment;\r\n    };\r\n    Manifest.prototype.setEmail = function (email) {\r\n        this.manifestData.email = email;\r\n    };\r\n    Manifest.prototype.setCategory = function (category) {\r\n        this.manifestData.telemetry = this.manifestData.telemetry || {};\r\n        this.manifestData.telemetry.featureArea = category;\r\n    };\r\n    Manifest.prototype.setAppData = function (appData) {\r\n        this.manifestData.application = this.manifestData.application || {};\r\n        this.manifestData.application.appData = appData;\r\n    };\r\n    Manifest.prototype.setExtendedManifestData = function (extendedManifestData) {\r\n        this.manifestData.application = this.manifestData.application || {};\r\n        this.manifestData.application.extendedManifestData = extendedManifestData;\r\n    };\r\n    Manifest.prototype.setClientFeedbackId = function (clientFeedbackId) {\r\n        this.manifestData.clientFeedbackId = clientFeedbackId;\r\n    };\r\n    Manifest.prototype.getClientFeedbackId = function () {\r\n        return this.manifestData.clientFeedbackId;\r\n    };\r\n    Manifest.prototype.setComplianceInformation = function (authenticationType, ageGroup, sendFeedbackPolicyValue, sendSurveyPolicyValue, screenshotPolicyValue, emailPolicyValue) {\r\n        this.manifestData.complianceChecks = {\r\n            authenticationType: authenticationType,\r\n            ageGroup: ageGroup,\r\n            policyAllowFeedback: sendFeedbackPolicyValue,\r\n            policyAllowSurvey: sendSurveyPolicyValue,\r\n            policyAllowScreenshot: screenshotPolicyValue,\r\n            policyAllowContact: emailPolicyValue,\r\n        };\r\n    };\r\n    /**\r\n     * Set freeform custom values in manifest. Throws if values are already set.\r\n     * @param values the values as a JS object\r\n     */\r\n    Manifest.prototype.setValues = function (values) {\r\n        if (values) {\r\n            for (var field in values) {\r\n                if (values.hasOwnProperty(field)) {\r\n                    if (this.manifestData.hasOwnProperty(field)) {\r\n                        this.manifestData[field] = _Utils__WEBPACK_IMPORTED_MODULE_1__["overrideValues"](values[field], this.manifestData[field]);\r\n                    }\r\n                    else {\r\n                        this.manifestData[field] = values[field];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    Manifest.prototype.getContent = function () {\r\n        return new Blob([JSON.stringify(this.manifestData)], { type: "application/json" });\r\n    };\r\n    return Manifest;\r\n}());\r\n\r\nfunction sanitizeType(type) {\r\n    if (type === "Survey") {\r\n        return type;\r\n    }\r\n    else {\r\n        return _Constants__WEBPACK_IMPORTED_MODULE_0__["FeedbackType"][type];\r\n    }\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UcmFuc3BvcnQvRmlsZXMvTWFuaWZlc3QudHM/Y2NmZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0dBR0c7QUFHa0U7QUFDOUI7QUFDRDtBQUNVO0FBRWhEO0lBR0Msa0JBQW1CLFlBQW9CLEVBQUUsS0FBYSxFQUFFLFVBQWtCLEVBQUUsSUFBMEIsRUFDckcsZ0JBQXdCLEVBQUUsZ0JBQTBDLEVBQUUsY0FBc0MsRUFDNUcsUUFBMEIsRUFBRSxxQkFBNkI7UUFDekQsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNuQixLQUFLLEVBQUUsS0FBSztZQUNaLFdBQVcsRUFBRSxnQkFBZ0I7WUFDN0IsZ0JBQWdCLEVBQUUsZ0JBQWdCO1lBQ2xDLFlBQVksRUFBRSxZQUFZO1lBQzFCLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFNBQVMsRUFBRSxjQUFjO1lBQ3pCLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ3hCLEdBQUcsRUFBRSxRQUFRO1lBQ2IsVUFBVSxFQUFFLDZEQUFrQjtrQkFDM0IsQ0FBQyxrREFBVSxFQUFFLENBQUMscUJBQXFCLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDO29CQUMvRCxrREFBVSxFQUFFLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxnREFBTyxDQUFDO1lBQzFELHFCQUFxQixFQUFFLHFCQUFxQjtTQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVNLDBDQUF1QixHQUE5QjtRQUNDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUM7SUFDM0QsQ0FBQztJQUVNLDZCQUFVLEdBQWpCLFVBQWtCLE9BQWU7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3JDLENBQUM7SUFFTSwyQkFBUSxH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c2NyaXB0cy9hcHAvVHJhbnNwb3J0L0ZpbGVzL01hbmlmZXN0LnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIE1hbmlmZXN0LnRzXHJcbiAqIE1vZHVsZSBmb3IgbWFuYWdpbmcgdGhlIG1hbmlmZXN0IGZpbGVcclxuICovXHJcblxyXG5pbXBvcnQgeyBJRmlsZSB9IGZyb20gXCIuL0lGaWxlXCI7XHJcbmltcG9ydCB7IEZlZWRiYWNrVHlwZSwgU0RLX1ZFUlNJT05fUFJFRklYIH0gZnJvbSBcIi4vLi4vLi4vQ29uc3RhbnRzXCI7XHJcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gXCIuLy4uLy4uL1V0aWxzXCI7XHJcbmltcG9ydCBWZXJzaW9uIGZyb20gXCIuLy4uLy4uL1ZlcnNpb25cIjtcclxuaW1wb3J0ICogYXMgV2luZG93IGZyb20gXCIuLy4uLy4uL1dpbmRvdy9XaW5kb3dcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNYW5pZmVzdCBpbXBsZW1lbnRzIElGaWxlIHtcclxuXHRwcml2YXRlIG1hbmlmZXN0RGF0YTogSU1hbmlmZXN0RGF0YTtcclxuXHJcblx0cHVibGljIGNvbnN0cnVjdG9yKG1hbmlmZXN0VHlwZTogc3RyaW5nLCBhcHBJZDogbnVtYmVyLCBzdWJtaXRUaW1lOiBzdHJpbmcsIHR5cGU6IE1hbmlmZXN0RmVlZGJhY2tUeXBlLFxyXG5cdFx0Y2xpZW50RmVlZGJhY2tJZDogc3RyaW5nLCBhcHBsaWNhdGlvbkdyb3VwOiBJTWFuaWZlc3REYXRhQXBwbGljYXRpb24sIHRlbGVtZXRyeUdyb3VwOiBJTWFuaWZlc3REYXRhVGVsZW1ldHJ5LFxyXG5cdFx0d2ViR3JvdXA6IElNYW5pZmVzdERhdGFXZWIsIHJldGVudGlvbkR1cmF0aW9uRGF5czogbnVtYmVyKSB7XHJcblx0XHR0aGlzLm1hbmlmZXN0RGF0YSA9IHtcclxuXHRcdFx0YXBwSWQ6IGFwcElkLFxyXG5cdFx0XHRhcHBsaWNhdGlvbjogYXBwbGljYXRpb25Hcm91cCxcclxuXHRcdFx0Y2xpZW50RmVlZGJhY2tJZDogY2xpZW50RmVlZGJhY2tJZCxcclxuXHRcdFx0bWFuaWZlc3RUeXBlOiBtYW5pZmVzdFR5cGUsXHJcblx0XHRcdHNvdXJjZTogXCJDbGllbnRcIixcclxuXHRcdFx0c3VibWl0VGltZTogc3VibWl0VGltZSxcclxuXHRcdFx0dGVsZW1ldHJ5OiB0ZWxlbWV0cnlHcm91cCxcclxuXHRcdFx0dHlwZTogc2FuaXRpemVUeXBlKHR5cGUpLFxyXG5cdFx0XHR3ZWI6IHdlYkdyb3VwLFxyXG5cdFx0XHRzZGtWZXJzaW9uOiBTREtfVkVSU0lPTl9QUkVGSVhcclxuXHRcdFx0XHQrIChXaW5kb3cuZ2V0KCkuT2ZmaWNlQnJvd3NlckZlZWRiYWNrLnNka1ZlcnNpb24gIT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdFx0XHRXaW5kb3cuZ2V0KCkuT2ZmaWNlQnJvd3NlckZlZWRiYWNrLnNka1ZlcnNpb24gOiBWZXJzaW9uKSxcclxuXHRcdFx0cmV0ZW50aW9uRHVyYXRpb25EYXlzOiByZXRlbnRpb25EdXJhdGlvbkRheXMsXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldEV4dGVuZGVkTWFuaWZlc3REYXRhKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5tYW5pZmVzdERhdGEuYXBwbGljYXRpb24uZXh0ZW5kZWRNYW5pZmVzdERhdGE7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc2V0Q29tbWVudChjb21tZW50OiBzdHJpbmcpIHtcclxuXHRcdHRoaXMubWFuaWZlc3REYXRhLmNvbW1lbnQgPSBjb21tZW50O1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldEVtYWlsKGVtYWlsOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMubWFuaWZlc3REYXRhLmVtYWlsID0gZW1haWw7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc2V0Q2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZykge1xyXG5cdFx0dGhpcy5tYW5pZmVzdERhdGEudGVsZW1ldHJ5ID0gdGhpcy5tYW5pZmVzdERhdGEudGVsZW1ldHJ5IHx8IHt9O1xyXG5cdFx0dGhpcy5tYW5pZmVzdERhdGEudGVsZW1ldHJ5LmZlYXR1cmVBcmVhID0gY2F0ZWdvcnk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc2V0QXBwRGF0YShhcHBEYXRhOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMubWFuaWZlc3REYXRhLmFwcGxpY2F0aW9uID0gdGhpcy5tYW5pZmVzdERhdGEuYXBwbGljYXRpb24gfHwge307XHJcblx0XHR0aGlzLm1hbmlmZXN0RGF0YS5hcHBsaWNhdGlvbi5hcHBEYXRhID0gYXBwRGF0YTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRFeHRlbmRlZE1hbmlmZXN0RGF0YShleHRlbmRlZE1hbmlmZXN0RGF0YTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLm1hbmlmZXN0RGF0YS5hcHBsaWNhdGlvbiA9IHRoaXMubWFuaWZlc3REYXRhLmFwcGxpY2F0aW9uIHx8IHt9O1xyXG5cdFx0dGhpcy5tYW5pZmVzdERhdGEuYXBwbGljYXRpb24uZXh0ZW5kZWRNYW5pZmVzdERhdGEgPSBleHRlbmRlZE1hbmlmZXN0RGF0YTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRDbGllbnRGZWVkYmFja0lkKGNsaWVudEZlZWRiYWNrSWQ6IHN0cmluZykge1xyXG5cdFx0dGhpcy5tYW5pZmVzdERhdGEuY2xpZW50RmVlZGJhY2tJZCA9IGNsaWVudEZlZWRiYWNrSWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0Q2xpZW50RmVlZGJhY2tJZCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMubWFuaWZlc3REYXRhLmNsaWVudEZlZWRiYWNrSWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc2V0Q29tcGxpYW5jZUluZm9ybWF0aW9uKGF1dGhlbnRpY2F0aW9uVHlwZTogc3RyaW5nLCBhZ2VHcm91cDogc3RyaW5nLCBzZW5kRmVlZGJhY2tQb2xpY3lWYWx1ZTogc3RyaW5nLFxyXG5cdFx0c2VuZFN1cnZleVBvbGljeVZhbHVlOiBzdHJpbmcsIHNjcmVlbnNob3RQb2xpY3lWYWx1ZTogc3RyaW5nLCBlbWFpbFBvbGljeVZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMubWFuaWZlc3REYXRhLmNvbXBsaWFuY2VDaGVja3MgPSB7XHJcblx0XHRcdGF1dGhlbnRpY2F0aW9uVHlwZTogYXV0aGVudGljYXRpb25UeXBlLFxyXG5cdFx0XHRhZ2VHcm91cDogYWdlR3JvdXAsXHJcblx0XHRcdHBvbGljeUFsbG93RmVlZGJhY2s6IHNlbmRGZWVkYmFja1BvbGljeVZhbHVlLFxyXG5cdFx0XHRwb2xpY3lBbGxvd1N1cnZleTogc2VuZFN1cnZleVBvbGljeVZhbHVlLFxyXG5cdFx0XHRwb2xpY3lBbGxvd1NjcmVlbnNob3Q6IHNjcmVlbnNob3RQb2xpY3lWYWx1ZSxcclxuXHRcdFx0cG9saWN5QWxsb3dDb250YWN0OiBlbWFpbFBvbGljeVZhbHVlLFxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBmcmVlZm9ybSBjdXN0b20gdmFsdWVzIGluIG1hbmlmZXN0LiBUaHJvd3MgaWYgdmFsdWVzIGFyZSBhbHJlYWR5IHNldC5cclxuXHQgKiBAcGFyYW0gdmFsdWVzIHRoZSB2YWx1ZXMgYXMgYSBKUyBvYmplY3RcclxuXHQgKi9cclxuXHRwdWJsaWMgc2V0VmFsdWVzKHZhbHVlczogb2JqZWN0KSB7XHJcblx0XHRpZiAodmFsdWVzKSB7XHJcblx0XHRcdGZvciAobGV0IGZpZWxkIGluIHZhbHVlcykge1xyXG5cdFx0XHRcdGlmICh2YWx1ZXMuaGFzT3duUHJvcGVydHkoZmllbGQpKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5tYW5pZmVzdERhdGEuaGFzT3duUHJvcGVydHkoZmllbGQpKSB7XHJcblx0XHRcdFx0XHRcdCg8YW55PiB0aGlzLm1hbmlmZXN0RGF0YSlbZmllbGRdID0gVXRpbHMub3ZlcnJpZGVWYWx1ZXMoKDxhbnk+IHZhbHVlcylbZmllbGRdLCAoPGFueT4gdGhpcy5tYW5pZmVzdERhdGEpW2ZpZWxkXSk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQoPGFueT4gdGhpcy5tYW5pZmVzdERhdGEpW2ZpZWxkXSA9ICg8YW55PiB2YWx1ZXMpW2ZpZWxkXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRDb250ZW50KCk6IEJsb2Ige1xyXG5cdFx0cmV0dXJuIG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeSh0aGlzLm1hbmlmZXN0RGF0YSldLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiIH0pO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gc2FuaXRpemVUeXBlKHR5cGU6IE1hbmlmZXN0RmVlZGJhY2tUeXBlKTogc3RyaW5nIHtcclxuXHRpZiAodHlwZSA9PT0gXCJTdXJ2ZXlcIikge1xyXG5cdFx0cmV0dXJuIHR5cGU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiBGZWVkYmFja1R5cGVbdHlwZV07XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBNYW5pZmVzdEZlZWRiYWNrVHlwZSA9IEZlZWRiYWNrVHlwZSB8IFwiU3VydmV5XCI7XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciB0aGUgbWFuaWZlc3QgZGF0YVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJTWFuaWZlc3REYXRhIHtcclxuXHQvLyAjcmVnaW9uIFwiUmVxdWlyZWQgcHJvcGVydGllc1wiXHJcblx0bWFuaWZlc3RUeXBlOiBzdHJpbmc7XHJcblx0YXBwSWQ6IG51bWJlcjtcclxuXHRzdWJtaXRUaW1lOiBzdHJpbmc7XHJcblx0c291cmNlOiBzdHJpbmc7XHJcblx0dHlwZTogc3RyaW5nO1xyXG5cdGNsaWVudEZlZWRiYWNrSWQ6IHN0cmluZztcclxuXHRzZGtWZXJzaW9uOiBzdHJpbmc7XHJcblx0Ly8gI2VuZHJlZ2lvbiBcIlJlcXVpcmVkIHByb3BlcnRpZXNcIlxyXG5cdGNvbW1lbnQ/OiBzdHJpbmc7XHJcblx0ZW1haWw/OiBzdHJpbmc7XHJcblx0cmF0aW5nPzogbnVtYmVyO1xyXG5cdHN1cnZleT86IElNYW5pZmVzdERhdGFTdXJ2ZXk7XHJcblx0d2ViPzogSU1hbmlmZXN0RGF0YVdlYjtcclxuXHRhcHBsaWNhdGlvbj86IElNYW5pZmVzdERhdGFBcHBsaWNhdGlvbjtcclxuXHR0ZWxlbWV0cnk/OiBJTWFuaWZlc3REYXRhVGVsZW1ldHJ5O1xyXG5cdGNvbXBsaWFuY2VDaGVja3M/OiBJTWFuaWZlc3RDb21wbGlhbmNlQ2hlY2tzO1xyXG5cdHJldGVudGlvbkR1cmF0aW9uRGF5cz86IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVyZmFjZSBmb3Igc3VydmV5IHJlbGF0ZWQgcHJvcGVydGllcyBpbiBtYW5pZmVzdFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJTWFuaWZlc3REYXRhU3VydmV5IHtcclxuXHRzdXJ2ZXlJZDogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciBhcHBsaWNhdGlvbiByZWxhdGVkIHByb3BlcnRpZXMgaW4gbWFuaWZlc3RcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1hbmlmZXN0RGF0YUFwcGxpY2F0aW9uIHtcclxuXHRhcHBEYXRhPzogc3RyaW5nO1xyXG5cdGV4dGVuZGVkTWFuaWZlc3REYXRhPzogc3RyaW5nO1xyXG5cdGZlZWRiYWNrVGVuYW50Pzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciB0ZWxlbWV0cnkgcmVsYXRlZCBwcm9wZXJ0aWVzIGluIG1hbmlmZXN0XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElNYW5pZmVzdERhdGFUZWxlbWV0cnkge1xyXG5cdGF1ZGllbmNlPzogc3RyaW5nO1xyXG5cdGF1ZGllbmNlR3JvdXA/OiBzdHJpbmc7XHJcblx0Y2hhbm5lbD86IHN0cmluZztcclxuXHRkZXZpY2VJZD86IHN0cmluZztcclxuXHRkZXZpY2VUeXBlPzogc3RyaW5nO1xyXG5cdGVycm9yQ2xhc3NpZmljYXRpb24/OiBzdHJpbmc7XHJcblx0ZXJyb3JDb2RlPzogc3RyaW5nO1xyXG5cdGVycm9yTmFtZT86IHN0cmluZztcclxuXHRmZWF0dXJlQXJlYT86IHN0cmluZztcclxuXHRmbGlnaHRzPzogc3RyaW5nO1xyXG5cdGZsaWdodFNvdXJjZT86IHN0cmluZztcclxuXHRmdW5kYW1lbnRhbEFyZWE/OiBzdHJpbmc7XHJcblx0aW5zdGFsbGF0aW9uVHlwZT86IHN0cmluZztcclxuXHRpc0xvZ0luY2x1ZGVkPzogYm9vbGVhbjtcclxuXHRpc1VzZXJTdWJzY3JpYmVyPzogYm9vbGVhbjtcclxuXHRsb2dnYWJsZVVzZXJJZD86IHN0cmluZztcclxuXHRvZmZpY2VBcmNoaXRlY3R1cmU/OiBzdHJpbmc7XHJcblx0b2ZmaWNlQnVpbGQ/OiBzdHJpbmc7XHJcblx0b2ZmaWNlRWRpdGluZ0xhbmc/OiBudW1iZXI7XHJcblx0b2ZmaWNlVUlMYW5nPzogbnVtYmVyO1xyXG5cdG9zQml0bmVzcz86IG51bWJlcjtcclxuXHRvc0J1aWxkPzogc3RyaW5nO1xyXG5cdG9zVXNlckxhbmc/OiBudW1iZXI7XHJcblx0cGxhdGZvcm0/OiBzdHJpbmc7XHJcblx0cHJvY2Vzc1Nlc3Npb25JZD86IHN0cmluZztcclxuXHRyaW5nSWQ/OiBudW1iZXI7XHJcblx0c2t1Pzogc3RyaW5nO1xyXG5cdHNvdXJjZUNvbnRleHQ/OiBzdHJpbmc7XHJcblx0c3lzdGVtUHJvZHVjdE5hbWU/OiBzdHJpbmc7XHJcblx0c3lzdGVtTWFudWZhY3R1cmVyPzogc3RyaW5nO1xyXG5cdHRlbmFudElkPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciB3ZWIgcmVsYXRlZCBwcm9wZXJ0aWVzIGluIG1hbmlmZXN0XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElNYW5pZmVzdERhdGFXZWIge1xyXG5cdGJyb3dzZXI/OiBzdHJpbmc7XHJcblx0YnJvd3NlclZlcnNpb24/OiBzdHJpbmc7XHJcblx0ZGF0YUNlbnRlcj86IHN0cmluZztcclxuXHRzb3VyY2VQYWdlTmFtZT86IHN0cmluZztcclxuXHRzb3VyY2VQYWdlVVJJPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciBjb21wbGlhbmNlIGNoZWNrcyByZWxhdGVkIHByb3BlcnRpZXMgaW4gbWFuaWZlc3RcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1hbmlmZXN0Q29tcGxpYW5jZUNoZWNrcyB7XHJcblx0YXV0aGVudGljYXRpb25UeXBlPzogc3RyaW5nO1xyXG5cdGFnZUdyb3VwPzogc3RyaW5nO1xyXG5cdHBvbGljeUFsbG93RmVlZGJhY2s/OiBzdHJpbmc7XHJcblx0cG9saWN5QWxsb3dTdXJ2ZXk/OiBzdHJpbmc7XHJcblx0cG9saWN5QWxsb3dTY3JlZW5zaG90Pzogc3RyaW5nO1xyXG5cdHBvbGljeUFsbG93Q29udGFjdD86IHN0cmluZztcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Transport/Files/Manifest.ts\n')},"./scripts/app/Transport/Files/Screenshot.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Screenshot", function() { return Screenshot; });\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/**\r\n * Screenshot.ts\r\n * Module for managing the screenshot file\r\n */\r\n\r\nvar Screenshot = /** @class */ (function () {\r\n    function Screenshot(screenshot) {\r\n        this.screenshot = screenshot;\r\n    }\r\n    Screenshot.prototype.getContent = function () {\r\n        var imgString;\r\n        try {\r\n            imgString = this.screenshot.toDataURL("image/jpeg").split(",")[1];\r\n        }\r\n        catch (e) {\r\n            _Logging_Logging__WEBPACK_IMPORTED_MODULE_0__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_0__["EventIds"].Shared.Screenshot.GetContent.Failed.DefaultImage.Returned.VALUE, 2 /* Error */, { ErrorMessage: e.toString() });\r\n            // return an image with "Screenshot cannot be captured" message\r\n            imgString = "iVBORw0KGgoAAAANSUhEUgAAAN0AAAA+AQMAAACV2ox1AAAABGdBTUEAALGPC/xhBQAAAAZQTFRFAAAA////pdmf3QAAAAlwSFlzAAAOwgAADsIBFShKgAAAAjtJREFUSMfV1M1rE0EUAHDBa5r8A9vkL6giFiI0JH+Ih9KLx8TaukkJugShHgrJzYvkVPQkUqgwSePLEELaU+zBg8JKVvSQQNydlsadwCQzziRZ82ETxYMfc3gD8+MxjzcfV8T80f0vkQ8i68tAPSMSQ0PkI6QDpEPkZBHy1Wp1/zjni2lrZq2T2uikDG17A54Hr0vsvwXIl3WXt02zeIHQBSq3DxHk7VO55zIFgLLrcmaaQBGiqCwQArBVQTbNZODNBB5Ee2EEr5eGiDG4k5mcqcy+Ksh+N8K2+bRI1Z68fRMVoV+XmcFwpQJZGohpkds1WtjppGLaq51a2b8yp310UW9/H8VfRj68CIKRsWCFPCCEM419S4bSAOmPmdb3TBrQ4lmnt9n4/Hiv5fTunsOzXbJfLR2rU3Fd5ugOe9mw0lvNOCNxyDdIHkpHCv0S3a+MS0yT+4wkAKx1gBJeVxeMRhSeNZpXJfY+zqAVl+g0mCFRJMgs6oy9+MCMrWZaJJwiWFjuWcIShf+Wk2W9e59OHu21WPdsswZNLKs9wV77mJiaMVbBQ+/1jGZDofFLuOBU/jzG6OQKnkLOZ5EvwolMX2Q19TAX9MWyy/aNarewfZptechdLn8B3TatB/YXB2j4MKw3jTHKX4AO0CbqaSddMokHUbr0PpSXmFG4O4WIu86asCVihfoM6nUmse5gGkbJOyThVesX4UI0d00LBYMr55VuIZl8MkY1uOiTy9v3c+ShuXj5+NdQdL8B+5gmw8WZuREAAAAASUVORK5CYII=";\r\n        }\r\n        var blobBin = atob(imgString);\r\n        var array = [];\r\n        for (var i = 0; i < blobBin.length; i++) {\r\n            array.push(blobBin.charCodeAt(i));\r\n        }\r\n        var file = new Blob([new Uint8Array(array)], { type: "image/jpeg" });\r\n        return file;\r\n    };\r\n    return Screenshot;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UcmFuc3BvcnQvRmlsZXMvU2NyZWVuc2hvdC50cz83OTlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBOzs7R0FHRztBQUlnRDtBQUVuRDtJQUdDLG9CQUFhLFVBQTZCO1FBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQzlCLENBQUM7SUFFTSwrQkFBVSxHQUFqQjtRQUNDLElBQUksU0FBaUIsQ0FBQztRQUN0QixJQUFJO1lBQ0gsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsRTtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1gsMERBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMseURBQWdCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxpQkFDcEYsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUV6RCwrREFBK0Q7WUFDL0QsU0FBUyxHQUFHLGs1QkFBazVCLENBQUM7U0FDLzVCO1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxJQUFJLEdBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7UUFFekUsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBQ0YsaUJBQUM7QUFBRCxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVHJhbnNwb3J0L0ZpbGVzL1NjcmVlbnNob3QudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogU2NyZWVuc2hvdC50c1xyXG4gKiBNb2R1bGUgZm9yIG1hbmFnaW5nIHRoZSBzY3JlZW5zaG90IGZpbGVcclxuICovXHJcblxyXG4vKiB0c2xpbnQ6ZGlzYWJsZSBtYXgtbGluZS1sZW5ndGggKi9cclxuaW1wb3J0IHtJRmlsZX0gZnJvbSBcIi4vSUZpbGVcIjtcclxuaW1wb3J0ICogYXMgTG9nZ2luZyBmcm9tIFwiLi8uLi8uLi9Mb2dnaW5nL0xvZ2dpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTY3JlZW5zaG90IGltcGxlbWVudHMgSUZpbGUge1xyXG5cdHByaXZhdGUgc2NyZWVuc2hvdDogSFRNTENhbnZhc0VsZW1lbnQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChzY3JlZW5zaG90OiBIVE1MQ2FudmFzRWxlbWVudCkge1xyXG5cdFx0dGhpcy5zY3JlZW5zaG90ID0gc2NyZWVuc2hvdDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRDb250ZW50KCk6IEJsb2Ige1xyXG5cdFx0bGV0IGltZ1N0cmluZzogc3RyaW5nO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aW1nU3RyaW5nID0gdGhpcy5zY3JlZW5zaG90LnRvRGF0YVVSTChcImltYWdlL2pwZWdcIikuc3BsaXQoXCIsXCIpWzFdO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU2hhcmVkLlNjcmVlbnNob3QuR2V0Q29udGVudC5GYWlsZWQuRGVmYXVsdEltYWdlLlJldHVybmVkLlZBTFVFLFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuRXJyb3IsIHsgRXJyb3JNZXNzYWdlOiBlLnRvU3RyaW5nKCkgfSk7XHJcblxyXG5cdFx0XHQvLyByZXR1cm4gYW4gaW1hZ2Ugd2l0aCBcIlNjcmVlbnNob3QgY2Fubm90IGJlIGNhcHR1cmVkXCIgbWVzc2FnZVxyXG5cdFx0XHRpbWdTdHJpbmcgPSBcImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFOMEFBQUErQVFNQUFBQ1Yyb3gxQUFBQUJHZEJUVUVBQUxHUEMveGhCUUFBQUFaUVRGUkZBQUFBLy8vL3BkbWYzUUFBQUFsd1NGbHpBQUFPd2dBQURzSUJGU2hLZ0FBQUFqdEpSRUZVU01mVjFNMXJFMEVVQUhEQmE1cjhBOXZrTDZnaUZpSTBKSCtJaDlLTHg4VGF1a2tKdWdTaEhnckp6WXZrVlBRa1VxZ3dTZVBMRUVMYVUrekJnOEpLVnZTUVFOeWRsc2Fkd0NRenppUlo4MkVUeFlNZmMzZ0Q4K014anpjZlY4VDgwZjB2a1E4aTY4dEFQU01TUTBQa0k2UURwRVBrWkJIeTFXcDEvempuaTJsclpxMlQydWlrREcxN0E1NEhyMHZzdndYSWwzV1h0MDJ6ZUlIUUJTcTNEeEhrN1ZPNTV6SUZnTExyY21hYVFCR2lxQ3dRQXJCVlFUYk5aT0ROQkI1RWUyRUVyNWVHaURHNGs1bWNxY3krS3NoK044SzIrYlJJMVo2OGZSTVZvVitYbWNGd3BRSlpHb2hwa2RzMVd0anBwR0xhcTUxYTJiOHlwMzEwVVc5L0g4VmZSajY4Q0lLUnNXQ0ZQQ0NFTTQxOVM0YlNBT21QbWRiM1RCclE0bG1udDluNC9IaXY1ZlR1bnNPelhiSmZMUjJyVTNGZDV1Z09lOW13MGx2Tk9DTnh5RGRJSGtwSEN2MFMzYStNUzB5VCs0d2tBS3gxZ0JKZVZ4ZU1SaFNlTlpwWEpmWSt6cUFWbCtnMG1DRlJKTWdzNm95OStNQ01yV1phSkp3aVdGanVXY0lTaGYrV2syVzllNTlPSHUyMVdQZHNzd1pOTEtzOXdWNzdtSmlhTVZiQlErLzFqR1pEb2ZGTHVPQlUvanpHNk9RS25rTE9aNUV2d29sTVgyUTE5VEFYOU1XeXkvYU5hcmV3ZlpwdGVjaGRMbjhCM1RhdEIvWVhCMmo0TUt3M2pUSEtYNEFPMENicWFTZGRNb2tIVWJyMFBwU1htRkc0TzRXSXU4NmFzQ1ZpaGZvTTZuVW1zZTVnR2tiSk95VGhWZXNYNFVJMGQwMExCWU1yNTVWdUlabDhNa1kxdU9pVHk5djNjK1NodVhqNStOZFFkTDhCKzVnbXc4V1p1UkVBQUFBQVNVVk9SSzVDWUlJPVwiO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBibG9iQmluID0gYXRvYihpbWdTdHJpbmcpO1xyXG5cdFx0bGV0IGFycmF5ID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGJsb2JCaW4ubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0YXJyYXkucHVzaChibG9iQmluLmNoYXJDb2RlQXQoaSkpO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGZpbGU6IEJsb2IgPSBuZXcgQmxvYihbbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXSwge3R5cGU6IFwiaW1hZ2UvanBlZ1wifSk7XHJcblxyXG5cdFx0cmV0dXJuIGZpbGU7XHJcblx0fVxyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/Transport/Files/Screenshot.ts\n')},"./scripts/app/Transport/Petrol.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "send", function() { return send; });\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n\r\nvar HTTP_TIMEOUT = 8000; // timeout in milliseconds\r\n/**\r\n * Make an http request with retries\r\n * @param method the http method "GET", "POST" etc\r\n * @param url the url\r\n * @param requestBody the request body\r\n * @param maxRetries the maximum number of retries\r\n * @param onLoad the onload handler\r\n */\r\nfunction makeHttpRequest(method, url, requestBody, maxRetries, onLoad) {\r\n    var makeRequest = function (retries, timeout) {\r\n        return new Promise(function (resolve, reject) {\r\n            var xhr = new XMLHttpRequest();\r\n            xhr.open(method, url, true);\r\n            xhr.timeout = timeout;\r\n            xhr.onload = function () { onLoad(xhr, resolve, reject); };\r\n            xhr.ontimeout = function () {\r\n                if (retries > 0) {\r\n                    // double the timeout and retry it\r\n                    makeRequest(retries - 1, timeout * 2).then(resolve, reject);\r\n                }\r\n                else {\r\n                    reject(new Error("Request to \'" + url + "\' timed out. timeout: " + xhr.timeout));\r\n                }\r\n            };\r\n            xhr.onerror = function () {\r\n                if (retries > 0) {\r\n                    makeRequest(retries - 1, timeout).then(resolve, reject);\r\n                }\r\n                else {\r\n                    reject(new Error("Request to \'" + url + "\' errored. " + xhr.status + " - " + xhr.statusText + " : " + xhr.responseText));\r\n                }\r\n            };\r\n            xhr.send(requestBody);\r\n        });\r\n    };\r\n    // get the input timeout or using the default value if timeout is not defined\r\n    var httpTimeout = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__["get"]().getCommonInitOptions().petrolTimeout\r\n        ? _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_0__["get"]().getCommonInitOptions().petrolTimeout\r\n        : HTTP_TIMEOUT;\r\n    return makeRequest(maxRetries, httpTimeout);\r\n}\r\nvar uploadEndpointInt = "https://petrol-int.office.microsoft.com/v1/feedback";\r\nvar uploadEndpointProd = "https://petrol.office.microsoft.com/v1/feedback";\r\n/**\r\n * Send a payload to Petrol\r\n * @param isProduction is production?\r\n * @param manifest manifest content\r\n * @param screenshot screenshot content\r\n * @param diagnostics diagnostics content\r\n */\r\nfunction send(isProduction, manifest, screenshot, diagnostics) {\r\n    if (manifest === undefined) {\r\n        return Promise.reject(new Error("Manifest cannot be undefined"));\r\n    }\r\n    var formData = new FormData();\r\n    formData.append("Manifest", manifest);\r\n    if (screenshot) {\r\n        formData.append("Screenshot", screenshot);\r\n    }\r\n    if (diagnostics) {\r\n        formData.append("Diagnostics", diagnostics);\r\n    }\r\n    return makeHttpRequest("POST", isProduction ? uploadEndpointProd : uploadEndpointInt, formData, 2, function (xhr, resolve, reject) {\r\n        if (xhr.status !== 200) {\r\n            reject(new Error("Non-200 response with status code: " + xhr.status + ", response: " + xhr.responseText));\r\n        }\r\n        resolve();\r\n    });\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UcmFuc3BvcnQvUGV0cm9sLnRzPzU4NjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQWdFO0FBRWhFLElBQU0sWUFBWSxHQUFXLElBQUksQ0FBQyxDQUFDLDBCQUEwQjtBQUM3RDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxlQUFlLENBQUksTUFBYyxFQUFFLEdBQVcsRUFBRSxXQUFnQixFQUFFLFVBQWtCLEVBQzVGLE1BQWtHO0lBRWxHLElBQUksV0FBVyxHQUNkLFVBQUMsT0FBZSxFQUFFLE9BQWU7UUFDaEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO1lBQ2xDLElBQUksR0FBRyxHQUFtQixJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQy9DLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN0QixHQUFHLENBQUMsTUFBTSxHQUFHLGNBQVEsTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsR0FBRyxDQUFDLFNBQVMsR0FBRztnQkFDZixJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUU7b0JBQ2hCLGtDQUFrQztvQkFDbEMsV0FBVyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQzVEO3FCQUFNO29CQUNOLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxpQkFBZSxHQUFHLDhCQUF5QixHQUFHLENBQUMsT0FBUyxDQUFDLENBQUMsQ0FBQztpQkFDNUU7WUFDRixDQUFDLENBQUM7WUFDRixHQUFHLENBQUMsT0FBTyxHQUFHO2dCQUNiLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRTtvQkFDaEIsV0FBVyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDeEQ7cUJBQU07b0JBQ04sTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGlCQUFlLEdBQUcsbUJBQWMsR0FBRyxDQUFDLE1BQU0sV0FBTSxHQUFHLENBQUMsVUFBVSxXQUFNLEdBQUcsQ0FBQyxZQUFjLENBQUMsQ0FBQyxDQUFDO2lCQUMxRztZQUNGLENBQUMsQ0FBQztZQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFSCw2RUFBNkU7SUFDN0UsSUFBTSxXQUFXLEdBQUcsZ0VBQWlCLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLGFBQWE7UUFDdkUsQ0FBQyxDQUFDLGdFQUFpQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxhQUFhO1FBQzFELENBQUMsQ0FBQyxZQUFZLENBQUM7SUFFcEIsT0FBTyxXQUFXLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxJQUFNLGlCQUFpQixHQUFXLHFEQUFxRCxDQUFDO0FBQ3hGLElBQU0sa0JBQWtCLEdBQVcsaURBQWlELENBQUM7QUFFckY7Ozs7OztHQU1HO0FBQ0ksU0FBUyxJQUFJLENBQUMsWUFBcUIsRUFBRSxRQUFjLEVBQUUsVUFBaUIsRUFBRSxXQUFrQjtJQUNoRyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7UUFDM0IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQztLQUNqRTtJQUVELElBQUksUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7SUFDOUIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFdEMsSUFBSSxVQUFVLEVBQUU7UUFDZixRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztLQUMxQztJQUVELElBQUksV0FBVyxFQUFFO1FBQ2hCLFFBQVEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQzVDO0lBRUQsT0FBTyxlQUFlLENBQU0sTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQ3JHLFVBQ0MsR0FBbUIsRUFDbkIsT0FBOEIsRUFDOUIsTUFBNkI7UUFFN0IsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtZQUN2QixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMscUNBQXFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxjQUFjLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7U0FDMUc7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNYLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL1RyYW5zcG9ydC9QZXRyb2wudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBDb25maWd1cmF0aW9uIGZyb20gXCIuLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuXHJcbmNvbnN0IEhUVFBfVElNRU9VVDogbnVtYmVyID0gODAwMDsgLy8gdGltZW91dCBpbiBtaWxsaXNlY29uZHNcclxuLyoqXHJcbiAqIE1ha2UgYW4gaHR0cCByZXF1ZXN0IHdpdGggcmV0cmllc1xyXG4gKiBAcGFyYW0gbWV0aG9kIHRoZSBodHRwIG1ldGhvZCBcIkdFVFwiLCBcIlBPU1RcIiBldGNcclxuICogQHBhcmFtIHVybCB0aGUgdXJsXHJcbiAqIEBwYXJhbSByZXF1ZXN0Qm9keSB0aGUgcmVxdWVzdCBib2R5XHJcbiAqIEBwYXJhbSBtYXhSZXRyaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzXHJcbiAqIEBwYXJhbSBvbkxvYWQgdGhlIG9ubG9hZCBoYW5kbGVyXHJcbiAqL1xyXG5mdW5jdGlvbiBtYWtlSHR0cFJlcXVlc3Q8VD4obWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCByZXF1ZXN0Qm9keTogYW55LCBtYXhSZXRyaWVzOiBudW1iZXIsXHJcblx0b25Mb2FkOiAoeGhyOiBYTUxIdHRwUmVxdWVzdCwgcmVzb2x2ZTogKHZhbHVlPzogVCkgPT4gdm9pZCwgcmVqZWN0OiAoZXJyb3I/OiBhbnkpID0+IHZvaWQpID0+IHZvaWRcclxuKTogUHJvbWlzZTxUPiB7XHJcblx0bGV0IG1ha2VSZXF1ZXN0OiAocmV0cmllczogbnVtYmVyLCB0aW1lb3V0OiBudW1iZXIpID0+IFByb21pc2U8VD4gPVxyXG5cdFx0KHJldHJpZXM6IG51bWJlciwgdGltZW91dDogbnVtYmVyKSA9PiB7XHJcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0bGV0IHhocjogWE1MSHR0cFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuXHRcdFx0XHR4aHIub3BlbihtZXRob2QsIHVybCwgdHJ1ZSk7XHJcblx0XHRcdFx0eGhyLnRpbWVvdXQgPSB0aW1lb3V0O1xyXG5cdFx0XHRcdHhoci5vbmxvYWQgPSAoKSA9PiB7IG9uTG9hZCh4aHIsIHJlc29sdmUsIHJlamVjdCk7IH07XHJcblx0XHRcdFx0eGhyLm9udGltZW91dCA9ICgpID0+IHtcclxuXHRcdFx0XHRcdGlmIChyZXRyaWVzID4gMCkge1xyXG5cdFx0XHRcdFx0XHQvLyBkb3VibGUgdGhlIHRpbWVvdXQgYW5kIHJldHJ5IGl0XHJcblx0XHRcdFx0XHRcdG1ha2VSZXF1ZXN0KHJldHJpZXMgLSAxLCB0aW1lb3V0ICogMikudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihgUmVxdWVzdCB0byAnJHt1cmx9JyB0aW1lZCBvdXQuIHRpbWVvdXQ6ICR7eGhyLnRpbWVvdXR9YCkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0eGhyLm9uZXJyb3IgPSAoKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAocmV0cmllcyA+IDApIHtcclxuXHRcdFx0XHRcdFx0bWFrZVJlcXVlc3QocmV0cmllcyAtIDEsIHRpbWVvdXQpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoYFJlcXVlc3QgdG8gJyR7dXJsfScgZXJyb3JlZC4gJHt4aHIuc3RhdHVzfSAtICR7eGhyLnN0YXR1c1RleHR9IDogJHt4aHIucmVzcG9uc2VUZXh0fWApKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHhoci5zZW5kKHJlcXVlc3RCb2R5KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9O1xyXG5cclxuXHQvLyBnZXQgdGhlIGlucHV0IHRpbWVvdXQgb3IgdXNpbmcgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGltZW91dCBpcyBub3QgZGVmaW5lZFxyXG5cdGNvbnN0IGh0dHBUaW1lb3V0ID0gQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLnBldHJvbFRpbWVvdXRcclxuXHRcdFx0XHRcdFx0PyBDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkucGV0cm9sVGltZW91dFxyXG5cdFx0XHRcdFx0XHQ6IEhUVFBfVElNRU9VVDtcclxuXHJcblx0cmV0dXJuIG1ha2VSZXF1ZXN0KG1heFJldHJpZXMsIGh0dHBUaW1lb3V0KTtcclxufVxyXG5cclxuY29uc3QgdXBsb2FkRW5kcG9pbnRJbnQ6IHN0cmluZyA9IFwiaHR0cHM6Ly9wZXRyb2wtaW50Lm9mZmljZS5taWNyb3NvZnQuY29tL3YxL2ZlZWRiYWNrXCI7XHJcbmNvbnN0IHVwbG9hZEVuZHBvaW50UHJvZDogc3RyaW5nID0gXCJodHRwczovL3BldHJvbC5vZmZpY2UubWljcm9zb2Z0LmNvbS92MS9mZWVkYmFja1wiO1xyXG5cclxuLyoqXHJcbiAqIFNlbmQgYSBwYXlsb2FkIHRvIFBldHJvbFxyXG4gKiBAcGFyYW0gaXNQcm9kdWN0aW9uIGlzIHByb2R1Y3Rpb24/XHJcbiAqIEBwYXJhbSBtYW5pZmVzdCBtYW5pZmVzdCBjb250ZW50XHJcbiAqIEBwYXJhbSBzY3JlZW5zaG90IHNjcmVlbnNob3QgY29udGVudFxyXG4gKiBAcGFyYW0gZGlhZ25vc3RpY3MgZGlhZ25vc3RpY3MgY29udGVudFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNlbmQoaXNQcm9kdWN0aW9uOiBib29sZWFuLCBtYW5pZmVzdDogQmxvYiwgc2NyZWVuc2hvdD86IEJsb2IsIGRpYWdub3N0aWNzPzogQmxvYik6IFByb21pc2U8YW55PiB7XHJcblx0aWYgKG1hbmlmZXN0ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJNYW5pZmVzdCBjYW5ub3QgYmUgdW5kZWZpbmVkXCIpKTtcclxuXHR9XHJcblxyXG5cdGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG5cdGZvcm1EYXRhLmFwcGVuZChcIk1hbmlmZXN0XCIsIG1hbmlmZXN0KTtcclxuXHJcblx0aWYgKHNjcmVlbnNob3QpIHtcclxuXHRcdGZvcm1EYXRhLmFwcGVuZChcIlNjcmVlbnNob3RcIiwgc2NyZWVuc2hvdCk7XHJcblx0fVxyXG5cclxuXHRpZiAoZGlhZ25vc3RpY3MpIHtcclxuXHRcdGZvcm1EYXRhLmFwcGVuZChcIkRpYWdub3N0aWNzXCIsIGRpYWdub3N0aWNzKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBtYWtlSHR0cFJlcXVlc3Q8YW55PihcIlBPU1RcIiwgaXNQcm9kdWN0aW9uID8gdXBsb2FkRW5kcG9pbnRQcm9kIDogdXBsb2FkRW5kcG9pbnRJbnQsIGZvcm1EYXRhLCAyLFxyXG5cdFx0ZnVuY3Rpb24gKFxyXG5cdFx0XHR4aHI6IFhNTEh0dHBSZXF1ZXN0LFxyXG5cdFx0XHRyZXNvbHZlOiAodmFsdWU/OiBhbnkpID0+IHZvaWQsXHJcblx0XHRcdHJlamVjdDogKGVycm9yPzogYW55KSA9PiB2b2lkXHJcblx0XHQpOiB2b2lkIHtcclxuXHRcdFx0aWYgKHhoci5zdGF0dXMgIT09IDIwMCkge1xyXG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJOb24tMjAwIHJlc3BvbnNlIHdpdGggc3RhdHVzIGNvZGU6IFwiICsgeGhyLnN0YXR1cyArIFwiLCByZXNwb25zZTogXCIgKyB4aHIucmVzcG9uc2VUZXh0KSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmVzb2x2ZSgpO1xyXG5cdFx0fSk7XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/Transport/Petrol.ts\n')},"./scripts/app/Transport/Transport.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Transporter", function() { return Transporter; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../Utils */ "./scripts/app/Utils.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/* harmony import */ var _Petrol__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Petrol */ "./scripts/app/Transport/Petrol.ts");\n/* harmony import */ var _Files_Screenshot__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Files/Screenshot */ "./scripts/app/Transport/Files/Screenshot.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _Files_Manifest__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Files/Manifest */ "./scripts/app/Transport/Files/Manifest.ts");\n/**\r\n * Feedback.ts\r\n *\r\n * Module for payload transport.\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar Transporter = /** @class */ (function () {\r\n    function Transporter(environment, manifestType, appId, type, applicationGroup, telemetryGroup, webGroup) {\r\n        var _a, _b, _c, _d, _e, _f, _g, _h;\r\n        this.clientFeedbackId = _Utils__WEBPACK_IMPORTED_MODULE_1__["guid"]();\r\n        this.manifest = new _Files_Manifest__WEBPACK_IMPORTED_MODULE_6__["Manifest"](manifestType, appId, new Date().toISOString(), type, this.clientFeedbackId, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({}, applicationGroup), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({}, telemetryGroup), Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({}, webGroup), _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions().retentionDurationDays);\r\n        this.environment = environment;\r\n        this.manifest.setComplianceInformation(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["AuthenticationType"][(_b = ((_a = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions()) === null || _a === void 0 ? void 0 : _a.authenticationType)) !== null && _b !== void 0 ? _b : _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["AuthenticationType"].Unauthenticated], _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["AgeGroup"][(_d = ((_c = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions()) === null || _c === void 0 ? void 0 : _c.ageGroup)) !== null && _d !== void 0 ? _d : _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["AgeGroup"].Undefined], this.ocpsEnumToString((_e = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getInAppFeedbackInitOptions()) === null || _e === void 0 ? void 0 : _e.sendFeedbackPolicyValue), this.ocpsBooleanToString((_f = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateInitOptions()) === null || _f === void 0 ? void 0 : _f.surveyEnabled), this.ocpsEnumToString((_g = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions()) === null || _g === void 0 ? void 0 : _g.screenshotPolicyValue), this.ocpsEnumToString((_h = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions()) === null || _h === void 0 ? void 0 : _h.emailPolicyValue));\r\n    }\r\n    Transporter.prototype.getClientFeedbackId = function () {\r\n        return this.clientFeedbackId;\r\n    };\r\n    Transporter.prototype.getExtendedManifestData = function () {\r\n        return this.manifest.getExtendedManifestData();\r\n    };\r\n    Transporter.prototype.setComment = function (comment) {\r\n        this.manifest.setComment(comment);\r\n    };\r\n    Transporter.prototype.setEmail = function (email) {\r\n        this.manifest.setEmail(email);\r\n    };\r\n    Transporter.prototype.setCategory = function (category) {\r\n        this.manifest.setCategory(category);\r\n    };\r\n    Transporter.prototype.setAppData = function (appData) {\r\n        this.manifest.setAppData(appData);\r\n    };\r\n    Transporter.prototype.setExtendedManifestData = function (extendedManifestData) {\r\n        this.manifest.setExtendedManifestData(extendedManifestData);\r\n    };\r\n    Transporter.prototype.setScreenshot = function (screenshot) {\r\n        this.screenshot = new _Files_Screenshot__WEBPACK_IMPORTED_MODULE_4__["Screenshot"](screenshot);\r\n    };\r\n    Transporter.prototype.setClientFeedbackId = function (clientFeedbackId) {\r\n        this.manifest.setClientFeedbackId(clientFeedbackId);\r\n    };\r\n    Transporter.prototype.getManifest = function () {\r\n        return this.manifest;\r\n    };\r\n    /**\r\n     * Set freeform custom values in manifest. Throws if values are already set.\r\n     * @param values the values as a JS object\r\n     */\r\n    Transporter.prototype.setManifestValues = function (values) {\r\n        this.manifest.setValues(values);\r\n    };\r\n    /**\r\n     * Submit the payload\r\n     */\r\n    Transporter.prototype.submit = function () {\r\n        if (!_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().isFeedbackSurveyEnabledByAADC()) {\r\n            _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["EventIds"].Shared.Upload.Prevented.VALUE, 2 /* Error */, {\r\n                Data: JSON.stringify({\r\n                    ageGroup: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions().ageGroup,\r\n                    authenticationType: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions().authenticationType,\r\n                }),\r\n            });\r\n            return Promise.resolve();\r\n        }\r\n        var manifestContent = this.manifest.getContent();\r\n        var screenshotContent = undefined;\r\n        var clientFeedbackId = this.clientFeedbackId;\r\n        if (this.screenshot) {\r\n            screenshotContent = this.screenshot.getContent();\r\n        }\r\n        return _Petrol__WEBPACK_IMPORTED_MODULE_3__["send"](this.environment === 0 /* Production */, manifestContent, screenshotContent)\r\n            .catch(function onRejected(err) {\r\n            _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().setFeedbackSubmitted(false);\r\n            _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions().onError("Payload submission failed: " + err.message +\r\n                ". ClientFeedbackId: " + clientFeedbackId);\r\n            _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["EventIds"].Shared.Upload.Failed.VALUE, 2 /* Error */, { ErrorMessage: err.message, ClientFeedbackId: clientFeedbackId });\r\n        });\r\n    };\r\n    Transporter.prototype.ocpsBooleanToString = function (policyValue) {\r\n        if (policyValue === undefined) {\r\n            return "Not Configured";\r\n        }\r\n        if (policyValue) {\r\n            return "Enabled";\r\n        }\r\n        return "Disabled";\r\n    };\r\n    Transporter.prototype.ocpsEnumToString = function (policyValue) {\r\n        if (!policyValue) {\r\n            return "Not Configured";\r\n        }\r\n        switch (policyValue) {\r\n            case 2 /* Disabled */:\r\n                return "Disabled";\r\n            case 1 /* Enabled */:\r\n                return "Enabled";\r\n            default:\r\n                return "Not Configured";\r\n        }\r\n    };\r\n    return Transporter;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9UcmFuc3BvcnQvVHJhbnNwb3J0LnRzPzM1MjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7R0FJRzs7QUFHaUM7QUFDWTtBQUNiO0FBQ2E7QUFDZ0I7QUFFdkM7QUFHcUQ7QUFJOUU7SUFNQyxxQkFBbUIsV0FBa0MsRUFBRSxZQUFvQixFQUFFLEtBQWEsRUFBRSxJQUEwQixFQUNySCxnQkFBMEMsRUFBRSxjQUFzQyxFQUFFLFFBQTBCOztRQUU5RyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsMkNBQVUsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSx3REFBUSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQy9FLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSwyREFBSyxnQkFBZ0IsOERBQVMsY0FBYyw4REFBUyxRQUFRLEdBQ3BGLGdFQUFpQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBRS9CLElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsK0VBQWtCLE9BQUMsT0FBQyxnRUFBaUIsRUFBRSxDQUFDLG9CQUFvQixFQUFFLDBDQUFFLGtCQUFrQixDQUFDLG1DQUN6SCwrRUFBa0IsQ0FBQyxlQUFlLENBQUMsRUFDbkMscUVBQVEsT0FBQyxPQUFDLGdFQUFpQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsMENBQUUsUUFBUSxDQUFDLG1DQUFJLHFFQUFRLENBQUMsU0FBUyxDQUFDLEVBQ3RGLElBQUksQ0FBQyxnQkFBZ0IsT0FBQyxnRUFBaUIsRUFBRSxDQUFDLDJCQUEyQixFQUFFLDBDQUFFLHVCQUF1QixDQUFDLEVBQ2pH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ZXNDb250ZW50IjpbIi8qKlxyXG4gKiBGZWVkYmFjay50c1xyXG4gKlxyXG4gKiBNb2R1bGUgZm9yIHBheWxvYWQgdHJhbnNwb3J0LlxyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIENvbnN0YW50cyBmcm9tIFwiLi8uLi9Db25zdGFudHNcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4vLi4vVXRpbHNcIjtcclxuaW1wb3J0ICogYXMgTG9nZ2luZyBmcm9tIFwiLi8uLi9Mb2dnaW5nL0xvZ2dpbmdcIjtcclxuaW1wb3J0ICogYXMgUGV0cm9sIGZyb20gXCIuL1BldHJvbFwiO1xyXG5pbXBvcnQgeyBTY3JlZW5zaG90IH0gZnJvbSBcIi4vRmlsZXMvU2NyZWVuc2hvdFwiO1xyXG5pbXBvcnQgKiBhcyBDb25maWd1cmF0aW9uIGZyb20gXCIuLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHsgTWFuaWZlc3QsIE1hbmlmZXN0RmVlZGJhY2tUeXBlLCBJTWFuaWZlc3REYXRhQXBwbGljYXRpb24sIElNYW5pZmVzdERhdGFUZWxlbWV0cnksIElNYW5pZmVzdERhdGFXZWIgfVxyXG5cdGZyb20gXCIuL0ZpbGVzL01hbmlmZXN0XCI7XHJcblxyXG5pbXBvcnQgeyBBcGkgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlXCI7XHJcbmltcG9ydCB7IEFnZUdyb3VwLCBBdXRoZW50aWNhdGlvblR5cGUgfSBmcm9tIFwiLi4vQ29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uXCI7XHJcblxyXG5leHBvcnQgeyBJTWFuaWZlc3REYXRhQXBwbGljYXRpb24sIElNYW5pZmVzdERhdGFUZWxlbWV0cnksIElNYW5pZmVzdERhdGFXZWIgfSBmcm9tIFwiLi9GaWxlcy9NYW5pZmVzdFwiXHJcblxyXG5leHBvcnQgY2xhc3MgVHJhbnNwb3J0ZXIgaW1wbGVtZW50cyBBcGkuSVRyYW5zcG9ydGVyIHtcclxuXHRwcml2YXRlIG1hbmlmZXN0OiBNYW5pZmVzdDtcclxuXHRwcml2YXRlIHNjcmVlbnNob3Q6IFNjcmVlbnNob3Q7XHJcblx0cHJpdmF0ZSBlbnZpcm9ubWVudDogQ29uc3RhbnRzLkVudmlyb25tZW50O1xyXG5cdHByaXZhdGUgY2xpZW50RmVlZGJhY2tJZDogc3RyaW5nO1xyXG5cclxuXHRwdWJsaWMgY29uc3RydWN0b3IoZW52aXJvbm1lbnQ6IENvbnN0YW50cy5FbnZpcm9ubWVudCwgbWFuaWZlc3RUeXBlOiBzdHJpbmcsIGFwcElkOiBudW1iZXIsIHR5cGU6IE1hbmlmZXN0RmVlZGJhY2tUeXBlLFxyXG5cdFx0YXBwbGljYXRpb25Hcm91cDogSU1hbmlmZXN0RGF0YUFwcGxpY2F0aW9uLCB0ZWxlbWV0cnlHcm91cDogSU1hbmlmZXN0RGF0YVRlbGVtZXRyeSwgd2ViR3JvdXA6IElNYW5pZmVzdERhdGFXZWIpIHtcclxuXHJcblx0XHR0aGlzLmNsaWVudEZlZWRiYWNrSWQgPSBVdGlscy5ndWlkKCk7XHJcblx0XHR0aGlzLm1hbmlmZXN0ID0gbmV3IE1hbmlmZXN0KG1hbmlmZXN0VHlwZSwgYXBwSWQsIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgdHlwZSxcclxuXHRcdFx0dGhpcy5jbGllbnRGZWVkYmFja0lkLCB7IC4uLmFwcGxpY2F0aW9uR3JvdXAgfSwgeyAuLi50ZWxlbWV0cnlHcm91cCB9LCB7IC4uLndlYkdyb3VwIH0sXHJcblx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5yZXRlbnRpb25EdXJhdGlvbkRheXMpO1xyXG5cdFx0dGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xyXG5cclxuXHRcdHRoaXMubWFuaWZlc3Quc2V0Q29tcGxpYW5jZUluZm9ybWF0aW9uKEF1dGhlbnRpY2F0aW9uVHlwZVsoQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpPy5hdXRoZW50aWNhdGlvblR5cGUpID8/XHJcblx0XHRcdEF1dGhlbnRpY2F0aW9uVHlwZS5VbmF1dGhlbnRpY2F0ZWRdLFxyXG5cdFx0XHRBZ2VHcm91cFsoQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpPy5hZ2VHcm91cCkgPz8gQWdlR3JvdXAuVW5kZWZpbmVkXSxcclxuXHRcdFx0dGhpcy5vY3BzRW51bVRvU3RyaW5nKENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0SW5BcHBGZWVkYmFja0luaXRPcHRpb25zKCk/LnNlbmRGZWVkYmFja1BvbGljeVZhbHVlKSxcclxuXHRcdFx0dGhpcy5vY3BzQm9vbGVhblRvU3RyaW5nKENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlSW5pdE9wdGlvbnMoKT8uc3VydmV5RW5hYmxlZCksXHJcblx0XHRcdHRoaXMub2Nwc0VudW1Ub1N0cmluZyhDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCk/LnNjcmVlbnNob3RQb2xpY3lWYWx1ZSksXHJcblx0XHRcdHRoaXMub2Nwc0VudW1Ub1N0cmluZyhDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCk/LmVtYWlsUG9saWN5VmFsdWUpKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXRDbGllbnRGZWVkYmFja0lkKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5jbGllbnRGZWVkYmFja0lkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldEV4dGVuZGVkTWFuaWZlc3REYXRhKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5tYW5pZmVzdC5nZXRFeHRlbmRlZE1hbmlmZXN0RGF0YSgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldENvbW1lbnQoY29tbWVudDogc3RyaW5nKSB7XHJcblx0XHR0aGlzLm1hbmlmZXN0LnNldENvbW1lbnQoY29tbWVudCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc2V0RW1haWwoZW1haWw6IHN0cmluZykge1xyXG5cdFx0dGhpcy5tYW5pZmVzdC5zZXRFbWFpbChlbWFpbCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc2V0Q2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZykge1xyXG5cdFx0dGhpcy5tYW5pZmVzdC5zZXRDYXRlZ29yeShjYXRlZ29yeSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc2V0QXBwRGF0YShhcHBEYXRhOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMubWFuaWZlc3Quc2V0QXBwRGF0YShhcHBEYXRhKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRFeHRlbmRlZE1hbmlmZXN0RGF0YShleHRlbmRlZE1hbmlmZXN0RGF0YTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLm1hbmlmZXN0LnNldEV4dGVuZGVkTWFuaWZlc3REYXRhKGV4dGVuZGVkTWFuaWZlc3REYXRhKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRTY3JlZW5zaG90KHNjcmVlbnNob3Q6IEhUTUxDYW52YXNFbGVtZW50KSB7XHJcblx0XHR0aGlzLnNjcmVlbnNob3QgPSBuZXcgU2NyZWVuc2hvdChzY3JlZW5zaG90KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRDbGllbnRGZWVkYmFja0lkKGNsaWVudEZlZWRiYWNrSWQ6IHN0cmluZykge1xyXG5cdFx0dGhpcy5tYW5pZmVzdC5zZXRDbGllbnRGZWVkYmFja0lkKGNsaWVudEZlZWRiYWNrSWQpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldE1hbmlmZXN0KCk6IE1hbmlmZXN0IHtcclxuXHRcdHJldHVybiB0aGlzLm1hbmlmZXN0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IGZyZWVmb3JtIGN1c3RvbSB2YWx1ZXMgaW4gbWFuaWZlc3QuIFRocm93cyBpZiB2YWx1ZXMgYXJlIGFscmVhZHkgc2V0LlxyXG5cdCAqIEBwYXJhbSB2YWx1ZXMgdGhlIHZhbHVlcyBhcyBhIEpTIG9iamVjdFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZXRNYW5pZmVzdFZhbHVlcyh2YWx1ZXM6IG9iamVjdCkge1xyXG5cdFx0dGhpcy5tYW5pZmVzdC5zZXRWYWx1ZXModmFsdWVzKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN1Ym1pdCB0aGUgcGF5bG9hZFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdWJtaXQoKTogUHJvbWlzZTxhbnk+IHtcclxuXHRcdGlmICghQ29uZmlndXJhdGlvbi5nZXQoKS5pc0ZlZWRiYWNrU3VydmV5RW5hYmxlZEJ5QUFEQygpKSB7XHJcblx0XHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoXHJcblx0XHRcdFx0TG9nZ2luZy5FdmVudElkcy5TaGFyZWQuVXBsb2FkLlByZXZlbnRlZC5WQUxVRSxcclxuXHRcdFx0XHRMb2dnaW5nLkxvZ0xldmVsLkVycm9yLFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdERhdGE6IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdFx0YWdlR3JvdXA6IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5hZ2VHcm91cCxcclxuXHRcdFx0XHRcdFx0YXV0aGVudGljYXRpb25UeXBlOiBDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkuYXV0aGVudGljYXRpb25UeXBlLFxyXG5cdFx0XHRcdFx0fSksXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgbWFuaWZlc3RDb250ZW50OiBCbG9iID0gdGhpcy5tYW5pZmVzdC5nZXRDb250ZW50KCk7XHJcblx0XHRsZXQgc2NyZWVuc2hvdENvbnRlbnQ6IEJsb2IgPSB1bmRlZmluZWQ7XHJcblx0XHRjb25zdCBjbGllbnRGZWVkYmFja0lkOiBzdHJpbmcgPSB0aGlzLmNsaWVudEZlZWRiYWNrSWQ7XHJcblxyXG5cdFx0aWYgKHRoaXMuc2NyZWVuc2hvdCkge1xyXG5cdFx0XHRzY3JlZW5zaG90Q29udGVudCA9IHRoaXMuc2NyZWVuc2hvdC5nZXRDb250ZW50KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFBldHJvbC5zZW5kKHRoaXMuZW52aXJvbm1lbnQgPT09IENvbnN0YW50cy5FbnZpcm9ubWVudC5Qcm9kdWN0aW9uLCBtYW5pZmVzdENvbnRlbnQsIHNjcmVlbnNob3RDb250ZW50KVxyXG5cdFx0XHQuY2F0Y2goXHJcblx0XHRcdFx0ZnVuY3Rpb24gb25SZWplY3RlZChlcnI6IEVycm9yKSB7XHJcblx0XHRcdFx0XHRDb25maWd1cmF0aW9uLmdldCgpLnNldEZlZWRiYWNrU3VibWl0dGVkKGZhbHNlKTtcclxuXHRcdFx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5vbkVycm9yKFwiUGF5bG9hZCBzdWJtaXNzaW9uIGZhaWxlZDogXCIgKyBlcnIubWVzc2FnZSArXHJcblx0XHRcdFx0XHRcdFwiLiBDbGllbnRGZWVkYmFja0lkOiBcIiArIGNsaWVudEZlZWRiYWNrSWQpO1xyXG5cdFx0XHRcdFx0TG9nZ2luZy5nZXRMb2dnZXIoKS5sb2dFdmVudChMb2dnaW5nLkV2ZW50SWRzLlNoYXJlZC5VcGxvYWQuRmFpbGVkLlZBTFVFLFxyXG5cdFx0XHRcdFx0XHRMb2dnaW5nLkxvZ0xldmVsLkVycm9yLCB7IEVycm9yTWVzc2FnZTogZXJyLm1lc3NhZ2UsIENsaWVudEZlZWRiYWNrSWQ6IGNsaWVudEZlZWRiYWNrSWQgfSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBvY3BzQm9vbGVhblRvU3RyaW5nKHBvbGljeVZhbHVlPzogYm9vbGVhbikge1xyXG5cdFx0aWYgKHBvbGljeVZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmV0dXJuIFwiTm90IENvbmZpZ3VyZWRcIjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocG9saWN5VmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuIFwiRW5hYmxlZFwiO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBcIkRpc2FibGVkXCI7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG9jcHNFbnVtVG9TdHJpbmcocG9saWN5VmFsdWU/OiBDb25zdGFudHMuT0NQU1ZhbHVlcykge1xyXG5cdFx0aWYgKCFwb2xpY3lWYWx1ZSkge1xyXG5cdFx0XHRyZXR1cm4gXCJOb3QgQ29uZmlndXJlZFwiO1xyXG5cdFx0fVxyXG5cdFx0c3dpdGNoIChwb2xpY3lWYWx1ZSkge1xyXG5cdFx0XHRjYXNlIENvbnN0YW50cy5PQ1BTVmFsdWVzLkRpc2FibGVkOlxyXG5cdFx0XHRcdHJldHVybiBcIkRpc2FibGVkXCI7XHJcblx0XHRcdGNhc2UgQ29uc3RhbnRzLk9DUFNWYWx1ZXMuRW5hYmxlZDpcclxuXHRcdFx0XHRyZXR1cm4gXCJFbmFibGVkXCI7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIFwiTm90IENvbmZpZ3VyZWRcIjtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/Transport/Transport.ts\n')},"./scripts/app/UI/BellyBand/BellyBand.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createMulti", function() { return createMulti; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createSingle", function() { return createSingle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dismiss", function() { return dismiss; });\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../Constants */ "./scripts/app/Constants.ts");\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _Events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Events */ "./scripts/app/UI/BellyBand/Events.ts");\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Layout */ "./scripts/app/UI/BellyBand/Layout.ts");\n/* harmony import */ var _Renderer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../Renderer */ "./scripts/app/UI/Renderer.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../Utils */ "./scripts/app/UI/Utils.ts");\n/* harmony import */ var _WindowProperties__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../../WindowProperties */ "./scripts/app/WindowProperties.ts");\n/* harmony import */ var _FormTemplates_BasicFormTemplate__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./FormTemplates/BasicFormTemplate */ "./scripts/app/UI/BellyBand/FormTemplates/BasicFormTemplate.ts");\n/* harmony import */ var _PanelTemplates_ThanksPanelTemplate__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./PanelTemplates/ThanksPanelTemplate */ "./scripts/app/UI/BellyBand/PanelTemplates/ThanksPanelTemplate.ts");\n/* harmony import */ var _FormTemplates_FeedbackPortalIdeaTemplate__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./FormTemplates/FeedbackPortalIdeaTemplate */ "./scripts/app/UI/BellyBand/FormTemplates/FeedbackPortalIdeaTemplate.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./../../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/**\r\n * BellyBand.ts\r\n *\r\n * Module for the BellyBand UI\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * UI initialization for multi, including creating all feedback related HTML elements and setting\r\n * initial visibility of elements\r\n */\r\nfunction createMulti(onClose) {\r\n    // Create the panelType -> IPanelTemplate mapping\r\n    var panelTemplates = {};\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_10__["get"]().getInAppFeedbackInitOptions().isShowThanks) {\r\n        panelTemplates[0 /* Thanks */] = _PanelTemplates_ThanksPanelTemplate__WEBPACK_IMPORTED_MODULE_8__;\r\n    }\r\n    // Create the feedbackType -> IFormTemplate mapping\r\n    var formTemplates = {};\r\n    var transitionEnabled = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_10__["get"]().getInAppFeedbackInitOptions().transitionEnabled;\r\n    formTemplates[_Constants__WEBPACK_IMPORTED_MODULE_0__["FeedbackType"].Smile] = _FormTemplates_BasicFormTemplate__WEBPACK_IMPORTED_MODULE_7__;\r\n    formTemplates[_Constants__WEBPACK_IMPORTED_MODULE_0__["FeedbackType"].Frown] = _FormTemplates_BasicFormTemplate__WEBPACK_IMPORTED_MODULE_7__;\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_10__["get"]().getInAppFeedbackInitOptions().feedbackForumUrl !== undefined) {\r\n        formTemplates[_Constants__WEBPACK_IMPORTED_MODULE_0__["FeedbackType"].IdeaRedirect] = _FormTemplates_FeedbackPortalIdeaTemplate__WEBPACK_IMPORTED_MODULE_9__;\r\n    }\r\n    else {\r\n        formTemplates[_Constants__WEBPACK_IMPORTED_MODULE_0__["FeedbackType"].Idea] = _FormTemplates_BasicFormTemplate__WEBPACK_IMPORTED_MODULE_7__;\r\n    }\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_10__["get"]().getInAppFeedbackInitOptions().bugForm) {\r\n        formTemplates[_Constants__WEBPACK_IMPORTED_MODULE_0__["FeedbackType"].Bug] = _FormTemplates_BasicFormTemplate__WEBPACK_IMPORTED_MODULE_7__;\r\n    }\r\n    create(_Renderer__WEBPACK_IMPORTED_MODULE_4__["elementFromJson"](_Layout__WEBPACK_IMPORTED_MODULE_3__["generateMulti"](formTemplates, panelTemplates)));\r\n    var useNarrowScreenLayout = _WindowProperties__WEBPACK_IMPORTED_MODULE_6__["isNarrow"]();\r\n    _Events__WEBPACK_IMPORTED_MODULE_2__["registerMulti"](formTemplates, panelTemplates, useNarrowScreenLayout, transitionEnabled, function (submitted) {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_5__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverlayBackground, false);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_5__["deleteElementById"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverlayBackground);\r\n        _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_10__["get"]().getInAppFeedbackInitOptions().onDismiss(submitted);\r\n        onClose();\r\n    });\r\n    // If the screen size is narrow, add the Narrow class to the outermost div so that \r\n    // the CSS used corresponds to the small screen UI\r\n    if (useNarrowScreenLayout) {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_5__["addClassById"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverlayBackground, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].NarrowLayout);\r\n    }\r\n}\r\n/**\r\n * UI initialization for single, including creating all feedback related HTML elements and setting\r\n * initial visibility of elements\r\n * @return {void}\r\n */\r\nfunction createSingle(onClose, feedbackType) {\r\n    // Create the panelType -> IPanelTemplate mapping\r\n    var panelTemplates = {};\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_10__["get"]().getInAppFeedbackInitOptions().isShowThanks) {\r\n        panelTemplates[0 /* Thanks */] = _PanelTemplates_ThanksPanelTemplate__WEBPACK_IMPORTED_MODULE_8__;\r\n    }\r\n    create(_Renderer__WEBPACK_IMPORTED_MODULE_4__["elementFromJson"](_Layout__WEBPACK_IMPORTED_MODULE_3__["generateSingle"](panelTemplates)));\r\n    _Events__WEBPACK_IMPORTED_MODULE_2__["registerSingle"](feedbackType, panelTemplates, function (submitted) {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_5__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverlayBackground, false);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_5__["deleteElementById"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverlayBackground);\r\n        _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_10__["get"]().getInAppFeedbackInitOptions().onDismiss(submitted);\r\n        onClose();\r\n    });\r\n    _Utils__WEBPACK_IMPORTED_MODULE_5__["addClassById"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverlayBackground, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].SingleLayout);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_5__["ScreenshotPreviewByCheckbox"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].SingleFormScreenshotCheckbox, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].SingleFormScreenshotPreview);\r\n}\r\n/**\r\n * Attach the UI element to the DOM.\r\n * @param userInterface the UI element\r\n */\r\nfunction create(userInterface) {\r\n    document.body.insertBefore(userInterface, document.body.firstChild);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_5__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverlayBackground, true);\r\n    if (_Utils__WEBPACK_IMPORTED_MODULE_5__["getInternetExplorerVersion"]() > 9 || _Utils__WEBPACK_IMPORTED_MODULE_5__["getInternetExplorerVersion"]() === -1) {\r\n        // Show the main feedback UI after a certain time to wait for the CSS keyframes animation to finish if \r\n        // the browser is IE10 and above or non-IE\r\n        setTimeout(onMainContainerRender, 900);\r\n    }\r\n    else {\r\n        onMainContainerRender();\r\n    }\r\n}\r\n/**\r\n * Code to run when the main container animation has completed.\r\n */\r\nfunction onMainContainerRender() {\r\n    // Show the MainContentHolder inside the MainContainer\r\n    _Utils__WEBPACK_IMPORTED_MODULE_5__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].MainContentHolder, true);\r\n    if (document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallSmileAnchor)) {\r\n        // Multi feedback\r\n        document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallSmileAnchor).focus();\r\n        // If screenshot checkbox is selected, display the preview\r\n        _Utils__WEBPACK_IMPORTED_MODULE_5__["ScreenshotPreviewByCheckbox"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].BasicFormScreenshotCheckbox, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].BasicFormScreenshotPreview);\r\n    }\r\n    else if (document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].SingleFormComment)) {\r\n        // Single feedback\r\n        document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].SingleFormComment).focus();\r\n        // If screenshot checkbox is selected, display the preview\r\n        _Utils__WEBPACK_IMPORTED_MODULE_5__["ScreenshotPreviewByCheckbox"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].SingleFormScreenshotCheckbox, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].SingleFormScreenshotPreview);\r\n    }\r\n}\r\n/**\r\n * UI dismiss. Delete all feedback related HTML elements\r\n * @return {void}\r\n */\r\nfunction dismiss() {\r\n    return;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9CZWxseUJhbmQvQmVsbHlCYW5kLnRzP2FjNWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7R0FJRztBQUV5RDtBQUNaO0FBQ2I7QUFDQTtBQUNPO0FBQ047QUFDeUI7QUFFVTtBQUNLO0FBQ2E7QUFDcEI7QUFHckU7OztHQUdHO0FBQ0ksU0FBUyxXQUFXLENBQUMsT0FBbUI7SUFDOUMsaURBQWlEO0lBQ2pELElBQUksY0FBYyxHQUFzQyxFQUFFLENBQUM7SUFDM0QsSUFBSSxpRUFBaUIsRUFBRSxDQUFDLDJCQUEyQixFQUFFLENBQUMsWUFBWSxFQUFFO1FBQ25FLGNBQWMsZ0JBQWtCLEdBQUcsZ0VBQW1CLENBQUM7S0FDdkQ7SUFFRCxtREFBbUQ7SUFDbkQsSUFBSSxhQUFhLEdBQW1DLEVBQUUsQ0FBQztJQUN2RCxJQUFJLGlCQUFpQixHQUFZLGlFQUFpQixFQUFFLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztJQUNyRyxhQUFhLENBQUMsdURBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyw2REFBaUIsQ0FBQztJQUN0RCxhQUFhLENBQUMsdURBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyw2REFBaUIsQ0FBQztJQUV0RCxJQUFJLGlFQUFpQixFQUFFLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7UUFDckYsYUFBYSxDQUFDLHVEQUFZLENBQUMsWUFBWSxDQUFDLEdBQUcsc0VBQTBCLENBQUM7S0FDdEU7U0FBTTtRQUNOLGFBQWEsQ0FBQyx1REFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLDZEQUFpQixDQUFDO0tBQ3JEO0lBRUQsSUFBSSxpRUFBaUIsRUFBRSxDQUFDLDJCQUEyQixFQUFFLENBQUMsT0FBTyxFQUFFO1FB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QUFDLGdEQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUV4RCwwREFBMEQ7UUFDMUQsa0VBQWlDLENBQUMsZ0RBQUcsQ0FBQywyQkFBMkIsRUFBRSxnREFBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7S0FDbkc7U0FBTSxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0RBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1FBQzFELGtCQUFrQjtRQUNsQixRQUFRLENBQUMsY0FBYyxDQUFDLGdEQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUV2RCwwREFBMEQ7UUFDMUQsa0VBQWlDLENBQUMsZ0RBQUcsQ0FBQyw0QkFBNEIsRUFBRSxnREFBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7S0FDckc7QUFDRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0ksU0FBUyxPQUFPO0lBQ3RCLE9BQU87QUFDUixDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVUkvQmVsbHlCYW5kL0JlbGx5QmFuZC50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBCZWxseUJhbmQudHNcclxuICpcclxuICogTW9kdWxlIGZvciB0aGUgQmVsbHlCYW5kIFVJXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgRmVlZGJhY2tUeXBlLCBQYW5lbFR5cGUgfSBmcm9tIFwiLi8uLi8uLi9Db25zdGFudHNcIjtcclxuaW1wb3J0IHsgQ2xhc3NlcywgSURzIH0gZnJvbSBcIi4vLi4vVWlDb25zdGFudHNcIjtcclxuaW1wb3J0ICogYXMgRXZlbnRzIGZyb20gXCIuL0V2ZW50c1wiO1xyXG5pbXBvcnQgKiBhcyBMYXlvdXQgZnJvbSBcIi4vTGF5b3V0XCI7XHJcbmltcG9ydCAqIGFzIFJlbmRlcmVyIGZyb20gXCIuLy4uL1JlbmRlcmVyXCI7XHJcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gXCIuLy4uL1V0aWxzXCI7XHJcbmltcG9ydCAqIGFzIFdpbmRvd1Byb3BlcnRpZXMgZnJvbSBcIi4vLi4vLi4vV2luZG93UHJvcGVydGllc1wiO1xyXG5pbXBvcnQgeyBJRm9ybVRlbXBsYXRlIH0gZnJvbSBcIi4vRm9ybVRlbXBsYXRlcy9JRm9ybVRlbXBsYXRlXCI7XHJcbmltcG9ydCAqIGFzIEJhc2ljRm9ybVRlbXBsYXRlIGZyb20gXCIuL0Zvcm1UZW1wbGF0ZXMvQmFzaWNGb3JtVGVtcGxhdGVcIjtcclxuaW1wb3J0ICogYXMgVGhhbmtzUGFuZWxUZW1wbGF0ZSBmcm9tIFwiLi9QYW5lbFRlbXBsYXRlcy9UaGFua3NQYW5lbFRlbXBsYXRlXCI7XHJcbmltcG9ydCAqIGFzIEZlZWRiYWNrUG9ydGFsSWRlYVRlbXBsYXRlIGZyb20gXCIuL0Zvcm1UZW1wbGF0ZXMvRmVlZGJhY2tQb3J0YWxJZGVhVGVtcGxhdGVcIjtcclxuaW1wb3J0ICogYXMgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi8uLi8uLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHsgSVBhbmVsVGVtcGxhdGUgfSBmcm9tIFwiLi9QYW5lbFRlbXBsYXRlcy9JUGFuZWxUZW1wbGF0ZVwiO1xyXG5cclxuLyoqXHJcbiAqIFVJIGluaXRpYWxpemF0aW9uIGZvciBtdWx0aSwgaW5jbHVkaW5nIGNyZWF0aW5nIGFsbCBmZWVkYmFjayByZWxhdGVkIEhUTUwgZWxlbWVudHMgYW5kIHNldHRpbmdcclxuICogaW5pdGlhbCB2aXNpYmlsaXR5IG9mIGVsZW1lbnRzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXVsdGkob25DbG9zZTogKCkgPT4gdm9pZCkge1xyXG5cdC8vIENyZWF0ZSB0aGUgcGFuZWxUeXBlIC0+IElQYW5lbFRlbXBsYXRlIG1hcHBpbmdcclxuXHRsZXQgcGFuZWxUZW1wbGF0ZXM6IHsgW2tleTogbnVtYmVyXTogSVBhbmVsVGVtcGxhdGUgfSA9IHt9O1xyXG5cdGlmIChDb25maWd1cmF0aW9uLmdldCgpLmdldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucygpLmlzU2hvd1RoYW5rcykge1xyXG5cdFx0cGFuZWxUZW1wbGF0ZXNbUGFuZWxUeXBlLlRoYW5rc10gPSBUaGFua3NQYW5lbFRlbXBsYXRlO1xyXG5cdH1cclxuXHJcblx0Ly8gQ3JlYXRlIHRoZSBmZWVkYmFja1R5cGUgLT4gSUZvcm1UZW1wbGF0ZSBtYXBwaW5nXHJcblx0bGV0IGZvcm1UZW1wbGF0ZXM6IHtba2V5OiBudW1iZXJdOiBJRm9ybVRlbXBsYXRlfSA9IHt9O1xyXG5cdGxldCB0cmFuc2l0aW9uRW5hYmxlZDogYm9vbGVhbiA9IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0SW5BcHBGZWVkYmFja0luaXRPcHRpb25zKCkudHJhbnNpdGlvbkVuYWJsZWQ7XHJcblx0Zm9ybVRlbXBsYXRlc1tGZWVkYmFja1R5cGUuU21pbGVdID0gQmFzaWNGb3JtVGVtcGxhdGU7XHJcblx0Zm9ybVRlbXBsYXRlc1tGZWVkYmFja1R5cGUuRnJvd25dID0gQmFzaWNGb3JtVGVtcGxhdGU7XHJcblxyXG5cdGlmIChDb25maWd1cmF0aW9uLmdldCgpLmdldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucygpLmZlZWRiYWNrRm9ydW1VcmwgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0Zm9ybVRlbXBsYXRlc1tGZWVkYmFja1R5cGUuSWRlYVJlZGlyZWN0XSA9IEZlZWRiYWNrUG9ydGFsSWRlYVRlbXBsYXRlO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRmb3JtVGVtcGxhdGVzW0ZlZWRiYWNrVHlwZS5JZGVhXSA9IEJhc2ljRm9ybVRlbXBsYXRlO1xyXG5cdH1cclxuXHJcblx0aWYgKENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0SW5BcHBGZWVkYmFja0luaXRPcHRpb25zKCkuYnVnRm9ybSkge1xyXG5cdFx0Zm9ybVRlbXBsYXRlc1tGZWVkYmFja1R5cGUuQnVnXSA9IEJhc2ljRm9ybVRlbXBsYXRlO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlKFJlbmRlcmVyLmVsZW1lbnRGcm9tSnNvbihMYXlvdXQuZ2VuZXJhdGVNdWx0aShmb3JtVGVtcGxhdGVzLCBwYW5lbFRlbXBsYXRlcykpKTtcclxuXHJcblx0bGV0IHVzZU5hcnJvd1NjcmVlbkxheW91dCA9IFdpbmRvd1Byb3BlcnRpZXMuaXNOYXJyb3coKTtcclxuXHJcblx0RXZlbnRzLnJlZ2lzdGVyTXVsdGkoXHJcblx0XHRmb3JtVGVtcGxhdGVzLFxyXG5cdFx0cGFuZWxUZW1wbGF0ZXMsXHJcblx0XHR1c2VOYXJyb3dTY3JlZW5MYXlvdXQsXHJcblx0XHR0cmFuc2l0aW9uRW5hYmxlZCxcclxuXHRcdGZ1bmN0aW9uIChzdWJtaXR0ZWQ6IGJvb2xlYW4pIHtcclxuXHRcdFx0VXRpbHMuc2V0RWxlbWVudFZpc2liaWxpdHkoSURzLk92ZXJsYXlCYWNrZ3JvdW5kLCBmYWxzZSk7XHJcblx0XHRcdFV0aWxzLmRlbGV0ZUVsZW1lbnRCeUlkKElEcy5PdmVybGF5QmFja2dyb3VuZCk7XHJcblx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0SW5BcHBGZWVkYmFja0luaXRPcHRpb25zKCkub25EaXNtaXNzKHN1Ym1pdHRlZCk7XHJcblx0XHRcdG9uQ2xvc2UoKTtcclxuXHRcdH1cclxuXHQpO1xyXG5cclxuXHQvLyBJZiB0aGUgc2NyZWVuIHNpemUgaXMgbmFycm93LCBhZGQgdGhlIE5hcnJvdyBjbGFzcyB0byB0aGUgb3V0ZXJtb3N0IGRpdiBzbyB0aGF0IFxyXG5cdC8vIHRoZSBDU1MgdXNlZCBjb3JyZXNwb25kcyB0byB0aGUgc21hbGwgc2NyZWVuIFVJXHJcblx0aWYgKHVzZU5hcnJvd1NjcmVlbkxheW91dCkge1xyXG5cdFx0VXRpbHMuYWRkQ2xhc3NCeUlkKElEcy5PdmVybGF5QmFja2dyb3VuZCwgQ2xhc3Nlcy5OYXJyb3dMYXlvdXQpO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFVJIGluaXRpYWxpemF0aW9uIGZvciBzaW5nbGUsIGluY2x1ZGluZyBjcmVhdGluZyBhbGwgZmVlZGJhY2sgcmVsYXRlZCBIVE1MIGVsZW1lbnRzIGFuZCBzZXR0aW5nXHJcbiAqIGluaXRpYWwgdmlzaWJpbGl0eSBvZiBlbGVtZW50c1xyXG4gKiBAcmV0dXJuIHt2b2lkfVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpbmdsZShvbkNsb3NlOiAoKSA9PiB2b2lkLCBmZWVkYmFja1R5cGU6IEZlZWRiYWNrVHlwZSkge1xyXG5cdC8vIENyZWF0ZSB0aGUgcGFuZWxUeXBlIC0+IElQYW5lbFRlbXBsYXRlIG1hcHBpbmdcclxuXHRsZXQgcGFuZWxUZW1wbGF0ZXM6IHsgW2tleTogbnVtYmVyXTogSVBhbmVsVGVtcGxhdGUgfSA9IHt9O1xyXG5cdGlmIChDb25maWd1cmF0aW9uLmdldCgpLmdldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucygpLmlzU2hvd1RoYW5rcykge1xyXG5cdFx0cGFuZWxUZW1wbGF0ZXNbUGFuZWxUeXBlLlRoYW5rc10gPSBUaGFua3NQYW5lbFRlbXBsYXRlO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlKFJlbmRlcmVyLmVsZW1lbnRGcm9tSnNvbihMYXlvdXQuZ2VuZXJhdGVTaW5nbGUocGFuZWxUZW1wbGF0ZXMpKSk7XHJcblxyXG5cdEV2ZW50cy5yZWdpc3RlclNpbmdsZShcclxuXHRcdGZlZWRiYWNrVHlwZSxcclxuXHRcdHBhbmVsVGVtcGxhdGVzLFxyXG5cdFx0ZnVuY3Rpb24gKHN1Ym1pdHRlZDogYm9vbGVhbikge1xyXG5cdFx0XHRVdGlscy5zZXRFbGVtZW50VmlzaWJpbGl0eShJRHMuT3ZlcmxheUJhY2tncm91bmQsIGZhbHNlKTtcclxuXHRcdFx0VXRpbHMuZGVsZXRlRWxlbWVudEJ5SWQoSURzLk92ZXJsYXlCYWNrZ3JvdW5kKTtcclxuXHRcdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRJbkFwcEZlZWRiYWNrSW5pdE9wdGlvbnMoKS5vbkRpc21pc3Moc3VibWl0dGVkKTtcclxuXHRcdFx0b25DbG9zZSgpO1xyXG5cdFx0fVxyXG5cdCk7XHJcblxyXG5cdFV0aWxzLmFkZENsYXNzQnlJZChJRHMuT3ZlcmxheUJhY2tncm91bmQsIENsYXNzZXMuU2luZ2xlTGF5b3V0KTtcclxuXHRVdGlscy5TY3JlZW5zaG90UHJldmlld0J5Q2hlY2tib3goSURzLlNpbmdsZUZvcm1TY3JlZW5zaG90Q2hlY2tib3gsIElEcy5TaW5nbGVGb3JtU2NyZWVuc2hvdFByZXZpZXcpO1xyXG59XHJcblxyXG4vKipcclxuICogQXR0YWNoIHRoZSBVSSBlbGVtZW50IHRvIHRoZSBET00uXHJcbiAqIEBwYXJhbSB1c2VySW50ZXJmYWNlIHRoZSBVSSBlbGVtZW50XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGUodXNlckludGVyZmFjZTogRWxlbWVudCkge1xyXG5cdGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHVzZXJJbnRlcmZhY2UsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7XHJcblxyXG5cdFV0aWxzLnNldEVsZW1lbnRWaXNpYmlsaXR5KElEcy5PdmVybGF5QmFja2dyb3VuZCwgdHJ1ZSk7XHJcblxyXG5cdGlmIChVdGlscy5nZXRJbnRlcm5ldEV4cGxvcmVyVmVyc2lvbigpID4gOSB8fCBVdGlscy5nZXRJbnRlcm5ldEV4cGxvcmVyVmVyc2lvbigpID09PSAtMSkge1xyXG5cdFx0Ly8gU2hvdyB0aGUgbWFpbiBmZWVkYmFjayBVSSBhZnRlciBhIGNlcnRhaW4gdGltZSB0byB3YWl0IGZvciB0aGUgQ1NTIGtleWZyYW1lcyBhbmltYXRpb24gdG8gZmluaXNoIGlmIFxyXG5cdFx0Ly8gdGhlIGJyb3dzZXIgaXMgSUUxMCBhbmQgYWJvdmUgb3Igbm9uLUlFXHJcblx0XHRzZXRUaW1lb3V0KG9uTWFpbkNvbnRhaW5lclJlbmRlciwgOTAwKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0b25NYWluQ29udGFpbmVyUmVuZGVyKCk7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogQ29kZSB0byBydW4gd2hlbiB0aGUgbWFpbiBjb250YWluZXIgYW5pbWF0aW9uIGhhcyBjb21wbGV0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBvbk1haW5Db250YWluZXJSZW5kZXIoKTogdm9pZCB7XHJcblx0Ly8gU2hvdyB0aGUgTWFpbkNvbnRlbnRIb2xkZXIgaW5zaWRlIHRoZSBNYWluQ29udGFpbmVyXHJcblx0VXRpbHMuc2V0RWxlbWVudFZpc2liaWxpdHkoSURzLk1haW5Db250ZW50SG9sZGVyLCB0cnVlKTtcclxuXHRpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLk92ZXJhbGxTbWlsZUFuY2hvcikpIHtcclxuXHRcdC8vIE11bHRpIGZlZWRiYWNrXHJcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRHMuT3ZlcmFsbFNtaWxlQW5jaG9yKS5mb2N1cygpO1xyXG5cclxuXHRcdC8vIElmIHNjcmVlbnNob3QgY2hlY2tib3ggaXMgc2VsZWN0ZWQsIGRpc3BsYXkgdGhlIHByZXZpZXdcclxuXHRcdFV0aWxzLlNjcmVlbnNob3RQcmV2aWV3QnlDaGVja2JveChJRHMuQmFzaWNGb3JtU2NyZWVuc2hvdENoZWNrYm94LCBJRHMuQmFzaWNGb3JtU2NyZWVuc2hvdFByZXZpZXcpO1xyXG5cdH0gZWxzZSBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLlNpbmdsZUZvcm1Db21tZW50KSkge1xyXG5cdFx0Ly8gU2luZ2xlIGZlZWRiYWNrXHJcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRHMuU2luZ2xlRm9ybUNvbW1lbnQpLmZvY3VzKCk7XHJcblxyXG5cdFx0Ly8gSWYgc2NyZWVuc2hvdCBjaGVja2JveCBpcyBzZWxlY3RlZCwgZGlzcGxheSB0aGUgcHJldmlld1xyXG5cdFx0VXRpbHMuU2NyZWVuc2hvdFByZXZpZXdCeUNoZWNrYm94KElEcy5TaW5nbGVGb3JtU2NyZWVuc2hvdENoZWNrYm94LCBJRHMuU2luZ2xlRm9ybVNjcmVlbnNob3RQcmV2aWV3KTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVSSBkaXNtaXNzLiBEZWxldGUgYWxsIGZlZWRiYWNrIHJlbGF0ZWQgSFRNTCBlbGVtZW50c1xyXG4gKiBAcmV0dXJuIHt2b2lkfVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRpc21pc3MoKTogdm9pZCB7XHJcblx0cmV0dXJuO1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/UI/BellyBand/BellyBand.ts\n')},"./scripts/app/UI/BellyBand/Events.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerSingle", function() { return registerSingle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerMulti", function() { return registerMulti; });\n/* harmony import */ var _Transport_Transport__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../Transport/Transport */ "./scripts/app/Transport/Transport.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../Constants */ "./scripts/app/Constants.ts");\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/* harmony import */ var _Screenshot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../Screenshot */ "./scripts/app/Screenshot.ts");\n/* harmony import */ var _SpinnerControl__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../SpinnerControl */ "./scripts/app/UI/SpinnerControl.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../Utils */ "./scripts/app/UI/Utils.ts");\n/* harmony import */ var _TabFocus__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./TabFocus */ "./scripts/app/UI/BellyBand/TabFocus.ts");\n/**\r\n * Events.ts\r\n *\r\n * A module for all Event handling.\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Whether to use narrow layout\r\n */\r\nvar useNarrowLayout = false;\r\n/**\r\n * Whether transition enabled or not\r\n */\r\nvar transitionEnabled = true;\r\n/**\r\n * Callback for when the feedback dialog is dismissed\r\n */\r\nvar onDismiss;\r\n/**\r\n * The Selected feedback type, undefined if none selected\r\n */\r\nvar selectedFeedbackType = undefined;\r\n/**\r\n * The Selected panel type, undefined if none selected\r\n */\r\nvar selectedPanelType = undefined;\r\n/**\r\n * feedbackType -> IFormTemplate mapping for multi BellyBand\r\n */\r\nvar formTemplates;\r\n/**\r\n * panelType -> IPanelTemplate mapping for multi BellyBand\r\n */\r\nvar panelTemplates;\r\nvar anchors = [_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallSmileAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallFrownAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallIdeaAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallBugAnchor];\r\nfunction setAriaSelectedAttributes(anchorID) {\r\n    var i;\r\n    for (i = 0; i < anchors.length; i++) {\r\n        if (anchors[i] === anchorID) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_7__["setAttributeOnHtmlElement"](anchors[i], _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeName"].AriaSelected, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeValue"].True);\r\n        }\r\n        else {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_7__["setAttributeOnHtmlElement"](anchors[i], _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeName"].AriaSelected, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeValue"].False);\r\n        }\r\n    }\r\n}\r\n/**\r\n * Dismiss all, including networking, UI, and events\r\n * @param submitted Was the control submitted (true), or cancelled (false)?\r\n */\r\nfunction dismissAll() {\r\n    unregister();\r\n    onDismiss(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFeedbackSubmitted());\r\n    _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().setFeedbackSubmitted(false);\r\n}\r\n/**\r\n * List of listeners and the ids they are attached to. This ensures all events are correctly unregistered.\r\n */\r\nvar listenersList = [];\r\nfunction addListener(id, event, listener) {\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["registerListener"](id, event, listener);\r\n    listenersList.push({ event: event, id: id, listener: listener });\r\n}\r\nfunction removeListeners() {\r\n    for (var _i = 0, listenersList_1 = listenersList; _i < listenersList_1.length; _i++) {\r\n        var listener = listenersList_1[_i];\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["unregisterListener"](listener.id, listener.event, listener.listener);\r\n    }\r\n    listenersList = [];\r\n}\r\n/**\r\n * Register events for single belly band\r\n */\r\nfunction registerSingle(feedbackType, PANELTEMPLATES, ON_DISMISS) {\r\n    if (ON_DISMISS === void 0) { ON_DISMISS = function (submitted) { return; }; }\r\n    selectedFeedbackType = feedbackType;\r\n    panelTemplates = PANELTEMPLATES;\r\n    // SingleFormTemplate events\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormSubmitButton, "click", submitButtonHandlerFactory(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormSubmitButton, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormSubmitButtonSpinner, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormComment, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormEmailInput, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormScreenshotCheckbox, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormScreenshotPreview, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormCategoriesDropdown));\r\n    // Screenshot checkbox click events\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormScreenshotCheckbox, "click", ScreenshotCheckboxClickHandler(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormScreenshotCheckbox, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormScreenshotPreview));\r\n    // Close button click event.\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].CloseButton, "click", function () { dismissAll(); });\r\n    // ThanksPanel events\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].ThanksPanelCloseButton, "click", function (event) { return CloseButton(event); });\r\n    // cancel button events\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormCancelButton, "click", CancelButtonHandler);\r\n    registerCommon(ON_DISMISS);\r\n}\r\n/**\r\n * Register events for multi belly band\r\n */\r\nfunction registerMulti(FORMTEMPLATES, PANELTEMPLATES, USE_NARROW_LAYOUT, TRANSITIONENABLED, ON_DISMISS) {\r\n    if (ON_DISMISS === void 0) { ON_DISMISS = function (submitted) { return; }; }\r\n    useNarrowLayout = USE_NARROW_LAYOUT;\r\n    formTemplates = FORMTEMPLATES;\r\n    panelTemplates = PANELTEMPLATES;\r\n    transitionEnabled = TRANSITIONENABLED;\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallSmileAnchor, "click", overallSmileHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallFrownAnchor, "click", overallFrownHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallIdeaAnchor, "click", overallIdeaHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallBugAnchor, "click", overallBugHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].CloseButton, "click", function () { dismissAll(); });\r\n    // BasicFormTemplate events\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormSubmitButton, "click", submitButtonHandlerFactory(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormSubmitButton, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormSubmitButtonSpinner, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormComment, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormEmailInput, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormScreenshotCheckbox, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormScreenshotPreview, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormCategoriesDropdown));\r\n    // Screenshot checkbox click events\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormScreenshotCheckbox, "click", ScreenshotCheckboxClickHandler(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormScreenshotCheckbox, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormScreenshotPreview));\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallFeedbackPortalIdeaAnchor, "click", overallFeedbackPortalIdeaHandler);\r\n    // ThanksPanel events\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].ThanksPanelCloseButton, "click", function (event) { return CloseButton(event); });\r\n    // cancel button events\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormCancelButton, "click", CancelButtonHandler);\r\n    registerCommon(ON_DISMISS);\r\n    if (!transitionEnabled) {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["addClassById"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MainContentHolder, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["Classes"].MarginLeft180px);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["addClassById"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].ColumnSeparatorDiv, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["Classes"].ShowRightBorder);\r\n    }\r\n}\r\nfunction registerCommon(ON_DISMISS) {\r\n    onDismiss = ON_DISMISS;\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["addEventListenerHelper"](window, "keyup", keyEventHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverlayBackground, "click", overlayBackgroundHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MainContainer, "click", mainContainerHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MainContainer, "keyup", tabKeyEventHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].PrivacyStatementLink, "click", privacyStatementLinkHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].EmailCheckBox, "click", emailCheckBoxHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormComment, "keyup", basicFormInputHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormComment, "keyup", singleFormInputHandler);\r\n    emailCheckBoxHandler(null); // call the checkbox handler to process the initial state\r\n}\r\n/**\r\n * Listener un-registration\r\n */\r\nfunction unregister() {\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["removeEventListenerHelper"](window, "keyup", keyEventHandler);\r\n    removeListeners();\r\n}\r\n/**\r\n * Tab key event handler\r\n * @param event The Event object\r\n */\r\nfunction tabKeyEventHandler(event) {\r\n    var keyCode = event.keyCode || event.which;\r\n    if (keyCode === _UiConstants__WEBPACK_IMPORTED_MODULE_3__["Keys"].Tab) {\r\n        if ((document.activeElement.id === _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].FirstTabbable && event.shiftKey) ||\r\n            (document.activeElement.id === _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].LastTabbable && !event.shiftKey)) {\r\n            event.stopPropagation();\r\n            _TabFocus__WEBPACK_IMPORTED_MODULE_8__["cycleTabFocus"](document.activeElement);\r\n        }\r\n    }\r\n}\r\n/**\r\n * Key event handler\r\n * @param event The Event object\r\n */\r\nfunction keyEventHandler(event) {\r\n    // dismiss feedback upon pressing the escape key\r\n    if (event.keyCode === _UiConstants__WEBPACK_IMPORTED_MODULE_3__["Keys"].Esc) {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        dismissAll();\r\n    }\r\n}\r\n/**\r\n * Overlay background event handler. Dismiss feedback upon clicking on the background area\r\n * @param event The Event object\r\n */\r\nfunction overlayBackgroundHandler(event) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    dismissAll();\r\n}\r\n/**\r\n * Main container event handler. When clicking on main container area, do not propagate the event to lower level.\r\n * @param event The Event object\r\n */\r\nfunction mainContainerHandler(event) {\r\n    event.stopPropagation();\r\n}\r\n/**\r\n * Privacy statement link handler. When clicking on the privacy statement link,\r\n * do not propagate the event to lower level.\r\n * @param event The Event object\r\n */\r\nfunction privacyStatementLinkHandler(event) {\r\n    event.stopPropagation();\r\n}\r\n/**\r\n * Overall button click handler\r\n * @param event The Event object\r\n * @param achorId The id of the anchor html element which was selected\r\n */\r\nfunction overallHandler(event, anchorId) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["replaceClassesById"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallSmileAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["Classes"].OverallAnchorActive);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["replaceClassesById"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallFrownAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["Classes"].OverallAnchorActive);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["replaceClassesById"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallIdeaAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["Classes"].OverallAnchorActive);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["replaceClassesById"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallBugAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["Classes"].OverallAnchorActive);\r\n    if (anchorId) {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["addClassById"](anchorId, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["Classes"].OverallAnchorActive);\r\n    }\r\n    _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].InApp.UI.Form.Shown.VALUE, 1 /* Critical */, { FeedbackType: selectedFeedbackType, PanelType: selectedPanelType });\r\n    if (typeof (selectedFeedbackType) !== "undefined") {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].LeftFormContainer, true);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, true);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].LeftPanelContainer, false);\r\n        var formTemplate = formTemplates[selectedFeedbackType];\r\n        mainContentHolderSlideLeft(formTemplate.containerId);\r\n        if (transitionEnabled) {\r\n            mainContentHolderSlideLeft(formTemplate.containerId);\r\n        }\r\n        formTemplate.onSelect(selectedFeedbackType);\r\n    }\r\n    if (typeof (selectedPanelType) !== "undefined") {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].LeftFormContainer, false);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, false);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].LeftPanelContainer, true);\r\n        for (var panelType in panelTemplates) {\r\n            if (panelTemplates.hasOwnProperty(panelType)) {\r\n                _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](panelTemplates[panelType].containerId, true);\r\n            }\r\n        }\r\n        var panelTemplate = panelTemplates[selectedPanelType];\r\n        panelTemplate.onSelect(selectedPanelType);\r\n    }\r\n}\r\n/**\r\n * Smile button event handler\r\n * @param event The Event object\r\n */\r\nfunction overallSmileHandler(event) {\r\n    selectedFeedbackType = _Constants__WEBPACK_IMPORTED_MODULE_2__["FeedbackType"].Smile;\r\n    selectedPanelType = undefined;\r\n    setAriaSelectedAttributes(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallSmileAnchor);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["setAttributeOnHtmlElement"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeName"].AriaExpanded, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeValue"].True);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["setAttributeOnHtmlElement"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeName"].AriaLabelledBy, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallSmileAnchor);\r\n    overallHandler(event, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallSmileAnchor);\r\n}\r\n/**\r\n * Frown button event handler\r\n * @param event The Event object\r\n */\r\nfunction overallFrownHandler(event) {\r\n    selectedFeedbackType = _Constants__WEBPACK_IMPORTED_MODULE_2__["FeedbackType"].Frown;\r\n    selectedPanelType = undefined;\r\n    setAriaSelectedAttributes(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallFrownAnchor);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["setAttributeOnHtmlElement"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeName"].AriaExpanded, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeValue"].True);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["setAttributeOnHtmlElement"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeName"].AriaLabelledBy, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallFrownAnchor);\r\n    overallHandler(event, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallFrownAnchor);\r\n}\r\n/**\r\n * Idea button event handler\r\n * @param event The Event object\r\n */\r\nfunction overallIdeaHandler(event) {\r\n    selectedFeedbackType = _Constants__WEBPACK_IMPORTED_MODULE_2__["FeedbackType"].Idea;\r\n    selectedPanelType = undefined;\r\n    setAriaSelectedAttributes(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallIdeaAnchor);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["setAttributeOnHtmlElement"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeName"].AriaExpanded, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeValue"].True);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["setAttributeOnHtmlElement"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeName"].AriaLabelledBy, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallIdeaAnchor);\r\n    overallHandler(event, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallIdeaAnchor);\r\n}\r\n/**\r\n * Bug button event handler\r\n * @param event The Event object\r\n */\r\nfunction overallBugHandler(event) {\r\n    selectedFeedbackType = _Constants__WEBPACK_IMPORTED_MODULE_2__["FeedbackType"].Bug;\r\n    selectedPanelType = undefined;\r\n    setAriaSelectedAttributes(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallBugAnchor);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["setAttributeOnHtmlElement"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeName"].AriaExpanded, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeValue"].True);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["setAttributeOnHtmlElement"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["AttributeName"].AriaLabelledBy, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallBugAnchor);\r\n    overallHandler(event, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].OverallBugAnchor);\r\n}\r\n/**\r\n * Thanks pane event handler\r\n * @param event The Event object\r\n */\r\nfunction overallThanksHandler(event) {\r\n    selectedFeedbackType = undefined;\r\n    selectedPanelType = 0 /* Thanks */;\r\n    SetVisibilityExceptFor(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].ThanksPanelContainer, false);\r\n    overallHandler(event, undefined);\r\n}\r\n/**\r\n * Sets visibility for all content panes except for specified.\r\n * @param except Pane not to set visibility for.\r\n * @param visible Visibility to be set\r\n */\r\nfunction SetVisibilityExceptFor(except, visible) {\r\n    _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].LeftFormContainer, visible);\r\n    var feedbackPanes = document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer).children;\r\n    for (var currentFeedbackPane = 0; currentFeedbackPane < feedbackPanes.length; currentFeedbackPane++) {\r\n        if (feedbackPanes[currentFeedbackPane].id !== except) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](feedbackPanes[currentFeedbackPane].id, visible);\r\n        }\r\n    }\r\n}\r\n/**\r\n * Main content holder slide left animation\r\n * @param {string} containerId The id of the container to be made visible\r\n * @return {void}\r\n */\r\nfunction mainContentHolderSlideLeft(containerId) {\r\n    for (var feedbackType in formTemplates) {\r\n        if (formTemplates.hasOwnProperty(feedbackType)) {\r\n            _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](formTemplates[feedbackType].containerId, false);\r\n        }\r\n    }\r\n    if (useNarrowLayout) {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].LeftFormContainer, false);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, true);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](containerId, true);\r\n    }\r\n    else {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["addClassById"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].ColumnSeparatorDiv, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["Classes"].ShowRightBorder);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, true);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](containerId, true);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["addClassById"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].LeftFormContainer, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["Classes"].SlideLeft);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["addClassById"](_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].MiddleFormContainer, _UiConstants__WEBPACK_IMPORTED_MODULE_3__["Classes"].SlideLeft);\r\n    }\r\n}\r\n/**\r\n * Submit button event handler factory\r\n * @param event The Event object\r\n */\r\nfunction submitButtonHandlerFactory(submitButtonId, spinnerId, commentInputId, emailInputId, screenshotCheckboxId, screenshotPreviewId, categoriesDropdownId) {\r\n    return function (event) {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["setElementVisibility"](submitButtonId, false);\r\n        var spinner = new _SpinnerControl__WEBPACK_IMPORTED_MODULE_6__["Spinner"](spinnerId);\r\n        var transporter = new _Transport_Transport__WEBPACK_IMPORTED_MODULE_0__["Transporter"](_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().environment, "Sas", _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().appId, selectedFeedbackType, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().applicationGroup, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().telemetryGroup, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().webGroup);\r\n        var commentElement = document.getElementById(commentInputId);\r\n        var commentEntered = (commentElement && !!commentElement.value);\r\n        if (commentEntered) {\r\n            transporter.setComment(commentElement.value);\r\n        }\r\n        var emailCheckBox = document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].EmailCheckBox);\r\n        var emailElement = document.getElementById(emailInputId);\r\n        var isEmailIncluded = (emailElement && !!emailElement.value);\r\n        if (emailCheckBox && emailCheckBox.checked && isEmailIncluded) {\r\n            transporter.setEmail(emailElement.value);\r\n        }\r\n        var screenshotCheckBox = document.getElementById(screenshotCheckboxId);\r\n        var screenshotCheckBoxSelected = screenshotCheckBox && screenshotCheckBox.checked;\r\n        var categoryElement = document.getElementById(categoriesDropdownId);\r\n        var isCategorySelected = (categoryElement && categoryElement.selectedIndex > 0);\r\n        if (isCategorySelected) {\r\n            transporter.setCategory(categoryElement.value);\r\n        }\r\n        _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].InApp.UI.Form.Submit.VALUE, 1 /* Critical */, {\r\n            FeedbackType: selectedFeedbackType,\r\n            IsEmailIncluded: isEmailIncluded,\r\n            IsScreenshotIncluded: screenshotCheckBoxSelected,\r\n        });\r\n        if (screenshotCheckBoxSelected) {\r\n            var startTime_1 = performance.now();\r\n            _Screenshot__WEBPACK_IMPORTED_MODULE_5__["createScreenshot"](document.body).then(function (canvas) {\r\n                var endTime = performance.now();\r\n                _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].Shared.Screenshot.Render.Success.VALUE, 1 /* Critical */, { TimeMilliseconds: endTime - startTime_1 });\r\n                transporter.setScreenshot(canvas);\r\n                transporter.submit();\r\n            }).catch(function (error) {\r\n                var endTime = performance.now();\r\n                _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].Shared.Screenshot.Render.Failed.VALUE, 2 /* Error */, { ErrorMessage: error, TimeMilliseconds: endTime - startTime_1 });\r\n                transporter.submit();\r\n            });\r\n        }\r\n        else {\r\n            transporter.submit();\r\n        }\r\n        spinner.destroy();\r\n        _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().setFeedbackSubmitted(true);\r\n        if (!_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getInAppFeedbackInitOptions().isShowThanks) {\r\n            dismissAll();\r\n        }\r\n        else {\r\n            overallThanksHandler(event);\r\n        }\r\n    };\r\n}\r\n/**\r\n * Close button event\r\n */\r\nfunction CloseButton(event) {\r\n    SetVisibilityExceptFor(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].ThanksPanelContainer, true);\r\n    dismissAll();\r\n}\r\nfunction overallFeedbackPortalIdeaHandler(event) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    window.open(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getInAppFeedbackInitOptions().feedbackForumUrl);\r\n    dismissAll();\r\n}\r\n/**\r\n * ScreenshotCheckbox Click event handler. Populate preview if checkbox is checked\r\n * @param screenshotCheckboxId The Id of screenshot checkbox\r\n * @param screenshotPreviewId The Id of preview\r\n * @param event The Event object\r\n */\r\nfunction ScreenshotCheckboxClickHandler(screenshotCheckboxId, screenshotPreviewId) {\r\n    return function (event) {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_7__["ScreenshotPreviewByCheckbox"](screenshotCheckboxId, screenshotPreviewId);\r\n    };\r\n}\r\n/**\r\n * Cancel button event handler factory\r\n */\r\nfunction CancelButtonHandler() {\r\n    dismissAll();\r\n}\r\nfunction emailCheckBoxHandler(event) {\r\n    // show email if checked and show default string if unchecked\r\n    var emailCheckBox = document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].EmailCheckBox);\r\n    if (emailCheckBox) {\r\n        // multiFeedback form emailTextBox has id  IDs.BasicFormEmailInput\r\n        // singleFeedback form emailTextBox has id IDs.SingleFormEmailInput\r\n        // First we try to get with IDs.SingleFormEmailInput\r\n        // if it does not exists, which means this is a multiFeedback form, then we get it with IDs.BasicFormEmailInput\r\n        var emailTextBox = document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormEmailInput);\r\n        if (!emailTextBox) {\r\n            emailTextBox = document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormEmailInput);\r\n        }\r\n        emailTextBox.value = emailCheckBox.checked ? _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().userEmail : null;\r\n        emailTextBox.disabled = !emailCheckBox.checked;\r\n    }\r\n}\r\nfunction basicFormInputHandler(event) {\r\n    var commentElement = document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormComment);\r\n    var commentEntered = (commentElement && !!commentElement.value);\r\n    document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].BasicFormSubmitButton).disabled = !commentEntered;\r\n}\r\nfunction singleFormInputHandler(event) {\r\n    var commentElement = document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormComment);\r\n    var commentEntered = (commentElement && !!commentElement.value);\r\n    document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_3__["IDs"].SingleFormSubmitButton).disabled = !commentEntered;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9CZWxseUJhbmQvRXZlbnRzLnRzP2Y5MjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7R0FJRztBQUV1RDtBQUNXO0FBRVQ7QUFDeUI7QUFDbEM7QUFFRjtBQUNIO0FBQ1I7QUFDQztBQUd2Qzs7R0FFRztBQUNILElBQUksZUFBZSxHQUFZLEtBQUssQ0FBQztBQUVyQzs7R0FFRztBQUNILElBQUksaUJBQWlCLEdBQVksSUFBSSxDQUFDO0FBRXRDOztHQUVHO0FBQ0gsSUFBSSxTQUE2QixDQUFDO0FBRWxDOztHQUVHO0FBQ0gsSUFBSSxvQkFBb0IsR0FBaUIsU0FBUyxDQUFDO0FBRW5EOztHQUVHO0FBQ0gsSUFBSSxpQkFBaUIsR0FBYyxTQUFTLENBQUM7QUFFN0M7O0dBRUc7QUFDSCxJQUFJLGFBQStDLENBQUM7QUFFcEQ7O0dBRUc7QUFDSCxJQUFJLGNBQWlELENBQUM7QUFFdEQsSUFBTSxPQUFPLEdBQWEsQ0FBQyxnREFBRyxDQUFDLGtCQUFrQixFQUFFLGdEQUFHLENBQUMsa0JBQWtCLEVBQUUsZ0RBQUcsQ0FBQyxpQkFBaUIsRUFBRSxnREFBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFeEgsU0FBUyx5QkFBeUIsQ0FBQyxRQUFnQjtJQUNsRCxJQUFJLENBQVMsQ0FBQztJQUNkLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDNUIsZ0VBQWlDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLDBEQUFhLENBQUMsWUFBWSxFQUFFLDJEQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0Y7YUFBTTtZQUNOLGdF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QUFDLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnRUFBaUIsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekcsWUFBWSxDQUFDLFFBQVEsR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7S0FDL0M7QUFDRixDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxLQUFZO0lBQzFDLElBQUksY0FBYyxHQUE4QyxRQUFRLENBQUMsY0FBYyxDQUFDLGdEQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM5RyxJQUFJLGNBQWMsR0FBWSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hFLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0RBQUcsQ0FBQyxxQkFBcUIsQ0FBdUIsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxjQUFjLENBQUM7QUFDdEcsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsS0FBWTtJQUMzQyxJQUFJLGNBQWMsR0FBOEMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnREFBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0csSUFBSSxjQUFjLEdBQVksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RSxRQUFRLENBQUMsY0FBYyxDQUFDLGdEQUFHLENBQUMsc0JBQXNCLENBQXVCLENBQUMsUUFBUSxHQUFHLENBQUMsY0FBYyxDQUFDO0FBQ3ZHLENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9VSS9CZWxseUJhbmQvRXZlbnRzLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEV2ZW50cy50c1xyXG4gKlxyXG4gKiBBIG1vZHVsZSBmb3IgYWxsIEV2ZW50IGhhbmRsaW5nLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFRyYW5zcG9ydGVyIH0gZnJvbSBcIi4vLi4vLi4vVHJhbnNwb3J0L1RyYW5zcG9ydFwiO1xyXG5pbXBvcnQgKiBhcyBDb25maWd1cmF0aW9uIGZyb20gXCIuLy4uLy4uL0NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBJRm9ybVRlbXBsYXRlIH0gZnJvbSBcIi4vRm9ybVRlbXBsYXRlcy9JRm9ybVRlbXBsYXRlXCI7XHJcbmltcG9ydCB7IEZlZWRiYWNrVHlwZSwgUGFuZWxUeXBlIH0gZnJvbSBcIi4vLi4vLi4vQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEF0dHJpYnV0ZU5hbWUsIEF0dHJpYnV0ZVZhbHVlLCBDbGFzc2VzLCBJRHMsIEtleXMgfSBmcm9tIFwiLi8uLi9VaUNvbnN0YW50c1wiO1xyXG5pbXBvcnQgKiBhcyBMb2dnaW5nIGZyb20gXCIuLy4uLy4uL0xvZ2dpbmcvTG9nZ2luZ1wiO1xyXG5pbXBvcnQgeyBJT25EaXNtaXNzRGVsZWdhdGUgfSBmcm9tIFwiLi8uLi8uLi9JT25EaXNtaXNzRGVsZWdhdGVcIjtcclxuaW1wb3J0ICogYXMgU2NyZWVuc2hvdCBmcm9tIFwiLi8uLi8uLi9TY3JlZW5zaG90XCI7XHJcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tIFwiLi8uLi9TcGlubmVyQ29udHJvbFwiO1xyXG5pbXBvcnQgKiBhcyBVaVV0aWxzIGZyb20gXCIuLy4uL1V0aWxzXCI7XHJcbmltcG9ydCAqIGFzIFRhYkZvY3VzIGZyb20gXCIuL1RhYkZvY3VzXCI7XHJcbmltcG9ydCB7IElQYW5lbFRlbXBsYXRlIH0gZnJvbSBcIi4vUGFuZWxUZW1wbGF0ZXMvSVBhbmVsVGVtcGxhdGVcIjtcclxuXHJcbi8qKlxyXG4gKiBXaGV0aGVyIHRvIHVzZSBuYXJyb3cgbGF5b3V0XHJcbiAqL1xyXG5sZXQgdXNlTmFycm93TGF5b3V0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4vKipcclxuICogV2hldGhlciB0cmFuc2l0aW9uIGVuYWJsZWQgb3Igbm90XHJcbiAqL1xyXG5sZXQgdHJhbnNpdGlvbkVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuLyoqXHJcbiAqIENhbGxiYWNrIGZvciB3aGVuIHRoZSBmZWVkYmFjayBkaWFsb2cgaXMgZGlzbWlzc2VkXHJcbiAqL1xyXG5sZXQgb25EaXNtaXNzOiBJT25EaXNtaXNzRGVsZWdhdGU7XHJcblxyXG4vKipcclxuICogVGhlIFNlbGVjdGVkIGZlZWRiYWNrIHR5cGUsIHVuZGVmaW5lZCBpZiBub25lIHNlbGVjdGVkXHJcbiAqL1xyXG5sZXQgc2VsZWN0ZWRGZWVkYmFja1R5cGU6IEZlZWRiYWNrVHlwZSA9IHVuZGVmaW5lZDtcclxuXHJcbi8qKlxyXG4gKiBUaGUgU2VsZWN0ZWQgcGFuZWwgdHlwZSwgdW5kZWZpbmVkIGlmIG5vbmUgc2VsZWN0ZWRcclxuICovXHJcbmxldCBzZWxlY3RlZFBhbmVsVHlwZTogUGFuZWxUeXBlID0gdW5kZWZpbmVkO1xyXG5cclxuLyoqXHJcbiAqIGZlZWRiYWNrVHlwZSAtPiBJRm9ybVRlbXBsYXRlIG1hcHBpbmcgZm9yIG11bHRpIEJlbGx5QmFuZFxyXG4gKi9cclxubGV0IGZvcm1UZW1wbGF0ZXM6IHsgW2tleTogbnVtYmVyXTogSUZvcm1UZW1wbGF0ZSB9O1xyXG5cclxuLyoqXHJcbiAqIHBhbmVsVHlwZSAtPiBJUGFuZWxUZW1wbGF0ZSBtYXBwaW5nIGZvciBtdWx0aSBCZWxseUJhbmRcclxuICovXHJcbmxldCBwYW5lbFRlbXBsYXRlczogeyBba2V5OiBudW1iZXJdOiBJUGFuZWxUZW1wbGF0ZSB9O1xyXG5cclxuY29uc3QgYW5jaG9yczogc3RyaW5nW10gPSBbSURzLk92ZXJhbGxTbWlsZUFuY2hvciwgSURzLk92ZXJhbGxGcm93bkFuY2hvciwgSURzLk92ZXJhbGxJZGVhQW5jaG9yLCBJRHMuT3ZlcmFsbEJ1Z0FuY2hvcl07XHJcblxyXG5mdW5jdGlvbiBzZXRBcmlhU2VsZWN0ZWRBdHRyaWJ1dGVzKGFuY2hvcklEOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRsZXQgaTogbnVtYmVyO1xyXG5cdGZvciAoaSA9IDA7IGkgPCBhbmNob3JzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRpZiAoYW5jaG9yc1tpXSA9PT0gYW5jaG9ySUQpIHtcclxuXHRcdFx0VWlVdGlscy5zZXRBdHRyaWJ1dGVPbkh0bWxFbGVtZW50KGFuY2hvcnNbaV0sIEF0dHJpYnV0ZU5hbWUuQXJpYVNlbGVjdGVkLCBBdHRyaWJ1dGVWYWx1ZS5UcnVlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdFVpVXRpbHMuc2V0QXR0cmlidXRlT25IdG1sRWxlbWVudChhbmNob3JzW2ldLCBBdHRyaWJ1dGVOYW1lLkFyaWFTZWxlY3RlZCwgQXR0cmlidXRlVmFsdWUuRmFsc2UpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIERpc21pc3MgYWxsLCBpbmNsdWRpbmcgbmV0d29ya2luZywgVUksIGFuZCBldmVudHNcclxuICogQHBhcmFtIHN1Ym1pdHRlZCBXYXMgdGhlIGNvbnRyb2wgc3VibWl0dGVkICh0cnVlKSwgb3IgY2FuY2VsbGVkIChmYWxzZSk/XHJcbiAqL1xyXG5mdW5jdGlvbiBkaXNtaXNzQWxsKCk6IHZvaWQge1xyXG5cdHVucmVnaXN0ZXIoKTtcclxuXHRvbkRpc21pc3MoQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGZWVkYmFja1N1Ym1pdHRlZCgpKTtcclxuXHRDb25maWd1cmF0aW9uLmdldCgpLnNldEZlZWRiYWNrU3VibWl0dGVkKGZhbHNlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExpc3Qgb2YgbGlzdGVuZXJzIGFuZCB0aGUgaWRzIHRoZXkgYXJlIGF0dGFjaGVkIHRvLiBUaGlzIGVuc3VyZXMgYWxsIGV2ZW50cyBhcmUgY29ycmVjdGx5IHVucmVnaXN0ZXJlZC5cclxuICovXHJcbmxldCBsaXN0ZW5lcnNMaXN0OiB7IGlkOiBzdHJpbmcsIGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkIH1bXSA9IFtdO1xyXG5cclxuZnVuY3Rpb24gYWRkTGlzdGVuZXIoaWQ6IHN0cmluZywgZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQpOiB2b2lkIHtcclxuXHRVaVV0aWxzLnJlZ2lzdGVyTGlzdGVuZXIoaWQsIGV2ZW50LCBsaXN0ZW5lcik7XHJcblx0bGlzdGVuZXJzTGlzdC5wdXNoKHsgZXZlbnQ6IGV2ZW50LCBpZDogaWQsIGxpc3RlbmVyOiBsaXN0ZW5lciB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXJzKCk6IHZvaWQge1xyXG5cdGZvciAobGV0IGxpc3RlbmVyIG9mIGxpc3RlbmVyc0xpc3QpIHtcclxuXHRcdFVpVXRpbHMudW5yZWdpc3Rlckxpc3RlbmVyKGxpc3RlbmVyLmlkLCBsaXN0ZW5lci5ldmVudCwgbGlzdGVuZXIubGlzdGVuZXIpO1xyXG5cdH1cclxuXHRsaXN0ZW5lcnNMaXN0ID0gW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlciBldmVudHMgZm9yIHNpbmdsZSBiZWxseSBiYW5kXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJTaW5nbGUoZmVlZGJhY2tUeXBlOiBGZWVkYmFja1R5cGUsXHJcblx0UEFORUxURU1QTEFURVM6IHsgW2tleTogbnVtYmVyXTogSVBhbmVsVGVtcGxhdGUgfSxcclxuXHRPTl9ESVNNSVNTOiBJT25EaXNtaXNzRGVsZWdhdGUgPSBmdW5jdGlvbiAoc3VibWl0dGVkOiBib29sZWFuKSB7IHJldHVybjsgfSkge1xyXG5cdHNlbGVjdGVkRmVlZGJhY2tUeXBlID0gZmVlZGJhY2tUeXBlO1xyXG5cdHBhbmVsVGVtcGxhdGVzID0gUEFORUxURU1QTEFURVM7XHJcblxyXG5cdC8vIFNpbmdsZUZvcm1UZW1wbGF0ZSBldmVudHNcclxuXHRhZGRMaXN0ZW5lcihJRHMuU2luZ2xlRm9ybVN1Ym1pdEJ1dHRvbiwgXCJjbGlja1wiLCBzdWJtaXRCdXR0b25IYW5kbGVyRmFjdG9yeShJRHMuU2luZ2xlRm9ybVN1Ym1pdEJ1dHRvbixcclxuXHRcdElEcy5TaW5nbGVGb3JtU3VibWl0QnV0dG9uU3Bpbm5lciwgSURzLlNpbmdsZUZvcm1Db21tZW50LCBJRHMuU2luZ2xlRm9ybUVtYWlsSW5wdXQsXHJcblx0XHRJRHMuU2luZ2xlRm9ybVNjcmVlbnNob3RDaGVja2JveCwgSURzLlNpbmdsZUZvcm1TY3JlZW5zaG90UHJldmlldywgSURzLlNpbmdsZUZvcm1DYXRlZ29yaWVzRHJvcGRvd24pKTtcclxuXHJcblx0Ly8gU2NyZWVuc2hvdCBjaGVja2JveCBjbGljayBldmVudHNcclxuXHRhZGRMaXN0ZW5lcihJRHMuU2luZ2xlRm9ybVNjcmVlbnNob3RDaGVja2JveCwgXCJjbGlja1wiLCBTY3JlZW5zaG90Q2hlY2tib3hDbGlja0hhbmRsZXJcclxuXHRcdChJRHMuU2luZ2xlRm9ybVNjcmVlbnNob3RDaGVja2JveCwgSURzLlNpbmdsZUZvcm1TY3JlZW5zaG90UHJldmlldykpO1xyXG5cclxuXHQvLyBDbG9zZSBidXR0b24gY2xpY2sgZXZlbnQuXHJcblx0YWRkTGlzdGVuZXIoSURzLkNsb3NlQnV0dG9uLCBcImNsaWNrXCIsICgpID0+IHsgZGlzbWlzc0FsbCgpOyB9KTtcclxuXHJcblx0Ly8gVGhhbmtzUGFuZWwgZXZlbnRzXHJcblx0YWRkTGlzdGVuZXIoSURzLlRoYW5rc1BhbmVsQ2xvc2VCdXR0b24sIFwiY2xpY2tcIiwgKGV2ZW50OiBFdmVudCkgPT4gQ2xvc2VCdXR0b24oZXZlbnQpKTtcclxuXHJcblx0Ly8gY2FuY2VsIGJ1dHRvbiBldmVudHNcclxuXHRhZGRMaXN0ZW5lcihJRHMuU2luZ2xlRm9ybUNhbmNlbEJ1dHRvbiwgXCJjbGlja1wiLCBDYW5jZWxCdXR0b25IYW5kbGVyKTtcclxuXHRyZWdpc3RlckNvbW1vbihPTl9ESVNNSVNTKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVyIGV2ZW50cyBmb3IgbXVsdGkgYmVsbHkgYmFuZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTXVsdGkoRk9STVRFTVBMQVRFUzogeyBba2V5OiBudW1iZXJdOiBJRm9ybVRlbXBsYXRlIH0sXHJcblx0UEFORUxURU1QTEFURVM6IHsgW2tleTogbnVtYmVyXTogSVBhbmVsVGVtcGxhdGUgfSxcclxuXHRVU0VfTkFSUk9XX0xBWU9VVDogYm9vbGVhbixcclxuXHRUUkFOU0lUSU9ORU5BQkxFRDogYm9vbGVhbixcclxuXHRPTl9ESVNNSVNTOiBJT25EaXNtaXNzRGVsZWdhdGUgPSBmdW5jdGlvbiAoc3VibWl0dGVkOiBib29sZWFuKSB7IHJldHVybjsgfSkge1xyXG5cdHVzZU5hcnJvd0xheW91dCA9IFVTRV9OQVJST1dfTEFZT1VUO1xyXG5cdGZvcm1UZW1wbGF0ZXMgPSBGT1JNVEVNUExBVEVTO1xyXG5cdHBhbmVsVGVtcGxhdGVzID0gUEFORUxURU1QTEFURVM7XHJcblx0dHJhbnNpdGlvbkVuYWJsZWQgPSBUUkFOU0lUSU9ORU5BQkxFRDtcclxuXHJcblx0YWRkTGlzdGVuZXIoSURzLk92ZXJhbGxTbWlsZUFuY2hvciwgXCJjbGlja1wiLCBvdmVyYWxsU21pbGVIYW5kbGVyKTtcclxuXHRhZGRMaXN0ZW5lcihJRHMuT3ZlcmFsbEZyb3duQW5jaG9yLCBcImNsaWNrXCIsIG92ZXJhbGxGcm93bkhhbmRsZXIpO1xyXG5cdGFkZExpc3RlbmVyKElEcy5PdmVyYWxsSWRlYUFuY2hvciwgXCJjbGlja1wiLCBvdmVyYWxsSWRlYUhhbmRsZXIpO1xyXG5cdGFkZExpc3RlbmVyKElEcy5PdmVyYWxsQnVnQW5jaG9yLCBcImNsaWNrXCIsIG92ZXJhbGxCdWdIYW5kbGVyKTtcclxuXHRhZGRMaXN0ZW5lcihJRHMuQ2xvc2VCdXR0b24sIFwiY2xpY2tcIiwgKCkgPT4geyBkaXNtaXNzQWxsKCk7IH0pO1xyXG5cclxuXHQvLyBCYXNpY0Zvcm1UZW1wbGF0ZSBldmVudHNcclxuXHRhZGRMaXN0ZW5lcihJRHMuQmFzaWNGb3JtU3VibWl0QnV0dG9uLCBcImNsaWNrXCIsIHN1Ym1pdEJ1dHRvbkhhbmRsZXJGYWN0b3J5KElEcy5CYXNpY0Zvcm1TdWJtaXRCdXR0b24sXHJcblx0XHRJRHMuQmFzaWNGb3JtU3VibWl0QnV0dG9uU3Bpbm5lciwgSURzLkJhc2ljRm9ybUNvbW1lbnQsIElEcy5CYXNpY0Zvcm1FbWFpbElucHV0LFxyXG5cdFx0SURzLkJhc2ljRm9ybVNjcmVlbnNob3RDaGVja2JveCwgSURzLkJhc2ljRm9ybVNjcmVlbnNob3RQcmV2aWV3LCBJRHMuQmFzaWNGb3JtQ2F0ZWdvcmllc0Ryb3Bkb3duKSk7XHJcblxyXG5cdC8vIFNjcmVlbnNob3QgY2hlY2tib3ggY2xpY2sgZXZlbnRzXHJcblx0YWRkTGlzdGVuZXIoSURzLkJhc2ljRm9ybVNjcmVlbnNob3RDaGVja2JveCwgXCJjbGlja1wiLCBTY3JlZW5zaG90Q2hlY2tib3hDbGlja0hhbmRsZXIoSURzLkJhc2ljRm9ybVNjcmVlbnNob3RDaGVja2JveCxcclxuXHRcdElEcy5CYXNpY0Zvcm1TY3JlZW5zaG90UHJldmlldykpO1xyXG5cclxuXHRhZGRMaXN0ZW5lcihJRHMuT3ZlcmFsbEZlZWRiYWNrUG9ydGFsSWRlYUFuY2hvciwgXCJjbGlja1wiLCBvdmVyYWxsRmVlZGJhY2tQb3J0YWxJZGVhSGFuZGxlcik7XHJcblxyXG5cdC8vIFRoYW5rc1BhbmVsIGV2ZW50c1xyXG5cdGFkZExpc3RlbmVyKElEcy5UaGFua3NQYW5lbENsb3NlQnV0dG9uLCBcImNsaWNrXCIsIChldmVudDogRXZlbnQpID0+IENsb3NlQnV0dG9uKGV2ZW50KSk7XHJcblxyXG5cdC8vIGNhbmNlbCBidXR0b24gZXZlbnRzXHJcblx0YWRkTGlzdGVuZXIoSURzLkJhc2ljRm9ybUNhbmNlbEJ1dHRvbiwgXCJjbGlja1wiLCBDYW5jZWxCdXR0b25IYW5kbGVyKTtcclxuXHJcblx0cmVnaXN0ZXJDb21tb24oT05fRElTTUlTUyk7XHJcblxyXG5cdGlmICghdHJhbnNpdGlvbkVuYWJsZWQpIHtcclxuXHRcdFVpVXRpbHMuYWRkQ2xhc3NCeUlkKElEcy5NYWluQ29udGVudEhvbGRlciwgQ2xhc3Nlcy5NYXJnaW5MZWZ0MTgwcHgpO1xyXG5cdFx0VWlVdGlscy5hZGRDbGFzc0J5SWQoSURzLkNvbHVtblNlcGFyYXRvckRpdiwgQ2xhc3Nlcy5TaG93UmlnaHRCb3JkZXIpO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVnaXN0ZXJDb21tb24oT05fRElTTUlTUzogSU9uRGlzbWlzc0RlbGVnYXRlKTogdm9pZCB7XHJcblx0b25EaXNtaXNzID0gT05fRElTTUlTUztcclxuXHJcblx0VWlVdGlscy5hZGRFdmVudExpc3RlbmVySGVscGVyKHdpbmRvdywgXCJrZXl1cFwiLCBrZXlFdmVudEhhbmRsZXIpO1xyXG5cclxuXHRhZGRMaXN0ZW5lcihJRHMuT3ZlcmxheUJhY2tncm91bmQsIFwiY2xpY2tcIiwgb3ZlcmxheUJhY2tncm91bmRIYW5kbGVyKTtcclxuXHRhZGRMaXN0ZW5lcihJRHMuTWFpbkNvbnRhaW5lciwgXCJjbGlja1wiLCBtYWluQ29udGFpbmVySGFuZGxlcik7XHJcblx0YWRkTGlzdGVuZXIoSURzLk1haW5Db250YWluZXIsIFwia2V5dXBcIiwgdGFiS2V5RXZlbnRIYW5kbGVyKTtcclxuXHRhZGRMaXN0ZW5lcihJRHMuUHJpdmFjeVN0YXRlbWVudExpbmssIFwiY2xpY2tcIiwgcHJpdmFjeVN0YXRlbWVudExpbmtIYW5kbGVyKTtcclxuXHRhZGRMaXN0ZW5lcihJRHMuRW1haWxDaGVja0JveCwgXCJjbGlja1wiLCBlbWFpbENoZWNrQm94SGFuZGxlcik7XHJcblx0YWRkTGlzdGVuZXIoSURzLkJhc2ljRm9ybUNvbW1lbnQsIFwia2V5dXBcIiwgYmFzaWNGb3JtSW5wdXRIYW5kbGVyKTtcclxuXHRhZGRMaXN0ZW5lcihJRHMuU2luZ2xlRm9ybUNvbW1lbnQsIFwia2V5dXBcIiwgc2luZ2xlRm9ybUlucHV0SGFuZGxlcik7XHJcblx0ZW1haWxDaGVja0JveEhhbmRsZXIobnVsbCk7IC8vIGNhbGwgdGhlIGNoZWNrYm94IGhhbmRsZXIgdG8gcHJvY2VzcyB0aGUgaW5pdGlhbCBzdGF0ZVxyXG59XHJcblxyXG4vKipcclxuICogTGlzdGVuZXIgdW4tcmVnaXN0cmF0aW9uXHJcbiAqL1xyXG5mdW5jdGlvbiB1bnJlZ2lzdGVyKCk6IHZvaWQge1xyXG5cdFVpVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lckhlbHBlcih3aW5kb3csIFwia2V5dXBcIiwga2V5RXZlbnRIYW5kbGVyKTtcclxuXHRyZW1vdmVMaXN0ZW5lcnMoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRhYiBrZXkgZXZlbnQgaGFuZGxlclxyXG4gKiBAcGFyYW0gZXZlbnQgVGhlIEV2ZW50IG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gdGFiS2V5RXZlbnRIYW5kbGVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG5cdGxldCBrZXlDb2RlID0gKDxLZXlib2FyZEV2ZW50PiBldmVudCkua2V5Q29kZSB8fCAoPEtleWJvYXJkRXZlbnQ+IGV2ZW50ICkud2hpY2g7XHJcblxyXG5cdGlmIChrZXlDb2RlID09PSBLZXlzLlRhYikge1xyXG5cdFx0aWYgKChkb2N1bWVudC5hY3RpdmVFbGVtZW50LmlkID09PSBJRHMuRmlyc3RUYWJiYWJsZSAmJiAoPEtleWJvYXJkRXZlbnQ+IGV2ZW50KS5zaGlmdEtleSkgfHxcclxuXHRcdFx0KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuaWQgPT09IElEcy5MYXN0VGFiYmFibGUgJiYgISg8S2V5Ym9hcmRFdmVudD4gZXZlbnQpLnNoaWZ0S2V5KSkge1xyXG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0VGFiRm9jdXMuY3ljbGVUYWJGb2N1cyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBLZXkgZXZlbnQgaGFuZGxlclxyXG4gKiBAcGFyYW0gZXZlbnQgVGhlIEV2ZW50IG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24ga2V5RXZlbnRIYW5kbGVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG5cdC8vIGRpc21pc3MgZmVlZGJhY2sgdXBvbiBwcmVzc2luZyB0aGUgZXNjYXBlIGtleVxyXG5cdGlmICgoPEtleWJvYXJkRXZlbnQ+IGV2ZW50KS5rZXlDb2RlID09PSBLZXlzLkVzYykge1xyXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuXHRcdGRpc21pc3NBbGwoKTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPdmVybGF5IGJhY2tncm91bmQgZXZlbnQgaGFuZGxlci4gRGlzbWlzcyBmZWVkYmFjayB1cG9uIGNsaWNraW5nIG9uIHRoZSBiYWNrZ3JvdW5kIGFyZWFcclxuICogQHBhcmFtIGV2ZW50IFRoZSBFdmVudCBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIG92ZXJsYXlCYWNrZ3JvdW5kSGFuZGxlcihldmVudDogRXZlbnQpOiB2b2lkIHtcclxuXHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdGRpc21pc3NBbGwoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1haW4gY29udGFpbmVyIGV2ZW50IGhhbmRsZXIuIFdoZW4gY2xpY2tpbmcgb24gbWFpbiBjb250YWluZXIgYXJlYSwgZG8gbm90IHByb3BhZ2F0ZSB0aGUgZXZlbnQgdG8gbG93ZXIgbGV2ZWwuXHJcbiAqIEBwYXJhbSBldmVudCBUaGUgRXZlbnQgb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBtYWluQ29udGFpbmVySGFuZGxlcihldmVudDogRXZlbnQpOiB2b2lkIHtcclxuXHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFByaXZhY3kgc3RhdGVtZW50IGxpbmsgaGFuZGxlci4gV2hlbiBjbGlja2luZyBvbiB0aGUgcHJpdmFjeSBzdGF0ZW1lbnQgbGluayxcclxuICogZG8gbm90IHByb3BhZ2F0ZSB0aGUgZXZlbnQgdG8gbG93ZXIgbGV2ZWwuXHJcbiAqIEBwYXJhbSBldmVudCBUaGUgRXZlbnQgb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBwcml2YWN5U3RhdGVtZW50TGlua0hhbmRsZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcblx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPdmVyYWxsIGJ1dHRvbiBjbGljayBoYW5kbGVyXHJcbiAqIEBwYXJhbSBldmVudCBUaGUgRXZlbnQgb2JqZWN0XHJcbiAqIEBwYXJhbSBhY2hvcklkIFRoZSBpZCBvZiB0aGUgYW5jaG9yIGh0bWwgZWxlbWVudCB3aGljaCB3YXMgc2VsZWN0ZWRcclxuICovXHJcbmZ1bmN0aW9uIG92ZXJhbGxIYW5kbGVyKGV2ZW50OiBFdmVudCwgYW5jaG9ySWQ6IHN0cmluZyk6IHZvaWQge1xyXG5cdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG5cdFVpVXRpbHMucmVwbGFjZUNsYXNzZXNCeUlkKElEcy5PdmVyYWxsU21pbGVBbmNob3IsIENsYXNzZXMuT3ZlcmFsbEFuY2hvckFjdGl2ZSk7XHJcblx0VWlVdGlscy5yZXBsYWNlQ2xhc3Nlc0J5SWQoSURzLk92ZXJhbGxGcm93bkFuY2hvciwgQ2xhc3Nlcy5PdmVyYWxsQW5jaG9yQWN0aXZlKTtcclxuXHRVaVV0aWxzLnJlcGxhY2VDbGFzc2VzQnlJZChJRHMuT3ZlcmFsbElkZWFBbmNob3IsIENsYXNzZXMuT3ZlcmFsbEFuY2hvckFjdGl2ZSk7XHJcblx0VWlVdGlscy5yZXBsYWNlQ2xhc3Nlc0J5SWQoSURzLk92ZXJhbGxCdWdBbmNob3IsIENsYXNzZXMuT3ZlcmFsbEFuY2hvckFjdGl2ZSk7XHJcblxyXG5cdGlmIChhbmNob3JJZCkge1xyXG5cdFx0VWlVdGlscy5hZGRDbGFzc0J5SWQoYW5jaG9ySWQsIENsYXNzZXMuT3ZlcmFsbEFuY2hvckFjdGl2ZSk7XHJcblx0fVxyXG5cclxuXHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KFxyXG5cdFx0TG9nZ2luZy5FdmVudElkcy5JbkFwcC5VSS5Gb3JtLlNob3duLlZBTFVFLFxyXG5cdFx0TG9nZ2luZy5Mb2dMZXZlbC5Dcml0aWNhbCxcclxuXHRcdHsgRmVlZGJhY2tUeXBlOiBzZWxlY3RlZEZlZWRiYWNrVHlwZSwgUGFuZWxUeXBlOiBzZWxlY3RlZFBhbmVsVHlwZSB9KTtcclxuXHJcblx0aWYgKHR5cGVvZiAoc2VsZWN0ZWRGZWVkYmFja1R5cGUpICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcblx0XHRVaVV0aWxzLnNldEVsZW1lbnRWaXNpYmlsaXR5KElEcy5MZWZ0Rm9ybUNvbnRhaW5lciwgdHJ1ZSk7XHJcblx0XHRVaVV0aWxzLnNldEVsZW1lbnRWaXNpYmlsaXR5KElEcy5NaWRkbGVGb3JtQ29udGFpbmVyLCB0cnVlKTtcclxuXHRcdFVpVXRpbHMuc2V0RWxlbWVudFZpc2liaWxpdHkoSURzLkxlZnRQYW5lbENvbnRhaW5lciwgZmFsc2UpO1xyXG5cdFx0bGV0IGZvcm1UZW1wbGF0ZTogSUZvcm1UZW1wbGF0ZSA9IGZvcm1UZW1wbGF0ZXNbc2VsZWN0ZWRGZWVkYmFja1R5cGVdO1xyXG5cdFx0bWFpbkNvbnRlbnRIb2xkZXJTbGlkZUxlZnQoZm9ybVRlbXBsYXRlLmNvbnRhaW5lcklkKTtcclxuXHJcblx0XHRpZiAodHJhbnNpdGlvbkVuYWJsZWQpIHtcclxuXHRcdFx0bWFpbkNvbnRlbnRIb2xkZXJTbGlkZUxlZnQoZm9ybVRlbXBsYXRlLmNvbnRhaW5lcklkKTtcclxuXHRcdH1cclxuXHRcdGZvcm1UZW1wbGF0ZS5vblNlbGVjdChzZWxlY3RlZEZlZWRiYWNrVHlwZSk7XHJcblx0fVxyXG5cclxuXHRpZiAodHlwZW9mIChzZWxlY3RlZFBhbmVsVHlwZSkgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuXHRcdFVpVXRpbHMuc2V0RWxlbWVudFZpc2liaWxpdHkoSURzLkxlZnRGb3JtQ29udGFpbmVyLCBmYWxzZSk7XHJcblx0XHRVaVV0aWxzLnNldEVsZW1lbnRWaXNpYmlsaXR5KElEcy5NaWRkbGVGb3JtQ29udGFpbmVyLCBmYWxzZSk7XHJcblx0XHRVaVV0aWxzLnNldEVsZW1lbnRWaXNpYmlsaXR5KElEcy5MZWZ0UGFuZWxDb250YWluZXIsIHRydWUpO1xyXG5cdFx0Zm9yIChsZXQgcGFuZWxUeXBlIGluIHBhbmVsVGVtcGxhdGVzKSB7XHJcblx0XHRcdGlmIChwYW5lbFRlbXBsYXRlcy5oYXNPd25Qcm9wZXJ0eShwYW5lbFR5cGUpKSB7XHJcblx0XHRcdFx0VWlVdGlscy5zZXRFbGVtZW50VmlzaWJpbGl0eShwYW5lbFRlbXBsYXRlc1twYW5lbFR5cGVdLmNvbnRhaW5lcklkLCB0cnVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0bGV0IHBhbmVsVGVtcGxhdGU6IElQYW5lbFRlbXBsYXRlID0gcGFuZWxUZW1wbGF0ZXNbc2VsZWN0ZWRQYW5lbFR5cGVdO1xyXG5cdFx0cGFuZWxUZW1wbGF0ZS5vblNlbGVjdChzZWxlY3RlZFBhbmVsVHlwZSk7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogU21pbGUgYnV0dG9uIGV2ZW50IGhhbmRsZXJcclxuICogQHBhcmFtIGV2ZW50IFRoZSBFdmVudCBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIG92ZXJhbGxTbWlsZUhhbmRsZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcblx0c2VsZWN0ZWRGZWVkYmFja1R5cGUgPSBGZWVkYmFja1R5cGUuU21pbGU7XHJcblx0c2VsZWN0ZWRQYW5lbFR5cGUgPSB1bmRlZmluZWQ7XHJcblx0c2V0QXJpYVNlbGVjdGVkQXR0cmlidXRlcyhJRHMuT3ZlcmFsbFNtaWxlQW5jaG9yKTtcclxuXHRVaVV0aWxzLnNldEF0dHJpYnV0ZU9uSHRtbEVsZW1lbnQoSURzLk1pZGRsZUZvcm1Db250YWluZXIsIEF0dHJpYnV0ZU5hbWUuQXJpYUV4cGFuZGVkLCBBdHRyaWJ1dGVWYWx1ZS5UcnVlKTtcclxuXHRVaVV0aWxzLnNldEF0dHJpYnV0ZU9uSHRtbEVsZW1lbnQoSURzLk1pZGRsZUZvcm1Db250YWluZXIsIEF0dHJpYnV0ZU5hbWUuQXJpYUxhYmVsbGVkQnksIElEcy5PdmVyYWxsU21pbGVBbmNob3IpO1xyXG5cdG92ZXJhbGxIYW5kbGVyKGV2ZW50LCBJRHMuT3ZlcmFsbFNtaWxlQW5jaG9yKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZyb3duIGJ1dHRvbiBldmVudCBoYW5kbGVyXHJcbiAqIEBwYXJhbSBldmVudCBUaGUgRXZlbnQgb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBvdmVyYWxsRnJvd25IYW5kbGVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG5cdHNlbGVjdGVkRmVlZGJhY2tUeXBlID0gRmVlZGJhY2tUeXBlLkZyb3duO1xyXG5cdHNlbGVjdGVkUGFuZWxUeXBlID0gdW5kZWZpbmVkO1xyXG5cdHNldEFyaWFTZWxlY3RlZEF0dHJpYnV0ZXMoSURzLk92ZXJhbGxGcm93bkFuY2hvcik7XHJcblx0VWlVdGlscy5zZXRBdHRyaWJ1dGVPbkh0bWxFbGVtZW50KElEcy5NaWRkbGVGb3JtQ29udGFpbmVyLCBBdHRyaWJ1dGVOYW1lLkFyaWFFeHBhbmRlZCwgQXR0cmlidXRlVmFsdWUuVHJ1ZSk7XHJcblx0VWlVdGlscy5zZXRBdHRyaWJ1dGVPbkh0bWxFbGVtZW50KElEcy5NaWRkbGVGb3JtQ29udGFpbmVyLCBBdHRyaWJ1dGVOYW1lLkFyaWFMYWJlbGxlZEJ5LCBJRHMuT3ZlcmFsbEZyb3duQW5jaG9yKTtcclxuXHRvdmVyYWxsSGFuZGxlcihldmVudCwgSURzLk92ZXJhbGxGcm93bkFuY2hvcik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJZGVhIGJ1dHRvbiBldmVudCBoYW5kbGVyXHJcbiAqIEBwYXJhbSBldmVudCBUaGUgRXZlbnQgb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBvdmVyYWxsSWRlYUhhbmRsZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcblx0c2VsZWN0ZWRGZWVkYmFja1R5cGUgPSBGZWVkYmFja1R5cGUuSWRlYTtcclxuXHRzZWxlY3RlZFBhbmVsVHlwZSA9IHVuZGVmaW5lZDtcclxuXHRzZXRBcmlhU2VsZWN0ZWRBdHRyaWJ1dGVzKElEcy5PdmVyYWxsSWRlYUFuY2hvcik7XHJcblx0VWlVdGlscy5zZXRBdHRyaWJ1dGVPbkh0bWxFbGVtZW50KElEcy5NaWRkbGVGb3JtQ29udGFpbmVyLCBBdHRyaWJ1dGVOYW1lLkFyaWFFeHBhbmRlZCwgQXR0cmlidXRlVmFsdWUuVHJ1ZSk7XHJcblx0VWlVdGlscy5zZXRBdHRyaWJ1dGVPbkh0bWxFbGVtZW50KElEcy5NaWRkbGVGb3JtQ29udGFpbmVyLCBBdHRyaWJ1dGVOYW1lLkFyaWFMYWJlbGxlZEJ5LCBJRHMuT3ZlcmFsbElkZWFBbmNob3IpO1xyXG5cdG92ZXJhbGxIYW5kbGVyKGV2ZW50LCBJRHMuT3ZlcmFsbElkZWFBbmNob3IpO1xyXG59XHJcblxyXG4vKipcclxuICogQnVnIGJ1dHRvbiBldmVudCBoYW5kbGVyXHJcbiAqIEBwYXJhbSBldmVudCBUaGUgRXZlbnQgb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBvdmVyYWxsQnVnSGFuZGxlcihldmVudDogRXZlbnQpOiB2b2lkIHtcclxuXHRzZWxlY3RlZEZlZWRiYWNrVHlwZSA9IEZlZWRiYWNrVHlwZS5CdWc7XHJcblx0c2VsZWN0ZWRQYW5lbFR5cGUgPSB1bmRlZmluZWQ7XHJcblx0c2V0QXJpYVNlbGVjdGVkQXR0cmlidXRlcyhJRHMuT3ZlcmFsbEJ1Z0FuY2hvcik7XHJcblx0VWlVdGlscy5zZXRBdHRyaWJ1dGVPbkh0bWxFbGVtZW50KElEcy5NaWRkbGVGb3JtQ29udGFpbmVyLCBBdHRyaWJ1dGVOYW1lLkFyaWFFeHBhbmRlZCwgQXR0cmlidXRlVmFsdWUuVHJ1ZSk7XHJcblx0VWlVdGlscy5zZXRBdHRyaWJ1dGVPbkh0bWxFbGVtZW50KElEcy5NaWRkbGVGb3JtQ29udGFpbmVyLCBBdHRyaWJ1dGVOYW1lLkFyaWFMYWJlbGxlZEJ5LCBJRHMuT3ZlcmFsbEJ1Z0FuY2hvcik7XHJcblx0b3ZlcmFsbEhhbmRsZXIoZXZlbnQsIElEcy5PdmVyYWxsQnVnQW5jaG9yKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoYW5rcyBwYW5lIGV2ZW50IGhhbmRsZXJcclxuICogQHBhcmFtIGV2ZW50IFRoZSBFdmVudCBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIG92ZXJhbGxUaGFua3NIYW5kbGVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG5cdHNlbGVjdGVkRmVlZGJhY2tUeXBlID0gdW5kZWZpbmVkO1xyXG5cdHNlbGVjdGVkUGFuZWxUeXBlID0gUGFuZWxUeXBlLlRoYW5rcztcclxuXHJcblx0U2V0VmlzaWJpbGl0eUV4Y2VwdEZvcihJRHMuVGhhbmtzUGFuZWxDb250YWluZXIsIGZhbHNlKTtcclxuXHJcblx0b3ZlcmFsbEhhbmRsZXIoZXZlbnQsIHVuZGVmaW5lZCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXRzIHZpc2liaWxpdHkgZm9yIGFsbCBjb250ZW50IHBhbmVzIGV4Y2VwdCBmb3Igc3BlY2lmaWVkLlxyXG4gKiBAcGFyYW0gZXhjZXB0IFBhbmUgbm90IHRvIHNldCB2aXNpYmlsaXR5IGZvci5cclxuICogQHBhcmFtIHZpc2libGUgVmlzaWJpbGl0eSB0byBiZSBzZXRcclxuICovXHJcbmZ1bmN0aW9uIFNldFZpc2liaWxpdHlFeGNlcHRGb3IoZXhjZXB0OiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4pIHtcclxuXHRVaVV0aWxzLnNldEVsZW1lbnRWaXNpYmlsaXR5KElEcy5MZWZ0Rm9ybUNvbnRhaW5lciwgdmlzaWJsZSk7XHJcblx0Y29uc3QgZmVlZGJhY2tQYW5lcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEcy5NaWRkbGVGb3JtQ29udGFpbmVyKS5jaGlsZHJlbjtcclxuXHRmb3IgKGxldCBjdXJyZW50RmVlZGJhY2tQYW5lID0gMDsgY3VycmVudEZlZWRiYWNrUGFuZSA8IGZlZWRiYWNrUGFuZXMubGVuZ3RoOyBjdXJyZW50RmVlZGJhY2tQYW5lKyspIHtcclxuXHRcdGlmIChmZWVkYmFja1BhbmVzW2N1cnJlbnRGZWVkYmFja1BhbmVdLmlkICE9PSBleGNlcHQpIHtcclxuXHRcdFx0VWlVdGlscy5zZXRFbGVtZW50VmlzaWJpbGl0eShmZWVkYmFja1BhbmVzW2N1cnJlbnRGZWVkYmFja1BhbmVdLmlkLCB2aXNpYmxlKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYWluIGNvbnRlbnQgaG9sZGVyIHNsaWRlIGxlZnQgYW5pbWF0aW9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250YWluZXJJZCBUaGUgaWQgb2YgdGhlIGNvbnRhaW5lciB0byBiZSBtYWRlIHZpc2libGVcclxuICogQHJldHVybiB7dm9pZH1cclxuICovXHJcbmZ1bmN0aW9uIG1haW5Db250ZW50SG9sZGVyU2xpZGVMZWZ0KGNvbnRhaW5lcklkOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRmb3IgKGxldCBmZWVkYmFja1R5cGUgaW4gZm9ybVRlbXBsYXRlcykge1xyXG5cdFx0aWYgKGZvcm1UZW1wbGF0ZXMuaGFzT3duUHJvcGVydHkoZmVlZGJhY2tUeXBlKSkge1xyXG5cdFx0XHRVaVV0aWxzLnNldEVsZW1lbnRWaXNpYmlsaXR5KGZvcm1UZW1wbGF0ZXNbZmVlZGJhY2tUeXBlXS5jb250YWluZXJJZCwgZmFsc2UpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKHVzZU5hcnJvd0xheW91dCkge1xyXG5cdFx0VWlVdGlscy5zZXRFbGVtZW50VmlzaWJpbGl0eShJRHMuTGVmdEZvcm1Db250YWluZXIsIGZhbHNlKTtcclxuXHRcdFVpVXRpbHMuc2V0RWxlbWVudFZpc2liaWxpdHkoSURzLk1pZGRsZUZvcm1Db250YWluZXIsIHRydWUpO1xyXG5cdFx0VWlVdGlscy5zZXRFbGVtZW50VmlzaWJpbGl0eShjb250YWluZXJJZCwgdHJ1ZSk7XHJcblx0fSBlbHNlIHtcclxuXHRcdFVpVXRpbHMuYWRkQ2xhc3NCeUlkKElEcy5Db2x1bW5TZXBhcmF0b3JEaXYsIENsYXNzZXMuU2hvd1JpZ2h0Qm9yZGVyKTtcclxuXHRcdFVpVXRpbHMuc2V0RWxlbWVudFZpc2liaWxpdHkoSURzLk1pZGRsZUZvcm1Db250YWluZXIsIHRydWUpO1xyXG5cdFx0VWlVdGlscy5zZXRFbGVtZW50VmlzaWJpbGl0eShjb250YWluZXJJZCwgdHJ1ZSk7XHJcblx0XHRVaVV0aWxzLmFkZENsYXNzQnlJZChJRHMuTGVmdEZvcm1Db250YWluZXIsIENsYXNzZXMuU2xpZGVMZWZ0KTtcclxuXHRcdFVpVXRpbHMuYWRkQ2xhc3NCeUlkKElEcy5NaWRkbGVGb3JtQ29udGFpbmVyLCBDbGFzc2VzLlNsaWRlTGVmdCk7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogU3VibWl0IGJ1dHRvbiBldmVudCBoYW5kbGVyIGZhY3RvcnlcclxuICogQHBhcmFtIGV2ZW50IFRoZSBFdmVudCBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIHN1Ym1pdEJ1dHRvbkhhbmRsZXJGYWN0b3J5KHN1Ym1pdEJ1dHRvbklkOiBzdHJpbmcsIHNwaW5uZXJJZDogc3RyaW5nLCBjb21tZW50SW5wdXRJZDogc3RyaW5nLFxyXG5cdGVtYWlsSW5wdXRJZDogc3RyaW5nLCBzY3JlZW5zaG90Q2hlY2tib3hJZDogc3RyaW5nLCBzY3JlZW5zaG90UHJldmlld0lkOiBzdHJpbmcsXHJcblx0Y2F0ZWdvcmllc0Ryb3Bkb3duSWQ6IHN0cmluZyk6IChldmVudDogRXZlbnQpID0+IHZvaWQge1xyXG5cdHJldHVybiBmdW5jdGlvbiAoZXZlbnQ6IEV2ZW50KSB7XHJcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG5cdFx0VWlVdGlscy5zZXRFbGVtZW50VmlzaWJpbGl0eShzdWJtaXRCdXR0b25JZCwgZmFsc2UpO1xyXG5cdFx0bGV0IHNwaW5uZXIgPSBuZXcgU3Bpbm5lcihzcGlubmVySWQpO1xyXG5cclxuXHRcdGxldCB0cmFuc3BvcnRlcjogVHJhbnNwb3J0ZXIgPSBuZXcgVHJhbnNwb3J0ZXIoXHJcblx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5lbnZpcm9ubWVudCxcclxuXHRcdFx0XCJTYXNcIixcclxuXHRcdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLmFwcElkLFxyXG5cdFx0XHRzZWxlY3RlZEZlZWRiYWNrVHlwZSxcclxuXHRcdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLmFwcGxpY2F0aW9uR3JvdXAsXHJcblx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS50ZWxlbWV0cnlHcm91cCxcclxuXHRcdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLndlYkdyb3VwXHJcblx0XHQpO1xyXG5cclxuXHRcdGxldCBjb21tZW50RWxlbWVudDogSFRNTFRleHRBcmVhRWxlbWVudCA9IDxIVE1MVGV4dEFyZWFFbGVtZW50PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb21tZW50SW5wdXRJZCk7XHJcblx0XHRsZXQgY29tbWVudEVudGVyZWQ6IGJvb2xlYW4gPSAoY29tbWVudEVsZW1lbnQgJiYgISFjb21tZW50RWxlbWVudC52YWx1ZSk7XHJcblx0XHRpZiAoY29tbWVudEVudGVyZWQpIHtcclxuXHRcdFx0dHJhbnNwb3J0ZXIuc2V0Q29tbWVudChjb21tZW50RWxlbWVudC52YWx1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGVtYWlsQ2hlY2tCb3g6IEhUTUxJbnB1dEVsZW1lbnQgPSA8SFRNTElucHV0RWxlbWVudD4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLkVtYWlsQ2hlY2tCb3gpO1xyXG5cdFx0bGV0IGVtYWlsRWxlbWVudDogSFRNTFRleHRBcmVhRWxlbWVudCA9IDxIVE1MVGV4dEFyZWFFbGVtZW50PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbWFpbElucHV0SWQpO1xyXG5cdFx0bGV0IGlzRW1haWxJbmNsdWRlZDogYm9vbGVhbiA9IChlbWFpbEVsZW1lbnQgJiYgISFlbWFpbEVsZW1lbnQudmFsdWUpO1xyXG5cdFx0aWYgKGVtYWlsQ2hlY2tCb3ggJiYgZW1haWxDaGVja0JveC5jaGVja2VkICYmIGlzRW1haWxJbmNsdWRlZCkge1xyXG5cdFx0XHR0cmFuc3BvcnRlci5zZXRFbWFpbChlbWFpbEVsZW1lbnQudmFsdWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBzY3JlZW5zaG90Q2hlY2tCb3ggPSA8SFRNTElucHV0RWxlbWVudD4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2NyZWVuc2hvdENoZWNrYm94SWQpO1xyXG5cdFx0bGV0IHNjcmVlbnNob3RDaGVja0JveFNlbGVjdGVkOiBib29sZWFuID0gc2NyZWVuc2hvdENoZWNrQm94ICYmIHNjcmVlbnNob3RDaGVja0JveC5jaGVja2VkO1xyXG5cclxuXHRcdGxldCBjYXRlZ29yeUVsZW1lbnQ6IEhUTUxTZWxlY3RFbGVtZW50ID0gPEhUTUxTZWxlY3RFbGVtZW50PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYXRlZ29yaWVzRHJvcGRvd25JZCk7XHJcblx0XHRsZXQgaXNDYXRlZ29yeVNlbGVjdGVkOiBib29sZWFuID0gKGNhdGVnb3J5RWxlbWVudCAmJiBjYXRlZ29yeUVsZW1lbnQuc2VsZWN0ZWRJbmRleCA+IDApO1xyXG5cdFx0aWYgKGlzQ2F0ZWdvcnlTZWxlY3RlZCkge1xyXG5cdFx0XHR0cmFuc3BvcnRlci5zZXRDYXRlZ29yeShjYXRlZ29yeUVsZW1lbnQudmFsdWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoTG9nZ2luZy5FdmVudElkcy5JbkFwcC5VSS5Gb3JtLlN1Ym1pdC5WQUxVRSxcclxuXHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5Dcml0aWNhbCxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdEZlZWRiYWNrVHlwZTogc2VsZWN0ZWRGZWVkYmFja1R5cGUsXHJcblx0XHRcdFx0SXNFbWFpbEluY2x1ZGVkOiBpc0VtYWlsSW5jbHVkZWQsXHJcblx0XHRcdFx0SXNTY3JlZW5zaG90SW5jbHVkZWQ6IHNjcmVlbnNob3RDaGVja0JveFNlbGVjdGVkLFxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdGlmIChzY3JlZW5zaG90Q2hlY2tCb3hTZWxlY3RlZCkge1xyXG5cdFx0XHRsZXQgc3RhcnRUaW1lOiBudW1iZXIgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuXHRcdFx0U2NyZWVuc2hvdC5jcmVhdGVTY3JlZW5zaG90KGRvY3VtZW50LmJvZHkpLnRoZW4oXHJcblx0XHRcdFx0KGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpID0+IHtcclxuXHRcdFx0XHRcdGxldCBlbmRUaW1lOiBudW1iZXIgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuXHRcdFx0XHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoTG9nZ2luZy5FdmVudElkcy5TaGFyZWQuU2NyZWVuc2hvdC5SZW5kZXIuU3VjY2Vzcy5WQUxVRSxcclxuXHRcdFx0XHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5Dcml0aWNhbCxcclxuXHRcdFx0XHRcdFx0eyBUaW1lTWlsbGlzZWNvbmRzOiBlbmRUaW1lIC0gc3RhcnRUaW1lIH0pO1xyXG5cdFx0XHRcdFx0dHJhbnNwb3J0ZXIuc2V0U2NyZWVuc2hvdChjYW52YXMpO1xyXG5cdFx0XHRcdFx0dHJhbnNwb3J0ZXIuc3VibWl0KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpLmNhdGNoKChlcnJvcjogYW55KSA9PiB7XHJcblx0XHRcdFx0bGV0IGVuZFRpbWU6IG51bWJlciA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cdFx0XHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoTG9nZ2luZy5FdmVudElkcy5TaGFyZWQuU2NyZWVuc2hvdC5SZW5kZXIuRmFpbGVkLlZBTFVFLFxyXG5cdFx0XHRcdFx0TG9nZ2luZy5Mb2dMZXZlbC5FcnJvcixcclxuXHRcdFx0XHRcdHsgRXJyb3JNZXNzYWdlOiBlcnJvciwgVGltZU1pbGxpc2Vjb25kczogZW5kVGltZSAtIHN0YXJ0VGltZSB9KTtcclxuXHRcdFx0XHR0cmFuc3BvcnRlci5zdWJtaXQoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0cmFuc3BvcnRlci5zdWJtaXQoKTtcclxuXHRcdH1cclxuXHJcblx0XHRzcGlubmVyLmRlc3Ryb3koKTtcclxuXHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuc2V0RmVlZGJhY2tTdWJtaXR0ZWQodHJ1ZSk7XHJcblx0XHRpZiAoIUNvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0SW5BcHBGZWVkYmFja0luaXRPcHRpb25zKCkuaXNTaG93VGhhbmtzKSB7XHJcblx0XHRcdGRpc21pc3NBbGwoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG92ZXJhbGxUaGFua3NIYW5kbGVyKGV2ZW50KTtcclxuXHRcdH1cclxuXHR9O1xyXG59XHJcblxyXG4vKipcclxuICogQ2xvc2UgYnV0dG9uIGV2ZW50XHJcbiAqL1xyXG5mdW5jdGlvbiBDbG9zZUJ1dHRvbihldmVudDogRXZlbnQpIHtcclxuXHRTZXRWaXNpYmlsaXR5RXhjZXB0Rm9yKElEcy5UaGFua3NQYW5lbENvbnRhaW5lciwgdHJ1ZSk7XHJcblx0ZGlzbWlzc0FsbCgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBvdmVyYWxsRmVlZGJhY2tQb3J0YWxJZGVhSGFuZGxlcihldmVudDogRXZlbnQpOiB2b2lkIHtcclxuXHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuXHR3aW5kb3cub3BlbihDb25maWd1cmF0aW9uLmdldCgpLmdldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucygpLmZlZWRiYWNrRm9ydW1VcmwpO1xyXG5cdGRpc21pc3NBbGwoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNjcmVlbnNob3RDaGVja2JveCBDbGljayBldmVudCBoYW5kbGVyLiBQb3B1bGF0ZSBwcmV2aWV3IGlmIGNoZWNrYm94IGlzIGNoZWNrZWQgXHJcbiAqIEBwYXJhbSBzY3JlZW5zaG90Q2hlY2tib3hJZCBUaGUgSWQgb2Ygc2NyZWVuc2hvdCBjaGVja2JveFxyXG4gKiBAcGFyYW0gc2NyZWVuc2hvdFByZXZpZXdJZCBUaGUgSWQgb2YgcHJldmlld1xyXG4gKiBAcGFyYW0gZXZlbnQgVGhlIEV2ZW50IG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gU2NyZWVuc2hvdENoZWNrYm94Q2xpY2tIYW5kbGVyKHNjcmVlbnNob3RDaGVja2JveElkOiBzdHJpbmcsIHNjcmVlbnNob3RQcmV2aWV3SWQ6IHN0cmluZyk6IChldmVudDogRXZlbnQpID0+IHZvaWQge1xyXG5cdHJldHVybiBmdW5jdGlvbiAoZXZlbnQ6IEV2ZW50KSB7XHJcblx0XHRVaVV0aWxzLlNjcmVlbnNob3RQcmV2aWV3QnlDaGVja2JveChzY3JlZW5zaG90Q2hlY2tib3hJZCwgc2NyZWVuc2hvdFByZXZpZXdJZCk7XHJcblx0fTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENhbmNlbCBidXR0b24gZXZlbnQgaGFuZGxlciBmYWN0b3J5XHJcbiAqL1xyXG5mdW5jdGlvbiBDYW5jZWxCdXR0b25IYW5kbGVyKCk6IHZvaWQge1xyXG5cdGRpc21pc3NBbGwoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW1haWxDaGVja0JveEhhbmRsZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcblx0Ly8gc2hvdyBlbWFpbCBpZiBjaGVja2VkIGFuZCBzaG93IGRlZmF1bHQgc3RyaW5nIGlmIHVuY2hlY2tlZFxyXG5cdGxldCBlbWFpbENoZWNrQm94OiBIVE1MSW5wdXRFbGVtZW50ID0gPEhUTUxJbnB1dEVsZW1lbnQ+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEcy5FbWFpbENoZWNrQm94KTtcclxuXHRpZiAoZW1haWxDaGVja0JveCkge1xyXG5cdFx0Ly8gbXVsdGlGZWVkYmFjayBmb3JtIGVtYWlsVGV4dEJveCBoYXMgaWQgIElEcy5CYXNpY0Zvcm1FbWFpbElucHV0XHJcblx0XHQvLyBzaW5nbGVGZWVkYmFjayBmb3JtIGVtYWlsVGV4dEJveCBoYXMgaWQgSURzLlNpbmdsZUZvcm1FbWFpbElucHV0XHJcblx0XHQvLyBGaXJzdCB3ZSB0cnkgdG8gZ2V0IHdpdGggSURzLlNpbmdsZUZvcm1FbWFpbElucHV0XHJcblx0XHQvLyBpZiBpdCBkb2VzIG5vdCBleGlzdHMsIHdoaWNoIG1lYW5zIHRoaXMgaXMgYSBtdWx0aUZlZWRiYWNrIGZvcm0sIHRoZW4gd2UgZ2V0IGl0IHdpdGggSURzLkJhc2ljRm9ybUVtYWlsSW5wdXRcclxuXHRcdGxldCBlbWFpbFRleHRCb3g6IEhUTUxJbnB1dEVsZW1lbnQgPSA8SFRNTElucHV0RWxlbWVudD4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLlNpbmdsZUZvcm1FbWFpbElucHV0KTtcclxuXHRcdGlmICghZW1haWxUZXh0Qm94KSB7XHJcblx0XHRcdGVtYWlsVGV4dEJveCA9IDxIVE1MSW5wdXRFbGVtZW50PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRHMuQmFzaWNGb3JtRW1haWxJbnB1dCk7XHJcblx0XHR9XHJcblx0XHRlbWFpbFRleHRCb3gudmFsdWUgPSBlbWFpbENoZWNrQm94LmNoZWNrZWQgPyBDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkudXNlckVtYWlsIDogbnVsbDtcclxuXHRcdGVtYWlsVGV4dEJveC5kaXNhYmxlZCA9ICFlbWFpbENoZWNrQm94LmNoZWNrZWQ7XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBiYXNpY0Zvcm1JbnB1dEhhbmRsZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcblx0bGV0IGNvbW1lbnRFbGVtZW50OiBIVE1MVGV4dEFyZWFFbGVtZW50ID0gPEhUTUxUZXh0QXJlYUVsZW1lbnQ+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEcy5CYXNpY0Zvcm1Db21tZW50KTtcclxuXHRsZXQgY29tbWVudEVudGVyZWQ6IGJvb2xlYW4gPSAoY29tbWVudEVsZW1lbnQgJiYgISFjb21tZW50RWxlbWVudC52YWx1ZSk7XHJcblx0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEcy5CYXNpY0Zvcm1TdWJtaXRCdXR0b24pIGFzIEhUTUxCdXR0b25FbGVtZW50KS5kaXNhYmxlZCA9ICFjb21tZW50RW50ZXJlZDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2luZ2xlRm9ybUlucHV0SGFuZGxlcihldmVudDogRXZlbnQpOiB2b2lkIHtcclxuXHRsZXQgY29tbWVudEVsZW1lbnQ6IEhUTUxUZXh0QXJlYUVsZW1lbnQgPSA8SFRNTFRleHRBcmVhRWxlbWVudD4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLlNpbmdsZUZvcm1Db21tZW50KTtcclxuXHRsZXQgY29tbWVudEVudGVyZWQ6IGJvb2xlYW4gPSAoY29tbWVudEVsZW1lbnQgJiYgISFjb21tZW50RWxlbWVudC52YWx1ZSk7XHJcblx0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEcy5TaW5nbGVGb3JtU3VibWl0QnV0dG9uKSBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZGlzYWJsZWQgPSAhY29tbWVudEVudGVyZWQ7XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/UI/BellyBand/Events.ts\n')},"./scripts/app/UI/BellyBand/FormTemplates/BasicFormTemplate.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return generate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "containerId", function() { return containerId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onSelect", function() { return onSelect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEmailEnabled", function() { return isEmailEnabled; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isScreenshotEnabled", function() { return isScreenshotEnabled; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "type", function() { return type; });\n/* harmony import */ var _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../../UIStrings/UIStrings */ "./scripts/app/UIStrings/UIStrings.ts");\n/* harmony import */ var _FormTemplateType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FormTemplateType */ "./scripts/app/UI/BellyBand/FormTemplates/FormTemplateType.ts");\n/* harmony import */ var _CategoriesDropdown__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../CategoriesDropdown */ "./scripts/app/UI/CategoriesDropdown.ts");\n/* harmony import */ var _RatingControl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../RatingControl */ "./scripts/app/UI/RatingControl.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../../../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../../Constants */ "./scripts/app/Constants.ts");\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../../UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/**\r\n * BasicFormTemplate.ts\r\n *\r\n * A form template with contact info fields.\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Generate the markup\r\n * @returns the markup as json\r\n */\r\nfunction generate() {\r\n    var categories = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getInAppFeedbackLaunchOptions().categories;\r\n    var formSchema = {\r\n        children: [\r\n            {\r\n                attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].For, value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormComment }],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FontSubtitle, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].TextAlignLeft, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormQuestionMiddleText],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormQuestionMiddleText,\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Label,\r\n                innerText: !_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getInAppFeedbackInitOptions().transitionEnabled\r\n                    ? _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().FeedbackSubtitle\r\n                    : "",\r\n            },\r\n            {\r\n                attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Id, value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormCategoriesDropdown },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].AriaLabel, value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.CategoryPlaceholder }],\r\n                brs: categories.show,\r\n                children: _CategoriesDropdown__WEBPACK_IMPORTED_MODULE_2__["generate"](categories ? categories.customCategories : null),\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FontSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormCategoriesDropdown, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].TextInput],\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Select,\r\n            },\r\n            {\r\n                attributes: [\r\n                    {\r\n                        name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Placeholder,\r\n                        value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.CommentPlaceholder,\r\n                    },\r\n                    {\r\n                        name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].MaxLength,\r\n                        value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeValue"].TextAreaMaxLength,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FontSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormComment, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].TextInput],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormComment,\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].TextArea,\r\n            },\r\n            {\r\n                brs: false,\r\n                children: [\r\n                    {\r\n                        attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].For, value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormRating }],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FontText, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].TextAlignLeft, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormRatingLabel],\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.RatingLabel,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Label,\r\n                    },\r\n                    _RatingControl__WEBPACK_IMPORTED_MODULE_3__["generate"](_UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormRating),\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormRatingContainer],\r\n            },\r\n            {\r\n                brs: isEmailEnabled(),\r\n                children: [\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Type,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeValue"].Checkbox,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeValue"].Unchecked,\r\n                                value: "",\r\n                            },\r\n                        ],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormEmailCheckBox, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].CheckBox],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].EmailCheckBox,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Input,\r\n                    },\r\n                    {\r\n                        attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].For, value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].EmailCheckBox }],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FontSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].TextAlignLeft, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormEmailLabel],\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.EmailCheckBoxLabel,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Label,\r\n                    },\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Type,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeValue"].Text,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Placeholder,\r\n                                value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.EmailPlaceholder,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].AriaLabel,\r\n                                value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.EmailPlaceholder,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Name,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormEmailInput,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].MaxLength,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeValue"].TextAreaMaxLength,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Value,\r\n                                value: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getInAppFeedbackInitOptions().userEmail\r\n                                    ? _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getInAppFeedbackInitOptions().userEmail\r\n                                    : "",\r\n                            },\r\n                        ],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FontSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormEmailInput, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].TextInput],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormEmailInput,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Input,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormEmailContainer],\r\n            },\r\n            {\r\n                children: [\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Type,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeValue"].Checkbox,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Value,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeValue"].Unchecked,\r\n                            },\r\n                        ],\r\n                        brs: isScreenshotEnabled(),\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormScreenshotCheckbox, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].CheckBox],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormScreenshotCheckbox,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Input,\r\n                    },\r\n                    {\r\n                        attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].For, value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormScreenshotCheckbox }],\r\n                        brs: isScreenshotEnabled(),\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FontSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].TextAlignLeft, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormScreenshotLabel],\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.ScreenshotLabel,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Label,\r\n                    },\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Preview,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeValue"].ScreenshotPreview,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Alt,\r\n                                value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.ScreenshotImgAltText,\r\n                            },\r\n                        ],\r\n                        brs: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getInAppFeedbackInitOptions().screenshot,\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormScreenshotPreview,\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormScreenshotPreview],\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Img,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormScreenshotContainer],\r\n            },\r\n            {\r\n                children: [\r\n                    {\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FontSubSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].TextAlignLeft],\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.PrivacyLabel,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Label,\r\n                    },\r\n                    {\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FontSubSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].TextAlignLeft],\r\n                        innerText: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().isCommercialHost\r\n                            ? _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.PrivacyConsent + " " : "",\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Label,\r\n                    },\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].HRef,\r\n                                value: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().privacyUrl,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Target,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeValue"].BlankWindow,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Rel,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeValue"].NoReferrer,\r\n                            },\r\n                        ],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].Link],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].PrivacyStatementLink,\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().PrivacyStatement,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Anchor,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FontSubSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].TextAlignLeft, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].PrivacyStatementLinkDiv],\r\n            },\r\n            {\r\n                children: [\r\n                    {\r\n                        attributes: [\r\n                            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Type, value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeValue"].Button },\r\n                            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].AriaLabel, value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.Cancel },\r\n                        ],\r\n                        classes: [\r\n                            _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].CancelButton,\r\n                        ],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormCancelButton,\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.Cancel,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Button,\r\n                    },\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeName"].Disabled,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["AttributeValue"].True,\r\n                            },\r\n                        ],\r\n                        classes: [\r\n                            _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].SubmitButton,\r\n                        ],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormSubmitButton,\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.Submit,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Button,\r\n                    },\r\n                    {\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].Spinner, _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].Hidden],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormSubmitButtonSpinner,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Tags"].Div,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].FormSubmitButtonContainer],\r\n            },\r\n        ],\r\n        classes: [\r\n            _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getInAppFeedbackInitOptions().transitionEnabled ? _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].Hidden : _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].Visible,\r\n            _UiConstants__WEBPACK_IMPORTED_MODULE_6__["Classes"].MarginLeft60px,\r\n        ],\r\n        id: containerId,\r\n    };\r\n    return formSchema;\r\n}\r\n/**\r\n * The id for the container. This is the id of the top-most element and should\r\n * be unique to each form\r\n */\r\nvar containerId = _UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormContainer;\r\n/**\r\n * Forms may be used for different feedback types. This method executes form\r\n * specific logic when the feedback type is selected\r\n * @param feedbackType feedback type\r\n */\r\nfunction onSelect(feedbackType) {\r\n    switch (feedbackType) {\r\n        case _Constants__WEBPACK_IMPORTED_MODULE_5__["FeedbackType"].Smile: {\r\n            document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormQuestionMiddleText).textContent = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().SmileForm.Title;\r\n            break;\r\n        }\r\n        case _Constants__WEBPACK_IMPORTED_MODULE_5__["FeedbackType"].Frown: {\r\n            document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormQuestionMiddleText).textContent = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().FrownForm.Title;\r\n            break;\r\n        }\r\n        case _Constants__WEBPACK_IMPORTED_MODULE_5__["FeedbackType"].Idea: {\r\n            document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormQuestionMiddleText).textContent = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().IdeaForm.Title;\r\n            break;\r\n        }\r\n        case _Constants__WEBPACK_IMPORTED_MODULE_5__["FeedbackType"].Bug: {\r\n            document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormQuestionMiddleText).textContent = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().BugForm.Title;\r\n            break;\r\n        }\r\n        default: {\r\n            break;\r\n        }\r\n    }\r\n    document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_6__["IDs"].BasicFormComment).focus();\r\n}\r\nfunction isEmailEnabled() {\r\n    if (!_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getInAppFeedbackInitOptions().showEmailAddress) {\r\n        return false;\r\n    }\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().isCommercialHost) {\r\n        return _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().emailPolicyValue === 1 /* Enabled */;\r\n    }\r\n    return true;\r\n}\r\nfunction isScreenshotEnabled() {\r\n    if (!_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getInAppFeedbackInitOptions().screenshot) {\r\n        return false;\r\n    }\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().isCommercialHost) {\r\n        return _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().screenshotPolicyValue === 1 /* Enabled */;\r\n    }\r\n    return true;\r\n}\r\n/**\r\n * Form template type\r\n */\r\nvar type = _FormTemplateType__WEBPACK_IMPORTED_MODULE_1__["FormTemplateType"].Basic;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9CZWxseUJhbmQvRm9ybVRlbXBsYXRlcy9CYXNpY0Zvcm1UZW1wbGF0ZS50cz83NjVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRXlEO0FBQ047QUFFVztBQUNWO0FBQ2lCO0FBQ1I7QUFDd0I7QUFFeEY7OztHQUdHO0FBQ0ksU0FBUyxRQUFRO0lBQ3ZCLElBQUksVUFBVSxHQUFHLGdFQUFpQixFQUFFLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxVQUFVLENBQUM7SUFDaEYsSUFBSSxVQUFVLEdBQUc7UUFDaEIsUUFBUSxFQUFFO1lBQ1Q7Z0JBQ0MsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsMERBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLGdEQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDdEUsT0FBTyxFQUFFLENBQUMsb0RBQU8sQ0FBQyxZQUFZLEVBQUUsb0RBQU8sQ0FBQyxhQUFhLEVBQUUsb0RBQU8sQ0FBQyxzQkFBc0IsQ0FBQztnQkFDdEYsRUFBRSxFQUFFLGdEQUFHLENBQUMsMkJBQTJCO2dCQUNuQyxHQUFHLEVBQUUsaURBQUksQ0FBQyxLQUFLO2dCQUNmLFNBQVMsRUFBRSxDQUFDLGdFQUFpQixFQUFFLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxpQkFBaUI7b0JBQzlFLENBQUMsQ0FBQyxpRUFBc0IsRUFBRSxDQUFDLGdCQUFnQjtvQkFDM0MsQ0FBQyxDQUFDLEVBQUU7YUFDTDtZQUNEO2dCQUNDLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxnREFBRyxDQUFDLDJCQUEyQixFQUFFO29CQUMvRSxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUVBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDNUYsR0FBRyxFQUFFLFVBQVUsQ0FBQyxJQUFJO2dCQUNwQixRQUFRLEVBQUUsNERBQTJCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDdEYsT0FBTyxFQUFFLENBQUMsb0RBQU8sQ0FBQyxXQUFXLEVBQUUsb0RBQU8sQ0FBQyxzQkFBc0IsRUFBRSxvREFBTyxDQUFDLFNBQVMsQ0FBQztnQkFDakYsR0FBRyxFQUFFLGlEQUFJLENBQUMsTUFBTTthQUNoQjtZQUNEO2dCQUNDLFVBQVUsRUFBRTtvQkFDWDt3QkFDQyxJQUFJLEVBQUUsMERBQWEsQ0FBQyxXQUFXO3dCQUMvQixLQUFLLEVBQUUsaUVBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCO3FCQUN2RDtvQkFDRDt3QkFDQyxJQUFJLEVBQUUsMERBQWEsQ0FBQyxTQUFTO3dCQUM3QixLQUFLLEVBQUUsMkRBQWMsQ0FBQyxpQkFBaUI7cUJBQ3ZDO2lCQUNEO2dCQUNELE9BQU8sRUFBRSxDQUFDLG9EQUFPLENBQUMsV0FBVyxFQUFFLG9EQUFPLENBQUMsV0FBVyxFQUFFLG9EQUFPLENBQUMsU0FBUyxDQUFDO2dCQUN0RSxFQUFFLEVBQUUsZ0RBQUcsQ0FBQyxnQkFBZ0I7Z0JBQ3hCLEdBQUcsRUFBRSxpREFBSSxDQUFDLFFBQVE7YUFDbEI7WUFDRDtnQkFDQyxHQUFHLEVBQUUsS0FBSztnQkFDVixRQUFRLEVBQUU7b0JBQ1Q7d0JBQ0MsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsMERBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLGdEQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3JFLE9BQU8sRUFBRSxDQUFDLG9EQUFPLENBQUMsUUFBUSxFQUFFLG9EQUFPLENBQUMsYUFBYSxFQUFFLG9EQUFPLENBQUMsZUFBZSxDQUFDO3dCQUMzRSxTQUFTLEVBQUUsaUVBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVzt3QkFDcEQsR0FBRyxFQUFFLGlEQUFJLENBQUMsS0FBSztxQkFDZjtvQkFDRCx1REFBc0IsQ0FBQyxnREFBRyxDQUFDLGVBQWUsQ0FBQztpQkFDM0M7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsb0RBQU8sQ0FBQyxtQkFBbUIsQ0FBQzthQUN0QztZQUNEO2dCQUNDLEdBQUcsRUFBRSxjQUFjLEVBQUU7Z0JBQ3JCLFFBQVEsRUFBRTtvQkFDVDt3QkFDQyxVQUFVLEVBQUU7NEJBQ1g7Z0NBQ0MsSUFBSSxFQUFFLDBEQUFhLENBQUMsSUFBSTtnQ0FDeEIsS0FBSyxFQUFFLDJEQUFjLENBQUMsUUFBUTs2QkFDOUI7NEJBQ0Q7Z0NBQ0MsSUFBSSxFQUFFLDJEQUFjLENBQUMsU0FBUztnQ0FDOUIsS0FBSyxFQUFFLEVBQUU7NkJBQ1Q7eUJBQ0Q7d0JBQ0QsT0FBTyxFQUFFLENBQUMsb0RBQU8sQ0FBQyxpQkFBaUIsRUFBRSxvREFBTyxDQUFDLFFBQVEsQ0FBQzt3QkFDdEQsRUFBRSxFQUFFLGdEQUFHLENBQUMsYUFBYTt3QkFDckIsR0FBRyxFQUFFLGlEQUFJLENBQUMsS0FBSztxQkFDZjtvQkFDRDt3QkFDQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsZ0RBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDbkUsT0FBTyxFQUFFLENBQUMsb0RBQU8sQ0FBQyxXQUFXLEVBQUUsb0RBQU8sQ0FBQyxhQUFhLEVBQUUsb0RBQU8sQ0FBQyxjQUFjLENBQUM7d0JBQzdFLFNBQVMsRUFBRSxpRUFBc0IsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0I7d0JBQzNELEdBQUcsRUFBRSxpREFBSSxDQUFDLEtBQUs7cUJBQ2Y7b0JBQ0Q7d0JBQ0MsVUFBVSxFQUFFOzRCQUNYO2dDQUNDLElBQUksRUFBRSwwREFBYSxDQUFDLElBQUk7Z0NBQ3hCLEtBQUssRUFBRSwyREFBYyxDQUFDLElBQUk7NkJBQzFCOzRCQUNEO2dDQUNDLElBQUksRUFBRSwwREFBYSxDQUFDLFdBQVc7Z0NBQy9CLEtBQUssRUFBRSxpRUFBc0IsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7NkJBQ3JEOzRCQUNEO2dDQUNDLElBQUksRUFBRSwwREFBYSxDQUFDLFNBQVM7Z0NBQzdCLEtBQUssRUFBRSxpRUFBc0IsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7NkJBQ3JEOzRCQUNEO2dDQUNDLElBQUksRUFBRSwwREFBYSxDQUFDLElBQUk7Z0NBQ3hCLEtBQUssRUFBRSxnREFBRyxDQUFDLG1CQUFtQjs2QkFDOUI7NEJBQ0Q7Z0NBQ0MsSUFBSSxFQUFFLDBEQUFhLENBQUMsU0FBUztnQ0FDN0IsS0FBSyxFQUFFLDJEQUFjLENBQUMsaUJBQWlCOzZCQUN2Qzs0QkFDRDtnQ0FDQyxJQUFJLEVBQUUsMERBQWEsQ0FBQyxLQUFLO2dDQUN6QixLQUFLLEVBQ0osZ0VBQWlCLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLFNBQVM7b0NBQzFELENBQUMsQ0FBQyxnRUFBaUIsRUFBRSxDQUFDLDJCQUEyQixFQUFFLENBQUMsU0FBUztvQ0FDN0QsQ0FBQyxDQUFDLEVBQUU7NkJBQ047eUJBQ0Q7d0JBQ0QsT0FBTyxFQUFFLENBQUMsb0RBQU8sQ0FBQyxXQUFXLEVBQUUsb0RBQU8sQ0FBQyxjQUFjLEVBQUUsb0RBQU8sQ0FBQyxTQUFTLENBQUM7d0JBQ3pFLEVBQUUsRUFBRSxnREFBRyxDQUFDLG1CQUFtQjt3QkFDM0IsR0FBRyxFQUFFLGlEQUFJLENBQUMsS0FBSztxQkFDZjtpQkFDRDtnQkFDRCxPQUFPLEVBQUUsQ0FBQyxvREFBTyxDQUFDLGtCQUFrQixDQUFDO2FBQ3JDO1lBQ0Q7Z0JBQ0MsUUFBUSxFQUFFO29CQUNUO3dCQUNDLFVBQVUsRUFBRTs0QkFDWDtnQ0FDQyxJQUFJLEVBQUUsMERBQWEsQ0FBQyxJQUFJO2dDQUN4QixLQUFLLEVBQUUsMkRBQWMsQ0FBQyxRQUFROzZCQUM5Qjs0QkFDRDtnQ0FDQyxJQUFJLEVBQUUsMERBQWEsQ0FBQyxLQUFLO2dDQUN6QixLQUFLLEVBQUUsMkRBQWMsQ0FBQyxTQUFTOzZCQUMvQjt5QkFDRDt3QkFDRCxHQUFHLEVBQUUsbUJBQW1CLEVBQUU7d0JBQzFCLE9BQU8sRUFBRSxDQUFDLG9EQUFPLENBQUMsc0JBQXNCLEVBQUUsb0RBQU8sQ0FBQyxRQUFRLENBQUM7d0JBQzNELEVBQUUsRUFBRSxnREFBRyxDQUFDLDJCQUEyQjt3QkFDbkMsR0FBRyxFQUFFLGlEQUFJLENBQUMsS0FBSztxQkFDZjtvQkFDRDt3QkFDQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsZ0RBQUcsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO3dCQUNqRixHQUFHLEVBQUUsbUJBQW1CLEVBQUU7d0JBQzFCLE9BQU8sRUFBRSxDQUFDLG9EQUFPLENBQUMsV0FBVyxFQUFFLG9EQUFPLENBQUMsYUFBYSxFQUFFLG9EQUFPLENBQUMsbUJBQW1CLENBQUM7d0JBQ2xGLFNBQVMsRUFBRSxpRUFBc0IsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlO3dCQUN4RCxHQUFHLEVBQUUsaURBQUksQ0FBQyxLQUFLO3FCQUNmO29CQUNEO3dCQUNDLFVBQVUsRUFBRTs0QkFDWDtnQ0FDQyxJQUFJLEVBQUUsMERBQWEsQ0FBQyxPQUFPO2dDQUMzQixLQUFLLEVBQUUsMkRBQWMsQ0FBQyxpQkFBaUI7NkJBQ3ZDOzRCQUNEO2dDQUNDLElBQUksRUFBRSwwREFBYSxDQUFDLEdBQUc7Z0NBQ3ZCLEtBQUssRUFBRSxpRUFBc0IsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0I7NkJBQ3pEO3lCQUNEO3dCQUNELEdBQUcsRUFBRSxnRUFBaUIsRUFBRSxDQUFDLDJCQUEyQixFQUFFLENBQUMsVUFBVTt3QkFDakUsRUFBRSxFQUFFLGdEQUFHLENBQUMsMEJBQTBCO3dCQUNsQyxPQUFPLEVBQUUsQ0FBQyxvREFBTyxDQUFDLHFCQUFxQixDQUFDO3dCQUN4QyxHQUFHLEVBQUUsaURBQUksQ0FBQyxHQUFHO3FCQUNiO2lCQUNEO2dCQUNELE9BQU8sRUFBRSxDQUFDLG9EQUFPLENBQUMsdUJBQXVCLENBQUM7YUFDMUM7WUFDRDtnQkFDQyxRQUFRLEVBQ1A7b0JBQ0M7d0JBQ0MsT0FBTyxFQUFFLENBQUMsb0RBQU8sQ0FBQyxjQUFjLEVBQUUsb0RBQU8sQ0FBQyxhQUFhLENBQUM7d0JBQ3hELFNBQVMsRUFBRSxpRUFBc0IsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZO3dCQUNyRCxHQUFHLEVBQUUsaURBQUksQ0FBQyxLQUFLO3FCQUNmO29CQUNEO3dCQUNDLE9BQU8sRUFBRSxDQUFDLG9EQUFPLENBQUMsY0FBYyxFQUFFLG9EQUFPLENBQUMsYUFBYSxDQUFDO3dCQUN4RCxTQUFTLEVBQUUsZ0VBQWlCLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLGdCQUFnQjs0QkFDckUsQ0FBQyxDQUFDLGlFQUFzQixFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQzFELEdBQUcsRUFBRSxpREFBSSxDQUFDLEtBQUs7cUJBQ2Y7b0JBQ0Q7d0JBQ0MsVUFBVSxFQUFFOzRCQUNYO2dDQUNDLElBQUksRUFBRSwwREFBYSxDQUFDLElBQUk7Z0NBQ3hCLEtBQUssRUFBRSxnRUFBaUIsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsVUFBVTs2QkFDNUQ7NEJBQ0Q7Z0NBQ0MsSUFBSSxFQUFFLDBEQUFhLENBQUMsTUFBTTtnQ0FDMUIsS0FBSyxFQUFFLDJEQUFjLENBQUMsV0FBVzs2QkFDakM7NEJBQ0Q7Z0NBQ0MsSUFBSSxFQUFFLDBEQUFhLENBQUMsR0FBRztnQ0FDdkIsS0FBSyxFQUFFLDJEQUFjLENBQUMsVUFBVTs2QkFDaEM7eUJBQ0Q7d0JBQ0QsT0FBTyxFQUFFLENBQUMsb0RBQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ3ZCLEVBQUUsRUFBRSxnREFBRyxDQUFDLG9CQUFvQjt3QkFDNUIsU0FBUyxFQUFFLGlFQUFzQixFQUFFLENBQUMsZ0JBQWdCO3dCQUNwRCxHQUFHLEVBQUUsaURBQUksQ0FBQyxNQUFNO3FCQUNoQjtpQkFDRDtnQkFDRixPQUFPLEVBQUUsQ0FBQyxvREFBTyxDQUFDLGNBQWMsRUFBRSxvREFBTyxDQUFDLGFBQWEsRUFBRSxvREFBTyxDQUFDLHVCQUF1QixDQUFDO2FBQ3pGO1lBQ0Q7Z0JBQ0MsUUFBUSxFQUFFO29CQUNUO3dCQUNDLFVBQVUsRUFBRTs0QkFDWCxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsMkRBQWMsQ0FBQyxNQUFNLEVBQUU7NEJBQzFELEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxpRUFBc0IsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7eUJBQzlFO3dCQUNELE9BQU8sRUFBRTs0QkFDUixvREFBTyxDQUFDLFlBQVk7eUJBQ3BCO3dCQUNELEVBQUUsRUFBRSxnREFBRyxDQUFDLHFCQUFxQjt3QkFDN0IsU0FBUyxFQUFFLGlFQUFzQixFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU07d0JBQy9DLEdBQUcsRUFBRSxpREFBSSxDQUFDLE1BQU07cUJBQ2hCO29CQUNEO3dCQUNDLFVBQVUsRUFBRTs0QkFDWDtnQ0FDQyxJQUFJLEVBQUUsMERBQWEsQ0FBQyxRQUFRO2dDQUM1QixLQUFLLEVBQUUsMkRBQWMsQ0FBQyxJQUFJOzZCQUMxQjt5QkFDRDt3QkFDRCxPQUFPLEVBQUU7NEJBQ1Isb0RBQU8sQ0FBQyxZQUFZO3lCQUNwQjt3QkFDRCxFQUFFLEVBQUUsZ0RBQUcsQ0FBQyxxQkFBcUI7d0JBQzdCLFNBQVMsRUFBRSxpRUFBc0IsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNO3dCQUMvQyxHQUFHLEVBQUUsaURBQUksQ0FBQyxNQUFNO3FCQUNoQjtvQkFDRDt3QkFDQyxPQUFPLEVBQUUsQ0FBQyxvREFBTyxDQUFDLE9BQU8sRUFBRSxvREFBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDMUMsRUFBRSxFQUFFLGdEQUFHLENBQUMsNEJBQTRCO3dCQUNwQyxHQUFHLEVBQUUsaURBQUksQ0FBQyxHQUFHO3FCQUNiO2lCQUNEO2dCQUNELE9BQU8sRUFBRSxDQUFDLG9EQUFPLENBQUMseUJBQXlCLENBQUM7YUFDNUM7U0FDRDtRQUNELE9BQU8sRUFBRTtZQUNSLGdFQUFpQixFQUFFLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsb0RBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG9EQUFPLENBQUMsT0FBTztZQUN0RyxvREFBTyxDQUFDLGNBQWM7U0FDdEI7UUFDRCxFQUFFLEVBQUUsV0FBVztLQUNmLENBQUM7SUFDRixPQUFPLFVBQVUsQ0FBQztBQUNuQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0ksSUFBSSxXQUFXLEdBQVcsZ0RBQUcsQ0FBQyxrQkFBa0IsQ0FBQztBQUV4RDs7OztHQUlHO0FBQ0ksU0FBUyxRQUFRLENBQUMsWUFBMEI7SUFDbEQsUUFBUSxZQUFZLEVBQUU7UUFDckIsS0FBSyx1REFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0RBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLFdBQVcsR0FBRyxpRUFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDaEgsTUFBTTtTQUNOO1FBQ0QsS0FBSyx1REFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0RBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLFdBQVcsR0FBRyxpRUFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDaEgsTUFBTTtTQUNOO1FBQ0QsS0FBSyx1REFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0RBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLFdBQVcsR0FBRyxpRUFBc0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDL0csTUFBTTtTQUNOO1FBQ0QsS0FBSyx1REFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0RBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLFdBQVcsR0FBRyxpRUFBc0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDOUcsTUFBTTtTQUNOO1FBQ0QsT0FBTyxDQUFDLENBQUM7WUFDUixNQUFNO1NBQ047S0FDRDtJQUVELFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0RBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZELENBQUM7QUFFTSxTQUFTLGNBQWM7SUFDN0IsSUFBSSxDQUFDLGdFQUFpQixFQUFFLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN4RSxPQUFPLEtBQUssQ0FBQztLQUNiO0lBQ0QsSUFBSSxnRUFBaUIsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsZ0JBQWdCLEVBQUU7UUFDaEUsT0FBTyxnRUFBaUIsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsZ0JBQWdCLG9CQUF1QixDQUFDO0tBQzFGO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDYixDQUFDO0FBRU0sU0FBUyxtQkFBbUI7SUFDbEMsSUFBSSxDQUFDLGdFQUFpQixFQUFFLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxVQUFVLEVBQUU7UUFDbEUsT0FBTyxLQUFLLENBQUM7S0FDYjtJQUNELElBQUksZ0VBQWlCLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLGdCQUFnQixFQUFFO1FBQ2hFLE9BQU8sZ0VBQWlCLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLHFCQUFxQixvQkFBdUIsQ0FBQztLQUMvRjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2IsQ0FBQztBQUNEOztHQUVHO0FBQ0ksSUFBSSxJQUFJLEdBQXFCLGtFQUFnQixDQUFDLEtBQUssQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL1VJL0JlbGx5QmFuZC9Gb3JtVGVtcGxhdGVzL0Jhc2ljRm9ybVRlbXBsYXRlLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEJhc2ljRm9ybVRlbXBsYXRlLnRzXHJcbiAqXHJcbiAqIEEgZm9ybSB0ZW1wbGF0ZSB3aXRoIGNvbnRhY3QgaW5mbyBmaWVsZHMuXHJcbiAqL1xyXG5cclxuaW1wb3J0ICogYXMgVUlTdHJpbmdzIGZyb20gXCIuLy4uLy4uLy4uL1VJU3RyaW5ncy9VSVN0cmluZ3NcIjtcclxuaW1wb3J0IHsgRm9ybVRlbXBsYXRlVHlwZSB9IGZyb20gXCIuL0Zvcm1UZW1wbGF0ZVR5cGVcIjtcclxuaW1wb3J0IHsgSVVJQXNKc29uIH0gZnJvbSBcIi4vLi4vLi4vUmVuZGVyZXJcIjtcclxuaW1wb3J0ICogYXMgQ2F0ZWdvcmllc0Ryb3Bkb3duIGZyb20gXCIuLy4uLy4uL0NhdGVnb3JpZXNEcm9wZG93blwiO1xyXG5pbXBvcnQgKiBhcyBSYXRpbmdDb250cm9sIGZyb20gXCIuLy4uLy4uL1JhdGluZ0NvbnRyb2xcIjtcclxuaW1wb3J0ICogYXMgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi8uLi8uLi8uLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHsgRmVlZGJhY2tUeXBlLCBPQ1BTVmFsdWVzIH0gZnJvbSBcIi4vLi4vLi4vLi4vQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEF0dHJpYnV0ZU5hbWUsIEF0dHJpYnV0ZVZhbHVlLCBDbGFzc2VzLCBJRHMsIFRhZ3MgfSBmcm9tIFwiLi8uLi8uLi9VaUNvbnN0YW50c1wiO1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIHRoZSBtYXJrdXBcclxuICogQHJldHVybnMgdGhlIG1hcmt1cCBhcyBqc29uXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGUoKTogSVVJQXNKc29uIHtcclxuXHRsZXQgY2F0ZWdvcmllcyA9IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0SW5BcHBGZWVkYmFja0xhdW5jaE9wdGlvbnMoKS5jYXRlZ29yaWVzO1xyXG5cdGxldCBmb3JtU2NoZW1hID0ge1xyXG5cdFx0Y2hpbGRyZW46IFtcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IFt7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuRm9yLCB2YWx1ZTogSURzLkJhc2ljRm9ybUNvbW1lbnQgfV0sXHJcblx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFN1YnRpdGxlLCBDbGFzc2VzLlRleHRBbGlnbkxlZnQsIENsYXNzZXMuRm9ybVF1ZXN0aW9uTWlkZGxlVGV4dF0sXHJcblx0XHRcdFx0aWQ6IElEcy5CYXNpY0Zvcm1RdWVzdGlvbk1pZGRsZVRleHQsXHJcblx0XHRcdFx0dGFnOiBUYWdzLkxhYmVsLFxyXG5cdFx0XHRcdGlubmVyVGV4dDogIUNvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0SW5BcHBGZWVkYmFja0luaXRPcHRpb25zKCkudHJhbnNpdGlvbkVuYWJsZWRcclxuXHRcdFx0XHRcdD8gVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkZlZWRiYWNrU3VidGl0bGVcclxuXHRcdFx0XHRcdDogXCJcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IFt7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuSWQsIHZhbHVlOiBJRHMuQmFzaWNGb3JtQ2F0ZWdvcmllc0Ryb3Bkb3duIH0sXHJcblx0XHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLkFyaWFMYWJlbCwgdmFsdWU6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5Gb3JtLkNhdGVnb3J5UGxhY2Vob2xkZXIgfV0sXHJcblx0XHRcdFx0YnJzOiBjYXRlZ29yaWVzLnNob3csXHJcblx0XHRcdFx0Y2hpbGRyZW46IENhdGVnb3JpZXNEcm9wZG93bi5nZW5lcmF0ZShjYXRlZ29yaWVzID8gY2F0ZWdvcmllcy5jdXN0b21DYXRlZ29yaWVzIDogbnVsbCksXHJcblx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFN1YlRleHQsIENsYXNzZXMuRm9ybUNhdGVnb3JpZXNEcm9wZG93biwgQ2xhc3Nlcy5UZXh0SW5wdXRdLFxyXG5cdFx0XHRcdHRhZzogVGFncy5TZWxlY3QsXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRhdHRyaWJ1dGVzOiBbXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuUGxhY2Vob2xkZXIsXHJcblx0XHRcdFx0XHRcdHZhbHVlOiBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuRm9ybS5Db21tZW50UGxhY2Vob2xkZXIsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLk1heExlbmd0aCxcclxuXHRcdFx0XHRcdFx0dmFsdWU6IEF0dHJpYnV0ZVZhbHVlLlRleHRBcmVhTWF4TGVuZ3RoLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRdLFxyXG5cdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvbnRTdWJUZXh0LCBDbGFzc2VzLkZvcm1Db21tZW50LCBDbGFzc2VzLlRleHRJbnB1dF0sXHJcblx0XHRcdFx0aWQ6IElEcy5CYXNpY0Zvcm1Db21tZW50LFxyXG5cdFx0XHRcdHRhZzogVGFncy5UZXh0QXJlYSxcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGJyczogZmFsc2UsIC8vIGRpc2FibGUgcmF0aW5nIGZvciBub3dcclxuXHRcdFx0XHRjaGlsZHJlbjogW1xyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBbeyBuYW1lOiBBdHRyaWJ1dGVOYW1lLkZvciwgdmFsdWU6IElEcy5CYXNpY0Zvcm1SYXRpbmcgfV0sXHJcblx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvbnRUZXh0LCBDbGFzc2VzLlRleHRBbGlnbkxlZnQsIENsYXNzZXMuRm9ybVJhdGluZ0xhYmVsXSxcclxuXHRcdFx0XHRcdFx0aW5uZXJUZXh0OiBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuRm9ybS5SYXRpbmdMYWJlbCxcclxuXHRcdFx0XHRcdFx0dGFnOiBUYWdzLkxhYmVsLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFJhdGluZ0NvbnRyb2wuZ2VuZXJhdGUoSURzLkJhc2ljRm9ybVJhdGluZyksXHJcblx0XHRcdFx0XSxcclxuXHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5Gb3JtUmF0aW5nQ29udGFpbmVyXSxcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGJyczogaXNFbWFpbEVuYWJsZWQoKSxcclxuXHRcdFx0XHRjaGlsZHJlbjogW1xyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBbXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IEF0dHJpYnV0ZVZhbHVlLkNoZWNrYm94LFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlVmFsdWUuVW5jaGVja2VkLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9ybUVtYWlsQ2hlY2tCb3gsIENsYXNzZXMuQ2hlY2tCb3hdLFxyXG5cdFx0XHRcdFx0XHRpZDogSURzLkVtYWlsQ2hlY2tCb3gsXHJcblx0XHRcdFx0XHRcdHRhZzogVGFncy5JbnB1dCxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6IFt7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuRm9yLCB2YWx1ZTogSURzLkVtYWlsQ2hlY2tCb3ggfV0sXHJcblx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvbnRTdWJUZXh0LCBDbGFzc2VzLlRleHRBbGlnbkxlZnQsIENsYXNzZXMuRm9ybUVtYWlsTGFiZWxdLFxyXG5cdFx0XHRcdFx0XHRpbm5lclRleHQ6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5Gb3JtLkVtYWlsQ2hlY2tCb3hMYWJlbCxcclxuXHRcdFx0XHRcdFx0dGFnOiBUYWdzLkxhYmVsLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0YXR0cmlidXRlczogW1xyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuVHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZS5UZXh0LFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5QbGFjZWhvbGRlcixcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuRm9ybS5FbWFpbFBsYWNlaG9sZGVyLFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5BcmlhTGFiZWwsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkZvcm0uRW1haWxQbGFjZWhvbGRlcixcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBJRHMuQmFzaWNGb3JtRW1haWxJbnB1dCxcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuTWF4TGVuZ3RoLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IEF0dHJpYnV0ZVZhbHVlLlRleHRBcmVhTWF4TGVuZ3RoLFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5WYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucygpLnVzZXJFbWFpbFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRJbkFwcEZlZWRiYWNrSW5pdE9wdGlvbnMoKS51c2VyRW1haWxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFN1YlRleHQsIENsYXNzZXMuRm9ybUVtYWlsSW5wdXQsIENsYXNzZXMuVGV4dElucHV0XSxcclxuXHRcdFx0XHRcdFx0aWQ6IElEcy5CYXNpY0Zvcm1FbWFpbElucHV0LFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuSW5wdXQsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9ybUVtYWlsQ29udGFpbmVyXSxcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNoaWxkcmVuOiBbXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLlR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogQXR0cmlidXRlVmFsdWUuQ2hlY2tib3gsXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLlZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IEF0dHJpYnV0ZVZhbHVlLlVuY2hlY2tlZCxcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRicnM6IGlzU2NyZWVuc2hvdEVuYWJsZWQoKSxcclxuXHRcdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9ybVNjcmVlbnNob3RDaGVja2JveCwgQ2xhc3Nlcy5DaGVja0JveF0sXHJcblx0XHRcdFx0XHRcdGlkOiBJRHMuQmFzaWNGb3JtU2NyZWVuc2hvdENoZWNrYm94LFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuSW5wdXQsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBbeyBuYW1lOiBBdHRyaWJ1dGVOYW1lLkZvciwgdmFsdWU6IElEcy5CYXNpY0Zvcm1TY3JlZW5zaG90Q2hlY2tib3ggfV0sXHJcblx0XHRcdFx0XHRcdGJyczogaXNTY3JlZW5zaG90RW5hYmxlZCgpLFxyXG5cdFx0XHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5Gb250U3ViVGV4dCwgQ2xhc3Nlcy5UZXh0QWxpZ25MZWZ0LCBDbGFzc2VzLkZvcm1TY3JlZW5zaG90TGFiZWxdLFxyXG5cdFx0XHRcdFx0XHRpbm5lclRleHQ6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5Gb3JtLlNjcmVlbnNob3RMYWJlbCxcclxuXHRcdFx0XHRcdFx0dGFnOiBUYWdzLkxhYmVsLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0YXR0cmlidXRlczogW1xyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuUHJldmlldyxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZS5TY3JlZW5zaG90UHJldmlldyxcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuQWx0LFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5Gb3JtLlNjcmVlbnNob3RJbWdBbHRUZXh0LFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdGJyczogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRJbkFwcEZlZWRiYWNrSW5pdE9wdGlvbnMoKS5zY3JlZW5zaG90LFxyXG5cdFx0XHRcdFx0XHRpZDogSURzLkJhc2ljRm9ybVNjcmVlbnNob3RQcmV2aWV3LFxyXG5cdFx0XHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5Gb3JtU2NyZWVuc2hvdFByZXZpZXddLFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuSW1nLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRdLFxyXG5cdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvcm1TY3JlZW5zaG90Q29udGFpbmVyXSxcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNoaWxkcmVuOlxyXG5cdFx0XHRcdFx0W1xyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFN1YlN1YlRleHQsIENsYXNzZXMuVGV4dEFsaWduTGVmdF0sXHJcblx0XHRcdFx0XHRcdFx0aW5uZXJUZXh0OiBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuRm9ybS5Qcml2YWN5TGFiZWwsXHJcblx0XHRcdFx0XHRcdFx0dGFnOiBUYWdzLkxhYmVsLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFN1YlN1YlRleHQsIENsYXNzZXMuVGV4dEFsaWduTGVmdF0sXHJcblx0XHRcdFx0XHRcdFx0aW5uZXJUZXh0OiBDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkuaXNDb21tZXJjaWFsSG9zdFxyXG5cdFx0XHRcdFx0XHRcdFx0PyBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuRm9ybS5Qcml2YWN5Q29uc2VudCArIFwiIFwiIDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHR0YWc6IFRhZ3MuTGFiZWwsXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBbXHJcblx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuSFJlZixcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5wcml2YWN5VXJsLFxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5UYXJnZXQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZS5CbGFua1dpbmRvdyxcclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuUmVsLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogQXR0cmlidXRlVmFsdWUuTm9SZWZlcnJlcixcclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5MaW5rXSxcclxuXHRcdFx0XHRcdFx0XHRpZDogSURzLlByaXZhY3lTdGF0ZW1lbnRMaW5rLFxyXG5cdFx0XHRcdFx0XHRcdGlubmVyVGV4dDogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLlByaXZhY3lTdGF0ZW1lbnQsXHJcblx0XHRcdFx0XHRcdFx0dGFnOiBUYWdzLkFuY2hvcixcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFN1YlN1YlRleHQsIENsYXNzZXMuVGV4dEFsaWduTGVmdCwgQ2xhc3Nlcy5Qcml2YWN5U3RhdGVtZW50TGlua0Rpdl0sXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjaGlsZHJlbjogW1xyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBbXHJcblx0XHRcdFx0XHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlR5cGUsIHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZS5CdXR0b24gfSxcclxuXHRcdFx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuQXJpYUxhYmVsLCB2YWx1ZTogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkZvcm0uQ2FuY2VsIH0sXHJcblx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdGNsYXNzZXM6IFtcclxuXHRcdFx0XHRcdFx0XHRDbGFzc2VzLkNhbmNlbEJ1dHRvbixcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0aWQ6IElEcy5CYXNpY0Zvcm1DYW5jZWxCdXR0b24sXHJcblx0XHRcdFx0XHRcdGlubmVyVGV4dDogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkZvcm0uQ2FuY2VsLFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuQnV0dG9uLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0YXR0cmlidXRlczogW1xyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuRGlzYWJsZWQsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogQXR0cmlidXRlVmFsdWUuVHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRjbGFzc2VzOiBbXHJcblx0XHRcdFx0XHRcdFx0Q2xhc3Nlcy5TdWJtaXRCdXR0b24sXHJcblx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdGlkOiBJRHMuQmFzaWNGb3JtU3VibWl0QnV0dG9uLFxyXG5cdFx0XHRcdFx0XHRpbm5lclRleHQ6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5Gb3JtLlN1Ym1pdCxcclxuXHRcdFx0XHRcdFx0dGFnOiBUYWdzLkJ1dHRvbixcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLlNwaW5uZXIsIENsYXNzZXMuSGlkZGVuXSxcclxuXHRcdFx0XHRcdFx0aWQ6IElEcy5CYXNpY0Zvcm1TdWJtaXRCdXR0b25TcGlubmVyLFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuRGl2LFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRdLFxyXG5cdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvcm1TdWJtaXRCdXR0b25Db250YWluZXJdLFxyXG5cdFx0XHR9LFxyXG5cdFx0XSxcclxuXHRcdGNsYXNzZXM6IFtcclxuXHRcdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRJbkFwcEZlZWRiYWNrSW5pdE9wdGlvbnMoKS50cmFuc2l0aW9uRW5hYmxlZCA/IENsYXNzZXMuSGlkZGVuIDogQ2xhc3Nlcy5WaXNpYmxlLFxyXG5cdFx0XHRDbGFzc2VzLk1hcmdpbkxlZnQ2MHB4LFxyXG5cdFx0XSxcclxuXHRcdGlkOiBjb250YWluZXJJZCxcclxuXHR9O1xyXG5cdHJldHVybiBmb3JtU2NoZW1hO1xyXG59XHJcblxyXG4vKipcclxuICogVGhlIGlkIGZvciB0aGUgY29udGFpbmVyLiBUaGlzIGlzIHRoZSBpZCBvZiB0aGUgdG9wLW1vc3QgZWxlbWVudCBhbmQgc2hvdWxkXHJcbiAqIGJlIHVuaXF1ZSB0byBlYWNoIGZvcm1cclxuICovXHJcbmV4cG9ydCBsZXQgY29udGFpbmVySWQ6IHN0cmluZyA9IElEcy5CYXNpY0Zvcm1Db250YWluZXI7XHJcblxyXG4vKipcclxuICogRm9ybXMgbWF5IGJlIHVzZWQgZm9yIGRpZmZlcmVudCBmZWVkYmFjayB0eXBlcy4gVGhpcyBtZXRob2QgZXhlY3V0ZXMgZm9ybVxyXG4gKiBzcGVjaWZpYyBsb2dpYyB3aGVuIHRoZSBmZWVkYmFjayB0eXBlIGlzIHNlbGVjdGVkXHJcbiAqIEBwYXJhbSBmZWVkYmFja1R5cGUgZmVlZGJhY2sgdHlwZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9uU2VsZWN0KGZlZWRiYWNrVHlwZTogRmVlZGJhY2tUeXBlKTogdm9pZCB7XHJcblx0c3dpdGNoIChmZWVkYmFja1R5cGUpIHtcclxuXHRcdGNhc2UgRmVlZGJhY2tUeXBlLlNtaWxlOiB7XHJcblx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEcy5CYXNpY0Zvcm1RdWVzdGlvbk1pZGRsZVRleHQpLnRleHRDb250ZW50ID0gVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLlNtaWxlRm9ybS5UaXRsZTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRjYXNlIEZlZWRiYWNrVHlwZS5Gcm93bjoge1xyXG5cdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRHMuQmFzaWNGb3JtUXVlc3Rpb25NaWRkbGVUZXh0KS50ZXh0Q29udGVudCA9IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5Gcm93bkZvcm0uVGl0bGU7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdFx0Y2FzZSBGZWVkYmFja1R5cGUuSWRlYToge1xyXG5cdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRHMuQmFzaWNGb3JtUXVlc3Rpb25NaWRkbGVUZXh0KS50ZXh0Q29udGVudCA9IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5JZGVhRm9ybS5UaXRsZTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRjYXNlIEZlZWRiYWNrVHlwZS5CdWc6IHtcclxuXHRcdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLkJhc2ljRm9ybVF1ZXN0aW9uTWlkZGxlVGV4dCkudGV4dENvbnRlbnQgPSBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuQnVnRm9ybS5UaXRsZTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRkZWZhdWx0OiB7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLkJhc2ljRm9ybUNvbW1lbnQpLmZvY3VzKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0VtYWlsRW5hYmxlZCgpIHtcclxuXHRpZiAoIUNvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0SW5BcHBGZWVkYmFja0luaXRPcHRpb25zKCkuc2hvd0VtYWlsQWRkcmVzcykge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHRpZiAoQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLmlzQ29tbWVyY2lhbEhvc3QpIHtcclxuXHRcdHJldHVybiBDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkuZW1haWxQb2xpY3lWYWx1ZSA9PT0gT0NQU1ZhbHVlcy5FbmFibGVkO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NyZWVuc2hvdEVuYWJsZWQoKSB7XHJcblx0aWYgKCFDb25maWd1cmF0aW9uLmdldCgpLmdldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucygpLnNjcmVlbnNob3QpIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0aWYgKENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5pc0NvbW1lcmNpYWxIb3N0KSB7XHJcblx0XHRyZXR1cm4gQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLnNjcmVlbnNob3RQb2xpY3lWYWx1ZSA9PT0gT0NQU1ZhbHVlcy5FbmFibGVkO1xyXG5cdH1cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogRm9ybSB0ZW1wbGF0ZSB0eXBlXHJcbiAqL1xyXG5leHBvcnQgbGV0IHR5cGU6IEZvcm1UZW1wbGF0ZVR5cGUgPSBGb3JtVGVtcGxhdGVUeXBlLkJhc2ljO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/UI/BellyBand/FormTemplates/BasicFormTemplate.ts\n')},"./scripts/app/UI/BellyBand/FormTemplates/FeedbackPortalIdeaTemplate.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return generate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "containerId", function() { return containerId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onSelect", function() { return onSelect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "type", function() { return type; });\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _FormTemplateType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FormTemplateType */ "./scripts/app/UI/BellyBand/FormTemplates/FormTemplateType.ts");\n\r\n\r\nfunction generate() {\r\n    return undefined;\r\n}\r\nvar containerId = _UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].FeedbackPortalIdeaContainer;\r\nfunction onSelect(feedbackType) {\r\n    /* tslint:disable : no-empty */\r\n}\r\nvar type = _FormTemplateType__WEBPACK_IMPORTED_MODULE_1__["FormTemplateType"].FeedbackPortalIdea;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9CZWxseUJhbmQvRm9ybVRlbXBsYXRlcy9GZWVkYmFja1BvcnRhbElkZWFUZW1wbGF0ZS50cz8yNWFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQXdDO0FBQ2M7QUFFL0MsU0FBUyxRQUFRO0lBQ3ZCLE9BQU8sU0FBUyxDQUFDO0FBQ2xCLENBQUM7QUFFTSxJQUFJLFdBQVcsR0FBVyxnREFBRyxDQUFDLDJCQUEyQixDQUFDO0FBRTFELFNBQVMsUUFBUSxDQUFDLFlBQTBCO0lBQzlDLCtCQUErQjtBQUNwQyxDQUFDO0FBRU0sSUFBSSxJQUFJLEdBQXFCLGtFQUFnQixDQUFDLGtCQUFrQixDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVUkvQmVsbHlCYW5kL0Zvcm1UZW1wbGF0ZXMvRmVlZGJhY2tQb3J0YWxJZGVhVGVtcGxhdGUudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGZWVkYmFja1R5cGUgfSBmcm9tIFwiLi4vLi4vLi4vQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IElVSUFzSnNvbiB9IGZyb20gXCIuLi8uLi9SZW5kZXJlclwiO1xyXG5pbXBvcnQgeyBJRHMgfSBmcm9tIFwiLi4vLi4vVWlDb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRm9ybVRlbXBsYXRlVHlwZSB9IGZyb20gXCIuL0Zvcm1UZW1wbGF0ZVR5cGVcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZSgpOiBJVUlBc0pzb24ge1xyXG5cdHJldHVybiB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBsZXQgY29udGFpbmVySWQ6IHN0cmluZyA9IElEcy5GZWVkYmFja1BvcnRhbElkZWFDb250YWluZXI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb25TZWxlY3QoZmVlZGJhY2tUeXBlOiBGZWVkYmFja1R5cGUpOiB2b2lkIHtcclxuXHQgICAgLyogdHNsaW50OmRpc2FibGUgOiBuby1lbXB0eSAqL1xyXG59XHJcblxyXG5leHBvcnQgbGV0IHR5cGU6IEZvcm1UZW1wbGF0ZVR5cGUgPSBGb3JtVGVtcGxhdGVUeXBlLkZlZWRiYWNrUG9ydGFsSWRlYTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/UI/BellyBand/FormTemplates/FeedbackPortalIdeaTemplate.ts\n')},"./scripts/app/UI/BellyBand/FormTemplates/FormTemplateType.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormTemplateType", function() { return FormTemplateType; });\n/**\r\n * FormTemplateType.ts\r\n *\r\n * An enum for the types of forms available.\r\n */\r\nvar FormTemplateType;\r\n(function (FormTemplateType) {\r\n    FormTemplateType[FormTemplateType["Single"] = 0] = "Single";\r\n    FormTemplateType[FormTemplateType["Basic"] = 1] = "Basic";\r\n    FormTemplateType[FormTemplateType["FeedbackPortalIdea"] = 2] = "FeedbackPortalIdea";\r\n})(FormTemplateType || (FormTemplateType = {}));\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9CZWxseUJhbmQvRm9ybVRlbXBsYXRlcy9Gb3JtVGVtcGxhdGVUeXBlLnRzPzg0MzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBOzs7O0dBSUc7QUFFSCxJQUFZLGdCQUlYO0FBSkQsV0FBWSxnQkFBZ0I7SUFDM0IsMkRBQVU7SUFDVix5REFBUztJQUNULG1GQUFzQjtBQUN2QixDQUFDLEVBSlcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQUkzQiIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL1VJL0JlbGx5QmFuZC9Gb3JtVGVtcGxhdGVzL0Zvcm1UZW1wbGF0ZVR5cGUudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogRm9ybVRlbXBsYXRlVHlwZS50c1xyXG4gKlxyXG4gKiBBbiBlbnVtIGZvciB0aGUgdHlwZXMgb2YgZm9ybXMgYXZhaWxhYmxlLlxyXG4gKi9cclxuXHJcbmV4cG9ydCBlbnVtIEZvcm1UZW1wbGF0ZVR5cGUge1xyXG5cdFNpbmdsZSA9IDAsXHJcblx0QmFzaWMgPSAxLFxyXG5cdEZlZWRiYWNrUG9ydGFsSWRlYSA9IDIsXHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/UI/BellyBand/FormTemplates/FormTemplateType.ts\n')},"./scripts/app/UI/BellyBand/FormTemplates/SingleFormTemplate.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return generate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "containerId", function() { return containerId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onSelect", function() { return onSelect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "type", function() { return type; });\n/* harmony import */ var _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../../UIStrings/UIStrings */ "./scripts/app/UIStrings/UIStrings.ts");\n/* harmony import */ var _FormTemplateType__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FormTemplateType */ "./scripts/app/UI/BellyBand/FormTemplates/FormTemplateType.ts");\n/* harmony import */ var _CategoriesDropdown__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../CategoriesDropdown */ "./scripts/app/UI/CategoriesDropdown.ts");\n/* harmony import */ var _RatingControl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../RatingControl */ "./scripts/app/UI/RatingControl.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../../../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _BasicFormTemplate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./BasicFormTemplate */ "./scripts/app/UI/BellyBand/FormTemplates/BasicFormTemplate.ts");\n/**\r\n * SingleFormTemplate.ts\r\n *\r\n * A form template with contact info fields.\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Generate the markup\r\n * @returns the markup as json\r\n */\r\nfunction generate() {\r\n    var categories = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getInAppFeedbackLaunchOptions().categories;\r\n    var formSchema = {\r\n        children: [\r\n            {\r\n                attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].For, value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormComment }],\r\n                classes: [\r\n                    _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FontSubtitle,\r\n                    _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].TextAlignLeft,\r\n                    _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormQuestionMiddleText,\r\n                ],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormQuestionMiddleText,\r\n                innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().FeedbackSubtitle,\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Label,\r\n            },\r\n            {\r\n                attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Id, value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormCategoriesDropdown }],\r\n                brs: categories.show,\r\n                children: _CategoriesDropdown__WEBPACK_IMPORTED_MODULE_2__["generate"](categories ? categories.customCategories : null),\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FontSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormCategoriesDropdown, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].TextInput],\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Select,\r\n            },\r\n            {\r\n                attributes: [\r\n                    {\r\n                        name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Placeholder,\r\n                        value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.CommentPlaceholder,\r\n                    },\r\n                    {\r\n                        name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].MaxLength,\r\n                        value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeValue"].TextAreaMaxLength,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FontSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormComment, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].TextInput],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormComment,\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].TextArea,\r\n            },\r\n            {\r\n                brs: false,\r\n                children: [\r\n                    {\r\n                        attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].For, value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormRating }],\r\n                        classes: [\r\n                            _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FontSubText,\r\n                            _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].TextAlignLeft,\r\n                            _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormRatingLabel,\r\n                        ],\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.RatingLabel,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Label,\r\n                    },\r\n                    _RatingControl__WEBPACK_IMPORTED_MODULE_3__["generate"](_UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormRating),\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormRatingContainer],\r\n            },\r\n            {\r\n                brs: _BasicFormTemplate__WEBPACK_IMPORTED_MODULE_6__["isEmailEnabled"](),\r\n                children: [\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Type,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeValue"].Checkbox,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeValue"].Unchecked,\r\n                                value: "",\r\n                            },\r\n                        ],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormEmailCheckBox, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].CheckBox],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].EmailCheckBox,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Input,\r\n                    },\r\n                    {\r\n                        attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].For, value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].EmailCheckBox }],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FontSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].TextAlignLeft, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormEmailLabel],\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.EmailCheckBoxLabel,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Label,\r\n                    },\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Type,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeValue"].Text,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Placeholder,\r\n                                value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.EmailPlaceholder,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].AriaLabel,\r\n                                value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.EmailPlaceholder,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Name,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormEmailInput,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].MaxLength,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeValue"].TextAreaMaxLength,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Value,\r\n                                value: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getInAppFeedbackInitOptions().userEmail\r\n                                    ? _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getInAppFeedbackInitOptions().userEmail\r\n                                    : "",\r\n                            },\r\n                        ],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FontSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormEmailInput, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].TextInput],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormEmailInput,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Input,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormEmailContainer],\r\n            },\r\n            {\r\n                children: [\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Type,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeValue"].Checkbox,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Value,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeValue"].Unchecked,\r\n                            },\r\n                        ],\r\n                        brs: _BasicFormTemplate__WEBPACK_IMPORTED_MODULE_6__["isScreenshotEnabled"](),\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormScreenshotCheckbox, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].CheckBox],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormScreenshotCheckbox,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Input,\r\n                    },\r\n                    {\r\n                        attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].For, value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormScreenshotCheckbox }],\r\n                        brs: _BasicFormTemplate__WEBPACK_IMPORTED_MODULE_6__["isScreenshotEnabled"](),\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FontText, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].TextAlignLeft, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormScreenshotLabel],\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.ScreenshotLabel,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Label,\r\n                    },\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Preview,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeValue"].ScreenshotPreview,\r\n                            },\r\n                        ],\r\n                        brs: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getInAppFeedbackInitOptions().screenshot,\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormScreenshotPreview,\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormScreenshotPreview],\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Img,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormScreenshotContainer],\r\n            },\r\n            {\r\n                children: [\r\n                    {\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FontSubSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].TextAlignLeft],\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.PrivacyLabel,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Label,\r\n                    },\r\n                    {\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FontSubSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].TextAlignLeft],\r\n                        innerText: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().isCommercialHost\r\n                            ? _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.PrivacyConsent + " " : "",\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Label,\r\n                    },\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].HRef,\r\n                                value: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_4__["get"]().getCommonInitOptions().privacyUrl,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Target,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeValue"].BlankWindow,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Rel,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeValue"].NoReferrer,\r\n                            },\r\n                        ],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].Link],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].PrivacyStatementLink,\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().PrivacyStatement,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Anchor,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FontSubSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].TextAlignLeft, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].PrivacyStatementLinkDiv],\r\n            },\r\n            {\r\n                children: [\r\n                    {\r\n                        attributes: [\r\n                            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Type, value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeValue"].Button },\r\n                            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].AriaLabel, value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.Cancel },\r\n                        ],\r\n                        classes: [\r\n                            _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].CancelButton,\r\n                        ],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormCancelButton,\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.Cancel,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Button,\r\n                    },\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeName"].Disabled,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["AttributeValue"].True,\r\n                            },\r\n                        ],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].SubmitButton],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormSubmitButton,\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.Submit,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Button,\r\n                    },\r\n                    {\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].Spinner, _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].Hidden],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormSubmitButtonSpinner,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_5__["Tags"].Div,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_5__["Classes"].FormSubmitButtonContainer],\r\n            },\r\n        ],\r\n        id: containerId,\r\n    };\r\n    return formSchema;\r\n}\r\n/**\r\n * The id for the container. This is the id of the top-most element and should\r\n * be unique to each form\r\n */\r\nvar containerId = _UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormContainer;\r\n/**\r\n * Forms may be used for different feedback types. This method executes form\r\n * specific logic when the feedback type is selected\r\n * @param feedbackType feedback type\r\n */\r\nfunction onSelect(feedbackType) {\r\n    document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_5__["IDs"].SingleFormComment).focus();\r\n}\r\n/**\r\n * Form template type\r\n */\r\nvar type = _FormTemplateType__WEBPACK_IMPORTED_MODULE_1__["FormTemplateType"].Single;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9CZWxseUJhbmQvRm9ybVRlbXBsYXRlcy9TaW5nbGVGb3JtVGVtcGxhdGUudHM/OGFlMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRXlEO0FBQ047QUFFVztBQUNWO0FBQ2lCO0FBRWdCO0FBQ3ZDO0FBRWpEOzs7R0FHRztBQUNJLFNBQVMsUUFBUTtJQUN2QixJQUFJLFVBQVUsR0FBRyxnRUFBaUIsRUFBRSxDQUFDLDZCQUE2QixFQUFFLENBQUMsVUFBVSxDQUFDO0lBRWhGLElBQUksVUFBVSxHQUFHO1FBQ2hCLFFBQVEsRUFBRTtZQUNUO2dCQUNDLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxnREFBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3ZFLE9BQU8sRUFBRTtvQkFDUixvREFBTyxDQUFDLFlBQVk7b0JBQ3BCLG9EQUFPLENBQUMsYUFBYTtvQkFDckIsb0RBQU8sQ0FBQyxzQkFBc0I7aUJBQzlCO2dCQUNELEVBQUUsRUFBRSxnREFBRyxDQUFDLDRCQUE0QjtnQkFDcEMsU0FBUyxFQUFFLGlFQUFzQixFQUFFLENBQUMsZ0JBQWdCO2dCQUNwRCxHQUFHLEVBQUUsaURBQUksQ0FBQyxLQUFLO2FBQ2Y7WUFDRDtnQkFDQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsZ0RBQUcsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO2dCQUNqRixHQUFHLEVBQUUsVUFBVSxDQUFDLElBQUk7Z0JBQ3BCLFFBQVEsRUFBRSw0REFBMkIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFD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Y0FBYyxDQUFDLGdEQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSSxJQUFJLElBQUksR0FBcUIsa0VBQWdCLENBQUMsTUFBTSxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVUkvQmVsbHlCYW5kL0Zvcm1UZW1wbGF0ZXMvU2luZ2xlRm9ybVRlbXBsYXRlLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFNpbmdsZUZvcm1UZW1wbGF0ZS50c1xyXG4gKlxyXG4gKiBBIGZvcm0gdGVtcGxhdGUgd2l0aCBjb250YWN0IGluZm8gZmllbGRzLlxyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIFVJU3RyaW5ncyBmcm9tIFwiLi8uLi8uLi8uLi9VSVN0cmluZ3MvVUlTdHJpbmdzXCI7XHJcbmltcG9ydCB7IEZvcm1UZW1wbGF0ZVR5cGUgfSBmcm9tIFwiLi9Gb3JtVGVtcGxhdGVUeXBlXCI7XHJcbmltcG9ydCB7IElVSUFzSnNvbiB9IGZyb20gXCIuLy4uLy4uL1JlbmRlcmVyXCI7XHJcbmltcG9ydCAqIGFzIENhdGVnb3JpZXNEcm9wZG93biBmcm9tIFwiLi8uLi8uLi9DYXRlZ29yaWVzRHJvcGRvd25cIjtcclxuaW1wb3J0ICogYXMgUmF0aW5nQ29udHJvbCBmcm9tIFwiLi8uLi8uLi9SYXRpbmdDb250cm9sXCI7XHJcbmltcG9ydCAqIGFzIENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vLi4vLi4vLi4vQ29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IEZlZWRiYWNrVHlwZSB9IGZyb20gXCIuLy4uLy4uLy4uL0NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBBdHRyaWJ1dGVOYW1lLCBBdHRyaWJ1dGVWYWx1ZSwgQ2xhc3NlcywgSURzLCBUYWdzIH0gZnJvbSBcIi4vLi4vLi4vVWlDb25zdGFudHNcIjtcclxuaW1wb3J0ICogYXMgQmFzaWNGb3JtIGZyb20gXCIuL0Jhc2ljRm9ybVRlbXBsYXRlXCI7XHJcblxyXG4vKipcclxuICogR2VuZXJhdGUgdGhlIG1hcmt1cFxyXG4gKiBAcmV0dXJucyB0aGUgbWFya3VwIGFzIGpzb25cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZSgpOiBJVUlBc0pzb24ge1xyXG5cdGxldCBjYXRlZ29yaWVzID0gQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRJbkFwcEZlZWRiYWNrTGF1bmNoT3B0aW9ucygpLmNhdGVnb3JpZXM7XHJcblxyXG5cdGxldCBmb3JtU2NoZW1hID0ge1xyXG5cdFx0Y2hpbGRyZW46IFtcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IFt7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuRm9yLCB2YWx1ZTogSURzLlNpbmdsZUZvcm1Db21tZW50IH1dLFxyXG5cdFx0XHRcdGNsYXNzZXM6IFtcclxuXHRcdFx0XHRcdENsYXNzZXMuRm9udFN1YnRpdGxlLFxyXG5cdFx0XHRcdFx0Q2xhc3Nlcy5UZXh0QWxpZ25MZWZ0LFxyXG5cdFx0XHRcdFx0Q2xhc3Nlcy5Gb3JtUXVlc3Rpb25NaWRkbGVUZXh0LFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0aWQ6IElEcy5TaW5nbGVGb3JtUXVlc3Rpb25NaWRkbGVUZXh0LFxyXG5cdFx0XHRcdGlubmVyVGV4dDogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkZlZWRiYWNrU3VidGl0bGUsXHJcblx0XHRcdFx0dGFnOiBUYWdzLkxhYmVsLFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0YXR0cmlidXRlczogW3sgbmFtZTogQXR0cmlidXRlTmFtZS5JZCwgdmFsdWU6IElEcy5TaW5nbGVGb3JtQ2F0ZWdvcmllc0Ryb3Bkb3duIH1dLFxyXG5cdFx0XHRcdGJyczogY2F0ZWdvcmllcy5zaG93LFxyXG5cdFx0XHRcdGNoaWxkcmVuOiBDYXRlZ29yaWVzRHJvcGRvd24uZ2VuZXJhdGUoY2F0ZWdvcmllcyA/IGNhdGVnb3JpZXMuY3VzdG9tQ2F0ZWdvcmllcyA6IG51bGwpLFxyXG5cdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvbnRTdWJUZXh0LCBDbGFzc2VzLkZvcm1DYXRlZ29yaWVzRHJvcGRvd24sIENsYXNzZXMuVGV4dElucHV0XSxcclxuXHRcdFx0XHR0YWc6IFRhZ3MuU2VsZWN0LFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0YXR0cmlidXRlczogW1xyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLlBsYWNlaG9sZGVyLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkZvcm0uQ29tbWVudFBsYWNlaG9sZGVyLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5NYXhMZW5ndGgsXHJcblx0XHRcdFx0XHRcdHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZS5UZXh0QXJlYU1heExlbmd0aCxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XSxcclxuXHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5Gb250U3ViVGV4dCwgQ2xhc3Nlcy5Gb3JtQ29tbWVudCwgQ2xhc3Nlcy5UZXh0SW5wdXRdLFxyXG5cdFx0XHRcdGlkOiBJRHMuU2luZ2xlRm9ybUNvbW1lbnQsXHJcblx0XHRcdFx0dGFnOiBUYWdzLlRleHRBcmVhLFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0YnJzOiBmYWxzZSwgLy8gcmF0aW5ncyBhcmUgZGlzYWJsZWQgZm9yIG5vd1xyXG5cdFx0XHRcdGNoaWxkcmVuOiBbXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6IFt7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuRm9yLCB2YWx1ZTogSURzLlNpbmdsZUZvcm1SYXRpbmcgfV0sXHJcblx0XHRcdFx0XHRcdGNsYXNzZXM6IFtcclxuXHRcdFx0XHRcdFx0XHRDbGFzc2VzLkZvbnRTdWJUZXh0LFxyXG5cdFx0XHRcdFx0XHRcdENsYXNzZXMuVGV4dEFsaWduTGVmdCxcclxuXHRcdFx0XHRcdFx0XHRDbGFzc2VzLkZvcm1SYXRpbmdMYWJlbCxcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0aW5uZXJUZXh0OiBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuRm9ybS5SYXRpbmdMYWJlbCxcclxuXHRcdFx0XHRcdFx0dGFnOiBUYWdzLkxhYmVsLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFJhdGluZ0NvbnRyb2wuZ2VuZXJhdGUoSURzLlNpbmdsZUZvcm1SYXRpbmcpLFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9ybVJhdGluZ0NvbnRhaW5lcl0sXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRicnM6IEJhc2ljRm9ybS5pc0VtYWlsRW5hYmxlZCgpLFxyXG5cdFx0XHRcdGNoaWxkcmVuOiBbXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLlR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogQXR0cmlidXRlVmFsdWUuQ2hlY2tib3gsXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVWYWx1ZS5VbmNoZWNrZWQsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5Gb3JtRW1haWxDaGVja0JveCwgQ2xhc3Nlcy5DaGVja0JveF0sXHJcblx0XHRcdFx0XHRcdGlkOiBJRHMuRW1haWxDaGVja0JveCxcclxuXHRcdFx0XHRcdFx0dGFnOiBUYWdzLklucHV0LFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0YXR0cmlidXRlczogW3sgbmFtZTogQXR0cmlidXRlTmFtZS5Gb3IsIHZhbHVlOiBJRHMuRW1haWxDaGVja0JveCB9XSxcclxuXHRcdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFN1YlRleHQsIENsYXNzZXMuVGV4dEFsaWduTGVmdCwgQ2xhc3Nlcy5Gb3JtRW1haWxMYWJlbF0sXHJcblx0XHRcdFx0XHRcdGlubmVyVGV4dDogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkZvcm0uRW1haWxDaGVja0JveExhYmVsLFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuTGFiZWwsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBbXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IEF0dHJpYnV0ZVZhbHVlLlRleHQsXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLlBsYWNlaG9sZGVyLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5Gb3JtLkVtYWlsUGxhY2Vob2xkZXIsXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLkFyaWFMYWJlbCxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuRm9ybS5FbWFpbFBsYWNlaG9sZGVyLFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5OYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IElEcy5TaW5nbGVGb3JtRW1haWxJbnB1dCxcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuTWF4TGVuZ3RoLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IEF0dHJpYnV0ZVZhbHVlLlRleHRBcmVhTWF4TGVuZ3RoLFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5WYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucygpLnVzZXJFbWFpbFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0SW5BcHBGZWVkYmFja0luaXRPcHRpb25zKCkudXNlckVtYWlsXHJcblx0XHRcdFx0XHRcdFx0XHRcdDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5Gb250U3ViVGV4dCwgQ2xhc3Nlcy5Gb3JtRW1haWxJbnB1dCwgQ2xhc3Nlcy5UZXh0SW5wdXRdLFxyXG5cdFx0XHRcdFx0XHRpZDogSURzLlNpbmdsZUZvcm1FbWFpbElucHV0LFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuSW5wdXQsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9ybUVtYWlsQ29udGFpbmVyXSxcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNoaWxkcmVuOiBbXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLlR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogQXR0cmlidXRlVmFsdWUuQ2hlY2tib3gsXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLlZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IEF0dHJpYnV0ZVZhbHVlLlVuY2hlY2tlZCxcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRicnM6IEJhc2ljRm9ybS5pc1NjcmVlbnNob3RFbmFibGVkKCksXHJcblx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvcm1TY3JlZW5zaG90Q2hlY2tib3gsIENsYXNzZXMuQ2hlY2tCb3hdLFxyXG5cdFx0XHRcdFx0XHRpZDogSURzLlNpbmdsZUZvcm1TY3JlZW5zaG90Q2hlY2tib3gsXHJcblx0XHRcdFx0XHRcdHRhZzogVGFncy5JbnB1dCxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6IFt7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuRm9yLCB2YWx1ZTogSURzLlNpbmdsZUZvcm1TY3JlZW5zaG90Q2hlY2tib3ggfV0sXHJcblx0XHRcdFx0XHRcdGJyczogQmFzaWNGb3JtLmlzU2NyZWVuc2hvdEVuYWJsZWQoKSxcclxuXHRcdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFRleHQsIENsYXNzZXMuVGV4dEFsaWduTGVmdCwgQ2xhc3Nlcy5Gb3JtU2NyZWVuc2hvdExhYmVsXSxcclxuXHRcdFx0XHRcdFx0aW5uZXJUZXh0OiBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuRm9ybS5TY3JlZW5zaG90TGFiZWwsXHJcblx0XHRcdFx0XHRcdHRhZzogVGFncy5MYWJlbCxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLlByZXZpZXcsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogQXR0cmlidXRlVmFsdWUuU2NyZWVuc2hvdFByZXZpZXcsXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0YnJzOiBDb25maWd1cmF0aW9uLmdldCgpLmdldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucygpLnNjcmVlbnNob3QsXHJcblx0XHRcdFx0XHRcdGlkOiBJRHMuU2luZ2xlRm9ybVNjcmVlbnNob3RQcmV2aWV3LFxyXG5cdFx0XHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5Gb3JtU2NyZWVuc2hvdFByZXZpZXddLFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuSW1nLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRdLFxyXG5cdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvcm1TY3JlZW5zaG90Q29udGFpbmVyXSxcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNoaWxkcmVuOlxyXG5cdFx0XHRcdFtcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFN1YlN1YlRleHQsIENsYXNzZXMuVGV4dEFsaWduTGVmdF0sXHJcblx0XHRcdFx0XHRcdGlubmVyVGV4dDogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkZvcm0uUHJpdmFjeUxhYmVsLFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuTGFiZWwsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5Gb250U3ViU3ViVGV4dCwgQ2xhc3Nlcy5UZXh0QWxpZ25MZWZ0XSxcclxuXHRcdFx0XHRcdFx0aW5uZXJUZXh0OiBDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkuaXNDb21tZXJjaWFsSG9zdFxyXG5cdFx0XHRcdFx0XHQ/IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5Gb3JtLlByaXZhY3lDb25zZW50ICsgXCIgXCIgOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuTGFiZWwsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBbXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5IUmVmLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5wcml2YWN5VXJsLFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5UYXJnZXQsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogQXR0cmlidXRlVmFsdWUuQmxhbmtXaW5kb3csXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLlJlbCxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZS5Ob1JlZmVycmVyLFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkxpbmtdLFxyXG5cdFx0XHRcdFx0XHRpZDogSURzLlByaXZhY3lTdGF0ZW1lbnRMaW5rLFxyXG5cdFx0XHRcdFx0XHRpbm5lclRleHQ6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5Qcml2YWN5U3RhdGVtZW50LFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuQW5jaG9yLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRdLFxyXG5cdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvbnRTdWJTdWJUZXh0LCBDbGFzc2VzLlRleHRBbGlnbkxlZnQsIENsYXNzZXMuUHJpdmFjeVN0YXRlbWVudExpbmtEaXZdLFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y2hpbGRyZW46IFtcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0YXR0cmlidXRlczogW1xyXG5cdFx0XHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5UeXBlLCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuQnV0dG9ufSxcclxuXHRcdFx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuQXJpYUxhYmVsLCB2YWx1ZTogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkZvcm0uQ2FuY2VsIH0sXHJcblx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdGNsYXNzZXM6IFtcclxuXHRcdFx0XHRcdFx0XHRDbGFzc2VzLkNhbmNlbEJ1dHRvbixcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0aWQ6IElEcy5TaW5nbGVGb3JtQ2FuY2VsQnV0dG9uLFxyXG5cdFx0XHRcdFx0XHRpbm5lclRleHQ6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5Gb3JtLkNhbmNlbCxcclxuXHRcdFx0XHRcdFx0dGFnOiBUYWdzLkJ1dHRvbixcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5EaXNhYmxlZCxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZS5UcnVlLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5TdWJtaXRCdXR0b25dLFxyXG5cdFx0XHRcdFx0XHRpZDogSURzLlNpbmdsZUZvcm1TdWJtaXRCdXR0b24sXHJcblx0XHRcdFx0XHRcdGlubmVyVGV4dDogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkZvcm0uU3VibWl0LFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuQnV0dG9uLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuU3Bpbm5lciwgQ2xhc3Nlcy5IaWRkZW5dLFxyXG5cdFx0XHRcdFx0XHRpZDogSURzLlNpbmdsZUZvcm1TdWJtaXRCdXR0b25TcGlubmVyLFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuRGl2LFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRdLFxyXG5cdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvcm1TdWJtaXRCdXR0b25Db250YWluZXJdLFxyXG5cdFx0XHR9LFxyXG5cdFx0XSxcclxuXHRcdGlkOiBjb250YWluZXJJZCxcclxuXHR9O1xyXG5cdHJldHVybiBmb3JtU2NoZW1hO1xyXG59XHJcblxyXG4vKipcclxuICogVGhlIGlkIGZvciB0aGUgY29udGFpbmVyLiBUaGlzIGlzIHRoZSBpZCBvZiB0aGUgdG9wLW1vc3QgZWxlbWVudCBhbmQgc2hvdWxkXHJcbiAqIGJlIHVuaXF1ZSB0byBlYWNoIGZvcm1cclxuICovXHJcbmV4cG9ydCBsZXQgY29udGFpbmVySWQ6IHN0cmluZyA9IElEcy5TaW5nbGVGb3JtQ29udGFpbmVyO1xyXG5cclxuLyoqXHJcbiAqIEZvcm1zIG1heSBiZSB1c2VkIGZvciBkaWZmZXJlbnQgZmVlZGJhY2sgdHlwZXMuIFRoaXMgbWV0aG9kIGV4ZWN1dGVzIGZvcm1cclxuICogc3BlY2lmaWMgbG9naWMgd2hlbiB0aGUgZmVlZGJhY2sgdHlwZSBpcyBzZWxlY3RlZFxyXG4gKiBAcGFyYW0gZmVlZGJhY2tUeXBlIGZlZWRiYWNrIHR5cGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBvblNlbGVjdChmZWVkYmFja1R5cGU6IEZlZWRiYWNrVHlwZSk6IHZvaWQge1xyXG5cdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEcy5TaW5nbGVGb3JtQ29tbWVudCkuZm9jdXMoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZvcm0gdGVtcGxhdGUgdHlwZVxyXG4gKi9cclxuZXhwb3J0IGxldCB0eXBlOiBGb3JtVGVtcGxhdGVUeXBlID0gRm9ybVRlbXBsYXRlVHlwZS5TaW5nbGU7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/UI/BellyBand/FormTemplates/SingleFormTemplate.ts\n')},"./scripts/app/UI/BellyBand/Layout.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generateMulti", function() { return generateMulti; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generateSingle", function() { return generateSingle; });\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../Constants */ "./scripts/app/Constants.ts");\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../UIStrings/UIStrings */ "./scripts/app/UIStrings/UIStrings.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../Utils */ "./scripts/app/UI/Utils.ts");\n/* harmony import */ var _FormTemplates_SingleFormTemplate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FormTemplates/SingleFormTemplate */ "./scripts/app/UI/BellyBand/FormTemplates/SingleFormTemplate.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/**\r\n * Layout.ts\r\n *\r\n * Module for the layout\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Generates the multi layout as a Renderer.IUIAsJson object\r\n *\r\n * The TabFocus.ts has a dependency in the mainContainer. All tabbable elements\r\n * should be placed inside the mainContainer otherwise TabFocus.ts will not\r\n * function as expected.\r\n * @param {[key: number]: IFormTemplate} formTemplates FeedbackType -> FormTemplate mapping\r\n * @param {[key: number]: IPanelTemplate} panelTemplates PanelType -> PanelTemplate mapping\r\n * @returns {Renderer.IUIAsJson} Renderer.IUIAsJson object\r\n */\r\nfunction generateMulti(formTemplates, panelTemplates) {\r\n    var schema = {\r\n        attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].DataHtml2CanvasIgnore, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].True }],\r\n        children: [\r\n            {\r\n                attributes: [\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].Role, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].Dialog },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].AriaModal, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].True },\r\n                ],\r\n                children: [\r\n                    {\r\n                        attributes: [\r\n                            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].Role, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].TabList },\r\n                            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].AriaDescribedBy, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].QuestionLeftText },\r\n                            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].AriaLabel, value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_2__["getUIStrings"]().FeedbackSubtitle },\r\n                            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].AriaOrientation, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].AriaOrientationValueVertical },\r\n                        ],\r\n                        children: [\r\n                            {\r\n                                // This adds a "first" dummy tabbable div to the mainContainer. It\'s used as a marker\r\n                                // to handle tabs and shift tabs so focus will stay with elements on just the feedback\r\n                                // dialog. Do not relocate this without updating the TabFocus.ts code.\r\n                                attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].TabIndex, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].Zero }],\r\n                                id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].FirstTabbable,\r\n                            },\r\n                            {\r\n                                attributes: [\r\n                                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].Type, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].Button },\r\n                                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].AriaLabel, value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_2__["getUIStrings"]().CloseLabel },\r\n                                ],\r\n                                id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].CloseButton,\r\n                                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].CloseButton],\r\n                                // tslint:disable-next-line:max-line-length\r\n                                innerHTML: \'<svg viewBox="4 4 16 16" width="16px" height="16px" focusable="false"><path d="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/><\/svg>\',\r\n                                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Tags"].Button,\r\n                            },\r\n                            {\r\n                                children: [\r\n                                    {\r\n                                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].FormWideContainer, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].Hidden],\r\n                                        children: generateMultiPanels(panelTemplates),\r\n                                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].LeftPanelContainer,\r\n                                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Tags"].Div,\r\n                                    },\r\n                                    {\r\n                                        children: [\r\n                                            {\r\n                                                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].FontSubtitle, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].TextAlignLeft],\r\n                                                id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].QuestionLeftText,\r\n                                                innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_2__["getUIStrings"]().FeedbackSubtitle,\r\n                                            },\r\n                                            {\r\n                                                children: [\r\n                                                    {\r\n                                                        children: generateOverallAnchors(formTemplates),\r\n                                                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallAnchorsContainer,\r\n                                                    },\r\n                                                ],\r\n                                                id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].ColumnSeparatorDiv,\r\n                                            },\r\n                                        ],\r\n                                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].FormContainer],\r\n                                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].LeftFormContainer,\r\n                                    },\r\n                                    {\r\n                                        children: generateMultiForms(formTemplates),\r\n                                        classes: [\r\n                                            _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].FormContainer,\r\n                                            _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getInAppFeedbackInitOptions().transitionEnabled ? _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].Hidden : _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].Visible,\r\n                                        ],\r\n                                        attributes: [\r\n                                            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].Role, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].TabPanel },\r\n                                            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].AriaExpanded, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].False },\r\n                                        ],\r\n                                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].MiddleFormContainer,\r\n                                    },\r\n                                ],\r\n                                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].Hidden],\r\n                                id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].MainContentHolder,\r\n                                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Tags"].Form,\r\n                            },\r\n                            {\r\n                                // This adds a "last" dummy tabbable div to the mainContainer. It\'s used as a marker\r\n                                // to handle tabs and shift tabs so focus will stay with elements on just the feedback\r\n                                // dialog. Do not relocate this without updating the TabFocus.ts code.\r\n                                attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].TabIndex, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].Zero }],\r\n                                id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].LastTabbable,\r\n                            },\r\n                        ],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].MainContainer,\r\n                    },\r\n                ],\r\n                classes: [_Utils__WEBPACK_IMPORTED_MODULE_3__["isRightToLeft"]() ? _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].Rtl : ""],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverlayBackground,\r\n            },\r\n        ],\r\n    };\r\n    return schema;\r\n}\r\n/**\r\n * Generates the single layout as a Renderer.IUIAsJson object\r\n *\r\n * The TabFocus.ts has a dependency in the mainContainer. All tabbable elements\r\n * should be placed inside the mainContainer otherwise TabFocus.ts will not\r\n * function as expected.\r\n * @param {[key: number]: IPanelTemplate} panelTemplates PanelType -> PanelTemplate mapping\r\n * @returns {Renderer.IUIAsJson} Renderer.IUIAsJson object\r\n */\r\nfunction generateSingle(panelTemplates) {\r\n    var schema = {\r\n        attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].DataHtml2CanvasIgnore, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].True }],\r\n        children: [{\r\n                attributes: [\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].Role, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].Dialog },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].AriaModal, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].True },\r\n                ],\r\n                children: [\r\n                    {\r\n                        children: [\r\n                            {\r\n                                // This adds a "first" dummy tabbable div to the mainContainer. It\'s used as a marker\r\n                                // to handle tabs and shift tabs so focus will stay with elements on just the feedback\r\n                                // dialog. Do not relocate this without updating the TabFocus.ts code.\r\n                                attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].TabIndex, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].Zero }],\r\n                                id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].FirstTabbable,\r\n                            },\r\n                            {\r\n                                attributes: [\r\n                                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].Type, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].Button },\r\n                                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].AriaLabel, value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_2__["getUIStrings"]().CloseLabel },\r\n                                ],\r\n                                id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].CloseButton,\r\n                                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].CloseButton],\r\n                                // tslint:disable-next-line:max-line-length\r\n                                innerHTML: \'<svg viewBox="4 4 16 16" width="16px" height="16px" focusable="false"><path d="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/><\/svg>\',\r\n                                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Tags"].Button,\r\n                            },\r\n                            {\r\n                                children: [\r\n                                    {\r\n                                        children: [_FormTemplates_SingleFormTemplate__WEBPACK_IMPORTED_MODULE_4__["generate"]()],\r\n                                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].FormContainer],\r\n                                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].MiddleFormContainer,\r\n                                    },\r\n                                ].concat(generateMultiPanels(panelTemplates)),\r\n                                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].Hidden],\r\n                                id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].MainContentHolder,\r\n                                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Tags"].Form,\r\n                            },\r\n                            {\r\n                                // This adds a "last" dummy tabbable div to the mainContainer. It\'s used as a marker\r\n                                // to handle tabs and shift tabs so focus will stay with elements on just the feedback\r\n                                // dialog. Do not relocate this without updating the TabFocus.ts code.\r\n                                attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].TabIndex, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].Zero }],\r\n                                id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].LastTabbable,\r\n                            },\r\n                        ],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].MainContainer,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].SingleLayout, _Utils__WEBPACK_IMPORTED_MODULE_3__["isRightToLeft"]() ? _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].Rtl : ""],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverlayBackground,\r\n            }],\r\n    };\r\n    return schema;\r\n}\r\n/**\r\n * Generate Renderer.IUIAsJson objects that holds the different forms that will be used on the bellyband.\r\n * This is used to generate just one form of each one of the templates that are actually going to be used.\r\n * @param {[key: number]: IFormTemplate} formTemplates FeedbackType -> FormTemplate mapping\r\n * @returns {Renderer.IUIAsJson} Renderer.IUIAsJson object\r\n */\r\nfunction generateMultiForms(formTemplates) {\r\n    var wrapper = {\r\n        children: [],\r\n    };\r\n    var pushedContainers = {};\r\n    for (var feedbackType in formTemplates) {\r\n        if (formTemplates.hasOwnProperty(feedbackType)) {\r\n            var notExists = !(formTemplates[feedbackType].containerId in pushedContainers);\r\n            if (notExists) {\r\n                wrapper.children.push(formTemplates[feedbackType].generate());\r\n                pushedContainers[formTemplates[feedbackType].containerId] = true;\r\n            }\r\n        }\r\n    }\r\n    return wrapper.children;\r\n}\r\n/**\r\n * Generate Renderer.IUIAsJson objects that holds the different forms that will be used on the bellyband.\r\n * This is used to generate just one form of each one of the templates that are actually going to be used.\r\n * @param {[key: number]: IFormTemplate} formTemplates FeedbackType -> FormTemplate mapping\r\n * @returns {Renderer.IUIAsJson} Renderer.IUIAsJson object\r\n */\r\nfunction generateMultiPanels(panelTemplates) {\r\n    var wrapper = {\r\n        children: [],\r\n    };\r\n    var pushedContainers = {};\r\n    for (var panelType in panelTemplates) {\r\n        if (panelTemplates.hasOwnProperty(panelType)) {\r\n            var notExists = !(panelTemplates[panelType].containerId in pushedContainers);\r\n            if (notExists) {\r\n                wrapper.children.push(panelTemplates[panelType].generate());\r\n                pushedContainers[panelTemplates[panelType].containerId] = true;\r\n            }\r\n        }\r\n    }\r\n    return wrapper.children;\r\n}\r\n/**\r\n * Generates Renderer.IUIAsJson object that holds the different anchors that will be used on the bellyband.\r\n * @param {[key: number]: IFormTemplate} formTemplates FeedbackType -> FormTemplate mapping\r\n * @returns {Renderer.IUIAsJson} Renderer.IUIAsJson object\r\n */\r\nfunction generateOverallAnchors(formTemplates) {\r\n    var wrapper = {\r\n        children: [],\r\n    };\r\n    if (_Constants__WEBPACK_IMPORTED_MODULE_0__["FeedbackType"].Smile in formTemplates) {\r\n        wrapper.children.push(generateOverallAnchor(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallSmileAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallSmileImage, \r\n        // The svg code for the image\r\n        // tslint:disable-next-line:max-line-length\r\n        \'<svg viewBox="0 0 72 72" width="24px" height="24px" focusable="false"><path d="M36 1C16.7 1 1 16.7 1 36s15.7 35 35 35c19.3 0 35-15.7 35-35S55.3 1 36 1ZM49.3 18.3c2.3 0 4.2 2.7 4.2 6 0 3.3-1.9 6-4.2 6 -2.3 0-4.2-2.7-4.2-6C45.1 21 47 18.3 49.3 18.3ZM22.9 18.3c2.3 0 4.2 2.7 4.2 6 0 3.3-1.9 6-4.2 6 -2.3 0-4.2-2.7-4.2-6C18.7 21 20.6 18.3 22.9 18.3ZM36 58.6c-8.5 0-16-4.1-20.9-10.4l3.5-3.6c3.5 4.5 9.9 7.6 17.4 7.6 7.4 0 13.9-3.1 17.4-7.6l3.6 3.6C52.1 54.4 44.4 58.6 36 58.6Z"/><\/svg>\', _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallSmileText, _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_2__["getUIStrings"]().SmileForm.Anchor));\r\n    }\r\n    if (_Constants__WEBPACK_IMPORTED_MODULE_0__["FeedbackType"].Frown in formTemplates) {\r\n        wrapper.children.push(generateOverallAnchor(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallFrownAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallFrownImage, \r\n        // The svg code for the image\r\n        // tslint:disable-next-line:max-line-length\r\n        \'<svg viewBox="0 0 72 72" width="24px" height="24px" focusable="false"><path d="M36 1C16.7 1 1 16.7 1 36s15.7 35 35 35c19.3 0 35-15.7 35-35S55.3 1 36 1ZM49.3 18.3c2.3 0 4.2 2.7 4.2 6 0 3.3-1.9 6-4.2 6 -2.3 0-4.2-2.7-4.2-6C45.1 21 47 18.3 49.3 18.3ZM22.9 18.3c2.3 0 4.2 2.7 4.2 6 0 3.3-1.9 6-4.2 6 -2.3 0-4.2-2.7-4.2-6C18.7 21 20.6 18.3 22.9 18.3ZM52.8 57.9c-3.3-4.4-9.6-7.3-16.7-7.3 -7.2 0-13.4 3-16.7 7.3l-3.4-3.4c4.7-6.1 11.9-10 20.1-10 8.2 0 15.5 4 20.2 10L52.8 57.9Z"/><\/svg>\', _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallFrownText, _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_2__["getUIStrings"]().FrownForm.Anchor));\r\n    }\r\n    if (_Constants__WEBPACK_IMPORTED_MODULE_0__["FeedbackType"].IdeaRedirect in formTemplates) {\r\n        wrapper.children.push(generateOverallAnchor(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallFeedbackPortalIdeaAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallIdeaImage, \r\n        // The svg code for the image\r\n        // tslint:disable-next-line:max-line-length\r\n        \'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" focusable="false" viewBox="0,0,2048,2048"><path fill="#FAFAFA" fill-opacity="1.000" d="M 213 1920 v -546 l 275 -649 h 1072 l 275 649 v 546 z" /><path fill="#3A3A38" fill-opacity="1.000" d="M 1877 1365 v 598 h -1706 v -598 l 289 -682 h 288 l -41 41 l 44 44 h -239 l -248 597 h 1520 l -221 -532 l 63 -62 m 166 680 h -1536 v 426 h 1536 z" /><path fill="#FAFAFA" fill-opacity="1.000" d="M 1049 1067 l -342 -343 l 664 -664 l 482 483 l -523 524 z" /><path fill="#797774" fill-opacity="1.000" d="M 1536 649 l -271 -272 l 60 -60 l 272 271 m -211 212 l -272 -272 l 60 -60 l 272 271 m -211 211 l -272 -271 l 61 -61 l 271 272 z" /><path fill="#1E8BCD" fill-opacity="1.000" d="M 989 1067 l -343 -343 l 725 -724 l 543 543 l -524 524 h -121 l 524 -524 l -422 -422 l -604 603 l 343 343 z" /><path fill="#3A3A38" fill-opacity="1.000" d="M 1451 1109 h -854 v -85 h 854 z" /><\/svg>\', _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallIdeaText, _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_2__["getUIStrings"]().IdeaForm.Anchor));\r\n    }\r\n    if (_Constants__WEBPACK_IMPORTED_MODULE_0__["FeedbackType"].Idea in formTemplates) {\r\n        wrapper.children.push(generateOverallAnchor(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallIdeaAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallIdeaImage, \r\n        // The svg code for the image\r\n        // tslint:disable-next-line:max-line-length\r\n        \'<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" focusable="false" viewBox="0,0,2048,2048"><path fill="#FAFAFA" fill-opacity="1.000" d="M 213 1920 v -546 l 275 -649 h 1072 l 275 649 v 546 z" /><path fill="#3A3A38" fill-opacity="1.000" d="M 1877 1365 v 598 h -1706 v -598 l 289 -682 h 288 l -41 41 l 44 44 h -239 l -248 597 h 1520 l -221 -532 l 63 -62 m 166 680 h -1536 v 426 h 1536 z" /><path fill="#FAFAFA" fill-opacity="1.000" d="M 1049 1067 l -342 -343 l 664 -664 l 482 483 l -523 524 z" /><path fill="#797774" fill-opacity="1.000" d="M 1536 649 l -271 -272 l 60 -60 l 272 271 m -211 212 l -272 -272 l 60 -60 l 272 271 m -211 211 l -272 -271 l 61 -61 l 271 272 z" /><path fill="#1E8BCD" fill-opacity="1.000" d="M 989 1067 l -343 -343 l 725 -724 l 543 543 l -524 524 h -121 l 524 -524 l -422 -422 l -604 603 l 343 343 z" /><path fill="#3A3A38" fill-opacity="1.000" d="M 1451 1109 h -854 v -85 h 854 z" /><\/svg>\', _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallIdeaText, _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_2__["getUIStrings"]().IdeaForm.Anchor));\r\n    }\r\n    if (_Constants__WEBPACK_IMPORTED_MODULE_0__["FeedbackType"].Bug in formTemplates) {\r\n        wrapper.children.push(generateOverallAnchor(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallBugAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallBugImage, \r\n        // The svg code for the image\r\n        // tslint:disable-next-line:max-line-length\r\n        \'<svg viewBox="150 100 1748 1748" width="24px" height="24px" focusable="false"><path d="M1824 1088q0 26-19 45t-45 19h-224q0 171-67 290l208 209q19 19 19 45t-19 45q-18 19-45 19t-45-19l-198-197q-5 5-15 13t-42 28.5-65 36.5-82 29-97 13v-896h-128v896q-51 0-101.5-13.5t-87-33-66-39-43.5-32.5l-15-14-183 207q-20 21-48 21-24 0-43-16-19-18-20.5-44.5t15.5-46.5l202-227q-58-114-58-274h-224q-26 0-45-19t-19-45 19-45 45-19h224v-294l-173-173q-19-19-19-45t19-45 45-19 45 19l173 173h844l173-173q19-19 45-19t45 19 19 45-19 45l-173 173v294h224q26 0 45 19t19 45zm-480-576h-640q0-133 93.5-226.5t226.5-93.5 226.5 93.5 93.5 226.5z"/><\/svg>\', _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].OverallBugText, _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_2__["getUIStrings"]().BugForm.Anchor));\r\n    }\r\n    return wrapper.children;\r\n}\r\n/**\r\n * Generates a Renderer.IUIAsJson object that holds an anchor that will be used on the bellyband.\r\n * @param overallAnchorID the overall anchor id\r\n * @param overallImageID the image id\r\n * @param imageClass the image class (icon)\r\n * @param overallTextID the id for text box\r\n * @param uiString the string to display\r\n */\r\nfunction generateOverallAnchor(overallAnchorID, overallImageID, svgImage, overallTextID, uiString) {\r\n    return {\r\n        attributes: [\r\n            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].Type, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].Button },\r\n            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].Role, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].Tab },\r\n            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].AriaLabel, value: uiString },\r\n            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeName"].AriaSelected, value: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["AttributeValue"].False },\r\n        ],\r\n        children: [\r\n            {\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].OverallImage],\r\n                id: overallImageID,\r\n                innerHTML: svgImage,\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Tags"].Div,\r\n            },\r\n            {\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].FontSubtitle, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].OverallText],\r\n                id: overallTextID,\r\n                innerText: uiString,\r\n            },\r\n        ],\r\n        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].OverallAnchor, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].TextAlignLeft],\r\n        id: overallAnchorID,\r\n        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Tags"].Button,\r\n    };\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9CZWxseUJhbmQvTGF5b3V0LnRzPzQ1NDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7R0FJRztBQUc4QztBQUNvQztBQUU1QjtBQUNyQjtBQUNxQztBQUdKO0FBSXJFOzs7Ozs7Ozs7R0FTRztBQUNJLFNBQVMsYUFBYSxDQUM1QixhQUErQyxFQUMvQyxjQUFpRDtJQUVqRCxJQUFJLE1BQU0sR0FBdUI7UUFDaEMsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsMERBQWEsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsMkRBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2RixRQUFRLEVBQ1I7WUFDQztnQkFDQyxVQUFVLEVBQ1Y7b0JBQ0MsRUFBRSxJQUFJLEVBQUUsMERBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLDJEQUFjLENBQUMsTUFBTSxFQUFFO29CQUMxRCxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsMkRBQWMsQ0FBQyxJQUFJLEVBQUU7aUJBQzdEO2dCQUNELFFBQVEsRUFDUjtvQkFDQzt3QkFDQyxVQUFVLEVBQ1Y7NEJBQ0MsRUFBRSxJQUFJLEVBQUUsMERBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLDJEQUFjLENBQUMsT0FBTyxFQUFFOzRCQUMzRCxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsZ0RBQUcsQ0FBQyxnQkFBZ0IsRUFBRTs0QkFDcEUsRUFBRSxJQUFJLEVBQUUsMERBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLGlFQUFzQixFQUFFLENBQUMsZ0JBQWdCLEVBQUU7NEJBQ25GLEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSwyREFBYyxDQUFDLDRCQUE0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VUFBVSxFQUNWO1lBQ0MsRUFBRSxJQUFJLEVBQUUsMERBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLDJEQUFjLENBQUMsTUFBTSxFQUFFO1lBQzFELEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSwyREFBYyxDQUFDLEdBQUcsRUFBRTtZQUN2RCxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1lBQ2xELEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSwyREFBYyxDQUFDLEtBQUssRUFBRTtTQUNqRTtRQUNELFFBQVEsRUFDUjtZQUNDO2dCQUNDLE9BQU8sRUFBRSxDQUFDLG9EQUFPLENBQUMsWUFBWSxDQUFDO2dCQUMvQixFQUFFLEVBQUUsY0FBYztnQkFDbEIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLEdBQUcsRUFBRSxpREFBSSxDQUFDLEdBQUc7YUFDYjtZQUNEO2dCQUNDLE9BQU8sRUFBRSxDQUFDLG9EQUFPLENBQUMsWUFBWSxFQUFFLG9EQUFPLENBQUMsV0FBVyxDQUFDO2dCQUNwRCxFQUFFLEVBQUUsYUFBYTtnQkFDakIsU0FBUyxFQUFFLFFBQVE7YUFDbkI7U0FDRDtRQUNELE9BQU8sRUFBRSxDQUFDLG9EQUFPLENBQUMsYUFBYSxFQUFFLG9EQUFPLENBQUMsYUFBYSxDQUFDO1FBQ3ZELEVBQUUsRUFBRSxlQUFlO1FBQ25CLEdBQUcsRUFBRSxpREFBSSxDQUFDLE1BQU07S0FDaEIsQ0FBQztBQUNILENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9VSS9CZWxseUJhbmQvTGF5b3V0LnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIExheW91dC50c1xyXG4gKlxyXG4gKiBNb2R1bGUgZm9yIHRoZSBsYXlvdXRcclxuICovXHJcblxyXG5pbXBvcnQgeyBJRm9ybVRlbXBsYXRlIH0gZnJvbSBcIi4vRm9ybVRlbXBsYXRlcy9JRm9ybVRlbXBsYXRlXCI7XHJcbmltcG9ydCB7IEZlZWRiYWNrVHlwZSB9IGZyb20gXCIuLy4uLy4uL0NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBBdHRyaWJ1dGVOYW1lLCBBdHRyaWJ1dGVWYWx1ZSwgQ2xhc3NlcywgSURzLCBUYWdzIH0gZnJvbSBcIi4vLi4vVWlDb25zdGFudHNcIjtcclxuaW1wb3J0ICogYXMgUmVuZGVyZXIgZnJvbSBcIi4vLi4vUmVuZGVyZXJcIjtcclxuaW1wb3J0ICogYXMgVUlTdHJpbmdzIGZyb20gXCIuLy4uLy4uL1VJU3RyaW5ncy9VSVN0cmluZ3NcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4vLi4vVXRpbHNcIjtcclxuaW1wb3J0ICogYXMgU2luZ2xlRm9ybVRlbXBsYXRlIGZyb20gXCIuL0Zvcm1UZW1wbGF0ZXMvU2luZ2xlRm9ybVRlbXBsYXRlXCI7XHJcbmltcG9ydCB7IElQYW5lbFRlbXBsYXRlIH0gZnJvbSBcIi4vUGFuZWxUZW1wbGF0ZXMvSVBhbmVsVGVtcGxhdGVcIjtcclxuaW1wb3J0IHsgSVVJQXNKc29uIH0gZnJvbSBcIi4vLi4vUmVuZGVyZXJcIjtcclxuaW1wb3J0ICogYXMgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi8uLi8uLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuXHJcbmV4cG9ydCB7SUZvcm1UZW1wbGF0ZX0gZnJvbSBcIi4vRm9ybVRlbXBsYXRlcy9JRm9ybVRlbXBsYXRlXCI7XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIHRoZSBtdWx0aSBsYXlvdXQgYXMgYSBSZW5kZXJlci5JVUlBc0pzb24gb2JqZWN0XHJcbiAqXHJcbiAqIFRoZSBUYWJGb2N1cy50cyBoYXMgYSBkZXBlbmRlbmN5IGluIHRoZSBtYWluQ29udGFpbmVyLiBBbGwgdGFiYmFibGUgZWxlbWVudHNcclxuICogc2hvdWxkIGJlIHBsYWNlZCBpbnNpZGUgdGhlIG1haW5Db250YWluZXIgb3RoZXJ3aXNlIFRhYkZvY3VzLnRzIHdpbGwgbm90XHJcbiAqIGZ1bmN0aW9uIGFzIGV4cGVjdGVkLlxyXG4gKiBAcGFyYW0ge1trZXk6IG51bWJlcl06IElGb3JtVGVtcGxhdGV9IGZvcm1UZW1wbGF0ZXMgRmVlZGJhY2tUeXBlIC0+IEZvcm1UZW1wbGF0ZSBtYXBwaW5nXHJcbiAqIEBwYXJhbSB7W2tleTogbnVtYmVyXTogSVBhbmVsVGVtcGxhdGV9IHBhbmVsVGVtcGxhdGVzIFBhbmVsVHlwZSAtPiBQYW5lbFRlbXBsYXRlIG1hcHBpbmdcclxuICogQHJldHVybnMge1JlbmRlcmVyLklVSUFzSnNvbn0gUmVuZGVyZXIuSVVJQXNKc29uIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTXVsdGkoXHJcblx0Zm9ybVRlbXBsYXRlczogeyBba2V5OiBudW1iZXJdOiBJRm9ybVRlbXBsYXRlIH0sXHJcblx0cGFuZWxUZW1wbGF0ZXM6IHsgW2tleTogbnVtYmVyXTogSVBhbmVsVGVtcGxhdGUgfVxyXG4pOiBSZW5kZXJlci5JVUlBc0pzb24ge1xyXG5cdGxldCBzY2hlbWE6IFJlbmRlcmVyLklVSUFzSnNvbiA9IHtcclxuXHRcdGF0dHJpYnV0ZXM6IFt7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuRGF0YUh0bWwyQ2FudmFzSWdub3JlLCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuVHJ1ZSB9XSxcclxuXHRcdGNoaWxkcmVuOlxyXG5cdFx0W1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0YXR0cmlidXRlczpcclxuXHRcdFx0XHRbXHJcblx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuUm9sZSwgdmFsdWU6IEF0dHJpYnV0ZVZhbHVlLkRpYWxvZyB9LFxyXG5cdFx0XHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLkFyaWFNb2RhbCwgdmFsdWU6IEF0dHJpYnV0ZVZhbHVlLlRydWUgfSxcclxuXHRcdFx0XHRdLFxyXG5cdFx0XHRcdGNoaWxkcmVuOlxyXG5cdFx0XHRcdFtcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0YXR0cmlidXRlczpcclxuXHRcdFx0XHRcdFx0W1xyXG5cdFx0XHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5Sb2xlLCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuVGFiTGlzdCB9LFxyXG5cdFx0XHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5BcmlhRGVzY3JpYmVkQnksIHZhbHVlOiBJRHMuUXVlc3Rpb25MZWZ0VGV4dCB9LFxyXG5cdFx0XHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5BcmlhTGFiZWwsIHZhbHVlOiBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuRmVlZGJhY2tTdWJ0aXRsZSB9LFxyXG5cdFx0XHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5BcmlhT3JpZW50YXRpb24sIHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZS5BcmlhT3JpZW50YXRpb25WYWx1ZVZlcnRpY2FsfSxcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0Y2hpbGRyZW46XHJcblx0XHRcdFx0XHRcdFtcclxuXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBhZGRzIGEgXCJmaXJzdFwiIGR1bW15IHRhYmJhYmxlIGRpdiB0byB0aGUgbWFpbkNvbnRhaW5lci4gSXQncyB1c2VkIGFzIGEgbWFya2VyXHJcblx0XHRcdFx0XHRcdFx0XHQvLyB0byBoYW5kbGUgdGFicyBhbmQgc2hpZnQgdGFicyBzbyBmb2N1cyB3aWxsIHN0YXkgd2l0aCBlbGVtZW50cyBvbiBqdXN0IHRoZSBmZWVkYmFja1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZGlhbG9nLiBEbyBub3QgcmVsb2NhdGUgdGhpcyB3aXRob3V0IHVwZGF0aW5nIHRoZSBUYWJGb2N1cy50cyBjb2RlLlxyXG5cdFx0XHRcdFx0XHRcdFx0YXR0cmlidXRlczogW3sgbmFtZTogQXR0cmlidXRlTmFtZS5UYWJJbmRleCwgdmFsdWU6IEF0dHJpYnV0ZVZhbHVlLlplcm8gfV0sXHJcblx0XHRcdFx0XHRcdFx0XHRpZDogSURzLkZpcnN0VGFiYmFibGUsXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBbXHJcblx0XHRcdFx0XHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5UeXBlLCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuQnV0dG9uIH0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5BcmlhTGFiZWwsIHZhbHVlOiBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuQ2xvc2VMYWJlbCB9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0XHRcdGlkOiBJRHMuQ2xvc2VCdXR0b24sXHJcblx0XHRcdFx0XHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5DbG9zZUJ1dHRvbl0sXHJcblx0XHRcdFx0XHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcblx0XHRcdFx0XHRcdFx0XHRpbm5lckhUTUw6ICc8c3ZnIHZpZXdCb3g9XCI0IDQgMTYgMTZcIiB3aWR0aD1cIjE2cHhcIiBoZWlnaHQ9XCIxNnB4XCIgZm9jdXNhYmxlPVwiZmFsc2VcIj48cGF0aCBkPVwiTTE5LDYuNDFMMTcuNTksNSAxMiwxMC41OSA2LjQxLDUgNSw2LjQxIDEwLjU5LDEyIDUsMTcuNTkgNi40MSwxOSAxMiwxMy40MSAxNy41OSwxOSAxOSwxNy41OSAxMy40MSwxMnpcIi8+PC9zdmc+JyxcclxuXHRcdFx0XHRcdFx0XHRcdHRhZzogVGFncy5CdXR0b24sXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjpcclxuXHRcdFx0XHRcdFx0XHRcdFtcclxuXHRcdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvcm1XaWRlQ29udGFpbmVyLCBDbGFzc2VzLkhpZGRlbl0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IGdlbmVyYXRlTXVsdGlQYW5lbHMocGFuZWxUZW1wbGF0ZXMpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkOiBJRHMuTGVmdFBhbmVsQ29udGFpbmVyLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRhZzogVGFncy5EaXYsXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvbnRTdWJ0aXRsZSwgQ2xhc3Nlcy5UZXh0QWxpZ25MZWZ0XSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ6IElEcy5RdWVzdGlvbkxlZnRUZXh0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbm5lclRleHQ6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5GZWVkYmFja1N1YnRpdGxlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjogZ2VuZXJhdGVPdmVyYWxsQW5jaG9ycyhmb3JtVGVtcGxhdGVzKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkOiBJRHMuT3ZlcmFsbEFuY2hvcnNDb250YWluZXIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ6IElEcy5Db2x1bW5TZXBhcmF0b3JEaXYsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9ybUNvbnRhaW5lcl0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ6IElEcy5MZWZ0Rm9ybUNvbnRhaW5lcixcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOiBnZW5lcmF0ZU11bHRpRm9ybXMoZm9ybVRlbXBsYXRlcyksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NlczpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Q2xhc3Nlcy5Gb3JtQ29udGFpbmVyLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucygpLnRyYW5zaXRpb25FbmFibGVkID8gQ2xhc3Nlcy5IaWRkZW4gOiBDbGFzc2VzLlZpc2libGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5Sb2xlLCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuVGFiUGFuZWx9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuQXJpYUV4cGFuZGVkLCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuRmFsc2V9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZDogSURzLk1pZGRsZUZvcm1Db250YWluZXIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuSGlkZGVuXSxcclxuXHRcdFx0XHRcdFx0XHRcdGlkOiBJRHMuTWFpbkNvbnRlbnRIb2xkZXIsXHJcblx0XHRcdFx0XHRcdFx0XHR0YWc6IFRhZ3MuRm9ybSxcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFRoaXMgYWRkcyBhIFwibGFzdFwiIGR1bW15IHRhYmJhYmxlIGRpdiB0byB0aGUgbWFpbkNvbnRhaW5lci4gSXQncyB1c2VkIGFzIGEgbWFya2VyXHJcblx0XHRcdFx0XHRcdFx0XHQvLyB0byBoYW5kbGUgdGFicyBhbmQgc2hpZnQgdGFicyBzbyBmb2N1cyB3aWxsIHN0YXkgd2l0aCBlbGVtZW50cyBvbiBqdXN0IHRoZSBmZWVkYmFja1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZGlhbG9nLiBEbyBub3QgcmVsb2NhdGUgdGhpcyB3aXRob3V0IHVwZGF0aW5nIHRoZSBUYWJGb2N1cy50cyBjb2RlLlxyXG5cdFx0XHRcdFx0XHRcdFx0YXR0cmlidXRlczogW3sgbmFtZTogQXR0cmlidXRlTmFtZS5UYWJJbmRleCwgdmFsdWU6IEF0dHJpYnV0ZVZhbHVlLlplcm8gfV0sXHJcblx0XHRcdFx0XHRcdFx0XHRpZDogSURzLkxhc3RUYWJiYWJsZSxcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRpZDogSURzLk1haW5Db250YWluZXIsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0Y2xhc3NlczogW1V0aWxzLmlzUmlnaHRUb0xlZnQoKSA/IENsYXNzZXMuUnRsIDogXCJcIiBdLFxyXG5cdFx0XHRcdGlkOiBJRHMuT3ZlcmxheUJhY2tncm91bmQsXHJcblx0XHRcdH0sXHJcblx0XHRdLFxyXG5cdH07XHJcblx0cmV0dXJuIHNjaGVtYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyB0aGUgc2luZ2xlIGxheW91dCBhcyBhIFJlbmRlcmVyLklVSUFzSnNvbiBvYmplY3RcclxuICpcclxuICogVGhlIFRhYkZvY3VzLnRzIGhhcyBhIGRlcGVuZGVuY3kgaW4gdGhlIG1haW5Db250YWluZXIuIEFsbCB0YWJiYWJsZSBlbGVtZW50c1xyXG4gKiBzaG91bGQgYmUgcGxhY2VkIGluc2lkZSB0aGUgbWFpbkNvbnRhaW5lciBvdGhlcndpc2UgVGFiRm9jdXMudHMgd2lsbCBub3RcclxuICogZnVuY3Rpb24gYXMgZXhwZWN0ZWQuXHJcbiAqIEBwYXJhbSB7W2tleTogbnVtYmVyXTogSVBhbmVsVGVtcGxhdGV9IHBhbmVsVGVtcGxhdGVzIFBhbmVsVHlwZSAtPiBQYW5lbFRlbXBsYXRlIG1hcHBpbmdcclxuICogQHJldHVybnMge1JlbmRlcmVyLklVSUFzSnNvbn0gUmVuZGVyZXIuSVVJQXNKc29uIG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU2luZ2xlKHBhbmVsVGVtcGxhdGVzOiB7IFtrZXk6IG51bWJlcl06IElQYW5lbFRlbXBsYXRlIH0pOiBSZW5kZXJlci5JVUlBc0pzb24ge1xyXG5cdGxldCBzY2hlbWE6IFJlbmRlcmVyLklVSUFzSnNvbiA9IHtcclxuXHRcdGF0dHJpYnV0ZXM6IFt7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuRGF0YUh0bWwyQ2FudmFzSWdub3JlLCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuVHJ1ZSB9XSxcclxuXHRcdGNoaWxkcmVuOiBbe1xyXG5cdFx0XHRhdHRyaWJ1dGVzOlxyXG5cdFx0XHRcdFtcclxuXHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5Sb2xlLCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuRGlhbG9nIH0sXHJcblx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuQXJpYU1vZGFsLCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuVHJ1ZSB9LFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdGNoaWxkcmVuOlxyXG5cdFx0XHRcdFtcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0Y2hpbGRyZW46XHJcblx0XHRcdFx0XHRcdFx0W1xyXG5cdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBUaGlzIGFkZHMgYSBcImZpcnN0XCIgZHVtbXkgdGFiYmFibGUgZGl2IHRvIHRoZSBtYWluQ29udGFpbmVyLiBJdCdzIHVzZWQgYXMgYSBtYXJrZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gdG8gaGFuZGxlIHRhYnMgYW5kIHNoaWZ0IHRhYnMgc28gZm9jdXMgd2lsbCBzdGF5IHdpdGggZWxlbWVudHMgb24ganVzdCB0aGUgZmVlZGJhY2tcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZGlhbG9nLiBEbyBub3QgcmVsb2NhdGUgdGhpcyB3aXRob3V0IHVwZGF0aW5nIHRoZSBUYWJGb2N1cy50cyBjb2RlLlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBbeyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlRhYkluZGV4LCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuWmVybyB9XSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ6IElEcy5GaXJzdFRhYmJhYmxlLFxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXR0cmlidXRlczogW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5UeXBlLCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuQnV0dG9uIH0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLkFyaWFMYWJlbCwgdmFsdWU6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5DbG9zZUxhYmVsIH0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBJRHMuQ2xvc2VCdXR0b24sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkNsb3NlQnV0dG9uXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRpbm5lckhUTUw6ICc8c3ZnIHZpZXdCb3g9XCI0IDQgMTYgMTZcIiB3aWR0aD1cIjE2cHhcIiBoZWlnaHQ9XCIxNnB4XCIgZm9jdXNhYmxlPVwiZmFsc2VcIj48cGF0aCBkPVwiTTE5LDYuNDFMMTcuNTksNSAxMiwxMC41OSA2LjQxLDUgNSw2LjQxIDEwLjU5LDEyIDUsMTcuNTkgNi40MSwxOSAxMiwxMy40MSAxNy41OSwxOSAxOSwxNy41OSAxMy40MSwxMnpcIi8+PC9zdmc+JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGFnOiBUYWdzLkJ1dHRvbixcclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46IFtTaW5nbGVGb3JtVGVtcGxhdGUuZ2VuZXJhdGUoKV0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvcm1Db250YWluZXJdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZDogSURzLk1pZGRsZUZvcm1Db250YWluZXIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF0uY29uY2F0KChnZW5lcmF0ZU11bHRpUGFuZWxzKHBhbmVsVGVtcGxhdGVzKSBhc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Q29uY2F0QXJyYXk8eyBjaGlsZHJlbjogSVVJQXNKc29uW10sIGNsYXNzZXM6IHN0cmluZ1tdLCBpZDogc3RyaW5nIH0+KSksXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkhpZGRlbl0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBJRHMuTWFpbkNvbnRlbnRIb2xkZXIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRhZzogVGFncy5Gb3JtLFxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHJcblx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoaXMgYWRkcyBhIFwibGFzdFwiIGR1bW15IHRhYmJhYmxlIGRpdiB0byB0aGUgbWFpbkNvbnRhaW5lci4gSXQncyB1c2VkIGFzIGEgbWFya2VyXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHRvIGhhbmRsZSB0YWJzIGFuZCBzaGlmdCB0YWJzIHNvIGZvY3VzIHdpbGwgc3RheSB3aXRoIGVsZW1lbnRzIG9uIGp1c3QgdGhlIGZlZWRiYWNrXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGRpYWxvZy4gRG8gbm90IHJlbG9jYXRlIHRoaXMgd2l0aG91dCB1cGRhdGluZyB0aGUgVGFiRm9jdXMudHMgY29kZS5cclxuXHRcdFx0XHRcdFx0XHRcdFx0YXR0cmlidXRlczogW3sgbmFtZTogQXR0cmlidXRlTmFtZS5UYWJJbmRleCwgdmFsdWU6IEF0dHJpYnV0ZVZhbHVlLlplcm8gfV0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBJRHMuTGFzdFRhYmJhYmxlLFxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRpZDogSURzLk1haW5Db250YWluZXIsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLlNpbmdsZUxheW91dCwgVXRpbHMuaXNSaWdodFRvTGVmdCgpID8gQ2xhc3Nlcy5SdGwgOiBcIlwiXSxcclxuXHRcdFx0aWQ6IElEcy5PdmVybGF5QmFja2dyb3VuZCxcclxuXHRcdH1dLFxyXG5cdH07XHJcblx0cmV0dXJuIHNjaGVtYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIFJlbmRlcmVyLklVSUFzSnNvbiBvYmplY3RzIHRoYXQgaG9sZHMgdGhlIGRpZmZlcmVudCBmb3JtcyB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgYmVsbHliYW5kLlxyXG4gKiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUganVzdCBvbmUgZm9ybSBvZiBlYWNoIG9uZSBvZiB0aGUgdGVtcGxhdGVzIHRoYXQgYXJlIGFjdHVhbGx5IGdvaW5nIHRvIGJlIHVzZWQuXHJcbiAqIEBwYXJhbSB7W2tleTogbnVtYmVyXTogSUZvcm1UZW1wbGF0ZX0gZm9ybVRlbXBsYXRlcyBGZWVkYmFja1R5cGUgLT4gRm9ybVRlbXBsYXRlIG1hcHBpbmdcclxuICogQHJldHVybnMge1JlbmRlcmVyLklVSUFzSnNvbn0gUmVuZGVyZXIuSVVJQXNKc29uIG9iamVjdFxyXG4gKi9cclxuZnVuY3Rpb24gZ2VuZXJhdGVNdWx0aUZvcm1zKGZvcm1UZW1wbGF0ZXM6IHsgW2tleTogbnVtYmVyXTogSUZvcm1UZW1wbGF0ZSB9KTogUmVuZGVyZXIuSVVJQXNKc29uW10ge1xyXG5cdGxldCB3cmFwcGVyOiBSZW5kZXJlci5JVUlBc0pzb24gPSB7XHJcblx0XHRjaGlsZHJlbjogW10sXHJcblx0fTtcclxuXHJcblx0bGV0IHB1c2hlZENvbnRhaW5lcnM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XHJcblxyXG5cdGZvciAobGV0IGZlZWRiYWNrVHlwZSBpbiBmb3JtVGVtcGxhdGVzKSB7XHJcblx0XHRpZiAoZm9ybVRlbXBsYXRlcy5oYXNPd25Qcm9wZXJ0eShmZWVkYmFja1R5cGUpKSB7XHJcblx0XHRcdGxldCBub3RFeGlzdHM6IGJvb2xlYW4gPSAhKGZvcm1UZW1wbGF0ZXNbZmVlZGJhY2tUeXBlXS5jb250YWluZXJJZCBpbiBwdXNoZWRDb250YWluZXJzKTtcclxuXHRcdFx0aWYgKG5vdEV4aXN0cykge1xyXG5cdFx0XHRcdHdyYXBwZXIuY2hpbGRyZW4ucHVzaChmb3JtVGVtcGxhdGVzW2ZlZWRiYWNrVHlwZV0uZ2VuZXJhdGUoKSk7XHJcblx0XHRcdFx0cHVzaGVkQ29udGFpbmVyc1tmb3JtVGVtcGxhdGVzW2ZlZWRiYWNrVHlwZV0uY29udGFpbmVySWRdID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHdyYXBwZXIuY2hpbGRyZW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSBSZW5kZXJlci5JVUlBc0pzb24gb2JqZWN0cyB0aGF0IGhvbGRzIHRoZSBkaWZmZXJlbnQgZm9ybXMgdGhhdCB3aWxsIGJlIHVzZWQgb24gdGhlIGJlbGx5YmFuZC5cclxuICogVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIGp1c3Qgb25lIGZvcm0gb2YgZWFjaCBvbmUgb2YgdGhlIHRlbXBsYXRlcyB0aGF0IGFyZSBhY3R1YWxseSBnb2luZyB0byBiZSB1c2VkLlxyXG4gKiBAcGFyYW0ge1trZXk6IG51bWJlcl06IElGb3JtVGVtcGxhdGV9IGZvcm1UZW1wbGF0ZXMgRmVlZGJhY2tUeXBlIC0+IEZvcm1UZW1wbGF0ZSBtYXBwaW5nXHJcbiAqIEByZXR1cm5zIHtSZW5kZXJlci5JVUlBc0pzb259IFJlbmRlcmVyLklVSUFzSnNvbiBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIGdlbmVyYXRlTXVsdGlQYW5lbHMocGFuZWxUZW1wbGF0ZXM6IHsgW2tleTogbnVtYmVyXTogSVBhbmVsVGVtcGxhdGUgfSk6IFJlbmRlcmVyLklVSUFzSnNvbltdIHtcclxuXHRsZXQgd3JhcHBlcjogUmVuZGVyZXIuSVVJQXNKc29uID0ge1xyXG5cdFx0Y2hpbGRyZW46IFtdLFxyXG5cdH07XHJcblxyXG5cdGxldCBwdXNoZWRDb250YWluZXJzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xyXG5cclxuXHRmb3IgKGxldCBwYW5lbFR5cGUgaW4gcGFuZWxUZW1wbGF0ZXMpIHtcclxuXHRcdGlmIChwYW5lbFRlbXBsYXRlcy5oYXNPd25Qcm9wZXJ0eShwYW5lbFR5cGUpKSB7XHJcblx0XHRcdGxldCBub3RFeGlzdHM6IGJvb2xlYW4gPSAhKHBhbmVsVGVtcGxhdGVzW3BhbmVsVHlwZV0uY29udGFpbmVySWQgaW4gcHVzaGVkQ29udGFpbmVycyk7XHJcblx0XHRcdGlmIChub3RFeGlzdHMpIHtcclxuXHRcdFx0XHR3cmFwcGVyLmNoaWxkcmVuLnB1c2gocGFuZWxUZW1wbGF0ZXNbcGFuZWxUeXBlXS5nZW5lcmF0ZSgpKTtcclxuXHRcdFx0XHRwdXNoZWRDb250YWluZXJzW3BhbmVsVGVtcGxhdGVzW3BhbmVsVHlwZV0uY29udGFpbmVySWRdID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHdyYXBwZXIuY2hpbGRyZW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgUmVuZGVyZXIuSVVJQXNKc29uIG9iamVjdCB0aGF0IGhvbGRzIHRoZSBkaWZmZXJlbnQgYW5jaG9ycyB0aGF0IHdpbGwgYmUgdXNlZCBvbiB0aGUgYmVsbHliYW5kLlxyXG4gKiBAcGFyYW0ge1trZXk6IG51bWJlcl06IElGb3JtVGVtcGxhdGV9IGZvcm1UZW1wbGF0ZXMgRmVlZGJhY2tUeXBlIC0+IEZvcm1UZW1wbGF0ZSBtYXBwaW5nXHJcbiAqIEByZXR1cm5zIHtSZW5kZXJlci5JVUlBc0pzb259IFJlbmRlcmVyLklVSUFzSnNvbiBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIGdlbmVyYXRlT3ZlcmFsbEFuY2hvcnMoZm9ybVRlbXBsYXRlczogeyBba2V5OiBudW1iZXJdOiBJRm9ybVRlbXBsYXRlIH0pOiBSZW5kZXJlci5JVUlBc0pzb25bXSB7XHJcblx0bGV0IHdyYXBwZXI6IFJlbmRlcmVyLklVSUFzSnNvbiA9IHtcclxuXHRcdGNoaWxkcmVuOiBbXSxcclxuXHR9O1xyXG5cclxuXHRpZiAoRmVlZGJhY2tUeXBlLlNtaWxlIGluIGZvcm1UZW1wbGF0ZXMpIHtcclxuXHRcdHdyYXBwZXIuY2hpbGRyZW4ucHVzaChnZW5lcmF0ZU92ZXJhbGxBbmNob3IoSURzLk92ZXJhbGxTbWlsZUFuY2hvciwgSURzLk92ZXJhbGxTbWlsZUltYWdlLFxyXG5cdFx0XHQvLyBUaGUgc3ZnIGNvZGUgZm9yIHRoZSBpbWFnZVxyXG5cdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcblx0XHRcdCc8c3ZnIHZpZXdCb3g9XCIwIDAgNzIgNzJcIiB3aWR0aD1cIjI0cHhcIiBoZWlnaHQ9XCIyNHB4XCIgZm9jdXNhYmxlPVwiZmFsc2VcIj48cGF0aCBkPVwiTTM2IDFDMTYuNyAxIDEgMTYuNyAxIDM2czE1LjcgMzUgMzUgMzVjMTkuMyAwIDM1LTE1LjcgMzUtMzVTNTUuMyAxIDM2IDFaTTQ5LjMgMTguM2MyLjMgMCA0LjIgMi43IDQuMiA2IDAgMy4zLTEuOSA2LTQuMiA2IC0yLjMgMC00LjItMi43LTQuMi02QzQ1LjEgMjEgNDcgMTguMyA0OS4zIDE4LjNaTTIyLjkgMTguM2MyLjMgMCA0LjIgMi43IDQuMiA2IDAgMy4zLTEuOSA2LTQuMiA2IC0yLjMgMC00LjItMi43LTQuMi02QzE4LjcgMjEgMjAuNiAxOC4zIDIyLjkgMTguM1pNMzYgNTguNmMtOC41IDAtMTYtNC4xLTIwLjktMTAuNGwzLjUtMy42YzMuNSA0LjUgOS45IDcuNiAxNy40IDcuNiA3LjQgMCAxMy45LTMuMSAxNy40LTcuNmwzLjYgMy42QzUyLjEgNTQuNCA0NC40IDU4LjYgMzYgNTguNlpcIi8+PC9zdmc+JyxcclxuXHRcdFx0SURzLk92ZXJhbGxTbWlsZVRleHQsIFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5TbWlsZUZvcm0uQW5jaG9yKSk7XHJcblx0fVxyXG5cclxuXHRpZiAoRmVlZGJhY2tUeXBlLkZyb3duIGluIGZvcm1UZW1wbGF0ZXMpIHtcclxuXHRcdHdyYXBwZXIuY2hpbGRyZW4ucHVzaChnZW5lcmF0ZU92ZXJhbGxBbmNob3IoSURzLk92ZXJhbGxGcm93bkFuY2hvciwgSURzLk92ZXJhbGxGcm93bkltYWdlLFxyXG5cdFx0XHQvLyBUaGUgc3ZnIGNvZGUgZm9yIHRoZSBpbWFnZVxyXG5cdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcblx0XHRcdCc8c3ZnIHZpZXdCb3g9XCIwIDAgNzIgNzJcIiB3aWR0aD1cIjI0cHhcIiBoZWlnaHQ9XCIyNHB4XCIgZm9jdXNhYmxlPVwiZmFsc2VcIj48cGF0aCBkPVwiTTM2IDFDMTYuNyAxIDEgMTYuNyAxIDM2czE1LjcgMzUgMzUgMzVjMTkuMyAwIDM1LTE1LjcgMzUtMzVTNTUuMyAxIDM2IDFaTTQ5LjMgMTguM2MyLjMgMCA0LjIgMi43IDQuMiA2IDAgMy4zLTEuOSA2LTQuMiA2IC0yLjMgMC00LjItMi43LTQuMi02QzQ1LjEgMjEgNDcgMTguMyA0OS4zIDE4LjNaTTIyLjkgMTguM2MyLjMgMCA0LjIgMi43IDQuMiA2IDAgMy4zLTEuOSA2LTQuMiA2IC0yLjMgMC00LjItMi43LTQuMi02QzE4LjcgMjEgMjAuNiAxOC4zIDIyLjkgMTguM1pNNTIuOCA1Ny45Yy0zLjMtNC40LTkuNi03LjMtMTYuNy03LjMgLTcuMiAwLTEzLjQgMy0xNi43IDcuM2wtMy40LTMuNGM0LjctNi4xIDExLjktMTAgMjAuMS0xMCA4LjIgMCAxNS41IDQgMjAuMiAxMEw1Mi44IDU3LjlaXCIvPjwvc3ZnPicsXHJcblx0XHRcdElEcy5PdmVyYWxsRnJvd25UZXh0LCBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuRnJvd25Gb3JtLkFuY2hvcikpO1xyXG5cdH1cclxuXHJcblx0aWYgKEZlZWRiYWNrVHlwZS5JZGVhUmVkaXJlY3QgaW4gZm9ybVRlbXBsYXRlcykge1xyXG5cdFx0d3JhcHBlci5jaGlsZHJlbi5wdXNoKGdlbmVyYXRlT3ZlcmFsbEFuY2hvcihJRHMuT3ZlcmFsbEZlZWRiYWNrUG9ydGFsSWRlYUFuY2hvciwgSURzLk92ZXJhbGxJZGVhSW1hZ2UsXHJcblx0XHRcdC8vIFRoZSBzdmcgY29kZSBmb3IgdGhlIGltYWdlXHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcclxuXHRcdFx0JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZvY3VzYWJsZT1cImZhbHNlXCIgdmlld0JveD1cIjAsMCwyMDQ4LDIwNDhcIj48cGF0aCBmaWxsPVwiI0ZBRkFGQVwiIGZpbGwtb3BhY2l0eT1cIjEuMDAwXCIgZD1cIk0gMjEzIDE5MjAgdiAtNTQ2IGwgMjc1IC02NDkgaCAxMDcyIGwgMjc1IDY0OSB2IDU0NiB6XCIgLz48cGF0aCBmaWxsPVwiIzNBM0EzOFwiIGZpbGwtb3BhY2l0eT1cIjEuMDAwXCIgZD1cIk0gMTg3NyAxMzY1IHYgNTk4IGggLTE3MDYgdiAtNTk4IGwgMjg5IC02ODIgaCAyODggbCAtNDEgNDEgbCA0NCA0NCBoIC0yMzkgbCAtMjQ4IDU5NyBoIDE1MjAgbCAtMjIxIC01MzIgbCA2MyAtNjIgbSAxNjYgNjgwIGggLTE1MzYgdiA0MjYgaCAxNTM2IHpcIiAvPjxwYXRoIGZpbGw9XCIjRkFGQUZBXCIgZmlsbC1vcGFjaXR5PVwiMS4wMDBcIiBkPVwiTSAxMDQ5IDEwNjcgbCAtMzQyIC0zNDMgbCA2NjQgLTY2NCBsIDQ4MiA0ODMgbCAtNTIzIDUyNCB6XCIgLz48cGF0aCBmaWxsPVwiIzc5Nzc3NFwiIGZpbGwtb3BhY2l0eT1cIjEuMDAwXCIgZD1cIk0gMTUzNiA2NDkgbCAtMjcxIC0yNzIgbCA2MCAtNjAgbCAyNzIgMjcxIG0gLTIxMSAyMTIgbCAtMjcyIC0yNzIgbCA2MCAtNjAgbCAyNzIgMjcxIG0gLTIxMSAyMTEgbCAtMjcyIC0yNzEgbCA2MSAtNjEgbCAyNzEgMjcyIHpcIiAvPjxwYXRoIGZpbGw9XCIjMUU4QkNEXCIgZmlsbC1vcGFjaXR5PVwiMS4wMDBcIiBkPVwiTSA5ODkgMTA2NyBsIC0zNDMgLTM0MyBsIDcyNSAtNzI0IGwgNTQzIDU0MyBsIC01MjQgNTI0IGggLTEyMSBsIDUyNCAtNTI0IGwgLTQyMiAtNDIyIGwgLTYwNCA2MDMgbCAzNDMgMzQzIHpcIiAvPjxwYXRoIGZpbGw9XCIjM0EzQTM4XCIgZmlsbC1vcGFjaXR5PVwiMS4wMDBcIiBkPVwiTSAxNDUxIDExMDkgaCAtODU0IHYgLTg1IGggODU0IHpcIiAvPjwvc3ZnPicsXHJcblx0XHRcdElEcy5PdmVyYWxsSWRlYVRleHQsIFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5JZGVhRm9ybS5BbmNob3IpKTtcclxuXHR9XHJcblxyXG5cdGlmIChGZWVkYmFja1R5cGUuSWRlYSBpbiBmb3JtVGVtcGxhdGVzKSB7XHJcblx0XHR3cmFwcGVyLmNoaWxkcmVuLnB1c2goZ2VuZXJhdGVPdmVyYWxsQW5jaG9yKElEcy5PdmVyYWxsSWRlYUFuY2hvciwgSURzLk92ZXJhbGxJZGVhSW1hZ2UsXHJcblx0XHRcdC8vIFRoZSBzdmcgY29kZSBmb3IgdGhlIGltYWdlXHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcclxuXHRcdFx0JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZvY3VzYWJsZT1cImZhbHNlXCIgdmlld0JveD1cIjAsMCwyMDQ4LDIwNDhcIj48cGF0aCBmaWxsPVwiI0ZBRkFGQVwiIGZpbGwtb3BhY2l0eT1cIjEuMDAwXCIgZD1cIk0gMjEzIDE5MjAgdiAtNTQ2IGwgMjc1IC02NDkgaCAxMDcyIGwgMjc1IDY0OSB2IDU0NiB6XCIgLz48cGF0aCBmaWxsPVwiIzNBM0EzOFwiIGZpbGwtb3BhY2l0eT1cIjEuMDAwXCIgZD1cIk0gMTg3NyAxMzY1IHYgNTk4IGggLTE3MDYgdiAtNTk4IGwgMjg5IC02ODIgaCAyODggbCAtNDEgNDEgbCA0NCA0NCBoIC0yMzkgbCAtMjQ4IDU5NyBoIDE1MjAgbCAtMjIxIC01MzIgbCA2MyAtNjIgbSAxNjYgNjgwIGggLTE1MzYgdiA0MjYgaCAxNTM2IHpcIiAvPjxwYXRoIGZpbGw9XCIjRkFGQUZBXCIgZmlsbC1vcGFjaXR5PVwiMS4wMDBcIiBkPVwiTSAxMDQ5IDEwNjcgbCAtMzQyIC0zNDMgbCA2NjQgLTY2NCBsIDQ4MiA0ODMgbCAtNTIzIDUyNCB6XCIgLz48cGF0aCBmaWxsPVwiIzc5Nzc3NFwiIGZpbGwtb3BhY2l0eT1cIjEuMDAwXCIgZD1cIk0gMTUzNiA2NDkgbCAtMjcxIC0yNzIgbCA2MCAtNjAgbCAyNzIgMjcxIG0gLTIxMSAyMTIgbCAtMjcyIC0yNzIgbCA2MCAtNjAgbCAyNzIgMjcxIG0gLTIxMSAyMTEgbCAtMjcyIC0yNzEgbCA2MSAtNjEgbCAyNzEgMjcyIHpcIiAvPjxwYXRoIGZpbGw9XCIjMUU4QkNEXCIgZmlsbC1vcGFjaXR5PVwiMS4wMDBcIiBkPVwiTSA5ODkgMTA2NyBsIC0zNDMgLTM0MyBsIDcyNSAtNzI0IGwgNTQzIDU0MyBsIC01MjQgNTI0IGggLTEyMSBsIDUyNCAtNTI0IGwgLTQyMiAtNDIyIGwgLTYwNCA2MDMgbCAzNDMgMzQzIHpcIiAvPjxwYXRoIGZpbGw9XCIjM0EzQTM4XCIgZmlsbC1vcGFjaXR5PVwiMS4wMDBcIiBkPVwiTSAxNDUxIDExMDkgaCAtODU0IHYgLTg1IGggODU0IHpcIiAvPjwvc3ZnPicsXHJcblx0XHRcdElEcy5PdmVyYWxsSWRlYVRleHQsIFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5JZGVhRm9ybS5BbmNob3IpKTtcclxuXHR9XHJcblxyXG5cdGlmIChGZWVkYmFja1R5cGUuQnVnIGluIGZvcm1UZW1wbGF0ZXMpIHtcclxuXHRcdHdyYXBwZXIuY2hpbGRyZW4ucHVzaChnZW5lcmF0ZU92ZXJhbGxBbmNob3IoSURzLk92ZXJhbGxCdWdBbmNob3IsIElEcy5PdmVyYWxsQnVnSW1hZ2UsXHJcblx0XHRcdC8vIFRoZSBzdmcgY29kZSBmb3IgdGhlIGltYWdlXHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcclxuXHRcdFx0Jzxzdmcgdmlld0JveD1cIjE1MCAxMDAgMTc0OCAxNzQ4XCIgd2lkdGg9XCIyNHB4XCIgaGVpZ2h0PVwiMjRweFwiIGZvY3VzYWJsZT1cImZhbHNlXCI+PHBhdGggZD1cIk0xODI0IDEwODhxMCAyNi0xOSA0NXQtNDUgMTloLTIyNHEwIDE3MS02NyAyOTBsMjA4IDIwOXExOSAxOSAxOSA0NXQtMTkgNDVxLTE4IDE5LTQ1IDE5dC00NS0xOWwtMTk4LTE5N3EtNSA1LTE1IDEzdC00MiAyOC41LTY1IDM2LjUtODIgMjktOTcgMTN2LTg5NmgtMTI4djg5NnEtNTEgMC0xMDEuNS0xMy41dC04Ny0zMy02Ni0zOS00My41LTMyLjVsLTE1LTE0LTE4MyAyMDdxLTIwIDIxLTQ4IDIxLTI0IDAtNDMtMTYtMTktMTgtMjAuNS00NC41dDE1LjUtNDYuNWwyMDItMjI3cS01OC0xMTQtNTgtMjc0aC0yMjRxLTI2IDAtNDUtMTl0LTE5LTQ1IDE5LTQ1IDQ1LTE5aDIyNHYtMjk0bC0xNzMtMTczcS0xOS0xOS0xOS00NXQxOS00NSA0NS0xOSA0NSAxOWwxNzMgMTczaDg0NGwxNzMtMTczcTE5LTE5IDQ1LTE5dDQ1IDE5IDE5IDQ1LTE5IDQ1bC0xNzMgMTczdjI5NGgyMjRxMjYgMCA0NSAxOXQxOSA0NXptLTQ4MC01NzZoLTY0MHEwLTEzMyA5My41LTIyNi41dDIyNi41LTkzLjUgMjI2LjUgOTMuNSA5My41IDIyNi41elwiLz48L3N2Zz4nLFxyXG5cdFx0XHRJRHMuT3ZlcmFsbEJ1Z1RleHQsIFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5CdWdGb3JtLkFuY2hvcikpO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHdyYXBwZXIuY2hpbGRyZW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBSZW5kZXJlci5JVUlBc0pzb24gb2JqZWN0IHRoYXQgaG9sZHMgYW4gYW5jaG9yIHRoYXQgd2lsbCBiZSB1c2VkIG9uIHRoZSBiZWxseWJhbmQuXHJcbiAqIEBwYXJhbSBvdmVyYWxsQW5jaG9ySUQgdGhlIG92ZXJhbGwgYW5jaG9yIGlkXHJcbiAqIEBwYXJhbSBvdmVyYWxsSW1hZ2VJRCB0aGUgaW1hZ2UgaWRcclxuICogQHBhcmFtIGltYWdlQ2xhc3MgdGhlIGltYWdlIGNsYXNzIChpY29uKVxyXG4gKiBAcGFyYW0gb3ZlcmFsbFRleHRJRCB0aGUgaWQgZm9yIHRleHQgYm94XHJcbiAqIEBwYXJhbSB1aVN0cmluZyB0aGUgc3RyaW5nIHRvIGRpc3BsYXlcclxuICovXHJcbmZ1bmN0aW9uIGdlbmVyYXRlT3ZlcmFsbEFuY2hvcihcclxuXHRvdmVyYWxsQW5jaG9ySUQ6IHN0cmluZywgb3ZlcmFsbEltYWdlSUQ6IHN0cmluZywgc3ZnSW1hZ2U6IHN0cmluZyxcclxuXHRvdmVyYWxsVGV4dElEOiBzdHJpbmcsIHVpU3RyaW5nOiBzdHJpbmcpOiBSZW5kZXJlci5JVUlBc0pzb24ge1xyXG5cdHJldHVybiB7XHJcblx0XHRhdHRyaWJ1dGVzOlxyXG5cdFx0W1xyXG5cdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuVHlwZSwgdmFsdWU6IEF0dHJpYnV0ZVZhbHVlLkJ1dHRvbiB9LFxyXG5cdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuUm9sZSwgdmFsdWU6IEF0dHJpYnV0ZVZhbHVlLlRhYiB9LFxyXG5cdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuQXJpYUxhYmVsLCB2YWx1ZTogdWlTdHJpbmcgfSxcclxuXHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLkFyaWFTZWxlY3RlZCwgdmFsdWU6IEF0dHJpYnV0ZVZhbHVlLkZhbHNlIH0sXHJcblx0XHRdLFxyXG5cdFx0Y2hpbGRyZW46XHJcblx0XHRbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5PdmVyYWxsSW1hZ2VdLFxyXG5cdFx0XHRcdGlkOiBvdmVyYWxsSW1hZ2VJRCxcclxuXHRcdFx0XHRpbm5lckhUTUw6IHN2Z0ltYWdlLFxyXG5cdFx0XHRcdHRhZzogVGFncy5EaXYsXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5Gb250U3VidGl0bGUsIENsYXNzZXMuT3ZlcmFsbFRleHRdLFxyXG5cdFx0XHRcdGlkOiBvdmVyYWxsVGV4dElELFxyXG5cdFx0XHRcdGlubmVyVGV4dDogdWlTdHJpbmcsXHJcblx0XHRcdH0sXHJcblx0XHRdLFxyXG5cdFx0Y2xhc3NlczogW0NsYXNzZXMuT3ZlcmFsbEFuY2hvciwgQ2xhc3Nlcy5UZXh0QWxpZ25MZWZ0XSxcclxuXHRcdGlkOiBvdmVyYWxsQW5jaG9ySUQsXHJcblx0XHR0YWc6IFRhZ3MuQnV0dG9uLFxyXG5cdH07XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/UI/BellyBand/Layout.ts\n')},"./scripts/app/UI/BellyBand/PanelTemplates/ThanksPanelTemplate.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return generate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "containerId", function() { return containerId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onSelect", function() { return onSelect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "type", function() { return type; });\n/* harmony import */ var _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../../UIStrings/UIStrings */ "./scripts/app/UIStrings/UIStrings.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _Configuration_IInitOptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../../Configuration/IInitOptions */ "./scripts/app/Configuration/IInitOptions.ts");\n/**\r\n * ThanksPanelTemplate.ts\r\n *\r\n * A panel rendering a Thank you-message.\r\n */\r\n\r\n\r\n\r\n\r\n/**\r\n * Function to create a Link Url\r\n * @param url to which the click will be redireced\r\n * @param text display text\r\n * @returns HTML Link with clickable Text based on URL  provided\r\n */\r\nfunction makeLinkText(url, text) {\r\n    return "<a target=\\"_blank\\" rel=\\"noopener noreferrer\\" href=\\"" + url + "\\">" + text + "<\/a>";\r\n}\r\n/**\r\n * Function to create Thank you Page paragraph\r\n * Based on the init parameters, the paragraph is constructed in HTML view which is rendred in innerHTML tag of UIasJSON function.\r\n */\r\nfunction GetThankYouPageText() {\r\n    var _a, _b, _c, _d, _e;\r\n    // Add a page break to make the paragraph readable\r\n    var thankYouPageText = ((_a = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().ThanksPanel) === null || _a === void 0 ? void 0 : _a.AppreciateText) + "<br><br>";\r\n    // if the age Group is not defined or adult , then only show the link\r\n    var ageGroupEnabledForFeedbackUrls = (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().ageGroup === _Configuration_IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"].Undefined\r\n        || _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().ageGroup === _Configuration_IInitOptions__WEBPACK_IMPORTED_MODULE_3__["AgeGroup"].Adult) ? true : false;\r\n    // First check if the age group is enabled\r\n    if (ageGroupEnabledForFeedbackUrls) {\r\n        // if the My Feedback Portal is enable by the consumer product(office-wac/mso)\r\n        if (!!_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getInAppFeedbackInitOptions().myFeedbackForumUrl) {\r\n            var MyFeedbackString = ((_b = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().ThanksPanel) === null || _b === void 0 ? void 0 : _b.MyFeedbackDescription) + "\\n\\t\\t\\t\\t\\t\\t\\t\\t<br>\\n\\t\\t\\t\\t\\t\\t\\t\\t" + makeLinkText(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getInAppFeedbackInitOptions().myFeedbackForumUrl, (_c = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().ThanksPanel) === null || _c === void 0 ? void 0 : _c.MyFeedbackLinkText) + "\\n\\t\\t\\t\\t\\t\\t\\t\\t<br><br>";\r\n            thankYouPageText = thankYouPageText + " " + MyFeedbackString;\r\n        }\r\n        // if the Feedback Forum Link is provided by the consumer product\r\n        if (!!_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getInAppFeedbackInitOptions().feedbackForumUrl) {\r\n            var FeedbackPortalText = ((_d = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().ThanksPanel) === null || _d === void 0 ? void 0 : _d.FeedbackPortalDescription) + "\\n\\t\\t\\t\\t\\t\\t\\t\\t<br>\\n\\t\\t\\t\\t\\t\\t\\t\\t" + makeLinkText(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getInAppFeedbackInitOptions().feedbackForumUrl, (_e = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().ThanksPanel) === null || _e === void 0 ? void 0 : _e.FeedbackPortalLinkText) + "\\n\\t\\t\\t\\t\\t\\t\\t\\t<br><br>";\r\n            thankYouPageText = thankYouPageText + " " + FeedbackPortalText;\r\n        }\r\n    }\r\n    return thankYouPageText;\r\n}\r\n/**\r\n * Generate the markup\r\n * @returns the markup as json\r\n */\r\nfunction generate() {\r\n    var _a, _b, _c, _d, _e, _f;\r\n    var primaryColor = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().primaryColour;\r\n    var formSchema = {\r\n        children: [\r\n            {\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Div,\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].ThanksPanelInnerContainer,\r\n                children: [\r\n                    {\r\n                        innerHTML: "<br>",\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Div,\r\n                    },\r\n                    {\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].ThanksPanelDiscussion,\r\n                        innerHTML: "<svg xmlns=\\"http://www.w3.org/2000/svg\\" viewBox=\\"0 0 30.4 25.3\\"\\n\\trole=\\"presentation\\" alt=\\"\\" tabindex=\\"-1\\" focusable=\\"false\\">\\n\\t<defs>\\n\\t\\t<style>\\n\\t\\t\\t.cls-1,.cls-3{isolation:isolate;}\\n\\t\\t\\t.cls-2{fill:#e1dfdd;}\\n\\t\\t\\t.cls-3{fill:" + primaryColor + ";opacity:0.4;}\\n\\t\\t\\t.cls-4{fill:#c8c6c4;mix-blend-mode:multiply;}\\n\\t\\t\\t.cls-5{fill:#fff;}<\/style>\\n\\t<\/defs>\\n\\t<title>commentsOffice<\/title>\\n\\t<g class=\\"cls-1\\">\\n\\t\\t<g id=\\"Layer_1\\" data-name=\\"Layer 1\\">\\n\\t\\t\\t<path class=\\"cls-2\\" d=\\"M17.8,0H1.2A1.216,1.216,0,0,0,0,1.2V15.3a1.1554,1.1554,0,0,0,1.2,1.2H7l.1,\\n\\t\\t\\t\\t4.1L10,16.5h7.9a1.1554,1.1554,0,0,0,1.2-1.2V1.2A1.305,1.305,0,0,0,17.8,0Z\\"/>\\n\\t\\t\\t<path class=\\"cls-3\\" d=\\"M28.5,10.8a6.0429,6.0429,0,0,0-3.2-2,7.1943,7.1943,0,0,0-6.4,1,7.4884,\\n\\t\\t\\t\\t7.4884,0,0,0-3.1,5.7,6.016,6.016,0,0,0,.9,3.7,6.9394,6.9394,0,0,0,5,3.7l2.9,2.4L24.4,23a7.8372,\\n\\t\\t\\t\\t7.8372,0,0,0,3-1.3,7.4574,7.4574,0,0,0,3-4.7A7.5076,7.5076,0,0,0,28.5,10.8Z\\"/>\\n\\t\\t\\t<path id=\\"Layer2_1_MEMBER_1_FILL\\" data-name=\\"Layer2 1 MEMBER 1 FILL\\" class=\\"cls-4\\" d=\\"M11.9885,\\n\\t\\t\\t\\t8.0154a.8939.8939,0,1,0,.6371-.2589.8653.8653,0,0,0-.6371.2589M6.8115,9.24A.8977.8977,0,1,0,\\n\\t\\t\\t\\t5.5532,7.9589.8977.8977,0,1,0,6.8115,9.24m3.2259-1.2412a.894.894,0,1,0,.2588.637A.8653.8653,\\n\\t\\t\\t\\t0,0,0,10.0374,7.9983Z\\"/>\\n\\t\\t\\t<path class=\\"cls-5\\" d=\\"M20.9019,16.3243a.8008.8008,0,0,0,.2586-.5659.8371.8371,0,0,\\n\\t\\t\\t\\t0-.21-.5919.7693.7693,0,0,0-1.1091-.05.8379.8379,0,0,0-.2627.5706.8012.8012,0,0,0,\\n\\t\\t\\t\\t.2066.5869.77.77,0,0,0,1.1167.05m1.51-.51a.8014.8014,0,0,0,.2066.5874.7695.7695,0,0,0,\\n\\t\\t\\t\\t1.1127.0541.8379.8379,0,0,0,.2627-.57.8009.8009,0,0,0-.2066-.5869.7694.7694,0,0,\\n\\t\\t\\t\\t0-1.1167-.05.8011.8011,0,0,0-.2587.5663m2.8279.1272a.8371.8371,0,0,0,.21.5919.7693.7693,0,0,\\n\\t\\t\\t\\t0,1.1091.05.8379.8379,0,0,0,.2627-.5706.8012.8012,0,0,0-.2066-.5869.77.77,0,0,\\n\\t\\t\\t\\t0-1.1167-.05A.8008.8008,0,0,0,25.24,15.9416Z\\"/>\\n\\t\\t<\/g>\\n\\t<\/g>\\n<\/svg>",\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Div,\r\n                    },\r\n                    {\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].ThanksPanelVerticalContainer,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Div,\r\n                        children: [\r\n                            {\r\n                                classes: [\r\n                                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].FontTitle,\r\n                                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].TextAlignLeft,\r\n                                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].FormQuestionMiddleText,\r\n                                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].ThanksPanelTitle,\r\n                                ],\r\n                                innerText: (_a = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().ThanksPanel) === null || _a === void 0 ? void 0 : _a.Title,\r\n                                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Div,\r\n                            },\r\n                            {\r\n                                classes: [\r\n                                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].FontSubText,\r\n                                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].TextAlignLeft,\r\n                                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].ThanksPanelMessage,\r\n                                ],\r\n                                // changed from innerText to innerHTML for rendering clickable Links\r\n                                innerHTML: GetThankYouPageText(),\r\n                                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Div,\r\n                                id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].ThanksPanelParagraph,\r\n                            },\r\n                            {\r\n                                classes: [\r\n                                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].SubmitButton,\r\n                                ],\r\n                                id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].ThanksPanelCloseButton,\r\n                                innerText: (_b = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().ThanksPanel) === null || _b === void 0 ? void 0 : _b.Close,\r\n                                ariaLabel: (_c = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().ThanksPanel) === null || _c === void 0 ? void 0 : _c.Close,\r\n                                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Button,\r\n                                role: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Roles"].Button,\r\n                                attributes: [\r\n                                    {\r\n                                        name: "aria-label",\r\n                                        value: ((_d = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().ThanksPanel) === null || _d === void 0 ? void 0 : _d.Title) + " " + ((_e = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().ThanksPanel) === null || _e === void 0 ? void 0 : _e.AppreciateText) + " " + ((_f = _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().ThanksPanel) === null || _f === void 0 ? void 0 : _f.Close),\r\n                                    },\r\n                                    {\r\n                                        name: "type",\r\n                                        value: "button",\r\n                                    },\r\n                                ],\r\n                            },\r\n                        ],\r\n                    },\r\n                    {\r\n                        innerHTML: "<br>",\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Div,\r\n                    },\r\n                ],\r\n            },\r\n        ],\r\n        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].Hidden],\r\n        id: containerId,\r\n    };\r\n    return formSchema;\r\n}\r\n/**\r\n * The id for the container. This is the id of the top-most element and should\r\n * be unique to each form\r\n */\r\nvar containerId = _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].ThanksPanelContainer;\r\n/**\r\n * This method executes form\r\n * specific logic when the pane is opened\r\n * @param panelType panel type\r\n */\r\nfunction onSelect(panelType) {\r\n    if (panelType !== 0 /* Thanks */) {\r\n        return;\r\n    }\r\n    document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].ThanksPanelCloseButton).focus();\r\n}\r\n/**\r\n * Form template type\r\n */\r\nvar type = 0 /* Thanks */;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9CZWxseUJhbmQvUGFuZWxUZW1wbGF0ZXMvVGhhbmtzUGFuZWxUZW1wbGF0ZS50cz8zZWFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O0dBSUc7QUFFeUQ7QUFFWTtBQUVWO0FBRVE7QUFFdEU7Ozs7O0dBS0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxHQUFXLEVBQUUsSUFBWTtJQUM5QyxPQUFPLDZEQUFzRCxHQUFHLFdBQUssSUFBSSxTQUFNLENBQUM7QUFDakYsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsbUJBQW1COztJQUUzQixrREFBa0Q7SUFDbEQsSUFBSSxnQkFBZ0IsR0FBVyxPQUFHLGlFQUFzQixFQUFFLENBQUMsV0FBVywwQ0FBRSxjQUFjLGNBQVUsQ0FBQztJQUVqRyxxRUFBcUU7SUFDckUsSUFBTSw4QkFBOEIsR0FBWSxDQUFDLGdFQUFpQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLEtBQUssb0VBQXFCLENBQUMsU0FBUztXQUNwSSxnRUFBaUIsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxLQUFLLG9FQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUV4RywwQ0FBMEM7SUFDMUMsSUFBSSw4QkFBOEIsRUFBRTtRQUVuQyw4RUFBOEU7UUFDOUUsSUFBSSxDQUFDLENBQUMsZ0VBQWlCLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLGtCQUFrQixFQUFFO1lBQzNFLElBQU0sZ0JBQWdCLEdBQUcsT0FBRyxpRUFBc0IsRUFBRSxDQUFDLFdBQVcsMENBQUUscUJBQXFCLGlEQUVoRixZQUFZLENBQUMsZ0VBQWlCLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLGtCQUFrQixRQUN2RixpRUFBc0IsRUFB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cUNBQzVDO29DQUNEO3dDQUNDLElBQUksRUFBRSxNQUFNO3dDQUNaLEtBQUssRUFBRSxRQUFRO3FDQUNmO2lDQUNEOzZCQUNEO3lCQUNEO3FCQUNEO29CQUNEO3dCQUNDLFNBQVMsRUFBRSxNQUFNO3dCQUNqQixHQUFHLEVBQUUsaURBQUksQ0FBQyxHQUFHO3FCQUNiO2lCQUNEO2FBQ0Q7U0FDRDtRQUNELE9BQU8sRUFBRSxDQUFDLG9EQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3pCLEVBQUUsRUFBRSxXQUFXO0tBQ2YsQ0FBQztJQUNGLE9BQU8sVUFBVSxDQUFDO0FBQ25CLENBQUM7QUFFRDs7O0dBR0c7QUFDSSxJQUFJLFdBQVcsR0FBVyxnREFBRyxDQUFDLG9CQUFvQixDQUFDO0FBRTFEOzs7O0dBSUc7QUFDSSxTQUFTLFFBQVEsQ0FBQyxTQUFvQjtJQUM1QyxJQUFJLFNBQVMsbUJBQXFCLEVBQUU7UUFDbkMsT0FBTztLQUNQO0lBRUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnREFBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0QsQ0FBQztBQUVEOztHQUVHO0FBQ0ksSUFBSSxJQUFJLGlCQUE4QyxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVUkvQmVsbHlCYW5kL1BhbmVsVGVtcGxhdGVzL1RoYW5rc1BhbmVsVGVtcGxhdGUudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVGhhbmtzUGFuZWxUZW1wbGF0ZS50c1xyXG4gKlxyXG4gKiBBIHBhbmVsIHJlbmRlcmluZyBhIFRoYW5rIHlvdS1tZXNzYWdlLlxyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIFVJU3RyaW5ncyBmcm9tIFwiLi8uLi8uLi8uLi9VSVN0cmluZ3MvVUlTdHJpbmdzXCI7XHJcbmltcG9ydCB7IElVSUFzSnNvbiB9IGZyb20gXCIuLy4uLy4uL1JlbmRlcmVyXCI7XHJcbmltcG9ydCAqIGFzIENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vLi4vLi4vLi4vQ29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IFBhbmVsVHlwZSB9IGZyb20gXCIuLy4uLy4uLy4uL0NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBJRHMsIFRhZ3MsIENsYXNzZXMsIFJvbGVzIH0gZnJvbSBcIi4uLy4uL1VpQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IFBhbmVsVGVtcGxhdGVUeXBlIH0gZnJvbSBcIi4vUGFuZWxUZW1wbGF0ZVR5cGVcIjtcclxuaW1wb3J0ICogYXMgSUluaXRPcHRpb25zIGZyb20gXCIuLy4uLy4uLy4uL0NvbmZpZ3VyYXRpb24vSUluaXRPcHRpb25zXCI7XHJcblxyXG4vKipcclxuICogRnVuY3Rpb24gdG8gY3JlYXRlIGEgTGluayBVcmxcclxuICogQHBhcmFtIHVybCB0byB3aGljaCB0aGUgY2xpY2sgd2lsbCBiZSByZWRpcmVjZWRcclxuICogQHBhcmFtIHRleHQgZGlzcGxheSB0ZXh0XHJcbiAqIEByZXR1cm5zIEhUTUwgTGluayB3aXRoIGNsaWNrYWJsZSBUZXh0IGJhc2VkIG9uIFVSTCAgcHJvdmlkZWRcclxuICovXHJcbmZ1bmN0aW9uIG1ha2VMaW5rVGV4dCh1cmw6IHN0cmluZywgdGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuXHRyZXR1cm4gYDxhIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiBocmVmPVwiJHt1cmx9XCI+JHt0ZXh0fTwvYT5gO1xyXG59XHJcblxyXG4vKipcclxuICogRnVuY3Rpb24gdG8gY3JlYXRlIFRoYW5rIHlvdSBQYWdlIHBhcmFncmFwaFxyXG4gKiBCYXNlZCBvbiB0aGUgaW5pdCBwYXJhbWV0ZXJzLCB0aGUgcGFyYWdyYXBoIGlzIGNvbnN0cnVjdGVkIGluIEhUTUwgdmlldyB3aGljaCBpcyByZW5kcmVkIGluIGlubmVySFRNTCB0YWcgb2YgVUlhc0pTT04gZnVuY3Rpb24uXHJcbiAqL1xyXG5mdW5jdGlvbiBHZXRUaGFua1lvdVBhZ2VUZXh0KCk6IHN0cmluZyB7XHJcblxyXG5cdC8vIEFkZCBhIHBhZ2UgYnJlYWsgdG8gbWFrZSB0aGUgcGFyYWdyYXBoIHJlYWRhYmxlXHJcblx0bGV0IHRoYW5rWW91UGFnZVRleHQ6IHN0cmluZyA9IGAke1VJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5UaGFua3NQYW5lbD8uQXBwcmVjaWF0ZVRleHR9PGJyPjxicj5gO1xyXG5cclxuXHQvLyBpZiB0aGUgYWdlIEdyb3VwIGlzIG5vdCBkZWZpbmVkIG9yIGFkdWx0ICwgdGhlbiBvbmx5IHNob3cgdGhlIGxpbmtcclxuXHRjb25zdCBhZ2VHcm91cEVuYWJsZWRGb3JGZWVkYmFja1VybHM6IGJvb2xlYW4gPSAoQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLmFnZUdyb3VwID09PSBJSW5pdE9wdGlvbnMuQWdlR3JvdXAuVW5kZWZpbmVkXHJcblx0XHR8fCBDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkuYWdlR3JvdXAgPT09IElJbml0T3B0aW9ucy5BZ2VHcm91cC5BZHVsdCkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG5cdC8vIEZpcnN0IGNoZWNrIGlmIHRoZSBhZ2UgZ3JvdXAgaXMgZW5hYmxlZFxyXG5cdGlmIChhZ2VHcm91cEVuYWJsZWRGb3JGZWVkYmFja1VybHMpIHtcclxuXHJcblx0XHQvLyBpZiB0aGUgTXkgRmVlZGJhY2sgUG9ydGFsIGlzIGVuYWJsZSBieSB0aGUgY29uc3VtZXIgcHJvZHVjdChvZmZpY2Utd2FjL21zbylcclxuXHRcdGlmICghIUNvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0SW5BcHBGZWVkYmFja0luaXRPcHRpb25zKCkubXlGZWVkYmFja0ZvcnVtVXJsKSB7XHJcblx0XHRcdGNvbnN0IE15RmVlZGJhY2tTdHJpbmcgPSBgJHtVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuVGhhbmtzUGFuZWw/Lk15RmVlZGJhY2tEZXNjcmlwdGlvbn1cclxuXHRcdFx0XHRcdFx0XHRcdDxicj5cclxuXHRcdFx0XHRcdFx0XHRcdCR7bWFrZUxpbmtUZXh0KENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0SW5BcHBGZWVkYmFja0luaXRPcHRpb25zKCkubXlGZWVkYmFja0ZvcnVtVXJsLFxyXG5cdFx0XHRcdFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5UaGFua3NQYW5lbD8uTXlGZWVkYmFja0xpbmtUZXh0KX1cclxuXHRcdFx0XHRcdFx0XHRcdDxicj48YnI+YDtcclxuXHRcdFx0dGhhbmtZb3VQYWdlVGV4dCA9IGAke3RoYW5rWW91UGFnZVRleHR9ICR7TXlGZWVkYmFja1N0cmluZ31gO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGlmIHRoZSBGZWVkYmFjayBGb3J1bSBMaW5rIGlzIHByb3ZpZGVkIGJ5IHRoZSBjb25zdW1lciBwcm9kdWN0XHJcblx0XHRpZiAoISFDb25maWd1cmF0aW9uLmdldCgpLmdldEluQXBwRmVlZGJhY2tJbml0T3B0aW9ucygpLmZlZWRiYWNrRm9ydW1VcmwpIHtcclxuXHRcdFx0Y29uc3QgRmVlZGJhY2tQb3J0YWxUZXh0ID0gYCR7VUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLlRoYW5rc1BhbmVsPy5GZWVkYmFja1BvcnRhbERlc2NyaXB0aW9ufVxyXG5cdFx0XHRcdFx0XHRcdFx0PGJyPlxyXG5cdFx0XHRcdFx0XHRcdFx0JHttYWtlTGlua1RleHQoQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRJbkFwcEZlZWRiYWNrSW5pdE9wdGlvbnMoKS5mZWVkYmFja0ZvcnVtVXJsLFxyXG5cdFx0XHRcdFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5UaGFua3NQYW5lbD8uRmVlZGJhY2tQb3J0YWxMaW5rVGV4dCl9XHJcblx0XHRcdFx0XHRcdFx0XHQ8YnI+PGJyPmA7XHJcblx0XHRcdHRoYW5rWW91UGFnZVRleHQgPSBgJHt0aGFua1lvdVBhZ2VUZXh0fSAke0ZlZWRiYWNrUG9ydGFsVGV4dH1gO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHRoYW5rWW91UGFnZVRleHQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSB0aGUgbWFya3VwXHJcbiAqIEByZXR1cm5zIHRoZSBtYXJrdXAgYXMganNvblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlKCk6IElVSUFzSnNvbiB7XHJcblx0bGV0IHByaW1hcnlDb2xvciA9IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5wcmltYXJ5Q29sb3VyO1xyXG5cclxuXHRsZXQgZm9ybVNjaGVtYSA9IHtcclxuXHRcdGNoaWxkcmVuOiBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHR0YWc6IFRhZ3MuRGl2LFxyXG5cdFx0XHRcdGlkOiBJRHMuVGhhbmtzUGFuZWxJbm5lckNvbnRhaW5lcixcclxuXHRcdFx0XHRjaGlsZHJlbjogW1xyXG5cdFx0XHRcdFx0e1x0Ly8gYWRkZWQgdG8gY3JlYXRlIG1hcmdpbnMgYmVmb3JlIGZlZWRiYWNrIGltYWdlXHJcblx0XHRcdFx0XHRcdGlubmVySFRNTDogXCI8YnI+XCIsXHJcblx0XHRcdFx0XHRcdHRhZzogVGFncy5EaXYsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRpZDogSURzLlRoYW5rc1BhbmVsRGlzY3Vzc2lvbixcclxuXHRcdFx0XHRcdFx0aW5uZXJIVE1MOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMC40IDI1LjNcIlxyXG5cdHJvbGU9XCJwcmVzZW50YXRpb25cIiBhbHQ9XCJcIiB0YWJpbmRleD1cIi0xXCIgZm9jdXNhYmxlPVwiZmFsc2VcIj5cclxuXHQ8ZGVmcz5cclxuXHRcdDxzdHlsZT5cclxuXHRcdFx0LmNscy0xLC5jbHMtM3tpc29sYXRpb246aXNvbGF0ZTt9XHJcblx0XHRcdC5jbHMtMntmaWxsOiNlMWRmZGQ7fVxyXG5cdFx0XHQuY2xzLTN7ZmlsbDpgICsgcHJpbWFyeUNvbG9yICsgYDtvcGFjaXR5OjAuNDt9XHJcblx0XHRcdC5jbHMtNHtmaWxsOiNjOGM2YzQ7bWl4LWJsZW5kLW1vZGU6bXVsdGlwbHk7fVxyXG5cdFx0XHQuY2xzLTV7ZmlsbDojZmZmO308L3N0eWxlPlxyXG5cdDwvZGVmcz5cclxuXHQ8dGl0bGU+Y29tbWVudHNPZmZpY2U8L3RpdGxlPlxyXG5cdDxnIGNsYXNzPVwiY2xzLTFcIj5cclxuXHRcdDxnIGlkPVwiTGF5ZXJfMVwiIGRhdGEtbmFtZT1cIkxheWVyIDFcIj5cclxuXHRcdFx0PHBhdGggY2xhc3M9XCJjbHMtMlwiIGQ9XCJNMTcuOCwwSDEuMkExLjIxNiwxLjIxNiwwLDAsMCwwLDEuMlYxNS4zYTEuMTU1NCwxLjE1NTQsMCwwLDAsMS4yLDEuMkg3bC4xLFxyXG5cdFx0XHRcdDQuMUwxMCwxNi41aDcuOWExLjE1NTQsMS4xNTU0LDAsMCwwLDEuMi0xLjJWMS4yQTEuMzA1LDEuMzA1LDAsMCwwLDE3LjgsMFpcIi8+XHJcblx0XHRcdDxwYXRoIGNsYXNzPVwiY2xzLTNcIiBkPVwiTTI4LjUsMTAuOGE2LjA0MjksNi4wNDI5LDAsMCwwLTMuMi0yLDcuMTk0Myw3LjE5NDMsMCwwLDAtNi40LDEsNy40ODg0LFxyXG5cdFx0XHRcdDcuNDg4NCwwLDAsMC0zLjEsNS43LDYuMDE2LDYuMDE2LDAsMCwwLC45LDMuNyw2LjkzOTQsNi45Mzk0LDAsMCwwLDUsMy43bDIuOSwyLjRMMjQuNCwyM2E3LjgzNzIsXHJcblx0XHRcdFx0Ny44MzcyLDAsMCwwLDMtMS4zLDcuNDU3NCw3LjQ1NzQsMCwwLDAsMy00LjdBNy41MDc2LDcuNTA3NiwwLDAsMCwyOC41LDEwLjhaXCIvPlxyXG5cdFx0XHQ8cGF0aCBpZD1cIkxheWVyMl8xX01FTUJFUl8xX0ZJTExcIiBkYXRhLW5hbWU9XCJMYXllcjIgMSBNRU1CRVIgMSBGSUxMXCIgY2xhc3M9XCJjbHMtNFwiIGQ9XCJNMTEuOTg4NSxcclxuXHRcdFx0XHQ4LjAxNTRhLjg5MzkuODkzOSwwLDEsMCwuNjM3MS0uMjU4OS44NjUzLjg2NTMsMCwwLDAtLjYzNzEuMjU4OU02LjgxMTUsOS4yNEEuODk3Ny44OTc3LDAsMSwwLFxyXG5cdFx0XHRcdDUuNTUzMiw3Ljk1ODkuODk3Ny44OTc3LDAsMSwwLDYuODExNSw5LjI0bTMuMjI1OS0xLjI0MTJhLjg5NC44OTQsMCwxLDAsLjI1ODguNjM3QS44NjUzLjg2NTMsXHJcblx0XHRcdFx0MCwwLDAsMTAuMDM3NCw3Ljk5ODNaXCIvPlxyXG5cdFx0XHQ8cGF0aCBjbGFzcz1cImNscy01XCIgZD1cIk0yMC45MDE5LDE2LjMyNDNhLjgwMDguODAwOCwwLDAsMCwuMjU4Ni0uNTY1OS44MzcxLjgzNzEsMCwwLFxyXG5cdFx0XHRcdDAtLjIxLS41OTE5Ljc2OTMuNzY5MywwLDAsMC0xLjEwOTEtLjA1LjgzNzkuODM3OSwwLDAsMC0uMjYyNy41NzA2LjgwMTIuODAxMiwwLDAsMCxcclxuXHRcdFx0XHQuMjA2Ni41ODY5Ljc3Ljc3LDAsMCwwLDEuMTE2Ny4wNW0xLjUxLS41MWEuODAxNC44MDE0LDAsMCwwLC4yMDY2LjU4NzQuNzY5NS43Njk1LDAsMCwwLFxyXG5cdFx0XHRcdDEuMTEyNy4wNTQxLjgzNzkuODM3OSwwLDAsMCwuMjYyNy0uNTcuODAwOS44MDA5LDAsMCwwLS4yMDY2LS41ODY5Ljc2OTQuNzY5NCwwLDAsXHJcblx0XHRcdFx0MC0xLjExNjctLjA1LjgwMTEuODAxMSwwLDAsMC0uMjU4Ny41NjYzbTIuODI3OS4xMjcyYS44MzcxLjgzNzEsMCwwLDAsLjIxLjU5MTkuNzY5My43NjkzLDAsMCxcclxuXHRcdFx0XHQwLDEuMTA5MS4wNS44Mzc5LjgzNzksMCwwLDAsLjI2MjctLjU3MDYuODAxMi44MDEyLDAsMCwwLS4yMDY2LS41ODY5Ljc3Ljc3LDAsMCxcclxuXHRcdFx0XHQwLTEuMTE2Ny0uMDVBLjgwMDguODAwOCwwLDAsMCwyNS4yNCwxNS45NDE2WlwiLz5cclxuXHRcdDwvZz5cclxuXHQ8L2c+XHJcbjwvc3ZnPmAsXHJcblx0XHRcdFx0XHRcdHRhZzogVGFncy5EaXYsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRpZDogSURzLlRoYW5rc1BhbmVsVmVydGljYWxDb250YWluZXIsXHJcblx0XHRcdFx0XHRcdHRhZzogVGFncy5EaXYsXHJcblx0XHRcdFx0XHRcdGNoaWxkcmVuOiBbXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NlczogW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRDbGFzc2VzLkZvbnRUaXRsZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Q2xhc3Nlcy5UZXh0QWxpZ25MZWZ0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRDbGFzc2VzLkZvcm1RdWVzdGlvbk1pZGRsZVRleHQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdENsYXNzZXMuVGhhbmtzUGFuZWxUaXRsZSxcclxuXHRcdFx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdFx0XHRpbm5lclRleHQ6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5UaGFua3NQYW5lbD8uVGl0bGUsXHJcblx0XHRcdFx0XHRcdFx0XHR0YWc6IFRhZ3MuRGl2LFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NlczogW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRDbGFzc2VzLkZvbnRTdWJUZXh0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRDbGFzc2VzLlRleHRBbGlnbkxlZnQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdENsYXNzZXMuVGhhbmtzUGFuZWxNZXNzYWdlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGNoYW5nZWQgZnJvbSBpbm5lclRleHQgdG8gaW5uZXJIVE1MIGZvciByZW5kZXJpbmcgY2xpY2thYmxlIExpbmtzXHJcblx0XHRcdFx0XHRcdFx0XHRpbm5lckhUTUw6IEdldFRoYW5rWW91UGFnZVRleHQoKSxcclxuXHRcdFx0XHRcdFx0XHRcdHRhZzogVGFncy5EaXYsXHJcblx0XHRcdFx0XHRcdFx0XHRpZDogSURzLlRoYW5rc1BhbmVsUGFyYWdyYXBoLFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NlczogW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRDbGFzc2VzLlN1Ym1pdEJ1dHRvbixcclxuXHRcdFx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdFx0XHRpZDogSURzLlRoYW5rc1BhbmVsQ2xvc2VCdXR0b24sXHJcblx0XHRcdFx0XHRcdFx0XHRpbm5lclRleHQ6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5UaGFua3NQYW5lbD8uQ2xvc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRhcmlhTGFiZWw6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5UaGFua3NQYW5lbD8uQ2xvc2UsXHJcblx0XHRcdFx0XHRcdFx0XHR0YWc6IFRhZ3MuQnV0dG9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0cm9sZTogUm9sZXMuQnV0dG9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0YXR0cmlidXRlczogW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogXCJhcmlhLWxhYmVsXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5UaGFua3NQYW5lbD8uVGl0bGUgKyBcIiBcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuVGhhbmtzUGFuZWw/LkFwcHJlY2lhdGVUZXh0ICsgXCIgXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0VUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLlRoYW5rc1BhbmVsPy5DbG9zZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IFwidHlwZVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBcImJ1dHRvblwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHtcdC8vIGFkZGVkIHRvIGNyZWF0ZSBtYXJnaW5zIGFmdGVyIENsb3NlIGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRpbm5lckhUTUw6IFwiPGJyPlwiLFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuRGl2LFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRdLFxyXG5cdFx0XHR9LFxyXG5cdFx0XSxcclxuXHRcdGNsYXNzZXM6IFtDbGFzc2VzLkhpZGRlbl0sXHJcblx0XHRpZDogY29udGFpbmVySWQsXHJcblx0fTtcclxuXHRyZXR1cm4gZm9ybVNjaGVtYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBpZCBmb3IgdGhlIGNvbnRhaW5lci4gVGhpcyBpcyB0aGUgaWQgb2YgdGhlIHRvcC1tb3N0IGVsZW1lbnQgYW5kIHNob3VsZFxyXG4gKiBiZSB1bmlxdWUgdG8gZWFjaCBmb3JtXHJcbiAqL1xyXG5leHBvcnQgbGV0IGNvbnRhaW5lcklkOiBzdHJpbmcgPSBJRHMuVGhhbmtzUGFuZWxDb250YWluZXI7XHJcblxyXG4vKipcclxuICogVGhpcyBtZXRob2QgZXhlY3V0ZXMgZm9ybVxyXG4gKiBzcGVjaWZpYyBsb2dpYyB3aGVuIHRoZSBwYW5lIGlzIG9wZW5lZFxyXG4gKiBAcGFyYW0gcGFuZWxUeXBlIHBhbmVsIHR5cGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBvblNlbGVjdChwYW5lbFR5cGU6IFBhbmVsVHlwZSk6IHZvaWQge1xyXG5cdGlmIChwYW5lbFR5cGUgIT09IFBhbmVsVHlwZS5UaGFua3MpIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEcy5UaGFua3NQYW5lbENsb3NlQnV0dG9uKS5mb2N1cygpO1xyXG59XHJcblxyXG4vKipcclxuICogRm9ybSB0ZW1wbGF0ZSB0eXBlXHJcbiAqL1xyXG5leHBvcnQgbGV0IHR5cGU6IFBhbmVsVGVtcGxhdGVUeXBlID0gUGFuZWxUZW1wbGF0ZVR5cGUuVGhhbmtzO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/UI/BellyBand/PanelTemplates/ThanksPanelTemplate.ts\n')},"./scripts/app/UI/BellyBand/TabFocus.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cycleTabFocus", function() { return cycleTabFocus; });\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/**\r\n * TabFocus.ts\r\n *\r\n * Module to handle tab and shift tab focus\r\n */\r\n\r\n/**\r\n * Keeps tabs and shift tabs focus on visible elements of the feedback dialog\r\n * This prevents tabs and shift tabs cycle focus to elements of the background main page.\r\n * @param focusedElement The in-focus element object\r\n */\r\nfunction cycleTabFocus(focusedElement) {\r\n    var elements = getTabbableElements();\r\n    // when a tab lands on the last dummy tabbable element, set focus to the first\r\n    // visible element which is the one after the first dummy tabbable element\r\n    if (focusedElement.id === _UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].LastTabbable) {\r\n        for (var i = 0; i < elements.length; i++) {\r\n            var element = elements[i];\r\n            if (element.id === _UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].FirstTabbable || !checkVisible(element)) {\r\n                continue;\r\n            }\r\n            element.focus();\r\n            return;\r\n        }\r\n        // when a shift tab lands on the first dummy tabbable element, set focus to the last\r\n        // visible element which is the one before the last dummy tabbable element\r\n    }\r\n    else if (focusedElement.id === _UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].FirstTabbable) {\r\n        for (var i = elements.length - 1; i >= 0; i--) {\r\n            var element = elements[i];\r\n            if (element.id === _UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].LastTabbable || !checkVisible(element)) {\r\n                continue;\r\n            }\r\n            element.focus();\r\n            return;\r\n        }\r\n    }\r\n}\r\n/**\r\n * Returns a list of tabbable elements.\r\n * @returns {NodeListOf<Element>} list of tabbable elements\r\n */\r\nfunction getTabbableElements() {\r\n    var tabbableSelector = "a[href], area[href], input:not([disabled]):not([tabindex=\\\'-1\\\']), " +\r\n        "button:not([disabled]):not([tabindex=\\\'-1\\\']), select:not([disabled]):not([tabindex=\\\'-1\\\']), " +\r\n        "textarea:not([disabled]):not([tabindex =\\\'-1\\\']), " +\r\n        "object, *[tabindex]:not([tabindex=\\\'-1\\\']), *[contenteditable=true]";\r\n    return document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].MainContainer).querySelectorAll(tabbableSelector);\r\n}\r\n/**\r\n * Returns visibility of an element by inspecting the element\'s parent class name for visible/hidden value.\r\n * Walk up the parent chain if needed.\r\n * @param element The element object\r\n * @returns {Boolean} whether the element is visible\r\n */\r\nfunction checkVisible(element) {\r\n    if (!element.parentElement) {\r\n        return false;\r\n    }\r\n    // don\'t bother if parent element id is just whitespace or empty\r\n    if (/\\S/.test(element.parentElement.id)) {\r\n        if (element.parentElement.className.indexOf(_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].Visible) >= 0) {\r\n            return true;\r\n        }\r\n        if (element.parentElement.className.indexOf(_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].Hidden) >= 0) {\r\n            return false;\r\n        }\r\n    }\r\n    return checkVisible(element.parentElement);\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9CZWxseUJhbmQvVGFiRm9jdXMudHM/NTQxYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRTZDO0FBRWhEOzs7O0dBSUc7QUFDSSxTQUFTLGFBQWEsQ0FBQyxjQUF1QjtJQUNwRCxJQUFJLFFBQVEsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0lBRXJDLDhFQUE4RTtJQUM5RSwwRUFBMEU7SUFDMUUsSUFBSSxjQUFjLENBQUMsRUFBRSxLQUFLLGdEQUFHLENBQUMsWUFBWSxFQUFFO1FBQzNDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksT0FBTyxHQUFrQixRQUFRLENBQUMsQ0FBQyxDQUFFLENBQUM7WUFFMUMsSUFBSSxPQUFPLENBQUMsRUFBRSxLQUFLLGdEQUFHLENBQUMsYUFBYSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMvRCxTQUFTO2FBQ1Q7WUFFRCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsT0FBTztTQUNQO1FBQ0Qsb0ZBQW9GO1FBQ3BGLDBFQUEwRTtLQUMxRTtTQUFNLElBQUksY0FBYyxDQUFDLEVBQUUsS0FBSyxnREFBRyxDQUFDLGFBQWEsRUFBRTtRQUNuRCxLQUFLLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUMsSUFBSSxPQUFPLEdBQWtCLFFBQVEsQ0FBQyxDQUFDLENBQUUsQ0FBQztZQUUxQyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssZ0RBQUcsQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzlELFNBQVM7YUFDVDtZQUVELE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixPQUFPO1NBQ1A7S0FDRDtBQUNGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLG1CQUFtQjtJQUMzQixJQUFNLGdCQUFnQixHQUFHLHFFQUFxRTtRQUM3RixnR0FBZ0c7UUFDaEcsb0RBQW9EO1FBQ3BELHFFQUFxRSxDQUFDO0lBRXZFLE9BQU8sUUFBUSxDQUFDLGNBQWMsQ0FBQyxnREFBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdEYsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxZQUFZLENBQUMsT0FBb0I7SUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7UUFDM0IsT0FBTyxLQUFLLENBQUM7S0FDYjtJQUVELGdFQUFnRTtJQUNoRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN4QyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxvREFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsRSxPQUFPLElBQUksQ0FBQztTQUNaO1FBRUQsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0RBQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakUsT0FBTyxLQUFLLENBQUM7U0FDYjtLQUNEO0lBRUQsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9VSS9CZWxseUJhbmQvVGFiRm9jdXMudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVGFiRm9jdXMudHNcclxuICpcclxuICogTW9kdWxlIHRvIGhhbmRsZSB0YWIgYW5kIHNoaWZ0IHRhYiBmb2N1c1xyXG4gKi9cclxuXHJcbmltcG9ydCB7IENsYXNzZXMsIElEcyB9IGZyb20gXCIuLy4uL1VpQ29uc3RhbnRzXCI7XHJcblxyXG4vKipcclxuICogS2VlcHMgdGFicyBhbmQgc2hpZnQgdGFicyBmb2N1cyBvbiB2aXNpYmxlIGVsZW1lbnRzIG9mIHRoZSBmZWVkYmFjayBkaWFsb2dcclxuICogVGhpcyBwcmV2ZW50cyB0YWJzIGFuZCBzaGlmdCB0YWJzIGN5Y2xlIGZvY3VzIHRvIGVsZW1lbnRzIG9mIHRoZSBiYWNrZ3JvdW5kIG1haW4gcGFnZS5cclxuICogQHBhcmFtIGZvY3VzZWRFbGVtZW50IFRoZSBpbi1mb2N1cyBlbGVtZW50IG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGN5Y2xlVGFiRm9jdXMoZm9jdXNlZEVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcclxuXHRsZXQgZWxlbWVudHMgPSBnZXRUYWJiYWJsZUVsZW1lbnRzKCk7XHJcblxyXG5cdC8vIHdoZW4gYSB0YWIgbGFuZHMgb24gdGhlIGxhc3QgZHVtbXkgdGFiYmFibGUgZWxlbWVudCwgc2V0IGZvY3VzIHRvIHRoZSBmaXJzdFxyXG5cdC8vIHZpc2libGUgZWxlbWVudCB3aGljaCBpcyB0aGUgb25lIGFmdGVyIHRoZSBmaXJzdCBkdW1teSB0YWJiYWJsZSBlbGVtZW50XHJcblx0aWYgKGZvY3VzZWRFbGVtZW50LmlkID09PSBJRHMuTGFzdFRhYmJhYmxlKSB7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGxldCBlbGVtZW50ID0gKDxIVE1MRWxlbWVudD4gZWxlbWVudHNbaV0pO1xyXG5cclxuXHRcdFx0aWYgKGVsZW1lbnQuaWQgPT09IElEcy5GaXJzdFRhYmJhYmxlIHx8ICFjaGVja1Zpc2libGUoZWxlbWVudCkpIHtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZWxlbWVudC5mb2N1cygpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHQvLyB3aGVuIGEgc2hpZnQgdGFiIGxhbmRzIG9uIHRoZSBmaXJzdCBkdW1teSB0YWJiYWJsZSBlbGVtZW50LCBzZXQgZm9jdXMgdG8gdGhlIGxhc3RcclxuXHRcdC8vIHZpc2libGUgZWxlbWVudCB3aGljaCBpcyB0aGUgb25lIGJlZm9yZSB0aGUgbGFzdCBkdW1teSB0YWJiYWJsZSBlbGVtZW50XHJcblx0fSBlbHNlIGlmIChmb2N1c2VkRWxlbWVudC5pZCA9PT0gSURzLkZpcnN0VGFiYmFibGUpIHtcclxuXHRcdGZvciAobGV0IGkgPSBlbGVtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG5cdFx0XHRsZXQgZWxlbWVudCA9ICg8SFRNTEVsZW1lbnQ+IGVsZW1lbnRzW2ldKTtcclxuXHJcblx0XHRcdGlmIChlbGVtZW50LmlkID09PSBJRHMuTGFzdFRhYmJhYmxlIHx8ICFjaGVja1Zpc2libGUoZWxlbWVudCkpIHtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZWxlbWVudC5mb2N1cygpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIGxpc3Qgb2YgdGFiYmFibGUgZWxlbWVudHMuXHJcbiAqIEByZXR1cm5zIHtOb2RlTGlzdE9mPEVsZW1lbnQ+fSBsaXN0IG9mIHRhYmJhYmxlIGVsZW1lbnRzXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUYWJiYWJsZUVsZW1lbnRzKCk6IE5vZGVMaXN0T2Y8RWxlbWVudD4ge1xyXG5cdGNvbnN0IHRhYmJhYmxlU2VsZWN0b3IgPSBcImFbaHJlZl0sIGFyZWFbaHJlZl0sIGlucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PVxcJy0xXFwnXSksIFwiICtcclxuXHRcdFwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PVxcJy0xXFwnXSksIHNlbGVjdDpub3QoW2Rpc2FibGVkXSk6bm90KFt0YWJpbmRleD1cXCctMVxcJ10pLCBcIiArXHJcblx0XHRcInRleHRhcmVhOm5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4ID1cXCctMVxcJ10pLCBcIiArXHJcblx0XHRcIm9iamVjdCwgKlt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cXCctMVxcJ10pLCAqW2NvbnRlbnRlZGl0YWJsZT10cnVlXVwiO1xyXG5cclxuXHRyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLk1haW5Db250YWluZXIpLnF1ZXJ5U2VsZWN0b3JBbGwodGFiYmFibGVTZWxlY3Rvcik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHZpc2liaWxpdHkgb2YgYW4gZWxlbWVudCBieSBpbnNwZWN0aW5nIHRoZSBlbGVtZW50J3MgcGFyZW50IGNsYXNzIG5hbWUgZm9yIHZpc2libGUvaGlkZGVuIHZhbHVlLlxyXG4gKiBXYWxrIHVwIHRoZSBwYXJlbnQgY2hhaW4gaWYgbmVlZGVkLlxyXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCBvYmplY3RcclxuICogQHJldHVybnMge0Jvb2xlYW59IHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZVxyXG4gKi9cclxuZnVuY3Rpb24gY2hlY2tWaXNpYmxlKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XHJcblx0aWYgKCFlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIGRvbid0IGJvdGhlciBpZiBwYXJlbnQgZWxlbWVudCBpZCBpcyBqdXN0IHdoaXRlc3BhY2Ugb3IgZW1wdHlcclxuXHRpZiAoL1xcUy8udGVzdChlbGVtZW50LnBhcmVudEVsZW1lbnQuaWQpKSB7XHJcblx0XHRpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTmFtZS5pbmRleE9mKENsYXNzZXMuVmlzaWJsZSkgPj0gMCkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTmFtZS5pbmRleE9mKENsYXNzZXMuSGlkZGVuKSA+PSAwKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBjaGVja1Zpc2libGUoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/UI/BellyBand/TabFocus.ts\n')},"./scripts/app/UI/CategoriesDropdown.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return generate; });\n/* harmony import */ var _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../UIStrings/UIStrings */ "./scripts/app/UIStrings/UIStrings.ts");\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/**\r\n * CategoriesDropdown.ts\r\n *\r\n * A module to render the categories dropdown\r\n */\r\n\r\n\r\n/**\r\n * Generate custom categories drop-down list. The list will contain just the\r\n * placeholder string if customCategories contains no value.\r\n * @param customCategories category values\r\n */\r\nfunction generate(customCategories) {\r\n    var categories = customCategories ? customCategories : [];\r\n    var result = [{\r\n            attributes: [{ name: "selected", value: "true" }],\r\n            innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_0__["getUIStrings"]().Form.CategoryPlaceholder,\r\n            tag: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Tags"].Option,\r\n        }];\r\n    for (var _i = 0, categories_1 = categories; _i < categories_1.length; _i++) {\r\n        var category = categories_1[_i];\r\n        result.push({\r\n            innerText: category,\r\n            tag: _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Tags"].Option,\r\n        });\r\n    }\r\n    return result;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9DYXRlZ29yaWVzRHJvcGRvd24udHM/Mzc3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O0dBSUc7QUFFbUQ7QUFDaEI7QUFHdEM7Ozs7R0FJRztBQUNJLFNBQVMsUUFBUSxDQUFDLGdCQUEwQjtJQUNsRCxJQUFJLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUUxRCxJQUFJLE1BQU0sR0FBZ0IsQ0FBQztZQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2pELFNBQVMsRUFBRSxpRUFBc0IsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUI7WUFDNUQsR0FBRyxFQUFFLGlEQUFJLENBQUMsTUFBTTtTQUNoQixDQUFDLENBQUM7SUFFSCxLQUFxQixVQUFVLEVBQVYseUJBQVUsRUFBVix3QkFBVSxFQUFWLElBQVUsRUFBRTtRQUE1QixJQUFJLFFBQVE7UUFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNYLFNBQVMsRUFBRSxRQUFRO1lBQ25CLEdBQUcsRUFBRSxpREFBSSxDQUFDLE1BQU07U0FDaEIsQ0FBQyxDQUFDO0tBQ0g7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNmLENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9VSS9DYXRlZ29yaWVzRHJvcGRvd24udHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ2F0ZWdvcmllc0Ryb3Bkb3duLnRzXHJcbiAqXHJcbiAqIEEgbW9kdWxlIHRvIHJlbmRlciB0aGUgY2F0ZWdvcmllcyBkcm9wZG93blxyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIFVJU3RyaW5ncyBmcm9tIFwiLi8uLi9VSVN0cmluZ3MvVUlTdHJpbmdzXCI7XHJcbmltcG9ydCB7IFRhZ3MgfSAgZnJvbSBcIi4vVWlDb25zdGFudHNcIjtcclxuaW1wb3J0IHsgSVVJQXNKc29uIH0gZnJvbSBcIi4vUmVuZGVyZXJcIjtcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSBjdXN0b20gY2F0ZWdvcmllcyBkcm9wLWRvd24gbGlzdC4gVGhlIGxpc3Qgd2lsbCBjb250YWluIGp1c3QgdGhlXHJcbiAqIHBsYWNlaG9sZGVyIHN0cmluZyBpZiBjdXN0b21DYXRlZ29yaWVzIGNvbnRhaW5zIG5vIHZhbHVlLlxyXG4gKiBAcGFyYW0gY3VzdG9tQ2F0ZWdvcmllcyBjYXRlZ29yeSB2YWx1ZXNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZShjdXN0b21DYXRlZ29yaWVzOiBzdHJpbmdbXSk6IElVSUFzSnNvbltdIHtcclxuXHRsZXQgY2F0ZWdvcmllcyA9IGN1c3RvbUNhdGVnb3JpZXMgPyBjdXN0b21DYXRlZ29yaWVzIDogW107XHJcblxyXG5cdGxldCByZXN1bHQ6IElVSUFzSnNvbltdID0gW3tcclxuXHRcdGF0dHJpYnV0ZXM6IFt7IG5hbWU6IFwic2VsZWN0ZWRcIiwgdmFsdWU6IFwidHJ1ZVwiIH1dLFxyXG5cdFx0aW5uZXJUZXh0OiBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuRm9ybS5DYXRlZ29yeVBsYWNlaG9sZGVyLFxyXG5cdFx0dGFnOiBUYWdzLk9wdGlvbixcclxuXHR9XTtcclxuXHJcblx0Zm9yIChsZXQgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcykge1xyXG5cdFx0cmVzdWx0LnB1c2goe1xyXG5cdFx0XHRpbm5lclRleHQ6IGNhdGVnb3J5LFxyXG5cdFx0XHR0YWc6IFRhZ3MuT3B0aW9uLFxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/UI/CategoriesDropdown.ts\n')},"./scripts/app/UI/ChoiceGroupControl.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generateRadioGroup", function() { return generateRadioGroup; });\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Utils */ "./scripts/app/Utils.ts");\n/**\r\n * ChoiceGroupControl.ts\r\n *\r\n * A module for rendering a choice group.\r\n */\r\n\r\n\r\nvar isNOU = _Utils__WEBPACK_IMPORTED_MODULE_1__["isNOU"];\r\nfunction generateRadioGroup(id, question, choices) {\r\n    var fieldSet = {\r\n        children: [],\r\n        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].FieldSet,\r\n    };\r\n    if (!isNOU(question)) {\r\n        Array.prototype.push.apply(fieldSet.children, [{\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].FontSubText],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].TFormRatingQuestion,\r\n                innerText: question,\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Legend,\r\n                // Legacy Edge need aria-label for accessibility\r\n                attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].AriaLabel, value: question }],\r\n            }]);\r\n    }\r\n    for (var _i = 0, choices_1 = choices; _i < choices_1.length; _i++) {\r\n        var choice = choices_1[_i];\r\n        Array.prototype.push.apply(fieldSet.children, generateRadioButton(choice[0].toString(), choice[1], id));\r\n    }\r\n    return {\r\n        children: [fieldSet],\r\n        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].ChoiceGroup],\r\n        id: id,\r\n    };\r\n}\r\nfunction generateRadioButton(value, label, id) {\r\n    return [\r\n        {\r\n            attributes: [\r\n                { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Type, value: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeValue"].Radio },\r\n                { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Value, value: value },\r\n                { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Name, value: id },\r\n            ],\r\n            id: value,\r\n            tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Input,\r\n        },\r\n        {\r\n            attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].For, value: value }],\r\n            children: [\r\n                {\r\n                    children: [{ tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Span }],\r\n                    classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].ChoiceGroupIcon],\r\n                    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Span,\r\n                },\r\n                {\r\n                    classes: ["obf-ChoiceGroupLabel"],\r\n                    innerHTML: label,\r\n                    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Span,\r\n                },\r\n            ],\r\n            classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].FontSubText],\r\n            tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Label,\r\n        },\r\n    ];\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9DaG9pY2VHcm91cENvbnRyb2wudHM/ZDYyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O0dBSUc7QUFFK0U7QUFFaEQ7QUFFMUIsU0FBSyxHQUFLLDRDQUFMLENBQVc7QUFFakIsU0FBUyxrQkFBa0IsQ0FBQyxFQUFVLEVBQUUsUUFBZ0IsRUFBRSxPQUEyQjtJQUMzRixJQUFJLFFBQVEsR0FBdUI7UUFDakMsUUFBUSxFQUFFLEVBQUU7UUFDWixHQUFHLEVBQUUsaURBQUksQ0FBQyxRQUFRO0tBQ2xCLENBQUM7SUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3JCLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDekIsUUFBUSxDQUFDLFFBQVEsRUFDakIsQ0FBQztnQkFDQSxPQUFPLEVBQUUsQ0FBQyxvREFBTyxDQUFDLFdBQVcsQ0FBQztnQkFDOUIsRUFBRSxFQUFFLGdEQUFHLENBQUMsbUJBQW1CO2dCQUMzQixTQUFTLEVBQUUsUUFBUTtnQkFDbkIsR0FBRyxFQUFFLGlEQUFJLENBQUMsTUFBTTtnQkFDaEIsZ0RBQWdEO2dCQUNoRCxVQUFVLEVBQUUsQ0FBQyxFQUFDLElBQUksRUFBRSwwREFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7YUFDL0QsQ0FBQyxDQUNGLENBQUM7S0FDRjtJQUVELEtBQW1CLFVBQU8sRUFBUCxtQkFBTyxFQUFQLHFCQUFPLEVBQVAsSUFBTyxFQUFFO1FBQXZCLElBQUksTUFBTTtRQUNkLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN4RztJQUVELE9BQU87UUFDTixRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDcEIsT0FBTyxFQUFFLENBQUMsb0RBQU8sQ0FBQyxXQUFXLENBQUM7UUFDOUIsRUFBRSxFQUFFLEVBQUU7S0FDTixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBRSxFQUFVO0lBQ3BFLE9BQU87UUFDTjtZQUNDLFVBQVUsRUFBRTtnQkFDWCxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsMkRBQWMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3pELEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQzNDLEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7YUFDdkM7WUFDRCxFQUFFLEVBQUUsS0FBSztZQUNULEdBQUcsRUFBRSxpREFBSSxDQUFDLEtBQUs7U0FDZjtRQUNEO1lBQ0MsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsMERBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3ZELFFBQVEsRUFBRTtnQkFDVDtvQkFDQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxpREFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUM5QixPQUFPLEVBQUUsQ0FBQyxvREFBTyxDQUFDLGVBQWUsQ0FBQztvQkFDbEMsR0FBRyxFQUFFLGlEQUFJLENBQUMsSUFBSTtpQkFDZDtnQkFDRDtvQkFDQyxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLEdBQUcsRUFBRSxpREFBSSxDQUFDLElBQUk7aUJBQ2Q7YUFDRDtZQUNELE9BQU8sRUFBRSxDQUFDLG9EQUFPLENBQUMsV0FBVyxDQUFDO1lBQzlCLEdBQUcsRUFBRSxpREFBSSxDQUFDLEtBQUs7U0FDZjtLQUNELENBQUM7QUFDSCxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVUkvQ2hvaWNlR3JvdXBDb250cm9sLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENob2ljZUdyb3VwQ29udHJvbC50c1xyXG4gKlxyXG4gKiBBIG1vZHVsZSBmb3IgcmVuZGVyaW5nIGEgY2hvaWNlIGdyb3VwLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEF0dHJpYnV0ZU5hbWUsIEF0dHJpYnV0ZVZhbHVlLCBDbGFzc2VzLCBJRHMsIFRhZ3MgfSBmcm9tIFwiLi9VaUNvbnN0YW50c1wiO1xyXG5pbXBvcnQgKiBhcyBSZW5kZXJlciBmcm9tIFwiLi9SZW5kZXJlclwiO1xyXG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tIFwiLi4vVXRpbHNcIjtcclxuXHJcbmNvbnN0IHsgaXNOT1UgfSA9IFV0aWxzO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmFkaW9Hcm91cChpZDogc3RyaW5nLCBxdWVzdGlvbjogc3RyaW5nLCBjaG9pY2VzOiBbbnVtYmVyLCBzdHJpbmddW10pOiBSZW5kZXJlci5JVUlBc0pzb24ge1xyXG5cdGxldCBmaWVsZFNldDogUmVuZGVyZXIuSVVJQXNKc29uID0ge1xyXG5cdFx0XHRjaGlsZHJlbjogW10sXHJcblx0XHRcdHRhZzogVGFncy5GaWVsZFNldCxcclxuXHRcdH07XHJcblxyXG5cdGlmICghaXNOT1UocXVlc3Rpb24pKSB7XHJcblx0XHRBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShcclxuXHRcdFx0ZmllbGRTZXQuY2hpbGRyZW4sXHJcblx0XHRcdFt7XHJcblx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFN1YlRleHRdLFxyXG5cdFx0XHRcdGlkOiBJRHMuVEZvcm1SYXRpbmdRdWVzdGlvbixcclxuXHRcdFx0XHRpbm5lclRleHQ6IHF1ZXN0aW9uLFxyXG5cdFx0XHRcdHRhZzogVGFncy5MZWdlbmQsXHJcblx0XHRcdFx0Ly8gTGVnYWN5IEVkZ2UgbmVlZCBhcmlhLWxhYmVsIGZvciBhY2Nlc3NpYmlsaXR5XHJcblx0XHRcdFx0YXR0cmlidXRlczogW3tuYW1lOiBBdHRyaWJ1dGVOYW1lLkFyaWFMYWJlbCwgdmFsdWU6IHF1ZXN0aW9uIH1dLFxyXG5cdFx0XHR9XVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGZvciAobGV0IGNob2ljZSBvZiBjaG9pY2VzKSB7XHJcblx0XHRBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShmaWVsZFNldC5jaGlsZHJlbiwgZ2VuZXJhdGVSYWRpb0J1dHRvbihjaG9pY2VbMF0udG9TdHJpbmcoKSwgY2hvaWNlWzFdLCBpZCkpO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHtcclxuXHRcdGNoaWxkcmVuOiBbZmllbGRTZXRdLFxyXG5cdFx0Y2xhc3NlczogW0NsYXNzZXMuQ2hvaWNlR3JvdXBdLFxyXG5cdFx0aWQ6IGlkLFxyXG5cdH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdlbmVyYXRlUmFkaW9CdXR0b24odmFsdWU6IHN0cmluZywgbGFiZWw6IHN0cmluZywgaWQ6IHN0cmluZyk6IFJlbmRlcmVyLklVSUFzSnNvbltdIHtcclxuXHRyZXR1cm4gW1xyXG5cdFx0e1xyXG5cdFx0XHRhdHRyaWJ1dGVzOiBbXHJcblx0XHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlR5cGUsIHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZS5SYWRpbyB9LFxyXG5cdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5WYWx1ZSwgdmFsdWU6IHZhbHVlIH0sXHJcblx0XHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLk5hbWUsIHZhbHVlOiBpZCB9LFxyXG5cdFx0XHRdLFxyXG5cdFx0XHRpZDogdmFsdWUsXHJcblx0XHRcdHRhZzogVGFncy5JbnB1dCxcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGF0dHJpYnV0ZXM6IFt7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuRm9yLCB2YWx1ZTogdmFsdWUgfV0sXHJcblx0XHRcdGNoaWxkcmVuOiBbXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0Y2hpbGRyZW46IFt7IHRhZzogVGFncy5TcGFuIH1dLFxyXG5cdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuQ2hvaWNlR3JvdXBJY29uXSxcclxuXHRcdFx0XHRcdHRhZzogVGFncy5TcGFuLFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0Y2xhc3NlczogW1wib2JmLUNob2ljZUdyb3VwTGFiZWxcIl0sXHJcblx0XHRcdFx0XHRpbm5lckhUTUw6IGxhYmVsLFxyXG5cdFx0XHRcdFx0dGFnOiBUYWdzLlNwYW4sXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XSxcclxuXHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFN1YlRleHRdLFxyXG5cdFx0XHR0YWc6IFRhZ3MuTGFiZWwsXHJcblx0XHR9LFxyXG5cdF07XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/UI/ChoiceGroupControl.ts\n')},"./scripts/app/UI/RatingControl.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return generate; });\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/**\r\n * RatingControl.ts\r\n *\r\n * A module for a rating control.\r\n */\r\n\r\nvar starId = "obf-star";\r\nvar starDefinition = {\r\n    children: [\r\n        {\r\n            attributes: [\r\n                { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Id, value: starId },\r\n                { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].X, value: "0" },\r\n                { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Y, value: "0" },\r\n                { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Width, value: "105" },\r\n                { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Height, value: "100" },\r\n                {\r\n                    name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Points,\r\n                    value: "52.5, 80.3 84, 100 76.3, 63 105, 38 67.2, 35 52.5, 0 37.8, 35 0, 38 28.7, 63 20, 100 52.5, 80.3",\r\n                },\r\n            ],\r\n            id: starId,\r\n            tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Polygon,\r\n        },\r\n    ],\r\n    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Defs,\r\n};\r\nvar firstStar = {\r\n    attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].xlinkHref, value: "#" + starId }],\r\n    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Use,\r\n};\r\nvar secondStar = {\r\n    attributes: [\r\n        { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].xlinkHref, value: "#" + starId },\r\n        { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Transform, value: "translate(105 0)" },\r\n    ],\r\n    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Use,\r\n};\r\nvar thirdStar = {\r\n    attributes: [\r\n        { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].xlinkHref, value: "#" + starId },\r\n        { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Transform, value: "translate(210 0)" },\r\n    ],\r\n    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Use,\r\n};\r\nvar fourthStar = {\r\n    attributes: [\r\n        { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].xlinkHref, value: "#" + starId },\r\n        { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Transform, value: "translate(315 0)" },\r\n    ],\r\n    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Use,\r\n};\r\nvar fifthStar = {\r\n    attributes: [\r\n        { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].xlinkHref, value: "#" + starId },\r\n        { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Transform, value: "translate(420 0)" },\r\n    ],\r\n    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Use,\r\n};\r\nvar emptyStars = {\r\n    attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].ViewBox, value: "0 0 525 100" }],\r\n    children: [starDefinition, firstStar, secondStar, thirdStar, fourthStar, fifthStar],\r\n    classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].RatingGraphic],\r\n    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Svg,\r\n};\r\nvar oneFilledStar = {\r\n    attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].ViewBox, value: "0 0 105 100" }],\r\n    children: [starDefinition, firstStar],\r\n    classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].RatingGraphic, _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].RatingGraphicFilled],\r\n    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Svg,\r\n};\r\nvar twoFilledStar = {\r\n    attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].ViewBox, value: "0 0 210 100" }],\r\n    children: [starDefinition, firstStar, secondStar],\r\n    classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].RatingGraphic, _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].RatingGraphicFilled],\r\n    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Svg,\r\n};\r\nvar threeFilledStar = {\r\n    attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].ViewBox, value: "0 0 315 100" }],\r\n    children: [starDefinition, firstStar, secondStar, thirdStar],\r\n    classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].RatingGraphic, _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].RatingGraphicFilled],\r\n    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Svg,\r\n};\r\nvar fourFilledStar = {\r\n    attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].ViewBox, value: "0 0 420 100" }],\r\n    children: [starDefinition, firstStar, secondStar, thirdStar, fourthStar],\r\n    classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].RatingGraphic, _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].RatingGraphicFilled],\r\n    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Svg,\r\n};\r\nvar fiveFilledStar = {\r\n    attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].ViewBox, value: "0 0 525 100" }],\r\n    children: [starDefinition, firstStar, secondStar, thirdStar, fourthStar, fifthStar],\r\n    classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].RatingGraphic, _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].RatingGraphicFilled],\r\n    tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Svg,\r\n};\r\nfunction generate(id) {\r\n    return {\r\n        children: [\r\n            emptyStars,\r\n            {\r\n                attributes: [\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Type, value: "radio" },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Name, value: id },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Value, value: "1" },\r\n                ],\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Input,\r\n            },\r\n            oneFilledStar,\r\n            {\r\n                attributes: [\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Type, value: "radio" },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Name, value: id },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Value, value: "2" },\r\n                ],\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Input,\r\n            },\r\n            twoFilledStar,\r\n            {\r\n                attributes: [\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Type, value: "radio" },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Name, value: id },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Value, value: "3" },\r\n                ],\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Input,\r\n            },\r\n            threeFilledStar,\r\n            {\r\n                attributes: [\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Type, value: "radio" },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Name, value: id },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Value, value: "4" },\r\n                ],\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Input,\r\n            },\r\n            fourFilledStar,\r\n            {\r\n                attributes: [\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Type, value: "radio" },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Name, value: id },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Value, value: "5" },\r\n                ],\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Input,\r\n            },\r\n            fiveFilledStar,\r\n        ],\r\n        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].Rating],\r\n        id: id,\r\n        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Span,\r\n    };\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9SYXRpbmdDb250cm9sLnRzP2Q0YzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7R0FJRztBQUUwRDtBQUc3RCxJQUFJLE1BQU0sR0FBVyxVQUFVLENBQUM7QUFFaEMsSUFBSSxjQUFjLEdBQXVCO0lBQ3hDLFFBQVEsRUFBRTtRQUNUO1lBQ0MsVUFBVSxFQUFFO2dCQUNYLEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7Z0JBQ3pDLEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ3JDLEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ3JDLEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQzNDLEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQzVDO29CQUNDLElBQUksRUFBRSwwREFBYSxDQUFDLE1BQU07b0JBQzFCLEtBQUssRUFBRSxpR0FBaUc7aUJBQ3hHO2FBQ0Q7WUFDRCxFQUFFLEVBQUUsTUFBTTtZQUNWLEdBQUcsRUFBRSxpREFBSSxDQUFDLE9BQU87U0FDakI7S0FDRDtJQUNELEdBQUcsRUFBRSxpREFBSSxDQUFDLElBQUk7Q0FDZCxDQUFDO0FBRUYsSUFBSSxTQUFTLEdBQXVCO0lBQ25DLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLDBEQUFhLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFJLE1BQVEsRUFBRSxDQUFDO0lBQ3BFLEdBQUcsRUFBRSxpREFBSSxDQUFDLEdBQUc7Q0FDYixDQUFDO0FBRUYsSUFBSSxVQUFVLEdBQXVCO0lBQ3BDLFVBQVUsRUFB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REFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO29CQUM1QyxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO29CQUN2QyxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2lCQUN6QztnQkFDRCxHQUFHLEVBQUUsaURBQUksQ0FBQyxLQUFLO2FBQ2Y7WUFDRCxjQUFjO1NBQ2Q7UUFDRCxPQUFPLEVBQUUsQ0FBQyxvREFBTyxDQUFDLE1BQU0sQ0FBQztRQUN6QixFQUFFLEVBQUUsRUFBRTtRQUNOLEdBQUcsRUFBRSxpREFBSSxDQUFDLElBQUk7S0FDZCxDQUFDO0FBQ0gsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL1VJL1JhdGluZ0NvbnRyb2wudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogUmF0aW5nQ29udHJvbC50c1xyXG4gKlxyXG4gKiBBIG1vZHVsZSBmb3IgYSByYXRpbmcgY29udHJvbC5cclxuICovXHJcblxyXG5pbXBvcnQgeyBBdHRyaWJ1dGVOYW1lLCBDbGFzc2VzLCBUYWdzIH0gZnJvbSBcIi4vVWlDb25zdGFudHNcIjtcclxuaW1wb3J0ICogYXMgUmVuZGVyZXIgZnJvbSBcIi4vUmVuZGVyZXJcIjtcclxuXHJcbmxldCBzdGFySWQ6IHN0cmluZyA9IFwib2JmLXN0YXJcIjtcclxuXHJcbmxldCBzdGFyRGVmaW5pdGlvbjogUmVuZGVyZXIuSVVJQXNKc29uID0ge1xyXG5cdGNoaWxkcmVuOiBbXHJcblx0XHR7XHJcblx0XHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuSWQsIHZhbHVlOiBzdGFySWQgfSxcclxuXHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuWCwgdmFsdWU6IFwiMFwiIH0sXHJcblx0XHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlksIHZhbHVlOiBcIjBcIiB9LFxyXG5cdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5XaWR0aCwgdmFsdWU6IFwiMTA1XCIgfSxcclxuXHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuSGVpZ2h0LCB2YWx1ZTogXCIxMDBcIiB9LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuUG9pbnRzLFxyXG5cdFx0XHRcdFx0dmFsdWU6IFwiNTIuNSwgODAuMyA4NCwgMTAwIDc2LjMsIDYzIDEwNSwgMzggNjcuMiwgMzUgNTIuNSwgMCAzNy44LCAzNSAwLCAzOCAyOC43LCA2MyAyMCwgMTAwIDUyLjUsIDgwLjNcIixcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRdLFxyXG5cdFx0XHRpZDogc3RhcklkLFxyXG5cdFx0XHR0YWc6IFRhZ3MuUG9seWdvbixcclxuXHRcdH0sXHJcblx0XSxcclxuXHR0YWc6IFRhZ3MuRGVmcyxcclxufTtcclxuXHJcbmxldCBmaXJzdFN0YXI6IFJlbmRlcmVyLklVSUFzSnNvbiA9IHtcclxuXHRhdHRyaWJ1dGVzOiBbeyBuYW1lOiBBdHRyaWJ1dGVOYW1lLnhsaW5rSHJlZiwgdmFsdWU6IGAjJHtzdGFySWR9YCB9XSxcclxuXHR0YWc6IFRhZ3MuVXNlLFxyXG59O1xyXG5cclxubGV0IHNlY29uZFN0YXI6IFJlbmRlcmVyLklVSUFzSnNvbiA9IHtcclxuXHRhdHRyaWJ1dGVzOiBbXHJcblx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUueGxpbmtIcmVmLCB2YWx1ZTogYCMke3N0YXJJZH1gIH0sXHJcblx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuVHJhbnNmb3JtLCB2YWx1ZTogXCJ0cmFuc2xhdGUoMTA1IDApXCIgfSxcclxuXHRdLFxyXG5cdHRhZzogVGFncy5Vc2UsXHJcbn07XHJcblxyXG5sZXQgdGhpcmRTdGFyOiBSZW5kZXJlci5JVUlBc0pzb24gPSB7XHJcblx0YXR0cmlidXRlczogW1xyXG5cdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLnhsaW5rSHJlZiwgdmFsdWU6IGAjJHtzdGFySWR9YCB9LFxyXG5cdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlRyYW5zZm9ybSwgdmFsdWU6IFwidHJhbnNsYXRlKDIxMCAwKVwiIH0sXHJcblx0XSxcclxuXHR0YWc6IFRhZ3MuVXNlLFxyXG59O1xyXG5cclxubGV0IGZvdXJ0aFN0YXI6IFJlbmRlcmVyLklVSUFzSnNvbiA9IHtcclxuXHRhdHRyaWJ1dGVzOiBbXHJcblx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUueGxpbmtIcmVmLCB2YWx1ZTogYCMke3N0YXJJZH1gIH0sXHJcblx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuVHJhbnNmb3JtLCB2YWx1ZTogXCJ0cmFuc2xhdGUoMzE1IDApXCIgfSxcclxuXHRdLFxyXG5cdHRhZzogVGFncy5Vc2UsXHJcbn07XHJcblxyXG5sZXQgZmlmdGhTdGFyOiBSZW5kZXJlci5JVUlBc0pzb24gPSB7XHJcblx0YXR0cmlidXRlczogW1xyXG5cdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLnhsaW5rSHJlZiwgdmFsdWU6IGAjJHtzdGFySWR9YCB9LFxyXG5cdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlRyYW5zZm9ybSwgdmFsdWU6IFwidHJhbnNsYXRlKDQyMCAwKVwiIH0sXHJcblx0XSxcclxuXHR0YWc6IFRhZ3MuVXNlLFxyXG59O1xyXG5cclxubGV0IGVtcHR5U3RhcnM6IFJlbmRlcmVyLklVSUFzSnNvbiA9IHtcclxuXHRhdHRyaWJ1dGVzOiBbeyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlZpZXdCb3gsIHZhbHVlOiBcIjAgMCA1MjUgMTAwXCIgfV0sXHJcblx0Y2hpbGRyZW46IFtzdGFyRGVmaW5pdGlvbiwgZmlyc3RTdGFyLCBzZWNvbmRTdGFyLCB0aGlyZFN0YXIsIGZvdXJ0aFN0YXIsIGZpZnRoU3Rhcl0sXHJcblx0Y2xhc3NlczogW0NsYXNzZXMuUmF0aW5nR3JhcGhpY10sXHJcblx0dGFnOiBUYWdzLlN2ZyxcclxufTtcclxuXHJcbmxldCBvbmVGaWxsZWRTdGFyOiBSZW5kZXJlci5JVUlBc0pzb24gPSB7XHJcblx0YXR0cmlidXRlczogW3sgbmFtZTogQXR0cmlidXRlTmFtZS5WaWV3Qm94LCB2YWx1ZTogXCIwIDAgMTA1IDEwMFwiIH1dLFxyXG5cdGNoaWxkcmVuOiBbc3RhckRlZmluaXRpb24sIGZpcnN0U3Rhcl0sXHJcblx0Y2xhc3NlczogW0NsYXNzZXMuUmF0aW5nR3JhcGhpYywgQ2xhc3Nlcy5SYXRpbmdHcmFwaGljRmlsbGVkXSxcclxuXHR0YWc6IFRhZ3MuU3ZnLFxyXG59O1xyXG5cclxubGV0IHR3b0ZpbGxlZFN0YXI6IFJlbmRlcmVyLklVSUFzSnNvbiA9IHtcclxuXHRhdHRyaWJ1dGVzOiBbeyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlZpZXdCb3gsIHZhbHVlOiBcIjAgMCAyMTAgMTAwXCIgfV0sXHJcblx0Y2hpbGRyZW46IFtzdGFyRGVmaW5pdGlvbiwgZmlyc3RTdGFyLCBzZWNvbmRTdGFyXSxcclxuXHRjbGFzc2VzOiBbQ2xhc3Nlcy5SYXRpbmdHcmFwaGljLCBDbGFzc2VzLlJhdGluZ0dyYXBoaWNGaWxsZWRdLFxyXG5cdHRhZzogVGFncy5TdmcsXHJcbn07XHJcblxyXG5sZXQgdGhyZWVGaWxsZWRTdGFyOiBSZW5kZXJlci5JVUlBc0pzb24gPSB7XHJcblx0YXR0cmlidXRlczogW3sgbmFtZTogQXR0cmlidXRlTmFtZS5WaWV3Qm94LCB2YWx1ZTogXCIwIDAgMzE1IDEwMFwiIH1dLFxyXG5cdGNoaWxkcmVuOiBbc3RhckRlZmluaXRpb24sIGZpcnN0U3Rhciwgc2Vjb25kU3RhciwgdGhpcmRTdGFyXSxcclxuXHRjbGFzc2VzOiBbQ2xhc3Nlcy5SYXRpbmdHcmFwaGljLCBDbGFzc2VzLlJhdGluZ0dyYXBoaWNGaWxsZWRdLFxyXG5cdHRhZzogVGFncy5TdmcsXHJcbn07XHJcblxyXG5sZXQgZm91ckZpbGxlZFN0YXI6IFJlbmRlcmVyLklVSUFzSnNvbiA9IHtcclxuXHRhdHRyaWJ1dGVzOiBbeyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlZpZXdCb3gsIHZhbHVlOiBcIjAgMCA0MjAgMTAwXCIgfV0sXHJcblx0Y2hpbGRyZW46IFtzdGFyRGVmaW5pdGlvbiwgZmlyc3RTdGFyLCBzZWNvbmRTdGFyLCB0aGlyZFN0YXIsIGZvdXJ0aFN0YXJdLFxyXG5cdGNsYXNzZXM6IFtDbGFzc2VzLlJhdGluZ0dyYXBoaWMsIENsYXNzZXMuUmF0aW5nR3JhcGhpY0ZpbGxlZF0sXHJcblx0dGFnOiBUYWdzLlN2ZyxcclxufTtcclxuXHJcbmxldCBmaXZlRmlsbGVkU3RhcjogUmVuZGVyZXIuSVVJQXNKc29uID0ge1xyXG5cdGF0dHJpYnV0ZXM6IFt7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuVmlld0JveCwgdmFsdWU6IFwiMCAwIDUyNSAxMDBcIiB9XSxcclxuXHRjaGlsZHJlbjogW3N0YXJEZWZpbml0aW9uLCBmaXJzdFN0YXIsIHNlY29uZFN0YXIsIHRoaXJkU3RhciwgZm91cnRoU3RhciwgZmlmdGhTdGFyXSxcclxuXHRjbGFzc2VzOiBbQ2xhc3Nlcy5SYXRpbmdHcmFwaGljLCBDbGFzc2VzLlJhdGluZ0dyYXBoaWNGaWxsZWRdLFxyXG5cdHRhZzogVGFncy5TdmcsXHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGUoaWQ6IHN0cmluZyk6IFJlbmRlcmVyLklVSUFzSnNvbiB7XHJcblx0cmV0dXJuIHtcclxuXHRcdGNoaWxkcmVuOiBbXHJcblx0XHRcdGVtcHR5U3RhcnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRhdHRyaWJ1dGVzOiBbXHJcblx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuVHlwZSwgdmFsdWU6IFwicmFkaW9cIiB9LFxyXG5cdFx0XHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLk5hbWUsIHZhbHVlOiBpZCB9LFxyXG5cdFx0XHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlZhbHVlLCB2YWx1ZTogXCIxXCIgfSxcclxuXHRcdFx0XHRdLFxyXG5cdFx0XHRcdHRhZzogVGFncy5JbnB1dCxcclxuXHRcdFx0fSxcclxuXHRcdFx0b25lRmlsbGVkU3RhcixcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5UeXBlLCB2YWx1ZTogXCJyYWRpb1wiIH0sXHJcblx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuTmFtZSwgdmFsdWU6IGlkIH0sXHJcblx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuVmFsdWUsIHZhbHVlOiBcIjJcIiB9LFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0dGFnOiBUYWdzLklucHV0LFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0d29GaWxsZWRTdGFyLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0YXR0cmlidXRlczogW1xyXG5cdFx0XHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlR5cGUsIHZhbHVlOiBcInJhZGlvXCIgfSxcclxuXHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5OYW1lLCB2YWx1ZTogaWQgfSxcclxuXHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5WYWx1ZSwgdmFsdWU6IFwiM1wiIH0sXHJcblx0XHRcdFx0XSxcclxuXHRcdFx0XHR0YWc6IFRhZ3MuSW5wdXQsXHJcblx0XHRcdH0sXHJcblx0XHRcdHRocmVlRmlsbGVkU3RhcixcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5UeXBlLCB2YWx1ZTogXCJyYWRpb1wiIH0sXHJcblx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuTmFtZSwgdmFsdWU6IGlkIH0sXHJcblx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuVmFsdWUsIHZhbHVlOiBcIjRcIiB9LFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0dGFnOiBUYWdzLklucHV0LFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmb3VyRmlsbGVkU3RhcixcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5UeXBlLCB2YWx1ZTogXCJyYWRpb1wiIH0sXHJcblx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuTmFtZSwgdmFsdWU6IGlkIH0sXHJcblx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuVmFsdWUsIHZhbHVlOiBcIjVcIiB9LFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0dGFnOiBUYWdzLklucHV0LFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmaXZlRmlsbGVkU3RhcixcclxuXHRcdF0sXHJcblx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5SYXRpbmddLFxyXG5cdFx0aWQ6IGlkLFxyXG5cdFx0dGFnOiBUYWdzLlNwYW4sXHJcblx0fTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/UI/RatingControl.ts\n')},"./scripts/app/UI/Renderer.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elementFromJson", function() { return elementFromJson; });\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* eslint @microsoft/sdl/no-inner-html: "off" */\r\n/**\r\n * Renderer.ts\r\n *\r\n * Module for rendering the markup\r\n */\r\n\r\n/**\r\n * Create DOM elements from Json structure\r\n * @param {UiAsJson} schema The Json structure\r\n * @param {boolean} svg Create svg element instead of html?\r\n * @return {HTMLElement} HTML elements with tree structure\r\n */\r\nfunction elementFromJson(schema, svg) {\r\n    if (typeof schema.brs === "undefined") {\r\n        schema.brs = true;\r\n    }\r\n    if (!schema.brs) {\r\n        return null;\r\n    }\r\n    if (!schema.tag) {\r\n        schema.tag = _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Div;\r\n    }\r\n    var element;\r\n    if (schema.tag === _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Tags"].Svg) {\r\n        svg = true;\r\n    }\r\n    if (svg) {\r\n        element = document.createElementNS("http://www.w3.org/2000/svg", schema.tag);\r\n    }\r\n    else {\r\n        element = document.createElement(schema.tag);\r\n    }\r\n    if (schema.attributes) {\r\n        var attribute = void 0;\r\n        for (var i = 0; i < schema.attributes.length; i++) {\r\n            attribute = schema.attributes[i];\r\n            if (attribute.name === _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].xlinkHref) {\r\n                element.setAttributeNS("http://www.w3.org/1999/xlink", _UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].HRef, attribute.value);\r\n            }\r\n            else {\r\n                element.setAttribute(attribute.name, attribute.value);\r\n            }\r\n        }\r\n    }\r\n    if (schema.id) {\r\n        element.id = schema.id;\r\n    }\r\n    if (schema.classes) {\r\n        var concatClasses = schema.classes.join(" ");\r\n        if (svg) {\r\n            element.setAttribute(_UiConstants__WEBPACK_IMPORTED_MODULE_0__["AttributeName"].Class, concatClasses);\r\n        }\r\n        else {\r\n            element.className = concatClasses;\r\n        }\r\n    }\r\n    if (schema.innerText && !svg) {\r\n        element.textContent = schema.innerText;\r\n    }\r\n    if (schema.innerHTML && !svg) {\r\n        element.innerHTML = schema.innerHTML;\r\n    }\r\n    if (schema.children) {\r\n        for (var i = 0; i < schema.children.length; i++) {\r\n            // Sometimes IE mis-reports length\r\n            var cur = schema.children[i];\r\n            if (cur) {\r\n                var child = elementFromJson(cur, svg);\r\n                if (child) {\r\n                    element.appendChild(child);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return element;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9SZW5kZXJlci50cz8xZWRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBLGdEQUFnRDtBQUVoRDs7OztHQUlHO0FBRWlEO0FBd0JwRDs7Ozs7R0FLRztBQUNJLFNBQVMsZUFBZSxDQUFDLE1BQWlCLEVBQUUsR0FBYTtJQUMvRCxJQUFJLE9BQU8sTUFBTSxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUU7UUFDdEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7S0FDbEI7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNoQixPQUFPLElBQUksQ0FBQztLQUNaO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDaEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxpREFBSSxDQUFDLEdBQUcsQ0FBQztLQUN0QjtJQUVELElBQUksT0FBZ0IsQ0FBQztJQUVyQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssaURBQUksQ0FBQyxHQUFHLEVBQUU7UUFDNUIsR0FBRyxHQUFHLElBQUksQ0FBQztLQUNYO0lBRUQsSUFBSSxHQUFHLEVBQUU7UUFDUixPQUFPLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDN0U7U0FBTTtRQUNOLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM3QztJQUVELElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUN0QixJQUFJLFNBQVMsU0FBWSxDQUFDO1FBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsRCxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssMERBQWEsQ0FBQyxTQUFTLEVBQUU7Z0JBQy9DLE9BQU8sQ0FBQyxjQUFjLENBQUMsOEJBQThCLEVBQUUsMERBQWEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzVGO2lCQUFNO2dCQUNOLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEQ7U0FDRDtLQUNEO0lBRUQsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFO1FBQ2QsT0FBTyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO0tBQ3ZCO0lBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO1FBQ25CLElBQUksYUFBYSxHQUFXLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELElBQUksR0FBRyxFQUFFO1lBQ1IsT0FBTyxDQUFDLFlBQVksQ0FBQywwREFBYSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN6RDthQUFNO1lBQ04sT0FBTyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7U0FDbEM7S0FDRDtJQUVELElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUM3QixPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7S0FDdkM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDN0IsT0FBTyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0tBQ3JDO0lBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoRCxrQ0FBa0M7WUFDbEMsSUFBSSxHQUFHLEdBQWMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV4QyxJQUFJLEdBQUcsRUFBRTtnQkFDUixJQUFJLEtBQUssR0FBWSxlQUFlLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUUvQyxJQUFJLEtBQUssRUFBRTtvQkFDVixPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMzQjthQUNEO1NBQ0Q7S0FDRDtJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2hCLENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9VSS9SZW5kZXJlci50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBAbWljcm9zb2Z0L3NkbC9uby1pbm5lci1odG1sOiBcIm9mZlwiICovXHJcblxyXG4vKipcclxuICogUmVuZGVyZXIudHNcclxuICpcclxuICogTW9kdWxlIGZvciByZW5kZXJpbmcgdGhlIG1hcmt1cFxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEF0dHJpYnV0ZU5hbWUsIFRhZ3MgfSBmcm9tIFwiLi9VaUNvbnN0YW50c1wiO1xyXG5cclxuLyoqXHJcbiAqIEludGVyZmFjZSBmb3IgYW4gYXR0cmlidXRlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBdHRyaWJ1dGUge1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHR2YWx1ZTogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYWNlIGZvciBVSShIVE1MIG1hcmt1cCkgYXMganNvblxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJVUlBc0pzb24ge1xyXG5cdGlkPzogc3RyaW5nO1xyXG5cdHRhZz86IHN0cmluZzsgLy8gZGl2IGJ5IGRlZmF1bHRcclxuXHRjbGFzc2VzPzogc3RyaW5nW107IC8vIENTUyBjbGFzc1xyXG5cdGF0dHJpYnV0ZXM/OiBJQXR0cmlidXRlW107XHJcblx0Y2hpbGRyZW4/OiBJVUlBc0pzb25bXTtcclxuXHRpbm5lclRleHQ/OiBzdHJpbmc7XHJcblx0aW5uZXJIVE1MPzogc3RyaW5nO1xyXG5cdGJycz86IGFueTsgLy8gc2hvdWxkIHRoZSBlbGVtZW50IGFuZCBpdHMgY2hpbGRyZW4gYmUgY3JlYXRlZD8gdHJ1ZSBieSBkZWZhdWx0XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgRE9NIGVsZW1lbnRzIGZyb20gSnNvbiBzdHJ1Y3R1cmVcclxuICogQHBhcmFtIHtVaUFzSnNvbn0gc2NoZW1hIFRoZSBKc29uIHN0cnVjdHVyZVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHN2ZyBDcmVhdGUgc3ZnIGVsZW1lbnQgaW5zdGVhZCBvZiBodG1sP1xyXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gSFRNTCBlbGVtZW50cyB3aXRoIHRyZWUgc3RydWN0dXJlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudEZyb21Kc29uKHNjaGVtYTogSVVJQXNKc29uLCBzdmc/OiBib29sZWFuKTogRWxlbWVudCB7XHJcblx0aWYgKHR5cGVvZiBzY2hlbWEuYnJzID09PSBcInVuZGVmaW5lZFwiKSB7XHJcblx0XHRzY2hlbWEuYnJzID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGlmICghc2NoZW1hLmJycykge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRpZiAoIXNjaGVtYS50YWcpIHtcclxuXHRcdHNjaGVtYS50YWcgPSBUYWdzLkRpdjtcclxuXHR9XHJcblxyXG5cdGxldCBlbGVtZW50OiBFbGVtZW50O1xyXG5cclxuXHRpZiAoc2NoZW1hLnRhZyA9PT0gVGFncy5TdmcpIHtcclxuXHRcdHN2ZyA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRpZiAoc3ZnKSB7XHJcblx0XHRlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgc2NoZW1hLnRhZyk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHNjaGVtYS50YWcpO1xyXG5cdH1cclxuXHJcblx0aWYgKHNjaGVtYS5hdHRyaWJ1dGVzKSB7XHJcblx0XHRsZXQgYXR0cmlidXRlOiBJQXR0cmlidXRlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlbWEuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRhdHRyaWJ1dGUgPSBzY2hlbWEuYXR0cmlidXRlc1tpXTtcclxuXHRcdFx0aWYgKGF0dHJpYnV0ZS5uYW1lID09PSBBdHRyaWJ1dGVOYW1lLnhsaW5rSHJlZikge1xyXG5cdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsIEF0dHJpYnV0ZU5hbWUuSFJlZiwgYXR0cmlidXRlLnZhbHVlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUubmFtZSwgYXR0cmlidXRlLnZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aWYgKHNjaGVtYS5pZCkge1xyXG5cdFx0ZWxlbWVudC5pZCA9IHNjaGVtYS5pZDtcclxuXHR9XHJcblxyXG5cdGlmIChzY2hlbWEuY2xhc3Nlcykge1xyXG5cdFx0bGV0IGNvbmNhdENsYXNzZXM6IHN0cmluZyA9IHNjaGVtYS5jbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG5cdFx0aWYgKHN2Zykge1xyXG5cdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShBdHRyaWJ1dGVOYW1lLkNsYXNzLCBjb25jYXRDbGFzc2VzKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGVsZW1lbnQuY2xhc3NOYW1lID0gY29uY2F0Q2xhc3NlcztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlmIChzY2hlbWEuaW5uZXJUZXh0ICYmICFzdmcpIHtcclxuXHRcdGVsZW1lbnQudGV4dENvbnRlbnQgPSBzY2hlbWEuaW5uZXJUZXh0O1xyXG5cdH1cclxuXHJcblx0aWYgKHNjaGVtYS5pbm5lckhUTUwgJiYgIXN2Zykge1xyXG5cdFx0ZWxlbWVudC5pbm5lckhUTUwgPSBzY2hlbWEuaW5uZXJIVE1MO1xyXG5cdH1cclxuXHJcblx0aWYgKHNjaGVtYS5jaGlsZHJlbikge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlbWEuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Ly8gU29tZXRpbWVzIElFIG1pcy1yZXBvcnRzIGxlbmd0aFxyXG5cdFx0XHRsZXQgY3VyOiBJVUlBc0pzb24gPSBzY2hlbWEuY2hpbGRyZW5baV07XHJcblxyXG5cdFx0XHRpZiAoY3VyKSB7XHJcblx0XHRcdFx0bGV0IGNoaWxkOiBFbGVtZW50ID0gZWxlbWVudEZyb21Kc29uKGN1ciwgc3ZnKTtcclxuXHJcblx0XHRcdFx0aWYgKGNoaWxkKSB7XHJcblx0XHRcdFx0XHRlbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBlbGVtZW50O1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/UI/Renderer.ts\n')},"./scripts/app/UI/SpinnerControl.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Spinner", function() { return Spinner; });\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Utils */ "./scripts/app/UI/Utils.ts");\n/**\r\n * Spinner.ts\r\n *\r\n * A module for a spinner.\r\n */\r\n\r\n\r\nvar animationSpeed = 90;\r\nvar numCircles = 8;\r\nvar offsetSize = 0.2;\r\nvar parentSize = 34;\r\nvar fadeIncrement = 1 / numCircles;\r\nvar Spinner = /** @class */ (function () {\r\n    /**\r\n     * Constructor\r\n     * @param id id of the element to attach the spinner to\r\n     */\r\n    function Spinner(id) {\r\n        this.circleObjects = [];\r\n        this.spinnerId = id;\r\n        this.spinner = document.getElementById(this.spinnerId);\r\n        this.createCirclesAndArrange();\r\n        this.initializeOpacities();\r\n        this.start();\r\n        _Utils__WEBPACK_IMPORTED_MODULE_1__["setElementVisibility"](id, true);\r\n    }\r\n    /**\r\n     * Destroys the spinner\r\n     */\r\n    Spinner.prototype.destroy = function () {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_1__["setElementVisibility"](this.spinnerId, false);\r\n        this.stop();\r\n    };\r\n    /**\r\n     * Starts the animation\r\n     */\r\n    Spinner.prototype.start = function () {\r\n        var _this = this;\r\n        this.stop();\r\n        this.interval = setInterval(function () {\r\n            var i = _this.circleObjects.length;\r\n            while (i--) {\r\n                fade(_this.circleObjects[i]);\r\n            }\r\n        }, animationSpeed);\r\n    };\r\n    /**\r\n     * Stops the animation\r\n     */\r\n    Spinner.prototype.stop = function () {\r\n        clearInterval(this.interval);\r\n    };\r\n    Spinner.prototype.createCirclesAndArrange = function () {\r\n        var angle = 0;\r\n        var offset = parentSize * offsetSize;\r\n        var step = (2 * Math.PI) / numCircles;\r\n        var i = numCircles;\r\n        var circleObject;\r\n        var radius = (parentSize - offset) * 0.5;\r\n        while (i--) {\r\n            var circle = createCircle();\r\n            var x = Math.round(parentSize * 0.5 + radius * Math.cos(angle) - circle.clientWidth * 0.5) - offset * 0.5;\r\n            var y = Math.round(parentSize * 0.5 + radius * Math.sin(angle) - circle.clientHeight * 0.5) - offset * 0.5;\r\n            this.spinner.appendChild(circle);\r\n            circle.style.left = x + "px";\r\n            circle.style.top = y + "px";\r\n            angle += step;\r\n            circleObject = { element: circle, j: i };\r\n            this.circleObjects.push(circleObject);\r\n        }\r\n    };\r\n    Spinner.prototype.initializeOpacities = function () {\r\n        var i = 0;\r\n        var j = 1;\r\n        var opacity;\r\n        for (i; i < numCircles; i++) {\r\n            var circleObject = this.circleObjects[i];\r\n            opacity = (fadeIncrement * j++);\r\n            setOpacity(circleObject.element, opacity);\r\n        }\r\n    };\r\n    return Spinner;\r\n}());\r\n\r\nfunction fade(circleObject) {\r\n    var opacity = getOpacity(circleObject.element) - fadeIncrement;\r\n    if (opacity <= 0) {\r\n        opacity = 1;\r\n    }\r\n    setOpacity(circleObject.element, opacity);\r\n}\r\nfunction getOpacity(element) {\r\n    return parseFloat(window.getComputedStyle(element).getPropertyValue("opacity"));\r\n}\r\nfunction setOpacity(element, opacity) {\r\n    element.style.opacity = opacity.toString();\r\n}\r\nfunction createCircle() {\r\n    var circle = document.createElement("div");\r\n    circle.classList.add(_UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].SpinnerCircle);\r\n    circle.style.width = circle.style.height = parentSize * offsetSize + "px";\r\n    return circle;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9TcGlubmVyQ29udHJvbC50cz8xMzdiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7R0FJRztBQUVxQztBQUNQO0FBT2pDLElBQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixJQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUN0QixJQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBRXJDO0lBTUM7OztPQUdHO0lBQ0gsaUJBQVksRUFBVTtRQVRkLGtCQUFhLEdBQW9CLEVBQUUsQ0FBQztRQVUzQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLDJEQUEwQixDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSx5QkFBTyxHQUFkO1FBQ0MsMkRBQTBCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDYixDQUFDO0lBRUQ7O09BRUc7SUFDSyx1QkFBSyxHQUFiO1FBQUEsaUJBU0M7UUFSQSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxLQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FB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QU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxPQUF1QixFQUFFLE9BQWU7SUFDM0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzVDLENBQUM7QUFFRCxTQUFTLFlBQVk7SUFDcEIsSUFBSSxNQUFNLEdBQW1CLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsb0RBQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1QyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQztJQUMxRSxPQUFPLE1BQU0sQ0FBQztBQUNmLENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9VSS9TcGlubmVyQ29udHJvbC50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBTcGlubmVyLnRzXHJcbiAqXHJcbiAqIEEgbW9kdWxlIGZvciBhIHNwaW5uZXIuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ2xhc3NlcyB9IGZyb20gXCIuL1VpQ29uc3RhbnRzXCI7XHJcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gXCIuL1V0aWxzXCI7XHJcblxyXG5pbnRlcmZhY2UgSUNpcmNsZU9iamVjdCB7XHJcblx0ZWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XHJcblx0ajogbnVtYmVyO1xyXG59XHJcblxyXG5jb25zdCBhbmltYXRpb25TcGVlZCA9IDkwO1xyXG5jb25zdCBudW1DaXJjbGVzID0gODtcclxuY29uc3Qgb2Zmc2V0U2l6ZSA9IDAuMjtcclxuY29uc3QgcGFyZW50U2l6ZSA9IDM0O1xyXG5jb25zdCBmYWRlSW5jcmVtZW50ID0gMSAvIG51bUNpcmNsZXM7XHJcblxyXG5leHBvcnQgY2xhc3MgU3Bpbm5lciB7XHJcblx0cHJpdmF0ZSBjaXJjbGVPYmplY3RzOiBJQ2lyY2xlT2JqZWN0W10gPSBbXTtcclxuXHRwcml2YXRlIGludGVydmFsOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XHJcblx0cHJpdmF0ZSBzcGlubmVySWQ6IHN0cmluZztcclxuXHRwcml2YXRlIHNwaW5uZXI6IEhUTUxFbGVtZW50O1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RvclxyXG5cdCAqIEBwYXJhbSBpZCBpZCBvZiB0aGUgZWxlbWVudCB0byBhdHRhY2ggdGhlIHNwaW5uZXIgdG9cclxuXHQgKi9cclxuXHRjb25zdHJ1Y3RvcihpZDogc3RyaW5nKSB7XHJcblx0XHR0aGlzLnNwaW5uZXJJZCA9IGlkO1xyXG5cdFx0dGhpcy5zcGlubmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zcGlubmVySWQpO1xyXG5cdFx0dGhpcy5jcmVhdGVDaXJjbGVzQW5kQXJyYW5nZSgpO1xyXG5cdFx0dGhpcy5pbml0aWFsaXplT3BhY2l0aWVzKCk7XHJcblx0XHR0aGlzLnN0YXJ0KCk7XHJcblx0XHRVdGlscy5zZXRFbGVtZW50VmlzaWJpbGl0eShpZCwgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZXN0cm95cyB0aGUgc3Bpbm5lclxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZXN0cm95KCkge1xyXG5cdFx0VXRpbHMuc2V0RWxlbWVudFZpc2liaWxpdHkodGhpcy5zcGlubmVySWQsIGZhbHNlKTtcclxuXHRcdHRoaXMuc3RvcCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU3RhcnRzIHRoZSBhbmltYXRpb25cclxuXHQgKi9cclxuXHRwcml2YXRlIHN0YXJ0KCkge1xyXG5cdFx0dGhpcy5zdG9wKCk7XHJcblx0XHR0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG5cdFx0XHRsZXQgaSA9IHRoaXMuY2lyY2xlT2JqZWN0cy5sZW5ndGg7XHJcblx0XHRcdHdoaWxlIChpLS0pIHtcclxuXHRcdFx0XHRmYWRlKHRoaXMuY2lyY2xlT2JqZWN0c1tpXSk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRcdGFuaW1hdGlvblNwZWVkKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0b3BzIHRoZSBhbmltYXRpb25cclxuXHQgKi9cclxuXHRwcml2YXRlIHN0b3AoKSB7XHJcblx0XHRjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVDaXJjbGVzQW5kQXJyYW5nZSgpIHtcclxuXHRcdGxldCBhbmdsZSA9IDA7XHJcblx0XHRsZXQgb2Zmc2V0ID0gcGFyZW50U2l6ZSAqIG9mZnNldFNpemU7XHJcblx0XHRsZXQgc3RlcCA9ICgyICogTWF0aC5QSSkgLyBudW1DaXJjbGVzO1xyXG5cdFx0bGV0IGkgPSBudW1DaXJjbGVzO1xyXG5cdFx0bGV0IGNpcmNsZU9iamVjdDogSUNpcmNsZU9iamVjdDtcclxuXHRcdGxldCByYWRpdXMgPSAocGFyZW50U2l6ZSAtIG9mZnNldCkgKiAwLjU7XHJcblxyXG5cdFx0d2hpbGUgKGktLSkge1xyXG5cdFx0XHRsZXQgY2lyY2xlOiBIVE1MRGl2RWxlbWVudCA9IGNyZWF0ZUNpcmNsZSgpO1xyXG5cdFx0XHRsZXQgeCA9IE1hdGgucm91bmQocGFyZW50U2l6ZSAqIDAuNSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKSAtIGNpcmNsZS5jbGllbnRXaWR0aCAqIDAuNSkgLSBvZmZzZXQgKiAwLjU7XHJcblx0XHRcdGxldCB5ID0gTWF0aC5yb3VuZChwYXJlbnRTaXplICogMC41ICsgcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpIC0gY2lyY2xlLmNsaWVudEhlaWdodCAqIDAuNSkgLSBvZmZzZXQgKiAwLjU7XHJcblx0XHRcdHRoaXMuc3Bpbm5lci5hcHBlbmRDaGlsZChjaXJjbGUpO1xyXG5cdFx0XHRjaXJjbGUuc3R5bGUubGVmdCA9IHggKyBcInB4XCI7XHJcblx0XHRcdGNpcmNsZS5zdHlsZS50b3AgPSB5ICsgXCJweFwiO1xyXG5cdFx0XHRhbmdsZSArPSBzdGVwO1xyXG5cdFx0XHRjaXJjbGVPYmplY3QgPSB7IGVsZW1lbnQ6IGNpcmNsZSwgajogaSB9O1xyXG5cdFx0XHR0aGlzLmNpcmNsZU9iamVjdHMucHVzaChjaXJjbGVPYmplY3QpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBpbml0aWFsaXplT3BhY2l0aWVzKCkge1xyXG5cdFx0bGV0IGkgPSAwO1xyXG5cdFx0bGV0IGogPSAxO1xyXG5cdFx0bGV0IG9wYWNpdHk6IG51bWJlcjtcclxuXHJcblx0XHRmb3IgKGk7IGkgPCBudW1DaXJjbGVzOyBpKyspIHtcclxuXHRcdFx0bGV0IGNpcmNsZU9iamVjdCA9IHRoaXMuY2lyY2xlT2JqZWN0c1tpXTtcclxuXHRcdFx0b3BhY2l0eSA9IChmYWRlSW5jcmVtZW50ICogaisrKTtcclxuXHRcdFx0c2V0T3BhY2l0eShjaXJjbGVPYmplY3QuZWxlbWVudCwgb3BhY2l0eSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBmYWRlKGNpcmNsZU9iamVjdDogYW55KSB7XHJcblx0bGV0IG9wYWNpdHkgPSBnZXRPcGFjaXR5KGNpcmNsZU9iamVjdC5lbGVtZW50KSAtIGZhZGVJbmNyZW1lbnQ7XHJcblxyXG5cdGlmIChvcGFjaXR5IDw9IDApIHtcclxuXHRcdG9wYWNpdHkgPSAxO1xyXG5cdH1cclxuXHJcblx0c2V0T3BhY2l0eShjaXJjbGVPYmplY3QuZWxlbWVudCwgb3BhY2l0eSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE9wYWNpdHkoZWxlbWVudDogSFRNTERpdkVsZW1lbnQpIHtcclxuXHRyZXR1cm4gcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFwib3BhY2l0eVwiKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldE9wYWNpdHkoZWxlbWVudDogSFRNTERpdkVsZW1lbnQsIG9wYWNpdHk6IG51bWJlcikge1xyXG5cdGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9IG9wYWNpdHkudG9TdHJpbmcoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlQ2lyY2xlKCk6IEhUTUxEaXZFbGVtZW50IHtcclxuXHRsZXQgY2lyY2xlOiBIVE1MRGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0Y2lyY2xlLmNsYXNzTGlzdC5hZGQoQ2xhc3Nlcy5TcGlubmVyQ2lyY2xlKTtcclxuXHRjaXJjbGUuc3R5bGUud2lkdGggPSBjaXJjbGUuc3R5bGUuaGVpZ2h0ID0gcGFyZW50U2l6ZSAqIG9mZnNldFNpemUgKyBcInB4XCI7XHJcblx0cmV0dXJuIGNpcmNsZTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/UI/SpinnerControl.ts\n')},"./scripts/app/UI/Toast/CVToast.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createCVSurvey", function() { return createCVSurvey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "handleSurveyEvent", function() { return handleSurveyEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRating", function() { return getRating; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getQuestionValue", function() { return getQuestionValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAnswerValue", function() { return getAnswerValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getInsightfulAnswer", function() { return getInsightfulAnswer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatSubmitData", function() { return formatSubmitData; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unitTestExports", function() { return unitTestExports; });\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var gatecrash__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! gatecrash */ "./node_modules/gatecrash/dist/index.js");\n/* harmony import */ var gatecrash__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(gatecrash__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _Transport_Transport__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../../Transport/Transport */ "./scripts/app/Transport/Transport.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Utils */ "../FloodgateCore/dist/src/Utils.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _Constants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../Constants */ "./scripts/app/Constants.ts");\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Callback when the CV Survey dialog is dismissed\r\n */\r\nvar onDismiss;\r\nvar onDismissFlag = false;\r\nvar isPromptResponseLogValidated = false;\r\nvar isAdditionalPromptResponseLogValidated = false;\r\nvar MinimumInsightfulQuestionAnswers = 1;\r\nvar SurveyUIFormSecondarySubmitName = "Survey_UI_Form_Secondary_Submit_Page_Number_";\r\nvar SurveyUIFormUserClosedName = "Survey_UI_Form_UserClosed_Page_Number_";\r\n/**\r\n * Function to show Customer Voice survey experience\r\n */\r\nfunction createCVSurvey(contextParams, onClose, cvSurveyOptionalConfigParams, overrideUXRenderCallbackAsync) {\r\n    onDismiss = function (submitted) {\r\n        _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateInitOptions().onDismiss(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getCampaignId(), submitted);\r\n        onClose();\r\n    };\r\n    if (overrideUXRenderCallbackAsync) {\r\n        var logCustomProps_1 = {\r\n            CampaignId: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getCampaignId(),\r\n            SurveyId: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getId(),\r\n            SurveyType: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getSurveyType(),\r\n        };\r\n        overrideUXRenderCallbackAsync(contextParams)\r\n            .then(function () {\r\n            internal.logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_RENDER_OVERRIDE_SUCCESS, logCustomProps_1);\r\n        }).catch(function (ex) {\r\n            logCustomProps_1.ErrorMessage = ex;\r\n            internal.logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_RENDER_OVERRIDE_ERROR, logCustomProps_1);\r\n        });\r\n    }\r\n    else {\r\n        Object(gatecrash__WEBPACK_IMPORTED_MODULE_2__["renderCVSurvey"])(_UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].ToastContainer, handleSurveyEvent, contextParams, cvSurveyOptionalConfigParams);\r\n    }\r\n}\r\n/**\r\n * The default handler of events emitted by custom survey tools.\r\n * @param key an identifier for the event\r\n * @param data all data needed to process the event\r\n */\r\nvar handleSurveyEvent = function (key, data) {\r\n    var keyPrefix;\r\n    var keyBase;\r\n    var err = false;\r\n    var splitKey = key.split("_");\r\n    if (splitKey.length > 1) {\r\n        keyPrefix = splitKey[0];\r\n        keyBase = splitKey[1];\r\n    }\r\n    else {\r\n        keyPrefix = "Other";\r\n        keyBase = splitKey[0];\r\n    }\r\n    switch (keyPrefix) {\r\n        case "CV":\r\n            switch (keyBase) {\r\n                case "OnSubmit": return onCVSubmit(data);\r\n                case "OnCancel": return onCVCancel(data);\r\n                case "OnLoaded": return onCVLoaded(data);\r\n                case "OnLog": return logGatecrashEvent(data);\r\n                default: err = true;\r\n            }\r\n            break;\r\n        default: err = true;\r\n    }\r\n    if (err) {\r\n        var logCustomProps = {\r\n            CampaignId: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getCampaignId(),\r\n            SurveyId: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getId(),\r\n            SurveyType: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getSurveyType(),\r\n        };\r\n        internal.logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_EVENT_KEY_ERROR, logCustomProps);\r\n    }\r\n};\r\n// Setting Rating field for SubmitData\r\nfunction getRating(values) {\r\n    return parseInt(values === null || values === void 0 ? void 0 : values.answerValue[0], 10) - 1;\r\n}\r\n// Setting QuestionValue field for SubmitData\r\nfunction getQuestionValue(values) {\r\n    return values === null || values === void 0 ? void 0 : values.questionValue;\r\n}\r\n// Setting AnswerValue field for SubmitData\r\nfunction getAnswerValue(values) {\r\n    return Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_6__["isNOU"])(values === null || values === void 0 ? void 0 : values.answerValue[0]) ? values === null || values === void 0 ? void 0 : values.answerValue[0] : "" + (values === null || values === void 0 ? void 0 : values.answerValue[0]);\r\n}\r\n// Setting AnswerValue for insightful field for SubmitData\r\nfunction getInsightfulAnswer(values) {\r\n    return values === null || values === void 0 ? void 0 : values.answerValue;\r\n}\r\n/* Traverses the CV Survey response object array and creates props for OCV Payload;\r\n * on the face of it though it is O(N^2) runtime complexity,\r\n * given the number of pages are only in finite number\r\n * (wouldn\'t expect more than 10 pages at most), this should still run in constant time.\r\n */\r\nfunction formatSubmitData(submitData) {\r\n    var _a;\r\n    var rating;\r\n    var comment;\r\n    var email;\r\n    var ratingQuestion;\r\n    var promptQuestion;\r\n    var promptResponse;\r\n    var commentTitle;\r\n    var additionalPromptQuestion;\r\n    var additionalPromptResponse;\r\n    var insightfulQuestionAnswers = [];\r\n    (_a = submitData.pageInfo) === null || _a === void 0 ? void 0 : _a.forEach(function (currentPage) {\r\n        currentPage.questionAnswers.forEach(function (values) {\r\n            switch (values === null || values === void 0 ? void 0 : values.questionType) {\r\n                case "rating" /* Rating */:\r\n                    rating = getRating(values);\r\n                    ratingQuestion = getQuestionValue(values);\r\n                    break;\r\n                case "prompt" /* Prompt */:\r\n                    promptQuestion = getQuestionValue(values);\r\n                    promptResponse = getAnswerValue(values);\r\n                    break;\r\n                case "verbatim" /* Verbatim */:\r\n                    commentTitle = getQuestionValue(values);\r\n                    comment = getAnswerValue(values);\r\n                    break;\r\n                case "email" /* Email */:\r\n                    email = getAnswerValue(values);\r\n                    break;\r\n                case "additional" /* AdditionalQuestion */:\r\n                    additionalPromptQuestion = getQuestionValue(values);\r\n                    additionalPromptResponse = getAnswerValue(values);\r\n                    break;\r\n                case "contactme" /* ContactMe */:\r\n                default:\r\n                    insightfulQuestionAnswers.push({\r\n                        question: ((values === null || values === void 0 ? void 0 : values.questionType) === "contactme" /* ContactMe */) ? "contactme" /* ContactMe */ : getQuestionValue(values),\r\n                        answer: getInsightfulAnswer(values),\r\n                    });\r\n            }\r\n        });\r\n    });\r\n    var formattedData = {\r\n        rating: rating,\r\n        ratingQuestion: ratingQuestion,\r\n        email: email,\r\n        comment: comment,\r\n        commentTitle: commentTitle,\r\n        promptQuestion: promptQuestion,\r\n        promptResponse: promptResponse,\r\n        additionalPromptQuestion: additionalPromptQuestion,\r\n        additionalPromptResponse: additionalPromptResponse,\r\n        insightfulQuestionAnswers: insightfulQuestionAnswers,\r\n    };\r\n    return formattedData;\r\n}\r\n;\r\nfunction updateExtendedManifestData(transporter, formattedData) {\r\n    var extendedManifestData = JSON.parse(transporter.getExtendedManifestData());\r\n    extendedManifestData.surveyStrings = JSON.stringify({\r\n        prompt: { title: "", question: formattedData === null || formattedData === void 0 ? void 0 : formattedData.promptQuestion, yesButtonText: "YES", noButtonText: "NO" },\r\n        rating: [{ question: formattedData === null || formattedData === void 0 ? void 0 : formattedData.ratingQuestion, options: [] }],\r\n        comment: [{ question: formattedData === null || formattedData === void 0 ? void 0 : formattedData.commentTitle }],\r\n    });\r\n    transporter.setExtendedManifestData(JSON.stringify(extendedManifestData));\r\n    return extendedManifestData;\r\n}\r\nfunction updateAppData(formattedData) {\r\n    var appData = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().applicationGroup.appData;\r\n    var appDataValues = [];\r\n    // To differentiate CV survey responses from other surveys given the flight object in OCV gets trimmed, this is a workaround for now.\r\n    var cvSurveyInfo = {\r\n        insightfulInfo: formattedData.insightfulQuestionAnswers,\r\n        additionalInfo: {\r\n            SurveyDescription: _Constants__WEBPACK_IMPORTED_MODULE_7__["customerVoiceSurveyUX"],\r\n            Flight: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCVSurveyFlights(),\r\n        },\r\n    };\r\n    if (Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_6__["isNOU"])(appData)) {\r\n        appDataValues.push({});\r\n    }\r\n    else {\r\n        try {\r\n            appDataValues.push(JSON.parse(appData));\r\n        }\r\n        catch (ex) {\r\n            logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].APPDATA_JSON_PARSE_ERROR);\r\n            appDataValues.push({});\r\n        }\r\n    }\r\n    appDataValues.push(cvSurveyInfo);\r\n    return JSON.stringify(appDataValues);\r\n}\r\nfunction setTransporterValues(transporter, formattedData) {\r\n    transporter.setManifestValues(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getJsonElements());\r\n    updateExtendedManifestData(transporter, formattedData);\r\n    if (formattedData.email) {\r\n        transporter.setEmail(formattedData.email);\r\n    }\r\n    var appData = updateAppData(formattedData);\r\n    transporter.setAppData(appData);\r\n    var preGeneratedId = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getPreGeneratedClientFeedbackId();\r\n    if (preGeneratedId) {\r\n        transporter.setClientFeedbackId(preGeneratedId);\r\n    }\r\n    return transporter;\r\n}\r\n/**\r\n * Call-back function when user sends feedback from Customer Voice survey experience.\r\n *\r\n * IMPORTANT: This callback should contain no references to any survey UI\r\n * nor DOM elements. This restriction supports multi-window environments\r\n * where rendering is happening in a different context than these callbacks.\r\n *\r\n * View the design document explaining multi-window support changes here:\r\n * https://microsoft-my.sharepoint.com/:w:/p/joshdunning/EWghU_fNcrpAseOemGqOO2QBBNaRz_wZDyEL0ZewuXwKtw?e=gi7P1a\r\n */\r\nfunction onCVSubmit(data) {\r\n    var _a;\r\n    try {\r\n        var formattedData = formatSubmitData(data);\r\n        var rating = formattedData.rating, comment = formattedData.comment, promptResponse = formattedData.promptResponse, additionalPromptResponse = formattedData.additionalPromptResponse;\r\n        var surveyContainsInsightfulInfo = formattedData.insightfulQuestionAnswers.length > MinimumInsightfulQuestionAnswers;\r\n        var isPromptAnswerLogMandatory = validateLogPromptAnswer(promptResponse, additionalPromptResponse);\r\n        // onCVSubmit is called twice when the user clicks NotNow an ICM was created for the CV team to avoid this behavior\r\n        if (isPromptAnswerLogMandatory) {\r\n            return;\r\n        }\r\n        // clientfeedback id to overwrite\r\n        var transporter = new _Transport_Transport__WEBPACK_IMPORTED_MODULE_4__["Transporter"](_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().environment, _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_3__["ISurvey"].Type[_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getSurveyType()], _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().appId, "Survey", _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().applicationGroup, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().telemetryGroup, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().webGroup);\r\n        _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().setValues(Number(rating), comment ? comment : "");\r\n        setTransporterValues(transporter, formattedData);\r\n        transporter.submit();\r\n        // Toggle OnDismissFlag when data is submitted to OCV\r\n        if (data.eventType === "FormResponseSubmitted" /* FormResponseSubmitted */ ||\r\n            data.eventType === "FormPartialResponseSubmitted" /* FormPartialResponseSubmitted */) {\r\n            onDismissFlag = true;\r\n        }\r\n        if ((data.eventType === "FormResponseSubmitted" /* FormResponseSubmitted */ && ((_a = data.formTitle) === null || _a === void 0 ? void 0 : _a.includes("singlePage" /* SinglePage */))) || (data.eventType === "FormPartialResponseSubmitted" /* FormPartialResponseSubmitted */ &&\r\n            !surveyContainsInsightfulInfo)) {\r\n            logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_SUBMIT);\r\n        }\r\n        else {\r\n            _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_SECONDARY_SUBMIT.name =\r\n                SurveyUIFormSecondarySubmitName + data.pageNumber;\r\n            logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_SECONDARY_SUBMIT);\r\n        }\r\n    }\r\n    catch (ex) {\r\n        logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_SUBMIT_ERROR);\r\n    }\r\n}\r\nfunction validateLogPromptAnswer(promptResponse, additionalPromptResponse) {\r\n    var isPromptAnswerLogNeeded = false;\r\n    var isPromptAnswerNo = false;\r\n    if (!Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_6__["isNOU"])(promptResponse)) {\r\n        isPromptAnswerLogNeeded = LogPromptAnswer(promptResponse, "prompt" /* Prompt */, isPromptResponseLogValidated);\r\n        isPromptAnswerNo = promptResponse === _UiConstants__WEBPACK_IMPORTED_MODULE_0__["PromptConstants"].No;\r\n    }\r\n    if (!Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_6__["isNOU"])(additionalPromptResponse)) {\r\n        isPromptAnswerLogNeeded = LogPromptAnswer(additionalPromptResponse, "additional" /* AdditionalQuestion */, isAdditionalPromptResponseLogValidated);\r\n        isPromptAnswerNo = additionalPromptResponse === _UiConstants__WEBPACK_IMPORTED_MODULE_0__["PromptConstants"].No;\r\n    }\r\n    return isPromptAnswerLogNeeded || isPromptAnswerNo;\r\n}\r\nfunction LogPromptAnswer(promptResponse, questionType, isPromptAnswerLogged) {\r\n    if (!isPromptAnswerLogged) {\r\n        var promptMessageClicked = void 0;\r\n        var promptMessageClosed = void 0;\r\n        if (questionType === "prompt" /* Prompt */) {\r\n            isPromptResponseLogValidated = true;\r\n            promptMessageClicked = _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_PROMPT_CLICKED;\r\n            promptMessageClosed = _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_PROMPT_USERCLOSED;\r\n            if ((promptResponse === _UiConstants__WEBPACK_IMPORTED_MODULE_0__["PromptConstants"].Yes)) {\r\n                logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_SHOWN);\r\n            }\r\n        }\r\n        else {\r\n            isAdditionalPromptResponseLogValidated = true;\r\n            promptMessageClicked = _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_ADDITIONALPROMPT_CLICKED;\r\n            promptMessageClosed = _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_ADDITIONALPROMPT_USERCLOSED;\r\n        }\r\n        logTelemetryEvent(promptResponse === _UiConstants__WEBPACK_IMPORTED_MODULE_0__["PromptConstants"].No ? promptMessageClosed : promptMessageClicked);\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n/**\r\n * Call-back function when user cancels feedback from Customer Voice survey experience.\r\n *\r\n * IMPORTANT: This callback should contain no references to any survey UI\r\n * nor DOM elements. This restriction supports multi-window environments\r\n * where rendering is happening in a different context than these callbacks.\r\n *\r\n * View the design document explaining multi-window support changes here:\r\n * https://microsoft-my.sharepoint.com/:w:/p/joshdunning/EWghU_fNcrpAseOemGqOO2QBBNaRz_wZDyEL0ZewuXwKtw?e=gi7P1a\r\n */\r\nfunction onCVCancel(data) {\r\n    var _a;\r\n    switch (data.eventType) {\r\n        case "FormClosed" /* FormClosed */:\r\n            if (Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_6__["isNOU"])(data.pageNumber)) {\r\n                logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_USERCLOSED);\r\n            }\r\n            else {\r\n                _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_USERCLOSED.name = SurveyUIFormUserClosedName + data.pageNumber.charAt(data.pageNumber.length - 1);\r\n                logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_USERCLOSED);\r\n            }\r\n            break;\r\n        case "ThankYouPageClosed" /* ThankYouPageClosed */:\r\n            logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_THANKYOUPAGE_USERCLOSED);\r\n            break;\r\n        case "PromptClosed" /* PromptClosed */:\r\n            logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_PROMPT_USERCLOSED);\r\n            break;\r\n        case "AdditionalPromptClosed" /* AdditionalPromptClosed */:\r\n            logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_ADDITIONALPROMPT_USERCLOSED);\r\n            break;\r\n        case "FormAutoDismissed" /* FormAutoDismissed */:\r\n            logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_PROMPT_AUTODISMISSED);\r\n            break;\r\n        case "ThankYouPageAutoDismissed" /* ThankYouPageAutoDismissed */:\r\n            logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_THANKYOUPAGE_AUTODISMISSED);\r\n            break;\r\n        case "FormResponseCanceled" /* FormResponseCanceled */:\r\n            if (Object(_ms_ofb_officefloodgatecore_dist_src_Utils__WEBPACK_IMPORTED_MODULE_6__["isNOU"])(data.pageNumber)) {\r\n                logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_USERCLOSED);\r\n            }\r\n            else {\r\n                _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_USERCLOSED.name = SurveyUIFormUserClosedName + ((_a = data.pageNumber) === null || _a === void 0 ? void 0 : _a.charAt(data.pageNumber.length - 1));\r\n                logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_USERCLOSED);\r\n            }\r\n            break;\r\n        default:\r\n            logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_NO_RETURN_TYPE);\r\n            break;\r\n    }\r\n    onDismiss(onDismissFlag);\r\n}\r\n/**\r\n * Call-back function when user Customer Voice survey is loaded and ready for showing to the user.\r\n * Here we are going to hide the survey if the current survey is the dispatcher survey.\r\n * First if the dispacther survey is called, the hasSurveyDispatcher parameter will be true.\r\n * And second, dispatcher survey will be the first survey in the survey dispatcher logic. So, we using\r\n * hasLoadedDispatcher to make sure we will only hide the first survey in the whole survey dispatcher logic\r\n * which is the dispatcher survey.\r\n *\r\n * IMPORTANT: This callback should contain no references to any survey UI\r\n * nor DOM elements. This restriction supports multi-window environments\r\n * where rendering is happening in a different context than these callbacks.\r\n *\r\n * View the design document explaining multi-window support changes here:\r\n * https://microsoft-my.sharepoint.com/:w:/p/joshdunning/EWghU_fNcrpAseOemGqOO2QBBNaRz_wZDyEL0ZewuXwKtw?e=gi7P1a\r\n */\r\nfunction onCVLoaded(data) {\r\n    var eventId = _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_SHOWN;\r\n    if (data.hasSurveyDispatcher) {\r\n        eventId = _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_FORM_DISPATCHER_IMPLEMENTED;\r\n    }\r\n    else if (data.hasSurveyPromptShown) {\r\n        eventId = _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["EventIds"].SURVEY_UI_PROMPT_SHOWN;\r\n    }\r\n    logTelemetryEvent(eventId);\r\n}\r\n/**\r\n * Call-back logging function for gatecrash errors.\r\n *\r\n * IMPORTANT: This callback should contain no references to any survey UI\r\n * nor DOM elements. This restriction supports multi-window environments\r\n * where rendering is happening in a different context than these callbacks.\r\n *\r\n * View the design document explaining multi-window support changes here:\r\n * https://microsoft-my.sharepoint.com/:w:/p/joshdunning/EWghU_fNcrpAseOemGqOO2QBBNaRz_wZDyEL0ZewuXwKtw?e=gi7P1a\r\n */\r\nfunction logGatecrashEvent(data) {\r\n    var _a, _b, _c, _d;\r\n    var configuration = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]();\r\n    var logCustomProps = {\r\n        CampaignId: configuration.getFloodgateSurvey().getCampaignId(),\r\n        SurveyId: configuration.getFloodgateSurvey().getId(),\r\n        SurveyType: configuration.getFloodgateSurvey().getSurveyType(),\r\n        ErrorMessage: ((_a = data.customProperties) === null || _a === void 0 ? void 0 : _a.ErrorMessage) ? (_b = data.customProperties) === null || _b === void 0 ? void 0 : _b.ErrorMessage : null,\r\n        Message: ((_c = data.customProperties) === null || _c === void 0 ? void 0 : _c.Message) ? (_d = data.customProperties) === null || _d === void 0 ? void 0 : _d.Message : null,\r\n    };\r\n    logTelemetryEvent(data.eventId, logCustomProps);\r\n}\r\n// Log Telemetry for Customer Voice survey funnel.\r\nfunction logTelemetryEvent(eventId, customProperties) {\r\n    var configuration = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]();\r\n    var logCustomProps;\r\n    if (!customProperties) {\r\n        logCustomProps = {\r\n            CampaignId: configuration.getFloodgateSurvey().getCampaignId(),\r\n            SurveyId: configuration.getFloodgateSurvey().getId(),\r\n            SurveyType: configuration.getFloodgateSurvey().getSurveyType(),\r\n            ClientFeedbackId: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getPreGeneratedClientFeedbackId(),\r\n            CVFormId: configuration.getFloodgateSurvey().getCVSurveyFormId(),\r\n        };\r\n    }\r\n    else {\r\n        logCustomProps = customProperties;\r\n    }\r\n    _Logging_Logging__WEBPACK_IMPORTED_MODULE_5__["getLogger"]().logEvent(eventId, 1 /* Critical */, logCustomProps);\r\n}\r\nvar internal = {\r\n    logTelemetryEvent: logTelemetryEvent,\r\n};\r\nvar unitTestExports = { internal: internal }.internal;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9Ub2FzdC9DVlRvYXN0LnRzPzVjMmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUF3RDtBQUNhO0FBS2xEO0FBQ2lEO0FBQ1Y7QUFDUDtBQUNnQjtBQUNYO0FBTXhEOztHQUVHO0FBQ0gsSUFBSSxTQUE2QixDQUFDO0FBQ2xDLElBQUksYUFBYSxHQUFZLEtBQUssQ0FBQztBQUNuQyxJQUFJLDRCQUE0QixHQUFZLEtBQUssQ0FBQztBQUNsRCxJQUFJLHNDQUFzQyxHQUFZLEtBQUssQ0FBQztBQUM1RCxJQUFNLGdDQUFnQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxJQUFNLCtCQUErQixHQUFHLDhDQUE4QyxDQUFDO0FBQ3ZGLElBQU0sMEJBQTBCLEdBQUcsd0NBQXdDLENBQUM7QUFFNUU7O0dBRUc7QUFDSSxTQUFTLGNBQWMsQ0FDN0IsYUFBNkIsRUFDN0IsT0FBbUIsRUFDbkIsNEJBQTBELEVBQzFELDZCQUF1RDtJQUV2RCxTQUFTLEdBQUcsVUFBVSxTQUFrQjtRQUN2QyxnRUFBaUIsRUFBRSxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBUyxDQUN0RCxnRUFBaUIsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsYUFBYSxFQUFFLEVBQ3hELFNBQVMsQ0FDVCxDQUFDO1FBQ0YsT0FBTyxFQUFFLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRixJQUFJLDZCQUE2QixFQUFFO1FBQ2xDLElBQU0sZ0JBQWMsR0FBOEI7WUFDakQsVUFBVSxFQUFFLGdFQUFpQixFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxhQUFhLEVBQUU7WUFDcEUsUUFBUSxFQUFFLGdFQUFpQixFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxLQUFLLEVBQUU7WUFDMUQsVUFBVSxFQUFFLGdFQUFpQixFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxhQUFhLEVBQUU7U0FDcEUsQ0FBQztRQUVGLDZCQUE2QixDQUFDLGFBQWEsQ0FBQzthQUMxQyxJQUFJLENBQUM7WUFDTCxRQUFRLENBQUMsaUJBQWlCLENBQUMseURBQWdCLENBQUMsOEJBQThCLEVBQUUsZ0JBQWMsQ0FBQyxDQUFDO1FBQzdGLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFDLEVBQUU7WUFDWCxnQkFBYyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDakMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLHlEQUFnQixDQUFDLDRCQUE0QixFQUFFLGdCQUFjLENBQUMsQ0FBQztRQUMzRixDQUFDLENBQUMsQ0FBQztLQUNKO1NBQU07UUFDTixnRUFBYyxDQUNiLGdEQUFHLENBQUMsY0FBYyxFQUNsQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLDRCQUE0QixDQUM1QixDQUFDO0tBQ0Y7QUFDRixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNJLElBQU0saUJBQWlCLEdBQXVCLFVBQ3BELEdBQW1CLEVBQ25CLElBQXNCO0lBRXRCLElBQUksU0FBaUIsQ0FBQztJQUN0QixJQUFJLE9BQWUsQ0FBQztJQUNwQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFFaEIsSUFBTSxRQUFRLEdBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3hCLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0QjtTQUFNO1FBQ04sU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUNwQixPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3RCO0lBRUQsUUFBUSxTQUFTLEVBQUU7UUFDbEIsS0FBSyxJQUFJO1lBQ1IsUUFBUSxPQUFPLEVBQUU7Z0JBQ2hCLEtBQUssVUFBVSxDQUFDLENBQUMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLEtBQUssVUFBVSxDQUFDLENBQUMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLEtBQUssVUFBVSxDQUFDLENBQUMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0MsT0FBTyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQzthQUNwQjtZQUNELE1BQU07UUFDUCxPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0tBQ3BCO0lBRUQsSUFBSSxHQUFHLEVBQUU7UUFDUixJQUFNLGNBQWMsR0FBOEI7WUFDakQsVUFBVSxFQUFFLGdFQUFpQixFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxhQUFhLEVBQUU7WUFDcEUsUUFBUSxFQUFFLGdFQUFpQixFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxLQUFLLEVBQUU7WUFDMUQsVUFBVSxFQUFFLGdFQUFpQixFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxhQUFhLEVBQUU7U0FDcEUsQ0FBQztRQUNGLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyx5REFBZ0IsQ0FBQyxzQkFBc0IsRUFBRSxjQUFjLENBQUMsQ0FBQztLQUNwRjtBQUNGLENBQUMsQ0FBQztBQUVGLHNDQUFzQztBQUMvQixTQUFTLFNBQVMsQ0FBQyxNQUE2QjtJQUN0RCxPQUFPLFFBQVEsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELDZDQUE2QztBQUN0QyxTQUFTLGdCQUFnQixDQUFDLE1BQTZCO0lBQzdELE9BQU8sTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLGFBQWEsQ0FBQztBQUM5QixDQUFDO0FBRUQsMkNBQTJDO0FBQ3BDLFNBQVMsY0FBYyxDQUFDLE1BQTZCO0lBQzNELE9BQU8sd0ZBQUssQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsV0FBVyxDQUFDLENBQUMsRUFBRyxDQUFDO0FBQzdGLENBQUM7QUFFRCwwREFBMEQ7QUFDbkQsU0FBUyxtQkFBbUIsQ0FBQyxNQUE2QjtJQUNoRSxPQUFPLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxXQUFXLENBQUM7QUFDNUIsQ0FBQztBQWVEOzs7O0dBSUc7QUFDSSxTQUFTLGdCQUFnQixDQUFDLFVBQTRCOztJQUU1RCxJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLE9BQWUsQ0FBQztJQUNwQixJQUFJLEtBQWEsQ0FBQztJQUNsQixJQUFJLGNBQXNCLENBQUM7SUFDM0IsSUFBSSxjQUFzQixDQUFDO0lBQzNCLElBQUksY0FBc0IsQ0FBQztJQUMzQixJQUFJLFlBQW9CLENBQUM7SUFDekIsSUFBSSx3QkFBZ0MsQ0FBQztJQUNyQyxJQUFJLHdCQUFnQyxDQUFDO0lBQ3JDLElBQUkseUJBQXlCLEdBQTZDLEVBQUUsQ0FBQztJQUU3RSxnQkFBVSxDQUFDLFFBQVEsMENBQUUsT0FBTyxDQUFDLHFCQUFXO1FBRXZDLFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGdCQUFNO1lBRXpDLFFBQVEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFlBQVksRUFBRTtnQkFFN0I7b0JBRUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDM0IsY0FBYyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUUxQyxNQUFNO2dCQUNQO29CQUVDLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDMUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFFeEMsTUFBTTtnQkFFUDtvQkFFQyxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hDLE9BQU8sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRWpDLE1BQU07Z0JBRVA7b0JBQ0MsS0FBSyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFFL0IsTUFBTTtnQkFFUDtvQkFFQyx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDcEQsd0JBQXdCLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUVsRCxNQUFNO2dCQUVQLGlDQUE0QjtnQkFDNUI7b0JBRUMseUJBQXlCLENBQUMsSUFBSSxDQUM3Qjt3QkFDQyxRQUFRLEVBQUUsQ0FBQyxPQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsWUFBWSxpQ0FBMkIsQ0FBQyxDQUFDLENBQUMsNkJBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7d0JBQy9HLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7cUJBQ25DLENBQ0QsQ0FBQzthQUVIO1FBRUYsQ0FBQyxDQUFDLENBQUM7SUFFSixDQUFDLEVBQUU7SUFFSCxJQUFNLGFBQWEsR0FBbUI7UUFDckMsTUFBTTtRQUNOLGNBQWM7UUFDZCxLQUFLO1FBQ0wsT0FBTztRQUNQLFlBQVk7UUFDWixjQUFjO1FBQ2QsY0FBYztRQUNkLHdCQUF3QjtRQUN4Qix3QkFBd0I7UUFDeEIseUJBQXlCO0tBQ3pCLENBQUM7SUFFRixPQUFPLGFBQWEsQ0FBQztBQUN0QixDQUFDO0FBQUEsQ0FBQztBQUVGLFNBQVMsMEJBQTBCLENBQUMsV0FBd0IsRUFBRSxhQUE2QjtJQUUxRixJQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLHVCQUF1QixFQUFFLENBQVEsQ0FBQztJQUN0RixvQkFBb0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNuRCxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRTtRQUN4RyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNsRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsWUFBWSxFQUFFLENBQUM7S0FDcEQsQ0FBQyxDQUFDO0lBQ0gsV0FBVyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQzFFLE9BQU8sb0JBQW9CLENBQUM7QUFFN0IsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLGFBQTZCO0lBQ25ELElBQUksT0FBTyxHQUFHLGdFQUFpQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7SUFDbEYsSUFBSSxhQUFhLEdBQVMsRUFBRSxDQUFDO0lBRTdCLHFJQUFxSTtJQUNySSxJQUFNLFlBQVksR0FBaUM7UUFDbEQsY0FBYyxFQUFFLGFBQWEsQ0FBQyx5QkFBeUI7UUFDdkQsY0FBYyxFQUFFO1lBQ2YsaUJBQWlCLEVBQUUsZ0VBQXFCO1lBQ3hDLE1BQU0sRUFBRSxnRUFBaUIsRUFBRSxDQUFDLGtCQUFrQixFQUFFO1NBQ2hEO0tBQ0QsQ0FBQztJQUVGLElBQUksd0ZBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNuQixhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZCO1NBQU07UUFDTixJQUFJO1lBQ0gsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDeEM7UUFBQyxPQUFPLEVBQUUsRUFBRTtZQUNaLGlCQUFpQixDQUFDLHlEQUFnQixDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDN0QsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2QjtLQUNEO0lBRUQsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsV0FBd0IsRUFBRSxhQUE2QjtJQUNwRixXQUFXLENBQUMsaUJBQWlCLENBQUMsZ0VBQWlCLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDMUYsMEJBQTBCLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRXZELElBQUksYUFBYSxDQUFDLEtBQUssRUFBRTtRQUN4QixXQUFXLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUMxQztJQUNELElBQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRWhDLElBQU0sY0FBYyxHQUFHLGdFQUFpQixFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxDQUFDO0lBQ2xHLElBQUksY0FBYyxFQUFFO1FBQ25CLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztLQUNoRDtJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLFVBQVUsQ0FBQyxJQUFzQjs7SUFDekMsSUFBSTtRQUVILElBQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLFVBQU0sR0FBd0QsYUFBYSxPQUFyRSxFQUFFLE9BQU8sR0FBK0MsYUFBYSxRQUE1RCxFQUFFLGNBQWMsR0FBK0IsYUFBYSxlQUE1QyxFQUFFLHdCQUF3QixHQUFLLGFBQWEseUJBQWxCLENBQW1CO1FBRXBGLElBQUksNEJBQTRCLEdBQVksYUFBYSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sR0FBRyxnQ0FBZ0MsQ0FBQztRQUM5SCxJQUFNLDBCQUEwQixHQUFZLHVCQUF1QixDQUFDLGNBQWMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBQzlHLG1IQUFtSDtRQUNuSCxJQUFJLDBCQUEwQixFQUFFO1lBQy9CLE9BQU87U0FDUDtRQUVELGlDQUFpQztRQUNqQyxJQUFJLFdBQVcsR0FBZ0IsSUFBSSxnRUFBVyxDQUM3QyxnRUFBaUIsRUFBRSxDQUFDLG9CQUFvQixFQUFFLENBQUMsV0FBVyxFQUN0RCxvRkFBVyxDQUFDLElBQUksQ0FBQyxnRUFBaUIsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsRUFDMUUsZ0VBQWlCLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEtBQUssRUFDaEQsUUFBUSxFQUNSLGdFQUFpQixFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxnQkFBZ0IsRUFDM0QsZ0VBQWlCLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLGNBQWMsRUFDekQsZ0VBQWlCLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FDbkQsQ0FBQztRQUVGLGdFQUFpQixFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRixvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDakQsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRXJCLHFEQUFxRDtRQUNyRCxJQUFJLElBQUksQ0FBQyxTQUFTLHdEQUFvQztZQUNyRCxJQUFJLENBQUMsU0FBUyxzRUFBMkMsRUFBRTtZQUMzRCxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxDQUNILElBQUksQ0FBQyxTQUFTLHdEQUFvQyxXQUNsRCxJQUFJLENBQUMsU0FBUywwQ0FBRSxRQUFRLGdDQUFxQixDQUM3QyxJQUFJLENBQ0gsSUFBSSxDQUFDLFNBQVMsc0VBQTJDO1lBQ3pELENBQUMsNEJBQTRCLENBQzdCLEVBQ0E7WUFDRCxpQkFBaUIsQ0FBQyx5REFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQzFEO2FBQU07WUFDTix5REFBZ0IsQ0FBQywrQkFBK0IsQ0FBQyxJQUFJO2dCQUNwRCwrQkFBK0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ25ELGlCQUFpQixDQUFDLHlEQUFnQixDQUFDLCtCQUErQixDQUFDLENBQUM7U0FDcEU7S0FFRDtJQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ1osaUJBQWlCLENBQUMseURBQWdCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztLQUNoRTtBQUNGLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLGNBQXNCLEVBQUUsd0JBQWdDO0lBQ3hGLElBQUksdUJBQXVCLEdBQVksS0FBSyxDQUFDO0lBQzdDLElBQUksZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBQ3RDLElBQUksQ0FBQyx3RkFBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQzNCLHVCQUF1QixHQUFHLGVBQWUsQ0FBQyxjQUFjLHlCQUF1Qiw0QkFBNEIsQ0FBQyxDQUFDO1FBQzdHLGdCQUFnQixHQUFHLGNBQWMsS0FBSyw0REFBZSxDQUFDLEVBQUUsQ0FBQztLQUN6RDtJQUVELElBQUksQ0FBQyx3RkFBSyxDQUFDLHdCQUF3QixDQUFDLEVBQUU7UUFDckMsdUJBQXVCLEdBQUcsZUFBZSxDQUFDLHdCQUF3Qix5Q0FDaEMsc0NBQXNDLENBQUMsQ0FBQztRQUMxRSxnQkFBZ0IsR0FBRyx3QkFBd0IsS0FBSyw0REFBZSxDQUFDLEVBQUUsQ0FBQztLQUNuRTtJQUVELE9BQU8sdUJBQXVCLElBQUksZ0JBQWdCLENBQUM7QUFDcEQsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLGNBQXNCLEVBQUUsWUFBb0IsRUFBRSxvQkFBNkI7SUFFbkcsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1FBRTFCLElBQUksb0JBQW9CLFVBQUM7UUFDekIsSUFBSSxtQkFBbUIsVUFBQztRQUN4QixJQUFJLFlBQVksMEJBQXdCLEVBQUU7WUFDekMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDO1lBQ3BDLG9CQUFvQixHQUFHLHlEQUFnQixDQUFDLHdCQUF3QixDQUFDO1lBQ2pFLG1CQUFtQixHQUFHLHlEQUFnQixDQUFDLDJCQUEyQixDQUFDO1lBQ25FLElBQUksQ0FBQyxjQUFjLEtBQUssNERBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDN0MsaUJBQWlCLENBQUMseURBQWdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQzthQUN6RDtTQUNEO2FBQU07WUFDTixzQ0FBc0MsR0FBRyxJQUFJLENBQUM7WUFDOUMsb0JBQW9CLEdBQUcseURBQWdCLENBQUMsa0NBQWtDLENBQUM7WUFDM0UsbUJBQW1CLEdBQUcseURBQWdCLENBQUMscUNBQXFDLENBQUM7U0FDN0U7UUFFRCxpQkFBaUIsQ0FBQyxjQUFjLEtBQUssNERBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRXRHLE9BQU8sSUFBSSxDQUFDO0tBQ1o7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLFVBQVUsQ0FBQyxJQUFzQjs7SUFDekMsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ3ZCO1lBQ0MsSUFBSSx3RkFBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDM0IsaUJBQWlCLENBQUMseURBQWdCLENBQUMseUJBQXlCLENBQUMsQ0FBQzthQUM5RDtpQkFBTTtnQkFDTix5REFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xJLGlCQUFpQixDQUFDLHlEQUFnQixDQUFDLHlCQUF5QixDQUFDLENBQUM7YUFDOUQ7WUFDRCxNQUFNO1FBQ1A7WUFDQyxpQkFBaUIsQ0FBQyx5REFBZ0IsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQ3RFLE1BQU07UUFDUDtZQUNDLGlCQUFpQixDQUFDLHlEQUFnQixDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDaEUsTUFBTTtRQUNQO1lBQ0MsaUJBQWlCLENBQUMseURBQWdCLENBQUMscUNBQXFDLENBQUMsQ0FBQztZQUMxRSxNQUFNO1FBQ1A7WUFDQyxpQkFBaUIsQ0FBQyx5REFBZ0IsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1lBQ25FLE1BQU07UUFDUDtZQUNDLGlCQUFpQixDQUFDLHlEQUFnQixDQUFDLG9DQUFvQyxDQUFDLENBQUM7WUFDekUsTUFBTTtRQUNQO1lBQ0MsSUFBSSx3RkFBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDM0IsaUJBQWlCLENBQUMseURBQWdCLENBQUMseUJBQXlCLENBQUMsQ0FBQzthQUM5RDtpQkFBTTtnQkFDTix5REFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLFVBQUcsSUFBSSxDQUFDLFVBQVUsMENBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQyxDQUFDO2dCQUNuSSxpQkFBaUIsQ0FBQyx5REFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsTUFBTTtRQUNQO1lBQ0MsaUJBQWlCLENBQUMseURBQWdCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUNsRSxNQUFNO0tBQ1A7SUFFRCxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBUyxVQUFVLENBQUMsSUFBc0I7SUFDekMsSUFBSSxPQUFPLEdBQWEseURBQWdCLENBQUMsb0JBQW9CLENBQUM7SUFFOUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7UUFDN0IsT0FBTyxHQUFHLHlEQUFnQixDQUFDLHFDQUFxQyxDQUFDO0tBQ2pFO1NBQU0sSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7UUFDckMsT0FBTyxHQUFHLHlEQUFnQixDQUFDLHNCQUFzQixDQUFDO0tBQ2xEO0lBRUQsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsaUJBQWlCLENBQUMsSUFBc0I7O0lBQ2hELElBQU0sYUFBYSxHQUFHLGdFQUFpQixFQUFFLENBQUM7SUFDMUMsSUFBTSxjQUFjLEdBQThCO1FBQ2pELFVBQVUsRUFBRSxhQUFhLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxhQUFhLEVBQUU7UUFDOUQsUUFBUSxFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEtBQUssRUFBRTtRQUNwRCxVQUFVLEVBQUUsYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUMsYUFBYSxFQUFFO1FBQzlELFlBQVksRUFBRSxXQUFJLENBQUMsZ0JBQWdCLDBDQUFFLFlBQVksRUFBQyxDQUFDLE9BQUMsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDOUYsT0FBTyxFQUFFLFdBQUksQ0FBQyxnQkFBZ0IsMENBQUUsT0FBTyxFQUFDLENBQUMsT0FBQyxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSTtLQUMvRSxDQUFDO0lBRUYsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsa0RBQWtEO0FBQ2xELFNBQVMsaUJBQWlCLENBQUMsT0FBeUIsRUFBRSxnQkFBNEM7SUFDakcsSUFBTSxhQUFhLEdBQUcsZ0VBQWlCLEVBQUUsQ0FBQztJQUMxQyxJQUFJLGNBQXlDLENBQUM7SUFDOUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1FBQ3RCLGNBQWMsR0FBRztZQUNoQixVQUFVLEVBQUUsYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUMsYUFBYSxFQUFFO1lBQzlELFFBQVEsRUFBRSxhQUFhLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxLQUFLLEVBQUU7WUFDcEQsVUFBVSxFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLGFBQWEsRUFBRTtZQUM5RCxnQkFBZ0IsRUFBRSxnRUFBaUIsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsK0JBQStCLEVBQUU7WUFDNUYsUUFBUSxFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLGlCQUFpQixFQUFFO1NBQ2hFLENBQUM7S0FDRjtTQUFNO1FBQ04sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0tBQ2xDO0lBRUQsMERBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQzNCLE9BQU8sb0JBRVAsY0FBYyxDQUNkLENBQUM7QUFDSCxDQUFDO0FBRUQsSUFBTSxRQUFRLEdBQUc7SUFDaEIsaUJBQWlCO0NBQ2pCLENBQUM7QUFFYSxJQUFVLGVBQWUsR0FBSyxFQUFFLFFBQVEsWUFBRSxTQUFqQixDQUFrQiIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL1VJL1RvYXN0L0NWVG9hc3QudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRHMsIFByb21wdENvbnN0YW50cyB9IGZyb20gXCIuLy4uL1VpQ29uc3RhbnRzXCI7XHJcbmltcG9ydCAqIGFzIENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vLi4vLi4vQ29uZmlndXJhdGlvbi9Db25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7XHJcblx0cmVuZGVyQ1ZTdXJ2ZXksIFBhZ2VUeXBlLFxyXG5cdElTdXJ2ZXlQYXlsb2FkQWRkaXRpb25hbEluZm8sIEV2ZW50VHlwZSxcclxuXHRRdWVzdGlvblR5cGUsIElTdXJ2ZXlRdWVzdGlvbkFuc3dlciwgSUV2ZW50SWQsXHJcbn0gZnJvbSBcImdhdGVjcmFzaFwiO1xyXG5pbXBvcnQgKiBhcyBBcGkgZnJvbSBcIkBtcy1vZmIvb2ZmaWNlZmxvb2RnYXRlY29yZS9kaXN0L3NyYy9BcGkvQXBpXCI7XHJcbmltcG9ydCB7IFRyYW5zcG9ydGVyIH0gZnJvbSBcIi4vLi4vLi4vVHJhbnNwb3J0L1RyYW5zcG9ydFwiO1xyXG5pbXBvcnQgKiBhcyBMb2dnaW5nIGZyb20gXCIuLy4uLy4uL0xvZ2dpbmcvTG9nZ2luZ1wiO1xyXG5pbXBvcnQgeyBpc05PVSB9IGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvVXRpbHNcIjtcclxuaW1wb3J0IHsgY3VzdG9tZXJWb2ljZVN1cnZleVVYIH0gZnJvbSBcIi4uLy4uL0NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBJT25EaXNtaXNzRGVsZWdhdGUgfSBmcm9tIFwiLi4vLi4vSU9uRGlzbWlzc0RlbGVnYXRlXCI7XHJcbmltcG9ydCB7IElDb250ZXh0UGFyYW1zLCBJU3VydmV5T3B0aW9uYWxDb25maWdQYXJhbXMgfSBmcm9tIFwiLi4vLi4vSVJlbmRlclN1cnZleVwiO1xyXG5pbXBvcnQgeyBJSGFuZGxlU3VydmV5RXZlbnQsIElTdXJ2ZXlFdmVudERhdGEsIFN1cnZleUV2ZW50S2V5IH0gZnJvbSBcIi4uLy4uL0lIYW5kbGVTdXJ2ZXlFdmVudFwiO1xyXG5pbXBvcnQgeyBJT3ZlcnJpZGVSZW5kZXJDYWxsYmFjayB9IGZyb20gXCIuLi8uLi9JT3ZlcnJpZGVSZW5kZXJDYWxsYmFja1wiO1xyXG5cclxuLyoqXHJcbiAqIENhbGxiYWNrIHdoZW4gdGhlIENWIFN1cnZleSBkaWFsb2cgaXMgZGlzbWlzc2VkXHJcbiAqL1xyXG5sZXQgb25EaXNtaXNzOiBJT25EaXNtaXNzRGVsZWdhdGU7XHJcbmxldCBvbkRpc21pc3NGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbmxldCBpc1Byb21wdFJlc3BvbnNlTG9nVmFsaWRhdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbmxldCBpc0FkZGl0aW9uYWxQcm9tcHRSZXNwb25zZUxvZ1ZhbGlkYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5jb25zdCBNaW5pbXVtSW5zaWdodGZ1bFF1ZXN0aW9uQW5zd2VycyA9IDE7XHJcbmNvbnN0IFN1cnZleVVJRm9ybVNlY29uZGFyeVN1Ym1pdE5hbWUgPSBcIlN1cnZleV9VSV9Gb3JtX1NlY29uZGFyeV9TdWJtaXRfUGFnZV9OdW1iZXJfXCI7XHJcbmNvbnN0IFN1cnZleVVJRm9ybVVzZXJDbG9zZWROYW1lID0gXCJTdXJ2ZXlfVUlfRm9ybV9Vc2VyQ2xvc2VkX1BhZ2VfTnVtYmVyX1wiO1xyXG5cclxuLyoqXHJcbiAqIEZ1bmN0aW9uIHRvIHNob3cgQ3VzdG9tZXIgVm9pY2Ugc3VydmV5IGV4cGVyaWVuY2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDVlN1cnZleShcclxuXHRjb250ZXh0UGFyYW1zOiBJQ29udGV4dFBhcmFtcyxcclxuXHRvbkNsb3NlOiAoKSA9PiB2b2lkLFxyXG5cdGN2U3VydmV5T3B0aW9uYWxDb25maWdQYXJhbXM/OiBJU3VydmV5T3B0aW9uYWxDb25maWdQYXJhbXMsXHJcblx0b3ZlcnJpZGVVWFJlbmRlckNhbGxiYWNrQXN5bmM/OiBJT3ZlcnJpZGVSZW5kZXJDYWxsYmFjayxcclxuKTogdm9pZCB7XHJcblx0b25EaXNtaXNzID0gZnVuY3Rpb24gKHN1Ym1pdHRlZDogYm9vbGVhbikge1xyXG5cdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVJbml0T3B0aW9ucygpLm9uRGlzbWlzcyhcclxuXHRcdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRDYW1wYWlnbklkKCksXHJcblx0XHRcdHN1Ym1pdHRlZFxyXG5cdFx0KTtcclxuXHRcdG9uQ2xvc2UoKTtcclxuXHR9O1xyXG5cclxuXHRpZiAob3ZlcnJpZGVVWFJlbmRlckNhbGxiYWNrQXN5bmMpIHtcclxuXHRcdGNvbnN0IGxvZ0N1c3RvbVByb3BzOiBMb2dnaW5nLklDdXN0b21Qcm9wZXJ0aWVzID0ge1xyXG5cdFx0XHRDYW1wYWlnbklkOiBDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldENhbXBhaWduSWQoKSxcclxuXHRcdFx0U3VydmV5SWQ6IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0SWQoKSxcclxuXHRcdFx0U3VydmV5VHlwZTogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRTdXJ2ZXlUeXBlKCksXHJcblx0XHR9O1xyXG5cclxuXHRcdG92ZXJyaWRlVVhSZW5kZXJDYWxsYmFja0FzeW5jKGNvbnRleHRQYXJhbXMpXHJcblx0XHRcdC50aGVuKCgpID0+IHtcclxuXHRcdFx0XHRpbnRlcm5hbC5sb2dUZWxlbWV0cnlFdmVudChMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9SRU5ERVJfT1ZFUlJJREVfU1VDQ0VTUywgbG9nQ3VzdG9tUHJvcHMpO1xyXG5cdFx0XHR9KS5jYXRjaCgoZXgpID0+IHtcclxuXHRcdFx0XHRsb2dDdXN0b21Qcm9wcy5FcnJvck1lc3NhZ2UgPSBleDtcclxuXHRcdFx0XHRpbnRlcm5hbC5sb2dUZWxlbWV0cnlFdmVudChMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9SRU5ERVJfT1ZFUlJJREVfRVJST1IsIGxvZ0N1c3RvbVByb3BzKTtcclxuXHRcdFx0fSk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJlbmRlckNWU3VydmV5KFxyXG5cdFx0XHRJRHMuVG9hc3RDb250YWluZXIsXHJcblx0XHRcdGhhbmRsZVN1cnZleUV2ZW50LFxyXG5cdFx0XHRjb250ZXh0UGFyYW1zLFxyXG5cdFx0XHRjdlN1cnZleU9wdGlvbmFsQ29uZmlnUGFyYW1zXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBkZWZhdWx0IGhhbmRsZXIgb2YgZXZlbnRzIGVtaXR0ZWQgYnkgY3VzdG9tIHN1cnZleSB0b29scy5cclxuICogQHBhcmFtIGtleSBhbiBpZGVudGlmaWVyIGZvciB0aGUgZXZlbnRcclxuICogQHBhcmFtIGRhdGEgYWxsIGRhdGEgbmVlZGVkIHRvIHByb2Nlc3MgdGhlIGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaGFuZGxlU3VydmV5RXZlbnQ6IElIYW5kbGVTdXJ2ZXlFdmVudCA9IChcclxuXHRrZXk6IFN1cnZleUV2ZW50S2V5LFxyXG5cdGRhdGE6IElTdXJ2ZXlFdmVudERhdGEsXHJcbik6IHZvaWQgPT4ge1xyXG5cdGxldCBrZXlQcmVmaXg6IHN0cmluZztcclxuXHRsZXQga2V5QmFzZTogc3RyaW5nO1xyXG5cdGxldCBlcnIgPSBmYWxzZTtcclxuXHJcblx0Y29uc3Qgc3BsaXRLZXk6IHN0cmluZ1tdID0ga2V5LnNwbGl0KFwiX1wiKTtcclxuXHRpZiAoc3BsaXRLZXkubGVuZ3RoID4gMSkge1xyXG5cdFx0a2V5UHJlZml4ID0gc3BsaXRLZXlbMF07XHJcblx0XHRrZXlCYXNlID0gc3BsaXRLZXlbMV07XHJcblx0fSBlbHNlIHtcclxuXHRcdGtleVByZWZpeCA9IFwiT3RoZXJcIjtcclxuXHRcdGtleUJhc2UgPSBzcGxpdEtleVswXTtcclxuXHR9XHJcblxyXG5cdHN3aXRjaCAoa2V5UHJlZml4KSB7XHJcblx0XHRjYXNlIFwiQ1ZcIjpcclxuXHRcdFx0c3dpdGNoIChrZXlCYXNlKSB7XHJcblx0XHRcdFx0Y2FzZSBcIk9uU3VibWl0XCI6IHJldHVybiBvbkNWU3VibWl0KGRhdGEpO1xyXG5cdFx0XHRcdGNhc2UgXCJPbkNhbmNlbFwiOiByZXR1cm4gb25DVkNhbmNlbChkYXRhKTtcclxuXHRcdFx0XHRjYXNlIFwiT25Mb2FkZWRcIjogcmV0dXJuIG9uQ1ZMb2FkZWQoZGF0YSk7XHJcblx0XHRcdFx0Y2FzZSBcIk9uTG9nXCI6IHJldHVybiBsb2dHYXRlY3Jhc2hFdmVudChkYXRhKTtcclxuXHRcdFx0XHRkZWZhdWx0OiBlcnIgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0ZGVmYXVsdDogZXJyID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGlmIChlcnIpIHtcclxuXHRcdGNvbnN0IGxvZ0N1c3RvbVByb3BzOiBMb2dnaW5nLklDdXN0b21Qcm9wZXJ0aWVzID0ge1xyXG5cdFx0XHRDYW1wYWlnbklkOiBDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldENhbXBhaWduSWQoKSxcclxuXHRcdFx0U3VydmV5SWQ6IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0SWQoKSxcclxuXHRcdFx0U3VydmV5VHlwZTogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRTdXJ2ZXlUeXBlKCksXHJcblx0XHR9O1xyXG5cdFx0aW50ZXJuYWwubG9nVGVsZW1ldHJ5RXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfRVZFTlRfS0VZX0VSUk9SLCBsb2dDdXN0b21Qcm9wcyk7XHJcblx0fVxyXG59O1xyXG5cclxuLy8gU2V0dGluZyBSYXRpbmcgZmllbGQgZm9yIFN1Ym1pdERhdGFcclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhdGluZyh2YWx1ZXM6IElTdXJ2ZXlRdWVzdGlvbkFuc3dlcik6IG51bWJlciB7XHJcblx0cmV0dXJuIHBhcnNlSW50KHZhbHVlcz8uYW5zd2VyVmFsdWVbMF0sIDEwKSAtIDE7XHJcbn1cclxuXHJcbi8vIFNldHRpbmcgUXVlc3Rpb25WYWx1ZSBmaWVsZCBmb3IgU3VibWl0RGF0YVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVlc3Rpb25WYWx1ZSh2YWx1ZXM6IElTdXJ2ZXlRdWVzdGlvbkFuc3dlcik6IHN0cmluZyB7XHJcblx0cmV0dXJuIHZhbHVlcz8ucXVlc3Rpb25WYWx1ZTtcclxufVxyXG5cclxuLy8gU2V0dGluZyBBbnN3ZXJWYWx1ZSBmaWVsZCBmb3IgU3VibWl0RGF0YVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5zd2VyVmFsdWUodmFsdWVzOiBJU3VydmV5UXVlc3Rpb25BbnN3ZXIpOiBzdHJpbmcge1xyXG5cdHJldHVybiBpc05PVSh2YWx1ZXM/LmFuc3dlclZhbHVlWzBdKSA/IHZhbHVlcz8uYW5zd2VyVmFsdWVbMF0gOiBgJHt2YWx1ZXM/LmFuc3dlclZhbHVlWzBdfWA7XHJcbn1cclxuXHJcbi8vIFNldHRpbmcgQW5zd2VyVmFsdWUgZm9yIGluc2lnaHRmdWwgZmllbGQgZm9yIFN1Ym1pdERhdGFcclxuZXhwb3J0IGZ1bmN0aW9uIGdldEluc2lnaHRmdWxBbnN3ZXIodmFsdWVzOiBJU3VydmV5UXVlc3Rpb25BbnN3ZXIpOiBzdHJpbmdbXSB7IC8vIEV2YWx1YXRlXHJcblx0cmV0dXJuIHZhbHVlcz8uYW5zd2VyVmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1hdHRlZERhdGEge1xyXG5cdHJhdGluZzogbnVtYmVyO1xyXG5cdGNvbW1lbnQ/OiBzdHJpbmc7XHJcblx0ZW1haWw/OiBzdHJpbmc7XHJcblx0cmF0aW5nUXVlc3Rpb24/OiBzdHJpbmc7XHJcblx0cHJvbXB0UXVlc3Rpb24/OiBzdHJpbmc7XHJcblx0cHJvbXB0UmVzcG9uc2U/OiBzdHJpbmc7XHJcblx0Y29tbWVudFRpdGxlPzogc3RyaW5nO1xyXG5cdGFkZGl0aW9uYWxQcm9tcHRRdWVzdGlvbj86IHN0cmluZztcclxuXHRhZGRpdGlvbmFsUHJvbXB0UmVzcG9uc2U/OiBzdHJpbmc7XHJcblx0aW5zaWdodGZ1bFF1ZXN0aW9uQW5zd2Vycz86IHsgcXVlc3Rpb246IHN0cmluZywgYW5zd2VyOiBzdHJpbmdbXSB9W107XHJcbn1cclxuXHJcbi8qIFRyYXZlcnNlcyB0aGUgQ1YgU3VydmV5IHJlc3BvbnNlIG9iamVjdCBhcnJheSBhbmQgY3JlYXRlcyBwcm9wcyBmb3IgT0NWIFBheWxvYWQ7IFxyXG4gKiBvbiB0aGUgZmFjZSBvZiBpdCB0aG91Z2ggaXQgaXMgTyhOXjIpIHJ1bnRpbWUgY29tcGxleGl0eSwgXHJcbiAqIGdpdmVuIHRoZSBudW1iZXIgb2YgcGFnZXMgYXJlIG9ubHkgaW4gZmluaXRlIG51bWJlciBcclxuICogKHdvdWxkbid0IGV4cGVjdCBtb3JlIHRoYW4gMTAgcGFnZXMgYXQgbW9zdCksIHRoaXMgc2hvdWxkIHN0aWxsIHJ1biBpbiBjb25zdGFudCB0aW1lLiBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTdWJtaXREYXRhKHN1Ym1pdERhdGE6IElTdXJ2ZXlFdmVudERhdGEpOiBJRm9ybWF0dGVkRGF0YSB7XHJcblxyXG5cdGxldCByYXRpbmc6IG51bWJlcjtcclxuXHRsZXQgY29tbWVudDogc3RyaW5nO1xyXG5cdGxldCBlbWFpbDogc3RyaW5nO1xyXG5cdGxldCByYXRpbmdRdWVzdGlvbjogc3RyaW5nO1xyXG5cdGxldCBwcm9tcHRRdWVzdGlvbjogc3RyaW5nO1xyXG5cdGxldCBwcm9tcHRSZXNwb25zZTogc3RyaW5nO1xyXG5cdGxldCBjb21tZW50VGl0bGU6IHN0cmluZztcclxuXHRsZXQgYWRkaXRpb25hbFByb21wdFF1ZXN0aW9uOiBzdHJpbmc7XHJcblx0bGV0IGFkZGl0aW9uYWxQcm9tcHRSZXNwb25zZTogc3RyaW5nO1xyXG5cdGxldCBpbnNpZ2h0ZnVsUXVlc3Rpb25BbnN3ZXJzOiB7IHF1ZXN0aW9uOiBzdHJpbmcsIGFuc3dlcjogc3RyaW5nW10gfVtdID0gW107XHJcblxyXG5cdHN1Ym1pdERhdGEucGFnZUluZm8/LmZvckVhY2goY3VycmVudFBhZ2UgPT4ge1xyXG5cclxuXHRcdGN1cnJlbnRQYWdlLnF1ZXN0aW9uQW5zd2Vycy5mb3JFYWNoKHZhbHVlcyA9PiB7XHJcblxyXG5cdFx0XHRzd2l0Y2ggKHZhbHVlcz8ucXVlc3Rpb25UeXBlKSB7XHJcblxyXG5cdFx0XHRcdGNhc2UgUXVlc3Rpb25UeXBlLlJhdGluZzpcclxuXHJcblx0XHRcdFx0XHRyYXRpbmcgPSBnZXRSYXRpbmcodmFsdWVzKTtcclxuXHRcdFx0XHRcdHJhdGluZ1F1ZXN0aW9uID0gZ2V0UXVlc3Rpb25WYWx1ZSh2YWx1ZXMpO1xyXG5cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgUXVlc3Rpb25UeXBlLlByb21wdDpcclxuXHJcblx0XHRcdFx0XHRwcm9tcHRRdWVzdGlvbiA9IGdldFF1ZXN0aW9uVmFsdWUodmFsdWVzKTtcclxuXHRcdFx0XHRcdHByb21wdFJlc3BvbnNlID0gZ2V0QW5zd2VyVmFsdWUodmFsdWVzKTtcclxuXHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0Y2FzZSBRdWVzdGlvblR5cGUuVmVyYmF0aW06XHJcblxyXG5cdFx0XHRcdFx0Y29tbWVudFRpdGxlID0gZ2V0UXVlc3Rpb25WYWx1ZSh2YWx1ZXMpO1xyXG5cdFx0XHRcdFx0Y29tbWVudCA9IGdldEFuc3dlclZhbHVlKHZhbHVlcyk7XHJcblxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRcdGNhc2UgUXVlc3Rpb25UeXBlLkVtYWlsOlxyXG5cdFx0XHRcdFx0ZW1haWwgPSBnZXRBbnN3ZXJWYWx1ZSh2YWx1ZXMpO1xyXG5cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0XHRjYXNlIFF1ZXN0aW9uVHlwZS5BZGRpdGlvbmFsUXVlc3Rpb246XHJcblxyXG5cdFx0XHRcdFx0YWRkaXRpb25hbFByb21wdFF1ZXN0aW9uID0gZ2V0UXVlc3Rpb25WYWx1ZSh2YWx1ZXMpO1xyXG5cdFx0XHRcdFx0YWRkaXRpb25hbFByb21wdFJlc3BvbnNlID0gZ2V0QW5zd2VyVmFsdWUodmFsdWVzKTtcclxuXHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0Y2FzZSBRdWVzdGlvblR5cGUuQ29udGFjdE1lOlxyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblxyXG5cdFx0XHRcdFx0aW5zaWdodGZ1bFF1ZXN0aW9uQW5zd2Vycy5wdXNoKFxyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0cXVlc3Rpb246ICh2YWx1ZXM/LnF1ZXN0aW9uVHlwZSA9PT0gUXVlc3Rpb25UeXBlLkNvbnRhY3RNZSkgPyBRdWVzdGlvblR5cGUuQ29udGFjdE1lIDogZ2V0UXVlc3Rpb25WYWx1ZSh2YWx1ZXMpLFxyXG5cdFx0XHRcdFx0XHRcdGFuc3dlcjogZ2V0SW5zaWdodGZ1bEFuc3dlcih2YWx1ZXMpLFxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0fVxyXG5cclxuXHRcdH0pO1xyXG5cclxuXHR9KTtcclxuXHJcblx0Y29uc3QgZm9ybWF0dGVkRGF0YTogSUZvcm1hdHRlZERhdGEgPSB7XHJcblx0XHRyYXRpbmcsXHJcblx0XHRyYXRpbmdRdWVzdGlvbixcclxuXHRcdGVtYWlsLFxyXG5cdFx0Y29tbWVudCxcclxuXHRcdGNvbW1lbnRUaXRsZSxcclxuXHRcdHByb21wdFF1ZXN0aW9uLFxyXG5cdFx0cHJvbXB0UmVzcG9uc2UsXHJcblx0XHRhZGRpdGlvbmFsUHJvbXB0UXVlc3Rpb24sXHJcblx0XHRhZGRpdGlvbmFsUHJvbXB0UmVzcG9uc2UsXHJcblx0XHRpbnNpZ2h0ZnVsUXVlc3Rpb25BbnN3ZXJzLFxyXG5cdH07XHJcblxyXG5cdHJldHVybiBmb3JtYXR0ZWREYXRhO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gdXBkYXRlRXh0ZW5kZWRNYW5pZmVzdERhdGEodHJhbnNwb3J0ZXI6IFRyYW5zcG9ydGVyLCBmb3JtYXR0ZWREYXRhOiBJRm9ybWF0dGVkRGF0YSk6IHN0cmluZyB7XHJcblxyXG5cdGNvbnN0IGV4dGVuZGVkTWFuaWZlc3REYXRhID0gSlNPTi5wYXJzZSh0cmFuc3BvcnRlci5nZXRFeHRlbmRlZE1hbmlmZXN0RGF0YSgpKSBhcyBhbnk7XHJcblx0ZXh0ZW5kZWRNYW5pZmVzdERhdGEuc3VydmV5U3RyaW5ncyA9IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdHByb21wdDogeyB0aXRsZTogXCJcIiwgcXVlc3Rpb246IGZvcm1hdHRlZERhdGE/LnByb21wdFF1ZXN0aW9uLCB5ZXNCdXR0b25UZXh0OiBcIllFU1wiLCBub0J1dHRvblRleHQ6IFwiTk9cIiB9LFxyXG5cdFx0cmF0aW5nOiBbeyBxdWVzdGlvbjogZm9ybWF0dGVkRGF0YT8ucmF0aW5nUXVlc3Rpb24sIG9wdGlvbnM6IFtdIH1dLFxyXG5cdFx0Y29tbWVudDogW3sgcXVlc3Rpb246IGZvcm1hdHRlZERhdGE/LmNvbW1lbnRUaXRsZSB9XSxcclxuXHR9KTtcclxuXHR0cmFuc3BvcnRlci5zZXRFeHRlbmRlZE1hbmlmZXN0RGF0YShKU09OLnN0cmluZ2lmeShleHRlbmRlZE1hbmlmZXN0RGF0YSkpO1xyXG5cdHJldHVybiBleHRlbmRlZE1hbmlmZXN0RGF0YTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZUFwcERhdGEoZm9ybWF0dGVkRGF0YTogSUZvcm1hdHRlZERhdGEpOiBzdHJpbmcge1xyXG5cdGxldCBhcHBEYXRhID0gQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLmFwcGxpY2F0aW9uR3JvdXAuYXBwRGF0YTtcclxuXHRsZXQgYXBwRGF0YVZhbHVlczoge31bXSA9IFtdO1xyXG5cclxuXHQvLyBUbyBkaWZmZXJlbnRpYXRlIENWIHN1cnZleSByZXNwb25zZXMgZnJvbSBvdGhlciBzdXJ2ZXlzIGdpdmVuIHRoZSBmbGlnaHQgb2JqZWN0IGluIE9DViBnZXRzIHRyaW1tZWQsIHRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBub3cuXHJcblx0Y29uc3QgY3ZTdXJ2ZXlJbmZvOiBJU3VydmV5UGF5bG9hZEFkZGl0aW9uYWxJbmZvID0ge1xyXG5cdFx0aW5zaWdodGZ1bEluZm86IGZvcm1hdHRlZERhdGEuaW5zaWdodGZ1bFF1ZXN0aW9uQW5zd2VycyxcclxuXHRcdGFkZGl0aW9uYWxJbmZvOiB7XHJcblx0XHRcdFN1cnZleURlc2NyaXB0aW9uOiBjdXN0b21lclZvaWNlU3VydmV5VVgsXHJcblx0XHRcdEZsaWdodDogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDVlN1cnZleUZsaWdodHMoKSxcclxuXHRcdH0sXHJcblx0fTtcclxuXHJcblx0aWYgKGlzTk9VKGFwcERhdGEpKSB7XHJcblx0XHRhcHBEYXRhVmFsdWVzLnB1c2goe30pO1xyXG5cdH0gZWxzZSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRhcHBEYXRhVmFsdWVzLnB1c2goSlNPTi5wYXJzZShhcHBEYXRhKSk7XHJcblx0XHR9IGNhdGNoIChleCkge1xyXG5cdFx0XHRsb2dUZWxlbWV0cnlFdmVudChMb2dnaW5nLkV2ZW50SWRzLkFQUERBVEFfSlNPTl9QQVJTRV9FUlJPUik7XHJcblx0XHRcdGFwcERhdGFWYWx1ZXMucHVzaCh7fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhcHBEYXRhVmFsdWVzLnB1c2goY3ZTdXJ2ZXlJbmZvKTtcclxuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXBwRGF0YVZhbHVlcyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldFRyYW5zcG9ydGVyVmFsdWVzKHRyYW5zcG9ydGVyOiBUcmFuc3BvcnRlciwgZm9ybWF0dGVkRGF0YTogSUZvcm1hdHRlZERhdGEpOiBUcmFuc3BvcnRlciB7XHJcblx0dHJhbnNwb3J0ZXIuc2V0TWFuaWZlc3RWYWx1ZXMoQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRKc29uRWxlbWVudHMoKSk7XHJcblx0dXBkYXRlRXh0ZW5kZWRNYW5pZmVzdERhdGEodHJhbnNwb3J0ZXIsIGZvcm1hdHRlZERhdGEpO1xyXG5cclxuXHRpZiAoZm9ybWF0dGVkRGF0YS5lbWFpbCkge1xyXG5cdFx0dHJhbnNwb3J0ZXIuc2V0RW1haWwoZm9ybWF0dGVkRGF0YS5lbWFpbCk7XHJcblx0fVxyXG5cdGNvbnN0IGFwcERhdGEgPSB1cGRhdGVBcHBEYXRhKGZvcm1hdHRlZERhdGEpO1xyXG5cdHRyYW5zcG9ydGVyLnNldEFwcERhdGEoYXBwRGF0YSk7XHJcblxyXG5cdGNvbnN0IHByZUdlbmVyYXRlZElkID0gQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRQcmVHZW5lcmF0ZWRDbGllbnRGZWVkYmFja0lkKCk7XHJcblx0aWYgKHByZUdlbmVyYXRlZElkKSB7XHJcblx0XHR0cmFuc3BvcnRlci5zZXRDbGllbnRGZWVkYmFja0lkKHByZUdlbmVyYXRlZElkKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB0cmFuc3BvcnRlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENhbGwtYmFjayBmdW5jdGlvbiB3aGVuIHVzZXIgc2VuZHMgZmVlZGJhY2sgZnJvbSBDdXN0b21lciBWb2ljZSBzdXJ2ZXkgZXhwZXJpZW5jZS5cclxuICogXHJcbiAqIElNUE9SVEFOVDogVGhpcyBjYWxsYmFjayBzaG91bGQgY29udGFpbiBubyByZWZlcmVuY2VzIHRvIGFueSBzdXJ2ZXkgVUlcclxuICogbm9yIERPTSBlbGVtZW50cy4gVGhpcyByZXN0cmljdGlvbiBzdXBwb3J0cyBtdWx0aS13aW5kb3cgZW52aXJvbm1lbnRzXHJcbiAqIHdoZXJlIHJlbmRlcmluZyBpcyBoYXBwZW5pbmcgaW4gYSBkaWZmZXJlbnQgY29udGV4dCB0aGFuIHRoZXNlIGNhbGxiYWNrcy5cclxuICpcclxuICogVmlldyB0aGUgZGVzaWduIGRvY3VtZW50IGV4cGxhaW5pbmcgbXVsdGktd2luZG93IHN1cHBvcnQgY2hhbmdlcyBoZXJlOlxyXG4gKiBodHRwczovL21pY3Jvc29mdC1teS5zaGFyZXBvaW50LmNvbS86dzovcC9qb3NoZHVubmluZy9FV2doVV9mTmNycEFzZU9lbUdxT08yUUJCTmFSel93WkR5RUwwWmV3dVh3S3R3P2U9Z2k3UDFhXHJcbiAqL1xyXG5mdW5jdGlvbiBvbkNWU3VibWl0KGRhdGE6IElTdXJ2ZXlFdmVudERhdGEpOiB2b2lkIHtcclxuXHR0cnkge1xyXG5cclxuXHRcdGNvbnN0IGZvcm1hdHRlZERhdGEgPSBmb3JtYXRTdWJtaXREYXRhKGRhdGEpO1xyXG5cdFx0Y29uc3QgeyByYXRpbmcsIGNvbW1lbnQsIHByb21wdFJlc3BvbnNlLCBhZGRpdGlvbmFsUHJvbXB0UmVzcG9uc2UgfSA9IGZvcm1hdHRlZERhdGE7XHJcblxyXG5cdFx0bGV0IHN1cnZleUNvbnRhaW5zSW5zaWdodGZ1bEluZm86IGJvb2xlYW4gPSBmb3JtYXR0ZWREYXRhLmluc2lnaHRmdWxRdWVzdGlvbkFuc3dlcnMubGVuZ3RoID4gTWluaW11bUluc2lnaHRmdWxRdWVzdGlvbkFuc3dlcnM7XHJcblx0XHRjb25zdCBpc1Byb21wdEFuc3dlckxvZ01hbmRhdG9yeTogYm9vbGVhbiA9IHZhbGlkYXRlTG9nUHJvbXB0QW5zd2VyKHByb21wdFJlc3BvbnNlLCBhZGRpdGlvbmFsUHJvbXB0UmVzcG9uc2UpO1xyXG5cdFx0Ly8gb25DVlN1Ym1pdCBpcyBjYWxsZWQgdHdpY2Ugd2hlbiB0aGUgdXNlciBjbGlja3MgTm90Tm93IGFuIElDTSB3YXMgY3JlYXRlZCBmb3IgdGhlIENWIHRlYW0gdG8gYXZvaWQgdGhpcyBiZWhhdmlvclxyXG5cdFx0aWYgKGlzUHJvbXB0QW5zd2VyTG9nTWFuZGF0b3J5KSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBjbGllbnRmZWVkYmFjayBpZCB0byBvdmVyd3JpdGVcclxuXHRcdGxldCB0cmFuc3BvcnRlcjogVHJhbnNwb3J0ZXIgPSBuZXcgVHJhbnNwb3J0ZXIoXHJcblx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5lbnZpcm9ubWVudCxcclxuXHRcdFx0QXBpLklTdXJ2ZXkuVHlwZVtDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldFN1cnZleVR5cGUoKV0sXHJcblx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5hcHBJZCxcclxuXHRcdFx0XCJTdXJ2ZXlcIixcclxuXHRcdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLmFwcGxpY2F0aW9uR3JvdXAsXHJcblx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS50ZWxlbWV0cnlHcm91cCxcclxuXHRcdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLndlYkdyb3VwLFxyXG5cdFx0KTtcclxuXHJcblx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLnNldFZhbHVlcyhOdW1iZXIocmF0aW5nKSwgY29tbWVudCA/IGNvbW1lbnQgOiBcIlwiKTtcclxuXHRcdHNldFRyYW5zcG9ydGVyVmFsdWVzKHRyYW5zcG9ydGVyLCBmb3JtYXR0ZWREYXRhKTtcclxuXHRcdHRyYW5zcG9ydGVyLnN1Ym1pdCgpO1xyXG5cclxuXHRcdC8vIFRvZ2dsZSBPbkRpc21pc3NGbGFnIHdoZW4gZGF0YSBpcyBzdWJtaXR0ZWQgdG8gT0NWXHJcblx0XHRpZiAoZGF0YS5ldmVudFR5cGUgPT09IEV2ZW50VHlwZS5Gb3JtUmVzcG9uc2VTdWJtaXR0ZWQgfHxcclxuXHRcdFx0ZGF0YS5ldmVudFR5cGUgPT09IEV2ZW50VHlwZS5Gb3JtUGFydGlhbFJlc3BvbnNlU3VibWl0dGVkKSB7XHJcblx0XHRcdG9uRGlzbWlzc0ZsYWcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICgoXHJcblx0XHRcdGRhdGEuZXZlbnRUeXBlID09PSBFdmVudFR5cGUuRm9ybVJlc3BvbnNlU3VibWl0dGVkICYmXHJcblx0XHRcdGRhdGEuZm9ybVRpdGxlPy5pbmNsdWRlcyhQYWdlVHlwZS5TaW5nbGVQYWdlKVxyXG5cdFx0KSB8fCAoXHJcblx0XHRcdFx0ZGF0YS5ldmVudFR5cGUgPT09IEV2ZW50VHlwZS5Gb3JtUGFydGlhbFJlc3BvbnNlU3VibWl0dGVkICYmXHJcblx0XHRcdFx0IXN1cnZleUNvbnRhaW5zSW5zaWdodGZ1bEluZm9cclxuXHRcdFx0KVxyXG5cdFx0KSB7XHJcblx0XHRcdGxvZ1RlbGVtZXRyeUV2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX0ZPUk1fU1VCTUlUKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX0ZPUk1fU0VDT05EQVJZX1NVQk1JVC5uYW1lID1cclxuXHRcdFx0XHRTdXJ2ZXlVSUZvcm1TZWNvbmRhcnlTdWJtaXROYW1lICsgZGF0YS5wYWdlTnVtYmVyO1xyXG5cdFx0XHRsb2dUZWxlbWV0cnlFdmVudChMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9VSV9GT1JNX1NFQ09OREFSWV9TVUJNSVQpO1xyXG5cdFx0fVxyXG5cclxuXHR9IGNhdGNoIChleCkge1xyXG5cdFx0bG9nVGVsZW1ldHJ5RXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfRk9STV9TVUJNSVRfRVJST1IpO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVMb2dQcm9tcHRBbnN3ZXIocHJvbXB0UmVzcG9uc2U6IHN0cmluZywgYWRkaXRpb25hbFByb21wdFJlc3BvbnNlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRsZXQgaXNQcm9tcHRBbnN3ZXJMb2dOZWVkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRsZXQgaXNQcm9tcHRBbnN3ZXJObzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdGlmICghaXNOT1UocHJvbXB0UmVzcG9uc2UpKSB7XHJcblx0XHRpc1Byb21wdEFuc3dlckxvZ05lZWRlZCA9IExvZ1Byb21wdEFuc3dlcihwcm9tcHRSZXNwb25zZSwgUXVlc3Rpb25UeXBlLlByb21wdCwgaXNQcm9tcHRSZXNwb25zZUxvZ1ZhbGlkYXRlZCk7XHJcblx0XHRpc1Byb21wdEFuc3dlck5vID0gcHJvbXB0UmVzcG9uc2UgPT09IFByb21wdENvbnN0YW50cy5ObztcclxuXHR9XHJcblxyXG5cdGlmICghaXNOT1UoYWRkaXRpb25hbFByb21wdFJlc3BvbnNlKSkge1xyXG5cdFx0aXNQcm9tcHRBbnN3ZXJMb2dOZWVkZWQgPSBMb2dQcm9tcHRBbnN3ZXIoYWRkaXRpb25hbFByb21wdFJlc3BvbnNlLFxyXG5cdFx0XHRRdWVzdGlvblR5cGUuQWRkaXRpb25hbFF1ZXN0aW9uLCBpc0FkZGl0aW9uYWxQcm9tcHRSZXNwb25zZUxvZ1ZhbGlkYXRlZCk7XHJcblx0XHRpc1Byb21wdEFuc3dlck5vID0gYWRkaXRpb25hbFByb21wdFJlc3BvbnNlID09PSBQcm9tcHRDb25zdGFudHMuTm87XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gaXNQcm9tcHRBbnN3ZXJMb2dOZWVkZWQgfHwgaXNQcm9tcHRBbnN3ZXJObztcclxufVxyXG5cclxuZnVuY3Rpb24gTG9nUHJvbXB0QW5zd2VyKHByb21wdFJlc3BvbnNlOiBzdHJpbmcsIHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBpc1Byb21wdEFuc3dlckxvZ2dlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG5cclxuXHRpZiAoIWlzUHJvbXB0QW5zd2VyTG9nZ2VkKSB7XHJcblxyXG5cdFx0bGV0IHByb21wdE1lc3NhZ2VDbGlja2VkO1xyXG5cdFx0bGV0IHByb21wdE1lc3NhZ2VDbG9zZWQ7XHJcblx0XHRpZiAocXVlc3Rpb25UeXBlID09PSBRdWVzdGlvblR5cGUuUHJvbXB0KSB7XHJcblx0XHRcdGlzUHJvbXB0UmVzcG9uc2VMb2dWYWxpZGF0ZWQgPSB0cnVlO1xyXG5cdFx0XHRwcm9tcHRNZXNzYWdlQ2xpY2tlZCA9IExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX1BST01QVF9DTElDS0VEO1xyXG5cdFx0XHRwcm9tcHRNZXNzYWdlQ2xvc2VkID0gTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfUFJPTVBUX1VTRVJDTE9TRUQ7XHJcblx0XHRcdGlmICgocHJvbXB0UmVzcG9uc2UgPT09IFByb21wdENvbnN0YW50cy5ZZXMpKSB7XHJcblx0XHRcdFx0bG9nVGVsZW1ldHJ5RXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfRk9STV9TSE9XTik7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlzQWRkaXRpb25hbFByb21wdFJlc3BvbnNlTG9nVmFsaWRhdGVkID0gdHJ1ZTtcclxuXHRcdFx0cHJvbXB0TWVzc2FnZUNsaWNrZWQgPSBMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9VSV9BRERJVElPTkFMUFJPTVBUX0NMSUNLRUQ7XHJcblx0XHRcdHByb21wdE1lc3NhZ2VDbG9zZWQgPSBMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9VSV9BRERJVElPTkFMUFJPTVBUX1VTRVJDTE9TRUQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bG9nVGVsZW1ldHJ5RXZlbnQocHJvbXB0UmVzcG9uc2UgPT09IFByb21wdENvbnN0YW50cy5ObyA/IHByb21wdE1lc3NhZ2VDbG9zZWQgOiBwcm9tcHRNZXNzYWdlQ2xpY2tlZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENhbGwtYmFjayBmdW5jdGlvbiB3aGVuIHVzZXIgY2FuY2VscyBmZWVkYmFjayBmcm9tIEN1c3RvbWVyIFZvaWNlIHN1cnZleSBleHBlcmllbmNlLlxyXG4gKiBcclxuICogSU1QT1JUQU5UOiBUaGlzIGNhbGxiYWNrIHNob3VsZCBjb250YWluIG5vIHJlZmVyZW5jZXMgdG8gYW55IHN1cnZleSBVSVxyXG4gKiBub3IgRE9NIGVsZW1lbnRzLiBUaGlzIHJlc3RyaWN0aW9uIHN1cHBvcnRzIG11bHRpLXdpbmRvdyBlbnZpcm9ubWVudHNcclxuICogd2hlcmUgcmVuZGVyaW5nIGlzIGhhcHBlbmluZyBpbiBhIGRpZmZlcmVudCBjb250ZXh0IHRoYW4gdGhlc2UgY2FsbGJhY2tzLlxyXG4gKlxyXG4gKiBWaWV3IHRoZSBkZXNpZ24gZG9jdW1lbnQgZXhwbGFpbmluZyBtdWx0aS13aW5kb3cgc3VwcG9ydCBjaGFuZ2VzIGhlcmU6XHJcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LW15LnNoYXJlcG9pbnQuY29tLzp3Oi9wL2pvc2hkdW5uaW5nL0VXZ2hVX2ZOY3JwQXNlT2VtR3FPTzJRQkJOYVJ6X3daRHlFTDBaZXd1WHdLdHc/ZT1naTdQMWFcclxuICovXHJcbmZ1bmN0aW9uIG9uQ1ZDYW5jZWwoZGF0YTogSVN1cnZleUV2ZW50RGF0YSk6IHZvaWQge1xyXG5cdHN3aXRjaCAoZGF0YS5ldmVudFR5cGUpIHtcclxuXHRcdGNhc2UgRXZlbnRUeXBlLkZvcm1DbG9zZWQ6XHJcblx0XHRcdGlmIChpc05PVShkYXRhLnBhZ2VOdW1iZXIpKSB7XHJcblx0XHRcdFx0bG9nVGVsZW1ldHJ5RXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfRk9STV9VU0VSQ0xPU0VEKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9VSV9GT1JNX1VTRVJDTE9TRUQubmFtZSA9IFN1cnZleVVJRm9ybVVzZXJDbG9zZWROYW1lICsgZGF0YS5wYWdlTnVtYmVyLmNoYXJBdChkYXRhLnBhZ2VOdW1iZXIubGVuZ3RoIC0gMSk7XHJcblx0XHRcdFx0bG9nVGVsZW1ldHJ5RXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfRk9STV9VU0VSQ0xPU0VEKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgRXZlbnRUeXBlLlRoYW5rWW91UGFnZUNsb3NlZDpcclxuXHRcdFx0bG9nVGVsZW1ldHJ5RXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfVEhBTktZT1VQQUdFX1VTRVJDTE9TRUQpO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgRXZlbnRUeXBlLlByb21wdENsb3NlZDpcclxuXHRcdFx0bG9nVGVsZW1ldHJ5RXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfUFJPTVBUX1VTRVJDTE9TRUQpO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgRXZlbnRUeXBlLkFkZGl0aW9uYWxQcm9tcHRDbG9zZWQ6XHJcblx0XHRcdGxvZ1RlbGVtZXRyeUV2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX0FERElUSU9OQUxQUk9NUFRfVVNFUkNMT1NFRCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBFdmVudFR5cGUuRm9ybUF1dG9EaXNtaXNzZWQ6XHJcblx0XHRcdGxvZ1RlbGVtZXRyeUV2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX1BST01QVF9BVVRPRElTTUlTU0VEKTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIEV2ZW50VHlwZS5UaGFua1lvdVBhZ2VBdXRvRGlzbWlzc2VkOlxyXG5cdFx0XHRsb2dUZWxlbWV0cnlFdmVudChMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9VSV9USEFOS1lPVVBBR0VfQVVUT0RJU01JU1NFRCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBFdmVudFR5cGUuRm9ybVJlc3BvbnNlQ2FuY2VsZWQ6XHJcblx0XHRcdGlmIChpc05PVShkYXRhLnBhZ2VOdW1iZXIpKSB7XHJcblx0XHRcdFx0bG9nVGVsZW1ldHJ5RXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfRk9STV9VU0VSQ0xPU0VEKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9VSV9GT1JNX1VTRVJDTE9TRUQubmFtZSA9IFN1cnZleVVJRm9ybVVzZXJDbG9zZWROYW1lICsgZGF0YS5wYWdlTnVtYmVyPy5jaGFyQXQoZGF0YS5wYWdlTnVtYmVyLmxlbmd0aCAtIDEpO1xyXG5cdFx0XHRcdGxvZ1RlbGVtZXRyeUV2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX0ZPUk1fVVNFUkNMT1NFRCk7XHJcblx0XHRcdH1cclxuXHRcdFx0YnJlYWs7XHJcblx0XHRkZWZhdWx0OlxyXG5cdFx0XHRsb2dUZWxlbWV0cnlFdmVudChMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9VSV9GT1JNX05PX1JFVFVSTl9UWVBFKTtcclxuXHRcdFx0YnJlYWs7XHJcblx0fVxyXG5cclxuXHRvbkRpc21pc3Mob25EaXNtaXNzRmxhZyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYWxsLWJhY2sgZnVuY3Rpb24gd2hlbiB1c2VyIEN1c3RvbWVyIFZvaWNlIHN1cnZleSBpcyBsb2FkZWQgYW5kIHJlYWR5IGZvciBzaG93aW5nIHRvIHRoZSB1c2VyLlxyXG4gKiBIZXJlIHdlIGFyZSBnb2luZyB0byBoaWRlIHRoZSBzdXJ2ZXkgaWYgdGhlIGN1cnJlbnQgc3VydmV5IGlzIHRoZSBkaXNwYXRjaGVyIHN1cnZleS5cclxuICogRmlyc3QgaWYgdGhlIGRpc3BhY3RoZXIgc3VydmV5IGlzIGNhbGxlZCwgdGhlIGhhc1N1cnZleURpc3BhdGNoZXIgcGFyYW1ldGVyIHdpbGwgYmUgdHJ1ZS5cclxuICogQW5kIHNlY29uZCwgZGlzcGF0Y2hlciBzdXJ2ZXkgd2lsbCBiZSB0aGUgZmlyc3Qgc3VydmV5IGluIHRoZSBzdXJ2ZXkgZGlzcGF0Y2hlciBsb2dpYy4gU28sIHdlIHVzaW5nIFxyXG4gKiBoYXNMb2FkZWREaXNwYXRjaGVyIHRvIG1ha2Ugc3VyZSB3ZSB3aWxsIG9ubHkgaGlkZSB0aGUgZmlyc3Qgc3VydmV5IGluIHRoZSB3aG9sZSBzdXJ2ZXkgZGlzcGF0Y2hlciBsb2dpY1xyXG4gKiB3aGljaCBpcyB0aGUgZGlzcGF0Y2hlciBzdXJ2ZXkuXHJcbiAqIFxyXG4gKiBJTVBPUlRBTlQ6IFRoaXMgY2FsbGJhY2sgc2hvdWxkIGNvbnRhaW4gbm8gcmVmZXJlbmNlcyB0byBhbnkgc3VydmV5IFVJXHJcbiAqIG5vciBET00gZWxlbWVudHMuIFRoaXMgcmVzdHJpY3Rpb24gc3VwcG9ydHMgbXVsdGktd2luZG93IGVudmlyb25tZW50c1xyXG4gKiB3aGVyZSByZW5kZXJpbmcgaXMgaGFwcGVuaW5nIGluIGEgZGlmZmVyZW50IGNvbnRleHQgdGhhbiB0aGVzZSBjYWxsYmFja3MuXHJcbiAqXHJcbiAqIFZpZXcgdGhlIGRlc2lnbiBkb2N1bWVudCBleHBsYWluaW5nIG11bHRpLXdpbmRvdyBzdXBwb3J0IGNoYW5nZXMgaGVyZTpcclxuICogaHR0cHM6Ly9taWNyb3NvZnQtbXkuc2hhcmVwb2ludC5jb20vOnc6L3Avam9zaGR1bm5pbmcvRVdnaFVfZk5jcnBBc2VPZW1HcU9PMlFCQk5hUnpfd1pEeUVMMFpld3VYd0t0dz9lPWdpN1AxYVxyXG4gKi9cclxuZnVuY3Rpb24gb25DVkxvYWRlZChkYXRhOiBJU3VydmV5RXZlbnREYXRhKTogdm9pZCB7XHJcblx0bGV0IGV2ZW50SWQ6IElFdmVudElkID0gTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfRk9STV9TSE9XTjtcclxuXHJcblx0aWYgKGRhdGEuaGFzU3VydmV5RGlzcGF0Y2hlcikge1xyXG5cdFx0ZXZlbnRJZCA9IExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX0ZPUk1fRElTUEFUQ0hFUl9JTVBMRU1FTlRFRDtcclxuXHR9IGVsc2UgaWYgKGRhdGEuaGFzU3VydmV5UHJvbXB0U2hvd24pIHtcclxuXHRcdGV2ZW50SWQgPSBMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9VSV9QUk9NUFRfU0hPV047XHJcblx0fVxyXG5cclxuXHRsb2dUZWxlbWV0cnlFdmVudChldmVudElkKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENhbGwtYmFjayBsb2dnaW5nIGZ1bmN0aW9uIGZvciBnYXRlY3Jhc2ggZXJyb3JzLlxyXG4gKiBcclxuICogSU1QT1JUQU5UOiBUaGlzIGNhbGxiYWNrIHNob3VsZCBjb250YWluIG5vIHJlZmVyZW5jZXMgdG8gYW55IHN1cnZleSBVSVxyXG4gKiBub3IgRE9NIGVsZW1lbnRzLiBUaGlzIHJlc3RyaWN0aW9uIHN1cHBvcnRzIG11bHRpLXdpbmRvdyBlbnZpcm9ubWVudHNcclxuICogd2hlcmUgcmVuZGVyaW5nIGlzIGhhcHBlbmluZyBpbiBhIGRpZmZlcmVudCBjb250ZXh0IHRoYW4gdGhlc2UgY2FsbGJhY2tzLlxyXG4gKlxyXG4gKiBWaWV3IHRoZSBkZXNpZ24gZG9jdW1lbnQgZXhwbGFpbmluZyBtdWx0aS13aW5kb3cgc3VwcG9ydCBjaGFuZ2VzIGhlcmU6XHJcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LW15LnNoYXJlcG9pbnQuY29tLzp3Oi9wL2pvc2hkdW5uaW5nL0VXZ2hVX2ZOY3JwQXNlT2VtR3FPTzJRQkJOYVJ6X3daRHlFTDBaZXd1WHdLdHc/ZT1naTdQMWFcclxuICovXHJcbmZ1bmN0aW9uIGxvZ0dhdGVjcmFzaEV2ZW50KGRhdGE6IElTdXJ2ZXlFdmVudERhdGEpOiB2b2lkIHtcclxuXHRjb25zdCBjb25maWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbi5nZXQoKTtcclxuXHRjb25zdCBsb2dDdXN0b21Qcm9wczogTG9nZ2luZy5JQ3VzdG9tUHJvcGVydGllcyA9IHtcclxuXHRcdENhbXBhaWduSWQ6IGNvbmZpZ3VyYXRpb24uZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0Q2FtcGFpZ25JZCgpLFxyXG5cdFx0U3VydmV5SWQ6IGNvbmZpZ3VyYXRpb24uZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0SWQoKSxcclxuXHRcdFN1cnZleVR5cGU6IGNvbmZpZ3VyYXRpb24uZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0U3VydmV5VHlwZSgpLFxyXG5cdFx0RXJyb3JNZXNzYWdlOiBkYXRhLmN1c3RvbVByb3BlcnRpZXM/LkVycm9yTWVzc2FnZSA/IGRhdGEuY3VzdG9tUHJvcGVydGllcz8uRXJyb3JNZXNzYWdlIDogbnVsbCxcclxuXHRcdE1lc3NhZ2U6IGRhdGEuY3VzdG9tUHJvcGVydGllcz8uTWVzc2FnZSA/IGRhdGEuY3VzdG9tUHJvcGVydGllcz8uTWVzc2FnZSA6IG51bGwsXHJcblx0fTtcclxuXHJcblx0bG9nVGVsZW1ldHJ5RXZlbnQoZGF0YS5ldmVudElkLCBsb2dDdXN0b21Qcm9wcyk7XHJcbn1cclxuXHJcbi8vIExvZyBUZWxlbWV0cnkgZm9yIEN1c3RvbWVyIFZvaWNlIHN1cnZleSBmdW5uZWwuXHJcbmZ1bmN0aW9uIGxvZ1RlbGVtZXRyeUV2ZW50KGV2ZW50SWQ6IExvZ2dpbmcuSUV2ZW50SWQsIGN1c3RvbVByb3BlcnRpZXM/OiBMb2dnaW5nLklDdXN0b21Qcm9wZXJ0aWVzKTogdm9pZCB7XHJcblx0Y29uc3QgY29uZmlndXJhdGlvbiA9IENvbmZpZ3VyYXRpb24uZ2V0KCk7XHJcblx0bGV0IGxvZ0N1c3RvbVByb3BzOiBMb2dnaW5nLklDdXN0b21Qcm9wZXJ0aWVzO1xyXG5cdGlmICghY3VzdG9tUHJvcGVydGllcykge1xyXG5cdFx0bG9nQ3VzdG9tUHJvcHMgPSB7XHJcblx0XHRcdENhbXBhaWduSWQ6IGNvbmZpZ3VyYXRpb24uZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0Q2FtcGFpZ25JZCgpLFxyXG5cdFx0XHRTdXJ2ZXlJZDogY29uZmlndXJhdGlvbi5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRJZCgpLFxyXG5cdFx0XHRTdXJ2ZXlUeXBlOiBjb25maWd1cmF0aW9uLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldFN1cnZleVR5cGUoKSxcclxuXHRcdFx0Q2xpZW50RmVlZGJhY2tJZDogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRQcmVHZW5lcmF0ZWRDbGllbnRGZWVkYmFja0lkKCksXHJcblx0XHRcdENWRm9ybUlkOiBjb25maWd1cmF0aW9uLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldENWU3VydmV5Rm9ybUlkKCksXHJcblx0XHR9O1xyXG5cdH0gZWxzZSB7XHJcblx0XHRsb2dDdXN0b21Qcm9wcyA9IGN1c3RvbVByb3BlcnRpZXM7XHJcblx0fVxyXG5cclxuXHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KFxyXG5cdFx0ZXZlbnRJZCxcclxuXHRcdExvZ2dpbmcuTG9nTGV2ZWwuQ3JpdGljYWwsXHJcblx0XHRsb2dDdXN0b21Qcm9wc1xyXG5cdCk7XHJcbn1cclxuXHJcbmNvbnN0IGludGVybmFsID0ge1xyXG5cdGxvZ1RlbGVtZXRyeUV2ZW50LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHsgaW50ZXJuYWw6IHVuaXRUZXN0RXhwb3J0cyB9ID0geyBpbnRlcm5hbCB9O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/UI/Toast/CVToast.ts\n')},"./scripts/app/UI/Toast/Events.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "register", function() { return register; });\n/* harmony import */ var _Transport_Transport__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../Transport/Transport */ "./scripts/app/Transport/Transport.ts");\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../Utils */ "./scripts/app/UI/Utils.ts");\n/* harmony import */ var _SpinnerControl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../SpinnerControl */ "./scripts/app/UI/SpinnerControl.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../Utils */ "./scripts/app/Utils.ts");\n/* harmony import */ var _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../Personalizer/PersonalizerClient */ "./scripts/app/Personalizer/PersonalizerClient.ts");\n/**\r\n * Events.ts\r\n *\r\n * A module for all Event handling.\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar isNOU = _Utils__WEBPACK_IMPORTED_MODULE_7__["isNOU"];\r\n/**\r\n * Callback for when the feedback dialog is dismissed\r\n */\r\nvar onDismiss;\r\n/**\r\n * Is the prompt up\r\n */\r\nvar isPromptUp;\r\n/**\r\n * timer function to auto dismiss\r\n */\r\nvar timerAutoDismiss;\r\n/**\r\n * The AutoDismissValue that was set for the prompt.\r\n */\r\nvar autoDismissValue;\r\n/**\r\n * Dismiss all, including networking, UI, and events\r\n * @param submitted Was the control submitted (true), or cancelled (false)?\r\n */\r\nfunction dismissAll(submitted) {\r\n    unregister();\r\n    onDismiss(submitted);\r\n}\r\n/**\r\n * Listener un-registration\r\n */\r\nfunction unregister() {\r\n    removeListeners();\r\n}\r\n/**\r\n * List of listeners and the ids they are attached to. This ensures all events are correctly unregistered.\r\n */\r\nvar listenersList = [];\r\nfunction addListener(id, event, listener) {\r\n    _Utils__WEBPACK_IMPORTED_MODULE_2__["registerListener"](id, event, listener);\r\n    listenersList.push({ event: event, id: id, listener: listener });\r\n}\r\nfunction removeListeners() {\r\n    for (var _i = 0, listenersList_1 = listenersList; _i < listenersList_1.length; _i++) {\r\n        var listener = listenersList_1[_i];\r\n        _Utils__WEBPACK_IMPORTED_MODULE_2__["unregisterListener"](listener.id, listener.event, listener.listener);\r\n    }\r\n    listenersList = [];\r\n}\r\nfunction logTelemetryEvent(eventId, clientFeedbackId, isEmailPolicyEnabled, action, PersonalizerEventId, actualSetAutoDismissValue) {\r\n    var configuration = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]();\r\n    _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["getLogger"]().logEvent(eventId, 1 /* Critical */, {\r\n        CampaignId: configuration.getFloodgateSurvey().getCampaignId(),\r\n        SurveyId: configuration.getFloodgateSurvey().getId(),\r\n        SurveyType: configuration.getFloodgateSurvey().getSurveyType(),\r\n        PromptAutoDismiss: configuration.getFloodgateInitOptions().autoDismiss.toString(),\r\n        ClientFeedbackId: clientFeedbackId,\r\n        IsEmailPolicyEnabled: isEmailPolicyEnabled,\r\n        PersonalizerUserAction: action,\r\n        PersonalizerEventId: PersonalizerEventId,\r\n        ActualSetAutoDismissValue: actualSetAutoDismissValue,\r\n    });\r\n}\r\n/**\r\n * Register events for toast\r\n */\r\nfunction register(ON_DISMISS) {\r\n    if (ON_DISMISS === void 0) { ON_DISMISS = function (submitted) { return; }; }\r\n    onDismiss = ON_DISMISS;\r\n    isPromptUp = true;\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].ToastContainer, "keyup", toastKeyEventHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].ToastCancel, "click", toastCancelHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TPromptContainer, "click", promptContainerHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormSubmitButton, "click", submitButtonHandler);\r\n    addListener(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormEmailCheckBox, "click", emailCheckBoxHandler);\r\n    emailCheckBoxHandler(null); // call the checkbox handler to process the initial state\r\n    var ratingElements = document.querySelectorAll("input[name=\\"" + _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormRating + "\\"]");\r\n    for (var i = 0; i < ratingElements.length; ++i) {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_2__["registerListenerToElement"](ratingElements[i], "click", ratingInputHandler);\r\n    }\r\n    var isIntercept = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getSurveyType() === _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_6__["ISurvey"].Type.Intercept;\r\n    var autoDismiss = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateInitOptions().autoDismiss;\r\n    var isPersonalizerEnabled = isPersonalizerEnabledHelper();\r\n    // switch true pattern for clarity\r\n    switch (true) {\r\n        case isIntercept:\r\n            autoDismiss = 0 /* NoAutoDismiss */;\r\n            break;\r\n        case isPersonalizerEnabled:\r\n            // Get override value and set it if it exists.\r\n            var overrideValue = _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_8__["get"]().getOverrideValueForSurveyId(0 /* AutoDismissTime */, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getId());\r\n            if (!isNOU(overrideValue)) {\r\n                autoDismiss = overrideValue;\r\n            }\r\n            break;\r\n        default:\r\n            // Get the autoDismiss specified in the init options.\r\n            autoDismiss = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateInitOptions().autoDismiss;\r\n            break;\r\n    }\r\n    // Set module variable for autoDismiss\r\n    autoDismissValue = autoDismiss;\r\n    if (!_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().showPrompt && !isIntercept) {\r\n        showSurveyScreen();\r\n    }\r\n    else {\r\n        logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].SURVEY_UI_PROMPT_SHOWN, undefined /* clientFeedbackId */, undefined /* isEmailPolicyEnabled */, undefined /* action */, _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_8__["get"]().getEventIdForSurveyId(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getId()), autoDismiss);\r\n    }\r\n    if (autoDismiss !== 0 /* NoAutoDismiss */) {\r\n        var autoDismissDuration = void 0;\r\n        switch (autoDismiss) {\r\n            case (1 /* SevenSeconds */):\r\n                autoDismissDuration = 7000;\r\n                break;\r\n            case (2 /* FourteenSeconds */):\r\n                autoDismissDuration = 14000;\r\n                break;\r\n            case (3 /* TwentyOneSeconds */):\r\n                autoDismissDuration = 21000;\r\n                break;\r\n            case (4 /* TwentyEightSeconds */):\r\n                autoDismissDuration = 28000;\r\n                break;\r\n            case (5 /* SixtySeconds */):\r\n                autoDismissDuration = 60000;\r\n                break;\r\n            case (6 /* NinetySeconds */):\r\n                autoDismissDuration = 90000;\r\n                break;\r\n            case (7 /* OneHundredAndTwentySeconds */):\r\n                autoDismissDuration = 120000;\r\n                break;\r\n            case (8 /* OneHundredAndFiftySeconds */):\r\n                autoDismissDuration = 150000;\r\n                break;\r\n            default:\r\n                autoDismissDuration = 0;\r\n                break;\r\n        }\r\n        if (autoDismissDuration !== 0) {\r\n            timerAutoDismiss = window.setTimeout(function () {\r\n                if (isPromptUp) {\r\n                    dismissAll(false);\r\n                    if (isPersonalizerEnabled) {\r\n                        // If personalizer is enabled, call to notify that the prompt has autodismissed (which means it has been ignored).\r\n                        _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_8__["get"]().logUserActionForSurveyAsync(1 /* Ignore */, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getId(), _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getCampaignId());\r\n                        logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].SURVEY_UI_PROMPT_AUTODISMISSED, undefined /* clientFeedbackId */, undefined /* isEmailPolicyEnabled */, 1 /* Ignore */, _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_8__["get"]().getEventIdForSurveyId(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getId()), autoDismiss);\r\n                    }\r\n                    else {\r\n                        logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].SURVEY_UI_PROMPT_AUTODISMISSED, undefined /* clientFeedbackId */, undefined /* isEmailPolicyEnabled */, undefined /* action */, undefined /* PersonalizerEventId */, autoDismissValue);\r\n                    }\r\n                }\r\n            }, autoDismissDuration);\r\n        }\r\n    }\r\n}\r\nfunction emailCheckBoxHandler(event) {\r\n    // show email if checked and show default string if unchecked\r\n    var emailCheckBox = document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormEmailCheckBox);\r\n    if (emailCheckBox) {\r\n        var emailTextBox = document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormEmailTextBox);\r\n        emailTextBox.value = emailCheckBox.checked ? _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions().userEmail : null;\r\n        emailTextBox.disabled = !emailCheckBox.checked;\r\n    }\r\n}\r\nfunction toastKeyEventHandler(event) {\r\n    // dismiss upon pressing the escape key\r\n    if (event.keyCode === _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Keys"].Esc) {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        dismissAll(false);\r\n        onCancelLoggingRoutine();\r\n        clearAutoDismiss();\r\n    }\r\n}\r\nfunction toastCancelHandler(event) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    dismissAll(false);\r\n    onCancelLoggingRoutine();\r\n    clearAutoDismiss();\r\n}\r\nfunction onCancelLoggingRoutine() {\r\n    if (isPromptUp && isPersonalizerEnabledHelper()) {\r\n        _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_8__["get"]().logUserActionForSurveyAsync(0 /* Cancel */, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getId(), _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getCampaignId());\r\n        logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].SURVEY_UI_PROMPT_USERCLOSED, undefined /* clientFeedbackId */, undefined /* isEmailPolicyEnabled */, 0 /* Cancel */, _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_8__["get"]().getEventIdForSurveyId(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getId()), autoDismissValue);\r\n        return;\r\n    }\r\n    logTelemetryEvent(isPromptUp ? _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].SURVEY_UI_PROMPT_USERCLOSED : _Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].SURVEY_UI_FORM_USERCLOSED, undefined /* clientFeedbackId */, undefined /* isEmailPolicyEnabled */, undefined /* action */, undefined /* PersonalizerEventId */, autoDismissValue);\r\n}\r\nfunction clearAutoDismiss() {\r\n    if (timerAutoDismiss) {\r\n        clearTimeout(timerAutoDismiss);\r\n        timerAutoDismiss = 0;\r\n    }\r\n}\r\nfunction promptContainerHandler(event) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    if (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getSurveyType() === _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_6__["ISurvey"].Type.Intercept) {\r\n        interceptHandler();\r\n    }\r\n    else {\r\n        showSurveyScreen();\r\n    }\r\n}\r\nfunction interceptHandler() {\r\n    var success = openInNewTab(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getInterceptUrl());\r\n    dismissAll(false);\r\n    // Logging according to if opening the tab is successful. \r\n    if (success) {\r\n        logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].SURVEY_UI_PROMPT_CLICKED);\r\n    }\r\n    else {\r\n        logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].SURVEY_UI_REDIRECTIONFAILURE);\r\n    }\r\n}\r\nfunction openInNewTab(url) {\r\n    var win = window.open(url, "_blank");\r\n    if (isNOU(win)) {\r\n        return false;\r\n    }\r\n    win.focus();\r\n    return true;\r\n}\r\nfunction showSurveyScreen() {\r\n    isPromptUp = false;\r\n    _Utils__WEBPACK_IMPORTED_MODULE_2__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TPromptContainer, false);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_2__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormContainer, true);\r\n    // Adding ToastZoom class to toastContainer. This handles zoom and small screen accesibility.\r\n    // It is added here so that it doesn\'t apply to the prompt.\r\n    _Utils__WEBPACK_IMPORTED_MODULE_2__["addClassById"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].ToastContainer, _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].ToastZoom);\r\n    // remove toast container\'s alert attribute when after the user click toast and form is shown, so screen readers\r\n    // like JAWS doesn\'t repeat all components on the form.\r\n    if ((" " + document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormContainer).className + " ").indexOf(" " + _UiConstants__WEBPACK_IMPORTED_MODULE_1__["Classes"].Visible + " ") > -1) {\r\n        document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].ToastContainer).setAttribute("role", "");\r\n    }\r\n    // Focus should always be set to first rating item since all supported surveys showing form have rating items so far.\r\n    var formRating = document.getElementsByName(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormRating);\r\n    if (formRating && formRating.length > 0) {\r\n        formRating[0].focus();\r\n    }\r\n    if (isPersonalizerEnabledHelper()) {\r\n        // If personalizer is enabled, call to notify that the prompt has been clicked (which means user has accepted).\r\n        _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_8__["get"]().logUserActionForSurveyAsync(2 /* Accept */, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getId(), _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getCampaignId());\r\n        logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].SURVEY_UI_FORM_SHOWN, undefined /* clientFeedbackId */, undefined /* isEmailPolicyEnabled */, 2 /* Accept */, _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_8__["get"]().getEventIdForSurveyId(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getId()), autoDismissValue);\r\n    }\r\n    else {\r\n        logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].SURVEY_UI_FORM_SHOWN, undefined /* clientFeedbackId */, undefined /* isEmailPolicyEnabled */, undefined /* action */, undefined /* PersonalizerEventId */, autoDismissValue);\r\n    }\r\n}\r\nfunction ratingInputHandler(event) {\r\n    document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormSubmitButton).disabled = false;\r\n}\r\nfunction submitButtonHandler(event) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    _Utils__WEBPACK_IMPORTED_MODULE_2__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormSubmitButton, false);\r\n    var spinner = new _SpinnerControl__WEBPACK_IMPORTED_MODULE_3__["Spinner"](_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormSubmitButtonSpinner);\r\n    var transporter = new _Transport_Transport__WEBPACK_IMPORTED_MODULE_0__["Transporter"](_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions().environment, _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_6__["ISurvey"].Type[_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getSurveyType()], _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions().appId, "Survey", _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions().applicationGroup, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions().telemetryGroup, _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getCommonInitOptions().webGroup);\r\n    var commentElement = document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormComment);\r\n    var commentEntered = (commentElement && !!commentElement.value);\r\n    var selectedRating = document.querySelector("input[name=\\"" + _UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormRating + "\\"]:checked");\r\n    _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().setValues(Number(selectedRating.value), commentEntered ? commentElement.value : "");\r\n    // Add survey-specific data to manifest\r\n    transporter.setManifestValues(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getJsonElements());\r\n    // Send email address if user gives consent\r\n    var emailCheckBox = document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormEmailCheckBox);\r\n    var emailTextBox = document.getElementById(_UiConstants__WEBPACK_IMPORTED_MODULE_1__["IDs"].TFormEmailTextBox);\r\n    if (emailCheckBox && emailCheckBox.checked && emailTextBox.value !== "") {\r\n        transporter.setEmail(emailTextBox.value);\r\n    }\r\n    transporter.submit();\r\n    spinner.destroy();\r\n    dismissAll(true);\r\n    logTelemetryEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_4__["EventIds"].SURVEY_UI_FORM_SUBMIT, transporter.getClientFeedbackId(), _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateInitOptions().showEmailAddress);\r\n}\r\nfunction isPersonalizerEnabledHelper() {\r\n    return _Personalizer_PersonalizerClient__WEBPACK_IMPORTED_MODULE_8__["get"]().isEnabled(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getSurveyType(), _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getLauncherType(), _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getGoverenedChannelType());\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9Ub2FzdC9FdmVudHMudHM/YTVkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRXVEO0FBRUo7QUFDaEI7QUFFUTtBQUNLO0FBQ2tCO0FBQ0Q7QUFDL0I7QUFDdUM7QUFHcEUsU0FBSyxHQUFLLDRDQUFMLENBQVc7QUFFeEI7O0dBRUc7QUFDSCxJQUFJLFNBQTZCLENBQUM7QUFFbEM7O0dBRUc7QUFDSCxJQUFJLFVBQW1CLENBQUM7QUFFeEI7O0dBRUc7QUFDSCxJQUFJLGdCQUF3QixDQUFDO0FBRTdCOztHQUVHO0FBQ0gsSUFBSSxnQkFBbUMsQ0FBQztBQUV4Qzs7O0dBR0c7QUFDSCxTQUFTLFVBQVUsQ0FBQyxTQUFrQjtJQUNyQyxVQUFVLEVBQUUsQ0FBQztJQUNiLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFVBQVU7SUFDbEIsZUFBZSxFQUFFLENBQUM7QUFDbkIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsSUFBSSxhQUFhLEdBQXNFLEVBQUUsQ0FBQztBQUUxRixTQUFTLFdBQVcsQ0FBQyxFQUFVLEVBQUUsS0FBYSxFQUFFLFFBQWdDO0lBQy9FLHVEQUF3QixDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsU0FBUyxlQUFlO0lBQ3ZCLEtBQXFCLFVBQWEsRUFBYiwrQkFBYSxFQUFiLDJCQUFhLEVBQWIsSUFBYSxFQUFFO1FBQS9CLElBQUksUUFBUTtRQUNoQix5REFBMEIsQ0FBQyxR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QUUsQ0FBQyxlQUFlLEVBQUUsRUFDMUQsZ0VBQWlCLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztBQUN0RSxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVUkvVG9hc3QvRXZlbnRzLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEV2ZW50cy50c1xyXG4gKlxyXG4gKiBBIG1vZHVsZSBmb3IgYWxsIEV2ZW50IGhhbmRsaW5nLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFRyYW5zcG9ydGVyIH0gZnJvbSBcIi4vLi4vLi4vVHJhbnNwb3J0L1RyYW5zcG9ydFwiO1xyXG5pbXBvcnQgeyBBdXRvRGlzbWlzc1ZhbHVlcyB9IGZyb20gXCIuLy4uLy4uL0NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBDbGFzc2VzLCBJRHMsIEtleXMgfSBmcm9tIFwiLi8uLi9VaUNvbnN0YW50c1wiO1xyXG5pbXBvcnQgKiBhcyBVaVV0aWxzIGZyb20gXCIuLy4uL1V0aWxzXCI7XHJcbmltcG9ydCB7IElPbkRpc21pc3NEZWxlZ2F0ZSB9IGZyb20gXCIuLy4uLy4uL0lPbkRpc21pc3NEZWxlZ2F0ZVwiO1xyXG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSBcIi4vLi4vU3Bpbm5lckNvbnRyb2xcIjtcclxuaW1wb3J0ICogYXMgTG9nZ2luZyBmcm9tIFwiLi8uLi8uLi9Mb2dnaW5nL0xvZ2dpbmdcIjtcclxuaW1wb3J0ICogYXMgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi8uLi8uLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0ICogYXMgQXBpIGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmUvZGlzdC9zcmMvQXBpL0FwaVwiO1xyXG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tIFwiLi4vLi4vVXRpbHNcIjtcclxuaW1wb3J0ICogYXMgUGVyc29uYWxpemVyQ2xpZW50IGZyb20gXCIuLi8uLi9QZXJzb25hbGl6ZXIvUGVyc29uYWxpemVyQ2xpZW50XCI7XHJcbmltcG9ydCB7IEVuZFVzZXJBY3Rpb25zLCBTdXBwb3J0ZWRPdmVycmlkZXMgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9JUGVyc29uYWxpemVyQ2xpZW50XCI7XHJcblxyXG5jb25zdCB7IGlzTk9VIH0gPSBVdGlscztcclxuXHJcbi8qKlxyXG4gKiBDYWxsYmFjayBmb3Igd2hlbiB0aGUgZmVlZGJhY2sgZGlhbG9nIGlzIGRpc21pc3NlZFxyXG4gKi9cclxubGV0IG9uRGlzbWlzczogSU9uRGlzbWlzc0RlbGVnYXRlO1xyXG5cclxuLyoqXHJcbiAqIElzIHRoZSBwcm9tcHQgdXBcclxuICovXHJcbmxldCBpc1Byb21wdFVwOiBib29sZWFuO1xyXG5cclxuLyoqXHJcbiAqIHRpbWVyIGZ1bmN0aW9uIHRvIGF1dG8gZGlzbWlzc1xyXG4gKi9cclxubGV0IHRpbWVyQXV0b0Rpc21pc3M6IG51bWJlcjtcclxuXHJcbi8qKlxyXG4gKiBUaGUgQXV0b0Rpc21pc3NWYWx1ZSB0aGF0IHdhcyBzZXQgZm9yIHRoZSBwcm9tcHQuXHJcbiAqL1xyXG5sZXQgYXV0b0Rpc21pc3NWYWx1ZTogQXV0b0Rpc21pc3NWYWx1ZXM7XHJcblxyXG4vKipcclxuICogRGlzbWlzcyBhbGwsIGluY2x1ZGluZyBuZXR3b3JraW5nLCBVSSwgYW5kIGV2ZW50c1xyXG4gKiBAcGFyYW0gc3VibWl0dGVkIFdhcyB0aGUgY29udHJvbCBzdWJtaXR0ZWQgKHRydWUpLCBvciBjYW5jZWxsZWQgKGZhbHNlKT9cclxuICovXHJcbmZ1bmN0aW9uIGRpc21pc3NBbGwoc3VibWl0dGVkOiBib29sZWFuKTogdm9pZCB7XHJcblx0dW5yZWdpc3RlcigpO1xyXG5cdG9uRGlzbWlzcyhzdWJtaXR0ZWQpO1xyXG59XHJcblxyXG4vKipcclxuICogTGlzdGVuZXIgdW4tcmVnaXN0cmF0aW9uXHJcbiAqL1xyXG5mdW5jdGlvbiB1bnJlZ2lzdGVyKCk6IHZvaWQge1xyXG5cdHJlbW92ZUxpc3RlbmVycygpO1xyXG59XHJcblxyXG4vKipcclxuICogTGlzdCBvZiBsaXN0ZW5lcnMgYW5kIHRoZSBpZHMgdGhleSBhcmUgYXR0YWNoZWQgdG8uIFRoaXMgZW5zdXJlcyBhbGwgZXZlbnRzIGFyZSBjb3JyZWN0bHkgdW5yZWdpc3RlcmVkLlxyXG4gKi9cclxubGV0IGxpc3RlbmVyc0xpc3Q6IHsgaWQ6IHN0cmluZywgZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQgfVtdID0gW107XHJcblxyXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihpZDogc3RyaW5nLCBldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCk6IHZvaWQge1xyXG5cdFVpVXRpbHMucmVnaXN0ZXJMaXN0ZW5lcihpZCwgZXZlbnQsIGxpc3RlbmVyKTtcclxuXHRsaXN0ZW5lcnNMaXN0LnB1c2goeyBldmVudDogZXZlbnQsIGlkOiBpZCwgbGlzdGVuZXI6IGxpc3RlbmVyIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVMaXN0ZW5lcnMoKTogdm9pZCB7XHJcblx0Zm9yIChsZXQgbGlzdGVuZXIgb2YgbGlzdGVuZXJzTGlzdCkge1xyXG5cdFx0VWlVdGlscy51bnJlZ2lzdGVyTGlzdGVuZXIobGlzdGVuZXIuaWQsIGxpc3RlbmVyLmV2ZW50LCBsaXN0ZW5lci5saXN0ZW5lcik7XHJcblx0fVxyXG5cdGxpc3RlbmVyc0xpc3QgPSBbXTtcclxufVxyXG5cclxuZnVuY3Rpb24gbG9nVGVsZW1ldHJ5RXZlbnQoZXZlbnRJZDogTG9nZ2luZy5JRXZlbnRJZCwgY2xpZW50RmVlZGJhY2tJZD86IHN0cmluZywgaXNFbWFpbFBvbGljeUVuYWJsZWQ/OiBib29sZWFuLFxyXG5cdFx0YWN0aW9uPzogRW5kVXNlckFjdGlvbnMsIFBlcnNvbmFsaXplckV2ZW50SWQ/OiBzdHJpbmcsIGFjdHVhbFNldEF1dG9EaXNtaXNzVmFsdWU/OiBBdXRvRGlzbWlzc1ZhbHVlcyk6IHZvaWQge1xyXG5cclxuXHRjb25zdCBjb25maWd1cmF0aW9uID0gQ29uZmlndXJhdGlvbi5nZXQoKTtcclxuXHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KFxyXG5cdFx0ZXZlbnRJZCxcclxuXHRcdExvZ2dpbmcuTG9nTGV2ZWwuQ3JpdGljYWwsXHJcblx0XHR7XHJcblx0XHRcdENhbXBhaWduSWQ6IGNvbmZpZ3VyYXRpb24uZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0Q2FtcGFpZ25JZCgpLFxyXG5cdFx0XHRTdXJ2ZXlJZDogY29uZmlndXJhdGlvbi5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRJZCgpLFxyXG5cdFx0XHRTdXJ2ZXlUeXBlOiBjb25maWd1cmF0aW9uLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldFN1cnZleVR5cGUoKSxcclxuXHRcdFx0UHJvbXB0QXV0b0Rpc21pc3M6IGNvbmZpZ3VyYXRpb24uZ2V0Rmxvb2RnYXRlSW5pdE9wdGlvbnMoKS5hdXRvRGlzbWlzcy50b1N0cmluZygpLFxyXG5cdFx0XHRDbGllbnRGZWVkYmFja0lkOiBjbGllbnRGZWVkYmFja0lkLFxyXG5cdFx0XHRJc0VtYWlsUG9saWN5RW5hYmxlZDogaXNFbWFpbFBvbGljeUVuYWJsZWQsXHJcblx0XHRcdFBlcnNvbmFsaXplclVzZXJBY3Rpb246IGFjdGlvbixcclxuXHRcdFx0UGVyc29uYWxpemVyRXZlbnRJZDogUGVyc29uYWxpemVyRXZlbnRJZCxcclxuXHRcdFx0QWN0dWFsU2V0QXV0b0Rpc21pc3NWYWx1ZTogYWN0dWFsU2V0QXV0b0Rpc21pc3NWYWx1ZSxcclxuXHRcdH1cclxuXHQpO1xyXG59XHJcblxyXG4vKipcclxuICogUmVnaXN0ZXIgZXZlbnRzIGZvciB0b2FzdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKE9OX0RJU01JU1M6IElPbkRpc21pc3NEZWxlZ2F0ZSA9IGZ1bmN0aW9uIChzdWJtaXR0ZWQ6IGJvb2xlYW4pIHsgcmV0dXJuOyB9KSB7XHJcblx0b25EaXNtaXNzID0gT05fRElTTUlTUztcclxuXHRpc1Byb21wdFVwID0gdHJ1ZTtcclxuXHJcblx0YWRkTGlzdGVuZXIoSURzLlRvYXN0Q29udGFpbmVyLCBcImtleXVwXCIsIHRvYXN0S2V5RXZlbnRIYW5kbGVyKTtcclxuXHRhZGRMaXN0ZW5lcihJRHMuVG9hc3RDYW5jZWwsIFwiY2xpY2tcIiwgdG9hc3RDYW5jZWxIYW5kbGVyKTtcclxuXHRhZGRMaXN0ZW5lcihJRHMuVFByb21wdENvbnRhaW5lciwgXCJjbGlja1wiLCBwcm9tcHRDb250YWluZXJIYW5kbGVyKTtcclxuXHRhZGRMaXN0ZW5lcihJRHMuVEZvcm1TdWJtaXRCdXR0b24sIFwiY2xpY2tcIiwgc3VibWl0QnV0dG9uSGFuZGxlcik7XHJcblx0YWRkTGlzdGVuZXIoSURzLlRGb3JtRW1haWxDaGVja0JveCwgXCJjbGlja1wiLCBlbWFpbENoZWNrQm94SGFuZGxlcik7XHJcblx0ZW1haWxDaGVja0JveEhhbmRsZXIobnVsbCk7IC8vIGNhbGwgdGhlIGNoZWNrYm94IGhhbmRsZXIgdG8gcHJvY2VzcyB0aGUgaW5pdGlhbCBzdGF0ZVxyXG5cclxuXHRsZXQgcmF0aW5nRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRbbmFtZT1cXFwiXCIgKyBJRHMuVEZvcm1SYXRpbmcgKyBcIlxcXCJdXCIpO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcmF0aW5nRWxlbWVudHMubGVuZ3RoOyArK2kpIHtcclxuXHRcdFVpVXRpbHMucmVnaXN0ZXJMaXN0ZW5lclRvRWxlbWVudChyYXRpbmdFbGVtZW50c1tpXSBhcyBIVE1MRWxlbWVudCwgXCJjbGlja1wiLCByYXRpbmdJbnB1dEhhbmRsZXIpO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgaXNJbnRlcmNlcHQgPSBDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldFN1cnZleVR5cGUoKSA9PT0gQXBpLklTdXJ2ZXkuVHlwZS5JbnRlcmNlcHQ7XHJcblxyXG5cdGxldCBhdXRvRGlzbWlzcyA9IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlSW5pdE9wdGlvbnMoKS5hdXRvRGlzbWlzcztcclxuXHRjb25zdCBpc1BlcnNvbmFsaXplckVuYWJsZWQgPSBpc1BlcnNvbmFsaXplckVuYWJsZWRIZWxwZXIoKTtcclxuXHJcblx0Ly8gc3dpdGNoIHRydWUgcGF0dGVybiBmb3IgY2xhcml0eVxyXG5cdHN3aXRjaCAodHJ1ZSkge1xyXG5cdFx0Y2FzZSBpc0ludGVyY2VwdDpcclxuXHRcdFx0YXV0b0Rpc21pc3MgPSBBdXRvRGlzbWlzc1ZhbHVlcy5Ob0F1dG9EaXNtaXNzO1xyXG5cdFx0XHRicmVhaztcclxuXHJcblx0XHRjYXNlIGlzUGVyc29uYWxpemVyRW5hYmxlZDpcclxuXHRcdFx0Ly8gR2V0IG92ZXJyaWRlIHZhbHVlIGFuZCBzZXQgaXQgaWYgaXQgZXhpc3RzLlxyXG5cdFx0XHRjb25zdCBvdmVycmlkZVZhbHVlID0gUGVyc29uYWxpemVyQ2xpZW50LmdldCgpLmdldE92ZXJyaWRlVmFsdWVGb3JTdXJ2ZXlJZChTdXBwb3J0ZWRPdmVycmlkZXMuQXV0b0Rpc21pc3NUaW1lLFxyXG5cdFx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0SWQoKSk7XHJcblxyXG5cdFx0XHRpZiAoIWlzTk9VKG92ZXJyaWRlVmFsdWUpKSB7XHJcblx0XHRcdFx0YXV0b0Rpc21pc3MgPSBvdmVycmlkZVZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdGRlZmF1bHQ6XHJcblx0XHRcdC8vIEdldCB0aGUgYXV0b0Rpc21pc3Mgc3BlY2lmaWVkIGluIHRoZSBpbml0IG9wdGlvbnMuXHJcblx0XHRcdGF1dG9EaXNtaXNzID0gQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVJbml0T3B0aW9ucygpLmF1dG9EaXNtaXNzO1xyXG5cdFx0XHRicmVhaztcclxuXHR9XHJcblxyXG5cdC8vIFNldCBtb2R1bGUgdmFyaWFibGUgZm9yIGF1dG9EaXNtaXNzXHJcblx0YXV0b0Rpc21pc3NWYWx1ZSA9IGF1dG9EaXNtaXNzO1xyXG5cclxuXHRpZiAoIUNvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuc2hvd1Byb21wdCAmJiAhaXNJbnRlcmNlcHQpIHtcclxuXHRcdHNob3dTdXJ2ZXlTY3JlZW4oKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0bG9nVGVsZW1ldHJ5RXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfUFJPTVBUX1NIT1dOLCB1bmRlZmluZWQgLyogY2xpZW50RmVlZGJhY2tJZCAqLywgdW5kZWZpbmVkIC8qIGlzRW1haWxQb2xpY3lFbmFibGVkICovLFxyXG5cdFx0XHR1bmRlZmluZWQgLyogYWN0aW9uICovLCBQZXJzb25hbGl6ZXJDbGllbnQuZ2V0KCkuZ2V0RXZlbnRJZEZvclN1cnZleUlkKENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0SWQoKSksXHJcblx0XHRcdGF1dG9EaXNtaXNzKTtcclxuXHR9XHJcblxyXG5cdGlmIChhdXRvRGlzbWlzcyAhPT0gQXV0b0Rpc21pc3NWYWx1ZXMuTm9BdXRvRGlzbWlzcykge1xyXG5cdFx0bGV0IGF1dG9EaXNtaXNzRHVyYXRpb246IG51bWJlcjtcclxuXHJcblx0XHRzd2l0Y2ggKGF1dG9EaXNtaXNzKSB7XHJcblx0XHRcdGNhc2UgKEF1dG9EaXNtaXNzVmFsdWVzLlNldmVuU2Vjb25kcyk6XHJcblx0XHRcdFx0YXV0b0Rpc21pc3NEdXJhdGlvbiA9IDcwMDA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgKEF1dG9EaXNtaXNzVmFsdWVzLkZvdXJ0ZWVuU2Vjb25kcyk6XHJcblx0XHRcdFx0YXV0b0Rpc21pc3NEdXJhdGlvbiA9IDE0MDAwO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIChBdXRvRGlzbWlzc1ZhbHVlcy5Ud2VudHlPbmVTZWNvbmRzKTpcclxuXHRcdFx0XHRhdXRvRGlzbWlzc0R1cmF0aW9uID0gMjEwMDA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgKEF1dG9EaXNtaXNzVmFsdWVzLlR3ZW50eUVpZ2h0U2Vjb25kcyk6XHJcblx0XHRcdFx0YXV0b0Rpc21pc3NEdXJhdGlvbiA9IDI4MDAwO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIChBdXRvRGlzbWlzc1ZhbHVlcy5TaXh0eVNlY29uZHMpOlxyXG5cdFx0XHRcdGF1dG9EaXNtaXNzRHVyYXRpb24gPSA2MDAwMDtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAoQXV0b0Rpc21pc3NWYWx1ZXMuTmluZXR5U2Vjb25kcyk6XHJcblx0XHRcdFx0YXV0b0Rpc21pc3NEdXJhdGlvbiA9IDkwMDAwO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIChBdXRvRGlzbWlzc1ZhbHVlcy5PbmVIdW5kcmVkQW5kVHdlbnR5U2Vjb25kcyk6XHJcblx0XHRcdFx0YXV0b0Rpc21pc3NEdXJhdGlvbiA9IDEyMDAwMDtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAoQXV0b0Rpc21pc3NWYWx1ZXMuT25lSHVuZHJlZEFuZEZpZnR5U2Vjb25kcyk6XHJcblx0XHRcdFx0YXV0b0Rpc21pc3NEdXJhdGlvbiA9IDE1MDAwMDtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRhdXRvRGlzbWlzc0R1cmF0aW9uID0gMDtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoYXV0b0Rpc21pc3NEdXJhdGlvbiAhPT0gMCkge1xyXG5cdFx0XHR0aW1lckF1dG9EaXNtaXNzID0gd2luZG93LnNldFRpbWVvdXQoXHJcblx0XHRcdFx0ZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0aWYgKGlzUHJvbXB0VXApIHtcclxuXHRcdFx0XHRcdFx0ZGlzbWlzc0FsbChmYWxzZSk7XHJcblx0XHRcdFx0XHRcdGlmIChpc1BlcnNvbmFsaXplckVuYWJsZWQpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwZXJzb25hbGl6ZXIgaXMgZW5hYmxlZCwgY2FsbCB0byBub3RpZnkgdGhhdCB0aGUgcHJvbXB0IGhhcyBhdXRvZGlzbWlzc2VkICh3aGljaCBtZWFucyBpdCBoYXMgYmVlbiBpZ25vcmVkKS5cclxuXHRcdFx0XHRcdFx0XHRQZXJzb25hbGl6ZXJDbGllbnQuZ2V0KCkubG9nVXNlckFjdGlvbkZvclN1cnZleUFzeW5jKEVuZFVzZXJBY3Rpb25zLklnbm9yZSxcclxuXHRcdFx0XHRcdFx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0SWQoKSxcclxuXHRcdFx0XHRcdFx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0Q2FtcGFpZ25JZCgpKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0bG9nVGVsZW1ldHJ5RXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfUFJPTVBUX0FVVE9ESVNNSVNTRUQsIHVuZGVmaW5lZCAvKiBjbGllbnRGZWVkYmFja0lkICovLFxyXG5cdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkIC8qIGlzRW1haWxQb2xpY3lFbmFibGVkICovLFxyXG5cdFx0XHRcdFx0XHRcdFx0RW5kVXNlckFjdGlvbnMuSWdub3JlLFxyXG5cdFx0XHRcdFx0XHRcdFx0UGVyc29uYWxpemVyQ2xpZW50LmdldCgpLmdldEV2ZW50SWRGb3JTdXJ2ZXlJZChDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldElkKCkpLFxyXG5cdFx0XHRcdFx0XHRcdFx0YXV0b0Rpc21pc3MpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGxvZ1RlbGVtZXRyeUV2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX1BST01QVF9BVVRPRElTTUlTU0VELCB1bmRlZmluZWQgLyogY2xpZW50RmVlZGJhY2tJZCAqLyxcclxuXHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCAvKiBpc0VtYWlsUG9saWN5RW5hYmxlZCAqLywgdW5kZWZpbmVkIC8qIGFjdGlvbiAqLywgdW5kZWZpbmVkIC8qIFBlcnNvbmFsaXplckV2ZW50SWQgKi8sIGF1dG9EaXNtaXNzVmFsdWUpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRhdXRvRGlzbWlzc0R1cmF0aW9uXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBlbWFpbENoZWNrQm94SGFuZGxlcihldmVudDogRXZlbnQpOiB2b2lkIHtcclxuXHQvLyBzaG93IGVtYWlsIGlmIGNoZWNrZWQgYW5kIHNob3cgZGVmYXVsdCBzdHJpbmcgaWYgdW5jaGVja2VkXHJcblx0bGV0IGVtYWlsQ2hlY2tCb3g6IEhUTUxJbnB1dEVsZW1lbnQgPSA8SFRNTElucHV0RWxlbWVudD4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLlRGb3JtRW1haWxDaGVja0JveCk7XHJcblx0aWYgKGVtYWlsQ2hlY2tCb3gpIHtcclxuXHRcdGxldCBlbWFpbFRleHRCb3g6IEhUTUxJbnB1dEVsZW1lbnQgPSA8SFRNTElucHV0RWxlbWVudD4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLlRGb3JtRW1haWxUZXh0Qm94KTtcclxuXHRcdGVtYWlsVGV4dEJveC52YWx1ZSA9IGVtYWlsQ2hlY2tCb3guY2hlY2tlZCA/IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS51c2VyRW1haWwgOiBudWxsO1xyXG5cdFx0ZW1haWxUZXh0Qm94LmRpc2FibGVkID0gIWVtYWlsQ2hlY2tCb3guY2hlY2tlZDtcclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvYXN0S2V5RXZlbnRIYW5kbGVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG5cdC8vIGRpc21pc3MgdXBvbiBwcmVzc2luZyB0aGUgZXNjYXBlIGtleVxyXG5cdGlmICgoPEtleWJvYXJkRXZlbnQ+IGV2ZW50KS5rZXlDb2RlID09PSBLZXlzLkVzYykge1xyXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0ZGlzbWlzc0FsbChmYWxzZSk7XHJcblx0XHRvbkNhbmNlbExvZ2dpbmdSb3V0aW5lKCk7XHJcblx0XHRjbGVhckF1dG9EaXNtaXNzKCk7XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiB0b2FzdENhbmNlbEhhbmRsZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcblx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRkaXNtaXNzQWxsKGZhbHNlKTtcclxuXHRvbkNhbmNlbExvZ2dpbmdSb3V0aW5lKCk7XHJcblx0Y2xlYXJBdXRvRGlzbWlzcygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBvbkNhbmNlbExvZ2dpbmdSb3V0aW5lKCk6IHZvaWQge1xyXG5cdGlmIChpc1Byb21wdFVwICYmIGlzUGVyc29uYWxpemVyRW5hYmxlZEhlbHBlcigpKSB7XHJcblx0XHRQZXJzb25hbGl6ZXJDbGllbnQuZ2V0KCkubG9nVXNlckFjdGlvbkZvclN1cnZleUFzeW5jKEVuZFVzZXJBY3Rpb25zLkNhbmNlbCwgQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRJZCgpLFxyXG5cdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRDYW1wYWlnbklkKCkpO1xyXG5cclxuXHRcdGxvZ1RlbGVtZXRyeUV2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX1BST01QVF9VU0VSQ0xPU0VELCB1bmRlZmluZWQgLyogY2xpZW50RmVlZGJhY2tJZCAqLywgdW5kZWZpbmVkIC8qIGlzRW1haWxQb2xpY3lFbmFibGVkICovLFxyXG5cdFx0XHRFbmRVc2VyQWN0aW9ucy5DYW5jZWwsIFBlcnNvbmFsaXplckNsaWVudC5nZXQoKS5nZXRFdmVudElkRm9yU3VydmV5SWQoQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRJZCgpKSxcclxuXHRcdFx0YXV0b0Rpc21pc3NWYWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0bG9nVGVsZW1ldHJ5RXZlbnQoaXNQcm9tcHRVcCA/IExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX1BST01QVF9VU0VSQ0xPU0VEIDogTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfRk9STV9VU0VSQ0xPU0VELFxyXG5cdFx0dW5kZWZpbmVkIC8qIGNsaWVudEZlZWRiYWNrSWQgKi8sIHVuZGVmaW5lZCAvKiBpc0VtYWlsUG9saWN5RW5hYmxlZCAqLyxcclxuXHRcdHVuZGVmaW5lZCAvKiBhY3Rpb24gKi8sIHVuZGVmaW5lZCAvKiBQZXJzb25hbGl6ZXJFdmVudElkICovLCBhdXRvRGlzbWlzc1ZhbHVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xlYXJBdXRvRGlzbWlzcygpOiB2b2lkIHtcclxuXHRpZiAodGltZXJBdXRvRGlzbWlzcykge1xyXG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyQXV0b0Rpc21pc3MpO1xyXG5cdFx0dGltZXJBdXRvRGlzbWlzcyA9IDA7XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9tcHRDb250YWluZXJIYW5kbGVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG5cdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG5cdGlmIChDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldFN1cnZleVR5cGUoKSA9PT0gQXBpLklTdXJ2ZXkuVHlwZS5JbnRlcmNlcHQpIHtcclxuXHRcdGludGVyY2VwdEhhbmRsZXIoKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0c2hvd1N1cnZleVNjcmVlbigpO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gaW50ZXJjZXB0SGFuZGxlcigpOiB2b2lkIHtcclxuXHRjb25zdCBzdWNjZXNzID0gb3BlbkluTmV3VGFiKENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0SW50ZXJjZXB0VXJsKCkpO1xyXG5cdGRpc21pc3NBbGwoZmFsc2UpO1xyXG5cclxuXHQvLyBMb2dnaW5nIGFjY29yZGluZyB0byBpZiBvcGVuaW5nIHRoZSB0YWIgaXMgc3VjY2Vzc2Z1bC4gXHJcblx0aWYgKHN1Y2Nlc3MpIHtcclxuXHRcdGxvZ1RlbGVtZXRyeUV2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX1BST01QVF9DTElDS0VEKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0bG9nVGVsZW1ldHJ5RXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfUkVESVJFQ1RJT05GQUlMVVJFKTtcclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9wZW5Jbk5ld1RhYih1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IHdpbiA9IHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XHJcblx0aWYgKGlzTk9VKHdpbikpIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0d2luLmZvY3VzKCk7XHJcblx0cmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3dTdXJ2ZXlTY3JlZW4oKTogdm9pZCB7XHJcblx0aXNQcm9tcHRVcCA9IGZhbHNlO1xyXG5cclxuXHRVaVV0aWxzLnNldEVsZW1lbnRWaXNpYmlsaXR5KElEcy5UUHJvbXB0Q29udGFpbmVyLCBmYWxzZSk7XHJcblx0VWlVdGlscy5zZXRFbGVtZW50VmlzaWJpbGl0eShJRHMuVEZvcm1Db250YWluZXIsIHRydWUpO1xyXG5cclxuXHQvLyBBZGRpbmcgVG9hc3Rab29tIGNsYXNzIHRvIHRvYXN0Q29udGFpbmVyLiBUaGlzIGhhbmRsZXMgem9vbSBhbmQgc21hbGwgc2NyZWVuIGFjY2VzaWJpbGl0eS5cclxuXHQvLyBJdCBpcyBhZGRlZCBoZXJlIHNvIHRoYXQgaXQgZG9lc24ndCBhcHBseSB0byB0aGUgcHJvbXB0LlxyXG5cdFVpVXRpbHMuYWRkQ2xhc3NCeUlkKElEcy5Ub2FzdENvbnRhaW5lciwgQ2xhc3Nlcy5Ub2FzdFpvb20pO1xyXG5cclxuXHQvLyByZW1vdmUgdG9hc3QgY29udGFpbmVyJ3MgYWxlcnQgYXR0cmlidXRlIHdoZW4gYWZ0ZXIgdGhlIHVzZXIgY2xpY2sgdG9hc3QgYW5kIGZvcm0gaXMgc2hvd24sIHNvIHNjcmVlbiByZWFkZXJzXHJcblx0Ly8gbGlrZSBKQVdTIGRvZXNuJ3QgcmVwZWF0IGFsbCBjb21wb25lbnRzIG9uIHRoZSBmb3JtLlxyXG5cdGlmICgoXCIgXCIgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRHMuVEZvcm1Db250YWluZXIpLmNsYXNzTmFtZSArIFwiIFwiKS5pbmRleE9mKFwiIFwiICsgQ2xhc3Nlcy5WaXNpYmxlICsgXCIgXCIpID4gLTEpIHtcclxuXHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEcy5Ub2FzdENvbnRhaW5lcikuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcIlwiKTtcclxuXHR9XHJcblxyXG5cdC8vIEZvY3VzIHNob3VsZCBhbHdheXMgYmUgc2V0IHRvIGZpcnN0IHJhdGluZyBpdGVtIHNpbmNlIGFsbCBzdXBwb3J0ZWQgc3VydmV5cyBzaG93aW5nIGZvcm0gaGF2ZSByYXRpbmcgaXRlbXMgc28gZmFyLlxyXG5cdGNvbnN0IGZvcm1SYXRpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShJRHMuVEZvcm1SYXRpbmcpO1xyXG5cdGlmIChmb3JtUmF0aW5nICYmIGZvcm1SYXRpbmcubGVuZ3RoID4gMCkge1xyXG5cdFx0Zm9ybVJhdGluZ1swXS5mb2N1cygpO1xyXG5cdH1cclxuXHJcblx0aWYgKGlzUGVyc29uYWxpemVyRW5hYmxlZEhlbHBlcigpKSB7XHJcblx0XHQvLyBJZiBwZXJzb25hbGl6ZXIgaXMgZW5hYmxlZCwgY2FsbCB0byBub3RpZnkgdGhhdCB0aGUgcHJvbXB0IGhhcyBiZWVuIGNsaWNrZWQgKHdoaWNoIG1lYW5zIHVzZXIgaGFzIGFjY2VwdGVkKS5cclxuXHRcdFBlcnNvbmFsaXplckNsaWVudC5nZXQoKS5sb2dVc2VyQWN0aW9uRm9yU3VydmV5QXN5bmMoRW5kVXNlckFjdGlvbnMuQWNjZXB0LCBDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldElkKCksXHJcblx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0Q2FtcGFpZ25JZCgpKTtcclxuXHJcblx0XHRsb2dUZWxlbWV0cnlFdmVudChMb2dnaW5nLkV2ZW50SWRzLlNVUlZFWV9VSV9GT1JNX1NIT1dOLCB1bmRlZmluZWQgLyogY2xpZW50RmVlZGJhY2tJZCAqLywgdW5kZWZpbmVkIC8qIGlzRW1haWxQb2xpY3lFbmFibGVkICovLFxyXG5cdFx0XHRFbmRVc2VyQWN0aW9ucy5BY2NlcHQsIFBlcnNvbmFsaXplckNsaWVudC5nZXQoKS5nZXRFdmVudElkRm9yU3VydmV5SWQoQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRJZCgpKSxcclxuXHRcdFx0YXV0b0Rpc21pc3NWYWx1ZSk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxvZ1RlbGVtZXRyeUV2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU1VSVkVZX1VJX0ZPUk1fU0hPV04sIHVuZGVmaW5lZCAvKiBjbGllbnRGZWVkYmFja0lkICovLCB1bmRlZmluZWQgLyogaXNFbWFpbFBvbGljeUVuYWJsZWQgKi8sXHJcblx0XHRcdHVuZGVmaW5lZCAvKiBhY3Rpb24gKi8sIHVuZGVmaW5lZCAvKiBQZXJzb25hbGl6ZXJFdmVudElkICovLCBhdXRvRGlzbWlzc1ZhbHVlKTtcclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJhdGluZ0lucHV0SGFuZGxlcihldmVudDogRXZlbnQpOiB2b2lkIHtcclxuXHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLlRGb3JtU3VibWl0QnV0dG9uKSBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZGlzYWJsZWQgPSBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3VibWl0QnV0dG9uSGFuZGxlcihldmVudDogRXZlbnQpOiB2b2lkIHtcclxuXHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuXHRVaVV0aWxzLnNldEVsZW1lbnRWaXNpYmlsaXR5KElEcy5URm9ybVN1Ym1pdEJ1dHRvbiwgZmFsc2UpO1xyXG5cdGxldCBzcGlubmVyID0gbmV3IFNwaW5uZXIoSURzLlRGb3JtU3VibWl0QnV0dG9uU3Bpbm5lcik7XHJcblxyXG5cdGxldCB0cmFuc3BvcnRlcjogVHJhbnNwb3J0ZXIgPSBuZXcgVHJhbnNwb3J0ZXIoXHJcblx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkuZW52aXJvbm1lbnQsXHJcblx0XHRBcGkuSVN1cnZleS5UeXBlW0NvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0U3VydmV5VHlwZSgpXSxcclxuXHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS5hcHBJZCxcclxuXHRcdFwiU3VydmV5XCIsXHJcblx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldENvbW1vbkluaXRPcHRpb25zKCkuYXBwbGljYXRpb25Hcm91cCxcclxuXHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS50ZWxlbWV0cnlHcm91cCxcclxuXHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Q29tbW9uSW5pdE9wdGlvbnMoKS53ZWJHcm91cFxyXG5cdCk7XHJcblxyXG5cdGxldCBjb21tZW50RWxlbWVudDogSFRNTFRleHRBcmVhRWxlbWVudCA9IDxIVE1MVGV4dEFyZWFFbGVtZW50PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChJRHMuVEZvcm1Db21tZW50KTtcclxuXHRsZXQgY29tbWVudEVudGVyZWQ6IGJvb2xlYW4gPSAoY29tbWVudEVsZW1lbnQgJiYgISFjb21tZW50RWxlbWVudC52YWx1ZSk7XHJcblxyXG5cdGxldCBzZWxlY3RlZFJhdGluZzogSFRNTElucHV0RWxlbWVudCA9XHJcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbbmFtZT1cXFwiXCIgKyBJRHMuVEZvcm1SYXRpbmcgKyBcIlxcXCJdOmNoZWNrZWRcIikgYXMgSFRNTElucHV0RWxlbWVudDtcclxuXHJcblx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5zZXRWYWx1ZXMoXHJcblx0XHROdW1iZXIoc2VsZWN0ZWRSYXRpbmcudmFsdWUpLFxyXG5cdFx0Y29tbWVudEVudGVyZWQgPyBjb21tZW50RWxlbWVudC52YWx1ZSA6IFwiXCJcclxuXHQpO1xyXG5cclxuXHQvLyBBZGQgc3VydmV5LXNwZWNpZmljIGRhdGEgdG8gbWFuaWZlc3RcclxuXHR0cmFuc3BvcnRlci5zZXRNYW5pZmVzdFZhbHVlcyhDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldEpzb25FbGVtZW50cygpKTtcclxuXHJcblx0Ly8gU2VuZCBlbWFpbCBhZGRyZXNzIGlmIHVzZXIgZ2l2ZXMgY29uc2VudFxyXG5cdGxldCBlbWFpbENoZWNrQm94OiBIVE1MSW5wdXRFbGVtZW50ID0gPEhUTUxJbnB1dEVsZW1lbnQ+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEcy5URm9ybUVtYWlsQ2hlY2tCb3gpO1xyXG5cdGxldCBlbWFpbFRleHRCb3g6IEhUTUxJbnB1dEVsZW1lbnQgPSA8SFRNTElucHV0RWxlbWVudD4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSURzLlRGb3JtRW1haWxUZXh0Qm94KTtcclxuXHJcblx0aWYgKGVtYWlsQ2hlY2tCb3ggJiYgZW1haWxDaGVja0JveC5jaGVja2VkICYmIGVtYWlsVGV4dEJveC52YWx1ZSAhPT0gXCJcIikge1xyXG5cdFx0dHJhbnNwb3J0ZXIuc2V0RW1haWwoZW1haWxUZXh0Qm94LnZhbHVlKTtcclxuXHR9XHJcblxyXG5cdHRyYW5zcG9ydGVyLnN1Ym1pdCgpO1xyXG5cdHNwaW5uZXIuZGVzdHJveSgpO1xyXG5cdGRpc21pc3NBbGwodHJ1ZSk7XHJcblx0bG9nVGVsZW1ldHJ5RXZlbnQoTG9nZ2luZy5FdmVudElkcy5TVVJWRVlfVUlfRk9STV9TVUJNSVQsIHRyYW5zcG9ydGVyLmdldENsaWVudEZlZWRiYWNrSWQoKSxcclxuXHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlSW5pdE9wdGlvbnMoKS5zaG93RW1haWxBZGRyZXNzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNQZXJzb25hbGl6ZXJFbmFibGVkSGVscGVyKCk6IGJvb2xlYW4ge1xyXG5cdHJldHVybiBQZXJzb25hbGl6ZXJDbGllbnQuZ2V0KCkuaXNFbmFibGVkKENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0U3VydmV5VHlwZSgpLFxyXG5cdFx0Q29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRMYXVuY2hlclR5cGUoKSxcclxuXHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0R292ZXJlbmVkQ2hhbm5lbFR5cGUoKSk7XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/UI/Toast/Events.ts\n')},"./scripts/app/UI/Toast/Layout.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return generate; });\n/* harmony import */ var _ChoiceGroupControl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../ChoiceGroupControl */ "./scripts/app/UI/ChoiceGroupControl.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../UIStrings/UIStrings */ "./scripts/app/UIStrings/UIStrings.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../Utils */ "./scripts/app/UI/Utils.ts");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore/dist/src/Api/Api */ "../FloodgateCore/dist/src/Api/Api.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_5__);\n/**\r\n * Layout.ts\r\n *\r\n * Module for the layout\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Generates the toast\r\n *\r\n * @returns {Renderer.IUIAsJson} Renderer.IUIAsJson object\r\n */\r\nfunction generate() {\r\n    var schema = {\r\n        attributes: [\r\n            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].DataHtml2CanvasIgnore, value: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeValue"].True },\r\n            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].Role, value: "alert" },\r\n            { name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].Style, value: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCSSVarString() },\r\n        ],\r\n        children: [\r\n            generatePrompt(),\r\n            {\r\n                attributes: [\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].Type, value: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeValue"].Button },\r\n                    { name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].AriaLabel, value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_3__["getUIStrings"]().CloseLabel },\r\n                ],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].ToastCancel,\r\n                // tslint:disable-next-line:max-line-length\r\n                innerHTML: \'<svg viewBox="4 4 16 16" width="16px" height="16px" focusable="false"><path d="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/><\/svg>\',\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Button,\r\n            },\r\n            (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getSurveyType() !== _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_5__["ISurvey"].Type.Intercept) ? generateForm() : {},\r\n        ],\r\n        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].Toast, _Utils__WEBPACK_IMPORTED_MODULE_4__["isRightToLeft"]() ? _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].Rtl : ""],\r\n        id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].ToastContainer,\r\n    };\r\n    return schema;\r\n}\r\nfunction generatePrompt() {\r\n    // Checking if the campaign is an intercept one to render the relevant prompt strings.\r\n    var isIntercept = (_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getSurveyType() === _ms_ofb_officefloodgatecore_dist_src_Api_Api__WEBPACK_IMPORTED_MODULE_5__["ISurvey"].Type.Intercept);\r\n    var promptSchema = {\r\n        children: [\r\n            {\r\n                classes: [\r\n                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].FontText,\r\n                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].TextAlignLeft,\r\n                ],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TPromptTitle,\r\n                innerText: isIntercept ?\r\n                    _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getInterceptTitle() :\r\n                    _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getTitle(),\r\n            },\r\n            {\r\n                classes: [\r\n                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].FontSubText,\r\n                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].TextAlignLeft,\r\n                ],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TPromptText,\r\n                innerText: isIntercept ?\r\n                    _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getInterceptQuestion() :\r\n                    _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getPromptQuestion(),\r\n            },\r\n        ],\r\n        id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TPromptContainer,\r\n        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Button,\r\n    };\r\n    return promptSchema;\r\n}\r\nfunction generateForm() {\r\n    var formSchema = {\r\n        children: [\r\n            {\r\n                classes: [\r\n                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].FontText,\r\n                    _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].TextAlignLeft,\r\n                ],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TFormTitle,\r\n                innerText: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getTitle(),\r\n            },\r\n            generateRatingControl(),\r\n            {\r\n                attributes: [\r\n                    {\r\n                        name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].Placeholder,\r\n                        value: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getCommentQuestion(),\r\n                    },\r\n                    {\r\n                        name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].AriaLabel,\r\n                        value: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getCommentQuestion(),\r\n                    },\r\n                    {\r\n                        name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].MaxLength,\r\n                        value: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeValue"].TextAreaMaxLength,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].FontSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].TextInput],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TFormComment,\r\n                tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].TextArea,\r\n            },\r\n            {\r\n                brs: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateInitOptions().showEmailAddress && _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().showEmailRequest,\r\n                children: [\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].Type,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeValue"].Checkbox,\r\n                            },\r\n                        ],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].TFormEmailCheckbox, _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].CheckBox],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TFormEmailCheckBox,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Input,\r\n                    },\r\n                    {\r\n                        attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].For, value: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TFormEmailCheckBox }],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].FontSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].TextAlignLeft, _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].TFormEmailLabel],\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_3__["getUIStrings"]().Form.EmailCheckBoxLabel,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Label,\r\n                    },\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].Type,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeValue"].Text,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].Placeholder,\r\n                                value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_3__["getUIStrings"]().Form.EmailPlaceholder,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].AriaLabel,\r\n                                value: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_3__["getUIStrings"]().Form.EmailPlaceholder,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].Name,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].BasicFormEmailInput,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].MaxLength,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeValue"].TextAreaMaxLength,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].Value,\r\n                                value: "",\r\n                            },\r\n                        ],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].FontSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].FormEmailInput, _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].TextInput],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TFormEmailTextBox,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Input,\r\n                    },\r\n                ],\r\n            },\r\n            {\r\n                children: [\r\n                    {\r\n                        attributes: [\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].HRef,\r\n                                value: _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getCommonInitOptions().privacyUrl,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].Target,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeValue"].BlankWindow,\r\n                            },\r\n                            {\r\n                                name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].Rel,\r\n                                value: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeValue"].NoReferrer,\r\n                            },\r\n                        ],\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].Link],\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_3__["getUIStrings"]().PrivacyStatement,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Anchor,\r\n                    },\r\n                ],\r\n                classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].FontSubSubText, _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].TextAlignLeft, _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].PrivacyStatementLinkDiv],\r\n            },\r\n            {\r\n                children: [\r\n                    {\r\n                        attributes: [{ name: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeName"].Disabled, value: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["AttributeValue"].True }],\r\n                        classes: [\r\n                            _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].FontSubText,\r\n                            _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].SubmitButton,\r\n                        ],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TFormSubmitButton,\r\n                        innerText: _UIStrings_UIStrings__WEBPACK_IMPORTED_MODULE_3__["getUIStrings"]().Form.Submit,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Button,\r\n                    },\r\n                    {\r\n                        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].Spinner, _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].Hidden],\r\n                        id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TFormSubmitButtonSpinner,\r\n                        tag: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["Tags"].Div,\r\n                    },\r\n                ],\r\n                id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TFormSubmitButtonContainer,\r\n            },\r\n        ],\r\n        classes: [_UiConstants__WEBPACK_IMPORTED_MODULE_2__["Classes"].Hidden],\r\n        id: _UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TFormContainer,\r\n    };\r\n    return formSchema;\r\n}\r\nfunction generateRatingControl() {\r\n    var _a;\r\n    var choices = [];\r\n    var ratingValues = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getRatingValuesAscending();\r\n    var index = 0;\r\n    for (var _i = 0, ratingValues_1 = ratingValues; _i < ratingValues_1.length; _i++) {\r\n        var ratingValue = ratingValues_1[_i];\r\n        choices.push([index, ratingValue]);\r\n        index++;\r\n    }\r\n    // Ratings need to be shown in descending order\r\n    return _ChoiceGroupControl__WEBPACK_IMPORTED_MODULE_0__["generateRadioGroup"](_UiConstants__WEBPACK_IMPORTED_MODULE_2__["IDs"].TFormRating, (_a = _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_1__["get"]().getFloodgateSurvey().getRatingQuestion()) === null || _a === void 0 ? void 0 : _a.trim(), choices.reverse());\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9Ub2FzdC9MYXlvdXQudHM/ODA4NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRzJEO0FBQ087QUFDZ0I7QUFDNUI7QUFDckI7QUFDZ0M7QUFFcEU7Ozs7R0FJRztBQUNJLFNBQVMsUUFBUTtJQUN2QixJQUFJLE1BQU0sR0FBdUI7UUFDaEMsVUFBVSxFQUFFO1lBQ1gsRUFBRSxJQUFJLEVBQUUsMERBQWEsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsMkRBQWMsQ0FBQyxJQUFJLEVBQUU7WUFDekUsRUFBRSxJQUFJLEVBQUUsMERBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUM1QyxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsZ0VBQWlCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsRUFBQztTQUMxRTtRQUNELFFBQVEsRUFBRTtZQUNULGNBQWMsRUFBRTtZQUNoQjtnQkFDQyxVQUFVLEVBQUU7b0JBQ1gsRUFBRSxJQUFJLEVBQUUsMERBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLDJEQUFjLENBQUMsTUFBTSxFQUFFO29CQUMxRCxFQUFFLElBQUksRUFBRSwwREFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUVBQXNCLEVBQUUsQ0FBQyxVQUFVLEVBQUU7aUJBQzdFO2dCQUNELEVBQUUsRUFBRSxnREFBRyxDQUFDLFdBQVc7Z0JBQ25CLDJDQUEyQztnQkFDM0MsU0FBUyxFQUFFLCtMQUErTDtnQkFDMU0sR0FBRyxFQUFFLGlEQUFJLENBQUMsTUFBTTthQUNoQjtZQUNELENBQUMsZ0VBQWlCLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLGFBQWEsRUFBRSxLQUFLLG9GQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFD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Q0FBQztRQUNuQyxLQUFLLEVBQUUsQ0FBQztLQUNSO0lBRUQsK0NBQStDO0lBQy9DLE9BQU8sc0VBQXFDLENBQUMsZ0RBQUcsQ0FBQyxXQUFXLFFBQzNELGdFQUFpQixFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSwwQ0FBRSxJQUFJLElBQ2xFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9VSS9Ub2FzdC9MYXlvdXQudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogTGF5b3V0LnRzXHJcbiAqXHJcbiAqIE1vZHVsZSBmb3IgdGhlIGxheW91dFxyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIFJlbmRlcmVyIGZyb20gXCIuLy4uL1JlbmRlcmVyXCI7XHJcbmltcG9ydCAqIGFzIENob2ljZUdyb3VwQ29udHJvbCBmcm9tIFwiLi8uLi9DaG9pY2VHcm91cENvbnRyb2xcIjtcclxuaW1wb3J0ICogYXMgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi8uLi8uLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHsgQXR0cmlidXRlTmFtZSwgQXR0cmlidXRlVmFsdWUsIENsYXNzZXMsIElEcywgVGFncyB9IGZyb20gXCIuLy4uL1VpQ29uc3RhbnRzXCI7XHJcbmltcG9ydCAqIGFzIFVJU3RyaW5ncyBmcm9tIFwiLi8uLi8uLi9VSVN0cmluZ3MvVUlTdHJpbmdzXCI7XHJcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gXCIuLy4uL1V0aWxzXCI7XHJcbmltcG9ydCAqIGFzIEFwaSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9BcGlcIjtcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgdGhlIHRvYXN0XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtSZW5kZXJlci5JVUlBc0pzb259IFJlbmRlcmVyLklVSUFzSnNvbiBvYmplY3RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZSgpOiBSZW5kZXJlci5JVUlBc0pzb24ge1xyXG5cdGxldCBzY2hlbWE6IFJlbmRlcmVyLklVSUFzSnNvbiA9IHtcclxuXHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLkRhdGFIdG1sMkNhbnZhc0lnbm9yZSwgdmFsdWU6IEF0dHJpYnV0ZVZhbHVlLlRydWUgfSxcclxuXHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlJvbGUsIHZhbHVlOiBcImFsZXJ0XCIgfSxcclxuXHRcdFx0eyBuYW1lOiBBdHRyaWJ1dGVOYW1lLlN0eWxlLCB2YWx1ZTogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDU1NWYXJTdHJpbmcoKX0sXHJcblx0XHRdLFxyXG5cdFx0Y2hpbGRyZW46IFtcclxuXHRcdFx0Z2VuZXJhdGVQcm9tcHQoKSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0XHRcdHsgbmFtZTogQXR0cmlidXRlTmFtZS5UeXBlLCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuQnV0dG9uIH0sXHJcblx0XHRcdFx0XHR7IG5hbWU6IEF0dHJpYnV0ZU5hbWUuQXJpYUxhYmVsLCB2YWx1ZTogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkNsb3NlTGFiZWwgfSxcclxuXHRcdFx0XHRdLFxyXG5cdFx0XHRcdGlkOiBJRHMuVG9hc3RDYW5jZWwsXHJcblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG5cdFx0XHRcdGlubmVySFRNTDogJzxzdmcgdmlld0JveD1cIjQgNCAxNiAxNlwiIHdpZHRoPVwiMTZweFwiIGhlaWdodD1cIjE2cHhcIiBmb2N1c2FibGU9XCJmYWxzZVwiPjxwYXRoIGQ9XCJNMTksNi40MUwxNy41OSw1IDEyLDEwLjU5IDYuNDEsNSA1LDYuNDEgMTAuNTksMTIgNSwxNy41OSA2LjQxLDE5IDEyLDEzLjQxIDE3LjU5LDE5IDE5LDE3LjU5IDEzLjQxLDEyelwiLz48L3N2Zz4nLFxyXG5cdFx0XHRcdHRhZzogVGFncy5CdXR0b24sXHJcblx0XHRcdH0sXHJcblx0XHRcdChDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldFN1cnZleVR5cGUoKSAhPT0gQXBpLklTdXJ2ZXkuVHlwZS5JbnRlcmNlcHQpID8gZ2VuZXJhdGVGb3JtKCkgOiB7fSxcclxuXHRcdF0sXHJcblx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5Ub2FzdCwgVXRpbHMuaXNSaWdodFRvTGVmdCgpID8gQ2xhc3Nlcy5SdGwgOiBcIlwiXSxcclxuXHRcdGlkOiBJRHMuVG9hc3RDb250YWluZXIsXHJcblx0fTtcclxuXHRyZXR1cm4gc2NoZW1hO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZVByb21wdCgpOiBSZW5kZXJlci5JVUlBc0pzb24ge1xyXG5cdC8vIENoZWNraW5nIGlmIHRoZSBjYW1wYWlnbiBpcyBhbiBpbnRlcmNlcHQgb25lIHRvIHJlbmRlciB0aGUgcmVsZXZhbnQgcHJvbXB0IHN0cmluZ3MuXHJcblx0Y29uc3QgaXNJbnRlcmNlcHQgPSAoQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRTdXJ2ZXlUeXBlKCkgPT09IEFwaS5JU3VydmV5LlR5cGUuSW50ZXJjZXB0KTtcclxuXHJcblx0bGV0IHByb21wdFNjaGVtYTogUmVuZGVyZXIuSVVJQXNKc29uID0ge1xyXG5cdFx0Y2hpbGRyZW46IFtcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzZXM6IFtcclxuXHRcdFx0XHRcdENsYXNzZXMuRm9udFRleHQsXHJcblx0XHRcdFx0XHRDbGFzc2VzLlRleHRBbGlnbkxlZnQsXHJcblx0XHRcdFx0XSxcclxuXHRcdFx0XHRpZDogSURzLlRQcm9tcHRUaXRsZSxcclxuXHRcdFx0XHRpbm5lclRleHQ6IGlzSW50ZXJjZXB0ID9cclxuXHRcdFx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0SW50ZXJjZXB0VGl0bGUoKSA6XHJcblx0XHRcdFx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldFRpdGxlKCksXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjbGFzc2VzOiBbXHJcblx0XHRcdFx0XHRDbGFzc2VzLkZvbnRTdWJUZXh0LFxyXG5cdFx0XHRcdFx0Q2xhc3Nlcy5UZXh0QWxpZ25MZWZ0LFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0aWQ6IElEcy5UUHJvbXB0VGV4dCxcclxuXHRcdFx0XHRpbm5lclRleHQ6IGlzSW50ZXJjZXB0ID9cclxuXHRcdFx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0SW50ZXJjZXB0UXVlc3Rpb24oKSA6XHJcblx0XHRcdFx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldFByb21wdFF1ZXN0aW9uKCksXHJcblx0XHRcdH0sXHJcblx0XHRdLFxyXG5cdFx0aWQ6IElEcy5UUHJvbXB0Q29udGFpbmVyLFxyXG5cdFx0dGFnOiBUYWdzLkJ1dHRvbixcclxuXHR9O1xyXG5cclxuXHRyZXR1cm4gcHJvbXB0U2NoZW1hO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZUZvcm0oKTogUmVuZGVyZXIuSVVJQXNKc29uIHtcclxuXHRsZXQgZm9ybVNjaGVtYTogUmVuZGVyZXIuSVVJQXNKc29uID0ge1xyXG5cdFx0Y2hpbGRyZW46IFtcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzZXM6IFtcclxuXHRcdFx0XHRcdENsYXNzZXMuRm9udFRleHQsXHJcblx0XHRcdFx0XHRDbGFzc2VzLlRleHRBbGlnbkxlZnQsXHJcblx0XHRcdFx0XSxcclxuXHRcdFx0XHRpZDogSURzLlRGb3JtVGl0bGUsXHJcblx0XHRcdFx0aW5uZXJUZXh0OiBDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldFRpdGxlKCksXHJcblx0XHRcdH0sXHJcblx0XHRcdGdlbmVyYXRlUmF0aW5nQ29udHJvbCgpLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0YXR0cmlidXRlczogW1xyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLlBsYWNlaG9sZGVyLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRDb21tZW50UXVlc3Rpb24oKSxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuQXJpYUxhYmVsLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRDb21tZW50UXVlc3Rpb24oKSxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuTWF4TGVuZ3RoLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTogQXR0cmlidXRlVmFsdWUuVGV4dEFyZWFNYXhMZW5ndGgsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFN1YlRleHQsIENsYXNzZXMuVGV4dElucHV0XSxcclxuXHRcdFx0XHRpZDogSURzLlRGb3JtQ29tbWVudCxcclxuXHRcdFx0XHR0YWc6IFRhZ3MuVGV4dEFyZWEsXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRicnM6IENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlSW5pdE9wdGlvbnMoKS5zaG93RW1haWxBZGRyZXNzICYmIENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuc2hvd0VtYWlsUmVxdWVzdCxcclxuXHRcdFx0XHRjaGlsZHJlbjogW1xyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBbXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IEF0dHJpYnV0ZVZhbHVlLkNoZWNrYm94LFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLlRGb3JtRW1haWxDaGVja2JveCwgQ2xhc3Nlcy5DaGVja0JveF0sXHJcblx0XHRcdFx0XHRcdGlkOiBJRHMuVEZvcm1FbWFpbENoZWNrQm94LFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuSW5wdXQsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBbeyBuYW1lOiBBdHRyaWJ1dGVOYW1lLkZvciwgdmFsdWU6IElEcy5URm9ybUVtYWlsQ2hlY2tCb3ggfV0sXHJcblx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkZvbnRTdWJUZXh0LCBDbGFzc2VzLlRleHRBbGlnbkxlZnQsIENsYXNzZXMuVEZvcm1FbWFpbExhYmVsXSxcclxuXHRcdFx0XHRcdFx0aW5uZXJUZXh0OiBVSVN0cmluZ3MuZ2V0VUlTdHJpbmdzKCkuRm9ybS5FbWFpbENoZWNrQm94TGFiZWwsXHJcblx0XHRcdFx0XHRcdHRhZzogVGFncy5MYWJlbCxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLlR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogQXR0cmlidXRlVmFsdWUuVGV4dCxcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuUGxhY2Vob2xkZXIsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkZvcm0uRW1haWxQbGFjZWhvbGRlcixcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuQXJpYUxhYmVsLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IFVJU3RyaW5ncy5nZXRVSVN0cmluZ3MoKS5Gb3JtLkVtYWlsUGxhY2Vob2xkZXIsXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLk5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogSURzLkJhc2ljRm9ybUVtYWlsSW5wdXQsXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLk1heExlbmd0aCxcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZS5UZXh0QXJlYU1heExlbmd0aCxcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IEF0dHJpYnV0ZU5hbWUuVmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRjbGFzc2VzOiBbQ2xhc3Nlcy5Gb250U3ViVGV4dCwgQ2xhc3Nlcy5Gb3JtRW1haWxJbnB1dCwgQ2xhc3Nlcy5UZXh0SW5wdXRdLFxyXG5cdFx0XHRcdFx0XHRpZDogSURzLlRGb3JtRW1haWxUZXh0Qm94LFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuSW5wdXQsXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdF0sXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjaGlsZHJlbjpcclxuXHRcdFx0XHRcdFtcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdGF0dHJpYnV0ZXM6IFtcclxuXHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5IUmVmLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRDb21tb25Jbml0T3B0aW9ucygpLnByaXZhY3lVcmwsXHJcblx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBBdHRyaWJ1dGVOYW1lLlRhcmdldCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IEF0dHJpYnV0ZVZhbHVlLkJsYW5rV2luZG93LFxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogQXR0cmlidXRlTmFtZS5SZWwsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZS5Ob1JlZmVycmVyLFxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM6IFtDbGFzc2VzLkxpbmtdLFxyXG5cdFx0XHRcdFx0XHRcdGlubmVyVGV4dDogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLlByaXZhY3lTdGF0ZW1lbnQsXHJcblx0XHRcdFx0XHRcdFx0dGFnOiBUYWdzLkFuY2hvcixcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuRm9udFN1YlN1YlRleHQsIENsYXNzZXMuVGV4dEFsaWduTGVmdCwgQ2xhc3Nlcy5Qcml2YWN5U3RhdGVtZW50TGlua0Rpdl0sXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjaGlsZHJlbjogW1xyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRhdHRyaWJ1dGVzOiBbeyBuYW1lOiBBdHRyaWJ1dGVOYW1lLkRpc2FibGVkLCB2YWx1ZTogQXR0cmlidXRlVmFsdWUuVHJ1ZSB9XSxcclxuXHRcdFx0XHRcdFx0Y2xhc3NlczogW1xyXG5cdFx0XHRcdFx0XHRcdENsYXNzZXMuRm9udFN1YlRleHQsXHJcblx0XHRcdFx0XHRcdFx0Q2xhc3Nlcy5TdWJtaXRCdXR0b24sXHJcblx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdGlkOiBJRHMuVEZvcm1TdWJtaXRCdXR0b24sXHJcblx0XHRcdFx0XHRcdGlubmVyVGV4dDogVUlTdHJpbmdzLmdldFVJU3RyaW5ncygpLkZvcm0uU3VibWl0LFxyXG5cdFx0XHRcdFx0XHR0YWc6IFRhZ3MuQnV0dG9uLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0Y2xhc3NlczogW0NsYXNzZXMuU3Bpbm5lciwgQ2xhc3Nlcy5IaWRkZW5dLFxyXG5cdFx0XHRcdFx0XHRpZDogSURzLlRGb3JtU3VibWl0QnV0dG9uU3Bpbm5lcixcclxuXHRcdFx0XHRcdFx0dGFnOiBUYWdzLkRpdixcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XSxcclxuXHRcdFx0XHRpZDogSURzLlRGb3JtU3VibWl0QnV0dG9uQ29udGFpbmVyLFxyXG5cdFx0XHR9LFxyXG5cdFx0XSxcclxuXHRcdGNsYXNzZXM6IFtDbGFzc2VzLkhpZGRlbl0sXHJcblx0XHRpZDogSURzLlRGb3JtQ29udGFpbmVyLFxyXG5cdH07XHJcblxyXG5cdHJldHVybiBmb3JtU2NoZW1hO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZVJhdGluZ0NvbnRyb2woKTogUmVuZGVyZXIuSVVJQXNKc29uIHtcclxuXHRsZXQgY2hvaWNlczogW251bWJlciwgc3RyaW5nXVtdID0gW107XHJcblxyXG5cdGxldCByYXRpbmdWYWx1ZXM6IHN0cmluZ1tdID0gQ29uZmlndXJhdGlvbi5nZXQoKS5nZXRGbG9vZGdhdGVTdXJ2ZXkoKS5nZXRSYXRpbmdWYWx1ZXNBc2NlbmRpbmcoKTtcclxuXHRsZXQgaW5kZXggPSAwO1xyXG5cclxuXHRmb3IgKGxldCByYXRpbmdWYWx1ZSBvZiByYXRpbmdWYWx1ZXMpIHtcclxuXHRcdGNob2ljZXMucHVzaChbaW5kZXgsIHJhdGluZ1ZhbHVlXSk7XHJcblx0XHRpbmRleCsrO1xyXG5cdH1cclxuXHJcblx0Ly8gUmF0aW5ncyBuZWVkIHRvIGJlIHNob3duIGluIGRlc2NlbmRpbmcgb3JkZXJcclxuXHRyZXR1cm4gQ2hvaWNlR3JvdXBDb250cm9sLmdlbmVyYXRlUmFkaW9Hcm91cChJRHMuVEZvcm1SYXRpbmcsXHJcblx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZVN1cnZleSgpLmdldFJhdGluZ1F1ZXN0aW9uKCk/LnRyaW0oKSxcclxuXHRcdGNob2ljZXMucmV2ZXJzZSgpKTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/UI/Toast/Layout.ts\n')},"./scripts/app/UI/Toast/Toast.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createSurvey", function() { return createSurvey; });\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _Events__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Events */ "./scripts/app/UI/Toast/Events.ts");\n/* harmony import */ var _Layout__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Layout */ "./scripts/app/UI/Toast/Layout.ts");\n/* harmony import */ var _Renderer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../Renderer */ "./scripts/app/UI/Renderer.ts");\n/* harmony import */ var _Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../Utils */ "./scripts/app/UI/Utils.ts");\n/* harmony import */ var _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../Configuration/Configuration */ "./scripts/app/Configuration/Configuration.ts");\n/**\r\n * Toast.ts\r\n *\r\n * Module for the Toast UI\r\n */\r\n\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * UI initialization for toast\r\n */\r\nfunction createSurvey(onClose) {\r\n    create(_Renderer__WEBPACK_IMPORTED_MODULE_3__["elementFromJson"](_Layout__WEBPACK_IMPORTED_MODULE_2__["generate"]()));\r\n    _Events__WEBPACK_IMPORTED_MODULE_1__["register"](function (submitted) {\r\n        _Utils__WEBPACK_IMPORTED_MODULE_4__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].ToastContainer, false);\r\n        _Utils__WEBPACK_IMPORTED_MODULE_4__["deleteElementById"](_UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].ToastContainer);\r\n        _Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateInitOptions().onDismiss(_Configuration_Configuration__WEBPACK_IMPORTED_MODULE_5__["get"]().getFloodgateSurvey().getCampaignId(), submitted);\r\n        onClose();\r\n    });\r\n}\r\nfunction create(userInterface) {\r\n    document.body.insertBefore(userInterface, document.body.firstChild);\r\n    _Utils__WEBPACK_IMPORTED_MODULE_4__["setElementVisibility"](_UiConstants__WEBPACK_IMPORTED_MODULE_0__["IDs"].ToastContainer, true);\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9Ub2FzdC9Ub2FzdC50cz80MTYzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRW9DO0FBQ0o7QUFDQTtBQUNPO0FBQ047QUFDaUM7QUFFckU7O0dBRUc7QUFDSSxTQUFTLFlBQVksQ0FBQyxPQUFtQjtJQUMvQyxNQUFNLENBQUMseURBQXdCLENBQUMsZ0RBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRCxnREFBZSxDQUNkLFVBQVUsU0FBa0I7UUFDM0IsMkRBQTBCLENBQUMsZ0RBQUcsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEQsd0RBQXVCLENBQUMsZ0RBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QyxnRUFBaUIsRUFBRSxDQUFDLHVCQUF1QixFQUFFLENBQUMsU0FBUyxDQUN0RCxnRUFBaUIsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsYUFBYSxFQUFFLEVBQ3hELFNBQVMsQ0FDVCxDQUFDO1FBQ0YsT0FBTyxFQUFFLENBQUM7SUFDWCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxhQUFzQjtJQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVwRSwyREFBMEIsQ0FBQyxnREFBRyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVUkvVG9hc3QvVG9hc3QudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVG9hc3QudHNcclxuICpcclxuICogTW9kdWxlIGZvciB0aGUgVG9hc3QgVUlcclxuICovXHJcblxyXG5pbXBvcnQgeyBJRHMgfSBmcm9tIFwiLi8uLi9VaUNvbnN0YW50c1wiO1xyXG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSBcIi4vRXZlbnRzXCI7XHJcbmltcG9ydCAqIGFzIExheW91dCBmcm9tIFwiLi9MYXlvdXRcIjtcclxuaW1wb3J0ICogYXMgUmVuZGVyZXIgZnJvbSBcIi4vLi4vUmVuZGVyZXJcIjtcclxuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSBcIi4vLi4vVXRpbHNcIjtcclxuaW1wb3J0ICogYXMgQ29uZmlndXJhdGlvbiBmcm9tIFwiLi8uLi8uLi9Db25maWd1cmF0aW9uL0NvbmZpZ3VyYXRpb25cIjtcclxuXHJcbi8qKlxyXG4gKiBVSSBpbml0aWFsaXphdGlvbiBmb3IgdG9hc3RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdXJ2ZXkob25DbG9zZTogKCkgPT4gdm9pZCkge1xyXG5cdGNyZWF0ZShSZW5kZXJlci5lbGVtZW50RnJvbUpzb24oTGF5b3V0LmdlbmVyYXRlKCkpKTtcclxuXHRFdmVudHMucmVnaXN0ZXIoXHJcblx0XHRmdW5jdGlvbiAoc3VibWl0dGVkOiBib29sZWFuKSB7XHJcblx0XHRcdFV0aWxzLnNldEVsZW1lbnRWaXNpYmlsaXR5KElEcy5Ub2FzdENvbnRhaW5lciwgZmFsc2UpO1xyXG5cdFx0XHRVdGlscy5kZWxldGVFbGVtZW50QnlJZChJRHMuVG9hc3RDb250YWluZXIpO1xyXG5cdFx0XHRDb25maWd1cmF0aW9uLmdldCgpLmdldEZsb29kZ2F0ZUluaXRPcHRpb25zKCkub25EaXNtaXNzKFxyXG5cdFx0XHRcdENvbmZpZ3VyYXRpb24uZ2V0KCkuZ2V0Rmxvb2RnYXRlU3VydmV5KCkuZ2V0Q2FtcGFpZ25JZCgpLFxyXG5cdFx0XHRcdHN1Ym1pdHRlZFxyXG5cdFx0XHQpO1xyXG5cdFx0XHRvbkNsb3NlKCk7XHJcblx0XHR9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlKHVzZXJJbnRlcmZhY2U6IEVsZW1lbnQpIHtcclxuXHRkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZSh1c2VySW50ZXJmYWNlLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpO1xyXG5cclxuXHRVdGlscy5zZXRFbGVtZW50VmlzaWJpbGl0eShJRHMuVG9hc3RDb250YWluZXIsIHRydWUpO1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/UI/Toast/Toast.ts\n')},"./scripts/app/UI/UI.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Toast_Toast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Toast/Toast */ "./scripts/app/UI/Toast/Toast.ts");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createSurvey", function() { return _Toast_Toast__WEBPACK_IMPORTED_MODULE_0__["createSurvey"]; });\n\n/* harmony import */ var _Toast_CVToast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Toast/CVToast */ "./scripts/app/UI/Toast/CVToast.ts");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createCVSurvey", function() { return _Toast_CVToast__WEBPACK_IMPORTED_MODULE_1__["createCVSurvey"]; });\n\n/**\r\n * UI.ts\r\n *\r\n * Module for the UI\r\n */\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9VSS50cz84NWExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7R0FJRztBQUV3RDtBQUNNIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVUkvVUkudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVUkudHNcclxuICpcclxuICogTW9kdWxlIGZvciB0aGUgVUlcclxuICovXHJcblxyXG5leHBvcnQge2NyZWF0ZVN1cnZleSBhcyBjcmVhdGVTdXJ2ZXl9IGZyb20gXCIuL1RvYXN0L1RvYXN0XCI7XHJcbmV4cG9ydCB7Y3JlYXRlQ1ZTdXJ2ZXkgYXMgY3JlYXRlQ1ZTdXJ2ZXl9IGZyb20gXCIuL1RvYXN0L0NWVG9hc3RcIjtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/UI/UI.ts\n')},"./scripts/app/UI/UiConstants.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AttributeName", function() { return AttributeName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AttributeValue", function() { return AttributeValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UrlParameters", function() { return UrlParameters; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Classes", function() { return Classes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IDs", function() { return IDs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Keys", function() { return Keys; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Tags", function() { return Tags; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Roles", function() { return Roles; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Urls", function() { return Urls; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PromptConstants", function() { return PromptConstants; });\n/**\r\n * Constants.ts\r\n *\r\n * A module for all UI constants.\r\n */\r\n/**\r\n * HTML attribute names\r\n */\r\nvar AttributeName = /** @class */ (function () {\r\n    function AttributeName() {\r\n    }\r\n    AttributeName.Alt = "alt";\r\n    AttributeName.AriaLabel = "aria-label";\r\n    AttributeName.AriaSelected = "aria-selected";\r\n    AttributeName.AriaOrientation = "aria-orientation";\r\n    AttributeName.AriaExpanded = "aria-expanded";\r\n    AttributeName.AriaControls = "aria-controls";\r\n    AttributeName.AriaHasPopups = "aria-haspopup";\r\n    AttributeName.AriaModal = "aria-modal";\r\n    AttributeName.AriaLabelledBy = "aria-labelledby";\r\n    AttributeName.AriaDescribedBy = "aria-describedby";\r\n    AttributeName.Class = "class";\r\n    AttributeName.DataHtml2CanvasIgnore = "data-html2canvas-ignore";\r\n    AttributeName.Disabled = "disabled";\r\n    AttributeName.Fill = "fill";\r\n    AttributeName.For = "for";\r\n    AttributeName.Preview = "preview";\r\n    AttributeName.Form = "form";\r\n    AttributeName.Height = "height";\r\n    AttributeName.HRef = "href";\r\n    AttributeName.Id = "id";\r\n    AttributeName.MaxLength = "maxlength";\r\n    AttributeName.Name = "name";\r\n    AttributeName.Placeholder = "placeholder";\r\n    AttributeName.Points = "points";\r\n    AttributeName.Rel = "rel";\r\n    AttributeName.Role = "role";\r\n    AttributeName.Source = "src";\r\n    AttributeName.Stroke = "stroke";\r\n    AttributeName.Style = "style";\r\n    AttributeName.TabIndex = "tabindex";\r\n    AttributeName.Target = "target";\r\n    AttributeName.Transform = "transform";\r\n    AttributeName.Type = "type";\r\n    AttributeName.Value = "value";\r\n    AttributeName.ViewBox = "viewBox";\r\n    AttributeName.Width = "width";\r\n    AttributeName.xlinkHref = "xlink:href";\r\n    AttributeName.X = "x";\r\n    AttributeName.Y = "y";\r\n    return AttributeName;\r\n}());\r\n\r\n/**\r\n * HTML attribute values\r\n */\r\nvar AttributeValue = /** @class */ (function () {\r\n    function AttributeValue() {\r\n    }\r\n    AttributeValue.BlankWindow = "_blank";\r\n    AttributeValue.Button = "button";\r\n    AttributeValue.Dialog = "dialog";\r\n    AttributeValue.Tab = "tab";\r\n    AttributeValue.TabList = "tablist";\r\n    AttributeValue.TabPanel = "tabpanel";\r\n    AttributeValue.Checkbox = "checkbox";\r\n    AttributeValue.Checked = "checked";\r\n    AttributeValue.False = "false";\r\n    AttributeValue.Zero = "0";\r\n    AttributeValue.Polite = "polite";\r\n    AttributeValue.Radio = "radio";\r\n    AttributeValue.Submit = "submit";\r\n    AttributeValue.ScreenshotPreview = "ScreenshotPreview";\r\n    AttributeValue.Text = "text";\r\n    AttributeValue.TextAreaMaxLength = "1000";\r\n    AttributeValue.True = "true";\r\n    AttributeValue.Unchecked = "unchecked";\r\n    AttributeValue.NoReferrer = "noreferrer";\r\n    AttributeValue.AriaOrientationValueVertical = "vertical";\r\n    return AttributeValue;\r\n}());\r\n\r\n/**\r\n * URL Parameters\r\n */\r\nvar UrlParameters = /** @class */ (function () {\r\n    function UrlParameters() {\r\n    }\r\n    UrlParameters.CLCID = "CLCID";\r\n    return UrlParameters;\r\n}());\r\n\r\n/**\r\n * CSS classes\r\n */\r\nvar Classes = /** @class */ (function () {\r\n    function Classes() {\r\n    }\r\n    Classes.AriaLiveTemplate = "obf-AriaLiveTemplate";\r\n    Classes.CheckBox = "obf-CheckBox";\r\n    Classes.FontTitle = "obf-FontTitle";\r\n    Classes.CloseButton = "obf-CloseButton";\r\n    Classes.FontSubtitle = "obf-FontSubtitle";\r\n    Classes.FontText = "obf-FontText";\r\n    Classes.FontSubText = "obf-FontSubText";\r\n    Classes.FontSubSubText = "obf-FontSubSubText";\r\n    Classes.Hidden = "obf-Hidden";\r\n    Classes.Link = "obf-Link";\r\n    Classes.MarginLeft60px = "obf-MarginLeft60px";\r\n    Classes.MarginLeft180px = "obf-MarginLeft180px";\r\n    Classes.NarrowLayout = "obf-NarrowLayout";\r\n    Classes.PrivacyStatementLinkDiv = "obf-PrivacyStatementLinkDiv";\r\n    Classes.Rtl = "obf-Rtl";\r\n    Classes.Spinner = "obf-Spinner";\r\n    Classes.SpinnerCircle = "obf-SpinnerCircle";\r\n    Classes.SubmitButton = "obf-SubmitButton";\r\n    Classes.CancelButton = "obf-CancelButton";\r\n    Classes.TextInput = "obf-TextInput";\r\n    Classes.Visible = "obf-Visible";\r\n    // rating control\r\n    Classes.Rating = "obf-Rating";\r\n    Classes.RatingGraphic = "obf-RatingGraphic";\r\n    Classes.RatingGraphicFilled = "obf-RatingGraphic-Filled";\r\n    // choice group control\r\n    Classes.ChoiceGroup = "obf-ChoiceGroup";\r\n    Classes.ChoiceGroupIcon = "obf-ChoiceGroupIcon";\r\n    // region BellyBand\r\n    Classes.OverallAnchor = "obf-OverallAnchor";\r\n    Classes.OverallAnchorActive = "obf-OverallAnchorActive";\r\n    Classes.OverallImage = "obf-OverallImage";\r\n    Classes.OverallText = "obf-OverallText";\r\n    Classes.SingleLayout = "obf-SingleLayout";\r\n    Classes.ShowRightBorder = "obf-ShowRightBorder";\r\n    Classes.SlideLeft = "obf-slideLeft";\r\n    Classes.TextAlignLeft = "obf-TextAlignLeft";\r\n    Classes.FormContainer = "obf-FormContainer";\r\n    Classes.FormWideContainer = "obf-FormWideContainer";\r\n    // region ThanksPanel\r\n    Classes.ThanksPanelTitle = "obf-ThanksPanelTitle";\r\n    Classes.ThanksPanelMessage = "obf-ThanksPanelMessage";\r\n    // form classes\r\n    Classes.FormQuestionMiddleText = "obf-FormQuestionMiddleText";\r\n    Classes.FormMiddleText = "obf-FormMiddleText";\r\n    Classes.FormCategoriesDropdown = "obf-FormCategoriesDropdown";\r\n    Classes.FormComment = "obf-FormComment";\r\n    Classes.FormRatingContainer = "obf-FormRatingContainer";\r\n    Classes.FormRatingLabel = "obf-FormRatingLabel";\r\n    Classes.FormRating = "obf-FormRating";\r\n    Classes.FormEmailContainer = "obf-FormEmailContainer";\r\n    Classes.FormEmailInput = "obf-FormEmailInput";\r\n    Classes.FormEmailTextBox = "obf-FormEmailTextBox";\r\n    Classes.FormEmailCheckBox = "obf-FormEmailCheckBox";\r\n    Classes.FormEmailLabel = "obf-FormEmailLabel";\r\n    Classes.FormBottomContainer = "obf-FormBottomContainer";\r\n    Classes.FormSubmitButtonContainer = "obf-FormSubmitButtonContainer";\r\n    Classes.FormScreenshotContainer = "obf-FormScreenshotContainer";\r\n    Classes.FormScreenshotLabel = "obf-FormScreenshotLabel";\r\n    Classes.FormScreenshotCheckbox = "obf-FormScreenshotCheckbox";\r\n    Classes.FormScreenshotPreview = "obf-FormScreenshotPreview";\r\n    // email textbox classes\r\n    Classes.TFormEmailCheckbox = "obf-TFormEmailCheckbox";\r\n    Classes.TFormEmailLabel = "obf-TFormEmailLabel ";\r\n    // email checkbox classes\r\n    Classes.EmailCheckBoxLabel = "obf-EmailCheckBoxLabel";\r\n    // endregion\r\n    // region Toast\r\n    Classes.Toast = "obf-Toast";\r\n    Classes.ToastZoom = "obf-ToastZoom";\r\n    return Classes;\r\n}());\r\n\r\n/**\r\n * HTML element ids\r\n */\r\nvar IDs = /** @class */ (function () {\r\n    function IDs() {\r\n    }\r\n    // region BellyBand\r\n    IDs.CloseButton = "obf-CloseButton";\r\n    IDs.ColumnSeparatorDiv = "obf-ColumnSeparatorDiv";\r\n    IDs.OverallAnchorsContainer = "obf-OverallAnchorsContainer";\r\n    IDs.OverallFrownAnchor = "obf-OverallFrownAnchor";\r\n    IDs.OverallFrownDiv = "obf-OverallFrownDiv";\r\n    IDs.OverallFrownImage = "obf-OverallFrownImage";\r\n    IDs.OverallFrownText = "obf-OverallFrownText";\r\n    IDs.OverallSmileAnchor = "obf-OverallSmileAnchor";\r\n    IDs.OverallSmileDiv = "obf-OverallSmileDiv";\r\n    IDs.OverallSmileImage = "obf-OverallSmileImage";\r\n    IDs.OverallSmileText = "obf-OverallSmileText";\r\n    IDs.OverallIdeaAnchor = "obf-OverallIdeaAnchor";\r\n    IDs.OverallIdeaDiv = "obf-OverallIdeaDiv";\r\n    IDs.OverallIdeaImage = "obf-OverallIdeaImage";\r\n    IDs.OverallIdeaText = "obf-OverallIdeaText";\r\n    IDs.OverallBugAnchor = "obf-OverallBugAnchor";\r\n    IDs.OverallBugDiv = "obf-OverallBugDiv";\r\n    IDs.OverallBugImage = "obf-OverallBugImage";\r\n    IDs.OverallBugText = "obf-OverallBugText";\r\n    IDs.QuestionLeftText = "obf-QuestionLeftText";\r\n    IDs.LeftFormContainer = "obf-LeftFormContainer";\r\n    IDs.LeftPanelContainer = "obf-LeftPanelContainer";\r\n    IDs.MainContainer = "obf-MainContainer";\r\n    IDs.MainContentHolder = "obf-MainContentHolder";\r\n    IDs.MiddleFormContainer = "obf-MiddleFormContainer";\r\n    IDs.OverlayBackground = "obf-OverlayBackground";\r\n    IDs.PrivacyStatementLink = "obf-PrivacyStatementLink";\r\n    IDs.FirstTabbable = "obf-FirstTabbable";\r\n    IDs.LastTabbable = "obf-LastTabbable";\r\n    IDs.EmailCheckBox = "obf-EmailCheckBox";\r\n    // Single form ids\r\n    IDs.SingleFormContainer = "obf-SingleFormContainer";\r\n    IDs.SingleFormQuestionMiddleText = "obf-SingleFormQuestionMiddleText";\r\n    IDs.SingleFormCategoriesDropdown = "obf-SingleFormCategoriesDropdown";\r\n    IDs.SingleFormComment = "obf-SingleFormComment";\r\n    IDs.SingleFormEmailInput = "obf-SingleFormEmailInput";\r\n    IDs.SingleFormRating = "obf-SingleFormRating";\r\n    IDs.SingleFormScreenshotCheckbox = "obf-SingleFormScreenshotCheckbox";\r\n    IDs.SingleFormScreenshotPreview = "obf-SingleFormScreenshotPreview";\r\n    IDs.SingleFormSubmitButton = "obf-SingleFormSubmitButton";\r\n    IDs.SingleFormCancelButton = "obf-SingleFormCancelButton";\r\n    IDs.SingleFormSubmitButtonSpinner = "obf-SingleFormSubmitButtonSpinner";\r\n    // Basic form ids\r\n    IDs.BasicFormContainer = "obf-BasicFormContainer";\r\n    IDs.BasicFormQuestionMiddleText = "obf-BasicFormQuestionMiddleText";\r\n    IDs.BasicFormCategoriesDropdown = "obf-BasicFormCategoriesDropdown";\r\n    IDs.BasicFormComment = "obf-BasicFormComment";\r\n    IDs.BasicFormEmailInput = "obf-BasicFormEmailInput";\r\n    IDs.BasicFormRating = "obf-BasicFormRating";\r\n    IDs.BasicFormScreenshotCheckbox = "obf-BasicFormScreenshotCheckbox";\r\n    IDs.BasicFormScreenshotPreview = "obf-BasicFormScreenshotPreview";\r\n    IDs.BasicFormSubmitButton = "obf-BasicFormSubmitButton";\r\n    IDs.BasicFormCancelButton = "obf-BasicFormCancelButton";\r\n    IDs.BasicFormSubmitButtonSpinner = "obf-BasicFormSubmitButtonSpinner";\r\n    // Thanks Panel ids\r\n    IDs.ThanksPanelContainer = "obf-ThanksPanelContainer";\r\n    IDs.ThanksPanelCloseButton = "obf-ThanksPanelCloseButton";\r\n    IDs.ThanksPanelDiscussion = "obf-ThanksPanelDiscussion";\r\n    IDs.ThanksPanelVerticalContainer = "obf-ThanksPanelVerticalContainer";\r\n    IDs.ThanksPanelInnerContainer = "obf-ThanksPanelInnerContainer";\r\n    IDs.ThanksPanelParagraph = "obf-ThanksPanelParagraph";\r\n    // Feedback Portal Idea Id\r\n    IDs.FeedbackPortalIdeaContainer = "obf-FeedbackPortalIdeaContainer";\r\n    IDs.OverallFeedbackPortalIdeaAnchor = "obf-OverallFeedbackPortalIdeaAnchor";\r\n    // endregion\r\n    // region Toast\r\n    IDs.ToastContainer = "obf-ToastContainer";\r\n    IDs.ToastCancel = "obf-ToastCancel";\r\n    // Prompt ids\r\n    IDs.TPromptContainer = "obf-TPromptContainer";\r\n    IDs.TPromptTitle = "obf-TPromptTitle";\r\n    IDs.TPromptText = "obf-TPromptText";\r\n    // Survey ids\r\n    IDs.TFormContainer = "obf-TFormContainer";\r\n    IDs.TFormTitle = "obf-TFormTitle";\r\n    IDs.TFormRating = "obf-TFormRating";\r\n    IDs.TFormRatingQuestion = "obf-TFormRatingQuestion";\r\n    IDs.TFormComment = "obf-TFormComment";\r\n    IDs.TFormEmailTextBox = "obf-TFormEmailTextBox";\r\n    IDs.TFormEmailCheckBox = "obf-TFormEmailCheckBox";\r\n    IDs.TFormEmailLabel = "obf-TFormEmailLabel";\r\n    IDs.TFormSubmitButton = "obf-TFormSubmitButton";\r\n    IDs.TFormSubmitButtonSpinner = "obf-TFormSubmitButtonSpinner";\r\n    IDs.TFormSubmitButtonContainer = "obf-TFormSubmitButtonContainer";\r\n    return IDs;\r\n}());\r\n\r\n/**\r\n * Keys\r\n */\r\nvar Keys = /** @class */ (function () {\r\n    function Keys() {\r\n    }\r\n    Keys.Esc = 27;\r\n    Keys.Tab = 9;\r\n    return Keys;\r\n}());\r\n\r\n/**\r\n * HTML tags\r\n */\r\nvar Tags = /** @class */ (function () {\r\n    function Tags() {\r\n    }\r\n    Tags.Anchor = "A";\r\n    Tags.Button = "button";\r\n    Tags.Defs = "defs";\r\n    Tags.Div = "div";\r\n    Tags.FieldSet = "fieldset";\r\n    Tags.Form = "form";\r\n    Tags.Img = "img";\r\n    Tags.Input = "input";\r\n    Tags.Label = "label";\r\n    Tags.Legend = "legend";\r\n    Tags.Option = "option";\r\n    Tags.Polygon = "polygon";\r\n    Tags.Select = "select";\r\n    Tags.Span = "span";\r\n    Tags.Svg = "svg";\r\n    Tags.TextArea = "textarea";\r\n    Tags.Use = "use";\r\n    return Tags;\r\n}());\r\n\r\n/**\r\n * HTML roles\r\n */\r\nvar Roles = /** @class */ (function () {\r\n    function Roles() {\r\n    }\r\n    Roles.Button = "Button";\r\n    return Roles;\r\n}());\r\n\r\n/**\r\n * URLs\r\n */\r\nvar Urls = /** @class */ (function () {\r\n    function Urls() {\r\n    }\r\n    /**\r\n     * Link to the feedback Privacy Statement\r\n     */\r\n    Urls.PrivacyStatementLink = "https://go.microsoft.com/fwlink/?LinkId=521839";\r\n    return Urls;\r\n}());\r\n\r\n/**\r\n * prompt constants\r\n */\r\nvar PromptConstants = /** @class */ (function () {\r\n    function PromptConstants() {\r\n    }\r\n    PromptConstants.No = "1";\r\n    PromptConstants.Yes = "2";\r\n    return PromptConstants;\r\n}());\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9VaUNvbnN0YW50cy50cz8wMzdmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRUg7O0dBRUc7QUFDSDtJQUFBO0lBd0NBLENBQUM7SUF2Q2MsaUJBQUcsR0FBVyxLQUFLLENBQUM7SUFDcEIsdUJBQVMsR0FBVyxZQUFZLENBQUM7SUFDakMsMEJBQVksR0FBVyxlQUFlLENBQUM7SUFDdkMsNkJBQWUsR0FBVyxrQkFBa0IsQ0FBQztJQUM3QywwQkFBWSxHQUFXLGVBQWUsQ0FBQztJQUN2QywwQkFBWSxHQUFXLGVBQWUsQ0FBQztJQUN2QywyQkFBYSxHQUFXLGVBQWUsQ0FBQztJQUN4Qyx1QkFBUyxHQUFXLFlBQVksQ0FBQztJQUNqQyw0QkFBYyxHQUFXLGlCQUFpQixDQUFDO0lBQzNDLDZCQUFlLEdBQVcsa0JBQWtCLENBQUM7SUFDN0MsbUJBQUssR0FBVyxPQUFPLENBQUM7SUFDeEIsbUNBQXFCLEdBQVcseUJBQXlCLENBQUM7SUFDMUQsc0JBQVEsR0FBVyxVQUFVLENBQUM7SUFDOUIsa0JBQUksR0FBVyxNQUFNLENBQUM7SUFDdEIsaUJBQUcsR0FBVyxLQUFLLENBQUM7SUFDcEIscUJBQU8sR0FBVyxTQUFTLENBQUM7SUFDNUIsa0JBQUksR0FBVyxNQUFNLENBQUM7SUFDdEIsb0JBQU0sR0FBVyxRQUFRLENBQUM7SUFDMUIsa0JBQUksR0FBVyxNQUFNLENBQUM7SUFDdEIsZ0JBQUUsR0FBVyxJQUFJLENBQUM7SUFDbEIsdUJBQVMsR0FBVyxXQUFXLENBQUM7SUFDaEMsa0JBQUksR0FBVyxNQUFNLENBQUM7SUFDdEIseUJBQVcsR0FBVyxhQUFhLENBQUM7SUFDcEMsb0JBQU0sR0FBVyxRQUFRLENBQUM7SUFDMUIsaUJBQUcsR0FBVyxLQUFLLENBQUM7SUFDcEIsa0JBQUksR0FBVyxN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VUkvVWlDb25zdGFudHMudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29uc3RhbnRzLnRzXHJcbiAqXHJcbiAqIEEgbW9kdWxlIGZvciBhbGwgVUkgY29uc3RhbnRzLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIVE1MIGF0dHJpYnV0ZSBuYW1lc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZU5hbWUge1xyXG5cdHB1YmxpYyBzdGF0aWMgQWx0OiBzdHJpbmcgPSBcImFsdFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgQXJpYUxhYmVsOiBzdHJpbmcgPSBcImFyaWEtbGFiZWxcIjtcclxuXHRwdWJsaWMgc3RhdGljIEFyaWFTZWxlY3RlZDogc3RyaW5nID0gXCJhcmlhLXNlbGVjdGVkXCI7XHJcblx0cHVibGljIHN0YXRpYyBBcmlhT3JpZW50YXRpb246IHN0cmluZyA9IFwiYXJpYS1vcmllbnRhdGlvblwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgQXJpYUV4cGFuZGVkOiBzdHJpbmcgPSBcImFyaWEtZXhwYW5kZWRcIjtcclxuXHRwdWJsaWMgc3RhdGljIEFyaWFDb250cm9sczogc3RyaW5nID0gXCJhcmlhLWNvbnRyb2xzXCI7XHJcblx0cHVibGljIHN0YXRpYyBBcmlhSGFzUG9wdXBzOiBzdHJpbmcgPSBcImFyaWEtaGFzcG9wdXBcIjtcclxuXHRwdWJsaWMgc3RhdGljIEFyaWFNb2RhbDogc3RyaW5nID0gXCJhcmlhLW1vZGFsXCI7XHJcblx0cHVibGljIHN0YXRpYyBBcmlhTGFiZWxsZWRCeTogc3RyaW5nID0gXCJhcmlhLWxhYmVsbGVkYnlcIjtcclxuXHRwdWJsaWMgc3RhdGljIEFyaWFEZXNjcmliZWRCeTogc3RyaW5nID0gXCJhcmlhLWRlc2NyaWJlZGJ5XCI7XHJcblx0cHVibGljIHN0YXRpYyBDbGFzczogc3RyaW5nID0gXCJjbGFzc1wiO1xyXG5cdHB1YmxpYyBzdGF0aWMgRGF0YUh0bWwyQ2FudmFzSWdub3JlOiBzdHJpbmcgPSBcImRhdGEtaHRtbDJjYW52YXMtaWdub3JlXCI7XHJcblx0cHVibGljIHN0YXRpYyBEaXNhYmxlZDogc3RyaW5nID0gXCJkaXNhYmxlZFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgRmlsbDogc3RyaW5nID0gXCJmaWxsXCI7XHJcblx0cHVibGljIHN0YXRpYyBGb3I6IHN0cmluZyA9IFwiZm9yXCI7XHJcblx0cHVibGljIHN0YXRpYyBQcmV2aWV3OiBzdHJpbmcgPSBcInByZXZpZXdcIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvcm06IHN0cmluZyA9IFwiZm9ybVwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgSGVpZ2h0OiBzdHJpbmcgPSBcImhlaWdodFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgSFJlZjogc3RyaW5nID0gXCJocmVmXCI7XHJcblx0cHVibGljIHN0YXRpYyBJZDogc3RyaW5nID0gXCJpZFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgTWF4TGVuZ3RoOiBzdHJpbmcgPSBcIm1heGxlbmd0aFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgTmFtZTogc3RyaW5nID0gXCJuYW1lXCI7XHJcblx0cHVibGljIHN0YXRpYyBQbGFjZWhvbGRlcjogc3RyaW5nID0gXCJwbGFjZWhvbGRlclwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgUG9pbnRzOiBzdHJpbmcgPSBcInBvaW50c1wiO1xyXG5cdHB1YmxpYyBzdGF0aWMgUmVsOiBzdHJpbmcgPSBcInJlbFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgUm9sZTogc3RyaW5nID0gXCJyb2xlXCI7XHJcblx0cHVibGljIHN0YXRpYyBTb3VyY2U6IHN0cmluZyA9IFwic3JjXCI7XHJcblx0cHVibGljIHN0YXRpYyBTdHJva2U6IHN0cmluZyA9IFwic3Ryb2tlXCI7XHJcblx0cHVibGljIHN0YXRpYyBTdHlsZTogc3RyaW5nID0gXCJzdHlsZVwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgVGFiSW5kZXg6IHN0cmluZyA9IFwidGFiaW5kZXhcIjtcclxuXHRwdWJsaWMgc3RhdGljIFRhcmdldDogc3RyaW5nID0gXCJ0YXJnZXRcIjtcclxuXHRwdWJsaWMgc3RhdGljIFRyYW5zZm9ybTogc3RyaW5nID0gXCJ0cmFuc2Zvcm1cIjtcclxuXHRwdWJsaWMgc3RhdGljIFR5cGU6IHN0cmluZyA9IFwidHlwZVwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgVmFsdWU6IHN0cmluZyA9IFwidmFsdWVcIjtcclxuXHRwdWJsaWMgc3RhdGljIFZpZXdCb3g6IHN0cmluZyA9IFwidmlld0JveFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgV2lkdGg6IHN0cmluZyA9IFwid2lkdGhcIjtcclxuXHRwdWJsaWMgc3RhdGljIHhsaW5rSHJlZjogc3RyaW5nID0gXCJ4bGluazpocmVmXCI7XHJcblx0cHVibGljIHN0YXRpYyBYOiBzdHJpbmcgPSBcInhcIjtcclxuXHRwdWJsaWMgc3RhdGljIFk6IHN0cmluZyA9IFwieVwiO1xyXG59XHJcblxyXG4vKipcclxuICogSFRNTCBhdHRyaWJ1dGUgdmFsdWVzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlVmFsdWUge1xyXG5cdHB1YmxpYyBzdGF0aWMgQmxhbmtXaW5kb3c6IHN0cmluZyA9IFwiX2JsYW5rXCI7XHJcblx0cHVibGljIHN0YXRpYyBCdXR0b246IHN0cmluZyA9IFwiYnV0dG9uXCI7XHJcblx0cHVibGljIHN0YXRpYyBEaWFsb2c6IHN0cmluZyA9IFwiZGlhbG9nXCI7XHJcblx0cHVibGljIHN0YXRpYyBUYWI6IHN0cmluZyA9IFwidGFiXCI7XHJcblx0cHVibGljIHN0YXRpYyBUYWJMaXN0OiBzdHJpbmcgPSBcInRhYmxpc3RcIjtcclxuXHRwdWJsaWMgc3RhdGljIFRhYlBhbmVsOiBzdHJpbmcgPSBcInRhYnBhbmVsXCI7XHJcblx0cHVibGljIHN0YXRpYyBDaGVja2JveDogc3RyaW5nID0gXCJjaGVja2JveFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgQ2hlY2tlZDogc3RyaW5nID0gXCJjaGVja2VkXCI7XHJcblx0cHVibGljIHN0YXRpYyBGYWxzZTogc3RyaW5nID0gXCJmYWxzZVwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgWmVybzogc3RyaW5nID0gXCIwXCI7XHJcblx0cHVibGljIHN0YXRpYyBQb2xpdGU6IHN0cmluZyA9IFwicG9saXRlXCI7XHJcblx0cHVibGljIHN0YXRpYyBSYWRpbzogc3RyaW5nID0gXCJyYWRpb1wiO1xyXG5cdHB1YmxpYyBzdGF0aWMgU3VibWl0OiBzdHJpbmcgPSBcInN1Ym1pdFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgU2NyZWVuc2hvdFByZXZpZXc6IHN0cmluZyA9IFwiU2NyZWVuc2hvdFByZXZpZXdcIjtcclxuXHRwdWJsaWMgc3RhdGljIFRleHQ6IHN0cmluZyA9IFwidGV4dFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgVGV4dEFyZWFNYXhMZW5ndGg6IHN0cmluZyA9IFwiMTAwMFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgVHJ1ZTogc3RyaW5nID0gXCJ0cnVlXCI7XHJcblx0cHVibGljIHN0YXRpYyBVbmNoZWNrZWQ6IHN0cmluZyA9IFwidW5jaGVja2VkXCI7XHJcblx0cHVibGljIHN0YXRpYyBOb1JlZmVycmVyOiBzdHJpbmcgPSBcIm5vcmVmZXJyZXJcIjtcclxuXHRwdWJsaWMgc3RhdGljIEFyaWFPcmllbnRhdGlvblZhbHVlVmVydGljYWwgPSBcInZlcnRpY2FsXCI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVUkwgUGFyYW1ldGVyc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFVybFBhcmFtZXRlcnMge1xyXG5cdHB1YmxpYyBzdGF0aWMgQ0xDSUQ6IHN0cmluZyA9IFwiQ0xDSURcIjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENTUyBjbGFzc2VzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQ2xhc3NlcyB7XHJcblx0cHVibGljIHN0YXRpYyBBcmlhTGl2ZVRlbXBsYXRlOiBzdHJpbmcgPSBcIm9iZi1BcmlhTGl2ZVRlbXBsYXRlXCI7XHJcblx0cHVibGljIHN0YXRpYyBDaGVja0JveDogc3RyaW5nID0gXCJvYmYtQ2hlY2tCb3hcIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvbnRUaXRsZTogc3RyaW5nID0gXCJvYmYtRm9udFRpdGxlXCI7XHJcblx0cHVibGljIHN0YXRpYyBDbG9zZUJ1dHRvbjogc3RyaW5nID0gXCJvYmYtQ2xvc2VCdXR0b25cIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvbnRTdWJ0aXRsZTogc3RyaW5nID0gXCJvYmYtRm9udFN1YnRpdGxlXCI7XHJcblx0cHVibGljIHN0YXRpYyBGb250VGV4dDogc3RyaW5nID0gXCJvYmYtRm9udFRleHRcIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvbnRTdWJUZXh0OiBzdHJpbmcgPSBcIm9iZi1Gb250U3ViVGV4dFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgRm9udFN1YlN1YlRleHQ6IHN0cmluZyA9IFwib2JmLUZvbnRTdWJTdWJUZXh0XCI7XHJcblx0cHVibGljIHN0YXRpYyBIaWRkZW46IHN0cmluZyA9IFwib2JmLUhpZGRlblwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgTGluazogc3RyaW5nID0gXCJvYmYtTGlua1wiO1xyXG5cdHB1YmxpYyBzdGF0aWMgTWFyZ2luTGVmdDYwcHg6IHN0cmluZyA9IFwib2JmLU1hcmdpbkxlZnQ2MHB4XCI7XHJcblx0cHVibGljIHN0YXRpYyBNYXJnaW5MZWZ0MTgwcHg6IHN0cmluZyA9IFwib2JmLU1hcmdpbkxlZnQxODBweFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgTmFycm93TGF5b3V0OiBzdHJpbmcgPSBcIm9iZi1OYXJyb3dMYXlvdXRcIjtcclxuXHRwdWJsaWMgc3RhdGljIFByaXZhY3lTdGF0ZW1lbnRMaW5rRGl2OiBzdHJpbmcgPSBcIm9iZi1Qcml2YWN5U3RhdGVtZW50TGlua0RpdlwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgUnRsOiBzdHJpbmcgPSBcIm9iZi1SdGxcIjtcclxuXHRwdWJsaWMgc3RhdGljIFNwaW5uZXI6IHN0cmluZyA9IFwib2JmLVNwaW5uZXJcIjtcclxuXHRwdWJsaWMgc3RhdGljIFNwaW5uZXJDaXJjbGU6IHN0cmluZyA9IFwib2JmLVNwaW5uZXJDaXJjbGVcIjtcclxuXHRwdWJsaWMgc3RhdGljIFN1Ym1pdEJ1dHRvbjogc3RyaW5nID0gXCJvYmYtU3VibWl0QnV0dG9uXCI7XHJcblx0cHVibGljIHN0YXRpYyBDYW5jZWxCdXR0b246IHN0cmluZyA9IFwib2JmLUNhbmNlbEJ1dHRvblwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgVGV4dElucHV0OiBzdHJpbmcgPSBcIm9iZi1UZXh0SW5wdXRcIjtcclxuXHRwdWJsaWMgc3RhdGljIFZpc2libGU6IHN0cmluZyA9IFwib2JmLVZpc2libGVcIjtcclxuXHJcblx0Ly8gcmF0aW5nIGNvbnRyb2xcclxuXHRwdWJsaWMgc3RhdGljIFJhdGluZzogc3RyaW5nID0gXCJvYmYtUmF0aW5nXCI7XHJcblx0cHVibGljIHN0YXRpYyBSYXRpbmdHcmFwaGljOiBzdHJpbmcgPSBcIm9iZi1SYXRpbmdHcmFwaGljXCI7XHJcblx0cHVibGljIHN0YXRpYyBSYXRpbmdHcmFwaGljRmlsbGVkOiBzdHJpbmcgPSBcIm9iZi1SYXRpbmdHcmFwaGljLUZpbGxlZFwiO1xyXG5cclxuXHQvLyBjaG9pY2UgZ3JvdXAgY29udHJvbFxyXG5cdHB1YmxpYyBzdGF0aWMgQ2hvaWNlR3JvdXA6IHN0cmluZyA9IFwib2JmLUNob2ljZUdyb3VwXCI7XHJcblx0cHVibGljIHN0YXRpYyBDaG9pY2VHcm91cEljb246IHN0cmluZyA9IFwib2JmLUNob2ljZUdyb3VwSWNvblwiO1xyXG5cclxuXHQvLyByZWdpb24gQmVsbHlCYW5kXHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgT3ZlcmFsbEFuY2hvcjogc3RyaW5nID0gXCJvYmYtT3ZlcmFsbEFuY2hvclwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgT3ZlcmFsbEFuY2hvckFjdGl2ZTogc3RyaW5nID0gXCJvYmYtT3ZlcmFsbEFuY2hvckFjdGl2ZVwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgT3ZlcmFsbEltYWdlOiBzdHJpbmcgPSBcIm9iZi1PdmVyYWxsSW1hZ2VcIjtcclxuXHRwdWJsaWMgc3RhdGljIE92ZXJhbGxUZXh0OiBzdHJpbmcgPSBcIm9iZi1PdmVyYWxsVGV4dFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgU2luZ2xlTGF5b3V0OiBzdHJpbmcgPSBcIm9iZi1TaW5nbGVMYXlvdXRcIjtcclxuXHRwdWJsaWMgc3RhdGljIFNob3dSaWdodEJvcmRlcjogc3RyaW5nID0gXCJvYmYtU2hvd1JpZ2h0Qm9yZGVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBTbGlkZUxlZnQ6IHN0cmluZyA9IFwib2JmLXNsaWRlTGVmdFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgVGV4dEFsaWduTGVmdDogc3RyaW5nID0gXCJvYmYtVGV4dEFsaWduTGVmdFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgRm9ybUNvbnRhaW5lcjogc3RyaW5nID0gXCJvYmYtRm9ybUNvbnRhaW5lclwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgRm9ybVdpZGVDb250YWluZXI6IHN0cmluZyA9IFwib2JmLUZvcm1XaWRlQ29udGFpbmVyXCI7XHJcblxyXG5cdC8vIHJlZ2lvbiBUaGFua3NQYW5lbFxyXG5cdHB1YmxpYyBzdGF0aWMgVGhhbmtzUGFuZWxUaXRsZTogc3RyaW5nID0gXCJvYmYtVGhhbmtzUGFuZWxUaXRsZVwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgVGhhbmtzUGFuZWxNZXNzYWdlOiBzdHJpbmcgPSBcIm9iZi1UaGFua3NQYW5lbE1lc3NhZ2VcIjtcclxuXHJcblx0Ly8gZm9ybSBjbGFzc2VzXHJcblx0cHVibGljIHN0YXRpYyBGb3JtUXVlc3Rpb25NaWRkbGVUZXh0OiBzdHJpbmcgPSBcIm9iZi1Gb3JtUXVlc3Rpb25NaWRkbGVUZXh0XCI7XHJcblx0cHVibGljIHN0YXRpYyBGb3JtTWlkZGxlVGV4dDogc3RyaW5nID0gXCJvYmYtRm9ybU1pZGRsZVRleHRcIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvcm1DYXRlZ29yaWVzRHJvcGRvd246IHN0cmluZyA9IFwib2JmLUZvcm1DYXRlZ29yaWVzRHJvcGRvd25cIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvcm1Db21tZW50OiBzdHJpbmcgPSBcIm9iZi1Gb3JtQ29tbWVudFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgRm9ybVJhdGluZ0NvbnRhaW5lcjogc3RyaW5nID0gXCJvYmYtRm9ybVJhdGluZ0NvbnRhaW5lclwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgRm9ybVJhdGluZ0xhYmVsOiBzdHJpbmcgPSBcIm9iZi1Gb3JtUmF0aW5nTGFiZWxcIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvcm1SYXRpbmc6IHN0cmluZyA9IFwib2JmLUZvcm1SYXRpbmdcIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvcm1FbWFpbENvbnRhaW5lcjogc3RyaW5nID0gXCJvYmYtRm9ybUVtYWlsQ29udGFpbmVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBGb3JtRW1haWxJbnB1dDogc3RyaW5nID0gXCJvYmYtRm9ybUVtYWlsSW5wdXRcIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvcm1FbWFpbFRleHRCb3g6IHN0cmluZyA9IFwib2JmLUZvcm1FbWFpbFRleHRCb3hcIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvcm1FbWFpbENoZWNrQm94OiBzdHJpbmcgPSBcIm9iZi1Gb3JtRW1haWxDaGVja0JveFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgRm9ybUVtYWlsTGFiZWw6IHN0cmluZyA9IFwib2JmLUZvcm1FbWFpbExhYmVsXCI7XHJcblx0cHVibGljIHN0YXRpYyBGb3JtQm90dG9tQ29udGFpbmVyOiBzdHJpbmcgPSBcIm9iZi1Gb3JtQm90dG9tQ29udGFpbmVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBGb3JtU3VibWl0QnV0dG9uQ29udGFpbmVyOiBzdHJpbmcgPSBcIm9iZi1Gb3JtU3VibWl0QnV0dG9uQ29udGFpbmVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBGb3JtU2NyZWVuc2hvdENvbnRhaW5lcjogc3RyaW5nID0gXCJvYmYtRm9ybVNjcmVlbnNob3RDb250YWluZXJcIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvcm1TY3JlZW5zaG90TGFiZWw6IHN0cmluZyA9IFwib2JmLUZvcm1TY3JlZW5zaG90TGFiZWxcIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvcm1TY3JlZW5zaG90Q2hlY2tib3g6IHN0cmluZyA9IFwib2JmLUZvcm1TY3JlZW5zaG90Q2hlY2tib3hcIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvcm1TY3JlZW5zaG90UHJldmlldzogc3RyaW5nID0gXCJvYmYtRm9ybVNjcmVlbnNob3RQcmV2aWV3XCI7XHJcblx0Ly8gZW1haWwgdGV4dGJveCBjbGFzc2VzXHJcblx0cHVibGljIHN0YXRpYyBURm9ybUVtYWlsQ2hlY2tib3g6IHN0cmluZyA9IFwib2JmLVRGb3JtRW1haWxDaGVja2JveFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgVEZvcm1FbWFpbExhYmVsOiBzdHJpbmcgPSBcIm9iZi1URm9ybUVtYWlsTGFiZWwgXCI7XHJcblxyXG5cdC8vIGVtYWlsIGNoZWNrYm94IGNsYXNzZXNcclxuXHRwdWJsaWMgc3RhdGljIEVtYWlsQ2hlY2tCb3hMYWJlbDogc3RyaW5nID0gXCJvYmYtRW1haWxDaGVja0JveExhYmVsXCI7XHJcblxyXG5cdC8vIGVuZHJlZ2lvblxyXG5cclxuXHQvLyByZWdpb24gVG9hc3RcclxuXHJcblx0cHVibGljIHN0YXRpYyBUb2FzdDogc3RyaW5nID0gXCJvYmYtVG9hc3RcIjtcclxuXHRwdWJsaWMgc3RhdGljIFRvYXN0Wm9vbTogc3RyaW5nID0gXCJvYmYtVG9hc3Rab29tXCI7XHJcblxyXG5cdC8vIGVuZHJlZ2lvblxyXG59XHJcblxyXG4vKipcclxuICogSFRNTCBlbGVtZW50IGlkc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIElEcyB7XHJcblx0Ly8gcmVnaW9uIEJlbGx5QmFuZFxyXG5cdHB1YmxpYyBzdGF0aWMgQ2xvc2VCdXR0b246IHN0cmluZyA9IFwib2JmLUNsb3NlQnV0dG9uXCI7XHJcblx0cHVibGljIHN0YXRpYyBDb2x1bW5TZXBhcmF0b3JEaXY6IHN0cmluZyA9IFwib2JmLUNvbHVtblNlcGFyYXRvckRpdlwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgT3ZlcmFsbEFuY2hvcnNDb250YWluZXI6IHN0cmluZyA9IFwib2JmLU92ZXJhbGxBbmNob3JzQ29udGFpbmVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBPdmVyYWxsRnJvd25BbmNob3I6IHN0cmluZyA9IFwib2JmLU92ZXJhbGxGcm93bkFuY2hvclwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgT3ZlcmFsbEZyb3duRGl2OiBzdHJpbmcgPSBcIm9iZi1PdmVyYWxsRnJvd25EaXZcIjtcclxuXHRwdWJsaWMgc3RhdGljIE92ZXJhbGxGcm93bkltYWdlOiBzdHJpbmcgPSBcIm9iZi1PdmVyYWxsRnJvd25JbWFnZVwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgT3ZlcmFsbEZyb3duVGV4dDogc3RyaW5nID0gXCJvYmYtT3ZlcmFsbEZyb3duVGV4dFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgT3ZlcmFsbFNtaWxlQW5jaG9yOiBzdHJpbmcgPSBcIm9iZi1PdmVyYWxsU21pbGVBbmNob3JcIjtcclxuXHRwdWJsaWMgc3RhdGljIE92ZXJhbGxTbWlsZURpdjogc3RyaW5nID0gXCJvYmYtT3ZlcmFsbFNtaWxlRGl2XCI7XHJcblx0cHVibGljIHN0YXRpYyBPdmVyYWxsU21pbGVJbWFnZTogc3RyaW5nID0gXCJvYmYtT3ZlcmFsbFNtaWxlSW1hZ2VcIjtcclxuXHRwdWJsaWMgc3RhdGljIE92ZXJhbGxTbWlsZVRleHQ6IHN0cmluZyA9IFwib2JmLU92ZXJhbGxTbWlsZVRleHRcIjtcclxuXHRwdWJsaWMgc3RhdGljIE92ZXJhbGxJZGVhQW5jaG9yOiBzdHJpbmcgPSBcIm9iZi1PdmVyYWxsSWRlYUFuY2hvclwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgT3ZlcmFsbElkZWFEaXY6IHN0cmluZyA9IFwib2JmLU92ZXJhbGxJZGVhRGl2XCI7XHJcblx0cHVibGljIHN0YXRpYyBPdmVyYWxsSWRlYUltYWdlOiBzdHJpbmcgPSBcIm9iZi1PdmVyYWxsSWRlYUltYWdlXCI7XHJcblx0cHVibGljIHN0YXRpYyBPdmVyYWxsSWRlYVRleHQ6IHN0cmluZyA9IFwib2JmLU92ZXJhbGxJZGVhVGV4dFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgT3ZlcmFsbEJ1Z0FuY2hvcjogc3RyaW5nID0gXCJvYmYtT3ZlcmFsbEJ1Z0FuY2hvclwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgT3ZlcmFsbEJ1Z0Rpdjogc3RyaW5nID0gXCJvYmYtT3ZlcmFsbEJ1Z0RpdlwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgT3ZlcmFsbEJ1Z0ltYWdlOiBzdHJpbmcgPSBcIm9iZi1PdmVyYWxsQnVnSW1hZ2VcIjtcclxuXHRwdWJsaWMgc3RhdGljIE92ZXJhbGxCdWdUZXh0OiBzdHJpbmcgPSBcIm9iZi1PdmVyYWxsQnVnVGV4dFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgUXVlc3Rpb25MZWZ0VGV4dDogc3RyaW5nID0gXCJvYmYtUXVlc3Rpb25MZWZ0VGV4dFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgTGVmdEZvcm1Db250YWluZXI6IHN0cmluZyA9IFwib2JmLUxlZnRGb3JtQ29udGFpbmVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBMZWZ0UGFuZWxDb250YWluZXI6IHN0cmluZyA9IFwib2JmLUxlZnRQYW5lbENvbnRhaW5lclwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgTWFpbkNvbnRhaW5lcjogc3RyaW5nID0gXCJvYmYtTWFpbkNvbnRhaW5lclwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgTWFpbkNvbnRlbnRIb2xkZXI6IHN0cmluZyA9IFwib2JmLU1haW5Db250ZW50SG9sZGVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBNaWRkbGVGb3JtQ29udGFpbmVyOiBzdHJpbmcgPSBcIm9iZi1NaWRkbGVGb3JtQ29udGFpbmVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBPdmVybGF5QmFja2dyb3VuZDogc3RyaW5nID0gXCJvYmYtT3ZlcmxheUJhY2tncm91bmRcIjtcclxuXHRwdWJsaWMgc3RhdGljIFByaXZhY3lTdGF0ZW1lbnRMaW5rOiBzdHJpbmcgPSBcIm9iZi1Qcml2YWN5U3RhdGVtZW50TGlua1wiO1xyXG5cdHB1YmxpYyBzdGF0aWMgRmlyc3RUYWJiYWJsZTogc3RyaW5nID0gXCJvYmYtRmlyc3RUYWJiYWJsZVwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgTGFzdFRhYmJhYmxlOiBzdHJpbmcgPSBcIm9iZi1MYXN0VGFiYmFibGVcIjtcclxuXHRwdWJsaWMgc3RhdGljIEVtYWlsQ2hlY2tCb3g6IHN0cmluZyA9IFwib2JmLUVtYWlsQ2hlY2tCb3hcIjtcclxuXHJcblx0Ly8gU2luZ2xlIGZvcm0gaWRzXHJcblx0cHVibGljIHN0YXRpYyBTaW5nbGVGb3JtQ29udGFpbmVyOiBzdHJpbmcgPSBcIm9iZi1TaW5nbGVGb3JtQ29udGFpbmVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBTaW5nbGVGb3JtUXVlc3Rpb25NaWRkbGVUZXh0OiBzdHJpbmcgPSBcIm9iZi1TaW5nbGVGb3JtUXVlc3Rpb25NaWRkbGVUZXh0XCI7XHJcblx0cHVibGljIHN0YXRpYyBTaW5nbGVGb3JtQ2F0ZWdvcmllc0Ryb3Bkb3duOiBzdHJpbmcgPSBcIm9iZi1TaW5nbGVGb3JtQ2F0ZWdvcmllc0Ryb3Bkb3duXCI7XHJcblx0cHVibGljIHN0YXRpYyBTaW5nbGVGb3JtQ29tbWVudDogc3RyaW5nID0gXCJvYmYtU2luZ2xlRm9ybUNvbW1lbnRcIjtcclxuXHRwdWJsaWMgc3RhdGljIFNpbmdsZUZvcm1FbWFpbElucHV0OiBzdHJpbmcgPSBcIm9iZi1TaW5nbGVGb3JtRW1haWxJbnB1dFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgU2luZ2xlRm9ybVJhdGluZzogc3RyaW5nID0gXCJvYmYtU2luZ2xlRm9ybVJhdGluZ1wiO1xyXG5cdHB1YmxpYyBzdGF0aWMgU2luZ2xlRm9ybVNjcmVlbnNob3RDaGVja2JveDogc3RyaW5nID0gXCJvYmYtU2luZ2xlRm9ybVNjcmVlbnNob3RDaGVja2JveFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgU2luZ2xlRm9ybVNjcmVlbnNob3RQcmV2aWV3OiBzdHJpbmcgPSBcIm9iZi1TaW5nbGVGb3JtU2NyZWVuc2hvdFByZXZpZXdcIjtcclxuXHRwdWJsaWMgc3RhdGljIFNpbmdsZUZvcm1TdWJtaXRCdXR0b246IHN0cmluZyA9IFwib2JmLVNpbmdsZUZvcm1TdWJtaXRCdXR0b25cIjtcclxuXHRwdWJsaWMgc3RhdGljIFNpbmdsZUZvcm1DYW5jZWxCdXR0b246IHN0cmluZyA9IFwib2JmLVNpbmdsZUZvcm1DYW5jZWxCdXR0b25cIjtcclxuXHRwdWJsaWMgc3RhdGljIFNpbmdsZUZvcm1TdWJtaXRCdXR0b25TcGlubmVyOiBzdHJpbmcgPSBcIm9iZi1TaW5nbGVGb3JtU3VibWl0QnV0dG9uU3Bpbm5lclwiO1xyXG5cclxuXHQvLyBCYXNpYyBmb3JtIGlkc1xyXG5cdHB1YmxpYyBzdGF0aWMgQmFzaWNGb3JtQ29udGFpbmVyOiBzdHJpbmcgPSBcIm9iZi1CYXNpY0Zvcm1Db250YWluZXJcIjtcclxuXHRwdWJsaWMgc3RhdGljIEJhc2ljRm9ybVF1ZXN0aW9uTWlkZGxlVGV4dDogc3RyaW5nID0gXCJvYmYtQmFzaWNGb3JtUXVlc3Rpb25NaWRkbGVUZXh0XCI7XHJcblx0cHVibGljIHN0YXRpYyBCYXNpY0Zvcm1DYXRlZ29yaWVzRHJvcGRvd246IHN0cmluZyA9IFwib2JmLUJhc2ljRm9ybUNhdGVnb3JpZXNEcm9wZG93blwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgQmFzaWNGb3JtQ29tbWVudDogc3RyaW5nID0gXCJvYmYtQmFzaWNGb3JtQ29tbWVudFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgQmFzaWNGb3JtRW1haWxJbnB1dDogc3RyaW5nID0gXCJvYmYtQmFzaWNGb3JtRW1haWxJbnB1dFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgQmFzaWNGb3JtUmF0aW5nOiBzdHJpbmcgPSBcIm9iZi1CYXNpY0Zvcm1SYXRpbmdcIjtcclxuXHRwdWJsaWMgc3RhdGljIEJhc2ljRm9ybVNjcmVlbnNob3RDaGVja2JveDogc3RyaW5nID0gXCJvYmYtQmFzaWNGb3JtU2NyZWVuc2hvdENoZWNrYm94XCI7XHJcblx0cHVibGljIHN0YXRpYyBCYXNpY0Zvcm1TY3JlZW5zaG90UHJldmlldzogc3RyaW5nID0gXCJvYmYtQmFzaWNGb3JtU2NyZWVuc2hvdFByZXZpZXdcIjtcclxuXHRwdWJsaWMgc3RhdGljIEJhc2ljRm9ybVN1Ym1pdEJ1dHRvbjogc3RyaW5nID0gXCJvYmYtQmFzaWNGb3JtU3VibWl0QnV0dG9uXCI7XHJcblx0cHVibGljIHN0YXRpYyBCYXNpY0Zvcm1DYW5jZWxCdXR0b246IHN0cmluZyA9IFwib2JmLUJhc2ljRm9ybUNhbmNlbEJ1dHRvblwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgQmFzaWNGb3JtU3VibWl0QnV0dG9uU3Bpbm5lcjogc3RyaW5nID0gXCJvYmYtQmFzaWNGb3JtU3VibWl0QnV0dG9uU3Bpbm5lclwiO1xyXG5cclxuXHQvLyBUaGFua3MgUGFuZWwgaWRzXHJcblx0cHVibGljIHN0YXRpYyBUaGFua3NQYW5lbENvbnRhaW5lcjogc3RyaW5nID0gXCJvYmYtVGhhbmtzUGFuZWxDb250YWluZXJcIjtcclxuXHRwdWJsaWMgc3RhdGljIFRoYW5rc1BhbmVsQ2xvc2VCdXR0b246IHN0cmluZyA9IFwib2JmLVRoYW5rc1BhbmVsQ2xvc2VCdXR0b25cIjtcclxuXHRwdWJsaWMgc3RhdGljIFRoYW5rc1BhbmVsRGlzY3Vzc2lvbjogc3RyaW5nID0gXCJvYmYtVGhhbmtzUGFuZWxEaXNjdXNzaW9uXCI7XHJcblx0cHVibGljIHN0YXRpYyBUaGFua3NQYW5lbFZlcnRpY2FsQ29udGFpbmVyOiBzdHJpbmcgPSBcIm9iZi1UaGFua3NQYW5lbFZlcnRpY2FsQ29udGFpbmVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBUaGFua3NQYW5lbElubmVyQ29udGFpbmVyOiBzdHJpbmcgPSBcIm9iZi1UaGFua3NQYW5lbElubmVyQ29udGFpbmVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBUaGFua3NQYW5lbFBhcmFncmFwaDogc3RyaW5nID0gXCJvYmYtVGhhbmtzUGFuZWxQYXJhZ3JhcGhcIjtcclxuXHJcblx0Ly8gRmVlZGJhY2sgUG9ydGFsIElkZWEgSWRcclxuXHRwdWJsaWMgc3RhdGljIEZlZWRiYWNrUG9ydGFsSWRlYUNvbnRhaW5lcjogc3RyaW5nID0gXCJvYmYtRmVlZGJhY2tQb3J0YWxJZGVhQ29udGFpbmVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBPdmVyYWxsRmVlZGJhY2tQb3J0YWxJZGVhQW5jaG9yOiBzdHJpbmcgPSBcIm9iZi1PdmVyYWxsRmVlZGJhY2tQb3J0YWxJZGVhQW5jaG9yXCI7XHJcblxyXG5cdC8vIGVuZHJlZ2lvblxyXG5cclxuXHQvLyByZWdpb24gVG9hc3RcclxuXHRwdWJsaWMgc3RhdGljIFRvYXN0Q29udGFpbmVyOiBzdHJpbmcgPSBcIm9iZi1Ub2FzdENvbnRhaW5lclwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgVG9hc3RDYW5jZWw6IHN0cmluZyA9IFwib2JmLVRvYXN0Q2FuY2VsXCI7XHJcblxyXG5cdC8vIFByb21wdCBpZHNcclxuXHRwdWJsaWMgc3RhdGljIFRQcm9tcHRDb250YWluZXI6IHN0cmluZyA9IFwib2JmLVRQcm9tcHRDb250YWluZXJcIjtcclxuXHRwdWJsaWMgc3RhdGljIFRQcm9tcHRUaXRsZTogc3RyaW5nID0gXCJvYmYtVFByb21wdFRpdGxlXCI7XHJcblx0cHVibGljIHN0YXRpYyBUUHJvbXB0VGV4dDogc3RyaW5nID0gXCJvYmYtVFByb21wdFRleHRcIjtcclxuXHJcblx0Ly8gU3VydmV5IGlkc1xyXG5cdHB1YmxpYyBzdGF0aWMgVEZvcm1Db250YWluZXI6IHN0cmluZyA9IFwib2JmLVRGb3JtQ29udGFpbmVyXCI7XHJcblx0cHVibGljIHN0YXRpYyBURm9ybVRpdGxlOiBzdHJpbmcgPSBcIm9iZi1URm9ybVRpdGxlXCI7XHJcblx0cHVibGljIHN0YXRpYyBURm9ybVJhdGluZzogc3RyaW5nID0gXCJvYmYtVEZvcm1SYXRpbmdcIjtcclxuXHRwdWJsaWMgc3RhdGljIFRGb3JtUmF0aW5nUXVlc3Rpb246IHN0cmluZyA9IFwib2JmLVRGb3JtUmF0aW5nUXVlc3Rpb25cIjtcclxuXHRwdWJsaWMgc3RhdGljIFRGb3JtQ29tbWVudDogc3RyaW5nID0gXCJvYmYtVEZvcm1Db21tZW50XCI7XHJcblx0cHVibGljIHN0YXRpYyBURm9ybUVtYWlsVGV4dEJveDogc3RyaW5nID0gXCJvYmYtVEZvcm1FbWFpbFRleHRCb3hcIjtcclxuXHRwdWJsaWMgc3RhdGljIFRGb3JtRW1haWxDaGVja0JveDogc3RyaW5nID0gXCJvYmYtVEZvcm1FbWFpbENoZWNrQm94XCI7XHJcblx0cHVibGljIHN0YXRpYyBURm9ybUVtYWlsTGFiZWw6IHN0cmluZyA9IFwib2JmLVRGb3JtRW1haWxMYWJlbFwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgVEZvcm1TdWJtaXRCdXR0b246IHN0cmluZyA9IFwib2JmLVRGb3JtU3VibWl0QnV0dG9uXCI7XHJcblx0cHVibGljIHN0YXRpYyBURm9ybVN1Ym1pdEJ1dHRvblNwaW5uZXI6IHN0cmluZyA9IFwib2JmLVRGb3JtU3VibWl0QnV0dG9uU3Bpbm5lclwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgVEZvcm1TdWJtaXRCdXR0b25Db250YWluZXI6IHN0cmluZyA9IFwib2JmLVRGb3JtU3VibWl0QnV0dG9uQ29udGFpbmVyXCI7XHJcblxyXG5cdC8vIGVuZHJlZ2lvblxyXG59XHJcblxyXG4vKipcclxuICogS2V5c1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEtleXMge1xyXG5cdHB1YmxpYyBzdGF0aWMgRXNjOiBudW1iZXIgPSAyNztcclxuXHRwdWJsaWMgc3RhdGljIFRhYjogbnVtYmVyID0gOTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEhUTUwgdGFnc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRhZ3Mge1xyXG5cdHB1YmxpYyBzdGF0aWMgQW5jaG9yOiBzdHJpbmcgPSBcIkFcIjtcclxuXHRwdWJsaWMgc3RhdGljIEJ1dHRvbjogc3RyaW5nID0gXCJidXR0b25cIjtcclxuXHRwdWJsaWMgc3RhdGljIERlZnM6IHN0cmluZyA9IFwiZGVmc1wiO1xyXG5cdHB1YmxpYyBzdGF0aWMgRGl2OiBzdHJpbmcgPSBcImRpdlwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgRmllbGRTZXQ6IHN0cmluZyA9IFwiZmllbGRzZXRcIjtcclxuXHRwdWJsaWMgc3RhdGljIEZvcm06IHN0cmluZyA9IFwiZm9ybVwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgSW1nOiBzdHJpbmcgPSBcImltZ1wiO1xyXG5cdHB1YmxpYyBzdGF0aWMgSW5wdXQ6IHN0cmluZyA9IFwiaW5wdXRcIjtcclxuXHRwdWJsaWMgc3RhdGljIExhYmVsOiBzdHJpbmcgPSBcImxhYmVsXCI7XHJcblx0cHVibGljIHN0YXRpYyBMZWdlbmQ6IHN0cmluZyA9IFwibGVnZW5kXCI7XHJcblx0cHVibGljIHN0YXRpYyBPcHRpb246IHN0cmluZyA9IFwib3B0aW9uXCI7XHJcblx0cHVibGljIHN0YXRpYyBQb2x5Z29uOiBzdHJpbmcgPSBcInBvbHlnb25cIjtcclxuXHRwdWJsaWMgc3RhdGljIFNlbGVjdDogc3RyaW5nID0gXCJzZWxlY3RcIjtcclxuXHRwdWJsaWMgc3RhdGljIFNwYW46IHN0cmluZyA9IFwic3BhblwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgU3ZnOiBzdHJpbmcgPSBcInN2Z1wiO1xyXG5cdHB1YmxpYyBzdGF0aWMgVGV4dEFyZWE6IHN0cmluZyA9IFwidGV4dGFyZWFcIjtcclxuXHRwdWJsaWMgc3RhdGljIFVzZTogc3RyaW5nID0gXCJ1c2VcIjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEhUTUwgcm9sZXNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBSb2xlcyB7XHJcblx0cHVibGljIHN0YXRpYyBCdXR0b246IHN0cmluZyA9IFwiQnV0dG9uXCI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVUkxzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVXJscyB7XHJcblx0LyoqXHJcblx0ICogTGluayB0byB0aGUgZmVlZGJhY2sgUHJpdmFjeSBTdGF0ZW1lbnRcclxuXHQgKi9cclxuXHRwdWJsaWMgc3RhdGljIFByaXZhY3lTdGF0ZW1lbnRMaW5rOiBzdHJpbmcgPSBcImh0dHBzOi8vZ28ubWljcm9zb2Z0LmNvbS9md2xpbmsvP0xpbmtJZD01MjE4MzlcIjtcclxufVxyXG5cclxuLyoqXHJcbiAqIHByb21wdCBjb25zdGFudHNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQcm9tcHRDb25zdGFudHMge1xyXG5cdHB1YmxpYyBzdGF0aWMgTm86IHN0cmluZyA9IFwiMVwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgWWVzOiBzdHJpbmcgPSBcIjJcIjtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/UI/UiConstants.ts\n')},"./scripts/app/UI/Utils.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setElementVisibility", function() { return setElementVisibility; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteElementById", function() { return deleteElementById; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addClassById", function() { return addClassById; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteClassById", function() { return deleteClassById; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "replaceClassesById", function() { return replaceClassesById; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAttributeOnHtmlElement", function() { return setAttributeOnHtmlElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addEventListenerHelper", function() { return addEventListenerHelper; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeEventListenerHelper", function() { return removeEventListenerHelper; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerListener", function() { return registerListener; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerListenerToElement", function() { return registerListenerToElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unregisterListener", function() { return unregisterListener; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getInternetExplorerVersion", function() { return getInternetExplorerVersion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isRightToLeft", function() { return isRightToLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScreenshotPreviewByCheckbox", function() { return ScreenshotPreviewByCheckbox; });\n/* harmony import */ var _UiConstants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UiConstants */ "./scripts/app/UI/UiConstants.ts");\n/* harmony import */ var _Screenshot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../Screenshot */ "./scripts/app/Screenshot.ts");\n/* harmony import */ var _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../Logging/Logging */ "./scripts/app/Logging/Logging.ts");\n/**\r\n * Utils.ts\r\n *\r\n * Module for utility functions\r\n */\r\n\r\n\r\n\r\n/**\r\n * Set HTML element visibility\r\n * @param {string} id The Id of the HTML element\r\n * @param {any} vis The visibility to be set (true or false)\r\n * @return {void}\r\n */\r\nfunction setElementVisibility(id, vis) {\r\n    var oldClassName = vis ? _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].Hidden : _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].Visible;\r\n    var newClassName = vis ? _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].Visible : _UiConstants__WEBPACK_IMPORTED_MODULE_0__["Classes"].Hidden;\r\n    replaceClassesById(id, oldClassName, newClassName);\r\n}\r\n/**\r\n * Delete HTML element by Id\r\n * @param {string} id The Id of the HTML element\r\n * @return {void}\r\n */\r\nfunction deleteElementById(id) {\r\n    var element = document.getElementById(id);\r\n    if (element != null && element.parentNode != null) {\r\n        element.parentNode.removeChild(element);\r\n    }\r\n}\r\n/**\r\n * Add a CSS class to an HTML element by Id\r\n * @param {string} id The Id of the HTML element\r\n * @param {string} newClassName The name of CSS class to be added\r\n * @return {void}\r\n */\r\nfunction addClassById(id, newClass) {\r\n    var element = document.getElementById(id);\r\n    if (!element) {\r\n        return;\r\n    }\r\n    // check is the class already exists, if not add it\r\n    if (!element.className.match(new RegExp("\\\\b" + newClass + "\\\\b"))) {\r\n        // we use className instead of classList to support IE9\r\n        element.className = element.className + " " + newClass;\r\n    }\r\n}\r\n/**\r\n * Delete a CSS class of an HTML element by Id\r\n * @param {string} id The Id of the HTML element\r\n * @param {string} oldClassName The name of CSS class to be deleted\r\n * @return {void}\r\n */\r\nfunction deleteClassById(id, oldClass) {\r\n    var element = document.getElementById(id);\r\n    if (!element) {\r\n        return;\r\n    }\r\n    // we use className instead of classList to support IE9\r\n    // get rid of any occurrences of the class we don"t want\r\n    element.className = element.className.split(new RegExp("\\\\b" + oldClass + "\\\\b", "i")).join(" ");\r\n    // get rid of extra whitespaces\r\n    element.className = element.className.split(/\\s+/).join(" ");\r\n}\r\n/**\r\n * Delete an CSS class and (or) add an CSS class to an HTML element by Id\r\n * @param {string} id The Id of the HTML element\r\n * @param {string} oldClassName The name of CSS class to be deleted\r\n * @param {string} newClassName The name of CSS class to be added\r\n * @return {void}\r\n */\r\nfunction replaceClassesById(id, oldClassName, newClassName) {\r\n    deleteClassById(id, oldClassName);\r\n    addClassById(id, newClassName);\r\n}\r\n/**\r\n * Set attribute on an HTML element\r\n * @param {string} id The Id of the HTML element\r\n * @param {string} attriName The attribute name\r\n * @param {string} attriValue The attribute value\r\n * @return {void}\r\n */\r\nfunction setAttributeOnHtmlElement(id, attriName, attriValue) {\r\n    var htmlElement = document.getElementById(id);\r\n    if (htmlElement) {\r\n        htmlElement.setAttribute(attriName, attriValue);\r\n    }\r\n}\r\n/**\r\n * Add event listener helper function (wrapper) that deals with IE 8 compatability\r\n * @param object The object to add event listener to\r\n * @param type The event type\r\n * @param listener The listener function\r\n */\r\nfunction addEventListenerHelper(object, type, listener) {\r\n    if (object.addEventListener) {\r\n        object.addEventListener(type, listener, false);\r\n    }\r\n    else if (object.attachEvent) {\r\n        object.attachEvent("on" + type, listener);\r\n    }\r\n}\r\n/**\r\n * Remove event listener helper function (wrapper) that deals with IE 8 compatability\r\n * @param object The object to remove event listener from\r\n * @param type The event type\r\n * @param listener The listener function\r\n */\r\nfunction removeEventListenerHelper(object, type, listener) {\r\n    if (object.removeEventListener) {\r\n        object.removeEventListener(type, listener, false);\r\n    }\r\n    else if (object.detachEvent) {\r\n        object.detachEvent("on" + type, listener);\r\n    }\r\n}\r\n/**\r\n * Register event listener\r\n * @param id The Id of the HTML element\r\n * @param type The event type\r\n * @param listener The listener function\r\n */\r\nfunction registerListener(id, type, listener) {\r\n    var element = document.getElementById(id);\r\n    if (element) {\r\n        addEventListenerHelper(element, type, listener);\r\n    }\r\n}\r\n/**\r\n * Register event listener\r\n * @param element The HTML element\r\n * @param type The event type\r\n * @param listener The listener function\r\n */\r\nfunction registerListenerToElement(element, type, listener) {\r\n    if (element) {\r\n        addEventListenerHelper(element, type, listener);\r\n    }\r\n}\r\n/**\r\n * Un-register event listener\r\n * @param id The Id of the HTML element\r\n * @param type The event type\r\n * @param listener The listener function\r\n */\r\nfunction unregisterListener(id, type, listener) {\r\n    var element = document.getElementById(id);\r\n    if (element) {\r\n        removeEventListenerHelper(element, type, listener);\r\n    }\r\n}\r\n/**\r\n * Returns the version of Internet Explorer or -1 for non-IE browser\r\n * @return {number} The IE version\r\n */\r\nfunction getInternetExplorerVersion() {\r\n    var rv = -1;\r\n    var ua = window.navigator.userAgent;\r\n    // since IE 11, \'MSIE\' is not a keyword in its user agent string anymore\r\n    // determine whether the browser is IE or not, and the version of IE based on Trident keyword and its version\r\n    if (ua.indexOf("Trident") > -1) {\r\n        var re = new RegExp("Trident/([0-9]{1,}[\\.0-9]{0,})");\r\n        if (re.exec(ua) != null) {\r\n            rv = parseFloat(RegExp.$1);\r\n            rv += 4; // trident version + 4 is the IE version\r\n        }\r\n    }\r\n    return rv;\r\n}\r\n/**\r\n * Check if the current text direction is right to left\r\n */\r\nfunction isRightToLeft() {\r\n    return getComputedStyle(document.documentElement).direction === "rtl";\r\n}\r\n/**\r\n * Screenshot preview is control by screenshot check box. Populate preview if checkbox is checked\r\n * @param screenshotCheckboxId The Id of screenshot checkbox\r\n * @param screenshotPreviewId The Id of preview\r\n */\r\nfunction ScreenshotPreviewByCheckbox(screenshotCheckboxId, screenshotPreviewId) {\r\n    var screenshotCheckBox = document.getElementById(screenshotCheckboxId);\r\n    var screenshotCheckBoxSelected = screenshotCheckBox && screenshotCheckBox.checked;\r\n    var preview = document.getElementById(screenshotPreviewId);\r\n    if (screenshotCheckBoxSelected) {\r\n        setElementVisibility(screenshotPreviewId, true);\r\n        var startTime_1 = performance.now();\r\n        _Screenshot__WEBPACK_IMPORTED_MODULE_1__["createScreenshot"](document.body).then(function (canvas) {\r\n            var endTime = performance.now();\r\n            _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["EventIds"].Shared.Screenshot.Render.Success.VALUE, 1 /* Critical */, { TimeMilliseconds: endTime - startTime_1 });\r\n            preview.src = canvas.toDataURL();\r\n        }).catch(function (error) {\r\n            var endTime = performance.now();\r\n            _Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["getLogger"]().logEvent(_Logging_Logging__WEBPACK_IMPORTED_MODULE_2__["EventIds"].Shared.Screenshot.Render.Failed.VALUE, 2 /* Error */, { ErrorMessage: error, TimeMilliseconds: endTime - startTime_1 });\r\n        });\r\n    }\r\n    else {\r\n        setElementVisibility(screenshotPreviewId, false);\r\n    }\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSS9VdGlscy50cz9iYWY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7O0dBSUc7QUFFcUM7QUFDTTtBQUNFO0FBRWhEOzs7OztHQUtHO0FBQ0ksU0FBUyxvQkFBb0IsQ0FBQyxFQUFVLEVBQUUsR0FBWTtJQUM1RCxJQUFJLFlBQVksR0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLG9EQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxvREFBTyxDQUFDLE9BQU8sQ0FBQztJQUNsRSxJQUFJLFlBQVksR0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLG9EQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxvREFBTyxDQUFDLE1BQU0sQ0FBQztJQUVsRSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksU0FBUyxpQkFBaUIsQ0FBQyxFQUFVO0lBQzNDLElBQUksT0FBTyxHQUFnQixRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRTtRQUNsRCxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN4QztBQUNGLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLFNBQVMsWUFBWSxDQUFDLEVBQVUsRUFBRSxRQUFnQjtJQUN4RCxJQUFJLE9BQU8sR0FBZ0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUV2RCxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ2IsT0FBTztLQUNQO0lBRUQsbURBQW1EO0lB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LENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDakQ7QUFDRixDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVUkvVXRpbHMudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVXRpbHMudHNcclxuICpcclxuICogTW9kdWxlIGZvciB1dGlsaXR5IGZ1bmN0aW9uc1xyXG4gKi9cclxuXHJcbmltcG9ydCB7IENsYXNzZXMgfSBmcm9tIFwiLi9VaUNvbnN0YW50c1wiO1xyXG5pbXBvcnQgKiBhcyBTY3JlZW5zaG90IGZyb20gXCIuLy4uL1NjcmVlbnNob3RcIjtcclxuaW1wb3J0ICogYXMgTG9nZ2luZyBmcm9tIFwiLi8uLi9Mb2dnaW5nL0xvZ2dpbmdcIjtcclxuXHJcbi8qKlxyXG4gKiBTZXQgSFRNTCBlbGVtZW50IHZpc2liaWxpdHlcclxuICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJZCBvZiB0aGUgSFRNTCBlbGVtZW50XHJcbiAqIEBwYXJhbSB7YW55fSB2aXMgVGhlIHZpc2liaWxpdHkgdG8gYmUgc2V0ICh0cnVlIG9yIGZhbHNlKVxyXG4gKiBAcmV0dXJuIHt2b2lkfVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVsZW1lbnRWaXNpYmlsaXR5KGlkOiBzdHJpbmcsIHZpczogYm9vbGVhbik6IHZvaWQge1xyXG5cdGxldCBvbGRDbGFzc05hbWU6IHN0cmluZyA9IHZpcyA/IENsYXNzZXMuSGlkZGVuIDogQ2xhc3Nlcy5WaXNpYmxlO1xyXG5cdGxldCBuZXdDbGFzc05hbWU6IHN0cmluZyA9IHZpcyA/IENsYXNzZXMuVmlzaWJsZSA6IENsYXNzZXMuSGlkZGVuO1xyXG5cclxuXHRyZXBsYWNlQ2xhc3Nlc0J5SWQoaWQsIG9sZENsYXNzTmFtZSwgbmV3Q2xhc3NOYW1lKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIERlbGV0ZSBIVE1MIGVsZW1lbnQgYnkgSWRcclxuICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJZCBvZiB0aGUgSFRNTCBlbGVtZW50XHJcbiAqIEByZXR1cm4ge3ZvaWR9XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRWxlbWVudEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG5cdGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHRpZiAoZWxlbWVudCAhPSBudWxsICYmIGVsZW1lbnQucGFyZW50Tm9kZSAhPSBudWxsKSB7XHJcblx0XHRlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogQWRkIGEgQ1NTIGNsYXNzIHRvIGFuIEhUTUwgZWxlbWVudCBieSBJZFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElkIG9mIHRoZSBIVE1MIGVsZW1lbnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG5ld0NsYXNzTmFtZSBUaGUgbmFtZSBvZiBDU1MgY2xhc3MgdG8gYmUgYWRkZWRcclxuICogQHJldHVybiB7dm9pZH1cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBhZGRDbGFzc0J5SWQoaWQ6IHN0cmluZywgbmV3Q2xhc3M6IHN0cmluZyk6IHZvaWQge1xyXG5cdGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHJcblx0aWYgKCFlbGVtZW50KSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHQvLyBjaGVjayBpcyB0aGUgY2xhc3MgYWxyZWFkeSBleGlzdHMsIGlmIG5vdCBhZGQgaXRcclxuXHRpZiAoIWVsZW1lbnQuY2xhc3NOYW1lLm1hdGNoKG5ldyBSZWdFeHAoXCJcXFxcYlwiICsgbmV3Q2xhc3MgKyBcIlxcXFxiXCIpKSkge1xyXG5cdFx0Ly8gd2UgdXNlIGNsYXNzTmFtZSBpbnN0ZWFkIG9mIGNsYXNzTGlzdCB0byBzdXBwb3J0IElFOVxyXG5cdFx0ZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZSArIFwiIFwiICsgbmV3Q2xhc3M7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogRGVsZXRlIGEgQ1NTIGNsYXNzIG9mIGFuIEhUTUwgZWxlbWVudCBieSBJZFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElkIG9mIHRoZSBIVE1MIGVsZW1lbnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG9sZENsYXNzTmFtZSBUaGUgbmFtZSBvZiBDU1MgY2xhc3MgdG8gYmUgZGVsZXRlZFxyXG4gKiBAcmV0dXJuIHt2b2lkfVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUNsYXNzQnlJZChpZDogc3RyaW5nLCBvbGRDbGFzczogc3RyaW5nKTogdm9pZCB7XHJcblx0bGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG5cclxuXHRpZiAoIWVsZW1lbnQpIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdC8vIHdlIHVzZSBjbGFzc05hbWUgaW5zdGVhZCBvZiBjbGFzc0xpc3QgdG8gc3VwcG9ydCBJRTlcclxuXHQvLyBnZXQgcmlkIG9mIGFueSBvY2N1cnJlbmNlcyBvZiB0aGUgY2xhc3Mgd2UgZG9uXCJ0IHdhbnRcclxuXHRlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KG5ldyBSZWdFeHAoXCJcXFxcYlwiICsgb2xkQ2xhc3MgKyBcIlxcXFxiXCIsIFwiaVwiKSkuam9pbihcIiBcIik7XHJcblxyXG5cdC8vIGdldCByaWQgb2YgZXh0cmEgd2hpdGVzcGFjZXNcclxuXHRlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KC9cXHMrLykuam9pbihcIiBcIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZWxldGUgYW4gQ1NTIGNsYXNzIGFuZCAob3IpIGFkZCBhbiBDU1MgY2xhc3MgdG8gYW4gSFRNTCBlbGVtZW50IGJ5IElkXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgSWQgb2YgdGhlIEhUTUwgZWxlbWVudFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gb2xkQ2xhc3NOYW1lIFRoZSBuYW1lIG9mIENTUyBjbGFzcyB0byBiZSBkZWxldGVkXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdDbGFzc05hbWUgVGhlIG5hbWUgb2YgQ1NTIGNsYXNzIHRvIGJlIGFkZGVkXHJcbiAqIEByZXR1cm4ge3ZvaWR9XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNsYXNzZXNCeUlkKGlkOiBzdHJpbmcsIG9sZENsYXNzTmFtZT86IHN0cmluZywgbmV3Q2xhc3NOYW1lPzogc3RyaW5nKTogdm9pZCB7XHJcblx0ZGVsZXRlQ2xhc3NCeUlkKGlkLCBvbGRDbGFzc05hbWUpO1xyXG5cdGFkZENsYXNzQnlJZChpZCwgbmV3Q2xhc3NOYW1lKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCBhdHRyaWJ1dGUgb24gYW4gSFRNTCBlbGVtZW50XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgSWQgb2YgdGhlIEhUTUwgZWxlbWVudFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlOYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlWYWx1ZSBUaGUgYXR0cmlidXRlIHZhbHVlXHJcbiAqIEByZXR1cm4ge3ZvaWR9XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0QXR0cmlidXRlT25IdG1sRWxlbWVudChpZDogc3RyaW5nLCBhdHRyaU5hbWU6IHN0cmluZywgYXR0cmlWYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcblx0bGV0IGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCA9IDxIVE1MRWxlbWVudD4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG5cdGlmIChodG1sRWxlbWVudCkge1xyXG5cdFx0aHRtbEVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpTmFtZSwgYXR0cmlWYWx1ZSk7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogQWRkIGV2ZW50IGxpc3RlbmVyIGhlbHBlciBmdW5jdGlvbiAod3JhcHBlcikgdGhhdCBkZWFscyB3aXRoIElFIDggY29tcGF0YWJpbGl0eVxyXG4gKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gYWRkIGV2ZW50IGxpc3RlbmVyIHRvXHJcbiAqIEBwYXJhbSB0eXBlIFRoZSBldmVudCB0eXBlXHJcbiAqIEBwYXJhbSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgZnVuY3Rpb25cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVySGVscGVyKG9iamVjdDogYW55LCB0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkKTogdm9pZCB7XHJcblx0aWYgKG9iamVjdC5hZGRFdmVudExpc3RlbmVyKSB7XHJcblx0XHRvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xyXG5cdH0gZWxzZSBpZiAob2JqZWN0LmF0dGFjaEV2ZW50KSB7XHJcblx0XHRvYmplY3QuYXR0YWNoRXZlbnQoXCJvblwiICsgdHlwZSwgbGlzdGVuZXIpO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lciBoZWxwZXIgZnVuY3Rpb24gKHdyYXBwZXIpIHRoYXQgZGVhbHMgd2l0aCBJRSA4IGNvbXBhdGFiaWxpdHlcclxuICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIHJlbW92ZSBldmVudCBsaXN0ZW5lciBmcm9tXHJcbiAqIEBwYXJhbSB0eXBlIFRoZSBldmVudCB0eXBlXHJcbiAqIEBwYXJhbSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgZnVuY3Rpb25cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVySGVscGVyKG9iamVjdDogYW55LCB0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkKTogdm9pZCB7XHJcblx0aWYgKG9iamVjdC5yZW1vdmVFdmVudExpc3RlbmVyKSB7XHJcblx0XHRvYmplY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xyXG5cdH0gZWxzZSBpZiAob2JqZWN0LmRldGFjaEV2ZW50KSB7XHJcblx0XHRvYmplY3QuZGV0YWNoRXZlbnQoXCJvblwiICsgdHlwZSwgbGlzdGVuZXIpO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVyXHJcbiAqIEBwYXJhbSBpZCBUaGUgSWQgb2YgdGhlIEhUTUwgZWxlbWVudFxyXG4gKiBAcGFyYW0gdHlwZSBUaGUgZXZlbnQgdHlwZVxyXG4gKiBAcGFyYW0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIGZ1bmN0aW9uXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJMaXN0ZW5lcihpZDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkKTogdm9pZCB7XHJcblx0bGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG5cdGlmIChlbGVtZW50KSB7XHJcblx0XHRhZGRFdmVudExpc3RlbmVySGVscGVyKGVsZW1lbnQsIHR5cGUsIGxpc3RlbmVyKTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlciBldmVudCBsaXN0ZW5lclxyXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgSFRNTCBlbGVtZW50XHJcbiAqIEBwYXJhbSB0eXBlIFRoZSBldmVudCB0eXBlXHJcbiAqIEBwYXJhbSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgZnVuY3Rpb25cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlckxpc3RlbmVyVG9FbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkKTogdm9pZCB7XHJcblx0aWYgKGVsZW1lbnQpIHtcclxuXHRcdGFkZEV2ZW50TGlzdGVuZXJIZWxwZXIoZWxlbWVudCwgdHlwZSwgbGlzdGVuZXIpO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFVuLXJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVyXHJcbiAqIEBwYXJhbSBpZCBUaGUgSWQgb2YgdGhlIEhUTUwgZWxlbWVudFxyXG4gKiBAcGFyYW0gdHlwZSBUaGUgZXZlbnQgdHlwZVxyXG4gKiBAcGFyYW0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIGZ1bmN0aW9uXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3Rlckxpc3RlbmVyKGlkOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQpOiB2b2lkIHtcclxuXHRsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcblx0aWYgKGVsZW1lbnQpIHtcclxuXHRcdHJlbW92ZUV2ZW50TGlzdGVuZXJIZWxwZXIoZWxlbWVudCwgdHlwZSwgbGlzdGVuZXIpO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHZlcnNpb24gb2YgSW50ZXJuZXQgRXhwbG9yZXIgb3IgLTEgZm9yIG5vbi1JRSBicm93c2VyXHJcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIElFIHZlcnNpb25cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5ldEV4cGxvcmVyVmVyc2lvbigpOiBudW1iZXIge1xyXG5cdGxldCBydjogbnVtYmVyID0gLTE7XHJcblx0bGV0IHVhOiBzdHJpbmcgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuXHJcblx0Ly8gc2luY2UgSUUgMTEsICdNU0lFJyBpcyBub3QgYSBrZXl3b3JkIGluIGl0cyB1c2VyIGFnZW50IHN0cmluZyBhbnltb3JlXHJcblx0Ly8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGJyb3dzZXIgaXMgSUUgb3Igbm90LCBhbmQgdGhlIHZlcnNpb24gb2YgSUUgYmFzZWQgb24gVHJpZGVudCBrZXl3b3JkIGFuZCBpdHMgdmVyc2lvblxyXG5cdGlmICh1YS5pbmRleE9mKFwiVHJpZGVudFwiKSA+IC0xKSB7XHJcblx0XHRsZXQgcmU6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoXCJUcmlkZW50LyhbMC05XXsxLH1bXFwuMC05XXswLH0pXCIpO1xyXG5cdFx0aWYgKHJlLmV4ZWModWEpICE9IG51bGwpIHtcclxuXHRcdFx0cnYgPSBwYXJzZUZsb2F0KFJlZ0V4cC4kMSk7XHJcblx0XHRcdHJ2ICs9IDQ7IC8vIHRyaWRlbnQgdmVyc2lvbiArIDQgaXMgdGhlIElFIHZlcnNpb25cclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIHJ2O1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGV4dCBkaXJlY3Rpb24gaXMgcmlnaHQgdG8gbGVmdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmlnaHRUb0xlZnQoKTogYm9vbGVhbiB7XHJcblx0cmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5kaXJlY3Rpb24gPT09IFwicnRsXCI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTY3JlZW5zaG90IHByZXZpZXcgaXMgY29udHJvbCBieSBzY3JlZW5zaG90IGNoZWNrIGJveC4gUG9wdWxhdGUgcHJldmlldyBpZiBjaGVja2JveCBpcyBjaGVja2VkIFxyXG4gKiBAcGFyYW0gc2NyZWVuc2hvdENoZWNrYm94SWQgVGhlIElkIG9mIHNjcmVlbnNob3QgY2hlY2tib3ggXHJcbiAqIEBwYXJhbSBzY3JlZW5zaG90UHJldmlld0lkIFRoZSBJZCBvZiBwcmV2aWV3IFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFNjcmVlbnNob3RQcmV2aWV3QnlDaGVja2JveChzY3JlZW5zaG90Q2hlY2tib3hJZDogc3RyaW5nLCBzY3JlZW5zaG90UHJldmlld0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRsZXQgc2NyZWVuc2hvdENoZWNrQm94ID0gPEhUTUxJbnB1dEVsZW1lbnQ+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNjcmVlbnNob3RDaGVja2JveElkKTtcclxuXHRsZXQgc2NyZWVuc2hvdENoZWNrQm94U2VsZWN0ZWQ6IGJvb2xlYW4gPSBzY3JlZW5zaG90Q2hlY2tCb3ggJiYgc2NyZWVuc2hvdENoZWNrQm94LmNoZWNrZWQ7XHJcblx0bGV0IHByZXZpZXcgPSA8SFRNTEltYWdlRWxlbWVudD4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2NyZWVuc2hvdFByZXZpZXdJZCk7XHJcblxyXG5cdGlmIChzY3JlZW5zaG90Q2hlY2tCb3hTZWxlY3RlZCkge1xyXG5cdFx0c2V0RWxlbWVudFZpc2liaWxpdHkoc2NyZWVuc2hvdFByZXZpZXdJZCwgdHJ1ZSk7XHJcblx0XHRsZXQgc3RhcnRUaW1lOiBudW1iZXIgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuXHRcdFNjcmVlbnNob3QuY3JlYXRlU2NyZWVuc2hvdChkb2N1bWVudC5ib2R5KS50aGVuKFxyXG5cdFx0XHQoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCkgPT4ge1xyXG5cdFx0XHRcdGxldCBlbmRUaW1lOiBudW1iZXIgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuXHRcdFx0XHRMb2dnaW5nLmdldExvZ2dlcigpLmxvZ0V2ZW50KExvZ2dpbmcuRXZlbnRJZHMuU2hhcmVkLlNjcmVlbnNob3QuUmVuZGVyLlN1Y2Nlc3MuVkFMVUUsXHJcblx0XHRcdFx0XHRMb2dnaW5nLkxvZ0xldmVsLkNyaXRpY2FsLFxyXG5cdFx0XHRcdFx0eyBUaW1lTWlsbGlzZWNvbmRzOiBlbmRUaW1lIC0gc3RhcnRUaW1lIH0pO1xyXG5cclxuXHRcdFx0XHRwcmV2aWV3LnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcclxuXHRcdFx0fVxyXG5cdFx0KS5jYXRjaCgoZXJyb3I6IGFueSkgPT4ge1xyXG5cdFx0XHRsZXQgZW5kVGltZTogbnVtYmVyID0gcGVyZm9ybWFuY2Uubm93KCk7XHJcblx0XHRcdExvZ2dpbmcuZ2V0TG9nZ2VyKCkubG9nRXZlbnQoTG9nZ2luZy5FdmVudElkcy5TaGFyZWQuU2NyZWVuc2hvdC5SZW5kZXIuRmFpbGVkLlZBTFVFLFxyXG5cdFx0XHRcdExvZ2dpbmcuTG9nTGV2ZWwuRXJyb3IsXHJcblx0XHRcdFx0eyBFcnJvck1lc3NhZ2U6IGVycm9yLCBUaW1lTWlsbGlzZWNvbmRzOiBlbmRUaW1lIC0gc3RhcnRUaW1lIH0pO1xyXG5cdFx0fSk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHNldEVsZW1lbnRWaXNpYmlsaXR5KHNjcmVlbnNob3RQcmV2aWV3SWQsIGZhbHNlKTtcclxuXHR9XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/UI/Utils.ts\n')},"./scripts/app/UIStrings/UIStrings.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setUIStrings", function() { return setUIStrings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUIStrings", function() { return getUIStrings; });\n/**\r\n * UIStrings.ts\r\n *\r\n * Module for the strings to display\r\n */\r\n/**\r\n * Localized UI strings\r\n */\r\nvar uIStrings;\r\n/**\r\n * Set UI strings\r\n * @param {string} data List of localized UI strings\r\n */\r\nfunction setUIStrings(data) {\r\n    uIStrings = data;\r\n}\r\n/**\r\n * Get UI strings\r\n * @returns the UIStrings\r\n */\r\nfunction getUIStrings() {\r\n    return uIStrings;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VSVN0cmluZ3MvVUlTdHJpbmdzLnRzPzlkY2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7R0FJRztBQTZGSDs7R0FFRztBQUNILElBQUksU0FBcUIsQ0FBQztBQUUxQjs7O0dBR0c7QUFDSSxTQUFTLFlBQVksQ0FBQyxJQUFnQjtJQUM1QyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7O0dBR0c7QUFDSSxTQUFTLFlBQVk7SUFDM0IsT0FBTyxTQUFTLENBQUM7QUFDbEIsQ0FBQyIsImZpbGUiOiIuL3NjcmlwdHMvYXBwL1VJU3RyaW5ncy9VSVN0cmluZ3MudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVUlTdHJpbmdzLnRzXHJcbiAqXHJcbiAqIE1vZHVsZSBmb3IgdGhlIHN0cmluZ3MgdG8gZGlzcGxheVxyXG4gKi9cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVJU3RyaW5ncyB7XHJcblx0RmVlZGJhY2tTdWJ0aXRsZTogc3RyaW5nO1xyXG5cdFByaXZhY3lTdGF0ZW1lbnQ6IHN0cmluZztcclxuXHJcblx0Rm9ybToge1xyXG5cdFx0Q29tbWVudFBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblx0XHRDYXRlZ29yeVBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblx0XHRFbWFpbFBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblx0XHRSYXRpbmdMYWJlbDogc3RyaW5nO1xyXG5cdFx0U2NyZWVuc2hvdExhYmVsOiBzdHJpbmc7XHJcblx0XHRFbWFpbENoZWNrQm94TGFiZWw6IHN0cmluZztcclxuXHRcdFN1Ym1pdDogc3RyaW5nO1xyXG5cdFx0QmFzaWNGb3JtVGl0bGU6IHN0cmluZztcclxuXHRcdENhbmNlbDogc3RyaW5nO1xyXG5cdFx0U2NyZWVuc2hvdEltZ0FsdFRleHQ6IHN0cmluZztcclxuXHRcdFByaXZhY3lMYWJlbDogc3RyaW5nO1xyXG5cdFx0UHJpdmFjeUNvbnNlbnQ6IHN0cmluZztcclxuXHR9O1xyXG5cclxuXHRTaW5nbGVGb3JtOiB7XHJcblx0XHRUaXRsZTogc3RyaW5nO1xyXG5cdH07XHJcblxyXG5cdFNtaWxlRm9ybToge1xyXG5cdFx0QW5jaG9yOiBzdHJpbmc7XHJcblx0XHRUaXRsZTogc3RyaW5nO1xyXG5cdH07XHJcblxyXG5cdEZyb3duRm9ybToge1xyXG5cdFx0QW5jaG9yOiBzdHJpbmc7XHJcblx0XHRUaXRsZTogc3RyaW5nO1xyXG5cdH07XHJcblxyXG5cdElkZWFGb3JtOiB7XHJcblx0XHRBbmNob3I6IHN0cmluZztcclxuXHRcdFRpdGxlOiBzdHJpbmc7XHJcblx0fTtcclxuXHJcblx0QnVnRm9ybToge1xyXG5cdFx0QW5jaG9yOiBzdHJpbmc7XHJcblx0XHRUaXRsZTogc3RyaW5nO1xyXG5cdH07XHJcblxyXG5cdFRoYW5rc1BhbmVsOiB7XHJcblx0XHRUaXRsZTogc3RyaW5nO1xyXG5cdFx0QXBwcmVjaWF0ZVRleHQ6IHN0cmluZztcclxuXHRcdE15RmVlZGJhY2tEZXNjcmlwdGlvbjogc3RyaW5nO1xyXG5cdFx0TXlGZWVkYmFja0xpbmtUZXh0OiBzdHJpbmc7XHJcblx0XHRGZWVkYmFja1BvcnRhbERlc2NyaXB0aW9uOiBzdHJpbmc7XHJcblx0XHRGZWVkYmFja1BvcnRhbExpbmtUZXh0OiBzdHJpbmc7XHJcblx0XHRDbG9zZTogc3RyaW5nO1xyXG5cdH07XHJcblxyXG5cdEZsb29kZ2F0ZToge1xyXG5cdFx0TnBzOiB7XHJcblx0XHRcdFByb21wdDoge1xyXG5cdFx0XHRcdFRpdGxlOiBzdHJpbmc7XHJcblx0XHRcdFx0UXVlc3Rpb246IHN0cmluZztcclxuXHRcdFx0XHRZZXM6IHN0cmluZztcclxuXHRcdFx0XHRObzogc3RyaW5nO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Q29tbWVudDoge1xyXG5cdFx0XHRcdFF1ZXN0aW9uOiBzdHJpbmc7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRSYXRpbmc6IHtcclxuXHRcdFx0XHRRdWVzdGlvbjogc3RyaW5nO1xyXG5cdFx0XHRcdFBvaW50czExVmFsdWUwOiBzdHJpbmc7XHJcblx0XHRcdFx0UG9pbnRzMTFWYWx1ZTE6IHN0cmluZztcclxuXHRcdFx0XHRQb2ludHMxMVZhbHVlMjogc3RyaW5nO1xyXG5cdFx0XHRcdFBvaW50czExVmFsdWUzOiBzdHJpbmc7XHJcblx0XHRcdFx0UG9pbnRzMTFWYWx1ZTQ6IHN0cmluZztcclxuXHRcdFx0XHRQb2ludHMxMVZhbHVlNTogc3RyaW5nO1xyXG5cdFx0XHRcdFBvaW50czExVmFsdWU2OiBzdHJpbmc7XHJcblx0XHRcdFx0UG9pbnRzMTFWYWx1ZTc6IHN0cmluZztcclxuXHRcdFx0XHRQb2ludHMxMVZhbHVlODogc3RyaW5nO1xyXG5cdFx0XHRcdFBvaW50czExVmFsdWU5OiBzdHJpbmc7XHJcblx0XHRcdFx0UG9pbnRzMTFWYWx1ZTEwOiBzdHJpbmc7XHJcblx0XHRcdFx0UG9pbnRzNVZhbHVlMTogc3RyaW5nO1xyXG5cdFx0XHRcdFBvaW50czVWYWx1ZTI6IHN0cmluZztcclxuXHRcdFx0XHRQb2ludHM1VmFsdWUzOiBzdHJpbmc7XHJcblx0XHRcdFx0UG9pbnRzNVZhbHVlNDogc3RyaW5nO1xyXG5cdFx0XHRcdFBvaW50czVWYWx1ZTU6IHN0cmluZztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdENsb3NlTGFiZWw6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIExvY2FsaXplZCBVSSBzdHJpbmdzXHJcbiAqL1xyXG5sZXQgdUlTdHJpbmdzOiBJVUlTdHJpbmdzO1xyXG5cclxuLyoqXHJcbiAqIFNldCBVSSBzdHJpbmdzXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIExpc3Qgb2YgbG9jYWxpemVkIFVJIHN0cmluZ3NcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRVSVN0cmluZ3MoZGF0YTogSVVJU3RyaW5ncykge1xyXG5cdHVJU3RyaW5ncyA9IGRhdGE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgVUkgc3RyaW5nc1xyXG4gKiBAcmV0dXJucyB0aGUgVUlTdHJpbmdzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VUlTdHJpbmdzKCk6IElVSVN0cmluZ3Mge1xyXG5cdHJldHVybiB1SVN0cmluZ3M7XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/UIStrings/UIStrings.ts\n')},"./scripts/app/Utils.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "guid", function() { return guid; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "overrideValues", function() { return overrideValues; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNOU", function() { return isNOU; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isBoolean", function() { return isBoolean; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isInteger", function() { return isInteger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expectObject", function() { return expectObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expectNumber", function() { return expectNumber; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expectString", function() { return expectString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expectBoolean", function() { return expectBoolean; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expectGuid", function() { return expectGuid; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expectArray", function() { return expectArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expectEnum", function() { return expectEnum; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createTimeoutPromise", function() { return createTimeoutPromise; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkCssSelectorToBeSet", function() { return checkCssSelectorToBeSet; });\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ms-ofb/officefloodgatecore */ "../FloodgateCore/dist/index.js");\n/* harmony import */ var _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__);\n/*\r\n * Utils.ts\r\n *\r\n * Module for utility functions\r\n */\r\n\r\nvar guid = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Utils"].guid, overrideValues = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Utils"].overrideValues, isNOU = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Utils"].isNOU, isBoolean = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Utils"].isBoolean, isString = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Utils"].isString, isObject = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Utils"].isObject, isEnumValue = _ms_ofb_officefloodgatecore__WEBPACK_IMPORTED_MODULE_0__["Utils"].isEnumValue;\r\n\r\n/**\r\n * Check if given value is a number\r\n * @param {any} value value\r\n */\r\nfunction isNumber(value) {\r\n    return (typeof value === "number");\r\n}\r\n/**\r\n * Check if given value is an integer\r\n * @param {any} value value\r\n */\r\nfunction isInteger(value) {\r\n    return typeof value === "number" &&\r\n        isFinite(value) &&\r\n        Math.floor(value) === value;\r\n}\r\n/**\r\n * Check if value is a valid guid\r\n * @param {any} value value\r\n */\r\nfunction isGuid(value) {\r\n    return (isString(value) &&\r\n        /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(value));\r\n}\r\n/**\r\n * Throw if not object\r\n */\r\nfunction expectObject(value, name) {\r\n    if (!isObject(value)) {\r\n        throw name + " is not an object: " + value;\r\n    }\r\n}\r\n/**\r\n * Throw if not number\r\n */\r\nfunction expectNumber(value, name) {\r\n    if (!isNumber(value)) {\r\n        throw name + " is not a number: " + value;\r\n    }\r\n}\r\n/**\r\n * Throw if not string\r\n */\r\nfunction expectString(value, name) {\r\n    if (!isString(value)) {\r\n        throw name + " is not a string: " + value;\r\n    }\r\n}\r\n/**\r\n * Throw if not boolean\r\n */\r\nfunction expectBoolean(value, name) {\r\n    if (!isBoolean(value)) {\r\n        throw name + " is not a boolean: " + value;\r\n    }\r\n}\r\n/**\r\n * Throw if not guid\r\n */\r\nfunction expectGuid(value, name) {\r\n    if (!isGuid(value)) {\r\n        throw name + " is not a guid: " + value;\r\n    }\r\n}\r\n/**\r\n * Throw if not array\r\n */\r\nfunction expectArray(value, name) {\r\n    if (!Array.isArray(value)) {\r\n        throw name + " is not an array: " + value;\r\n    }\r\n}\r\n/**\r\n * Throw if not valid enum\r\n * Note: this won\'t work with const enum\r\n */\r\nfunction expectEnum(value, enumType, name) {\r\n    if (!isNumber(value) || !isEnumValue(value, enumType)) {\r\n        throw name + " is not an enum: " + value;\r\n    }\r\n}\r\n// Creates a promise that rejects in <ms> milliseconds and\r\n// returns the race between the created timeout promise and the passed in promise\r\nfunction createTimeoutPromise(ms, promise) {\r\n    // Create a promise that rejects in <ms> milliseconds\r\n    var timeout = new Promise(function (resolve, reject) {\r\n        var id = setTimeout(function () {\r\n            clearTimeout(id);\r\n            reject("Timed out in " + ms + "ms.");\r\n        }, ms);\r\n    });\r\n    // Returns a race between our timeout and the passed in promise\r\n    return Promise.race([promise, timeout]);\r\n}\r\n/**\r\n * Checks to see if a passed CSS selector is set as a rule in one of the document\'s stylesheets.\r\n *\r\n * @param cssSelector : a Css selector string such as \'#obf-TPromptTitle\'\r\n */\r\nfunction checkCssSelectorToBeSet(cssSelector) {\r\n    try {\r\n        for (var sheetIndex = 0; sheetIndex < document.styleSheets.length; sheetIndex++) {\r\n            var currentStyleSheet = document.styleSheets[sheetIndex];\r\n            for (var rulesIndex = 0; rulesIndex < currentStyleSheet.rules.length; rulesIndex++) {\r\n                var currentRule = currentStyleSheet.rules[rulesIndex];\r\n                if (!isNOU(currentRule.selectorText) && currentRule.selectorText.includes(cssSelector)) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n        // tslint:disable-next-line: no-empty\r\n    }\r\n    catch (error) { }\r\n    return false;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9VdGlscy50cz9jZDliIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRWlEO0FBQzVDLFFBQUksR0FBd0UsaUVBQUssS0FBN0UsRUFBRSxjQUFjLEdBQXdELGlFQUFLLGVBQTdELEVBQUUsS0FBSyxHQUFpRCxpRUFBSyxNQUF0RCxFQUFFLFNBQVMsR0FBc0MsaUVBQUssVUFBM0MsRUFBRSxRQUFRLEdBQTRCLGlFQUFLLFNBQWpDLEVBQUUsUUFBUSxHQUFrQixpRUFBSyxTQUF2QixFQUFFLFdBQVcsR0FBSyxpRUFBSyxZQUFWLENBQVc7QUFDekM7QUFFakQ7OztHQUdHO0FBQ0gsU0FBUyxRQUFRLENBQUMsS0FBVTtJQUMzQixPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOzs7R0FHRztBQUNJLFNBQVMsU0FBUyxDQUFDLEtBQVU7SUFDbkMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQy9CLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUM5QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxNQUFNLENBQUMsS0FBVTtJQUN6QixPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUN0QiwrRUFBK0UsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMvRixDQUFDO0FBRUQ7O0dBRUc7QUFDSSxTQUFTLFlBQVksQ0FBQyxLQUFVLEVBQUUsSUFBWTtJQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLHFCQUFxQixHQUFH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b0JBQ3ZGLE9BQU8sSUFBSSxDQUFDO2lCQUNaO2FBQ0Q7U0FDRDtRQUNELHFDQUFxQztLQUNyQztJQUFDLE9BQU8sS0FBSyxFQUFFLEdBQUU7SUFFbEIsT0FBTyxLQUFLLENBQUM7QUFDZCxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVXRpbHMudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBVdGlscy50c1xyXG4gKlxyXG4gKiBNb2R1bGUgZm9yIHV0aWxpdHkgZnVuY3Rpb25zXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlXCI7XHJcbmNvbnN0IHsgZ3VpZCwgb3ZlcnJpZGVWYWx1ZXMsIGlzTk9VLCBpc0Jvb2xlYW4sIGlzU3RyaW5nLCBpc09iamVjdCwgaXNFbnVtVmFsdWUgfSA9IFV0aWxzO1xyXG5leHBvcnQgeyBndWlkLCBvdmVycmlkZVZhbHVlcywgaXNOT1UsIGlzQm9vbGVhbiB9XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gdmFsdWUgaXMgYSBudW1iZXJcclxuICogQHBhcmFtIHthbnl9IHZhbHVlIHZhbHVlXHJcbiAqL1xyXG5mdW5jdGlvbiBpc051bWJlcih2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcblx0cmV0dXJuICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gdmFsdWUgaXMgYW4gaW50ZWdlclxyXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgdmFsdWVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiZcclxuXHRcdGlzRmluaXRlKHZhbHVlKSAmJlxyXG5cdFx0TWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgaWYgdmFsdWUgaXMgYSB2YWxpZCBndWlkXHJcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSB2YWx1ZVxyXG4gKi9cclxuZnVuY3Rpb24gaXNHdWlkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuXHRyZXR1cm4gKGlzU3RyaW5nKHZhbHVlKSAmJlxyXG5cdFx0L15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kLy50ZXN0KHZhbHVlKSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaHJvdyBpZiBub3Qgb2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0T2JqZWN0KHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG5cdGlmICghaXNPYmplY3QodmFsdWUpKSB7XHJcblx0XHR0aHJvdyBuYW1lICsgXCIgaXMgbm90IGFuIG9iamVjdDogXCIgKyB2YWx1ZTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaHJvdyBpZiBub3QgbnVtYmVyXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0TnVtYmVyKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG5cdGlmICghaXNOdW1iZXIodmFsdWUpKSB7XHJcblx0XHR0aHJvdyBuYW1lICsgXCIgaXMgbm90IGEgbnVtYmVyOiBcIiArIHZhbHVlO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFRocm93IGlmIG5vdCBzdHJpbmdcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RTdHJpbmcodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nKTogdm9pZCB7XHJcblx0aWYgKCFpc1N0cmluZyh2YWx1ZSkpIHtcclxuXHRcdHRocm93IG5hbWUgKyBcIiBpcyBub3QgYSBzdHJpbmc6IFwiICsgdmFsdWU7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogVGhyb3cgaWYgbm90IGJvb2xlYW5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RCb29sZWFuKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG5cdGlmICghaXNCb29sZWFuKHZhbHVlKSkge1xyXG5cdFx0dGhyb3cgbmFtZSArIFwiIGlzIG5vdCBhIGJvb2xlYW46IFwiICsgdmFsdWU7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogVGhyb3cgaWYgbm90IGd1aWRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RHdWlkKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG5cdGlmICghaXNHdWlkKHZhbHVlKSkge1xyXG5cdFx0dGhyb3cgbmFtZSArIFwiIGlzIG5vdCBhIGd1aWQ6IFwiICsgdmFsdWU7XHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogVGhyb3cgaWYgbm90IGFycmF5XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nKTogdm9pZCB7XHJcblx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG5cdFx0dGhyb3cgbmFtZSArIFwiIGlzIG5vdCBhbiBhcnJheTogXCIgKyB2YWx1ZTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaHJvdyBpZiBub3QgdmFsaWQgZW51bVxyXG4gKiBOb3RlOiB0aGlzIHdvbid0IHdvcmsgd2l0aCBjb25zdCBlbnVtXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RW51bSh2YWx1ZTogYW55LCBlbnVtVHlwZTogYW55LCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRpZiAoIWlzTnVtYmVyKHZhbHVlKSB8fCAhaXNFbnVtVmFsdWUodmFsdWUsIGVudW1UeXBlKSkge1xyXG5cdFx0dGhyb3cgbmFtZSArIFwiIGlzIG5vdCBhbiBlbnVtOiBcIiArIHZhbHVlO1xyXG5cdH1cclxufVxyXG5cclxuLy8gQ3JlYXRlcyBhIHByb21pc2UgdGhhdCByZWplY3RzIGluIDxtcz4gbWlsbGlzZWNvbmRzIGFuZFxyXG4vLyByZXR1cm5zIHRoZSByYWNlIGJldHdlZW4gdGhlIGNyZWF0ZWQgdGltZW91dCBwcm9taXNlIGFuZCB0aGUgcGFzc2VkIGluIHByb21pc2VcclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRpbWVvdXRQcm9taXNlPFQ+KG1zOiBudW1iZXIsIHByb21pc2U6IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcclxuXHQvLyBDcmVhdGUgYSBwcm9taXNlIHRoYXQgcmVqZWN0cyBpbiA8bXM+IG1pbGxpc2Vjb25kc1xyXG5cdGNvbnN0IHRpbWVvdXQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRjbGVhclRpbWVvdXQoaWQpO1xyXG5cdFx0XHRyZWplY3QoXCJUaW1lZCBvdXQgaW4gXCIgKyBtcyArIFwibXMuXCIpO1xyXG5cdFx0fSwgbXMpO1xyXG5cdH0pO1xyXG5cclxuXHQvLyBSZXR1cm5zIGEgcmFjZSBiZXR3ZWVuIG91ciB0aW1lb3V0IGFuZCB0aGUgcGFzc2VkIGluIHByb21pc2VcclxuXHRyZXR1cm4gUHJvbWlzZS5yYWNlKFtwcm9taXNlLCB0aW1lb3V0XSkgYXMgUHJvbWlzZTxUPjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyB0byBzZWUgaWYgYSBwYXNzZWQgQ1NTIHNlbGVjdG9yIGlzIHNldCBhcyBhIHJ1bGUgaW4gb25lIG9mIHRoZSBkb2N1bWVudCdzIHN0eWxlc2hlZXRzLlxyXG4gKiBcclxuICogQHBhcmFtIGNzc1NlbGVjdG9yIDogYSBDc3Mgc2VsZWN0b3Igc3RyaW5nIHN1Y2ggYXMgJyNvYmYtVFByb21wdFRpdGxlJ1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQ3NzU2VsZWN0b3JUb0JlU2V0IChjc3NTZWxlY3Rvcjogc3RyaW5nKTogYm9vbGVhbiB7XHJcblxyXG5cdHRyeSB7XHJcblx0XHRmb3IgKGxldCBzaGVldEluZGV4ID0gMDsgc2hlZXRJbmRleCA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgc2hlZXRJbmRleCsrKSB7XHJcblx0XHRcdGNvbnN0IGN1cnJlbnRTdHlsZVNoZWV0ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbc2hlZXRJbmRleF07XHJcblxyXG5cdFx0XHRmb3IgKGxldCBydWxlc0luZGV4ID0gMDsgcnVsZXNJbmRleCA8IGN1cnJlbnRTdHlsZVNoZWV0LnJ1bGVzLmxlbmd0aDsgcnVsZXNJbmRleCsrKSB7XHJcblx0XHRcdFx0Y29uc3QgY3VycmVudFJ1bGUgPSBjdXJyZW50U3R5bGVTaGVldC5ydWxlc1tydWxlc0luZGV4XSBhcyBDU1NTdHlsZVJ1bGU7XHJcblxyXG5cdFx0XHRcdGlmICghaXNOT1UoY3VycmVudFJ1bGUuc2VsZWN0b3JUZXh0KSAmJiBjdXJyZW50UnVsZS5zZWxlY3RvclRleHQuaW5jbHVkZXMoY3NzU2VsZWN0b3IpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tZW1wdHlcclxuXHR9IGNhdGNoIChlcnJvcikge31cclxuXHJcblx0cmV0dXJuIGZhbHNlO1xyXG59XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/Utils.ts\n')},"./scripts/app/Version.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__["default"] = ("1.8.14");\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9WZXJzaW9uLnRzPzA3OTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZSx1RUFBUSxFQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvVmVyc2lvbi50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFwiMS44LjE0XCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/Version.ts\n')},"./scripts/app/Window/DomUtils.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadStylesheet", function() { return loadStylesheet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadScript", function() { return loadScript; });\n/*\r\n * DomUtils.ts\r\n *\r\n * Module for page document utility functions\r\n */\r\n/**\r\n * Load the style sheet\r\n * @param url The url of the stylesheet\r\n */\r\nfunction loadStylesheet(url) {\r\n    var link = document.createElement("link");\r\n    link.rel = "stylesheet";\r\n    link.type = "text/css";\r\n    link.href = url;\r\n    var entry = document.getElementsByTagName("script")[0];\r\n    entry.parentNode.insertBefore(link, entry);\r\n}\r\n/**\r\n * Load the script and callback after it is loaded\r\n * @param url The url of the script\r\n * @param pageOrigin Optional - Origin of the page\r\n */\r\nfunction loadScript(url, pageOrigin) {\r\n    if (pageOrigin === void 0) { pageOrigin = window.origin; }\r\n    return new Promise(function (resolve, reject) {\r\n        var script = document.createElement("script");\r\n        script.async = true;\r\n        if (script.readyState) { // IE\r\n            script.onreadystatechange = function () {\r\n                if (script.readyState === "loaded" || script.readyState === "complete") {\r\n                    script.onreadystatechange = null;\r\n                    resolve();\r\n                }\r\n            };\r\n        }\r\n        else { // Others\r\n            script.onload = function () {\r\n                resolve();\r\n            };\r\n        }\r\n        script.onerror = function () {\r\n            reject();\r\n        };\r\n        script.src = url;\r\n        // don\'t add if origin is not available or when containing "null". This is to mitigate possible\r\n        // unexpected behavior with Chrome when a page hosting this SDK is being tested as a local file.\r\n        // The behavior depends on Chrome.exe\'s --allow-file-access-from-files setting.\r\n        if (pageOrigin && pageOrigin !== "null") {\r\n            script.crossOrigin = "anonymous";\r\n        }\r\n        var entry = document.getElementsByTagName("script")[0];\r\n        entry.parentNode.insertBefore(script, entry);\r\n    });\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9XaW5kb3cvRG9tVXRpbHMudHM/ZWViMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTs7OztHQUlHO0FBRUg7OztHQUdHO0FBQ0ksU0FBUyxjQUFjLENBQUMsR0FBVztJQUN6QyxJQUFNLElBQUksR0FBb0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3RCxJQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQztJQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUVoQixJQUFNLEtBQUssR0FBc0IsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNJLFNBQVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxVQUEyQztJQUEzQywwQ0FBc0IsTUFBYyxDQUFDLE1BQU07SUFDbEYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO1FBQ2xDLElBQU0sTUFBTSxHQUFRLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSztZQUM3QixNQUFNLENBQUMsa0JBQWtCLEdBQUc7Z0JBQzNCLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7b0JBQ3ZFLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxDQUFDO2lCQUNWO1lBQ0YsQ0FBQyxDQUFDO1NBQ0Y7YUFBTSxFQUFHLFNBQVM7WUFDbEIsTUFBTSxDQUFDLE1BQU0sR0FBRztnQkFDZixPQUFPLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQztTQUNGO1FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRztZQUNoQixNQUFNLEVBQUUsQ0FBQztRQUNWLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBRWpCLCtGQUErRjtRQUMvRixnR0FBZ0c7UUFDaEcsK0VBQStFO1FBQy9FLElBQUksVUFBVSxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUU7WUFDeEMsTUFBTSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7U0FDakM7UUFFRCxJQUFNLEtBQUssR0FBc0IsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9XaW5kb3cvRG9tVXRpbHMudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBEb21VdGlscy50c1xyXG4gKlxyXG4gKiBNb2R1bGUgZm9yIHBhZ2UgZG9jdW1lbnQgdXRpbGl0eSBmdW5jdGlvbnNcclxuICovXHJcblxyXG4vKipcclxuICogTG9hZCB0aGUgc3R5bGUgc2hlZXRcclxuICogQHBhcmFtIHVybCBUaGUgdXJsIG9mIHRoZSBzdHlsZXNoZWV0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFN0eWxlc2hlZXQodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRjb25zdCBsaW5rOiBIVE1MTGlua0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcclxuXHRsaW5rLnJlbCA9IFwic3R5bGVzaGVldFwiO1xyXG5cdGxpbmsudHlwZSA9IFwidGV4dC9jc3NcIjtcclxuXHRsaW5rLmhyZWYgPSB1cmw7XHJcblxyXG5cdGNvbnN0IGVudHJ5OiBIVE1MU2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpWzBdO1xyXG5cdGVudHJ5LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGxpbmssIGVudHJ5KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExvYWQgdGhlIHNjcmlwdCBhbmQgY2FsbGJhY2sgYWZ0ZXIgaXQgaXMgbG9hZGVkXHJcbiAqIEBwYXJhbSB1cmwgVGhlIHVybCBvZiB0aGUgc2NyaXB0XHJcbiAqIEBwYXJhbSBwYWdlT3JpZ2luIE9wdGlvbmFsIC0gT3JpZ2luIG9mIHRoZSBwYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFNjcmlwdCh1cmw6IHN0cmluZywgcGFnZU9yaWdpbjogc3RyaW5nID0gKHdpbmRvdyBhcyBhbnkpLm9yaWdpbik6IFByb21pc2U8dm9pZD4ge1xyXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRjb25zdCBzY3JpcHQ6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XHJcblx0XHRzY3JpcHQuYXN5bmMgPSB0cnVlO1xyXG5cclxuXHRcdGlmIChzY3JpcHQucmVhZHlTdGF0ZSkgeyAvLyBJRVxyXG5cdFx0XHRzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImxvYWRlZFwiIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcclxuXHRcdFx0XHRcdHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xyXG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdH0gZWxzZSB7ICAvLyBPdGhlcnNcclxuXHRcdFx0c2NyaXB0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHJcblx0XHRzY3JpcHQub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZWplY3QoKTtcclxuXHRcdH07XHJcblxyXG5cdFx0c2NyaXB0LnNyYyA9IHVybDtcclxuXHJcblx0XHQvLyBkb24ndCBhZGQgaWYgb3JpZ2luIGlzIG5vdCBhdmFpbGFibGUgb3Igd2hlbiBjb250YWluaW5nIFwibnVsbFwiLiBUaGlzIGlzIHRvIG1pdGlnYXRlIHBvc3NpYmxlXHJcblx0XHQvLyB1bmV4cGVjdGVkIGJlaGF2aW9yIHdpdGggQ2hyb21lIHdoZW4gYSBwYWdlIGhvc3RpbmcgdGhpcyBTREsgaXMgYmVpbmcgdGVzdGVkIGFzIGEgbG9jYWwgZmlsZS5cclxuXHRcdC8vIFRoZSBiZWhhdmlvciBkZXBlbmRzIG9uIENocm9tZS5leGUncyAtLWFsbG93LWZpbGUtYWNjZXNzLWZyb20tZmlsZXMgc2V0dGluZy5cclxuXHRcdGlmIChwYWdlT3JpZ2luICYmIHBhZ2VPcmlnaW4gIT09IFwibnVsbFwiKSB7XHJcblx0XHRcdHNjcmlwdC5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCI7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZW50cnk6IEhUTUxTY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIilbMF07XHJcblx0XHRlbnRyeS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzY3JpcHQsIGVudHJ5KTtcclxuXHR9KTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./scripts/app/Window/DomUtils.ts\n')},"./scripts/app/Window/Window.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "get", function() { return get; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getGlobal", function() { return getGlobal; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSetUiStrings", function() { return setSetUiStrings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSingleFeedback", function() { return setSingleFeedback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setMultiFeedback", function() { return setMultiFeedback; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFeedbackStatus", function() { return setFeedbackStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setCreateScreenshot", function() { return setCreateScreenshot; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setIsFeedbackSurveyEnabledByAADC", function() { return setIsFeedbackSurveyEnabledByAADC; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFloodgateCustomUXHandler", function() { return setFloodgateCustomUXHandler; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFloodgateShowSurvey", function() { return setFloodgateShowSurvey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFloodgateShowFormSurvey", function() { return setFloodgateShowFormSurvey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFloodgateShowCustomSurvey", function() { return setFloodgateShowCustomSurvey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFloodgateInitialize", function() { return setFloodgateInitialize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFloodgateStart", function() { return setFloodgateStart; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFloodgateStop", function() { return setFloodgateStop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setFloodgateGetEngine", function() { return setFloodgateGetEngine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSettingIdMap", function() { return getSettingIdMap; });\n/**\r\n * Window.ts\r\n *\r\n * Module wrapping around the global window object\r\n */\r\nvar w = window;\r\nvar officeBrowserFeedback = w.OfficeBrowserFeedback = w.OfficeBrowserFeedback || {};\r\nvar floodgate = officeBrowserFeedback.floodgate = officeBrowserFeedback.floodgate || {};\r\n/**\r\n * Get the IWindow object\r\n */\r\nfunction get() { return w; }\r\n/**\r\n * Get the IWindow object\r\n */\r\nfunction getGlobal() { return w; }\r\n/**\r\n * Set the setUiStrings() method\r\n * @param setUiStrings the method\r\n */\r\nfunction setSetUiStrings(setUiStrings) {\r\n    officeBrowserFeedback.setUiStrings = setUiStrings;\r\n}\r\n/**\r\n * Set the singleFeedback() method\r\n * @param singleFeedback the method\r\n */\r\nfunction setSingleFeedback(singleFeedback) {\r\n    officeBrowserFeedback.singleFeedback = singleFeedback;\r\n}\r\n/**\r\n * Set the multiFeedback() method\r\n * @param multiFeedback the method\r\n */\r\nfunction setMultiFeedback(multiFeedback) {\r\n    officeBrowserFeedback.multiFeedback = multiFeedback;\r\n}\r\n/**\r\n * Set the getFeedbackStatus() method\r\n * @param getFeedbackStatus the method\r\n */\r\nfunction setFeedbackStatus(getFeedbackStatus) {\r\n    officeBrowserFeedback.getFeedbackStatus = getFeedbackStatus;\r\n}\r\n/**\r\n * Set the createScreenshot() method\r\n * @param createScreenshot the method\r\n */\r\nfunction setCreateScreenshot(createScreenshot) {\r\n    officeBrowserFeedback.createScreenshot = createScreenshot;\r\n}\r\n/**\r\n * Set the isFeedbackSurveyEnabledByAADC() method\r\n * @param isFeedbackSurveyEnabledByAADC the method\r\n */\r\nfunction setIsFeedbackSurveyEnabledByAADC(isFeedbackSurveyEnabledByAADC) {\r\n    officeBrowserFeedback.isFeedbackSurveyEnabledByAADC = isFeedbackSurveyEnabledByAADC;\r\n}\r\n/**\r\n * Set the floodgate customUXHandler interface\r\n * @param floodgateCustomUXHandler the interface\r\n */\r\nfunction setFloodgateCustomUXHandler(floodgateCustomUXHandler) {\r\n    floodgate.customUXHandler = floodgateCustomUXHandler;\r\n}\r\n/**\r\n * Set the floodgate showSurvey() method\r\n * @param floodgateShowSurvey the method\r\n */\r\nfunction setFloodgateShowSurvey(floodgateShowSurvey) {\r\n    floodgate.showSurvey = floodgateShowSurvey;\r\n}\r\n/**\r\n * Set the floodgate showFormSurvey() method\r\n * @param floodgateShowFormSurvey the method\r\n */\r\nfunction setFloodgateShowFormSurvey(floodgateShowFormSurvey) {\r\n    floodgate.showFormSurvey = floodgateShowFormSurvey;\r\n}\r\n/**\r\n * Set the floodgate showCustomSurvey() method\r\n * @param floodgateShowCustomSurvey the method\r\n */\r\nfunction setFloodgateShowCustomSurvey(floodgateShowCustomSurvey) {\r\n    floodgate.showCustomSurvey = floodgateShowCustomSurvey;\r\n}\r\n/**\r\n * Set the floodgate initialize() method\r\n * @param floodgateInitialize the method\r\n */\r\nfunction setFloodgateInitialize(floodgateInitialize) {\r\n    floodgate.initialize = floodgateInitialize;\r\n}\r\n/**\r\n * Set the floodgate start() method\r\n * @param floodgateStart the method\r\n */\r\nfunction setFloodgateStart(floodgateStart) {\r\n    floodgate.start = floodgateStart;\r\n}\r\n/**\r\n * Set the floodgate stop() method\r\n * @param floodgateStop the method\r\n */\r\nfunction setFloodgateStop(floodgateStop) {\r\n    floodgate.stop = floodgateStop;\r\n}\r\n/**\r\n * Set the floodgate getEngine() method\r\n * @param floodgateGetEngine the method\r\n */\r\nfunction setFloodgateGetEngine(floodgateGetEngine) {\r\n    floodgate.getEngine = floodgateGetEngine;\r\n}\r\n/**\r\n * Set the floodgate getSettingIdMap() method\r\n * @param floodgateSettingIdMap the method\r\n */\r\nfunction getSettingIdMap(floodgateSettingIdMap) {\r\n    floodgate.getSettingIdMap = floodgateSettingIdMap;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9XaW5kb3cvV2luZG93LnRzPzc1NzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7R0FJRztBQVlILElBQU0sQ0FBQyxHQUFHLE1BQWEsQ0FBQztBQUN4QixJQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMscUJBQXFCLElBQUksRUFBRSxDQUFDO0FBQ3RGLElBQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO0FBRTFGOztHQUVHO0FBQ0ksU0FBUyxHQUFHLEtBQWMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTVDOztHQUVHO0FBQ0ksU0FBUyxTQUFTLEtBQWMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWxEOzs7R0FHRztBQUNJLFNBQVMsZUFBZSxDQUFDLFlBQWlDO0lBQ2hFLHFCQUFxQixDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDbkQsQ0FBQztBQUVEOzs7R0FHRztBQUNJLFNBQVMsaUJBQWlCLENBQ2hDLGNBQWtHO0lBQ2pHLHFCQUFxQixDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7R0FHRztBQUNJLFNBQVMsZ0JBQWdCLENBQy9CLGFBQTJFO0lBQzFFLHFCQUFxQixDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7R0FHRztBQUNJLFNBQVMsaUJBQWlCLENBQ2hDLGlCQUF1QztJQUN0QyxxQkFBcUIsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0ksU0FBUyxtQkFBbUIsQ0FDbEMsZ0JBQXNFO0lBQ3JFLHFCQUFxQixDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQzVELENBQUM7QUFFRDs7O0dBR0c7QUFDSSxTQUFTLGdDQUFnQyxDQUMvQyw2QkFBNEM7SUFDM0MscUJBQXFCLENBQUMsNkJBQTZCLEdBQUcsNkJBQTZCLENBQUM7QUFDdEYsQ0FBQztBQUVEOzs7R0FHRztBQUNJLFNBQVMsMkJBQTJCLENBQUMsd0JBQTBDO0lBQ3JGLFNBQVMsQ0FBQyxlQUFlLEdBQUcsd0JBQXdCLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7R0FHRztBQUNJLFNBQVMsc0JBQXNCLENBQ3JDLG1CQUFpSDtJQUVqSCxTQUFTLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDO0FBQzVDLENBQUM7QUFFRDs7O0dBR0c7QUFDSSxTQUFTLDBCQUEwQixDQUN6Qyx1QkFBdUg7SUFFdkgsU0FBUyxDQUFDLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0ksU0FBUyw0QkFBNEIsQ0FBQyx5QkFBa0U7SUFDOUcsU0FBUyxDQUFDLGdCQUFnQixHQUFHLHlCQUF5QixDQUFDO0FBQ3hELENBQUM7QUFFRDs7O0dBR0c7QUFDSSxTQUFTLHNCQUFzQixDQUFDLG1CQUF1QztJQUM3RSxTQUFTLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDO0FBQzVDLENBQUM7QUFFRDs7O0dBR0c7QUFDSSxTQUFTLGlCQUFpQixDQUFDLGNBQWtDO0lBQ25FLFNBQVMsQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7O0dBR0c7QUFDSSxTQUFTLGdCQUFnQixDQUFDLGFBQXlCO0lBQ3pELFNBQVMsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7O0dBR0c7QUFDSSxTQUFTLHFCQUFxQixDQUFDLGtCQUF5QztJQUM5RSxTQUFTLENBQUMsU0FBUyxHQUFHLGtCQUFrQixDQUFDO0FBQzFDLENBQUM7QUFFRDs7O0dBR0c7QUFDSSxTQUFTLGVBQWUsQ0FBQyxxQkFBbUQ7SUFDbEYsU0FBUyxDQUFDLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQztBQUNuRCxDQUFDIiwiZmlsZSI6Ii4vc2NyaXB0cy9hcHAvV2luZG93L1dpbmRvdy50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBXaW5kb3cudHNcclxuICpcclxuICogTW9kdWxlIHdyYXBwaW5nIGFyb3VuZCB0aGUgZ2xvYmFsIHdpbmRvdyBvYmplY3RcclxuICovXHJcblxyXG5pbXBvcnQgKiBhcyBDb25maWd1cmF0aW9uIGZyb20gXCIuLy4uL0NvbmZpZ3VyYXRpb24vQ29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBJTGF1bmNoT3B0aW9uc0luQXBwRmVlZGJhY2sgfSBmcm9tIFwiLi8uLi9Db25maWd1cmF0aW9uL0lMYXVuY2hPcHRpb25zXCI7XHJcbmltcG9ydCBJQ3VzdG9tU3VydmV5IGZyb20gXCIuLy4uL0Zsb29kZ2F0ZUNvcmUvSUN1c3RvbVN1cnZleVwiO1xyXG5pbXBvcnQgSVVJU3VydmV5IGZyb20gXCIuLy4uL0Zsb29kZ2F0ZUNvcmUvVUlTdXJ2ZXkvSVVJU3VydmV5XCI7XHJcbmltcG9ydCB7IEZsb29kZ2F0ZUVuZ2luZSB9IGZyb20gXCJAbXMtb2ZiL29mZmljZWZsb29kZ2F0ZWNvcmVcIjtcclxuaW1wb3J0IHsgSUZsb29kZ2F0ZVNldHRpbmdJZE1hcCwgSVN1cnZleUZvcm0gfSBmcm9tIFwiQG1zLW9mYi9vZmZpY2VmbG9vZGdhdGVjb3JlL2Rpc3Qvc3JjL0FwaS9BcGlcIjtcclxuaW1wb3J0IHsgRmVlZGJhY2tTdGF0dXMgfSBmcm9tIFwiLi8uLi9Db25zdGFudHNcIjtcclxuaW1wb3J0IHsgSU92ZXJyaWRlUmVuZGVyQ2FsbGJhY2sgfSBmcm9tIFwiLi4vSU92ZXJyaWRlUmVuZGVyQ2FsbGJhY2tcIjtcclxuaW1wb3J0IHsgSUN1c3RvbVVYSGFuZGxlciB9IGZyb20gXCIuLi9JQ3VzdG9tVVhIYW5kbGVyXCI7XHJcblxyXG5jb25zdCB3ID0gd2luZG93IGFzIGFueTtcclxuY29uc3Qgb2ZmaWNlQnJvd3NlckZlZWRiYWNrID0gdy5PZmZpY2VCcm93c2VyRmVlZGJhY2sgPSB3Lk9mZmljZUJyb3dzZXJGZWVkYmFjayB8fCB7fTtcclxuY29uc3QgZmxvb2RnYXRlID0gb2ZmaWNlQnJvd3NlckZlZWRiYWNrLmZsb29kZ2F0ZSA9IG9mZmljZUJyb3dzZXJGZWVkYmFjay5mbG9vZGdhdGUgfHwge307XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBJV2luZG93IG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldCgpOiBJV2luZG93IHsgcmV0dXJuIHc7IH1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIElXaW5kb3cgb2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsKCk6IElXaW5kb3cgeyByZXR1cm4gdzsgfVxyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgc2V0VWlTdHJpbmdzKCkgbWV0aG9kXHJcbiAqIEBwYXJhbSBzZXRVaVN0cmluZ3MgdGhlIG1ldGhvZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFNldFVpU3RyaW5ncyhzZXRVaVN0cmluZ3M6IChkYXRhOiBhbnkpID0+IHZvaWQpIHtcclxuXHRvZmZpY2VCcm93c2VyRmVlZGJhY2suc2V0VWlTdHJpbmdzID0gc2V0VWlTdHJpbmdzO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBzaW5nbGVGZWVkYmFjaygpIG1ldGhvZFxyXG4gKiBAcGFyYW0gc2luZ2xlRmVlZGJhY2sgdGhlIG1ldGhvZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFNpbmdsZUZlZWRiYWNrKFxyXG5cdHNpbmdsZUZlZWRiYWNrOiAoZmVlZGJhY2tUeXBlOiBzdHJpbmcsIGxhdW5jaE9wdGlvbnM6IElMYXVuY2hPcHRpb25zSW5BcHBGZWVkYmFjaykgPT4gUHJvbWlzZTxhbnk+KSB7XHJcblx0XHRvZmZpY2VCcm93c2VyRmVlZGJhY2suc2luZ2xlRmVlZGJhY2sgPSBzaW5nbGVGZWVkYmFjaztcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgbXVsdGlGZWVkYmFjaygpIG1ldGhvZFxyXG4gKiBAcGFyYW0gbXVsdGlGZWVkYmFjayB0aGUgbWV0aG9kXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0TXVsdGlGZWVkYmFjayhcclxuXHRtdWx0aUZlZWRiYWNrOiAobGF1bmNoT3B0aW9uczogSUxhdW5jaE9wdGlvbnNJbkFwcEZlZWRiYWNrKSA9PiBQcm9taXNlPGFueT4pIHtcclxuXHRcdG9mZmljZUJyb3dzZXJGZWVkYmFjay5tdWx0aUZlZWRiYWNrID0gbXVsdGlGZWVkYmFjaztcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgZ2V0RmVlZGJhY2tTdGF0dXMoKSBtZXRob2RcclxuICogQHBhcmFtIGdldEZlZWRiYWNrU3RhdHVzIHRoZSBtZXRob2RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRGZWVkYmFja1N0YXR1cyhcclxuXHRnZXRGZWVkYmFja1N0YXR1czogKCkgPT4gRmVlZGJhY2tTdGF0dXMpIHtcclxuXHRcdG9mZmljZUJyb3dzZXJGZWVkYmFjay5nZXRGZWVkYmFja1N0YXR1cyA9IGdldEZlZWRiYWNrU3RhdHVzO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBjcmVhdGVTY3JlZW5zaG90KCkgbWV0aG9kXHJcbiAqIEBwYXJhbSBjcmVhdGVTY3JlZW5zaG90IHRoZSBtZXRob2RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDcmVhdGVTY3JlZW5zaG90KFxyXG5cdGNyZWF0ZVNjcmVlbnNob3Q6IChkb21FbGVtZW50Pzogb2JqZWN0LCBvcHRpb25zPzogYW55KSA9PiBQcm9taXNlPGFueT4pIHtcclxuXHRcdG9mZmljZUJyb3dzZXJGZWVkYmFjay5jcmVhdGVTY3JlZW5zaG90ID0gY3JlYXRlU2NyZWVuc2hvdDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgaXNGZWVkYmFja1N1cnZleUVuYWJsZWRCeUFBREMoKSBtZXRob2RcclxuICogQHBhcmFtIGlzRmVlZGJhY2tTdXJ2ZXlFbmFibGVkQnlBQURDIHRoZSBtZXRob2RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRJc0ZlZWRiYWNrU3VydmV5RW5hYmxlZEJ5QUFEQyhcclxuXHRpc0ZlZWRiYWNrU3VydmV5RW5hYmxlZEJ5QUFEQzogKCkgPT4gYm9vbGVhbikge1xyXG5cdFx0b2ZmaWNlQnJvd3NlckZlZWRiYWNrLmlzRmVlZGJhY2tTdXJ2ZXlFbmFibGVkQnlBQURDID0gaXNGZWVkYmFja1N1cnZleUVuYWJsZWRCeUFBREM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGZsb29kZ2F0ZSBjdXN0b21VWEhhbmRsZXIgaW50ZXJmYWNlXHJcbiAqIEBwYXJhbSBmbG9vZGdhdGVDdXN0b21VWEhhbmRsZXIgdGhlIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEZsb29kZ2F0ZUN1c3RvbVVYSGFuZGxlcihmbG9vZGdhdGVDdXN0b21VWEhhbmRsZXI6IElDdXN0b21VWEhhbmRsZXIpIHtcclxuXHRmbG9vZGdhdGUuY3VzdG9tVVhIYW5kbGVyID0gZmxvb2RnYXRlQ3VzdG9tVVhIYW5kbGVyO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBmbG9vZGdhdGUgc2hvd1N1cnZleSgpIG1ldGhvZFxyXG4gKiBAcGFyYW0gZmxvb2RnYXRlU2hvd1N1cnZleSB0aGUgbWV0aG9kXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0Rmxvb2RnYXRlU2hvd1N1cnZleShcclxuXHRmbG9vZGdhdGVTaG93U3VydmV5OiAoc3VydmV5OiBJVUlTdXJ2ZXksIG92ZXJyaWRlVVhSZW5kZXJDYWxsYmFja0FzeW5jPzogSU92ZXJyaWRlUmVuZGVyQ2FsbGJhY2spID0+IFByb21pc2U8YW55PlxyXG4pIHtcclxuXHRmbG9vZGdhdGUuc2hvd1N1cnZleSA9IGZsb29kZ2F0ZVNob3dTdXJ2ZXk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGZsb29kZ2F0ZSBzaG93Rm9ybVN1cnZleSgpIG1ldGhvZFxyXG4gKiBAcGFyYW0gZmxvb2RnYXRlU2hvd0Zvcm1TdXJ2ZXkgdGhlIG1ldGhvZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEZsb29kZ2F0ZVNob3dGb3JtU3VydmV5KFxyXG5cdGZsb29kZ2F0ZVNob3dGb3JtU3VydmV5OiAoc3VydmV5OiBJU3VydmV5Rm9ybSwgb3ZlcnJpZGVVWFJlbmRlckNhbGxiYWNrQXN5bmM/OiBJT3ZlcnJpZGVSZW5kZXJDYWxsYmFjaykgPT4gUHJvbWlzZTxhbnk+XHJcbikge1xyXG5cdGZsb29kZ2F0ZS5zaG93Rm9ybVN1cnZleSA9IGZsb29kZ2F0ZVNob3dGb3JtU3VydmV5O1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBmbG9vZGdhdGUgc2hvd0N1c3RvbVN1cnZleSgpIG1ldGhvZFxyXG4gKiBAcGFyYW0gZmxvb2RnYXRlU2hvd0N1c3RvbVN1cnZleSB0aGUgbWV0aG9kXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0Rmxvb2RnYXRlU2hvd0N1c3RvbVN1cnZleShmbG9vZGdhdGVTaG93Q3VzdG9tU3VydmV5OiAoc3VydmV5OiBJQ3VzdG9tU3VydmV5KSA9PiBQcm9taXNlPGFueT4pIHtcclxuXHRmbG9vZGdhdGUuc2hvd0N1c3RvbVN1cnZleSA9IGZsb29kZ2F0ZVNob3dDdXN0b21TdXJ2ZXk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGZsb29kZ2F0ZSBpbml0aWFsaXplKCkgbWV0aG9kXHJcbiAqIEBwYXJhbSBmbG9vZGdhdGVJbml0aWFsaXplIHRoZSBtZXRob2RcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRGbG9vZGdhdGVJbml0aWFsaXplKGZsb29kZ2F0ZUluaXRpYWxpemU6ICgpID0+IFByb21pc2U8YW55Pikge1xyXG5cdGZsb29kZ2F0ZS5pbml0aWFsaXplID0gZmxvb2RnYXRlSW5pdGlhbGl6ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgZmxvb2RnYXRlIHN0YXJ0KCkgbWV0aG9kXHJcbiAqIEBwYXJhbSBmbG9vZGdhdGVTdGFydCB0aGUgbWV0aG9kXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0Rmxvb2RnYXRlU3RhcnQoZmxvb2RnYXRlU3RhcnQ6ICgpID0+IFByb21pc2U8YW55Pikge1xyXG5cdGZsb29kZ2F0ZS5zdGFydCA9IGZsb29kZ2F0ZVN0YXJ0O1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBmbG9vZGdhdGUgc3RvcCgpIG1ldGhvZFxyXG4gKiBAcGFyYW0gZmxvb2RnYXRlU3RvcCB0aGUgbWV0aG9kXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0Rmxvb2RnYXRlU3RvcChmbG9vZGdhdGVTdG9wOiAoKSA9PiB2b2lkKSB7XHJcblx0Zmxvb2RnYXRlLnN0b3AgPSBmbG9vZGdhdGVTdG9wO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBmbG9vZGdhdGUgZ2V0RW5naW5lKCkgbWV0aG9kXHJcbiAqIEBwYXJhbSBmbG9vZGdhdGVHZXRFbmdpbmUgdGhlIG1ldGhvZFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEZsb29kZ2F0ZUdldEVuZ2luZShmbG9vZGdhdGVHZXRFbmdpbmU6ICgpID0+IEZsb29kZ2F0ZUVuZ2luZSkge1xyXG5cdGZsb29kZ2F0ZS5nZXRFbmdpbmUgPSBmbG9vZGdhdGVHZXRFbmdpbmU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGZsb29kZ2F0ZSBnZXRTZXR0aW5nSWRNYXAoKSBtZXRob2RcclxuICogQHBhcmFtIGZsb29kZ2F0ZVNldHRpbmdJZE1hcCB0aGUgbWV0aG9kXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dGluZ0lkTWFwKGZsb29kZ2F0ZVNldHRpbmdJZE1hcDogKCkgPT4gSUZsb29kZ2F0ZVNldHRpbmdJZE1hcCkge1xyXG5cdGZsb29kZ2F0ZS5nZXRTZXR0aW5nSWRNYXAgPSBmbG9vZGdhdGVTZXR0aW5nSWRNYXA7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUluaXRPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhdGlvbi5JSW5pdE9wdGlvbnNDb21tb24sIENvbmZpZ3VyYXRpb24uSUluaXRPcHRpb25zSW5BcHBGZWVkYmFjayB7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZsb29kZ2F0ZSB7XHJcblx0aW5pdE9wdGlvbnM6IENvbmZpZ3VyYXRpb24uSUluaXRPcHRpb25zRmxvb2RnYXRlO1xyXG5cdGN1c3RvbVVYSGFuZGxlcjogSUN1c3RvbVVYSGFuZGxlcjtcclxuXHRzaG93U3VydmV5OiAoc3VydmV5OiBJVUlTdXJ2ZXksIG92ZXJyaWRlVVhSZW5kZXJDYWxsYmFja0FzeW5jPzogSU92ZXJyaWRlUmVuZGVyQ2FsbGJhY2spID0+IFByb21pc2U8YW55PjtcclxuXHRzaG93Rm9ybVN1cnZleTogKHN1cnZleTogSVN1cnZleUZvcm0sIG92ZXJyaWRlVVhSZW5kZXJDYWxsYmFja0FzeW5jPzogSU92ZXJyaWRlUmVuZGVyQ2FsbGJhY2spID0+IFByb21pc2U8YW55PjtcclxuXHRzaG93Q3VzdG9tU3VydmV5OiAoc3VydmV5OiBJQ3VzdG9tU3VydmV5KSA9PiBQcm9taXNlPGFueT47XHJcblx0aW5pdGlhbGl6ZTogKCkgPT4gUHJvbWlzZTxhbnk+O1xyXG5cdHN0YXJ0OiAoKSA9PiBQcm9taXNlPGFueT47XHJcblx0c3RvcDogKCkgPT4gdm9pZDtcclxuXHRnZXRFbmdpbmU6ICgpID0+IEZsb29kZ2F0ZUVuZ2luZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJV2luZG93IGV4dGVuZHMgV2luZG93TG9jYWxTdG9yYWdlIHtcclxuXHRPZmZpY2VCcm93c2VyRmVlZGJhY2s6IHtcclxuXHRcdGluaXRPcHRpb25zOiBJSW5pdE9wdGlvbnM7XHJcblx0XHRtdWx0aUZlZWRiYWNrOiAobGF1bmNoT3B0aW9uczogSUxhdW5jaE9wdGlvbnNJbkFwcEZlZWRiYWNrKSA9PiBQcm9taXNlPGFueT47XHJcblx0XHRzZGtWZXJzaW9uOiBzdHJpbmc7XHJcblx0XHRzaW5nbGVGZWVkYmFjazogKGZlZWRiYWNrVHlwZTogc3RyaW5nLCBsYXVuY2hPcHRpb25zOiBJTGF1bmNoT3B0aW9uc0luQXBwRmVlZGJhY2spID0+IFByb21pc2U8YW55PjtcclxuXHRcdHNldFVpU3RyaW5nczogKGRhdGE6IGFueSkgPT4gdm9pZDtcclxuXHRcdGh0bWwyY2FudmFzOiAoKSA9PiAoKGRvbUVsZW1lbnQ/OiBvYmplY3QsIG9wdGlvbnM/OiBhbnkpID0+IFByb21pc2U8SFRNTENhbnZhc0VsZW1lbnQ+KTtcclxuXHRcdGNyZWF0ZVNjcmVlbnNob3Q6IChkb21FbGVtZW50Pzogb2JqZWN0LCBvcHRpb25zPzogYW55KSA9PiBQcm9taXNlPEhUTUxDYW52YXNFbGVtZW50PjtcclxuXHRcdGZsb29kZ2F0ZTogSUZsb29kZ2F0ZTtcclxuXHRcdGlzRmVlZGJhY2tTdXJ2ZXlFbmFibGVkQnlBQURDOiAoKSA9PiBib29sZWFuO1xyXG5cdFx0Z2V0RmVlZGJhY2tTdGF0dXM6ICgpID0+IEZlZWRiYWNrU3RhdHVzO1xyXG5cdH07XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/Window/Window.ts\n')},"./scripts/app/WindowProperties.ts":function(){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNarrow", function() { return isNarrow; });\n/**\r\n * WindowProperties.ts\r\n *\r\n * Module to track window properties.\r\n */\r\n/**\r\n * Is the window narrow?\r\n * @returns True if it is, false otherwise\r\n */\r\nfunction isNarrow() {\r\n    var narrowScreenBoundary = 800;\r\n    if (window.innerWidth) {\r\n        return window.innerWidth < narrowScreenBoundary;\r\n    }\r\n    // if we can\'t find the width; go with narrow.\r\n    return true;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC9XaW5kb3dQcm9wZXJ0aWVzLnRzP2VkMDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBOzs7O0dBSUc7QUFFSDs7O0dBR0c7QUFDSSxTQUFTLFFBQVE7SUFDdkIsSUFBSSxvQkFBb0IsR0FBVyxHQUFHLENBQUM7SUFFdkMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQ3RCLE9BQU8sTUFBTSxDQUFDLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQztLQUNoRDtJQUVELDhDQUE4QztJQUM5QyxPQUFPLElBQUksQ0FBQztBQUNiLENBQUMiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC9XaW5kb3dQcm9wZXJ0aWVzLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFdpbmRvd1Byb3BlcnRpZXMudHNcclxuICpcclxuICogTW9kdWxlIHRvIHRyYWNrIHdpbmRvdyBwcm9wZXJ0aWVzLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBJcyB0aGUgd2luZG93IG5hcnJvdz9cclxuICogQHJldHVybnMgVHJ1ZSBpZiBpdCBpcywgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNOYXJyb3coKTogYm9vbGVhbiB7XHJcblx0bGV0IG5hcnJvd1NjcmVlbkJvdW5kYXJ5OiBudW1iZXIgPSA4MDA7XHJcblxyXG5cdGlmICh3aW5kb3cuaW5uZXJXaWR0aCkge1xyXG5cdFx0cmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDwgbmFycm93U2NyZWVuQm91bmRhcnk7XHJcblx0fVxyXG5cclxuXHQvLyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSB3aWR0aDsgZ28gd2l0aCBuYXJyb3cuXHJcblx0cmV0dXJuIHRydWU7XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/app/WindowProperties.ts\n')},"./scripts/app/thirdparty/aria-webjs-compact-sdk-1.2.2.js":function(){eval('(function webpackUniversalModuleDefinition(root, factory) {\r\n\tif(true)\r\n\t\tmodule.exports = factory();\r\n\telse { var i, a; }\r\n})(this, function() {\r\nreturn /******/ (function(modules) { // webpackBootstrap\r\n/******/ \t// The module cache\r\n/******/ \tvar installedModules = {};\r\n/******/\r\n/******/ \t// The require function\r\n/******/ \tfunction __webpack_require__(moduleId) {\r\n/******/\r\n/******/ \t\t// Check if module is in cache\r\n/******/ \t\tif(installedModules[moduleId]) {\r\n/******/ \t\t\treturn installedModules[moduleId].exports;\r\n/******/ \t\t}\r\n/******/ \t\t// Create a new module (and put it into the cache)\r\n/******/ \t\tvar module = installedModules[moduleId] = {\r\n/******/ \t\t\ti: moduleId,\r\n/******/ \t\t\tl: false,\r\n/******/ \t\t\texports: {}\r\n/******/ \t\t};\r\n/******/\r\n/******/ \t\t// Execute the module function\r\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\r\n/******/\r\n/******/ \t\t// Flag the module as loaded\r\n/******/ \t\tmodule.l = true;\r\n/******/\r\n/******/ \t\t// Return the exports of the module\r\n/******/ \t\treturn module.exports;\r\n/******/ \t}\r\n/******/\r\n/******/\r\n/******/ \t// expose the modules object (__webpack_modules__)\r\n/******/ \t__webpack_require__.m = modules;\r\n/******/\r\n/******/ \t// expose the module cache\r\n/******/ \t__webpack_require__.c = installedModules;\r\n/******/\r\n/******/ \t// identity function for calling harmony imports with the correct context\r\n/******/ \t__webpack_require__.i = function(value) { return value; };\r\n/******/\r\n/******/ \t// define getter function for harmony exports\r\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\r\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\r\n/******/ \t\t\tObject.defineProperty(exports, name, {\r\n/******/ \t\t\t\tconfigurable: false,\r\n/******/ \t\t\t\tenumerable: true,\r\n/******/ \t\t\t\tget: getter\r\n/******/ \t\t\t});\r\n/******/ \t\t}\r\n/******/ \t};\r\n/******/\r\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\r\n/******/ \t__webpack_require__.n = function(module) {\r\n/******/ \t\tvar getter = module && module.__esModule ?\r\n/******/ \t\t\tfunction getDefault() { return module[\'default\']; } :\r\n/******/ \t\t\tfunction getModuleExports() { return module; };\r\n/******/ \t\t__webpack_require__.d(getter, \'a\', getter);\r\n/******/ \t\treturn getter;\r\n/******/ \t};\r\n/******/\r\n/******/ \t// Object.prototype.hasOwnProperty.call\r\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\r\n/******/\r\n/******/ \t// __webpack_public_path__\r\n/******/ \t__webpack_require__.p = "";\r\n/******/\r\n/******/ \t// Load entry module and return exports\r\n/******/ \treturn __webpack_require__(__webpack_require__.s = 15);\r\n/******/ })\r\n/************************************************************************/\r\n/******/ ([\r\n/* 0 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\n/**\r\n* microsoft.bond.primitives.ts\r\n* Copyright: Microsoft 2016\r\n*/\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar Int64 = /** @class */ (function () {\r\n    // BUG!!: need implement, currently, just handle 32bits number\r\n    function Int64(numberStr) {\r\n        this.low = 0;\r\n        this.high = 0;\r\n        this.low = parseInt(numberStr, 10);\r\n        if (this.low < 0) {\r\n            this.high = -1;\r\n        }\r\n    }\r\n    Int64.prototype.Equals = function (numberStr) {\r\n        var tmp = new Int64(numberStr);\r\n        return this.low === tmp.low && this.high === tmp.high;\r\n    };\r\n    return Int64;\r\n}());\r\nexports.Int64 = Int64;\r\nvar UInt64 = /** @class */ (function () {\r\n    // BUG!!: need implement, currently, just handle 32bits number\r\n    function UInt64(numberStr) {\r\n        this.low = 0;\r\n        this.high = 0;\r\n        this.low = parseInt(numberStr, 10);\r\n    }\r\n    UInt64.prototype.Equals = function (numberStr) {\r\n        var tmp = new UInt64(numberStr);\r\n        return this.low === tmp.low && this.high === tmp.high;\r\n    };\r\n    return UInt64;\r\n}());\r\nexports.UInt64 = UInt64;\r\nvar Number = /** @class */ (function () {\r\n    function Number() {\r\n    }\r\n    Number.ToByte = function (value) {\r\n        return this.ToUInt8(value);\r\n    };\r\n    Number.ToInt16 = function (value) {\r\n        var signMask = (value & 0x8000) << 16 >> 16;\r\n        return (value & 0x7fff) | signMask;\r\n    };\r\n    Number.ToInt32 = function (value) {\r\n        var signMask = (value & 0x80000000);\r\n        return (value & 0x7fffffff) | signMask;\r\n    };\r\n    Number.ToUInt8 = function (value) {\r\n        return value & 0xff;\r\n    };\r\n    Number.ToUInt32 = function (value) {\r\n        return value & 0xffffffff;\r\n    };\r\n    return Number;\r\n}());\r\nexports.Number = Number;\r\n\r\n\r\n/***/ }),\r\n/* 1 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\n/**\r\n* Enums.ts\r\n* Author: Abhilash Panwar (abpanwar)\r\n* Copyright: Microsoft 2016\r\n* Common enum values used in the SDK.\r\n*/\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar AWTPiiKind;\r\n(function (AWTPiiKind) {\r\n    AWTPiiKind[AWTPiiKind["NotSet"] = 0] = "NotSet";\r\n    AWTPiiKind[AWTPiiKind["DistinguishedName"] = 1] = "DistinguishedName";\r\n    AWTPiiKind[AWTPiiKind["GenericData"] = 2] = "GenericData";\r\n    AWTPiiKind[AWTPiiKind["IPV4Address"] = 3] = "IPV4Address";\r\n    AWTPiiKind[AWTPiiKind["IPv6Address"] = 4] = "IPv6Address";\r\n    AWTPiiKind[AWTPiiKind["MailSubject"] = 5] = "MailSubject";\r\n    AWTPiiKind[AWTPiiKind["PhoneNumber"] = 6] = "PhoneNumber";\r\n    AWTPiiKind[AWTPiiKind["QueryString"] = 7] = "QueryString";\r\n    AWTPiiKind[AWTPiiKind["SipAddress"] = 8] = "SipAddress";\r\n    AWTPiiKind[AWTPiiKind["SmtpAddress"] = 9] = "SmtpAddress";\r\n    AWTPiiKind[AWTPiiKind["Identity"] = 10] = "Identity";\r\n    AWTPiiKind[AWTPiiKind["Uri"] = 11] = "Uri";\r\n    AWTPiiKind[AWTPiiKind["Fqdn"] = 12] = "Fqdn";\r\n    // Supports scrubbing of the last octet in a IPV4 address. E.g. 10.121.227.147 becomes 10.121.227.*\r\n    AWTPiiKind[AWTPiiKind["IPV4AddressLegacy"] = 13] = "IPV4AddressLegacy";\r\n})(AWTPiiKind = exports.AWTPiiKind || (exports.AWTPiiKind = {}));\r\n\r\n\r\n/***/ }),\r\n/* 2 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\n/**\r\n* AWTBondSerializer.ts\r\n* Author: Brent Erickson (brericks) and Abhilash Panwar (abpanwar)\r\n* Copyright: Microsoft 2016\r\n* Class to handler bond serialization.\r\n*/\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar Bond = __webpack_require__(9);\r\nvar Enums_1 = __webpack_require__(1);\r\nvar Utils = __webpack_require__(3);\r\nvar AWTBondSerializer = /** @class */ (function () {\r\n    function AWTBondSerializer() {\r\n    }\r\n    AWTBondSerializer.getPayloadBlob = function (requestDictionary, tokenCount) {\r\n        var stream = new Bond.IO.MemoryStream();\r\n        var writer = new Bond.CompactBinaryProtocolWriter(stream);\r\n        // Begin ClientCollector request\r\n        //Write TokenToDataPackagesMap\r\n        writer.WriteFieldBegin(Bond.BondDataType.BT_MAP, 3);\r\n        writer.WriteMapContainerBegin(tokenCount, Bond.BondDataType.BT_STRING, Bond.BondDataType.BT_LIST);\r\n        Object.keys(requestDictionary).forEach(function (token) {\r\n            //write token\r\n            writer.WriteString(token);\r\n            var dataPackage = requestDictionary[token];\r\n            // Write list of DataPackages\r\n            writer.WriteContainerBegin(1, Bond.BondDataType.BT_STRUCT);\r\n            // Source\r\n            writer.WriteFieldBegin(Bond.BondDataType.BT_STRING, 2);\r\n            writer.WriteString(\'act_default_source\');\r\n            // DataPackageId\r\n            writer.WriteFieldBegin(Bond.BondDataType.BT_STRING, 5);\r\n            writer.WriteString(Utils.newGuid());\r\n            // Timestamp\r\n            writer.WriteFieldBegin(Bond.BondDataType.BT_INT64, 6);\r\n            writer.WriteInt64(Utils.numberToBondInt64(Date.now()));\r\n            // Records\r\n            writer.WriteFieldBegin(Bond.BondDataType.BT_LIST, 8);\r\n            writer.WriteContainerBegin(dataPackage.length, Bond.BondDataType.BT_STRUCT);\r\n            for (var i = 0; i < dataPackage.length; ++i) {\r\n                writer.WriteBlob(dataPackage[i]);\r\n            }\r\n            writer.WriteStructEnd(false);\r\n        });\r\n        // End ClientCollector\r\n        writer.WriteStructEnd(false);\r\n        return stream.GetBuffer();\r\n    };\r\n    // As per mappings at https://skype.visualstudio.com/SCC/F.S4L.FUNDAMENTALS/_git/infrastructure_data_clienttelemetry?\r\n    // path=%2Fclienttelemetry%2Fsrc%2Fbond%2FDataPackage.bond&version=GBdev2&_a=contents\r\n    // Requires that the values of AWTEventData.properties must all be AWTEventProperty\r\n    AWTBondSerializer.getEventBlob = function (eventData) {\r\n        var stream = new Bond.IO.MemoryStream();\r\n        var writer = new Bond.CompactBinaryProtocolWriter(stream);\r\n        // ID\r\n        writer.WriteFieldBegin(Bond.BondDataType.BT_STRING, 1);\r\n        writer.WriteString(eventData.id);\r\n        // Timestamp\r\n        writer.WriteFieldBegin(Bond.BondDataType.BT_INT64, 3);\r\n        writer.WriteInt64(Utils.numberToBondInt64(eventData.timestamp));\r\n        // Type\r\n        writer.WriteFieldBegin(Bond.BondDataType.BT_STRING, 5);\r\n        writer.WriteString(eventData.type);\r\n        // Event Type\r\n        writer.WriteFieldBegin(Bond.BondDataType.BT_STRING, 6);\r\n        writer.WriteString(eventData.name);\r\n        var propsString = [];\r\n        var piiProps = [];\r\n        // Iterate across event data properties and separate based on pii\r\n        Object.keys(eventData.properties).forEach(function (key) {\r\n            var property = eventData.properties[key];\r\n            if (property.pii === Enums_1.AWTPiiKind.NotSet) {\r\n                propsString.push(key);\r\n            }\r\n            else {\r\n                piiProps.push(key);\r\n            }\r\n        });\r\n        //Extension map\r\n        if (propsString.length) {\r\n            writer.WriteFieldBegin(Bond.BondDataType.BT_MAP, 13);\r\n            writer.WriteMapContainerBegin(propsString.length, Bond.BondDataType.BT_STRING, Bond.BondDataType.BT_STRING);\r\n            propsString.forEach(function (name) {\r\n                writer.WriteString(name);\r\n                writer.WriteString(eventData.properties[name].value);\r\n            });\r\n        }\r\n        // Pii\r\n        if (piiProps.length) {\r\n            writer.WriteFieldBegin(Bond.BondDataType.BT_MAP, 30);\r\n            writer.WriteMapContainerBegin(piiProps.length, Bond.BondDataType.BT_STRING, Bond.BondDataType.BT_STRUCT);\r\n            piiProps.forEach(function (name) {\r\n                writer.WriteString(name);\r\n                // PII Data\r\n                // O365 scrubber type\r\n                writer.WriteFieldBegin(Bond.BondDataType.BT_INT32, 1);\r\n                writer.WriteInt32(1);\r\n                // PII Kind\r\n                writer.WriteFieldBegin(Bond.BondDataType.BT_INT32, 2);\r\n                writer.WriteInt32(eventData.properties[name].pii);\r\n                // Value\r\n                writer.WriteFieldBegin(Bond.BondDataType.BT_STRING, 3);\r\n                writer.WriteString(eventData.properties[name].value);\r\n                writer.WriteStructEnd(false);\r\n            });\r\n        }\r\n        writer.WriteStructEnd(false);\r\n        return stream.GetBuffer();\r\n    };\r\n    AWTBondSerializer.base64Encode = function (data) {\r\n        return Bond.Encoding.Base64.GetString(data);\r\n    };\r\n    return AWTBondSerializer;\r\n}());\r\nexports.default = AWTBondSerializer;\r\n\r\n\r\n/***/ }),\r\n/* 3 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\n/**\r\n* Utils.ts\r\n* Author: Brent Erickson (brericks) and Abhilash Panwar (abpanwar)\r\n* Copyright: Microsoft 2016\r\n* Common functions used in the SDK.\r\n*/\r\nvar microsoft_bond_primitives_1 = __webpack_require__(0);\r\nvar GuidRegex = /[xy]/g;\r\nfunction numberToBondInt64(value) {\r\n    // Construct bond timestamp for aria\r\n    var bond_value = new microsoft_bond_primitives_1.Int64(\'0\');\r\n    bond_value.low = value & 0xffffffff;\r\n    bond_value.high = Math.floor(value / 0x100000000);\r\n    return bond_value;\r\n}\r\nexports.numberToBondInt64 = numberToBondInt64;\r\nfunction newGuid() {\r\n    return \'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\'.replace(GuidRegex, function (c) {\r\n        var r = (Math.random() * 16 | 0), v = (c === \'x\' ? r : r & 0x3 | 0x8);\r\n        return v.toString(16);\r\n    });\r\n}\r\nexports.newGuid = newGuid;\r\nfunction isPii(value) {\r\n    if (!isNaN(value) && value !== null && value >= 0 && value <= 13) {\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\nexports.isPii = isPii;\r\n\r\n\r\n/***/ }),\r\n/* 4 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\n/**\r\n* Version.ts\r\n* Author: Abhilash Panwar (abpanwar)\r\n* Copyright: Microsoft 2016\r\n* Class for SDK version.\r\n*/\r\nexports.Version = \'1.2.2\';\r\nexports.FullVersionString = \'AWT-Web-CJS-\' + exports.Version;\r\n\r\n\r\n/***/ }),\r\n/* 5 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\n/**\r\n* AriaSDK.ts\r\n* Author: Abhilash Panwar (abpanwar)\r\n* Copyright: Microsoft 2016\r\n*/\r\nvar Enums_1 = __webpack_require__(1);\r\nexports.AWTPiiKind = Enums_1.AWTPiiKind;\r\nvar AWT_1 = __webpack_require__(13);\r\nexports.AWT = AWT_1.default;\r\nexports.AWT_COLLECTOR_URL_UNITED_STATES = \'https://us.pipe.aria.microsoft.com/Collector/3.0/\';\r\nexports.AWT_COLLECTOR_URL_GERMANY = \'https://de.pipe.aria.microsoft.com/Collector/3.0/\';\r\nexports.AWT_COLLECTOR_URL_JAPAN = \'https://jp.pipe.aria.microsoft.com/Collector/3.0/\';\r\nexports.AWT_COLLECTOR_URL_AUSTRALIA = \'https://au.pipe.aria.microsoft.com/Collector/3.0/\';\r\nexports.AWT_COLLECTOR_URL_EUROPE = \'https://eu.pipe.aria.microsoft.com/Collector/3.0/\';\r\n\r\n\r\n/***/ }),\r\n/* 6 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\n/**\r\n* bond_const.ts\r\n* Copyright: Microsoft 2016\r\n*/\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\n//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//\r\n//     Tool     : bondc, Version=3.0.1, Build=bond-git.debug.not\r\n//     Template : Microsoft.Bond.Rules.dll#TypeScript.tt\r\n//     File     : bond_const.ts\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost when\r\n//     the code is regenerated.\r\n// <\/auto-generated>\r\n//------------------------------------------------------------------------------\r\nvar BondDataType;\r\n(function (BondDataType) {\r\n    BondDataType[BondDataType["BT_STOP"] = 0] = "BT_STOP";\r\n    BondDataType[BondDataType["BT_STOP_BASE"] = 1] = "BT_STOP_BASE";\r\n    BondDataType[BondDataType["BT_UINT8"] = 3] = "BT_UINT8";\r\n    BondDataType[BondDataType["BT_UINT32"] = 5] = "BT_UINT32";\r\n    BondDataType[BondDataType["BT_UINT64"] = 6] = "BT_UINT64";\r\n    BondDataType[BondDataType["BT_STRING"] = 9] = "BT_STRING";\r\n    BondDataType[BondDataType["BT_STRUCT"] = 10] = "BT_STRUCT";\r\n    BondDataType[BondDataType["BT_LIST"] = 11] = "BT_LIST";\r\n    BondDataType[BondDataType["BT_MAP"] = 13] = "BT_MAP";\r\n    BondDataType[BondDataType["BT_INT32"] = 16] = "BT_INT32";\r\n    BondDataType[BondDataType["BT_INT64"] = 17] = "BT_INT64";\r\n    BondDataType[BondDataType["BT_UNAVAILABLE"] = 127] = "BT_UNAVAILABLE";\r\n})(BondDataType = exports.BondDataType || (exports.BondDataType = {}));\r\n\r\n\r\n/***/ }),\r\n/* 7 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\n/**\r\n* microsoft.bond.encoding.ts\r\n* Copyright: Microsoft 2016\r\n*/\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar microsoft_bond_primitives_1 = __webpack_require__(0);\r\nvar Utf8 = /** @class */ (function () {\r\n    function Utf8() {\r\n    }\r\n    Utf8.GetBytes = function (value) {\r\n        var array = [];\r\n        for (var i = 0; i < value.length; ++i) {\r\n            var char = value.charCodeAt(i);\r\n            if (char < 0x80) {\r\n                array.push(char);\r\n            }\r\n            else if (char < 0x800) {\r\n                array.push(0xc0 | (char >> 6), 0x80 | (char & 0x3f));\r\n            }\r\n            else if (char < 0xd800 || char >= 0xe000) {\r\n                array.push(0xe0 | (char >> 12), 0x80 | ((char >> 6) & 0x3f), 0x80 | (char & 0x3f));\r\n            }\r\n            else {\r\n                char = 0x10000 + (((char & 0x3ff) << 10) | (value.charCodeAt(++i) & 0x3ff));\r\n                array.push(0xf0 | (char >> 18), 0x80 | ((char >> 12) & 0x3f), 0x80 | ((char >> 6) & 0x3f), 0x80 | (char & 0x3f));\r\n            }\r\n        }\r\n        return array;\r\n    };\r\n    return Utf8;\r\n}());\r\nexports.Utf8 = Utf8;\r\nvar Base64 = /** @class */ (function () {\r\n    function Base64() {\r\n    }\r\n    Base64.GetString = function (inArray) {\r\n        var lookup = \'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\';\r\n        var output = [];\r\n        var paddingBytes = inArray.length % 3;\r\n        var toBase64 = function (num) {\r\n            return [lookup.charAt((num >> 18) & 0x3F),\r\n                lookup.charAt((num >> 12) & 0x3F),\r\n                lookup.charAt((num >> 6) & 0x3F),\r\n                lookup.charAt(num & 0x3F)].join(\'\');\r\n        };\r\n        for (var i = 0, length_1 = inArray.length - paddingBytes; i < length_1; i += 3) {\r\n            var temp = (inArray[i] << 16) + (inArray[i + 1] << 8) + (inArray[i + 2]);\r\n            output.push(toBase64(temp));\r\n        }\r\n        switch (paddingBytes) {\r\n            case 1:\r\n                var temp = inArray[inArray.length - 1];\r\n                output.push(lookup.charAt(temp >> 2));\r\n                output.push(lookup.charAt((temp << 4) & 0x3F));\r\n                output.push(\'==\');\r\n                break;\r\n            case 2:\r\n                var temp2 = (inArray[inArray.length - 2] << 8) + (inArray[inArray.length - 1]);\r\n                output.push(lookup.charAt(temp2 >> 10));\r\n                output.push(lookup.charAt((temp2 >> 4) & 0x3F));\r\n                output.push(lookup.charAt((temp2 << 2) & 0x3F));\r\n                output.push(\'=\');\r\n                break;\r\n        }\r\n        return output.join(\'\');\r\n    };\r\n    return Base64;\r\n}());\r\nexports.Base64 = Base64;\r\nvar Varint = /** @class */ (function () {\r\n    function Varint() {\r\n    }\r\n    Varint.GetBytes = function (value) {\r\n        var array = [];\r\n        while (value & 0xffffff80) {\r\n            array.push((value & 0x7f) | 0x80);\r\n            value >>>= 7;\r\n        }\r\n        array.push(value & 0x7f);\r\n        return array;\r\n    };\r\n    return Varint;\r\n}());\r\nexports.Varint = Varint;\r\nvar Varint64 = /** @class */ (function () {\r\n    function Varint64() {\r\n    }\r\n    Varint64.GetBytes = function (value) {\r\n        var low = value.low;\r\n        var high = value.high;\r\n        var array = [];\r\n        while (high || (0xffffff80 & low)) {\r\n            array.push((low & 0x7f) | 0x80);\r\n            low = ((high & 0x7f) << 25) | (low >>> 7);\r\n            high >>>= 7;\r\n        }\r\n        array.push(low & 0x7f);\r\n        return array;\r\n    };\r\n    return Varint64;\r\n}());\r\nexports.Varint64 = Varint64;\r\nvar Zigzag = /** @class */ (function () {\r\n    function Zigzag() {\r\n    }\r\n    Zigzag.EncodeZigzag32 = function (value) {\r\n        value = microsoft_bond_primitives_1.Number.ToInt32(value);\r\n        return ((value << 1) ^ (value >> (4 /*sizeof(int)*/ * 8 - 1)));\r\n    };\r\n    Zigzag.EncodeZigzag64 = function (value) {\r\n        var low = value.low;\r\n        var high = value.high;\r\n        var tmpH = (high << 1) | (low >>> 31);\r\n        var tmpL = low << 1;\r\n        if (high & 0x80000000) {\r\n            tmpH = ~tmpH;\r\n            tmpL = ~tmpL;\r\n        }\r\n        var res = new microsoft_bond_primitives_1.UInt64(\'0\');\r\n        res.low = tmpL;\r\n        res.high = tmpH;\r\n        return res;\r\n    };\r\n    return Zigzag;\r\n}());\r\nexports.Zigzag = Zigzag;\r\n\r\n\r\n/***/ }),\r\n/* 8 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\n/**\r\n* microsoft.bond.io.ts\r\n* Copyright: Microsoft 2016\r\n*/\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar microsoft_bond_primitives_1 = __webpack_require__(0);\r\nvar MemoryStream = /** @class */ (function () {\r\n    function MemoryStream() {\r\n        this._buffer = [];\r\n    }\r\n    /*override*/\r\n    MemoryStream.prototype.WriteByte = function (byte) {\r\n        this._buffer.push(microsoft_bond_primitives_1.Number.ToByte(byte));\r\n    };\r\n    /*override*/\r\n    MemoryStream.prototype.Write = function (buffer, offset, count) {\r\n        while (count--) {\r\n            this.WriteByte(buffer[offset++]);\r\n        }\r\n    };\r\n    /**\r\n     * Returns the array of unsigned bytes from which this stream was created.\r\n     */\r\n    MemoryStream.prototype.GetBuffer = function () {\r\n        return this._buffer;\r\n    };\r\n    return MemoryStream;\r\n}());\r\nexports.MemoryStream = MemoryStream;\r\n\r\n\r\n/***/ }),\r\n/* 9 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\n/**\r\n* microsoft.bond.ts\r\n* Copyright: Microsoft 2016\r\n*/\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar bond_const_1 = __webpack_require__(6);\r\nexports.BondDataType = bond_const_1.BondDataType;\r\nvar Encoding = __webpack_require__(7);\r\nexports.Encoding = Encoding;\r\nvar IO = __webpack_require__(8);\r\nexports.IO = IO;\r\nvar microsoft_bond_primitives_1 = __webpack_require__(0);\r\nexports.Int64 = microsoft_bond_primitives_1.Int64;\r\nexports.UInt64 = microsoft_bond_primitives_1.UInt64;\r\nexports.Number = microsoft_bond_primitives_1.Number;\r\nvar CompactBinaryProtocolWriter = /** @class */ (function () {\r\n    function CompactBinaryProtocolWriter(stream) {\r\n        this._stream = stream;\r\n    }\r\n    /*override*/\r\n    CompactBinaryProtocolWriter.prototype.WriteBlob = function (blob) {\r\n        this._stream.Write(blob, 0, blob.length);\r\n    };\r\n    /*override*/\r\n    CompactBinaryProtocolWriter.prototype.WriteContainerBegin = function (size, elementType) {\r\n        this.WriteUInt8(elementType);\r\n        this.WriteUInt32(size);\r\n    };\r\n    /*override*/\r\n    CompactBinaryProtocolWriter.prototype.WriteMapContainerBegin = function (size, keyType, valueType) {\r\n        this.WriteUInt8(keyType);\r\n        this.WriteUInt8(valueType);\r\n        this.WriteUInt32(size);\r\n    };\r\n    /*override*/\r\n    CompactBinaryProtocolWriter.prototype.WriteFieldBegin = function (type, id) {\r\n        if (id <= 5) {\r\n            this._stream.WriteByte(type | (id << 5));\r\n        }\r\n        else if (id <= 0xff) {\r\n            this._stream.WriteByte(type | (6 << 5));\r\n            this._stream.WriteByte(id);\r\n        }\r\n        else {\r\n            this._stream.WriteByte(type | (7 << 5));\r\n            this._stream.WriteByte(id);\r\n            this._stream.WriteByte(id >> 8);\r\n        }\r\n    };\r\n    /*override*/\r\n    CompactBinaryProtocolWriter.prototype.WriteInt32 = function (value) {\r\n        value = Encoding.Zigzag.EncodeZigzag32(value);\r\n        this.WriteUInt32(value);\r\n    };\r\n    /*override*/\r\n    CompactBinaryProtocolWriter.prototype.WriteInt64 = function (value) {\r\n        this.WriteUInt64(Encoding.Zigzag.EncodeZigzag64(value));\r\n    };\r\n    /*override*/\r\n    CompactBinaryProtocolWriter.prototype.WriteString = function (value) {\r\n        if (value === \'\') {\r\n            this.WriteUInt32(0 /*length*/);\r\n        }\r\n        else {\r\n            var array = Encoding.Utf8.GetBytes(value);\r\n            this.WriteUInt32(array.length);\r\n            this._stream.Write(array, 0, array.length);\r\n        }\r\n    };\r\n    /*override*/\r\n    CompactBinaryProtocolWriter.prototype.WriteStructEnd = function (isBase) {\r\n        this.WriteUInt8(isBase ? bond_const_1.BondDataType.BT_STOP_BASE : bond_const_1.BondDataType.BT_STOP);\r\n    };\r\n    /*override*/\r\n    CompactBinaryProtocolWriter.prototype.WriteUInt32 = function (value) {\r\n        var array = Encoding.Varint.GetBytes(microsoft_bond_primitives_1.Number.ToUInt32(value));\r\n        this._stream.Write(array, 0, array.length);\r\n    };\r\n    /*override*/\r\n    CompactBinaryProtocolWriter.prototype.WriteUInt64 = function (value) {\r\n        var array = Encoding.Varint64.GetBytes(value);\r\n        this._stream.Write(array, 0, array.length);\r\n    };\r\n    /*override*/\r\n    CompactBinaryProtocolWriter.prototype.WriteUInt8 = function (value) {\r\n        this._stream.WriteByte(microsoft_bond_primitives_1.Number.ToUInt8(value));\r\n    };\r\n    return CompactBinaryProtocolWriter;\r\n}());\r\nexports.CompactBinaryProtocolWriter = CompactBinaryProtocolWriter;\r\n\r\n\r\n/***/ }),\r\n/* 10 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar SecToMsMultiplier = 1000;\r\nvar AWTKillSwitch = /** @class */ (function () {\r\n    function AWTKillSwitch() {\r\n        this._killedTokenDictionary = {};\r\n    }\r\n    AWTKillSwitch.prototype.setKillSwitchTenants = function (killTokens, killDuration) {\r\n        var _this = this;\r\n        if (killTokens && killDuration) {\r\n            try {\r\n                var killedTokens = killTokens.split(\',\');\r\n                if (killDuration === \'this-request-only\') {\r\n                    return killedTokens;\r\n                }\r\n                var durationMs_1 = parseInt(killDuration, 10) * SecToMsMultiplier;\r\n                killedTokens.forEach(function (token) {\r\n                    _this._killedTokenDictionary[token] = Date.now() + durationMs_1;\r\n                });\r\n            }\r\n            catch (ex) {\r\n                return [];\r\n            }\r\n        }\r\n        return [];\r\n    };\r\n    AWTKillSwitch.prototype.isTenantKilled = function (tenantToken) {\r\n        if (this._killedTokenDictionary[tenantToken] !== undefined && this._killedTokenDictionary[tenantToken] > Date.now()) {\r\n            return true;\r\n        }\r\n        delete this._killedTokenDictionary[tenantToken];\r\n        return false;\r\n    };\r\n    return AWTKillSwitch;\r\n}());\r\nexports.default = AWTKillSwitch;\r\n\r\n\r\n/***/ }),\r\n/* 11 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar AWTBondSerializer_1 = __webpack_require__(2);\r\nvar AWTRecordBatcher = /** @class */ (function () {\r\n    function AWTRecordBatcher(_maxRequestSize, _outboundQueue) {\r\n        this._maxRequestSize = _maxRequestSize;\r\n        this._outboundQueue = _outboundQueue;\r\n        this._currentBatch = {};\r\n        this._currentBatchSize = 0;\r\n    }\r\n    AWTRecordBatcher.prototype.addEventToBatch = function (event) {\r\n        var serializedEvent = AWTBondSerializer_1.default.getEventBlob(event);\r\n        if (serializedEvent.length > this._maxRequestSize) {\r\n            //single event too big\r\n            return;\r\n        }\r\n        if (this._currentBatchSize + serializedEvent.length > this._maxRequestSize) {\r\n            this.flushBatch();\r\n        }\r\n        else {\r\n            if (this._currentBatch[event.tenantToken] === undefined) {\r\n                this._currentBatch[event.tenantToken] = [];\r\n            }\r\n            this._currentBatch[event.tenantToken].push(serializedEvent);\r\n            this._currentBatchSize += serializedEvent.length;\r\n        }\r\n    };\r\n    AWTRecordBatcher.prototype.flushBatch = function () {\r\n        if (this._currentBatchSize > 0) {\r\n            this._outboundQueue.push(this._currentBatch);\r\n            this._currentBatch = {};\r\n            this._currentBatchSize = 0;\r\n        }\r\n    };\r\n    return AWTRecordBatcher;\r\n}());\r\nexports.default = AWTRecordBatcher;\r\n\r\n\r\n/***/ }),\r\n/* 12 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\n/**\r\n* AWTRetryPolicy.ts\r\n* Author: Abhilash Panwar (abpanwar)\r\n* Copyright: Microsoft 2016\r\n* Class for retry policy.\r\n*/\r\nvar RandomizationLowerThreshold = 0.8;\r\nvar RandomizationUpperThreshold = 1.2;\r\nvar BaseBackoff = 3000;\r\nvar MaxBackoff = 120000;\r\nvar AWTRetryPolicy = /** @class */ (function () {\r\n    function AWTRetryPolicy() {\r\n    }\r\n    AWTRetryPolicy.shouldRetryForStatus = function (httpStatusCode) {\r\n        /* The below expression reads that we should only retry for:\r\n            - HttpStatusCodes that are smaller than 300.\r\n            - HttpStatusCodes greater or equal to 500 (except for 501-NotImplement\r\n              and 505-HttpVersionNotSupport).\r\n            - HttpStatusCode 408-RequestTimeout.\r\n           This is based on Microsoft.WindowsAzure.Storage.RetryPolicies.ExponentialRetry class */\r\n        return !((httpStatusCode >= 300 && httpStatusCode < 500 && httpStatusCode !== 408)\r\n            || (httpStatusCode === 501)\r\n            || (httpStatusCode === 505));\r\n    };\r\n    AWTRetryPolicy.getMillisToBackoffForRetry = function (retriesSoFar) {\r\n        var waitDuration = 0;\r\n        var minBackoff = BaseBackoff * RandomizationLowerThreshold;\r\n        var maxBackoff = BaseBackoff * RandomizationUpperThreshold;\r\n        var randomBackoff = Math.floor(Math.random() * (maxBackoff - minBackoff)) + minBackoff;\r\n        waitDuration = Math.pow(4, retriesSoFar) * randomBackoff;\r\n        return Math.min(waitDuration, MaxBackoff);\r\n    };\r\n    return AWTRetryPolicy;\r\n}());\r\nexports.default = AWTRetryPolicy;\r\n\r\n\r\n/***/ }),\r\n/* 13 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar Enums_1 = __webpack_require__(1);\r\nvar AWTTransmissionManager_1 = __webpack_require__(14);\r\nvar Utils = __webpack_require__(3);\r\nvar Version = __webpack_require__(4);\r\nvar AllTokens = \'allTkns\';\r\nvar EventNameAndTypeRegex = /^[a-zA-Z0-9]([a-zA-Z0-9]|_){2,98}[a-zA-Z0-9]$/;\r\nvar EventNameDotRegex = /\\./g;\r\nvar PropertyNameRegex = /^[a-zA-Z0-9](([a-zA-Z0-9|_|\\.]){0,98}[a-zA-Z0-9])?$/;\r\nvar AWT = /** @class */ (function () {\r\n    function AWT() {\r\n    }\r\n    AWT.initialize = function (tenantToken, configuration) {\r\n        if (configuration === void 0) { configuration = {}; }\r\n        if (this._isInitialized) {\r\n            // tslint:disable-next-line\r\n            throw \'Already Initialized\';\r\n        }\r\n        this._defaultTenantToken = tenantToken;\r\n        this._overrideValuesFromConfig(configuration);\r\n        //Create sender\r\n        AWTTransmissionManager_1.default.initialize(this._config);\r\n        this._isInitialized = true;\r\n    };\r\n    AWT.flush = function (callback) {\r\n        if (this._isInitialized && !this._isDestroyed) {\r\n            AWTTransmissionManager_1.default.flush(callback);\r\n        }\r\n    };\r\n    AWT.flushAndTeardown = function () {\r\n        if (this._isInitialized && !this._isDestroyed) {\r\n            this._isDestroyed = true;\r\n            AWTTransmissionManager_1.default.flushAndTeardown();\r\n        }\r\n    };\r\n    AWT.setContext = function (name, property, tenantToken) {\r\n        if (tenantToken === void 0) { tenantToken = AllTokens; }\r\n        property = this._sanitizeProperty(name, property);\r\n        if (property === null) {\r\n            return;\r\n        }\r\n        if (!this._contextProperties[tenantToken]) {\r\n            this._contextProperties[tenantToken] = {};\r\n        }\r\n        this._contextProperties[tenantToken][name] = property;\r\n    };\r\n    AWT.logEvent = function (event) {\r\n        var _this = this;\r\n        if (this._isInitialized) {\r\n            if (!event.name || !event.properties) {\r\n                return;\r\n            }\r\n            event.name = event.name.toLowerCase();\r\n            event.name.replace(EventNameDotRegex, \'_\');\r\n            var typePrefix = \'\';\r\n            if (!event.type) {\r\n                event.type = \'custom\';\r\n            }\r\n            else {\r\n                event.type.toLowerCase();\r\n                typePrefix = \'custom.\';\r\n            }\r\n            if (!EventNameAndTypeRegex.test(event.name) || !EventNameAndTypeRegex.test(event.type)) {\r\n                return;\r\n            }\r\n            event.type = typePrefix + event.type;\r\n            if (isNaN(event.timestamp)) {\r\n                event.timestamp = (new Date()).getTime();\r\n            }\r\n            if (!event.tenantToken) {\r\n                event.tenantToken = this._defaultTenantToken;\r\n            }\r\n            event.id = Utils.newGuid();\r\n            Object.keys(event.properties).forEach(function (name) {\r\n                event.properties[name] = _this._sanitizeProperty(name, event.properties[name]);\r\n                if (event.properties[name] === null) {\r\n                    delete event.properties[name];\r\n                }\r\n            });\r\n            this._addContextIfAbsent(event, event.tenantToken);\r\n            this._addContextIfAbsent(event, AllTokens);\r\n            if (Object.keys(event.properties).length === 0) {\r\n                return;\r\n            }\r\n            this._setDefaultProperty(event, \'EventInfo.InitId\', this._getInitId(event.tenantToken));\r\n            this._setDefaultProperty(event, \'EventInfo.Sequence\', this._getSequenceId(event.tenantToken));\r\n            this._setDefaultProperty(event, \'EventInfo.SdkVersion\', Version.FullVersionString);\r\n            this._setDefaultProperty(event, \'EventInfo.Name\', event.name);\r\n            this._setDefaultProperty(event, \'EventInfo.Time\', (new Date(event.timestamp)).toISOString());\r\n            AWTTransmissionManager_1.default.sendEvent(event);\r\n        }\r\n    };\r\n    AWT._overrideValuesFromConfig = function (config) {\r\n        if (config.collectorUrl) {\r\n            this._config.collectorUrl = config.collectorUrl;\r\n        }\r\n        if (config.sendingTimer > 1000) {\r\n            this._config.sendingTimer = config.sendingTimer;\r\n        }\r\n    };\r\n    AWT._getInitId = function (tenantToken) {\r\n        if (this._initIdMap[tenantToken] === undefined) {\r\n            this._initIdMap[tenantToken] = Utils.newGuid();\r\n        }\r\n        return this._initIdMap[tenantToken];\r\n    };\r\n    AWT._getSequenceId = function (tenantToken) {\r\n        if (this._sequenceIdMap[tenantToken] === undefined) {\r\n            this._sequenceIdMap[tenantToken] = 0;\r\n        }\r\n        return (++this._sequenceIdMap[tenantToken]).toString();\r\n    };\r\n    AWT._setDefaultProperty = function (event, name, value) {\r\n        event.properties[name] = { value: value, pii: Enums_1.AWTPiiKind.NotSet };\r\n    };\r\n    AWT._addContextIfAbsent = function (event, tenantToken) {\r\n        if (this._contextProperties[tenantToken]) {\r\n            var context_1 = this._contextProperties[tenantToken];\r\n            Object.keys(context_1).forEach(function (name) {\r\n                if (!event.properties[name]) {\r\n                    event.properties[name] = context_1[name];\r\n                }\r\n            });\r\n        }\r\n    };\r\n    AWT._sanitizeProperty = function (name, property) {\r\n        if (typeof property === \'string\' || typeof property === \'number\' || typeof property === \'boolean\') {\r\n            property = { value: property };\r\n        }\r\n        if (!PropertyNameRegex.test(name) || property === undefined || property === null\r\n            || property.value === null || property.value === undefined || property.value === \'\') {\r\n            return null;\r\n        }\r\n        if (typeof property.pii === \'undefined\') {\r\n            property.pii = Enums_1.AWTPiiKind.NotSet;\r\n        }\r\n        property.value = property.value.toString();\r\n        return Utils.isPii(property.pii) ? property : null;\r\n    };\r\n    AWT._isInitialized = false;\r\n    AWT._isDestroyed = false;\r\n    AWT._contextProperties = {};\r\n    AWT._sequenceIdMap = {};\r\n    AWT._initIdMap = {};\r\n    AWT._config = {\r\n        collectorUrl: \'https://browser.pipe.aria.microsoft.com/Collector/3.0/\',\r\n        sendingTimer: 1000\r\n    };\r\n    return AWT;\r\n}());\r\nexports.default = AWT;\r\n\r\n\r\n/***/ }),\r\n/* 14 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\n"use strict";\r\n\r\nObject.defineProperty(exports, "__esModule", { value: true });\r\nvar AWTRecordBatcher_1 = __webpack_require__(11);\r\nvar AWTBondSerializer_1 = __webpack_require__(2);\r\nvar AWTRetryPolicy_1 = __webpack_require__(12);\r\nvar AWTKillSwitch_1 = __webpack_require__(10);\r\nvar Version = __webpack_require__(4);\r\nvar FlushCheckTimer = 250;\r\nvar RequestSizeLimitBytes = 2936012; //approx 2.8 Mb\r\nvar MaxRetries = 4;\r\nvar AWTTransmissionManager = /** @class */ (function () {\r\n    function AWTTransmissionManager() {\r\n    }\r\n    AWTTransmissionManager.initialize = function (config) {\r\n        this._inboundQueues.push([]);\r\n        this._recordBatcher = new AWTRecordBatcher_1.default(RequestSizeLimitBytes, this._outboundQueue);\r\n        this._newEventsAllowed = true;\r\n        if (typeof Uint8Array === \'undefined\') {\r\n            this._urlString += \'&content-encoding=base64\';\r\n        }\r\n        this._sendingTimer = config.sendingTimer;\r\n        this._urlString = config.collectorUrl + this._urlString + \'&x-apikey=\';\r\n    };\r\n    //Push the event into the inbound queue and return\r\n    AWTTransmissionManager.sendEvent = function (event) {\r\n        var _this = this;\r\n        if (this._newEventsAllowed) {\r\n            //Add event to the last inbound queue\r\n            this._inboundQueues[this._inboundQueues.length - 1].push(event);\r\n            if (!this._running && this._timeout < 0 && !this._isCurrentlyFlushing) {\r\n                this._timeout = setTimeout(function () { return _this._batchAndSendEvents(false); }, this._sendingTimer);\r\n            }\r\n        }\r\n    };\r\n    AWTTransmissionManager.flushAndTeardown = function () {\r\n        this._newEventsAllowed = false;\r\n        this._batchAndSendEvents(true);\r\n    };\r\n    AWTTransmissionManager.flush = function (callback) {\r\n        this._inboundQueues.push([]);\r\n        if (!this._isCurrentlyFlushing) {\r\n            this._isCurrentlyFlushing = true;\r\n            this._flush(callback);\r\n        }\r\n        else {\r\n            this._flushQueue.push(callback);\r\n        }\r\n    };\r\n    AWTTransmissionManager._batchAndSendEvents = function (isTeardown) {\r\n        this._running = true;\r\n        while (this._inboundQueues[0].length > 0 && this._outboundQueue.length < 1) {\r\n            this._recordBatcher.addEventToBatch(this._inboundQueues[0].pop());\r\n        }\r\n        if (this._outboundQueue.length === 0) {\r\n            this._recordBatcher.flushBatch();\r\n        }\r\n        this._sendRequest(this._outboundQueue.pop(), 0, isTeardown);\r\n    };\r\n    AWTTransmissionManager._retryRequestIfNeeded = function (conn, request, tokenCount, apikey, retryCount) {\r\n        var _this = this;\r\n        var shouldRetry = true;\r\n        if (conn && typeof conn.status !== \'undefined\') {\r\n            var killedTokens = this._killSwitch.setKillSwitchTenants(conn.getResponseHeader(\'kill-tokens\'), conn.getResponseHeader(\'kill-duration-seconds\'));\r\n            killedTokens.forEach(function (key) {\r\n                delete request[key];\r\n                tokenCount--;\r\n            });\r\n            if (!AWTRetryPolicy_1.default.shouldRetryForStatus(conn.status) || tokenCount <= 0) {\r\n                shouldRetry = false;\r\n            }\r\n        }\r\n        if (shouldRetry && retryCount < MaxRetries) {\r\n            setTimeout(function () { return _this._sendRequest(request, retryCount + 1, false); }, AWTRetryPolicy_1.default.getMillisToBackoffForRetry(retryCount));\r\n        }\r\n        else {\r\n            this._handleRequestFinished(null);\r\n        }\r\n    };\r\n    AWTTransmissionManager._sendRequest = function (request, retryCount, isTeardown) {\r\n        var _this = this;\r\n        try {\r\n            var conn_1 = new XMLHttpRequest();\r\n            var tokenCount_1 = 0;\r\n            var apikey_1 = \'\';\r\n            Object.keys(request).forEach(function (token) {\r\n                if (!_this._killSwitch.isTenantKilled(token)) {\r\n                    if (apikey_1.length > 0) {\r\n                        apikey_1 += \',\';\r\n                    }\r\n                    apikey_1 += token;\r\n                    tokenCount_1++;\r\n                }\r\n                else {\r\n                    delete request[token];\r\n                }\r\n            });\r\n            conn_1.open(\'POST\', this._urlString + apikey_1, !isTeardown);\r\n            if (!isTeardown) {\r\n                conn_1.ontimeout = function () {\r\n                    _this._retryRequestIfNeeded(conn_1, request, tokenCount_1, apikey_1, retryCount);\r\n                };\r\n                conn_1.onerror = function () {\r\n                    _this._retryRequestIfNeeded(conn_1, request, tokenCount_1, apikey_1, retryCount);\r\n                };\r\n                conn_1.onload = function () {\r\n                    _this._handleRequestFinished(conn_1);\r\n                };\r\n            }\r\n            if (tokenCount_1 > 0) {\r\n                var blob = AWTBondSerializer_1.default.getPayloadBlob(request, tokenCount_1);\r\n                if (typeof Uint8Array === \'undefined\') {\r\n                    conn_1.send(AWTBondSerializer_1.default.base64Encode(blob));\r\n                }\r\n                else {\r\n                    conn_1.send(new Uint8Array(blob));\r\n                }\r\n            }\r\n            else if (isTeardown) {\r\n                this._handleRequestFinished(null);\r\n            }\r\n        }\r\n        catch (e) {\r\n            this._handleRequestFinished(null);\r\n        }\r\n    };\r\n    AWTTransmissionManager._handleRequestFinished = function (conn) {\r\n        var _this = this;\r\n        if (conn) {\r\n            this._killSwitch.setKillSwitchTenants(conn.getResponseHeader(\'kill-tokens\'), conn.getResponseHeader(\'kill-duration-seconds\'));\r\n        }\r\n        if (this._inboundQueues[0].length > 0) {\r\n            this._timeout = setTimeout(function () { return _this._batchAndSendEvents(false); }, this._sendingTimer);\r\n        }\r\n        else {\r\n            this._timeout = -1;\r\n            this._running = false;\r\n        }\r\n    };\r\n    AWTTransmissionManager._flush = function (callback) {\r\n        var _this = this;\r\n        if (!this._running) {\r\n            if (this._timeout > -1) {\r\n                clearTimeout(this._timeout);\r\n                this._timeout = -1;\r\n            }\r\n            if (this._inboundQueues[0].length > 0) {\r\n                this._batchAndSendEvents(false);\r\n            }\r\n        }\r\n        this._checkPrimaryInboundQueueEmpty(function () {\r\n            //Move the next queue to be primary\r\n            _this._inboundQueues.shift();\r\n            if (callback !== null && callback !== undefined) {\r\n                callback();\r\n            }\r\n            if (_this._flushQueue.length > 0) {\r\n                setTimeout(function () { return _this._flush(_this._flushQueue.shift()); }, _this._sendingTimer);\r\n            }\r\n            else {\r\n                _this._isCurrentlyFlushing = false;\r\n                if (_this._inboundQueues[0].length > 0) {\r\n                    _this._timeout = setTimeout(function () { return _this._batchAndSendEvents(false); }, _this._sendingTimer);\r\n                }\r\n            }\r\n        });\r\n    };\r\n    AWTTransmissionManager._checkPrimaryInboundQueueEmpty = function (callback) {\r\n        var _this = this;\r\n        if (this._inboundQueues[0].length === 0) {\r\n            this._checkOutboundQueueEmptyAndSent(callback);\r\n        }\r\n        else {\r\n            setTimeout(function () { return _this._checkPrimaryInboundQueueEmpty(callback); }, FlushCheckTimer);\r\n        }\r\n    };\r\n    AWTTransmissionManager._checkOutboundQueueEmptyAndSent = function (callback) {\r\n        var _this = this;\r\n        if (!this._running) {\r\n            callback();\r\n        }\r\n        else {\r\n            setTimeout(function () { return _this._checkOutboundQueueEmptyAndSent(callback); }, FlushCheckTimer);\r\n        }\r\n    };\r\n    AWTTransmissionManager._outboundQueue = [];\r\n    AWTTransmissionManager._inboundQueues = [];\r\n    AWTTransmissionManager._newEventsAllowed = false;\r\n    AWTTransmissionManager._killSwitch = new AWTKillSwitch_1.default();\r\n    AWTTransmissionManager._isCurrentlyFlushing = false;\r\n    AWTTransmissionManager._flushQueue = [];\r\n    AWTTransmissionManager._running = false;\r\n    AWTTransmissionManager._timeout = -1;\r\n    AWTTransmissionManager._urlString = \'?qsp=true&content-type=application%2Fbond-compact-binary&client-id=NO_AUTH&sdk-version=\'\r\n        + Version.FullVersionString;\r\n    return AWTTransmissionManager;\r\n}());\r\nexports.default = AWTTransmissionManager;\r\n\r\n\r\n/***/ }),\r\n/* 15 */\r\n/***/ (function(module, exports, __webpack_require__) {\r\n\r\nmodule.exports = __webpack_require__(5);\r\n\r\n\r\n/***/ })\r\n/******/ ]);\r\n});\r\n//# sourceMappingURL=aria-webjs-compact-sdk-1.2.2.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zY3JpcHRzL2FwcC90aGlyZHBhcnR5L2FyaWEtd2VianMtY29tcGFjdC1zZGstMS4yLjIuanM/YzRhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLElBQUksSUFBeUQ7QUFDN0Q7QUFDQSxNQUFNLGFBS0o7QUFDRixDQUFDO0FBQ0Qsb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsY0FBYztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQywwQkFBMEIsRUFBRTtBQUMvRCx5Q0FBeUMsZUFBZTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThELCtEQUErRDtBQUM3SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSw4Q0FBOEMsY0FBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0EsT0FB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QUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCx5Q0FBeUMsRUFBRTtBQUN4RztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLHVEQUF1RCxFQUFFO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0Msd0RBQXdELEVBQUU7QUFDOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiLi9zY3JpcHRzL2FwcC90aGlyZHBhcnR5L2FyaWEtd2VianMtY29tcGFjdC1zZGstMS4yLjIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xyXG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcclxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xyXG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxyXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcclxuXHRlbHNlIHtcclxuXHRcdHZhciBhID0gZmFjdG9yeSgpO1xyXG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xyXG5cdH1cclxufSkodGhpcywgZnVuY3Rpb24oKSB7XHJcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXHJcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxyXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XHJcbi8qKioqKiovXHJcbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cclxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XHJcbi8qKioqKiovXHJcbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcclxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XHJcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xyXG4vKioqKioqLyBcdFx0fVxyXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcclxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcclxuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXHJcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxyXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxyXG4vKioqKioqLyBcdFx0fTtcclxuLyoqKioqKi9cclxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxyXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XHJcbi8qKioqKiovXHJcbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXHJcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XHJcbi8qKioqKiovXHJcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxyXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xyXG4vKioqKioqLyBcdH1cclxuLyoqKioqKi9cclxuLyoqKioqKi9cclxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxyXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XHJcbi8qKioqKiovXHJcbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcclxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xyXG4vKioqKioqL1xyXG4vKioqKioqLyBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcclxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XHJcbi8qKioqKiovXHJcbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXHJcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XHJcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XHJcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XHJcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcclxuLyoqKioqKi8gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG4vKioqKioqLyBcdFx0XHRcdGdldDogZ2V0dGVyXHJcbi8qKioqKiovIFx0XHRcdH0pO1xyXG4vKioqKioqLyBcdFx0fVxyXG4vKioqKioqLyBcdH07XHJcbi8qKioqKiovXHJcbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcclxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcclxuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xyXG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxyXG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xyXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xyXG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcclxuLyoqKioqKi8gXHR9O1xyXG4vKioqKioqL1xyXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxyXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcclxuLyoqKioqKi9cclxuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xyXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XHJcbi8qKioqKiovXHJcbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXHJcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTUpO1xyXG4vKioqKioqLyB9KVxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4vKioqKioqLyAoW1xyXG4vKiAwICovXHJcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcclxuXHJcblwidXNlIHN0cmljdFwiO1xyXG5cclxuLyoqXHJcbiogbWljcm9zb2Z0LmJvbmQucHJpbWl0aXZlcy50c1xyXG4qIENvcHlyaWdodDogTWljcm9zb2Z0IDIwMTZcclxuKi9cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgSW50NjQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBCVUchITogbmVlZCBpbXBsZW1lbnQsIGN1cnJlbnRseSwganVzdCBoYW5kbGUgMzJiaXRzIG51bWJlclxyXG4gICAgZnVuY3Rpb24gSW50NjQobnVtYmVyU3RyKSB7XHJcbiAgICAgICAgdGhpcy5sb3cgPSAwO1xyXG4gICAgICAgIHRoaXMuaGlnaCA9IDA7XHJcbiAgICAgICAgdGhpcy5sb3cgPSBwYXJzZUludChudW1iZXJTdHIsIDEwKTtcclxuICAgICAgICBpZiAodGhpcy5sb3cgPCAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlnaCA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEludDY0LnByb3RvdHlwZS5FcXVhbHMgPSBmdW5jdGlvbiAobnVtYmVyU3RyKSB7XHJcbiAgICAgICAgdmFyIHRtcCA9IG5ldyBJbnQ2NChudW1iZXJTdHIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvdyA9PT0gdG1wLmxvdyAmJiB0aGlzLmhpZ2ggPT09IHRtcC5oaWdoO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBJbnQ2NDtcclxufSgpKTtcclxuZXhwb3J0cy5JbnQ2NCA9IEludDY0O1xyXG52YXIgVUludDY0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gQlVHISE6IG5lZWQgaW1wbGVtZW50LCBjdXJyZW50bHksIGp1c3QgaGFuZGxlIDMyYml0cyBudW1iZXJcclxuICAgIGZ1bmN0aW9uIFVJbnQ2NChudW1iZXJTdHIpIHtcclxuICAgICAgICB0aGlzLmxvdyA9IDA7XHJcbiAgICAgICAgdGhpcy5oaWdoID0gMDtcclxuICAgICAgICB0aGlzLmxvdyA9IHBhcnNlSW50KG51bWJlclN0ciwgMTApO1xyXG4gICAgfVxyXG4gICAgVUludDY0LnByb3RvdHlwZS5FcXVhbHMgPSBmdW5jdGlvbiAobnVtYmVyU3RyKSB7XHJcbiAgICAgICAgdmFyIHRtcCA9IG5ldyBVSW50NjQobnVtYmVyU3RyKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb3cgPT09IHRtcC5sb3cgJiYgdGhpcy5oaWdoID09PSB0bXAuaGlnaDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gVUludDY0O1xyXG59KCkpO1xyXG5leHBvcnRzLlVJbnQ2NCA9IFVJbnQ2NDtcclxudmFyIE51bWJlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIE51bWJlcigpIHtcclxuICAgIH1cclxuICAgIE51bWJlci5Ub0J5dGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5Ub1VJbnQ4KHZhbHVlKTtcclxuICAgIH07XHJcbiAgICBOdW1iZXIuVG9JbnQxNiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciBzaWduTWFzayA9ICh2YWx1ZSAmIDB4ODAwMCkgPDwgMTYgPj4gMTY7XHJcbiAgICAgICAgcmV0dXJuICh2YWx1ZSAmIDB4N2ZmZikgfCBzaWduTWFzaztcclxuICAgIH07XHJcbiAgICBOdW1iZXIuVG9JbnQzMiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciBzaWduTWFzayA9ICh2YWx1ZSAmIDB4ODAwMDAwMDApO1xyXG4gICAgICAgIHJldHVybiAodmFsdWUgJiAweDdmZmZmZmZmKSB8IHNpZ25NYXNrO1xyXG4gICAgfTtcclxuICAgIE51bWJlci5Ub1VJbnQ4ID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICYgMHhmZjtcclxuICAgIH07XHJcbiAgICBOdW1iZXIuVG9VSW50MzIgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgJiAweGZmZmZmZmZmO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBOdW1iZXI7XHJcbn0oKSk7XHJcbmV4cG9ydHMuTnVtYmVyID0gTnVtYmVyO1xyXG5cclxuXHJcbi8qKiovIH0pLFxyXG4vKiAxICovXHJcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcclxuXHJcblwidXNlIHN0cmljdFwiO1xyXG5cclxuLyoqXHJcbiogRW51bXMudHNcclxuKiBBdXRob3I6IEFiaGlsYXNoIFBhbndhciAoYWJwYW53YXIpXHJcbiogQ29weXJpZ2h0OiBNaWNyb3NvZnQgMjAxNlxyXG4qIENvbW1vbiBlbnVtIHZhbHVlcyB1c2VkIGluIHRoZSBTREsuXHJcbiovXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIEFXVFBpaUtpbmQ7XHJcbihmdW5jdGlvbiAoQVdUUGlpS2luZCkge1xyXG4gICAgQVdUUGlpS2luZFtBV1RQaWlLaW5kW1wiTm90U2V0XCJdID0gMF0gPSBcIk5vdFNldFwiO1xyXG4gICAgQVdUUGlpS2luZFtBV1RQaWlLaW5kW1wiRGlzdGluZ3Vpc2hlZE5hbWVcIl0gPSAxXSA9IFwiRGlzdGluZ3Vpc2hlZE5hbWVcIjtcclxuICAgIEFXVFBpaUtpbmRbQVdUUGlpS2luZFtcIkdlbmVyaWNEYXRhXCJdID0gMl0gPSBcIkdlbmVyaWNEYXRhXCI7XHJcbiAgICBBV1RQaWlLaW5kW0FXVFBpaUtpbmRbXCJJUFY0QWRkcmVzc1wiXSA9IDNdID0gXCJJUFY0QWRkcmVzc1wiO1xyXG4gICAgQVdUUGlpS2luZFtBV1RQaWlLaW5kW1wiSVB2NkFkZHJlc3NcIl0gPSA0XSA9IFwiSVB2NkFkZHJlc3NcIjtcclxuICAgIEFXVFBpaUtpbmRbQVdUUGlpS2luZFtcIk1haWxTdWJqZWN0XCJdID0gNV0gPSBcIk1haWxTdWJqZWN0XCI7XHJcbiAgICBBV1RQaWlLaW5kW0FXVFBpaUtpbmRbXCJQaG9uZU51bWJlclwiXSA9IDZdID0gXCJQaG9uZU51bWJlclwiO1xyXG4gICAgQVdUUGlpS2luZFtBV1RQaWlLaW5kW1wiUXVlcnlTdHJpbmdcIl0gPSA3XSA9IFwiUXVlcnlTdHJpbmdcIjtcclxuICAgIEFXVFBpaUtpbmRbQVdUUGlpS2luZFtcIlNpcEFkZHJlc3NcIl0gPSA4XSA9IFwiU2lwQWRkcmVzc1wiO1xyXG4gICAgQVdUUGlpS2luZFtBV1RQaWlLaW5kW1wiU210cEFkZHJlc3NcIl0gPSA5XSA9IFwiU210cEFkZHJlc3NcIjtcclxuICAgIEFXVFBpaUtpbmRbQVdUUGlpS2luZFtcIklkZW50aXR5XCJdID0gMTBdID0gXCJJZGVudGl0eVwiO1xyXG4gICAgQVdUUGlpS2luZFtBV1RQaWlLaW5kW1wiVXJpXCJdID0gMTFdID0gXCJVcmlcIjtcclxuICAgIEFXVFBpaUtpbmRbQVdUUGlpS2luZFtcIkZxZG5cIl0gPSAxMl0gPSBcIkZxZG5cIjtcclxuICAgIC8vIFN1cHBvcnRzIHNjcnViYmluZyBvZiB0aGUgbGFzdCBvY3RldCBpbiBhIElQVjQgYWRkcmVzcy4gRS5nLiAxMC4xMjEuMjI3LjE0NyBiZWNvbWVzIDEwLjEyMS4yMjcuKlxyXG4gICAgQVdUUGlpS2luZFtBV1RQaWlLaW5kW1wiSVBWNEFkZHJlc3NMZWdhY3lcIl0gPSAxM10gPSBcIklQVjRBZGRyZXNzTGVnYWN5XCI7XHJcbn0pKEFXVFBpaUtpbmQgPSBleHBvcnRzLkFXVFBpaUtpbmQgfHwgKGV4cG9ydHMuQVdUUGlpS2luZCA9IHt9KSk7XHJcblxyXG5cclxuLyoqKi8gfSksXHJcbi8qIDIgKi9cclxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xyXG5cclxuXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG4vKipcclxuKiBBV1RCb25kU2VyaWFsaXplci50c1xyXG4qIEF1dGhvcjogQnJlbnQgRXJpY2tzb24gKGJyZXJpY2tzKSBhbmQgQWJoaWxhc2ggUGFud2FyIChhYnBhbndhcilcclxuKiBDb3B5cmlnaHQ6IE1pY3Jvc29mdCAyMDE2XHJcbiogQ2xhc3MgdG8gaGFuZGxlciBib25kIHNlcmlhbGl6YXRpb24uXHJcbiovXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIEJvbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xyXG52YXIgRW51bXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XHJcbnZhciBVdGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XHJcbnZhciBBV1RCb25kU2VyaWFsaXplciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEFXVEJvbmRTZXJpYWxpemVyKCkge1xyXG4gICAgfVxyXG4gICAgQVdUQm9uZFNlcmlhbGl6ZXIuZ2V0UGF5bG9hZEJsb2IgPSBmdW5jdGlvbiAocmVxdWVzdERpY3Rpb25hcnksIHRva2VuQ291bnQpIHtcclxuICAgICAgICB2YXIgc3RyZWFtID0gbmV3IEJvbmQuSU8uTWVtb3J5U3RyZWFtKCk7XHJcbiAgICAgICAgdmFyIHdyaXRlciA9IG5ldyBCb25kLkNvbXBhY3RCaW5hcnlQcm90b2NvbFdyaXRlcihzdHJlYW0pO1xyXG4gICAgICAgIC8vIEJlZ2luIENsaWVudENvbGxlY3RvciByZXF1ZXN0XHJcbiAgICAgICAgLy9Xcml0ZSBUb2tlblRvRGF0YVBhY2thZ2VzTWFwXHJcbiAgICAgICAgd3JpdGVyLldyaXRlRmllbGRCZWdpbihCb25kLkJvbmREYXRhVHlwZS5CVF9NQVAsIDMpO1xyXG4gICAgICAgIHdyaXRlci5Xcml0ZU1hcENvbnRhaW5lckJlZ2luKHRva2VuQ291bnQsIEJvbmQuQm9uZERhdGFUeXBlLkJUX1NUUklORywgQm9uZC5Cb25kRGF0YVR5cGUuQlRfTElTVCk7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocmVxdWVzdERpY3Rpb25hcnkpLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICAgICAgICAgIC8vd3JpdGUgdG9rZW5cclxuICAgICAgICAgICAgd3JpdGVyLldyaXRlU3RyaW5nKHRva2VuKTtcclxuICAgICAgICAgICAgdmFyIGRhdGFQYWNrYWdlID0gcmVxdWVzdERpY3Rpb25hcnlbdG9rZW5dO1xyXG4gICAgICAgICAgICAvLyBXcml0ZSBsaXN0IG9mIERhdGFQYWNrYWdlc1xyXG4gICAgICAgICAgICB3cml0ZXIuV3JpdGVDb250YWluZXJCZWdpbigxLCBCb25kLkJvbmREYXRhVHlwZS5CVF9TVFJVQ1QpO1xyXG4gICAgICAgICAgICAvLyBTb3VyY2VcclxuICAgICAgICAgICAgd3JpdGVyLldyaXRlRmllbGRCZWdpbihCb25kLkJvbmREYXRhVHlwZS5CVF9TVFJJTkcsIDIpO1xyXG4gICAgICAgICAgICB3cml0ZXIuV3JpdGVTdHJpbmcoJ2FjdF9kZWZhdWx0X3NvdXJjZScpO1xyXG4gICAgICAgICAgICAvLyBEYXRhUGFja2FnZUlkXHJcbiAgICAgICAgICAgIHdyaXRlci5Xcml0ZUZpZWxkQmVnaW4oQm9uZC5Cb25kRGF0YVR5cGUuQlRfU1RSSU5HLCA1KTtcclxuICAgICAgICAgICAgd3JpdGVyLldyaXRlU3RyaW5nKFV0aWxzLm5ld0d1aWQoKSk7XHJcbiAgICAgICAgICAgIC8vIFRpbWVzdGFtcFxyXG4gICAgICAgICAgICB3cml0ZXIuV3JpdGVGaWVsZEJlZ2luKEJvbmQuQm9uZERhdGFUeXBlLkJUX0lOVDY0LCA2KTtcclxuICAgICAgICAgICAgd3JpdGVyLldyaXRlSW50NjQoVXRpbHMubnVtYmVyVG9Cb25kSW50NjQoRGF0ZS5ub3coKSkpO1xyXG4gICAgICAgICAgICAvLyBSZWNvcmRzXHJcbiAgICAgICAgICAgIHdyaXRlci5Xcml0ZUZpZWxkQmVnaW4oQm9uZC5Cb25kRGF0YVR5cGUuQlRfTElTVCwgOCk7XHJcbiAgICAgICAgICAgIHdyaXRlci5Xcml0ZUNvbnRhaW5lckJlZ2luKGRhdGFQYWNrYWdlLmxlbmd0aCwgQm9uZC5Cb25kRGF0YVR5cGUuQlRfU1RSVUNUKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhUGFja2FnZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlQmxvYihkYXRhUGFja2FnZVtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd3JpdGVyLldyaXRlU3RydWN0RW5kKGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBFbmQgQ2xpZW50Q29sbGVjdG9yXHJcbiAgICAgICAgd3JpdGVyLldyaXRlU3RydWN0RW5kKGZhbHNlKTtcclxuICAgICAgICByZXR1cm4gc3RyZWFtLkdldEJ1ZmZlcigpO1xyXG4gICAgfTtcclxuICAgIC8vIEFzIHBlciBtYXBwaW5ncyBhdCBodHRwczovL3NreXBlLnZpc3VhbHN0dWRpby5jb20vU0NDL0YuUzRMLkZVTkRBTUVOVEFMUy9fZ2l0L2luZnJhc3RydWN0dXJlX2RhdGFfY2xpZW50dGVsZW1ldHJ5P1xyXG4gICAgLy8gcGF0aD0lMkZjbGllbnR0ZWxlbWV0cnklMkZzcmMlMkZib25kJTJGRGF0YVBhY2thZ2UuYm9uZCZ2ZXJzaW9uPUdCZGV2MiZfYT1jb250ZW50c1xyXG4gICAgLy8gUmVxdWlyZXMgdGhhdCB0aGUgdmFsdWVzIG9mIEFXVEV2ZW50RGF0YS5wcm9wZXJ0aWVzIG11c3QgYWxsIGJlIEFXVEV2ZW50UHJvcGVydHlcclxuICAgIEFXVEJvbmRTZXJpYWxpemVyLmdldEV2ZW50QmxvYiA9IGZ1bmN0aW9uIChldmVudERhdGEpIHtcclxuICAgICAgICB2YXIgc3RyZWFtID0gbmV3IEJvbmQuSU8uTWVtb3J5U3RyZWFtKCk7XHJcbiAgICAgICAgdmFyIHdyaXRlciA9IG5ldyBCb25kLkNvbXBhY3RCaW5hcnlQcm90b2NvbFdyaXRlcihzdHJlYW0pO1xyXG4gICAgICAgIC8vIElEXHJcbiAgICAgICAgd3JpdGVyLldyaXRlRmllbGRCZWdpbihCb25kLkJvbmREYXRhVHlwZS5CVF9TVFJJTkcsIDEpO1xyXG4gICAgICAgIHdyaXRlci5Xcml0ZVN0cmluZyhldmVudERhdGEuaWQpO1xyXG4gICAgICAgIC8vIFRpbWVzdGFtcFxyXG4gICAgICAgIHdyaXRlci5Xcml0ZUZpZWxkQmVnaW4oQm9uZC5Cb25kRGF0YVR5cGUuQlRfSU5UNjQsIDMpO1xyXG4gICAgICAgIHdyaXRlci5Xcml0ZUludDY0KFV0aWxzLm51bWJlclRvQm9uZEludDY0KGV2ZW50RGF0YS50aW1lc3RhbXApKTtcclxuICAgICAgICAvLyBUeXBlXHJcbiAgICAgICAgd3JpdGVyLldyaXRlRmllbGRCZWdpbihCb25kLkJvbmREYXRhVHlwZS5CVF9TVFJJTkcsIDUpO1xyXG4gICAgICAgIHdyaXRlci5Xcml0ZVN0cmluZyhldmVudERhdGEudHlwZSk7XHJcbiAgICAgICAgLy8gRXZlbnQgVHlwZVxyXG4gICAgICAgIHdyaXRlci5Xcml0ZUZpZWxkQmVnaW4oQm9uZC5Cb25kRGF0YVR5cGUuQlRfU1RSSU5HLCA2KTtcclxuICAgICAgICB3cml0ZXIuV3JpdGVTdHJpbmcoZXZlbnREYXRhLm5hbWUpO1xyXG4gICAgICAgIHZhciBwcm9wc1N0cmluZyA9IFtdO1xyXG4gICAgICAgIHZhciBwaWlQcm9wcyA9IFtdO1xyXG4gICAgICAgIC8vIEl0ZXJhdGUgYWNyb3NzIGV2ZW50IGRhdGEgcHJvcGVydGllcyBhbmQgc2VwYXJhdGUgYmFzZWQgb24gcGlpXHJcbiAgICAgICAgT2JqZWN0LmtleXMoZXZlbnREYXRhLnByb3BlcnRpZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBldmVudERhdGEucHJvcGVydGllc1trZXldO1xyXG4gICAgICAgICAgICBpZiAocHJvcGVydHkucGlpID09PSBFbnVtc18xLkFXVFBpaUtpbmQuTm90U2V0KSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wc1N0cmluZy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwaWlQcm9wcy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAvL0V4dGVuc2lvbiBtYXBcclxuICAgICAgICBpZiAocHJvcHNTdHJpbmcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHdyaXRlci5Xcml0ZUZpZWxkQmVnaW4oQm9uZC5Cb25kRGF0YVR5cGUuQlRfTUFQLCAxMyk7XHJcbiAgICAgICAgICAgIHdyaXRlci5Xcml0ZU1hcENvbnRhaW5lckJlZ2luKHByb3BzU3RyaW5nLmxlbmd0aCwgQm9uZC5Cb25kRGF0YVR5cGUuQlRfU1RSSU5HLCBCb25kLkJvbmREYXRhVHlwZS5CVF9TVFJJTkcpO1xyXG4gICAgICAgICAgICBwcm9wc1N0cmluZy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB3cml0ZXIuV3JpdGVTdHJpbmcobmFtZSk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZXIuV3JpdGVTdHJpbmcoZXZlbnREYXRhLnByb3BlcnRpZXNbbmFtZV0udmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUGlpXHJcbiAgICAgICAgaWYgKHBpaVByb3BzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB3cml0ZXIuV3JpdGVGaWVsZEJlZ2luKEJvbmQuQm9uZERhdGFUeXBlLkJUX01BUCwgMzApO1xyXG4gICAgICAgICAgICB3cml0ZXIuV3JpdGVNYXBDb250YWluZXJCZWdpbihwaWlQcm9wcy5sZW5ndGgsIEJvbmQuQm9uZERhdGFUeXBlLkJUX1NUUklORywgQm9uZC5Cb25kRGF0YVR5cGUuQlRfU1RSVUNUKTtcclxuICAgICAgICAgICAgcGlpUHJvcHMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlU3RyaW5nKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgLy8gUElJIERhdGFcclxuICAgICAgICAgICAgICAgIC8vIE8zNjUgc2NydWJiZXIgdHlwZVxyXG4gICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlRmllbGRCZWdpbihCb25kLkJvbmREYXRhVHlwZS5CVF9JTlQzMiwgMSk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZXIuV3JpdGVJbnQzMigxKTtcclxuICAgICAgICAgICAgICAgIC8vIFBJSSBLaW5kXHJcbiAgICAgICAgICAgICAgICB3cml0ZXIuV3JpdGVGaWVsZEJlZ2luKEJvbmQuQm9uZERhdGFUeXBlLkJUX0lOVDMyLCAyKTtcclxuICAgICAgICAgICAgICAgIHdyaXRlci5Xcml0ZUludDMyKGV2ZW50RGF0YS5wcm9wZXJ0aWVzW25hbWVdLnBpaSk7XHJcbiAgICAgICAgICAgICAgICAvLyBWYWx1ZVxyXG4gICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlRmllbGRCZWdpbihCb25kLkJvbmREYXRhVHlwZS5CVF9TVFJJTkcsIDMpO1xyXG4gICAgICAgICAgICAgICAgd3JpdGVyLldyaXRlU3RyaW5nKGV2ZW50RGF0YS5wcm9wZXJ0aWVzW25hbWVdLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHdyaXRlci5Xcml0ZVN0cnVjdEVuZChmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3cml0ZXIuV3JpdGVTdHJ1Y3RFbmQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybiBzdHJlYW0uR2V0QnVmZmVyKCk7XHJcbiAgICB9O1xyXG4gICAgQVdUQm9uZFNlcmlhbGl6ZXIuYmFzZTY0RW5jb2RlID0gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICByZXR1cm4gQm9uZC5FbmNvZGluZy5CYXNlNjQuR2V0U3RyaW5nKGRhdGEpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBBV1RCb25kU2VyaWFsaXplcjtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gQVdUQm9uZFNlcmlhbGl6ZXI7XHJcblxyXG5cclxuLyoqKi8gfSksXHJcbi8qIDMgKi9cclxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xyXG5cclxuXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbi8qKlxyXG4qIFV0aWxzLnRzXHJcbiogQXV0aG9yOiBCcmVudCBFcmlja3NvbiAoYnJlcmlja3MpIGFuZCBBYmhpbGFzaCBQYW53YXIgKGFicGFud2FyKVxyXG4qIENvcHlyaWdodDogTWljcm9zb2Z0IDIwMTZcclxuKiBDb21tb24gZnVuY3Rpb25zIHVzZWQgaW4gdGhlIFNESy5cclxuKi9cclxudmFyIG1pY3Jvc29mdF9ib25kX3ByaW1pdGl2ZXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XHJcbnZhciBHdWlkUmVnZXggPSAvW3h5XS9nO1xyXG5mdW5jdGlvbiBudW1iZXJUb0JvbmRJbnQ2NCh2YWx1ZSkge1xyXG4gICAgLy8gQ29uc3RydWN0IGJvbmQgdGltZXN0YW1wIGZvciBhcmlhXHJcbiAgICB2YXIgYm9uZF92YWx1ZSA9IG5ldyBtaWNyb3NvZnRfYm9uZF9wcmltaXRpdmVzXzEuSW50NjQoJzAnKTtcclxuICAgIGJvbmRfdmFsdWUubG93ID0gdmFsdWUgJiAweGZmZmZmZmZmO1xyXG4gICAgYm9uZF92YWx1ZS5oaWdoID0gTWF0aC5mbG9vcih2YWx1ZSAvIDB4MTAwMDAwMDAwKTtcclxuICAgIHJldHVybiBib25kX3ZhbHVlO1xyXG59XHJcbmV4cG9ydHMubnVtYmVyVG9Cb25kSW50NjQgPSBudW1iZXJUb0JvbmRJbnQ2NDtcclxuZnVuY3Rpb24gbmV3R3VpZCgpIHtcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKEd1aWRSZWdleCwgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTYgfCAwKSwgdiA9IChjID09PSAneCcgPyByIDogciAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbn1cclxuZXhwb3J0cy5uZXdHdWlkID0gbmV3R3VpZDtcclxuZnVuY3Rpb24gaXNQaWkodmFsdWUpIHtcclxuICAgIGlmICghaXNOYU4odmFsdWUpICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlID49IDAgJiYgdmFsdWUgPD0gMTMpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5leHBvcnRzLmlzUGlpID0gaXNQaWk7XHJcblxyXG5cclxuLyoqKi8gfSksXHJcbi8qIDQgKi9cclxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xyXG5cclxuXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbi8qKlxyXG4qIFZlcnNpb24udHNcclxuKiBBdXRob3I6IEFiaGlsYXNoIFBhbndhciAoYWJwYW53YXIpXHJcbiogQ29weXJpZ2h0OiBNaWNyb3NvZnQgMjAxNlxyXG4qIENsYXNzIGZvciBTREsgdmVyc2lvbi5cclxuKi9cclxuZXhwb3J0cy5WZXJzaW9uID0gJzEuMi4yJztcclxuZXhwb3J0cy5GdWxsVmVyc2lvblN0cmluZyA9ICdBV1QtV2ViLUNKUy0nICsgZXhwb3J0cy5WZXJzaW9uO1xyXG5cclxuXHJcbi8qKiovIH0pLFxyXG4vKiA1ICovXHJcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcclxuXHJcblwidXNlIHN0cmljdFwiO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG4vKipcclxuKiBBcmlhU0RLLnRzXHJcbiogQXV0aG9yOiBBYmhpbGFzaCBQYW53YXIgKGFicGFud2FyKVxyXG4qIENvcHlyaWdodDogTWljcm9zb2Z0IDIwMTZcclxuKi9cclxudmFyIEVudW1zXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xyXG5leHBvcnRzLkFXVFBpaUtpbmQgPSBFbnVtc18xLkFXVFBpaUtpbmQ7XHJcbnZhciBBV1RfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xyXG5leHBvcnRzLkFXVCA9IEFXVF8xLmRlZmF1bHQ7XHJcbmV4cG9ydHMuQVdUX0NPTExFQ1RPUl9VUkxfVU5JVEVEX1NUQVRFUyA9ICdodHRwczovL3VzLnBpcGUuYXJpYS5taWNyb3NvZnQuY29tL0NvbGxlY3Rvci8zLjAvJztcclxuZXhwb3J0cy5BV1RfQ09MTEVDVE9SX1VSTF9HRVJNQU5ZID0gJ2h0dHBzOi8vZGUucGlwZS5hcmlhLm1pY3Jvc29mdC5jb20vQ29sbGVjdG9yLzMuMC8nO1xyXG5leHBvcnRzLkFXVF9DT0xMRUNUT1JfVVJMX0pBUEFOID0gJ2h0dHBzOi8vanAucGlwZS5hcmlhLm1pY3Jvc29mdC5jb20vQ29sbGVjdG9yLzMuMC8nO1xyXG5leHBvcnRzLkFXVF9DT0xMRUNUT1JfVVJMX0FVU1RSQUxJQSA9ICdodHRwczovL2F1LnBpcGUuYXJpYS5taWNyb3NvZnQuY29tL0NvbGxlY3Rvci8zLjAvJztcclxuZXhwb3J0cy5BV1RfQ09MTEVDVE9SX1VSTF9FVVJPUEUgPSAnaHR0cHM6Ly9ldS5waXBlLmFyaWEubWljcm9zb2Z0LmNvbS9Db2xsZWN0b3IvMy4wLyc7XHJcblxyXG5cclxuLyoqKi8gfSksXHJcbi8qIDYgKi9cclxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xyXG5cclxuXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG4vKipcclxuKiBib25kX2NvbnN0LnRzXHJcbiogQ29weXJpZ2h0OiBNaWNyb3NvZnQgMjAxNlxyXG4qL1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIDxhdXRvLWdlbmVyYXRlZD5cclxuLy8gICAgIFRoaXMgY29kZSB3YXMgZ2VuZXJhdGVkIGJ5IGEgdG9vbC5cclxuLy9cclxuLy8gICAgIFRvb2wgICAgIDogYm9uZGMsIFZlcnNpb249My4wLjEsIEJ1aWxkPWJvbmQtZ2l0LmRlYnVnLm5vdFxyXG4vLyAgICAgVGVtcGxhdGUgOiBNaWNyb3NvZnQuQm9uZC5SdWxlcy5kbGwjVHlwZVNjcmlwdC50dFxyXG4vLyAgICAgRmlsZSAgICAgOiBib25kX2NvbnN0LnRzXHJcbi8vXHJcbi8vICAgICBDaGFuZ2VzIHRvIHRoaXMgZmlsZSBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yIGFuZCB3aWxsIGJlIGxvc3Qgd2hlblxyXG4vLyAgICAgdGhlIGNvZGUgaXMgcmVnZW5lcmF0ZWQuXHJcbi8vIDwvYXV0by1nZW5lcmF0ZWQ+XHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbnZhciBCb25kRGF0YVR5cGU7XHJcbihmdW5jdGlvbiAoQm9uZERhdGFUeXBlKSB7XHJcbiAgICBCb25kRGF0YVR5cGVbQm9uZERhdGFUeXBlW1wiQlRfU1RPUFwiXSA9IDBdID0gXCJCVF9TVE9QXCI7XHJcbiAgICBCb25kRGF0YVR5cGVbQm9uZERhdGFUeXBlW1wiQlRfU1RPUF9CQVNFXCJdID0gMV0gPSBcIkJUX1NUT1BfQkFTRVwiO1xyXG4gICAgQm9uZERhdGFUeXBlW0JvbmREYXRhVHlwZVtcIkJUX1VJTlQ4XCJdID0gM10gPSBcIkJUX1VJTlQ4XCI7XHJcbiAgICBCb25kRGF0YVR5cGVbQm9uZERhdGFUeXBlW1wiQlRfVUlOVDMyXCJdID0gNV0gPSBcIkJUX1VJTlQzMlwiO1xyXG4gICAgQm9uZERhdGFUeXBlW0JvbmREYXRhVHlwZVtcIkJUX1VJTlQ2NFwiXSA9IDZdID0gXCJCVF9VSU5UNjRcIjtcclxuICAgIEJvbmREYXRhVHlwZVtCb25kRGF0YVR5cGVbXCJCVF9TVFJJTkdcIl0gPSA5XSA9IFwiQlRfU1RSSU5HXCI7XHJcbiAgICBCb25kRGF0YVR5cGVbQm9uZERhdGFUeXBlW1wiQlRfU1RSVUNUXCJdID0gMTBdID0gXCJCVF9TVFJVQ1RcIjtcclxuICAgIEJvbmREYXRhVHlwZVtCb25kRGF0YVR5cGVbXCJCVF9MSVNUXCJdID0gMTFdID0gXCJCVF9MSVNUXCI7XHJcbiAgICBCb25kRGF0YVR5cGVbQm9uZERhdGFUeXBlW1wiQlRfTUFQXCJdID0gMTNdID0gXCJCVF9NQVBcIjtcclxuICAgIEJvbmREYXRhVHlwZVtCb25kRGF0YVR5cGVbXCJCVF9JTlQzMlwiXSA9IDE2XSA9IFwiQlRfSU5UMzJcIjtcclxuICAgIEJvbmREYXRhVHlwZVtCb25kRGF0YVR5cGVbXCJCVF9JTlQ2NFwiXSA9IDE3XSA9IFwiQlRfSU5UNjRcIjtcclxuICAgIEJvbmREYXRhVHlwZVtCb25kRGF0YVR5cGVbXCJCVF9VTkFWQUlMQUJMRVwiXSA9IDEyN10gPSBcIkJUX1VOQVZBSUxBQkxFXCI7XHJcbn0pKEJvbmREYXRhVHlwZSA9IGV4cG9ydHMuQm9uZERhdGFUeXBlIHx8IChleHBvcnRzLkJvbmREYXRhVHlwZSA9IHt9KSk7XHJcblxyXG5cclxuLyoqKi8gfSksXHJcbi8qIDcgKi9cclxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xyXG5cclxuXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG4vKipcclxuKiBtaWNyb3NvZnQuYm9uZC5lbmNvZGluZy50c1xyXG4qIENvcHlyaWdodDogTWljcm9zb2Z0IDIwMTZcclxuKi9cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgbWljcm9zb2Z0X2JvbmRfcHJpbWl0aXZlc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcclxudmFyIFV0ZjggPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBVdGY4KCkge1xyXG4gICAgfVxyXG4gICAgVXRmOC5HZXRCeXRlcyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgdmFyIGNoYXIgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgICAgICBpZiAoY2hhciA8IDB4ODApIHtcclxuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goY2hhcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2hhciA8IDB4ODAwKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKDB4YzAgfCAoY2hhciA+PiA2KSwgMHg4MCB8IChjaGFyICYgMHgzZikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoYXIgPCAweGQ4MDAgfHwgY2hhciA+PSAweGUwMDApIHtcclxuICAgICAgICAgICAgICAgIGFycmF5LnB1c2goMHhlMCB8IChjaGFyID4+IDEyKSwgMHg4MCB8ICgoY2hhciA+PiA2KSAmIDB4M2YpLCAweDgwIHwgKGNoYXIgJiAweDNmKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjaGFyID0gMHgxMDAwMCArICgoKGNoYXIgJiAweDNmZikgPDwgMTApIHwgKHZhbHVlLmNoYXJDb2RlQXQoKytpKSAmIDB4M2ZmKSk7XHJcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKDB4ZjAgfCAoY2hhciA+PiAxOCksIDB4ODAgfCAoKGNoYXIgPj4gMTIpICYgMHgzZiksIDB4ODAgfCAoKGNoYXIgPj4gNikgJiAweDNmKSwgMHg4MCB8IChjaGFyICYgMHgzZikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnJheTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gVXRmODtcclxufSgpKTtcclxuZXhwb3J0cy5VdGY4ID0gVXRmODtcclxudmFyIEJhc2U2NCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEJhc2U2NCgpIHtcclxuICAgIH1cclxuICAgIEJhc2U2NC5HZXRTdHJpbmcgPSBmdW5jdGlvbiAoaW5BcnJheSkge1xyXG4gICAgICAgIHZhciBsb29rdXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XHJcbiAgICAgICAgdmFyIG91dHB1dCA9IFtdO1xyXG4gICAgICAgIHZhciBwYWRkaW5nQnl0ZXMgPSBpbkFycmF5Lmxlbmd0aCAlIDM7XHJcbiAgICAgICAgdmFyIHRvQmFzZTY0ID0gZnVuY3Rpb24gKG51bSkge1xyXG4gICAgICAgICAgICByZXR1cm4gW2xvb2t1cC5jaGFyQXQoKG51bSA+PiAxOCkgJiAweDNGKSxcclxuICAgICAgICAgICAgICAgIGxvb2t1cC5jaGFyQXQoKG51bSA+PiAxMikgJiAweDNGKSxcclxuICAgICAgICAgICAgICAgIGxvb2t1cC5jaGFyQXQoKG51bSA+PiA2KSAmIDB4M0YpLFxyXG4gICAgICAgICAgICAgICAgbG9va3VwLmNoYXJBdChudW0gJiAweDNGKV0uam9pbignJyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoXzEgPSBpbkFycmF5Lmxlbmd0aCAtIHBhZGRpbmdCeXRlczsgaSA8IGxlbmd0aF8xOyBpICs9IDMpIHtcclxuICAgICAgICAgICAgdmFyIHRlbXAgPSAoaW5BcnJheVtpXSA8PCAxNikgKyAoaW5BcnJheVtpICsgMV0gPDwgOCkgKyAoaW5BcnJheVtpICsgMl0pO1xyXG4gICAgICAgICAgICBvdXRwdXQucHVzaCh0b0Jhc2U2NCh0ZW1wKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN3aXRjaCAocGFkZGluZ0J5dGVzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gaW5BcnJheVtpbkFycmF5Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2gobG9va3VwLmNoYXJBdCh0ZW1wID4+IDIpKTtcclxuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGxvb2t1cC5jaGFyQXQoKHRlbXAgPDwgNCkgJiAweDNGKSk7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCgnPT0nKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICB2YXIgdGVtcDIgPSAoaW5BcnJheVtpbkFycmF5Lmxlbmd0aCAtIDJdIDw8IDgpICsgKGluQXJyYXlbaW5BcnJheS5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChsb29rdXAuY2hhckF0KHRlbXAyID4+IDEwKSk7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChsb29rdXAuY2hhckF0KCh0ZW1wMiA+PiA0KSAmIDB4M0YpKTtcclxuICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGxvb2t1cC5jaGFyQXQoKHRlbXAyIDw8IDIpICYgMHgzRikpO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goJz0nKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBCYXNlNjQ7XHJcbn0oKSk7XHJcbmV4cG9ydHMuQmFzZTY0ID0gQmFzZTY0O1xyXG52YXIgVmFyaW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVmFyaW50KCkge1xyXG4gICAgfVxyXG4gICAgVmFyaW50LkdldEJ5dGVzID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIGFycmF5ID0gW107XHJcbiAgICAgICAgd2hpbGUgKHZhbHVlICYgMHhmZmZmZmY4MCkge1xyXG4gICAgICAgICAgICBhcnJheS5wdXNoKCh2YWx1ZSAmIDB4N2YpIHwgMHg4MCk7XHJcbiAgICAgICAgICAgIHZhbHVlID4+Pj0gNztcclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSAmIDB4N2YpO1xyXG4gICAgICAgIHJldHVybiBhcnJheTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gVmFyaW50O1xyXG59KCkpO1xyXG5leHBvcnRzLlZhcmludCA9IFZhcmludDtcclxudmFyIFZhcmludDY0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVmFyaW50NjQoKSB7XHJcbiAgICB9XHJcbiAgICBWYXJpbnQ2NC5HZXRCeXRlcyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciBsb3cgPSB2YWx1ZS5sb3c7XHJcbiAgICAgICAgdmFyIGhpZ2ggPSB2YWx1ZS5oaWdoO1xyXG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChoaWdoIHx8ICgweGZmZmZmZjgwICYgbG93KSkge1xyXG4gICAgICAgICAgICBhcnJheS5wdXNoKChsb3cgJiAweDdmKSB8IDB4ODApO1xyXG4gICAgICAgICAgICBsb3cgPSAoKGhpZ2ggJiAweDdmKSA8PCAyNSkgfCAobG93ID4+PiA3KTtcclxuICAgICAgICAgICAgaGlnaCA+Pj49IDc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFycmF5LnB1c2gobG93ICYgMHg3Zik7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBWYXJpbnQ2NDtcclxufSgpKTtcclxuZXhwb3J0cy5WYXJpbnQ2NCA9IFZhcmludDY0O1xyXG52YXIgWmlnemFnID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gWmlnemFnKCkge1xyXG4gICAgfVxyXG4gICAgWmlnemFnLkVuY29kZVppZ3phZzMyID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFsdWUgPSBtaWNyb3NvZnRfYm9uZF9wcmltaXRpdmVzXzEuTnVtYmVyLlRvSW50MzIodmFsdWUpO1xyXG4gICAgICAgIHJldHVybiAoKHZhbHVlIDw8IDEpIF4gKHZhbHVlID4+ICg0IC8qc2l6ZW9mKGludCkqLyAqIDggLSAxKSkpO1xyXG4gICAgfTtcclxuICAgIFppZ3phZy5FbmNvZGVaaWd6YWc2NCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciBsb3cgPSB2YWx1ZS5sb3c7XHJcbiAgICAgICAgdmFyIGhpZ2ggPSB2YWx1ZS5oaWdoO1xyXG4gICAgICAgIHZhciB0bXBIID0gKGhpZ2ggPDwgMSkgfCAobG93ID4+PiAzMSk7XHJcbiAgICAgICAgdmFyIHRtcEwgPSBsb3cgPDwgMTtcclxuICAgICAgICBpZiAoaGlnaCAmIDB4ODAwMDAwMDApIHtcclxuICAgICAgICAgICAgdG1wSCA9IH50bXBIO1xyXG4gICAgICAgICAgICB0bXBMID0gfnRtcEw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXMgPSBuZXcgbWljcm9zb2Z0X2JvbmRfcHJpbWl0aXZlc18xLlVJbnQ2NCgnMCcpO1xyXG4gICAgICAgIHJlcy5sb3cgPSB0bXBMO1xyXG4gICAgICAgIHJlcy5oaWdoID0gdG1wSDtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBaaWd6YWc7XHJcbn0oKSk7XHJcbmV4cG9ydHMuWmlnemFnID0gWmlnemFnO1xyXG5cclxuXHJcbi8qKiovIH0pLFxyXG4vKiA4ICovXHJcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcclxuXHJcblwidXNlIHN0cmljdFwiO1xyXG5cclxuLyoqXHJcbiogbWljcm9zb2Z0LmJvbmQuaW8udHNcclxuKiBDb3B5cmlnaHQ6IE1pY3Jvc29mdCAyMDE2XHJcbiovXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIG1pY3Jvc29mdF9ib25kX3ByaW1pdGl2ZXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XHJcbnZhciBNZW1vcnlTdHJlYW0gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBNZW1vcnlTdHJlYW0oKSB7XHJcbiAgICAgICAgdGhpcy5fYnVmZmVyID0gW107XHJcbiAgICB9XHJcbiAgICAvKm92ZXJyaWRlKi9cclxuICAgIE1lbW9yeVN0cmVhbS5wcm90b3R5cGUuV3JpdGVCeXRlID0gZnVuY3Rpb24gKGJ5dGUpIHtcclxuICAgICAgICB0aGlzLl9idWZmZXIucHVzaChtaWNyb3NvZnRfYm9uZF9wcmltaXRpdmVzXzEuTnVtYmVyLlRvQnl0ZShieXRlKSk7XHJcbiAgICB9O1xyXG4gICAgLypvdmVycmlkZSovXHJcbiAgICBNZW1vcnlTdHJlYW0ucHJvdG90eXBlLldyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBjb3VudCkge1xyXG4gICAgICAgIHdoaWxlIChjb3VudC0tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuV3JpdGVCeXRlKGJ1ZmZlcltvZmZzZXQrK10pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGFycmF5IG9mIHVuc2lnbmVkIGJ5dGVzIGZyb20gd2hpY2ggdGhpcyBzdHJlYW0gd2FzIGNyZWF0ZWQuXHJcbiAgICAgKi9cclxuICAgIE1lbW9yeVN0cmVhbS5wcm90b3R5cGUuR2V0QnVmZmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIE1lbW9yeVN0cmVhbTtcclxufSgpKTtcclxuZXhwb3J0cy5NZW1vcnlTdHJlYW0gPSBNZW1vcnlTdHJlYW07XHJcblxyXG5cclxuLyoqKi8gfSksXHJcbi8qIDkgKi9cclxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xyXG5cclxuXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG4vKipcclxuKiBtaWNyb3NvZnQuYm9uZC50c1xyXG4qIENvcHlyaWdodDogTWljcm9zb2Z0IDIwMTZcclxuKi9cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgYm9uZF9jb25zdF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcclxuZXhwb3J0cy5Cb25kRGF0YVR5cGUgPSBib25kX2NvbnN0XzEuQm9uZERhdGFUeXBlO1xyXG52YXIgRW5jb2RpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xyXG5leHBvcnRzLkVuY29kaW5nID0gRW5jb2Rpbmc7XHJcbnZhciBJTyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XHJcbmV4cG9ydHMuSU8gPSBJTztcclxudmFyIG1pY3Jvc29mdF9ib25kX3ByaW1pdGl2ZXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XHJcbmV4cG9ydHMuSW50NjQgPSBtaWNyb3NvZnRfYm9uZF9wcmltaXRpdmVzXzEuSW50NjQ7XHJcbmV4cG9ydHMuVUludDY0ID0gbWljcm9zb2Z0X2JvbmRfcHJpbWl0aXZlc18xLlVJbnQ2NDtcclxuZXhwb3J0cy5OdW1iZXIgPSBtaWNyb3NvZnRfYm9uZF9wcmltaXRpdmVzXzEuTnVtYmVyO1xyXG52YXIgQ29tcGFjdEJpbmFyeVByb3RvY29sV3JpdGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQ29tcGFjdEJpbmFyeVByb3RvY29sV3JpdGVyKHN0cmVhbSkge1xyXG4gICAgICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcclxuICAgIH1cclxuICAgIC8qb3ZlcnJpZGUqL1xyXG4gICAgQ29tcGFjdEJpbmFyeVByb3RvY29sV3JpdGVyLnByb3RvdHlwZS5Xcml0ZUJsb2IgPSBmdW5jdGlvbiAoYmxvYikge1xyXG4gICAgICAgIHRoaXMuX3N0cmVhbS5Xcml0ZShibG9iLCAwLCBibG9iLmxlbmd0aCk7XHJcbiAgICB9O1xyXG4gICAgLypvdmVycmlkZSovXHJcbiAgICBDb21wYWN0QmluYXJ5UHJvdG9jb2xXcml0ZXIucHJvdG90eXBlLldyaXRlQ29udGFpbmVyQmVnaW4gPSBmdW5jdGlvbiAoc2l6ZSwgZWxlbWVudFR5cGUpIHtcclxuICAgICAgICB0aGlzLldyaXRlVUludDgoZWxlbWVudFR5cGUpO1xyXG4gICAgICAgIHRoaXMuV3JpdGVVSW50MzIoc2l6ZSk7XHJcbiAgICB9O1xyXG4gICAgLypvdmVycmlkZSovXHJcbiAgICBDb21wYWN0QmluYXJ5UHJvdG9jb2xXcml0ZXIucHJvdG90eXBlLldyaXRlTWFwQ29udGFpbmVyQmVnaW4gPSBmdW5jdGlvbiAoc2l6ZSwga2V5VHlwZSwgdmFsdWVUeXBlKSB7XHJcbiAgICAgICAgdGhpcy5Xcml0ZVVJbnQ4KGtleVR5cGUpO1xyXG4gICAgICAgIHRoaXMuV3JpdGVVSW50OCh2YWx1ZVR5cGUpO1xyXG4gICAgICAgIHRoaXMuV3JpdGVVSW50MzIoc2l6ZSk7XHJcbiAgICB9O1xyXG4gICAgLypvdmVycmlkZSovXHJcbiAgICBDb21wYWN0QmluYXJ5UHJvdG9jb2xXcml0ZXIucHJvdG90eXBlLldyaXRlRmllbGRCZWdpbiA9IGZ1bmN0aW9uICh0eXBlLCBpZCkge1xyXG4gICAgICAgIGlmIChpZCA8PSA1KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5Xcml0ZUJ5dGUodHlwZSB8IChpZCA8PCA1KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlkIDw9IDB4ZmYpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RyZWFtLldyaXRlQnl0ZSh0eXBlIHwgKDYgPDwgNSkpO1xyXG4gICAgICAgICAgICB0aGlzLl9zdHJlYW0uV3JpdGVCeXRlKGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5Xcml0ZUJ5dGUodHlwZSB8ICg3IDw8IDUpKTtcclxuICAgICAgICAgICAgdGhpcy5fc3RyZWFtLldyaXRlQnl0ZShpZCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5Xcml0ZUJ5dGUoaWQgPj4gOCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qb3ZlcnJpZGUqL1xyXG4gICAgQ29tcGFjdEJpbmFyeVByb3RvY29sV3JpdGVyLnByb3RvdHlwZS5Xcml0ZUludDMyID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFsdWUgPSBFbmNvZGluZy5aaWd6YWcuRW5jb2RlWmlnemFnMzIodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuV3JpdGVVSW50MzIodmFsdWUpO1xyXG4gICAgfTtcclxuICAgIC8qb3ZlcnJpZGUqL1xyXG4gICAgQ29tcGFjdEJpbmFyeVByb3RvY29sV3JpdGVyLnByb3RvdHlwZS5Xcml0ZUludDY0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5Xcml0ZVVJbnQ2NChFbmNvZGluZy5aaWd6YWcuRW5jb2RlWmlnemFnNjQodmFsdWUpKTtcclxuICAgIH07XHJcbiAgICAvKm92ZXJyaWRlKi9cclxuICAgIENvbXBhY3RCaW5hcnlQcm90b2NvbFdyaXRlci5wcm90b3R5cGUuV3JpdGVTdHJpbmcgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuV3JpdGVVSW50MzIoMCAvKmxlbmd0aCovKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBhcnJheSA9IEVuY29kaW5nLlV0ZjguR2V0Qnl0ZXModmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLldyaXRlVUludDMyKGFycmF5Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5Xcml0ZShhcnJheSwgMCwgYXJyYXkubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgLypvdmVycmlkZSovXHJcbiAgICBDb21wYWN0QmluYXJ5UHJvdG9jb2xXcml0ZXIucHJvdG90eXBlLldyaXRlU3RydWN0RW5kID0gZnVuY3Rpb24gKGlzQmFzZSkge1xyXG4gICAgICAgIHRoaXMuV3JpdGVVSW50OChpc0Jhc2UgPyBib25kX2NvbnN0XzEuQm9uZERhdGFUeXBlLkJUX1NUT1BfQkFTRSA6IGJvbmRfY29uc3RfMS5Cb25kRGF0YVR5cGUuQlRfU1RPUCk7XHJcbiAgICB9O1xyXG4gICAgLypvdmVycmlkZSovXHJcbiAgICBDb21wYWN0QmluYXJ5UHJvdG9jb2xXcml0ZXIucHJvdG90eXBlLldyaXRlVUludDMyID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIGFycmF5ID0gRW5jb2RpbmcuVmFyaW50LkdldEJ5dGVzKG1pY3Jvc29mdF9ib25kX3ByaW1pdGl2ZXNfMS5OdW1iZXIuVG9VSW50MzIodmFsdWUpKTtcclxuICAgICAgICB0aGlzLl9zdHJlYW0uV3JpdGUoYXJyYXksIDAsIGFycmF5Lmxlbmd0aCk7XHJcbiAgICB9O1xyXG4gICAgLypvdmVycmlkZSovXHJcbiAgICBDb21wYWN0QmluYXJ5UHJvdG9jb2xXcml0ZXIucHJvdG90eXBlLldyaXRlVUludDY0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIGFycmF5ID0gRW5jb2RpbmcuVmFyaW50NjQuR2V0Qnl0ZXModmFsdWUpO1xyXG4gICAgICAgIHRoaXMuX3N0cmVhbS5Xcml0ZShhcnJheSwgMCwgYXJyYXkubGVuZ3RoKTtcclxuICAgIH07XHJcbiAgICAvKm92ZXJyaWRlKi9cclxuICAgIENvbXBhY3RCaW5hcnlQcm90b2NvbFdyaXRlci5wcm90b3R5cGUuV3JpdGVVSW50OCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3N0cmVhbS5Xcml0ZUJ5dGUobWljcm9zb2Z0X2JvbmRfcHJpbWl0aXZlc18xLk51bWJlci5Ub1VJbnQ4KHZhbHVlKSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIENvbXBhY3RCaW5hcnlQcm90b2NvbFdyaXRlcjtcclxufSgpKTtcclxuZXhwb3J0cy5Db21wYWN0QmluYXJ5UHJvdG9jb2xXcml0ZXIgPSBDb21wYWN0QmluYXJ5UHJvdG9jb2xXcml0ZXI7XHJcblxyXG5cclxuLyoqKi8gfSksXHJcbi8qIDEwICovXHJcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcclxuXHJcblwidXNlIHN0cmljdFwiO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgU2VjVG9Nc011bHRpcGxpZXIgPSAxMDAwO1xyXG52YXIgQVdUS2lsbFN3aXRjaCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIEFXVEtpbGxTd2l0Y2goKSB7XHJcbiAgICAgICAgdGhpcy5fa2lsbGVkVG9rZW5EaWN0aW9uYXJ5ID0ge307XHJcbiAgICB9XHJcbiAgICBBV1RLaWxsU3dpdGNoLnByb3RvdHlwZS5zZXRLaWxsU3dpdGNoVGVuYW50cyA9IGZ1bmN0aW9uIChraWxsVG9rZW5zLCBraWxsRHVyYXRpb24pIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmIChraWxsVG9rZW5zICYmIGtpbGxEdXJhdGlvbikge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGtpbGxlZFRva2VucyA9IGtpbGxUb2tlbnMuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgICAgIGlmIChraWxsRHVyYXRpb24gPT09ICd0aGlzLXJlcXVlc3Qtb25seScpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2lsbGVkVG9rZW5zO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uTXNfMSA9IHBhcnNlSW50KGtpbGxEdXJhdGlvbiwgMTApICogU2VjVG9Nc011bHRpcGxpZXI7XHJcbiAgICAgICAgICAgICAgICBraWxsZWRUb2tlbnMuZm9yRWFjaChmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5fa2lsbGVkVG9rZW5EaWN0aW9uYXJ5W3Rva2VuXSA9IERhdGUubm93KCkgKyBkdXJhdGlvbk1zXzE7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9O1xyXG4gICAgQVdUS2lsbFN3aXRjaC5wcm90b3R5cGUuaXNUZW5hbnRLaWxsZWQgPSBmdW5jdGlvbiAodGVuYW50VG9rZW4pIHtcclxuICAgICAgICBpZiAodGhpcy5fa2lsbGVkVG9rZW5EaWN0aW9uYXJ5W3RlbmFudFRva2VuXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2tpbGxlZFRva2VuRGljdGlvbmFyeVt0ZW5hbnRUb2tlbl0gPiBEYXRlLm5vdygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWxldGUgdGhpcy5fa2lsbGVkVG9rZW5EaWN0aW9uYXJ5W3RlbmFudFRva2VuXTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEFXVEtpbGxTd2l0Y2g7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEFXVEtpbGxTd2l0Y2g7XHJcblxyXG5cclxuLyoqKi8gfSksXHJcbi8qIDExICovXHJcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcclxuXHJcblwidXNlIHN0cmljdFwiO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgQVdUQm9uZFNlcmlhbGl6ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XHJcbnZhciBBV1RSZWNvcmRCYXRjaGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQVdUUmVjb3JkQmF0Y2hlcihfbWF4UmVxdWVzdFNpemUsIF9vdXRib3VuZFF1ZXVlKSB7XHJcbiAgICAgICAgdGhpcy5fbWF4UmVxdWVzdFNpemUgPSBfbWF4UmVxdWVzdFNpemU7XHJcbiAgICAgICAgdGhpcy5fb3V0Ym91bmRRdWV1ZSA9IF9vdXRib3VuZFF1ZXVlO1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCYXRjaCA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRCYXRjaFNpemUgPSAwO1xyXG4gICAgfVxyXG4gICAgQVdUUmVjb3JkQmF0Y2hlci5wcm90b3R5cGUuYWRkRXZlbnRUb0JhdGNoID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIHNlcmlhbGl6ZWRFdmVudCA9IEFXVEJvbmRTZXJpYWxpemVyXzEuZGVmYXVsdC5nZXRFdmVudEJsb2IoZXZlbnQpO1xyXG4gICAgICAgIGlmIChzZXJpYWxpemVkRXZlbnQubGVuZ3RoID4gdGhpcy5fbWF4UmVxdWVzdFNpemUpIHtcclxuICAgICAgICAgICAgLy9zaW5nbGUgZXZlbnQgdG9vIGJpZ1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50QmF0Y2hTaXplICsgc2VyaWFsaXplZEV2ZW50Lmxlbmd0aCA+IHRoaXMuX21heFJlcXVlc3RTaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmx1c2hCYXRjaCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRCYXRjaFtldmVudC50ZW5hbnRUb2tlbl0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEJhdGNoW2V2ZW50LnRlbmFudFRva2VuXSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRCYXRjaFtldmVudC50ZW5hbnRUb2tlbl0ucHVzaChzZXJpYWxpemVkRXZlbnQpO1xyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50QmF0Y2hTaXplICs9IHNlcmlhbGl6ZWRFdmVudC5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEFXVFJlY29yZEJhdGNoZXIucHJvdG90eXBlLmZsdXNoQmF0Y2ggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRCYXRjaFNpemUgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dGJvdW5kUXVldWUucHVzaCh0aGlzLl9jdXJyZW50QmF0Y2gpO1xyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50QmF0Y2ggPSB7fTtcclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudEJhdGNoU2l6ZSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBBV1RSZWNvcmRCYXRjaGVyO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBBV1RSZWNvcmRCYXRjaGVyO1xyXG5cclxuXHJcbi8qKiovIH0pLFxyXG4vKiAxMiAqL1xyXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XHJcblxyXG5cInVzZSBzdHJpY3RcIjtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuLyoqXHJcbiogQVdUUmV0cnlQb2xpY3kudHNcclxuKiBBdXRob3I6IEFiaGlsYXNoIFBhbndhciAoYWJwYW53YXIpXHJcbiogQ29weXJpZ2h0OiBNaWNyb3NvZnQgMjAxNlxyXG4qIENsYXNzIGZvciByZXRyeSBwb2xpY3kuXHJcbiovXHJcbnZhciBSYW5kb21pemF0aW9uTG93ZXJUaHJlc2hvbGQgPSAwLjg7XHJcbnZhciBSYW5kb21pemF0aW9uVXBwZXJUaHJlc2hvbGQgPSAxLjI7XHJcbnZhciBCYXNlQmFja29mZiA9IDMwMDA7XHJcbnZhciBNYXhCYWNrb2ZmID0gMTIwMDAwO1xyXG52YXIgQVdUUmV0cnlQb2xpY3kgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XHJcbiAgICBmdW5jdGlvbiBBV1RSZXRyeVBvbGljeSgpIHtcclxuICAgIH1cclxuICAgIEFXVFJldHJ5UG9saWN5LnNob3VsZFJldHJ5Rm9yU3RhdHVzID0gZnVuY3Rpb24gKGh0dHBTdGF0dXNDb2RlKSB7XHJcbiAgICAgICAgLyogVGhlIGJlbG93IGV4cHJlc3Npb24gcmVhZHMgdGhhdCB3ZSBzaG91bGQgb25seSByZXRyeSBmb3I6XHJcbiAgICAgICAgICAgIC0gSHR0cFN0YXR1c0NvZGVzIHRoYXQgYXJlIHNtYWxsZXIgdGhhbiAzMDAuXHJcbiAgICAgICAgICAgIC0gSHR0cFN0YXR1c0NvZGVzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gNTAwIChleGNlcHQgZm9yIDUwMS1Ob3RJbXBsZW1lbnRcclxuICAgICAgICAgICAgICBhbmQgNTA1LUh0dHBWZXJzaW9uTm90U3VwcG9ydCkuXHJcbiAgICAgICAgICAgIC0gSHR0cFN0YXR1c0NvZGUgNDA4LVJlcXVlc3RUaW1lb3V0LlxyXG4gICAgICAgICAgIFRoaXMgaXMgYmFzZWQgb24gTWljcm9zb2Z0LldpbmRvd3NBenVyZS5TdG9yYWdlLlJldHJ5UG9saWNpZXMuRXhwb25lbnRpYWxSZXRyeSBjbGFzcyAqL1xyXG4gICAgICAgIHJldHVybiAhKChodHRwU3RhdHVzQ29kZSA+PSAzMDAgJiYgaHR0cFN0YXR1c0NvZGUgPCA1MDAgJiYgaHR0cFN0YXR1c0NvZGUgIT09IDQwOClcclxuICAgICAgICAgICAgfHwgKGh0dHBTdGF0dXNDb2RlID09PSA1MDEpXHJcbiAgICAgICAgICAgIHx8IChodHRwU3RhdHVzQ29kZSA9PT0gNTA1KSk7XHJcbiAgICB9O1xyXG4gICAgQVdUUmV0cnlQb2xpY3kuZ2V0TWlsbGlzVG9CYWNrb2ZmRm9yUmV0cnkgPSBmdW5jdGlvbiAocmV0cmllc1NvRmFyKSB7XHJcbiAgICAgICAgdmFyIHdhaXREdXJhdGlvbiA9IDA7XHJcbiAgICAgICAgdmFyIG1pbkJhY2tvZmYgPSBCYXNlQmFja29mZiAqIFJhbmRvbWl6YXRpb25Mb3dlclRocmVzaG9sZDtcclxuICAgICAgICB2YXIgbWF4QmFja29mZiA9IEJhc2VCYWNrb2ZmICogUmFuZG9taXphdGlvblVwcGVyVGhyZXNob2xkO1xyXG4gICAgICAgIHZhciByYW5kb21CYWNrb2ZmID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heEJhY2tvZmYgLSBtaW5CYWNrb2ZmKSkgKyBtaW5CYWNrb2ZmO1xyXG4gICAgICAgIHdhaXREdXJhdGlvbiA9IE1hdGgucG93KDQsIHJldHJpZXNTb0ZhcikgKiByYW5kb21CYWNrb2ZmO1xyXG4gICAgICAgIHJldHVybiBNYXRoLm1pbih3YWl0RHVyYXRpb24sIE1heEJhY2tvZmYpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBBV1RSZXRyeVBvbGljeTtcclxufSgpKTtcclxuZXhwb3J0cy5kZWZhdWx0ID0gQVdUUmV0cnlQb2xpY3k7XHJcblxyXG5cclxuLyoqKi8gfSksXHJcbi8qIDEzICovXHJcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcclxuXHJcblwidXNlIHN0cmljdFwiO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgRW51bXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XHJcbnZhciBBV1RUcmFuc21pc3Npb25NYW5hZ2VyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcclxudmFyIFV0aWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcclxudmFyIFZlcnNpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xyXG52YXIgQWxsVG9rZW5zID0gJ2FsbFRrbnMnO1xyXG52YXIgRXZlbnROYW1lQW5kVHlwZVJlZ2V4ID0gL15bYS16QS1aMC05XShbYS16QS1aMC05XXxfKXsyLDk4fVthLXpBLVowLTldJC87XHJcbnZhciBFdmVudE5hbWVEb3RSZWdleCA9IC9cXC4vZztcclxudmFyIFByb3BlcnR5TmFtZVJlZ2V4ID0gL15bYS16QS1aMC05XSgoW2EtekEtWjAtOXxffFxcLl0pezAsOTh9W2EtekEtWjAtOV0pPyQvO1xyXG52YXIgQVdUID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQVdUKCkge1xyXG4gICAgfVxyXG4gICAgQVdULmluaXRpYWxpemUgPSBmdW5jdGlvbiAodGVuYW50VG9rZW4sIGNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdm9pZCAwKSB7IGNvbmZpZ3VyYXRpb24gPSB7fTsgfVxyXG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxyXG4gICAgICAgICAgICB0aHJvdyAnQWxyZWFkeSBJbml0aWFsaXplZCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRUZW5hbnRUb2tlbiA9IHRlbmFudFRva2VuO1xyXG4gICAgICAgIHRoaXMuX292ZXJyaWRlVmFsdWVzRnJvbUNvbmZpZyhjb25maWd1cmF0aW9uKTtcclxuICAgICAgICAvL0NyZWF0ZSBzZW5kZXJcclxuICAgICAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5pbml0aWFsaXplKHRoaXMuX2NvbmZpZyk7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9O1xyXG4gICAgQVdULmZsdXNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6ZWQgJiYgIXRoaXMuX2lzRGVzdHJveWVkKSB7XHJcbiAgICAgICAgICAgIEFXVFRyYW5zbWlzc2lvbk1hbmFnZXJfMS5kZWZhdWx0LmZsdXNoKGNhbGxiYWNrKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQVdULmZsdXNoQW5kVGVhcmRvd24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6ZWQgJiYgIXRoaXMuX2lzRGVzdHJveWVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzRGVzdHJveWVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgQVdUVHJhbnNtaXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuZmx1c2hBbmRUZWFyZG93bigpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBBV1Quc2V0Q29udGV4dCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9wZXJ0eSwgdGVuYW50VG9rZW4pIHtcclxuICAgICAgICBpZiAodGVuYW50VG9rZW4gPT09IHZvaWQgMCkgeyB0ZW5hbnRUb2tlbiA9IEFsbFRva2VuczsgfVxyXG4gICAgICAgIHByb3BlcnR5ID0gdGhpcy5fc2FuaXRpemVQcm9wZXJ0eShuYW1lLCBwcm9wZXJ0eSk7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb250ZXh0UHJvcGVydGllc1t0ZW5hbnRUb2tlbl0pIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGV4dFByb3BlcnRpZXNbdGVuYW50VG9rZW5dID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbnRleHRQcm9wZXJ0aWVzW3RlbmFudFRva2VuXVtuYW1lXSA9IHByb3BlcnR5O1xyXG4gICAgfTtcclxuICAgIEFXVC5sb2dFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC5uYW1lIHx8ICFldmVudC5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXZlbnQubmFtZSA9IGV2ZW50Lm5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgZXZlbnQubmFtZS5yZXBsYWNlKEV2ZW50TmFtZURvdFJlZ2V4LCAnXycpO1xyXG4gICAgICAgICAgICB2YXIgdHlwZVByZWZpeCA9ICcnO1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSAnY3VzdG9tJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIHR5cGVQcmVmaXggPSAnY3VzdG9tLic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFFdmVudE5hbWVBbmRUeXBlUmVnZXgudGVzdChldmVudC5uYW1lKSB8fCAhRXZlbnROYW1lQW5kVHlwZVJlZ2V4LnRlc3QoZXZlbnQudHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBldmVudC50eXBlID0gdHlwZVByZWZpeCArIGV2ZW50LnR5cGU7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihldmVudC50aW1lc3RhbXApKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC50aW1lc3RhbXAgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZXZlbnQudGVuYW50VG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnRlbmFudFRva2VuID0gdGhpcy5fZGVmYXVsdFRlbmFudFRva2VuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV2ZW50LmlkID0gVXRpbHMubmV3R3VpZCgpO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhldmVudC5wcm9wZXJ0aWVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcm9wZXJ0aWVzW25hbWVdID0gX3RoaXMuX3Nhbml0aXplUHJvcGVydHkobmFtZSwgZXZlbnQucHJvcGVydGllc1tuYW1lXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQucHJvcGVydGllc1tuYW1lXSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVudC5wcm9wZXJ0aWVzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5fYWRkQ29udGV4dElmQWJzZW50KGV2ZW50LCBldmVudC50ZW5hbnRUb2tlbik7XHJcbiAgICAgICAgICAgIHRoaXMuX2FkZENvbnRleHRJZkFic2VudChldmVudCwgQWxsVG9rZW5zKTtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGV2ZW50LnByb3BlcnRpZXMpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3NldERlZmF1bHRQcm9wZXJ0eShldmVudCwgJ0V2ZW50SW5mby5Jbml0SWQnLCB0aGlzLl9nZXRJbml0SWQoZXZlbnQudGVuYW50VG9rZW4pKTtcclxuICAgICAgICAgICAgdGhpcy5fc2V0RGVmYXVsdFByb3BlcnR5KGV2ZW50LCAnRXZlbnRJbmZvLlNlcXVlbmNlJywgdGhpcy5fZ2V0U2VxdWVuY2VJZChldmVudC50ZW5hbnRUb2tlbikpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXREZWZhdWx0UHJvcGVydHkoZXZlbnQsICdFdmVudEluZm8uU2RrVmVyc2lvbicsIFZlcnNpb24uRnVsbFZlcnNpb25TdHJpbmcpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXREZWZhdWx0UHJvcGVydHkoZXZlbnQsICdFdmVudEluZm8uTmFtZScsIGV2ZW50Lm5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXREZWZhdWx0UHJvcGVydHkoZXZlbnQsICdFdmVudEluZm8uVGltZScsIChuZXcgRGF0ZShldmVudC50aW1lc3RhbXApKS50b0lTT1N0cmluZygpKTtcclxuICAgICAgICAgICAgQVdUVHJhbnNtaXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQuc2VuZEV2ZW50KGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQVdULl9vdmVycmlkZVZhbHVlc0Zyb21Db25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5jb2xsZWN0b3JVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29uZmlnLmNvbGxlY3RvclVybCA9IGNvbmZpZy5jb2xsZWN0b3JVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb25maWcuc2VuZGluZ1RpbWVyID4gMTAwMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb25maWcuc2VuZGluZ1RpbWVyID0gY29uZmlnLnNlbmRpbmdUaW1lcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQVdULl9nZXRJbml0SWQgPSBmdW5jdGlvbiAodGVuYW50VG9rZW4pIHtcclxuICAgICAgICBpZiAodGhpcy5faW5pdElkTWFwW3RlbmFudFRva2VuXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luaXRJZE1hcFt0ZW5hbnRUb2tlbl0gPSBVdGlscy5uZXdHdWlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0SWRNYXBbdGVuYW50VG9rZW5dO1xyXG4gICAgfTtcclxuICAgIEFXVC5fZ2V0U2VxdWVuY2VJZCA9IGZ1bmN0aW9uICh0ZW5hbnRUb2tlbikge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXF1ZW5jZUlkTWFwW3RlbmFudFRva2VuXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlcXVlbmNlSWRNYXBbdGVuYW50VG9rZW5dID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICgrK3RoaXMuX3NlcXVlbmNlSWRNYXBbdGVuYW50VG9rZW5dKS50b1N0cmluZygpO1xyXG4gICAgfTtcclxuICAgIEFXVC5fc2V0RGVmYXVsdFByb3BlcnR5ID0gZnVuY3Rpb24gKGV2ZW50LCBuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGV2ZW50LnByb3BlcnRpZXNbbmFtZV0gPSB7IHZhbHVlOiB2YWx1ZSwgcGlpOiBFbnVtc18xLkFXVFBpaUtpbmQuTm90U2V0IH07XHJcbiAgICB9O1xyXG4gICAgQVdULl9hZGRDb250ZXh0SWZBYnNlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIHRlbmFudFRva2VuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRleHRQcm9wZXJ0aWVzW3RlbmFudFRva2VuXSkge1xyXG4gICAgICAgICAgICB2YXIgY29udGV4dF8xID0gdGhpcy5fY29udGV4dFByb3BlcnRpZXNbdGVuYW50VG9rZW5dO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0XzEpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZXZlbnQucHJvcGVydGllc1tuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByb3BlcnRpZXNbbmFtZV0gPSBjb250ZXh0XzFbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBBV1QuX3Nhbml0aXplUHJvcGVydHkgPSBmdW5jdGlvbiAobmFtZSwgcHJvcGVydHkpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcGVydHkgPT09ICdudW1iZXInIHx8IHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgIHByb3BlcnR5ID0geyB2YWx1ZTogcHJvcGVydHkgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFQcm9wZXJ0eU5hbWVSZWdleC50ZXN0KG5hbWUpIHx8IHByb3BlcnR5ID09PSB1bmRlZmluZWQgfHwgcHJvcGVydHkgPT09IG51bGxcclxuICAgICAgICAgICAgfHwgcHJvcGVydHkudmFsdWUgPT09IG51bGwgfHwgcHJvcGVydHkudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcm9wZXJ0eS52YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkucGlpID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBwcm9wZXJ0eS5waWkgPSBFbnVtc18xLkFXVFBpaUtpbmQuTm90U2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wZXJ0eS52YWx1ZSA9IHByb3BlcnR5LnZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmlzUGlpKHByb3BlcnR5LnBpaSkgPyBwcm9wZXJ0eSA6IG51bGw7XHJcbiAgICB9O1xyXG4gICAgQVdULl9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICBBV1QuX2lzRGVzdHJveWVkID0gZmFsc2U7XHJcbiAgICBBV1QuX2NvbnRleHRQcm9wZXJ0aWVzID0ge307XHJcbiAgICBBV1QuX3NlcXVlbmNlSWRNYXAgPSB7fTtcclxuICAgIEFXVC5faW5pdElkTWFwID0ge307XHJcbiAgICBBV1QuX2NvbmZpZyA9IHtcclxuICAgICAgICBjb2xsZWN0b3JVcmw6ICdodHRwczovL2Jyb3dzZXIucGlwZS5hcmlhLm1pY3Jvc29mdC5jb20vQ29sbGVjdG9yLzMuMC8nLFxyXG4gICAgICAgIHNlbmRpbmdUaW1lcjogMTAwMFxyXG4gICAgfTtcclxuICAgIHJldHVybiBBV1Q7XHJcbn0oKSk7XHJcbmV4cG9ydHMuZGVmYXVsdCA9IEFXVDtcclxuXHJcblxyXG4vKioqLyB9KSxcclxuLyogMTQgKi9cclxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xyXG5cclxuXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBBV1RSZWNvcmRCYXRjaGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcclxudmFyIEFXVEJvbmRTZXJpYWxpemVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xyXG52YXIgQVdUUmV0cnlQb2xpY3lfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xyXG52YXIgQVdUS2lsbFN3aXRjaF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XHJcbnZhciBWZXJzaW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcclxudmFyIEZsdXNoQ2hlY2tUaW1lciA9IDI1MDtcclxudmFyIFJlcXVlc3RTaXplTGltaXRCeXRlcyA9IDI5MzYwMTI7IC8vYXBwcm94IDIuOCBNYlxyXG52YXIgTWF4UmV0cmllcyA9IDQ7XHJcbnZhciBBV1RUcmFuc21pc3Npb25NYW5hZ2VyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gQVdUVHJhbnNtaXNzaW9uTWFuYWdlcigpIHtcclxuICAgIH1cclxuICAgIEFXVFRyYW5zbWlzc2lvbk1hbmFnZXIuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uIChjb25maWcpIHtcclxuICAgICAgICB0aGlzLl9pbmJvdW5kUXVldWVzLnB1c2goW10pO1xyXG4gICAgICAgIHRoaXMuX3JlY29yZEJhdGNoZXIgPSBuZXcgQVdUUmVjb3JkQmF0Y2hlcl8xLmRlZmF1bHQoUmVxdWVzdFNpemVMaW1pdEJ5dGVzLCB0aGlzLl9vdXRib3VuZFF1ZXVlKTtcclxuICAgICAgICB0aGlzLl9uZXdFdmVudHNBbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VybFN0cmluZyArPSAnJmNvbnRlbnQtZW5jb2Rpbmc9YmFzZTY0JztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc2VuZGluZ1RpbWVyID0gY29uZmlnLnNlbmRpbmdUaW1lcjtcclxuICAgICAgICB0aGlzLl91cmxTdHJpbmcgPSBjb25maWcuY29sbGVjdG9yVXJsICsgdGhpcy5fdXJsU3RyaW5nICsgJyZ4LWFwaWtleT0nO1xyXG4gICAgfTtcclxuICAgIC8vUHVzaCB0aGUgZXZlbnQgaW50byB0aGUgaW5ib3VuZCBxdWV1ZSBhbmQgcmV0dXJuXHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLnNlbmRFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMuX25ld0V2ZW50c0FsbG93ZWQpIHtcclxuICAgICAgICAgICAgLy9BZGQgZXZlbnQgdG8gdGhlIGxhc3QgaW5ib3VuZCBxdWV1ZVxyXG4gICAgICAgICAgICB0aGlzLl9pbmJvdW5kUXVldWVzW3RoaXMuX2luYm91bmRRdWV1ZXMubGVuZ3RoIC0gMV0ucHVzaChldmVudCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcnVubmluZyAmJiB0aGlzLl90aW1lb3V0IDwgMCAmJiAhdGhpcy5faXNDdXJyZW50bHlGbHVzaGluZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX2JhdGNoQW5kU2VuZEV2ZW50cyhmYWxzZSk7IH0sIHRoaXMuX3NlbmRpbmdUaW1lcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQVdUVHJhbnNtaXNzaW9uTWFuYWdlci5mbHVzaEFuZFRlYXJkb3duID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX25ld0V2ZW50c0FsbG93ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9iYXRjaEFuZFNlbmRFdmVudHModHJ1ZSk7XHJcbiAgICB9O1xyXG4gICAgQVdUVHJhbnNtaXNzaW9uTWFuYWdlci5mbHVzaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgIHRoaXMuX2luYm91bmRRdWV1ZXMucHVzaChbXSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0N1cnJlbnRseUZsdXNoaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzQ3VycmVudGx5Rmx1c2hpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9mbHVzaChjYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9mbHVzaFF1ZXVlLnB1c2goY2FsbGJhY2spO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLl9iYXRjaEFuZFNlbmRFdmVudHMgPSBmdW5jdGlvbiAoaXNUZWFyZG93bikge1xyXG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgIHdoaWxlICh0aGlzLl9pbmJvdW5kUXVldWVzWzBdLmxlbmd0aCA+IDAgJiYgdGhpcy5fb3V0Ym91bmRRdWV1ZS5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlY29yZEJhdGNoZXIuYWRkRXZlbnRUb0JhdGNoKHRoaXMuX2luYm91bmRRdWV1ZXNbMF0ucG9wKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fb3V0Ym91bmRRdWV1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjb3JkQmF0Y2hlci5mbHVzaEJhdGNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3NlbmRSZXF1ZXN0KHRoaXMuX291dGJvdW5kUXVldWUucG9wKCksIDAsIGlzVGVhcmRvd24pO1xyXG4gICAgfTtcclxuICAgIEFXVFRyYW5zbWlzc2lvbk1hbmFnZXIuX3JldHJ5UmVxdWVzdElmTmVlZGVkID0gZnVuY3Rpb24gKGNvbm4sIHJlcXVlc3QsIHRva2VuQ291bnQsIGFwaWtleSwgcmV0cnlDb3VudCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHNob3VsZFJldHJ5ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoY29ubiAmJiB0eXBlb2YgY29ubi5zdGF0dXMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHZhciBraWxsZWRUb2tlbnMgPSB0aGlzLl9raWxsU3dpdGNoLnNldEtpbGxTd2l0Y2hUZW5hbnRzKGNvbm4uZ2V0UmVzcG9uc2VIZWFkZXIoJ2tpbGwtdG9rZW5zJyksIGNvbm4uZ2V0UmVzcG9uc2VIZWFkZXIoJ2tpbGwtZHVyYXRpb24tc2Vjb25kcycpKTtcclxuICAgICAgICAgICAga2lsbGVkVG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3Rba2V5XTtcclxuICAgICAgICAgICAgICAgIHRva2VuQ291bnQtLTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmICghQVdUUmV0cnlQb2xpY3lfMS5kZWZhdWx0LnNob3VsZFJldHJ5Rm9yU3RhdHVzKGNvbm4uc3RhdHVzKSB8fCB0b2tlbkNvdW50IDw9IDApIHtcclxuICAgICAgICAgICAgICAgIHNob3VsZFJldHJ5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNob3VsZFJldHJ5ICYmIHJldHJ5Q291bnQgPCBNYXhSZXRyaWVzKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX3NlbmRSZXF1ZXN0KHJlcXVlc3QsIHJldHJ5Q291bnQgKyAxLCBmYWxzZSk7IH0sIEFXVFJldHJ5UG9saWN5XzEuZGVmYXVsdC5nZXRNaWxsaXNUb0JhY2tvZmZGb3JSZXRyeShyZXRyeUNvdW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSZXF1ZXN0RmluaXNoZWQobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEFXVFRyYW5zbWlzc2lvbk1hbmFnZXIuX3NlbmRSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcXVlc3QsIHJldHJ5Q291bnQsIGlzVGVhcmRvd24pIHtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBjb25uXzEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICAgICAgdmFyIHRva2VuQ291bnRfMSA9IDA7XHJcbiAgICAgICAgICAgIHZhciBhcGlrZXlfMSA9ICcnO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhyZXF1ZXN0KS5mb3JFYWNoKGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5fa2lsbFN3aXRjaC5pc1RlbmFudEtpbGxlZCh0b2tlbikpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXBpa2V5XzEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcGlrZXlfMSArPSAnLCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGFwaWtleV8xICs9IHRva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRva2VuQ291bnRfMSsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3RbdG9rZW5dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29ubl8xLm9wZW4oJ1BPU1QnLCB0aGlzLl91cmxTdHJpbmcgKyBhcGlrZXlfMSwgIWlzVGVhcmRvd24pO1xyXG4gICAgICAgICAgICBpZiAoIWlzVGVhcmRvd24pIHtcclxuICAgICAgICAgICAgICAgIGNvbm5fMS5vbnRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3JldHJ5UmVxdWVzdElmTmVlZGVkKGNvbm5fMSwgcmVxdWVzdCwgdG9rZW5Db3VudF8xLCBhcGlrZXlfMSwgcmV0cnlDb3VudCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY29ubl8xLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3JldHJ5UmVxdWVzdElmTmVlZGVkKGNvbm5fMSwgcmVxdWVzdCwgdG9rZW5Db3VudF8xLCBhcGlrZXlfMSwgcmV0cnlDb3VudCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY29ubl8xLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5faGFuZGxlUmVxdWVzdEZpbmlzaGVkKGNvbm5fMSk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0b2tlbkNvdW50XzEgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYmxvYiA9IEFXVEJvbmRTZXJpYWxpemVyXzEuZGVmYXVsdC5nZXRQYXlsb2FkQmxvYihyZXF1ZXN0LCB0b2tlbkNvdW50XzEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbm5fMS5zZW5kKEFXVEJvbmRTZXJpYWxpemVyXzEuZGVmYXVsdC5iYXNlNjRFbmNvZGUoYmxvYikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29ubl8xLnNlbmQobmV3IFVpbnQ4QXJyYXkoYmxvYikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVGVhcmRvd24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJlcXVlc3RGaW5pc2hlZChudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSZXF1ZXN0RmluaXNoZWQobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEFXVFRyYW5zbWlzc2lvbk1hbmFnZXIuX2hhbmRsZVJlcXVlc3RGaW5pc2hlZCA9IGZ1bmN0aW9uIChjb25uKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBpZiAoY29ubikge1xyXG4gICAgICAgICAgICB0aGlzLl9raWxsU3dpdGNoLnNldEtpbGxTd2l0Y2hUZW5hbnRzKGNvbm4uZ2V0UmVzcG9uc2VIZWFkZXIoJ2tpbGwtdG9rZW5zJyksIGNvbm4uZ2V0UmVzcG9uc2VIZWFkZXIoJ2tpbGwtZHVyYXRpb24tc2Vjb25kcycpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2luYm91bmRRdWV1ZXNbMF0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fYmF0Y2hBbmRTZW5kRXZlbnRzKGZhbHNlKTsgfSwgdGhpcy5fc2VuZGluZ1RpbWVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSAtMTtcclxuICAgICAgICAgICAgdGhpcy5fcnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLl9mbHVzaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9ydW5uaW5nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl90aW1lb3V0ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVvdXQgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5faW5ib3VuZFF1ZXVlc1swXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9iYXRjaEFuZFNlbmRFdmVudHMoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NoZWNrUHJpbWFyeUluYm91bmRRdWV1ZUVtcHR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgLy9Nb3ZlIHRoZSBuZXh0IHF1ZXVlIHRvIGJlIHByaW1hcnlcclxuICAgICAgICAgICAgX3RoaXMuX2luYm91bmRRdWV1ZXMuc2hpZnQoKTtcclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsICYmIGNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKF90aGlzLl9mbHVzaFF1ZXVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX2ZsdXNoKF90aGlzLl9mbHVzaFF1ZXVlLnNoaWZ0KCkpOyB9LCBfdGhpcy5fc2VuZGluZ1RpbWVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9pc0N1cnJlbnRseUZsdXNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2luYm91bmRRdWV1ZXNbMF0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5fYmF0Y2hBbmRTZW5kRXZlbnRzKGZhbHNlKTsgfSwgX3RoaXMuX3NlbmRpbmdUaW1lcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLl9jaGVja1ByaW1hcnlJbmJvdW5kUXVldWVFbXB0eSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoaXMuX2luYm91bmRRdWV1ZXNbMF0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrT3V0Ym91bmRRdWV1ZUVtcHR5QW5kU2VudChjYWxsYmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9jaGVja1ByaW1hcnlJbmJvdW5kUXVldWVFbXB0eShjYWxsYmFjayk7IH0sIEZsdXNoQ2hlY2tUaW1lcik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEFXVFRyYW5zbWlzc2lvbk1hbmFnZXIuX2NoZWNrT3V0Ym91bmRRdWV1ZUVtcHR5QW5kU2VudCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9ydW5uaW5nKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLl9jaGVja091dGJvdW5kUXVldWVFbXB0eUFuZFNlbnQoY2FsbGJhY2spOyB9LCBGbHVzaENoZWNrVGltZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLl9vdXRib3VuZFF1ZXVlID0gW107XHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLl9pbmJvdW5kUXVldWVzID0gW107XHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLl9uZXdFdmVudHNBbGxvd2VkID0gZmFsc2U7XHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLl9raWxsU3dpdGNoID0gbmV3IEFXVEtpbGxTd2l0Y2hfMS5kZWZhdWx0KCk7XHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLl9pc0N1cnJlbnRseUZsdXNoaW5nID0gZmFsc2U7XHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLl9mbHVzaFF1ZXVlID0gW107XHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLl9ydW5uaW5nID0gZmFsc2U7XHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLl90aW1lb3V0ID0gLTE7XHJcbiAgICBBV1RUcmFuc21pc3Npb25NYW5hZ2VyLl91cmxTdHJpbmcgPSAnP3FzcD10cnVlJmNvbnRlbnQtdHlwZT1hcHBsaWNhdGlvbiUyRmJvbmQtY29tcGFjdC1iaW5hcnkmY2xpZW50LWlkPU5PX0FVVEgmc2RrLXZlcnNpb249J1xyXG4gICAgICAgICsgVmVyc2lvbi5GdWxsVmVyc2lvblN0cmluZztcclxuICAgIHJldHVybiBBV1RUcmFuc21pc3Npb25NYW5hZ2VyO1xyXG59KCkpO1xyXG5leHBvcnRzLmRlZmF1bHQgPSBBV1RUcmFuc21pc3Npb25NYW5hZ2VyO1xyXG5cclxuXHJcbi8qKiovIH0pLFxyXG4vKiAxNSAqL1xyXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XHJcblxyXG5cclxuLyoqKi8gfSlcclxuLyoqKioqKi8gXSk7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcmlhLXdlYmpzLWNvbXBhY3Qtc2RrLTEuMi4yLmpzLm1hcCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./scripts/app/thirdparty/aria-webjs-compact-sdk-1.2.2.js\n')},0:function(n,t,i){i("./scripts/app/App_Floodgate.ts");n.exports=i("./scripts/app/App_InAppFeedback.ts")}}),function(n){occe.Floodgate=function(){"use strict";function t(){var u=[],e,t,o,f,r;occe.Resources.getSetting("OdcSup_FloodgateSurveyService_Rollout_Enabled").toLowerCase()==="true"?(e={"f7899ecb-b0e8-45d1-b325-301c2c3c443b":{Prompt:{Title:occe.Resources.getLocalizedString("L_Floodgate_Prompt_Title"),Question:occe.Resources.getLocalizedString("L_Floodgate_Prompt_Question"),YesLabel:occe.Resources.getLocalizedString("L_Floodgate_Prompt_YesLabel"),NoLabel:occe.Resources.getLocalizedString("L_Floodgate_Prompt_NoLabel")},Rating:{Question:occe.Resources.getLocalizedString("L_Floodgate_Rating_Question"),RatingValuesAscending:[occe.Resources.getLocalizedString("L_Floodgate_Rating_Value_1"),"2","3","4",occe.Resources.getLocalizedString("L_Floodgate_Rating_Value_5")]},Question:{Question:occe.Resources.getLocalizedString("L_Floodgate_FollowUpQuestion_Question")}},"8a3be85e-d31e-47cb-955a-9e6ab77a3ff8":{Prompt:{Title:occe.Resources.getLocalizedString("L_Floodgate_Prompt_Title"),Question:occe.Resources.getLocalizedString("L_Floodgate_Prompt_Question"),YesLabel:occe.Resources.getLocalizedString("L_Floodgate_Prompt_YesLabel"),NoLabel:occe.Resources.getLocalizedString("L_Floodgate_Prompt_NoLabel")},Rating:{Question:occe.Resources.getLocalizedString("L_Floodgate_Question_LanguageQuality"),RatingValuesAscending:[occe.Resources.getLocalizedString("L_Floodgate_Rating_Verbose_1"),occe.Resources.getLocalizedString("L_Floodgate_Rating_Verbose_2"),occe.Resources.getLocalizedString("L_Floodgate_Rating_Verbose_3"),occe.Resources.getLocalizedString("L_Floodgate_Rating_Verbose_4"),occe.Resources.getLocalizedString("L_Floodgate_Rating_Verbose_5")]},Question:{Question:occe.Resources.getLocalizedString("L_Floodgate_Question_TellUsMoreWhy")}}},t={CampaignId:occe.Resources.getSetting("OdcSup_FloodgateSurvey_CampaignId"),StartTimeUtc:occe.Resources.getSetting("OdcSup_FloodgateSurvey_StartTimeUtc"),EndTimeUtc:occe.Resources.getSetting("OdcSup_FloodgateSurvey_EndTimeUtc"),GovernedChannelType:parseInt(occe.Resources.getSetting("OdcSup_FloodgateSurvey_GovernedChannelType")),Scope:{Type:1},NominationScheme:{Type:0,PercentageNumerator:parseInt(occe.Resources.getSetting("OdcSup_FloodgateSurvey_NominationPercentage")),PercentageDenominator:100,NominationPeriod:{Type:0,IntervalSeconds:parseInt(occe.Resources.getSetting("OdcSup_FloodgateSurvey_NominationPeriod"))},CooldownPeriod:{Type:0,IntervalSeconds:parseInt(occe.Resources.getSetting("OdcSup_FloodgateSurvey_CooldownPeriod"))}},SurveyTemplate:{Type:2,ActivationEvent:{Type:0,Activity:"AppUsageTime",Count:parseInt(occe.Resources.getSetting("OdcSup_FloodgateSurvey_ActivationActivityCount")),IsAggregate:!0}}},t.SurveyTemplate.Content=e[t.CampaignId],u.push(t)):(o={CampaignId:"f7899ecb-b0e8-45d1-b325-301c2c3c443b",StartTimeUtc:"2018-12-07T00:00:00Z",EndTimeUtc:"9999-12-31T23:59:59Z",GovernedChannelType:0,Scope:{Type:1},NominationScheme:{Type:0,PercentageNumerator:parseInt(occe.Resources.getSetting("OdcSup_FloodgateSurvey_NominationPercentage")),PercentageDenominator:100,NominationPeriod:{Type:0,IntervalSeconds:parseInt(occe.Resources.getSetting("OdcSup_FloodgateSurvey_NominationPeriod"))},CooldownPeriod:{Type:0,IntervalSeconds:parseInt(occe.Resources.getSetting("OdcSup_FloodgateSurvey_CooldownPeriod"))}},SurveyTemplate:{Type:2,ActivationEvent:{Type:0,Activity:"AppUsageTime",Count:parseInt(occe.Resources.getSetting("OdcSup_FloodgateSurvey_TimeToNominate")),IsAggregate:!0},Content:{Prompt:{Title:occe.Resources.getLocalizedString("L_Floodgate_Prompt_Title"),Question:occe.Resources.getLocalizedString("L_Floodgate_Prompt_Question"),YesLabel:occe.Resources.getLocalizedString("L_Floodgate_Prompt_YesLabel"),NoLabel:occe.Resources.getLocalizedString("L_Floodgate_Prompt_NoLabel")},Rating:{Question:occe.Resources.getLocalizedString("L_Floodgate_Rating_Question"),RatingValuesAscending:[occe.Resources.getLocalizedString("L_Floodgate_Rating_Value_1"),"2","3","4",occe.Resources.getLocalizedString("L_Floodgate_Rating_Value_5")]},Question:{Question:occe.Resources.getLocalizedString("L_Floodgate_FollowUpQuestion_Question")}}}},u.push(o));window.OfficeBrowserFeedback=window.OfficeBrowserFeedback||{};window.OfficeBrowserFeedback.floodgate=window.OfficeBrowserFeedback.floodgate||{};window.OfficeBrowserFeedback.initOptions={appId:2258,stylesUrl:"/"+occe.Resources.getSetting("OdcSup_Content_Route_Prefix")+"/floodgate",intlUrl:"/"+occe.Resources.getSetting("OdcSup_Script_Route_Prefix")+"/floodgateintl/",environment:parseInt(occe.Resources.getSetting("OdcSup_FloodgateSurvey_Environment"))};OOGlobal!==null&&OOGlobal.Language!==null&&(window.OfficeBrowserFeedback.initOptions.locale=OOGlobal.Language);f=i();f!==null&&(window.OfficeBrowserFeedback.initOptions.sessionId=f);window.OfficeBrowserFeedback.initOptions.telemetryGroup={audienceGroup:occe.Resources.getMetadata("awa-env")};window.OfficeBrowserFeedback.floodgate.initOptions={campaignDefinitions:u};occe.Resources.getSetting("OdcSup_FloodgateSurveyService_Rollout_Enabled").toLowerCase()==="true"?window.OfficeBrowserFeedback.floodgate.initialize().then(function(){window.OfficeBrowserFeedback.floodgate.start();setInterval(function(){window.OfficeBrowserFeedback.floodgate.getEngine().getActivityListener().logActivity(occe.Resources.getSetting("OdcSup_FloodgateSurvey_ActivationActivity"),Math.round(occe.Resources.getSetting("OdcSup_FloodgateSurvey_ActivityInterval")/1e3))},parseInt(occe.Resources.getSetting("OdcSup_FloodgateSurvey_ActivityInterval")))}):window.OfficeBrowserFeedback.floodgate.initialize().then(function(){window.OfficeBrowserFeedback.floodgate.start();setInterval(function(){window.OfficeBrowserFeedback.floodgate.getEngine().getActivityListener().logActivity("AppUsageTime",Math.round(occe.Resources.getSetting("OdcSup_FloodgateSurvey_ActivityInterval")/1e3))},parseInt(occe.Resources.getSetting("OdcSup_FloodgateSurvey_ActivityInterval")))});r=n(window);r.focus(function(){window.OfficeBrowserFeedback.floodgate&&window.OfficeBrowserFeedback.floodgate.start()});r.blur(function(){window.OfficeBrowserFeedback.floodgate&&window.OfficeBrowserFeedback.floodgate.stop()});r.on("unload",function(){window.OfficeBrowserFeedback.floodgate&&window.OfficeBrowserFeedback.floodgate.stop()})}function i(){var t=occe.GetCookie("MSFPC"),n;return t===null?null:(n=/GUID=([a-f\d]{8})([a-f\d]{4})([a-f\d]{4})([a-f\d]{4})([a-f\d]{12})/.exec(t),n?n.slice(1).join("-"):null)}return{initializeFloodgate:t}}()}(jQuery),function(n){"use strict";n(function(){occe.Floodgate.initializeFloodgate()})}(jQuery)