-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path1906.eab326d2.iframe.bundle.js
More file actions
2 lines (2 loc) · 163 KB
/
1906.eab326d2.iframe.bundle.js
File metadata and controls
2 lines (2 loc) · 163 KB
1
2
"use strict";(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[1906],{"./src/codebridge/locale-do-not-import.js":(module,__unused_webpack_exports,__webpack_require__)=>{var _i18nStringTracker=_interopRequireDefault(__webpack_require__("./src/util/i18nStringTracker.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var locale=(0,_interopRequireDefault(__webpack_require__("./src/util/safeLoadLocale.js")).default)("codebridge_locale");locale=(0,_i18nStringTracker.default)(locale,"codebridge"),module.exports=locale},"./src/sharedComponents/Spinner.jsx":(module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_FontAwesome=_interopRequireDefault(__webpack_require__("./src/legacySharedComponents/FontAwesome.jsx")),_locale=_interopRequireDefault(__webpack_require__("./src/util/locale-do-not-import.js"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}!function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}(exports.default=function(_React$Component){function Spinner(){return _React$Component.apply(this,arguments)||this}return function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}(Spinner,_React$Component),Spinner.prototype.render=function render(){var _this$props=this.props,size=_this$props.size,style=_this$props.style,displaySize="small"===size?"":"medium"===size?"fa-2x":"fa-3x";return _react.default.createElement(_FontAwesome.default,{style,icon:"spinner",className:"fa-pulse ".concat(displaySize),title:_locale.default.loading(),id:"uitest-spinner"})},Spinner}(_react.default.Component),"propTypes",{size:_propTypes.default.oneOf(["small","medium","large"]),style:_propTypes.default.object}),module.exports=exports.default},"./src/codebridge/constants.ts":(__unused_webpack_module,exports)=>{var MiniApps;Object.defineProperty(exports,"__esModule",{value:!0}),exports.INVALID_NAME_ERROR=exports.codebridgeLabsWithConsole=exports.MAZE_FILE_NAME=exports.MiniApps=exports.DEFAULT_FOLDER_ID=void 0,exports.DEFAULT_FOLDER_ID="0",function(MiniApps){MiniApps.Neighborhood="neighborhood"}(MiniApps||(exports.MiniApps=MiniApps={})),exports.MAZE_FILE_NAME="serialized_maze.txt",exports.codebridgeLabsWithConsole=["pythonlab","javalab"],exports.INVALID_NAME_ERROR="Names must be only letters, numbers, dashes, or underscores."},"./src/codebridge/locale.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=__webpack_require__("./src/codebridge/locale-do-not-import.js")},"./src/codebridge/utils/aiTutorUtils.ts":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.enableUserAddedSelectionContext=void 0;exports.enableUserAddedSelectionContext=function(appName){return"weblab2"===appName}},"./src/codebridge/utils/editableFileType.ts":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.editableFileType=void 0;var defaultEditableFileTypesArray=["html","css"];exports.editableFileType=function(language,editableFileTypesArray){return void 0===editableFileTypesArray&&(editableFileTypesArray=defaultEditableFileTypesArray),new Set(editableFileTypesArray).has(language)}},"./src/codebridge/utils/fileUtils.ts":function(__unused_webpack_module,exports,__webpack_require__){var __assign=this&&this.__assign||function(){return __assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<n;i++)for(var p in s=arguments[i])Object.prototype.hasOwnProperty.call(s,p)&&(t[p]=s[p]);return t},__assign.apply(this,arguments)},__read=this&&this.__read||function(o,n){var m="function"==typeof Symbol&&o[Symbol.iterator];if(!m)return o;var r,e,i=m.call(o),ar=[];try{for(;(void 0===n||n-- >0)&&!(r=i.next()).done;)ar.push(r.value)}catch(error){e={error}}finally{try{r&&!r.done&&(m=i.return)&&m.call(i)}finally{if(e)throw e.error}}return ar},__spreadArray=this&&this.__spreadArray||function(to,from,pack){if(pack||2===arguments.length)for(var ar,i=0,l=from.length;i<l;i++)!ar&&i in from||(ar||(ar=Array.prototype.slice.call(from,0,i)),ar[i]=from[i]);return to.concat(ar||Array.prototype.slice.call(from))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.shouldShowFile=function shouldShowFile(file){if(!file)return!1;return(0,utils_1.getAppOptionsEditBlocks)()===constants_1.START_SOURCES?file.type!==types_1.ProjectFileType.SYSTEM_SUPPORT:file.type===types_1.ProjectFileType.STARTER||file.type===types_1.ProjectFileType.LOCKED_STARTER||!file.type},exports.getFileIconNameAndStyle=function getFileIconNameAndStyle(file){if((0,utils_1.getAppOptionsEditBlocks)()!==constants_1.START_SOURCES){var fileType=file.name.split(".").pop(),iconConfig=FILE_TYPE_ICON_MAP[fileType];return iconConfig||{iconName:"file",iconStyle:"regular"}}return file.type===types_1.ProjectFileType.VALIDATION?{iconName:"flask",iconStyle:"solid"}:file.type===types_1.ProjectFileType.SUPPORT?{iconName:"eye-slash",iconStyle:"regular"}:file.type===types_1.ProjectFileType.LOCKED_STARTER?{iconName:"lock",iconStyle:"solid"}:{iconName:"eye",iconStyle:"regular"}},exports.prepareSourceForLevelbuilderSave=function prepareSourceForLevelbuilderSave(source){var _a;if(!source)return{parsedSource:null,validationFile:null};var newFiles=Object.fromEntries(Object.entries(source.files).filter((function(_a){var _b=__read(_a,2),file=(_b[0],_b[1]);return file.type!==types_1.ProjectFileType.VALIDATION&&file.type!==types_1.ProjectFileType.SYSTEM_SUPPORT}))),validationFile=getValidationFromSource(source)||null,openFiles=source.openFiles;validationFile&&(null===(_a=source.openFiles)||void 0===_a?void 0:_a.includes(validationFile.id))&&(openFiles=source.openFiles.filter((function(id){return id!==(null==validationFile?void 0:validationFile.id)})),validationFile=__assign(__assign({},validationFile),{active:!1}));return{parsedSource:__assign(__assign({},source),{files:newFiles,openFiles}),validationFile}},exports.combineStartSourcesAndValidation=function combineStartSourcesAndValidation(source,validationFile){var _a,returnValue=source;source&&validationFile&&(returnValue=__assign(__assign({},source),{files:__assign(__assign({},source.files),(_a={},_a[validationFile.id]=__assign({},validationFile),_a)),openFiles:source.openFiles?__spreadArray(__spreadArray([],__read(source.openFiles),!1),[validationFile.id],!1):[validationFile.id]}));return returnValue},exports.getValidationFromSource=getValidationFromSource;var constants_1=__webpack_require__("./src/lab2/constants.ts"),utils_1=__webpack_require__("./src/lab2/projects/utils.ts"),types_1=__webpack_require__("./src/lab2/types.ts"),FILE_TYPE_ICON_MAP={py:{iconName:"python",iconStyle:"regular",isBrand:!0},csv:{iconName:"file-csv",iconStyle:"solid",isBrand:!1},txt:{iconName:"file-lines",iconStyle:"solid",isBrand:!1},md:{iconName:"markdown",iconStyle:"regular",isBrand:!0},html:{iconName:"file-code",iconStyle:"solid",isBrand:!1},js:{iconName:"js",iconStyle:"regular",isBrand:!0},json:{iconName:"brackets-curly",iconStyle:"solid",isBrand:!1},css:{iconName:"css",iconStyle:"regular",isBrand:!0},jpg:{iconName:"image",iconStyle:"solid",isBrand:!1},png:{iconName:"image",iconStyle:"solid",isBrand:!1},jpeg:{iconName:"image",iconStyle:"solid",isBrand:!1},webp:{iconName:"image",iconStyle:"solid",isBrand:!1}};function getValidationFromSource(source){return Object.values(source.files).find((function(f){return f.type===types_1.ProjectFileType.VALIDATION}))}},"./src/codebridge/utils/findFile.ts":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.findFile=void 0;exports.findFile=function(sources,filename,folderId){if(sources)return Object.values(sources.files).find((function(file){return file.name===filename&&file.folderId===folderId}))}},"./src/codebridge/utils/findFolder.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.findFolder=void 0;var constants_1=__webpack_require__("./src/codebridge/constants.ts");exports.findFolder=function(folderLineage,options){return void 0===folderLineage&&(folderLineage=[]),folderLineage.reduce((function(parentId,name){if(!name.length)return parentId;var folder=Object.values(options.folders).find((function(f){return f.name===name&&f.parentId===parentId}));if(!folder){if(options.required)throw new Error("Could not find folder ".concat(folderLineage.join("/")));return constants_1.DEFAULT_FOLDER_ID}return folder.id}),constants_1.DEFAULT_FOLDER_ID)}},"./src/codebridge/utils/getEmptyProject.ts":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.getEmptyProject=void 0;exports.getEmptyProject=function(){return{files:{},folders:{}}}},"./src/codebridge/utils/getErrorMessage.ts":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.getErrorMessage=void 0;exports.getErrorMessage=function(e){return"string"==typeof e?e:e instanceof Error?e.message:""}},"./src/codebridge/utils/getFileNameWithNumberSuffix.ts":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.getFileNameWithNumberSuffix=void 0;exports.getFileNameWithNumberSuffix=function(filename,separator){void 0===separator&&(separator="_");var parts=filename.split("."),fileExtension=parts.pop(),nameParts=parts.join(".").split(separator),lastPart=nameParts[nameParts.length-1],numberSuffix=/^\d+$/.test(lastPart)?parseInt(lastPart,10):NaN,newNumber=1;Number.isInteger(numberSuffix)&&(newNumber=numberSuffix+1,nameParts.pop());var newName="".concat(nameParts.join(separator)).concat(separator).concat(newNumber);return"".concat(newName,".").concat(fileExtension)}},"./src/codebridge/utils/getFilesByLanguage.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.getFilesByLanguage=void 0;var multiFileSourceUtils_1=__webpack_require__("./src/lab2/utils/multiFileSourceUtils.ts");exports.getFilesByLanguage=function(source,language){return source?Object.values(source.files).filter((function(file){return(0,multiFileSourceUtils_1.getFileExtension)(file.name)===language})):[]}},"./src/codebridge/utils/getFolderChildren.ts":function(__unused_webpack_module,exports){var __read=this&&this.__read||function(o,n){var m="function"==typeof Symbol&&o[Symbol.iterator];if(!m)return o;var r,e,i=m.call(o),ar=[];try{for(;(void 0===n||n-- >0)&&!(r=i.next()).done;)ar.push(r.value)}catch(error){e={error}}finally{try{r&&!r.done&&(m=i.return)&&m.call(i)}finally{if(e)throw e.error}}return ar},__spreadArray=this&&this.__spreadArray||function(to,from,pack){if(pack||2===arguments.length)for(var ar,i=0,l=from.length;i<l;i++)!ar&&i in from||(ar||(ar=Array.prototype.slice.call(from,0,i)),ar[i]=from[i]);return to.concat(ar||Array.prototype.slice.call(from))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getFolderChildren=void 0;exports.getFolderChildren=function(folderId,projectFolders){var children=projectFolders.filter((function(folder){return folder.parentId===folderId}));if(0===children.length)return[];var allChildIds=children.map((function(child){return child.id}));return children.forEach((function(child){allChildIds.push.apply(allChildIds,__spreadArray([],__read((0,exports.getFolderChildren)(child.id,projectFolders)),!1))})),allChildIds}},"./src/codebridge/utils/getFolderLineage.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.getFolderLineage=void 0;var constants_1=__webpack_require__("./src/codebridge/constants.ts");exports.getFolderLineage=function(folderId,projectFolders){if(folderId===constants_1.DEFAULT_FOLDER_ID)return[constants_1.DEFAULT_FOLDER_ID];var folder=projectFolders.find((function(f){return f.id===folderId}));if(!folder)return[];for(var parents=[];folder&&!parents.includes(folder.id);)parents.unshift(folder.id),folder=projectFolders.find((function(f){return f.id===(null==folder?void 0:folder.parentId)}));return parents.unshift(constants_1.DEFAULT_FOLDER_ID),parents}},"./src/codebridge/utils/getFolderPath.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.getFolderPath=void 0;var constants_1=__webpack_require__("./src/codebridge/constants.ts"),getFolderLineage_1=__webpack_require__("./src/codebridge/utils/getFolderLineage.ts");exports.getFolderPath=function(folderId,projectFolders){return folderId===constants_1.DEFAULT_FOLDER_ID?"/":(0,getFolderLineage_1.getFolderLineage)(folderId,Object.values(projectFolders)).map((function(id){return id===constants_1.DEFAULT_FOLDER_ID?"":projectFolders[id].name})).join("/")}},"./src/codebridge/utils/getOpenFiles.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.getOpenFileIds=exports.getOpenFiles=void 0;var fileUtils_1=__webpack_require__("./src/codebridge/utils/fileUtils.ts"),sortFilesByName_1=__webpack_require__("./src/codebridge/utils/sortFilesByName.ts");exports.getOpenFiles=function(source){return source.openFiles?source.openFiles.filter((function(f){return(0,fileUtils_1.shouldShowFile)(source.files[f])})).map((function(fileId){return source.files[fileId]})):(0,sortFilesByName_1.sortFilesByName)(source,{mustBeOpen:!0}).filter((function(f){return(0,fileUtils_1.shouldShowFile)(f)}))};exports.getOpenFileIds=function(source){return(0,exports.getOpenFiles)(source).map((function(file){return file.id}))}},"./src/codebridge/utils/getPossibleDestinationFoldersForFile.ts":function(__unused_webpack_module,exports,__webpack_require__){var __read=this&&this.__read||function(o,n){var m="function"==typeof Symbol&&o[Symbol.iterator];if(!m)return o;var r,e,i=m.call(o),ar=[];try{for(;(void 0===n||n-- >0)&&!(r=i.next()).done;)ar.push(r.value)}catch(error){e={error}}finally{try{r&&!r.done&&(m=i.return)&&m.call(i)}finally{if(e)throw e.error}}return ar},__spreadArray=this&&this.__spreadArray||function(to,from,pack){if(pack||2===arguments.length)for(var ar,i=0,l=from.length;i<l;i++)!ar&&i in from||(ar||(ar=Array.prototype.slice.call(from,0,i)),ar[i]=from[i]);return to.concat(ar||Array.prototype.slice.call(from))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPossibleDestinationFoldersForFile=void 0;var constants_1=__webpack_require__("./src/codebridge/constants.ts"),validateFileName_1=__webpack_require__("./src/codebridge/utils/validateFileName.ts");exports.getPossibleDestinationFoldersForFile=function(_a){var file=_a.file,projectFiles=_a.projectFiles,projectFolders=_a.projectFolders,isStartMode=_a.isStartMode,validationFile=_a.validationFile;return __spreadArray([{id:constants_1.DEFAULT_FOLDER_ID}],__read(Object.values(projectFolders)),!1).filter((function(f){return!Boolean((0,validateFileName_1.validateFileName)({fileName:file.name,folderId:f.id,projectFiles,isStartMode,validationFile}))}))}},"./src/codebridge/utils/getPossibleDestinationFoldersForFolder.ts":function(__unused_webpack_module,exports,__webpack_require__){var __read=this&&this.__read||function(o,n){var m="function"==typeof Symbol&&o[Symbol.iterator];if(!m)return o;var r,e,i=m.call(o),ar=[];try{for(;(void 0===n||n-- >0)&&!(r=i.next()).done;)ar.push(r.value)}catch(error){e={error}}finally{try{r&&!r.done&&(m=i.return)&&m.call(i)}finally{if(e)throw e.error}}return ar},__spreadArray=this&&this.__spreadArray||function(to,from,pack){if(pack||2===arguments.length)for(var ar,i=0,l=from.length;i<l;i++)!ar&&i in from||(ar||(ar=Array.prototype.slice.call(from,0,i)),ar[i]=from[i]);return to.concat(ar||Array.prototype.slice.call(from))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPossibleDestinationFoldersForFolder=void 0;var constants_1=__webpack_require__("./src/codebridge/constants.ts"),validateFolderMove_1=__webpack_require__("./src/codebridge/utils/validateFolderMove.ts");exports.getPossibleDestinationFoldersForFolder=function(_a){var folder=_a.folder,projectFolders=_a.projectFolders;return __spreadArray([{id:constants_1.DEFAULT_FOLDER_ID}],__read(Object.values(projectFolders)),!1).filter((function(f){return f.id!==folder.id&&!Boolean((0,validateFolderMove_1.validateFolderMove)(folder.name,f.id,projectFolders,folder.id))}))}},"./src/codebridge/utils/getUrlForFile.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.getUrlForFile=void 0;var multiFileSourceUtils_1=__webpack_require__("./src/lab2/utils/multiFileSourceUtils.ts");exports.getUrlForFile=function(file,parentOrigin,externalFileTypes){var ext=(0,multiFileSourceUtils_1.getFileExtension)(file.name),fileType="";if(externalFileTypes.includes(ext))return"".concat(parentOrigin).concat(null==file?void 0:file.url)||"";"css"===ext||"csv"===ext?fileType="text/".concat(ext):"js"===ext&&(fileType="text/javascript");var blob=new Blob([file.contents],{type:fileType});return URL.createObjectURL(blob)}},"./src/codebridge/utils/hasPreview.ts":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.hasPreview=function hasPreview(miniApp){return void 0!==miniApp}},"./src/codebridge/utils/index.ts":function(__unused_webpack_module,exports,__webpack_require__){var __createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__exportStar=this&&this.__exportStar||function(m,exports){for(var p in m)"default"===p||Object.prototype.hasOwnProperty.call(exports,p)||__createBinding(exports,m,p)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(__webpack_require__("./src/codebridge/utils/aiTutorUtils.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/editableFileType.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/getUrlForFile.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/isDuplicateFileName.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/isDuplicateFolderName.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/isValidFileName.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/isValidFolderName.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/fileUtils.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/findFile.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/findFolder.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/getEmptyProject.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/getErrorMessage.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/getFileNameWithNumberSuffix.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/getFilesByLanguage.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/getFolderChildren.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/getFolderLineage.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/getFolderPath.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/getOpenFiles.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/getPossibleDestinationFoldersForFile.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/getPossibleDestinationFoldersForFolder.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/hasPreview.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/repairOpenFiles.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/sortFilesByName.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/uniqueFileName.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/validateBackpackFileName.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/validateFileName.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/validateFolderMove.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/validateFolderName.ts"),exports),__exportStar(__webpack_require__("./src/codebridge/utils/viewableImageFileType.ts"),exports)},"./src/codebridge/utils/isDuplicateFileName.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.isDuplicateFileName=exports.DuplicateFileError=void 0;var DuplicateFileError,types_1=__webpack_require__("./src/lab2/types.ts");!function(DuplicateFileError){DuplicateFileError.DUPLICATE_FILE="DUPLICATE_FILE",DuplicateFileError.DUPLICATE_SUPPORT_FILE="DUPLICATE_SUPPORT_FILE"}(DuplicateFileError||(exports.DuplicateFileError=DuplicateFileError={}));exports.isDuplicateFileName=function(_a){var fileName=_a.fileName,folderId=_a.folderId,projectFiles=_a.projectFiles,isStartMode=_a.isStartMode,validationFile=_a.validationFile;if(!isStartMode&&(null==validationFile?void 0:validationFile.name)===fileName)return DuplicateFileError.DUPLICATE_SUPPORT_FILE;var existingFile=Object.values(projectFiles).find((function(f){return f.name===fileName&&f.folderId===folderId}));return!!existingFile&&(existingFile.type===types_1.ProjectFileType.SUPPORT||existingFile.type===types_1.ProjectFileType.VALIDATION||existingFile.type===types_1.ProjectFileType.SYSTEM_SUPPORT?DuplicateFileError.DUPLICATE_SUPPORT_FILE:DuplicateFileError.DUPLICATE_FILE)}},"./src/codebridge/utils/isDuplicateFolderName.ts":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.isDuplicateFolderName=void 0;exports.isDuplicateFolderName=function(_a){var folderName=_a.folderName,parentId=_a.parentId,projectFolders=_a.projectFolders;return Object.values(projectFolders).some((function(f){return f.name===folderName&&f.parentId===parentId}))}},"./src/codebridge/utils/isValidFileName.ts":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.isValidFileName=void 0;exports.isValidFileName=function(name,hasDropdown){return void 0===name&&(name=""),void 0===hasDropdown&&(hasDropdown=!1),hasDropdown?Boolean(name.match(/^[\w-]+$/)):Boolean(name.match(/^[\w-]+(\.\w+)?$/))}},"./src/codebridge/utils/isValidFolderName.ts":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.isValidFolderName=void 0;exports.isValidFolderName=function(name){return void 0===name&&(name=""),Boolean(name.match(/^[\w-]+$/))}},"./src/codebridge/utils/repairOpenFiles.ts":function(__unused_webpack_module,exports){var __assign=this&&this.__assign||function(){return __assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<n;i++)for(var p in s=arguments[i])Object.prototype.hasOwnProperty.call(s,p)&&(t[p]=s[p]);return t},__assign.apply(this,arguments)},__read=this&&this.__read||function(o,n){var m="function"==typeof Symbol&&o[Symbol.iterator];if(!m)return o;var r,e,i=m.call(o),ar=[];try{for(;(void 0===n||n-- >0)&&!(r=i.next()).done;)ar.push(r.value)}catch(error){e={error}}finally{try{r&&!r.done&&(m=i.return)&&m.call(i)}finally{if(e)throw e.error}}return ar},__spreadArray=this&&this.__spreadArray||function(to,from,pack){if(pack||2===arguments.length)for(var ar,i=0,l=from.length;i<l;i++)!ar&&i in from||(ar||(ar=Array.prototype.slice.call(from,0,i)),ar[i]=from[i]);return to.concat(ar||Array.prototype.slice.call(from))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.repairOpenFiles=void 0;exports.repairOpenFiles=function(source){var openFiles=source.openFiles?__spreadArray([],__read(source.openFiles),!1):[],updatedOpenList=!1;return Object.values(source.files).forEach((function(file){!file.open&&!file.active||openFiles.includes(file.id)||(openFiles.push(file.id),updatedOpenList=!0)})),updatedOpenList?__assign(__assign({},source),{openFiles}):source}},"./src/codebridge/utils/sortFilesByName.ts":(__unused_webpack_module,exports)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.sortFilesByName=void 0;exports.sortFilesByName=function(source,options){return void 0===options&&(options={mustBeOpen:!0}),Object.values(source.files).filter((function(f){var _a;return!options.mustBeOpen||(null===(_a=source.openFiles)||void 0===_a?void 0:_a.includes(f.id))&&options.mustBeOpen})).sort((function(a,b){return a.name.localeCompare(b.name)}))}},"./src/codebridge/utils/uniqueFileName.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.uniqueFileName=void 0;var getFileNameWithNumberSuffix_1=__webpack_require__("./src/codebridge/utils/getFileNameWithNumberSuffix.ts");exports.uniqueFileName=function(filename,existing,separator){void 0===separator&&(separator="_");for(var taken=new Set(existing),candidate=filename;taken.has(candidate);)candidate=(0,getFileNameWithNumberSuffix_1.getFileNameWithNumberSuffix)(candidate,separator);return candidate}},"./src/codebridge/utils/validateBackpackFileName.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.validateBackpackFileName=function validateBackpackFileName(selectedFile,projectFiles,validationFile){var isDuplicateName=(0,isDuplicateFileName_1.isDuplicateFileName)({fileName:selectedFile,folderId:constants_1.DEFAULT_FOLDER_ID,projectFiles,isStartMode:!1,validationFile}),isSupportFileName=isDuplicateName===isDuplicateFileName_1.DuplicateFileError.DUPLICATE_SUPPORT_FILE,newFileName=selectedFile;for(;isDuplicateName;)newFileName=(0,getFileNameWithNumberSuffix_1.getFileNameWithNumberSuffix)(newFileName),isDuplicateName=(0,isDuplicateFileName_1.isDuplicateFileName)({fileName:newFileName,folderId:constants_1.DEFAULT_FOLDER_ID,projectFiles,isStartMode:!1,validationFile});return{isSupportFileName,newFileName}};var constants_1=__webpack_require__("./src/codebridge/constants.ts"),getFileNameWithNumberSuffix_1=__webpack_require__("./src/codebridge/utils/getFileNameWithNumberSuffix.ts"),isDuplicateFileName_1=__webpack_require__("./src/codebridge/utils/isDuplicateFileName.ts")},"./src/codebridge/utils/validateFileName.ts":function(__unused_webpack_module,exports,__webpack_require__){var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.validateFileNameForModal=exports.validateFileName=void 0;var constants_1=__webpack_require__("./src/codebridge/constants.ts"),locale_1=__importDefault(__webpack_require__("./src/codebridge/locale.ts")),isDuplicateFileName_1=__webpack_require__("./src/codebridge/utils/isDuplicateFileName.ts"),isValidFileName_1=__webpack_require__("./src/codebridge/utils/isValidFileName.ts");exports.validateFileName=function(_a){var fileName=_a.fileName,folderId=_a.folderId,projectFiles=_a.projectFiles,isStartMode=_a.isStartMode,validationFile=_a.validationFile,validFileTypes=_a.validFileTypes,selectedFileType=_a.selectedFileType;if(fileName.length){if(selectedFileType);else{var extension=fileName.split(".").pop();if(!extension||extension===fileName)return locale_1.default.noFileExtensionError();if(validFileTypes&&!validFileTypes.includes(extension)){var validFileTypesString=validFileTypes.join(", ");return"".concat(locale_1.default.invalidFileType({fileType:extension})," ").concat(locale_1.default.validFileTypesInfo({validFileTypes:validFileTypesString}))}}if(!(0,isValidFileName_1.isValidFileName)(fileName,Boolean(selectedFileType)))return constants_1.INVALID_NAME_ERROR;var fullFileName=selectedFileType?"".concat(fileName,".").concat(selectedFileType):fileName,duplicateFileError=(0,isDuplicateFileName_1.isDuplicateFileName)({fileName:fullFileName,folderId,projectFiles,isStartMode,validationFile});return duplicateFileError?duplicateFileError===isDuplicateFileName_1.DuplicateFileError.DUPLICATE_SUPPORT_FILE?locale_1.default.duplicateSupportFileError({fileName:fullFileName}):locale_1.default.duplicateFileError({fileName:fullFileName}):void 0}};exports.validateFileNameForModal=function(args){var errorMessage=(0,exports.validateFileName)(args);if(errorMessage)return{text:errorMessage,type:"error"}}},"./src/codebridge/utils/validateFolderMove.ts":function(__unused_webpack_module,exports,__webpack_require__){var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.validateFolderMove=void 0;var locale_1=__importDefault(__webpack_require__("./src/codebridge/locale.ts")),getFolderChildren_1=__webpack_require__("./src/codebridge/utils/getFolderChildren.ts"),validateFolderName_1=__webpack_require__("./src/codebridge/utils/validateFolderName.ts");exports.validateFolderMove=function(folderName,parentId,projectFolders,folderId){var validationError=(0,validateFolderName_1.validateFolderName)({folderName,parentId,projectFolders});validationError||(0,getFolderChildren_1.getFolderChildren)(folderId,Object.values(projectFolders)).includes(parentId)&&(validationError=locale_1.default.moveFolderErrorChild());return validationError}},"./src/codebridge/utils/validateFolderName.ts":function(__unused_webpack_module,exports,__webpack_require__){var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.validateFolderNameForModal=exports.validateFolderName=void 0;var constants_1=__webpack_require__("./src/codebridge/constants.ts"),locale_1=__importDefault(__webpack_require__("./src/codebridge/locale.ts")),isDuplicateFolderName_1=__webpack_require__("./src/codebridge/utils/isDuplicateFolderName.ts"),isValidFolderName_1=__webpack_require__("./src/codebridge/utils/isValidFolderName.ts");exports.validateFolderName=function(_a){var folderName=_a.folderName,parentId=_a.parentId,projectFolders=_a.projectFolders;if(folderName.length)return(0,isValidFolderName_1.isValidFolderName)(folderName)?(0,isDuplicateFolderName_1.isDuplicateFolderName)({folderName,parentId,projectFolders})?locale_1.default.duplicateFolderError({folderName}):void 0:constants_1.INVALID_NAME_ERROR};exports.validateFolderNameForModal=function(args){var errorMessage=(0,exports.validateFolderName)(args);if(errorMessage)return{text:errorMessage,type:"error"}}},"./src/codebridge/utils/viewableImageFileType.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.viewableImageFileType=void 0;var constants_1=__webpack_require__("./src/weblab2/constants.ts");exports.viewableImageFileType=function(extension,viewableImageFileTypesArray){return void 0===viewableImageFileTypesArray&&(viewableImageFileTypesArray=constants_1.WEBLAB2_IMAGE_FILE_TYPES),new Set(viewableImageFileTypesArray).has(extension)}},"./src/lab2/constants.ts":(__unused_webpack_module,exports)=>{var PERMISSIONS,WARNING_BANNER_MESSAGES,FontSize;Object.defineProperty(exports,"__esModule",{value:!0}),exports.INITIAL_VERSION_ID=exports.FontSize=exports.PREDICT_FREE_RESPONSE_DEFAULT_HEIGHT=exports.WARNING_BANNER_MESSAGES=exports.TEXT_BASED_LABS=exports.PROJECT_TYPES_USING_NEW_SHARE_DIALOG=exports.WIDGET2_SOURCES=exports.EDIT_EXEMPLAR=exports.TOOLBOX_BLOCKS=exports.START_SOURCES=exports.PERMISSIONS=exports.MAIN_PYTHON_FILE=exports.LABS_WITH_JSON_SOURCES=exports.BLOCKLY_LABS=exports.SOURCE_FILE=void 0,exports.SOURCE_FILE="main.json",exports.BLOCKLY_LABS=["dance","music"],exports.LABS_WITH_JSON_SOURCES=["aichat"],exports.MAIN_PYTHON_FILE="main.py",function(PERMISSIONS){PERMISSIONS.LEVELBUILDER="levelbuilder",PERMISSIONS.PROJECT_VALIDATOR="project_validator"}(PERMISSIONS||(exports.PERMISSIONS=PERMISSIONS={})),exports.START_SOURCES="start_sources",exports.TOOLBOX_BLOCKS="toolbox_blocks",exports.EDIT_EXEMPLAR="edit_exemplar",exports.WIDGET2_SOURCES="widget2_sources",exports.PROJECT_TYPES_USING_NEW_SHARE_DIALOG=["music","pythonlab","weblab2","music_dance_ai"],exports.TEXT_BASED_LABS=["aichat","pythonlab","weblab2"],function(WARNING_BANNER_MESSAGES){WARNING_BANNER_MESSAGES.STANDARD="You are editing start sources.",WARNING_BANNER_MESSAGES.TEMPLATE="WARNING: You are editing start sources for a level with a template. Start sources should be defined on the template.",WARNING_BANNER_MESSAGES.LOCK_FILES="Reminder: lock all start files your validation file references.",WARNING_BANNER_MESSAGES.TOOLBOX_MODE="You are editing toolbox blocks.",WARNING_BANNER_MESSAGES.EXEMPLAR_MODE="You are editing exemplar sources.",WARNING_BANNER_MESSAGES.VIEWING_EXEMPLAR="You are viewing an example solution.",WARNING_BANNER_MESSAGES.VIEWING_VERSION="You are viewing an older version of this project. To continue working, you can either restore this version or go back to the current version.",WARNING_BANNER_MESSAGES.EDITING_WIDGET2="You are editing a widget2 ({widgetId}). Changes will affect all levels that use it."}(WARNING_BANNER_MESSAGES||(exports.WARNING_BANNER_MESSAGES=WARNING_BANNER_MESSAGES={})),exports.PREDICT_FREE_RESPONSE_DEFAULT_HEIGHT=50,function(FontSize){FontSize[FontSize.Tiny=10]="Tiny",FontSize[FontSize.Small=13]="Small",FontSize[FontSize.Medium=17]="Medium",FontSize[FontSize.Large=22]="Large",FontSize[FontSize.Huge=27]="Huge"}(FontSize||(exports.FontSize=FontSize={})),exports.INITIAL_VERSION_ID="initial-version"},"./src/lab2/projects/utils.ts":function(__unused_webpack_module,exports,__webpack_require__){var ownKeys,__createBinding=this&&this.__createBinding||(Object.create?function(o,m,k,k2){void 0===k2&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);desc&&!("get"in desc?!m.__esModule:desc.writable||desc.configurable)||(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}:function(o,m,k,k2){void 0===k2&&(k2=k),o[k2]=m[k]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(o,v){Object.defineProperty(o,"default",{enumerable:!0,value:v})}:function(o,v){o.default=v}),__importStar=this&&this.__importStar||(ownKeys=function(o){return ownKeys=Object.getOwnPropertyNames||function(o){var ar=[];for(var k in o)Object.prototype.hasOwnProperty.call(o,k)&&(ar[ar.length]=k);return ar},ownKeys(o)},function(mod){if(mod&&mod.__esModule)return mod;var result={};if(null!=mod)for(var k=ownKeys(mod),i=0;i<k.length;i++)"default"!==k[i]&&__createBinding(result,mod,k[i]);return __setModuleDefault(result,mod),result}),__importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getStandaloneProjectId=function getStandaloneProjectId(){if((0,getScriptData_1.hasScriptData)("script[data-appoptions]")){return(0,getScriptData_1.default)("appoptions").channel}},exports.getAppOptionsLevelId=function getAppOptionsLevelId(){if((0,getScriptData_1.hasScriptData)("script[data-appoptions]")){return(0,getScriptData_1.default)("appoptions").levelId}},exports.getAppOptionsEditBlocks=getAppOptionsEditBlocks,exports.getIsStartMode=function getIsStartMode(){return getAppOptionsEditBlocks()===constants_1.START_SOURCES},exports.getAppOptionsEditingExemplar=function getAppOptionsEditingExemplar(){if((0,getScriptData_1.hasScriptData)("script[data-appoptions]")){return(0,getScriptData_1.default)("appoptions").isEditingExemplar}},exports.getAppOptionsViewingExemplar=function getAppOptionsViewingExemplar(){if((0,getScriptData_1.hasScriptData)("script[data-appoptions]")){return(0,getScriptData_1.default)("appoptions").isViewingExemplar}},exports.getAppOptionsTheme=function getAppOptionsTheme(){if((0,getScriptData_1.hasScriptData)("script[data-appoptions]")){return(0,getScriptData_1.default)("appoptions").theme}},exports.getIsShareView=function getIsShareView(){if((0,getScriptData_1.hasScriptData)("script[data-appoptions]")){return(0,getScriptData_1.default)("appoptions").share}},exports.getPublicCaching=function getPublicCaching(){if((0,getScriptData_1.hasScriptData)("script[data-appoptions]")){return(0,getScriptData_1.default)("appoptions").publicCaching}},exports.getFileByName=function getFileByName(files,name){for(var fileId in files)if(files[fileId].name===name)return files[fileId];return null},exports.getActiveFileForSource=function getActiveFileForSource(source){var files=Object.values(source.files),isStartMode=getAppOptionsEditBlocks()===constants_1.START_SOURCES,visibleFiles=files.filter((function(f){return isStartMode&&f.type!==types_1.ProjectFileType.SYSTEM_SUPPORT||!f.type||f.type===types_1.ProjectFileType.STARTER||f.type===types_1.ProjectFileType.LOCKED_STARTER}));return visibleFiles.find((function(f){return f.active}))||visibleFiles.find((function(f){var _a;return null===(_a=source.openFiles)||void 0===_a?void 0:_a.includes(f.id)}))},exports.getCurrentLocale=function getCurrentLocale(){return(0,currentLocale_1.default)()};var constants_1=__webpack_require__("./src/lab2/constants.ts"),currentLocale_1=__importDefault(__webpack_require__("./src/util/currentLocale.ts")),getScriptData_1=__importStar(__webpack_require__("./src/util/getScriptData.js")),types_1=__webpack_require__("./src/lab2/types.ts");function getAppOptionsEditBlocks(){if((0,getScriptData_1.hasScriptData)("script[data-appoptions]"))return(0,getScriptData_1.default)("appoptions").editBlocks}},"./src/lab2/types.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.ProjectFileType=exports.Theme=void 0;var ProjectFileType,contexts_1=__webpack_require__("../frontend/packages/component-library/dist/common/contexts/index.js");Object.defineProperty(exports,"Theme",{enumerable:!0,get:function(){return contexts_1.Theme}}),function(ProjectFileType){ProjectFileType.STARTER="starter",ProjectFileType.SUPPORT="support",ProjectFileType.VALIDATION="validation",ProjectFileType.LOCKED_STARTER="locked_starter",ProjectFileType.SYSTEM_SUPPORT="system_support"}(ProjectFileType||(exports.ProjectFileType=ProjectFileType={}))},"./src/lab2/utils/multiFileSourceUtils.ts":function(__unused_webpack_module,exports){var __read=this&&this.__read||function(o,n){var m="function"==typeof Symbol&&o[Symbol.iterator];if(!m)return o;var r,e,i=m.call(o),ar=[];try{for(;(void 0===n||n-- >0)&&!(r=i.next()).done;)ar.push(r.value)}catch(error){e={error}}finally{try{r&&!r.done&&(m=i.return)&&m.call(i)}finally{if(e)throw e.error}}return ar},__spreadArray=this&&this.__spreadArray||function(to,from,pack){if(pack||2===arguments.length)for(var ar,i=0,l=from.length;i<l;i++)!ar&&i in from||(ar||(ar=Array.prototype.slice.call(from,0,i)),ar[i]=from[i]);return to.concat(ar||Array.prototype.slice.call(from))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.findFiles=exports.findSubFolders=exports.getNextFolderId=exports.getNextFileId=exports.getFileExtension=void 0;exports.getFileExtension=function(filename){var _a;return(null===(_a=filename.split(".").pop())||void 0===_a?void 0:_a.toLowerCase())||""};exports.getNextFileId=function(files){return String(Math.max.apply(Math,__spreadArray([0],__read(files.map((function(f){return Number(f.id)}))),!1))+1)};exports.getNextFolderId=function(folders){return String(Math.max.apply(Math,__spreadArray([0],__read(folders.map((function(f){return Number(f.id)}))),!1))+1)};exports.findSubFolders=function(parentId,folders){return folders.reduce((function(bucket,f){return f.parentId===parentId&&bucket.push.apply(bucket,__spreadArray([f.id],__read((0,exports.findSubFolders)(f.id,folders)),!1)),bucket}),[])};exports.findFiles=function(folderId,files,folders){var folderIds=new Set(folders?__spreadArray([folderId],__read((0,exports.findSubFolders)(folderId,folders)),!1):[folderId]);return files.reduce((function(bucket,f){return folderIds.has(f.folderId)&&bucket.push(f.id),bucket}),[])}},"./src/util/currentLocale.ts":function(__unused_webpack_module,exports,__webpack_require__){var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0});var localization_1=__importDefault(__webpack_require__("./src/localization/index.ts"));exports.default=function(){return localization_1.default.locale}},"./src/weblab2/constants.ts":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.WEBLAB2_WELCOME_CHAT_MESSAGE=exports.TUTOR_MODE_TO_ANSWER_TYPE=exports.DEFAULT_ANSWER_TYPES=exports.AI_SAVED_COMMENT=exports.WEBLAB2_SUPPORTED_FILE_TYPES=exports.WEBLAB2_IMAGE_FILE_TYPES=exports.WEBLAB2_EDITABLE_FILE_TYPES=void 0;var mime_types_1=__webpack_require__("./node_modules/mime-types/index.js"),sharedConstants_1=__webpack_require__("./generated-scripts/sharedConstants.ts");exports.WEBLAB2_EDITABLE_FILE_TYPES=["html","css","js","md","txt","csv","json"],exports.WEBLAB2_IMAGE_FILE_TYPES=sharedConstants_1.SafeAndSupportedImageTypes.flatMap((function(mime){var _a;return(null!==(_a=mime_types_1.extensions[mime])&&void 0!==_a?_a:[]).filter((function(ext){return"jpe"!==ext}))})),exports.WEBLAB2_SUPPORTED_FILE_TYPES=exports.WEBLAB2_EDITABLE_FILE_TYPES.concat(exports.WEBLAB2_IMAGE_FILE_TYPES),exports.AI_SAVED_COMMENT="AI***SAVE",exports.DEFAULT_ANSWER_TYPES=["buildHTML","buildCSS","ask","hint","debug","example","explainCode","documentation","pseudocode","testCase"],exports.TUTOR_MODE_TO_ANSWER_TYPE={suggest:["buildHTML","buildCSS","ask","hint","debug","example","explainCode","documentation","pseudocode"],outline:["buildHTML","buildCSS","ask","hint","debug","example","explainCode","documentation","pseudocode"],guide:["buildHTML","buildCSS","ask","hint","debug","example","explainCode","documentation","pseudocode"],produce:["buildHTML","buildCSS","ask","hint","debug","example","explainCode","documentation"],designer:["buildHTML","buildCSS","ask","hint","debug","example","explainCode","documentation"],tutor:["buildHTML","buildCSS","ask","hint","debug","example","explainCode","documentation","pseudocode"],engineer:["buildHTML","buildCSS","buildJavaScript","ask","hint","debug","example","explainCode","documentation","pseudocode"],qa:["buildHTML","buildCSS","ask","hint","debug","example","explainCode","documentation","pseudocode","testCase"]},exports.WEBLAB2_WELCOME_CHAT_MESSAGE="Hi, I'm your AI Tutor! I can help you brainstorm, debug, and work through this level."},"../frontend/packages/component-library/dist/common/contexts/ThemeContext.js":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=__webpack_require__("./node_modules/react/jsx-runtime.js"),r=__webpack_require__("./node_modules/react/index.js"),s=r.createContext(void 0);exports.ThemeProvider=({children:t})=>{const[e,o]=r.useState("Light");return n.jsx(s.Provider,{value:{theme:e,toggleTheme:()=>{o((u=>"Light"===u?"Dark":"Light"))},setTheme:o},children:n.jsx("div",{"data-theme":e,children:t})})},exports.useTheme=function h(t=!1){const e=r.useContext(s);if(!e){if(t)return{};throw new Error("useTheme must be used within a ThemeProvider")}return e}},"../frontend/packages/component-library/dist/common/contexts/index.js":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=__webpack_require__("../frontend/packages/component-library/dist/common/contexts/DropdownContext.js"),r=__webpack_require__("../frontend/packages/component-library/dist/common/contexts/ThemeContext.js");exports.DropdownProviderWrapper=e.DropdownProviderWrapper,exports.useDropdownContext=e.useDropdownContext,exports.ThemeProvider=r.ThemeProvider,exports.useTheme=r.useTheme}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVNrUyxFQUFFbFMsRUFBRW1TLG1CQUFjLEdBQXVXclQsUUFBUXNULGNBQXhOLEVBQUV4SixTQUFTbEosTUFBTSxNQUFNbEIsRUFBRVksR0FBR1ksRUFBRXFTLFNBQVMsU0FBa0QsT0FBT0osRUFBRUssSUFBSUosRUFBRUssU0FBUyxDQUFDN1IsTUFBTSxDQUFDaVAsTUFBTW5SLEVBQUVnVSxZQUEvRSxLQUFLcFQsR0FBRXFULEdBQU8sVUFBSkEsRUFBWSxPQUFPLFNBQU8sRUFBeURDLFNBQVN0VCxHQUFHd0osU0FBU3FKLEVBQUVLLElBQUksTUFBTSxDQUFDLGFBQWE5VCxFQUFFb0ssU0FBU2xKLEtBQUksRUFBMkJaLFFBQVE2VCxTQUEvWCxTQUFTQyxFQUFFbFQsR0FBRSxHQUFJLE1BQU1sQixFQUFFd0IsRUFBRTZTLFdBQVdYLEdBQUcsSUFBSTFULEVBQUUsQ0FBQyxHQUFHa0IsRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLElBQUk0SCxNQUFNLCtDQUErQyxDQUFDLE9BQU85SSxDQUFDLEMsaUlDQTNSbUIsT0FBT2MsZUFBZTNCLFFBQVFPLE9BQU8yUyxZQUFZLENBQUN0UixNQUFNLFdBQVcsTUFBTWxDLEVBQUUsb0JBQVEsa0ZBQXdCd0IsRUFBRSxvQkFBUSwrRUFBcUJsQixRQUFRZ1Usd0JBQXdCdFUsRUFBRXNVLHdCQUF3QmhVLFFBQVFpVSxtQkFBbUJ2VSxFQUFFdVUsbUJBQW1CalUsUUFBUXNULGNBQWNwUyxFQUFFb1MsY0FBY3RULFFBQVE2VCxTQUFTM1MsRUFBRTJTLFEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS9sb2NhbGUtZG8tbm90LWltcG9ydC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvc2hhcmVkQ29tcG9uZW50cy9TcGlubmVyLmpzeCIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS9jb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2NvZGVicmlkZ2UvbG9jYWxlLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlYnJpZGdlL3V0aWxzL2FpVHV0b3JVdGlscy50cyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS91dGlscy9lZGl0YWJsZUZpbGVUeXBlLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlYnJpZGdlL3V0aWxzL2ZpbGVVdGlscy50cyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS91dGlscy9maW5kRmlsZS50cyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS91dGlscy9maW5kRm9sZGVyLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlYnJpZGdlL3V0aWxzL2dldEVtcHR5UHJvamVjdC50cyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS91dGlscy9nZXRFcnJvck1lc3NhZ2UudHMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2NvZGVicmlkZ2UvdXRpbHMvZ2V0RmlsZU5hbWVXaXRoTnVtYmVyU3VmZml4LnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlYnJpZGdlL3V0aWxzL2dldEZpbGVzQnlMYW5ndWFnZS50cyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS91dGlscy9nZXRGb2xkZXJDaGlsZHJlbi50cyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS91dGlscy9nZXRGb2xkZXJMaW5lYWdlLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlYnJpZGdlL3V0aWxzL2dldEZvbGRlclBhdGgudHMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2NvZGVicmlkZ2UvdXRpbHMvZ2V0T3BlbkZpbGVzLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlYnJpZGdlL3V0aWxzL2dldFBvc3NpYmxlRGVzdGluYXRpb25Gb2xkZXJzRm9yRmlsZS50cyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS91dGlscy9nZXRQb3NzaWJsZURlc3RpbmF0aW9uRm9sZGVyc0ZvckZvbGRlci50cyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS91dGlscy9nZXRVcmxGb3JGaWxlLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlYnJpZGdlL3V0aWxzL2hhc1ByZXZpZXcudHMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2NvZGVicmlkZ2UvdXRpbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2NvZGVicmlkZ2UvdXRpbHMvaXNEdXBsaWNhdGVGaWxlTmFtZS50cyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS91dGlscy9pc0R1cGxpY2F0ZUZvbGRlck5hbWUudHMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2NvZGVicmlkZ2UvdXRpbHMvaXNWYWxpZEZpbGVOYW1lLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlYnJpZGdlL3V0aWxzL2lzVmFsaWRGb2xkZXJOYW1lLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlYnJpZGdlL3V0aWxzL3JlcGFpck9wZW5GaWxlcy50cyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS91dGlscy9zb3J0RmlsZXNCeU5hbWUudHMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2NvZGVicmlkZ2UvdXRpbHMvdW5pcXVlRmlsZU5hbWUudHMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2NvZGVicmlkZ2UvdXRpbHMvdmFsaWRhdGVCYWNrcGFja0ZpbGVOYW1lLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlYnJpZGdlL3V0aWxzL3ZhbGlkYXRlRmlsZU5hbWUudHMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2NvZGVicmlkZ2UvdXRpbHMvdmFsaWRhdGVGb2xkZXJNb3ZlLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9jb2RlYnJpZGdlL3V0aWxzL3ZhbGlkYXRlRm9sZGVyTmFtZS50cyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvY29kZWJyaWRnZS91dGlscy92aWV3YWJsZUltYWdlRmlsZVR5cGUudHMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL2xhYjIvY29uc3RhbnRzLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9sYWIyL3Byb2plY3RzL3V0aWxzLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9sYWIyL3R5cGVzLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9sYWIyL3V0aWxzL211bHRpRmlsZVNvdXJjZVV0aWxzLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy91dGlsL2N1cnJlbnRMb2NhbGUudHMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3dlYmxhYjIvY29uc3RhbnRzLnRzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uLi9mcm9udGVuZC9wYWNrYWdlcy9jb21wb25lbnQtbGlicmFyeS9kaXN0L2NvbW1vbi9jb250ZXh0cy9UaGVtZUNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4uL2Zyb250ZW5kL3BhY2thZ2VzL2NvbXBvbmVudC1saWJyYXJ5L2Rpc3QvY29tbW9uL2NvbnRleHRzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRE8gTk9UIElNUE9SVCBUSElTIERJUkVDVExZLiBJbnN0ZWFkIGRvOlxuICogICBgYGBcbiAqICAgaW1wb3J0IG1zZyBmcm9tICdAY2RvL2NvZGVicmlkZ2UvbG9jYWxlJy5cbiAqICAgYGBgXG4gKiBUaGlzIGFsbG93cyB0aGUgd2VicGFjayBjb25maWcgdG8gZGV0ZXJtaW5lIGhvdyBsb2NhbGVzIHNob3VsZCBiZSBsb2FkZWQsXG4gKiB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIG1ha2luZyBsb2NhbGUgc2V0dXAgd29yayBzZWFtbGVzc2x5IGluIHRlc3RzLlxuICovXG5cbmltcG9ydCBsb2NhbGVXaXRoSTE4blN0cmluZ1RyYWNrZXIgZnJvbSAnQGNkby9hcHBzL3V0aWwvaTE4blN0cmluZ1RyYWNrZXInO1xuaW1wb3J0IHNhZmVMb2FkTG9jYWxlIGZyb20gJ0BjZG8vYXBwcy91dGlsL3NhZmVMb2FkTG9jYWxlJztcblxubGV0IGxvY2FsZSA9IHNhZmVMb2FkTG9jYWxlKCdjb2RlYnJpZGdlX2xvY2FsZScpO1xubG9jYWxlID0gbG9jYWxlV2l0aEkxOG5TdHJpbmdUcmFja2VyKGxvY2FsZSwgJ2NvZGVicmlkZ2UnKTtcbm1vZHVsZS5leHBvcnRzID0gbG9jYWxlO1xuIiwiLyoqXG4gKiBMb2FkaW5nIHNwaW5uZXIuXG4gKi9cblxuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBGb250QXdlc29tZSBmcm9tICdAY2RvL2FwcHMvbGVnYWN5U2hhcmVkQ29tcG9uZW50cy9Gb250QXdlc29tZSc7XG5pbXBvcnQgaTE4biBmcm9tICdAY2RvL2xvY2FsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwaW5uZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIHNpemU6IFByb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZSddKSxcbiAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge3NpemUsIHN0eWxlfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IGRpc3BsYXlTaXplID1cbiAgICAgIHNpemUgPT09ICdzbWFsbCcgPyAnJyA6IHNpemUgPT09ICdtZWRpdW0nID8gJ2ZhLTJ4JyA6ICdmYS0zeCc7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGb250QXdlc29tZVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIGljb249XCJzcGlubmVyXCJcbiAgICAgICAgY2xhc3NOYW1lPXtgZmEtcHVsc2UgJHtkaXNwbGF5U2l6ZX1gfVxuICAgICAgICB0aXRsZT17aTE4bi5sb2FkaW5nKCl9XG4gICAgICAgIGlkPVwidWl0ZXN0LXNwaW5uZXJcIlxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgREVGQVVMVF9GT0xERVJfSUQgPSAnMCc7XG5cbmV4cG9ydCBlbnVtIE1pbmlBcHBzIHtcbiAgTmVpZ2hib3Job29kID0gJ25laWdoYm9yaG9vZCcsXG59XG5cbmV4cG9ydCBjb25zdCBNQVpFX0ZJTEVfTkFNRSA9ICdzZXJpYWxpemVkX21hemUudHh0JztcblxuZXhwb3J0IHR5cGUgTGF5b3V0S2V5ID0gJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcblxuZXhwb3J0IGNvbnN0IGNvZGVicmlkZ2VMYWJzV2l0aENvbnNvbGUgPSBbJ3B5dGhvbmxhYicsICdqYXZhbGFiJ107XG5cbmV4cG9ydCBjb25zdCBJTlZBTElEX05BTUVfRVJST1IgPVxuICAnTmFtZXMgbXVzdCBiZSBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGRhc2hlcywgb3IgdW5kZXJzY29yZXMuJztcbiIsIi8qKlxuICogQSBUeXBlU2NyaXB0IHdyYXBwZXIgZm9yIHRoZSBDb2RlYnJpZGdlTG9jYWxlIG9iamVjdCB3aGljaCBjYXN0c1xuICogaXQgdG8gdGhlIHtAbGluayBMb2NhbGV9IHR5cGUuXG4gKi9cbmltcG9ydCB7TG9jYWxlfSBmcm9tICdAY2RvL2FwcHMvdHlwZXMvbG9jYWxlJztcblxuZXhwb3J0IGRlZmF1bHQgcmVxdWlyZSgnQGNkby9jb2RlYnJpZGdlL2xvY2FsZScpIGFzIExvY2FsZTxcbiAgdHlwZW9mIGltcG9ydCgnQGNkby9pMThuL2NvZGVicmlkZ2UvZW5fdXMuanNvbicpXG4+O1xuIiwiZXhwb3J0IGNvbnN0IGVuYWJsZVVzZXJBZGRlZFNlbGVjdGlvbkNvbnRleHQgPSAoYXBwTmFtZTogc3RyaW5nKSA9PlxuICBhcHBOYW1lID09PSAnd2VibGFiMic7XG4iLCJjb25zdCBkZWZhdWx0RWRpdGFibGVGaWxlVHlwZXNBcnJheSA9IFsnaHRtbCcsICdjc3MnXTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gbGFuZ3VhZ2UgaXMgZWRpdGFibGUuXG4gKlxuICogQHBhcmFtIGxhbmd1YWdlIC0gVGhlIGxhbmd1YWdlIHRvIGNoZWNrLlxuICogQHBhcmFtIGVkaXRhYmxlRmlsZVR5cGVzQXJyYXkgLSBBbiBvcHRpb25hbCBhcnJheSBvZiBlZGl0YWJsZSBmaWxlIHR5cGVzLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IGFycmF5IGBbJ2h0bWwnLCAnY3NzJ11gIGlzIHVzZWQuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGxhbmd1YWdlIGlzIGVkaXRhYmxlLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVkaXRhYmxlRmlsZVR5cGUgPSAoXG4gIGxhbmd1YWdlOiBzdHJpbmcsXG4gIGVkaXRhYmxlRmlsZVR5cGVzQXJyYXkgPSBkZWZhdWx0RWRpdGFibGVGaWxlVHlwZXNBcnJheVxuKSA9PiB7XG4gIGNvbnN0IGVkaXRhYmxlRmlsZVR5cGVzID0gbmV3IFNldChlZGl0YWJsZUZpbGVUeXBlc0FycmF5KTtcbiAgcmV0dXJuIGVkaXRhYmxlRmlsZVR5cGVzLmhhcyhsYW5ndWFnZSk7XG59O1xuIiwiaW1wb3J0IHtTVEFSVF9TT1VSQ0VTfSBmcm9tICdAY2RvL2FwcHMvbGFiMi9jb25zdGFudHMnO1xuaW1wb3J0IHtnZXRBcHBPcHRpb25zRWRpdEJsb2Nrc30gZnJvbSAnQGNkby9hcHBzL2xhYjIvcHJvamVjdHMvdXRpbHMnO1xuaW1wb3J0IHtNdWx0aUZpbGVTb3VyY2UsIFByb2plY3RGaWxlVHlwZX0gZnJvbSAnQGNkby9hcHBzL2xhYjIvdHlwZXMnO1xuXG5pbXBvcnQge1Byb2plY3RGaWxlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IEZJTEVfVFlQRV9JQ09OX01BUCA9IHtcbiAgcHk6IHtpY29uTmFtZTogJ3B5dGhvbicsIGljb25TdHlsZTogJ3JlZ3VsYXInIGFzIGNvbnN0LCBpc0JyYW5kOiB0cnVlfSxcbiAgY3N2OiB7aWNvbk5hbWU6ICdmaWxlLWNzdicsIGljb25TdHlsZTogJ3NvbGlkJyBhcyBjb25zdCwgaXNCcmFuZDogZmFsc2V9LFxuICB0eHQ6IHtpY29uTmFtZTogJ2ZpbGUtbGluZXMnLCBpY29uU3R5bGU6ICdzb2xpZCcgYXMgY29uc3QsIGlzQnJhbmQ6IGZhbHNlfSxcbiAgbWQ6IHtpY29uTmFtZTogJ21hcmtkb3duJywgaWNvblN0eWxlOiAncmVndWxhcicgYXMgY29uc3QsIGlzQnJhbmQ6IHRydWV9LFxuICBodG1sOiB7aWNvbk5hbWU6ICdmaWxlLWNvZGUnLCBpY29uU3R5bGU6ICdzb2xpZCcgYXMgY29uc3QsIGlzQnJhbmQ6IGZhbHNlfSxcbiAganM6IHtpY29uTmFtZTogJ2pzJywgaWNvblN0eWxlOiAncmVndWxhcicgYXMgY29uc3QsIGlzQnJhbmQ6IHRydWV9LFxuICBqc29uOiB7XG4gICAgaWNvbk5hbWU6ICdicmFja2V0cy1jdXJseScsXG4gICAgaWNvblN0eWxlOiAnc29saWQnIGFzIGNvbnN0LFxuICAgIGlzQnJhbmQ6IGZhbHNlLFxuICB9LFxuICBjc3M6IHtpY29uTmFtZTogJ2NzcycsIGljb25TdHlsZTogJ3JlZ3VsYXInIGFzIGNvbnN0LCBpc0JyYW5kOiB0cnVlfSxcbiAganBnOiB7aWNvbk5hbWU6ICdpbWFnZScsIGljb25TdHlsZTogJ3NvbGlkJyBhcyBjb25zdCwgaXNCcmFuZDogZmFsc2V9LFxuICBwbmc6IHtpY29uTmFtZTogJ2ltYWdlJywgaWNvblN0eWxlOiAnc29saWQnIGFzIGNvbnN0LCBpc0JyYW5kOiBmYWxzZX0sXG4gIGpwZWc6IHtpY29uTmFtZTogJ2ltYWdlJywgaWNvblN0eWxlOiAnc29saWQnIGFzIGNvbnN0LCBpc0JyYW5kOiBmYWxzZX0sXG4gIHdlYnA6IHtpY29uTmFtZTogJ2ltYWdlJywgaWNvblN0eWxlOiAnc29saWQnIGFzIGNvbnN0LCBpc0JyYW5kOiBmYWxzZX0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkU2hvd0ZpbGUoZmlsZT86IFByb2plY3RGaWxlKSB7XG4gIC8vIFdlIGNvdWxkIGhhdmUgYW4gdW5kZWZpbmVkIGZpbGUgaWYgdGhlIGZpbGUgcmVmZXJlbmNlZCBpcyBhIHZhbGlkYXRpb24gZmlsZS5cbiAgaWYgKCFmaWxlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGlzU3RhcnRNb2RlID0gZ2V0QXBwT3B0aW9uc0VkaXRCbG9ja3MoKSA9PT0gU1RBUlRfU09VUkNFUztcblxuICAvLyBJZiB3ZSBhcmUgaW4gc3RhcnQgbW9kZSwgc2hvdyBhbGwgZmlsZXMgZXhjZXB0IHN5c3RlbSBzdXBwb3J0IGZpbGVzLlxuICAvLyBJZiB3ZSBhcmUgbm90IGluIHN0YXJ0IG1vZGUsIHNob3cgc3RhcnRlciBmaWxlcywgbG9ja2VkIHN0YXJ0ZXIgZmlsZXMsXG4gIC8vIGFuZCBmaWxlcyB3aXRob3V0IGEgdHlwZS5cbiAgcmV0dXJuIGlzU3RhcnRNb2RlXG4gICAgPyBmaWxlLnR5cGUgIT09IFByb2plY3RGaWxlVHlwZS5TWVNURU1fU1VQUE9SVFxuICAgIDogZmlsZS50eXBlID09PSBQcm9qZWN0RmlsZVR5cGUuU1RBUlRFUiB8fFxuICAgICAgICBmaWxlLnR5cGUgPT09IFByb2plY3RGaWxlVHlwZS5MT0NLRURfU1RBUlRFUiB8fFxuICAgICAgICAhZmlsZS50eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZUljb25OYW1lQW5kU3R5bGUoZmlsZTogUHJvamVjdEZpbGUpOiB7XG4gIGljb25OYW1lOiBzdHJpbmc7XG4gIGljb25TdHlsZTogJ3NvbGlkJyB8ICdyZWd1bGFyJztcbiAgaXNCcmFuZD86IGJvb2xlYW47XG59IHtcbiAgY29uc3QgaXNTdGFydE1vZGUgPSBnZXRBcHBPcHRpb25zRWRpdEJsb2NrcygpID09PSBTVEFSVF9TT1VSQ0VTO1xuICBpZiAoIWlzU3RhcnRNb2RlKSB7XG4gICAgY29uc3QgZmlsZVR5cGUgPSBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKTtcbiAgICBjb25zdCBpY29uQ29uZmlnID1cbiAgICAgIEZJTEVfVFlQRV9JQ09OX01BUFtmaWxlVHlwZSBhcyBrZXlvZiB0eXBlb2YgRklMRV9UWVBFX0lDT05fTUFQXTtcbiAgICBpZiAoaWNvbkNvbmZpZykge1xuICAgICAgcmV0dXJuIGljb25Db25maWc7XG4gICAgfVxuICAgIHJldHVybiB7aWNvbk5hbWU6ICdmaWxlJywgaWNvblN0eWxlOiAncmVndWxhcid9O1xuICB9XG4gIGlmIChmaWxlLnR5cGUgPT09IFByb2plY3RGaWxlVHlwZS5WQUxJREFUSU9OKSB7XG4gICAgcmV0dXJuIHtpY29uTmFtZTogJ2ZsYXNrJywgaWNvblN0eWxlOiAnc29saWQnfTtcbiAgfSBlbHNlIGlmIChmaWxlLnR5cGUgPT09IFByb2plY3RGaWxlVHlwZS5TVVBQT1JUKSB7XG4gICAgcmV0dXJuIHtpY29uTmFtZTogJ2V5ZS1zbGFzaCcsIGljb25TdHlsZTogJ3JlZ3VsYXInfTtcbiAgfSBlbHNlIGlmIChmaWxlLnR5cGUgPT09IFByb2plY3RGaWxlVHlwZS5MT0NLRURfU1RBUlRFUikge1xuICAgIHJldHVybiB7aWNvbk5hbWU6ICdsb2NrJywgaWNvblN0eWxlOiAnc29saWQnfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTdGFydGVyIGZpbGVzIG9yIGZpbGVzIHdpdGhvdXQgYSB0eXBlLCB3aGljaCBkZWZhdWx0IHRvIHN0YXJ0ZXIuXG4gICAgcmV0dXJuIHtpY29uTmFtZTogJ2V5ZScsIGljb25TdHlsZTogJ3JlZ3VsYXInfTtcbiAgfVxufVxuXG4vKipcbiAqIFByZXBhcmUgdGhlIHNvdXJjZSBmb3Igc2F2aW5nIGluIGxldmVsYnVpbGRlci4gVGhpcyBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBmaWxlXG4gKiBpbnRvIGEgc2VwYXJhdGUgZmllbGQgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgZmlsZXMgYW5kIGxpc3Qgb2Ygb3BlbiBmaWxlcywgaWZcbiAqIGl0IHdhcyBvcGVuLiBJdCBhbHNvIHJlbW92ZXMgc3lzdGVtIHN1cHBvcnQgZmlsZXMsIHdoaWNoIGFyZSBpbmNsdWRlZCBpbiB0aGUgc291cmNlc1xuICogZnJvbSB0aGUgb3RoZXIgbGV2ZWwgcHJvcGVydGllcyBhbmQgdGhlcmVmb3JlIGRvbid0IGFsc28gbmVlZCB0byBiZSBpbiB0aGUgc3RhcnQgc291cmNlc1xuICogKGZvciBleGFtcGxlLCB0aGUgbWF6ZSBncmlkKS5cbiAqXG4gKiBXZSBzcGxpdCBvdXQgdGhlIHZhbGlkYXRpb24gZmlsZSBiZWNhdXNlIGl0IGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgZnJvbSBzdGFydCBzb3VyY2VzXG4gKiBpbiB1c2VyIGNvZGUuIFRoZSB2YWxpZGF0aW9uIGZpbGUgaXMgbm90IHNhdmVkIHRvIHRoZSB1c2VyJ3MgcHJvamVjdCwgYW5kIHdlIGFsd2F5cyB1c2VcbiAqIHRoZSB2YWxpZGF0aW9uIGZpbGUgZnJvbSB0aGUgbGV2ZWwsIGV2ZW4gaWYgdGhlIGxldmVsIGlzIHRlbXBsYXRlIGJhY2tlZCAoYW5kIHdlIGFyZSB1c2luZ1xuICogc3RhcnQgY29kZSBmcm9tIHRoZSB0ZW1wbGF0ZSkuXG4gKiBAcGFyYW0gc291cmNlOiBNdWx0aUZpbGVTb3VyY2VcbiAqIEByZXR1cm5zIHtwYXJzZWRTb3VyY2U6IE11bHRpRmlsZVNvdXJjZSwgdmFsaWRhdGlvbkZpbGU6IFByb2plY3RGaWxlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVNvdXJjZUZvckxldmVsYnVpbGRlclNhdmUoc291cmNlPzogTXVsdGlGaWxlU291cmNlKSB7XG4gIGlmICghc291cmNlKSB7XG4gICAgcmV0dXJuIHtwYXJzZWRTb3VyY2U6IG51bGwsIHZhbGlkYXRpb25GaWxlOiBudWxsfTtcbiAgfVxuXG4gIC8vIFdlIHNraXAgdmFsaWRhdGlvbiBhbmQgc3lzdGVtIHN1cHBvcnQgZmlsZXMgd2hlbiBzYXZpbmcgdG8gbGV2ZWxidWlsZGVyLlxuICAvLyBUaGUgdmFsaWRhdGlvbiBmaWxlIGlzIHNwbGl0IG91dCBpbnRvIGEgc2VwYXJhdGUgZmllbGQsIGFuZCBzeXN0ZW0gc3VwcG9ydFxuICAvLyBmaWxlcyBhcmUgbm90IHBhcnQgb2YgbGV2ZWwgc3RhcnQgc291cmNlcy5cbiAgY29uc3QgbmV3RmlsZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoc291cmNlLmZpbGVzKS5maWx0ZXIoXG4gICAgICAoW18sIGZpbGVdKSA9PlxuICAgICAgICBmaWxlLnR5cGUgIT09IFByb2plY3RGaWxlVHlwZS5WQUxJREFUSU9OICYmXG4gICAgICAgIGZpbGUudHlwZSAhPT0gUHJvamVjdEZpbGVUeXBlLlNZU1RFTV9TVVBQT1JUXG4gICAgKVxuICApO1xuICBsZXQgdmFsaWRhdGlvbkZpbGUgPSBnZXRWYWxpZGF0aW9uRnJvbVNvdXJjZShzb3VyY2UpIHx8IG51bGw7XG4gIGxldCBvcGVuRmlsZXMgPSBzb3VyY2Uub3BlbkZpbGVzO1xuICBpZiAodmFsaWRhdGlvbkZpbGUgJiYgc291cmNlLm9wZW5GaWxlcz8uaW5jbHVkZXModmFsaWRhdGlvbkZpbGUuaWQpKSB7XG4gICAgb3BlbkZpbGVzID0gc291cmNlLm9wZW5GaWxlcy5maWx0ZXIoaWQgPT4gaWQgIT09IHZhbGlkYXRpb25GaWxlPy5pZCk7XG4gICAgdmFsaWRhdGlvbkZpbGUgPSB7Li4udmFsaWRhdGlvbkZpbGUsIGFjdGl2ZTogZmFsc2V9O1xuICB9XG4gIHJldHVybiB7XG4gICAgcGFyc2VkU291cmNlOiB7Li4uc291cmNlLCBmaWxlczogbmV3RmlsZXMsIG9wZW5GaWxlczogb3BlbkZpbGVzfSxcbiAgICB2YWxpZGF0aW9uRmlsZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBJbiBzdGFydCBtb2RlIHdlIGNvbWJpbmUgdGhlIHN0YXJ0IHNvdXJjZXMgd2l0aCB0aGUgdmFsaWRhdGlvbiBmaWxlXG4gKiBzbyBsZXZlbGJ1aWxkZXJzIGNhbiBlZGl0IHRoZSB2YWxpZGF0aW9uIGZpbGUuIEF1dG9tYXRpY2FsbHkgb3BlblxuICogdGhlIHZhbGlkYXRpb24gZmlsZSBpZiBpdCBleGlzdHMuXG4gKiBAcGFyYW0gc291cmNlOiBNdWx0aUZpbGVTb3VyY2UgfCB1bmRlZmluZWRcbiAqIEBwYXJhbSB2YWxpZGF0aW9uRmlsZTogUHJvamVjdEZpbGUgfCB1bmRlZmluZWRcbiAqIEByZXR1cm5zOiBNdWx0aUZpbGVTb3VyY2Ugd2l0aCB0aGUgdmFsaWRhdGlvbiBmaWxlIGFkZGVkIHRvIHRoZSBmaWxlcywgaWYgaXQgZXhpc3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZVN0YXJ0U291cmNlc0FuZFZhbGlkYXRpb24oXG4gIHNvdXJjZTogTXVsdGlGaWxlU291cmNlLFxuICB2YWxpZGF0aW9uRmlsZT86IFByb2plY3RGaWxlXG4pIHtcbiAgbGV0IHJldHVyblZhbHVlID0gc291cmNlO1xuICBpZiAoc291cmNlICYmIHZhbGlkYXRpb25GaWxlKSB7XG4gICAgcmV0dXJuVmFsdWUgPSB7XG4gICAgICAuLi5zb3VyY2UsXG4gICAgICBmaWxlczoge1xuICAgICAgICAuLi5zb3VyY2UuZmlsZXMsXG4gICAgICAgIFt2YWxpZGF0aW9uRmlsZS5pZF06IHsuLi52YWxpZGF0aW9uRmlsZX0sXG4gICAgICB9LFxuICAgICAgb3BlbkZpbGVzOiBzb3VyY2Uub3BlbkZpbGVzXG4gICAgICAgID8gWy4uLnNvdXJjZS5vcGVuRmlsZXMsIHZhbGlkYXRpb25GaWxlLmlkXVxuICAgICAgICA6IFt2YWxpZGF0aW9uRmlsZS5pZF0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmV0dXJuVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZGF0aW9uRnJvbVNvdXJjZShzb3VyY2U6IE11bHRpRmlsZVNvdXJjZSkge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhzb3VyY2UuZmlsZXMpLmZpbmQoXG4gICAgZiA9PiBmLnR5cGUgPT09IFByb2plY3RGaWxlVHlwZS5WQUxJREFUSU9OXG4gICk7XG59XG4iLCJpbXBvcnQge011bHRpRmlsZVNvdXJjZX0gZnJvbSAnQGNkby9hcHBzL2xhYjIvdHlwZXMnO1xuXG4vLyBSZXR1cm5zIHRoZSBnaXZlbiBmaWxlbmFtZSBpbiB0aGUgZ2l2ZW4gZm9sZGVyIGlkLCBpZiBpdCBleGlzdHMsXG4vLyBvciB1bmRlZmluZWQgaWYgaXQgZG9lcyBub3QuXG5leHBvcnQgY29uc3QgZmluZEZpbGUgPSAoXG4gIHNvdXJjZXM6IE11bHRpRmlsZVNvdXJjZSB8IHVuZGVmaW5lZCxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgZm9sZGVySWQ6IHN0cmluZ1xuKSA9PiB7XG4gIGlmICghc291cmNlcykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoc291cmNlcy5maWxlcykuZmluZChcbiAgICBmaWxlID0+IGZpbGUubmFtZSA9PT0gZmlsZW5hbWUgJiYgZmlsZS5mb2xkZXJJZCA9PT0gZm9sZGVySWRcbiAgKTtcbn07XG4iLCJpbXBvcnQge0RFRkFVTFRfRk9MREVSX0lEfSBmcm9tICdAY29kZWJyaWRnZS9jb25zdGFudHMnO1xuaW1wb3J0IHtQcm9qZWN0Rm9sZGVyfSBmcm9tICdAY29kZWJyaWRnZS90eXBlcyc7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2VhcmNoZXMgZm9yIGEgZm9sZGVyIHdpdGhpbiBhIHByb2plY3QgYmFzZWQgb24gYSBmb2xkZXIgbGluZWFnZS5cbiAqXG4gKiBAcGFyYW0gZm9sZGVyTGluZWFnZSAtIEFuIG9wdGlvbmFsIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBwYXRoIHNlZ21lbnRzIG9mIHRoZSBmb2xkZXIuIEVtcHR5IHN0cmluZ3Mgd2l0aGluIHRoZSBhcnJheSBhcmUgaWdub3JlZC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlYXJjaC5cbiAqICAqIGBvcHRpb25zLmZvbGRlcnNgIC0gQSByZXF1aXJlZCBhcnJheSBvZiBgUHJvamVjdEZvbGRlcmAgb2JqZWN0cyByZXByZXNlbnRpbmcgYWxsIGZvbGRlcnMgaW4gdGhlIHByb2plY3QuXG4gKiAgKiBgb3B0aW9ucy5yZXF1aXJlZGAgKGRlZmF1bHQ6IGBmYWxzZWApOiBXaGV0aGVyIHRoZSBzcGVjaWZpZWQgZm9sZGVyIGlzIHJlcXVpcmVkIHRvIGV4aXN0LiBJZiBgdHJ1ZWAgYW5kIGEgZm9sZGVyIGlzIG5vdCBmb3VuZCwgYW4gZXJyb3IgaXMgdGhyb3duLiBJZiBgZmFsc2VgLCBgREVGQVVMVF9GT0xERVJfSURgIGlzIHJldHVybmVkIGZvciBtaXNzaW5nIGZvbGRlcnMuXG4gKiBAcmV0dXJucyBUaGUgSUQgb2YgdGhlIGZvdW5kIGZvbGRlciwgb3IgYERFRkFVTFRfRk9MREVSX0lEYCBpZiB0aGUgZm9sZGVyIGlzIG5vdCBmb3VuZCBhbmQgYG9wdGlvbnMucmVxdWlyZWRgIGlzIGBmYWxzZWAuIFRocm93cyBhbiBlcnJvciBpZiB0aGUgZm9sZGVyIGlzIG5vdCBmb3VuZCBhbmQgYG9wdGlvbnMucmVxdWlyZWRgIGlzIGB0cnVlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRGb2xkZXIgPSAoXG4gIGZvbGRlckxpbmVhZ2U6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM6IHtmb2xkZXJzOiBQcm9qZWN0Rm9sZGVyW107IHJlcXVpcmVkPzogYm9vbGVhbn1cbikgPT4ge1xuICByZXR1cm4gZm9sZGVyTGluZWFnZS5yZWR1Y2UoKHBhcmVudElkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmICghbmFtZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBwYXJlbnRJZDtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXIgPSBPYmplY3QudmFsdWVzKG9wdGlvbnMuZm9sZGVycykuZmluZChcbiAgICAgIGYgPT4gZi5uYW1lID09PSBuYW1lICYmIGYucGFyZW50SWQgPT09IHBhcmVudElkXG4gICAgKTtcblxuICAgIGlmICghZm9sZGVyKSB7XG4gICAgICBpZiAob3B0aW9ucy5yZXF1aXJlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGZvbGRlciAke2ZvbGRlckxpbmVhZ2Uuam9pbignLycpfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfRk9MREVSX0lEO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb2xkZXIuaWQ7XG4gIH0sIERFRkFVTFRfRk9MREVSX0lEKTtcbn07XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHByb2plY3Qgb2JqZWN0LlxuICpcbiAqIEEgcHJvamVjdCBvYmplY3QgY29udGFpbnMgdHdvIHByb3BlcnRpZXM6IGBmaWxlc2AgYW5kIGBmb2xkZXJzYCwgYm90aCBpbml0aWFsaXplZCBhcyBlbXB0eSBvYmplY3RzLlxuICpcbiAqIEByZXR1cm5zIEFuIGVtcHR5IHByb2plY3Qgb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgZ2V0RW1wdHlQcm9qZWN0ID0gKCkgPT4gKHtmaWxlczoge30sIGZvbGRlcnM6IHt9fSk7XG4iLCIvKipcbiAqIEV4dHJhY3RzIGFuIGVycm9yIG1lc3NhZ2UgZnJvbSBhbiBhcmcgd2hpY2ggbWF5IGJlIGEgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIGBFcnJvcmAuXG4gKlxuICogQHBhcmFtIGUgLSBUaGUgZXJyb3Igb2JqZWN0IG9yIHN0cmluZyB0byBleHRyYWN0IHRoZSBtZXNzYWdlIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZXJyb3IgbWVzc2FnZSBhcyBhIHN0cmluZywgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBlcnJvciBpcyBub3QgYSBzdHJpbmcgb3IgYW4gRXJyb3Igb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGU6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZW9mIGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmV0dXJuIGUubWVzc2FnZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn07XG4iLCIvKipcbiAqIFJldHVybnMgYSBuZXcgZmlsZW5hbWUgYnkgYXBwZW5kaW5nIG9yIGluY3JlbWVudGluZyBhIG51bWJlciBzdWZmaXggYW5kXG4gKiBpbmNsdWRlcyBmaWxlIGV4dGVuc2lvbi5cbiAqIElmIHRoZSBvcmlnaW5hbCBmaWxlbmFtZSBlbmRzIHdpdGggYSBudW1iZXIgKGUuZy4sIFwiZmlsZV8xLnB5XCIpLCB0aGUgZnVuY3Rpb25cbiAqIGluY3JlbWVudHMgdGhlIG51bWJlciAoZS5nLiwgXCJmaWxlXzIucHlcIikuXG4gKiBJZiB0aGVyZSBpcyBubyBudW1iZXIgc3VmZml4IHByZXNlbnQsIGl0IGFwcGVuZHMgXCJfMVwiIGJlZm9yZSB0aGUgZmlsZSBleHRlbnNpb24uXG4gKiAoZS5nLiwgXCJmaWxlLnB5XCIgLT4gXCJmaWxlXzEucHlcIikuXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSB0aGUgb3JpZ2luYWwgZmlsZW5hbWUgd2hpY2ggaW5jbHVkZXMgdGhlIGZpbGUgZXh0ZW5zaW9uXG4gKiBAcGFyYW0gc2VwYXJhdG9yIC0gdGhlIGNoYXJhY3RlciB1c2VkIHRvIGRlbGltaXQgdGhlIG51bWJlciBzdWZmaXggKGRlZmF1bHQgXCJfXCIpXG4gKiBAcmV0dXJucyBuZXcgZmlsZSBuYW1lIHdpdGggbnVtYmVyIHN1ZmZpeFxuICovXG5leHBvcnQgY29uc3QgZ2V0RmlsZU5hbWVXaXRoTnVtYmVyU3VmZml4ID0gKFxuICBmaWxlbmFtZTogc3RyaW5nLFxuICBzZXBhcmF0b3I6IHN0cmluZyA9ICdfJ1xuKSA9PiB7XG4gIGNvbnN0IHBhcnRzID0gZmlsZW5hbWUuc3BsaXQoJy4nKTtcbiAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IHBhcnRzLnBvcCgpO1xuICBjb25zdCBvcmlnaW5hbE5hbWUgPSBwYXJ0cy5qb2luKCcuJyk7XG4gIGNvbnN0IG5hbWVQYXJ0cyA9IG9yaWdpbmFsTmFtZS5zcGxpdChzZXBhcmF0b3IpO1xuICBjb25zdCBsYXN0UGFydCA9IG5hbWVQYXJ0c1tuYW1lUGFydHMubGVuZ3RoIC0gMV07XG4gIC8vIENoZWNrIHN0cmljdGx5IGZvciBhIG51bWJlciBzdWZmaXguXG4gIGNvbnN0IG51bWJlclN1ZmZpeCA9IC9eXFxkKyQvLnRlc3QobGFzdFBhcnQpID8gcGFyc2VJbnQobGFzdFBhcnQsIDEwKSA6IE5hTjtcbiAgbGV0IG5ld051bWJlciA9IDE7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG51bWJlclN1ZmZpeCkpIHtcbiAgICBuZXdOdW1iZXIgPSBudW1iZXJTdWZmaXggKyAxO1xuICAgIG5hbWVQYXJ0cy5wb3AoKTsgLy8gUmVtb3ZlIHRoZSBleGlzdGluZyBudW1iZXIgc3VmZml4IGJlZm9yZSBhZGRpbmcgbmV3IG51bWJlciBzdWZmaXguXG4gIH1cbiAgY29uc3QgbmV3TmFtZSA9IGAke25hbWVQYXJ0cy5qb2luKHNlcGFyYXRvcil9JHtzZXBhcmF0b3J9JHtuZXdOdW1iZXJ9YDtcbiAgcmV0dXJuIGAke25ld05hbWV9LiR7ZmlsZUV4dGVuc2lvbn1gO1xufTtcbiIsImltcG9ydCB7TXVsdGlGaWxlU291cmNlLCBQcm9qZWN0RmlsZX0gZnJvbSAnQGNkby9hcHBzL2xhYjIvdHlwZXMnO1xuaW1wb3J0IHtnZXRGaWxlRXh0ZW5zaW9ufSBmcm9tICdAY2RvL2FwcHMvbGFiMi91dGlscy9tdWx0aUZpbGVTb3VyY2VVdGlscyc7XG5cbi8vIFJldHVybnMgYSBsaXN0IG9mIGZpbGVzIG1hdGNoaW5nIHRoZSBnaXZlbiBleHRlbnNpb24gKGVnLCAnaHRtbCcpLlxuZXhwb3J0IGNvbnN0IGdldEZpbGVzQnlMYW5ndWFnZSA9IChcbiAgc291cmNlOiBNdWx0aUZpbGVTb3VyY2UgfCB1bmRlZmluZWQsXG4gIGxhbmd1YWdlOiBzdHJpbmdcbik6IFByb2plY3RGaWxlW10gPT4ge1xuICBpZiAoIXNvdXJjZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHNvdXJjZS5maWxlcykuZmlsdGVyKFxuICAgIGZpbGUgPT4gZ2V0RmlsZUV4dGVuc2lvbihmaWxlLm5hbWUpID09PSBsYW5ndWFnZVxuICApO1xufTtcbiIsImltcG9ydCB7UHJvamVjdEZvbGRlcn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZ2V0Rm9sZGVyQ2hpbGRyZW4gPSAoXG4gIGZvbGRlcklkOiBzdHJpbmcsXG4gIHByb2plY3RGb2xkZXJzOiBQcm9qZWN0Rm9sZGVyW11cbikgPT4ge1xuICBjb25zdCBjaGlsZHJlbiA9IHByb2plY3RGb2xkZXJzLmZpbHRlcihcbiAgICBmb2xkZXIgPT4gZm9sZGVyLnBhcmVudElkID09PSBmb2xkZXJJZFxuICApO1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGFsbENoaWxkSWRzID0gY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkLmlkKTtcbiAgY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgYWxsQ2hpbGRJZHMucHVzaCguLi5nZXRGb2xkZXJDaGlsZHJlbihjaGlsZC5pZCwgcHJvamVjdEZvbGRlcnMpKTtcbiAgfSk7XG4gIHJldHVybiBhbGxDaGlsZElkcztcbn07XG4iLCJpbXBvcnQge0RFRkFVTFRfRk9MREVSX0lEfSBmcm9tICdAY29kZWJyaWRnZS9jb25zdGFudHMnO1xuaW1wb3J0IHtGb2xkZXJJZCwgUHJvamVjdEZvbGRlcn0gZnJvbSAnQGNvZGVicmlkZ2UvdHlwZXMnO1xuXG4vKipcbiAqIEdldHMgdGhlIGZ1bGwgcGF0aCBvZiBhIGZvbGRlciB3aXRoaW4gYSBwcm9qZWN0LCBnaXZlbiBpdHMgSUQgYW5kIGEgbGlzdCBvZiBhbGwgcHJvamVjdCBmb2xkZXJzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSBmb2xkZXIgaGllcmFyY2h5IGJ5IHJlY3Vyc2l2ZWx5IHNlYXJjaGluZyBmb3IgcGFyZW50IGZvbGRlcnMgdXNpbmcgdGhlaXIgSURzLlxuICogSWYgdGhlIHNwZWNpZmllZCBmb2xkZXIgaXMgbm90IGZvdW5kIG9yIGhhcyBubyBwYXJlbnQgZm9sZGVycywgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBmb2xkZXJJZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGZvbGRlci5cbiAqIEBwYXJhbSBwcm9qZWN0Rm9sZGVycyAtIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIGZvbGRlcnMgd2l0aGluIHRoZSBwcm9qZWN0LCBpbmNsdWRpbmcgdGhlIHRhcmdldCBmb2xkZXIuXG4gKiBAcmV0dXJucyAtIEFuIGFycmF5IG9mIGFsbCBwYXJlbnQgZm9sZGVyIGlkcyArIHRoZSBvcmlnaW5hbCBmb2xkZXIgaWQsIGluIG9yZGVyIGZyb20gbW9zdCBkaXN0YW50IHRvIHRoZSBmb2xkZXIgaWRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZvbGRlckxpbmVhZ2UgPSAoXG4gIGZvbGRlcklkOiBGb2xkZXJJZCxcbiAgcHJvamVjdEZvbGRlcnM6IFByb2plY3RGb2xkZXJbXVxuKSA9PiB7XG4gIC8vIGlmIHdlJ3JlIGdpdmVuIHRoZSBERUZBVUxUX0ZPTERFUl9JRCwgdGhlbiB3cmFwIGFuZCByZXR1cm4gaXRcbiAgaWYgKGZvbGRlcklkID09PSBERUZBVUxUX0ZPTERFUl9JRCkge1xuICAgIHJldHVybiBbREVGQVVMVF9GT0xERVJfSURdO1xuICB9XG5cbiAgbGV0IGZvbGRlciA9IHByb2plY3RGb2xkZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmb2xkZXJJZCk7XG5cbiAgaWYgKCFmb2xkZXIpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcGFyZW50czogRm9sZGVySWRbXSA9IFtdO1xuXG4gIHdoaWxlIChmb2xkZXIpIHtcbiAgICAvLyB0aGlzIHNob3VsZG4ndCBhY3R1YWxseSBoYXBwZW4gaW4gcHJvZCwgYnV0IGp1c3QgaW4gY2FzZSBhIHVzZXIgc29tZWhvdyBtYW5hZ2VkIHRvIGNyZWF0ZSBhIGNpcmN1bGFyIGxvb3Agb2YgZm9sZGVycyxcbiAgICAvLyB0aGlzJ2xsIGJyZWFrIHRoZW0gb3V0IG9mIGl0IGluc3RlYWQgb2YgbG9vcGluZyBmb3JldmVyLlxuICAgIGlmIChwYXJlbnRzLmluY2x1ZGVzKGZvbGRlci5pZCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHBhcmVudHMudW5zaGlmdChmb2xkZXIuaWQpO1xuICAgIGZvbGRlciA9IHByb2plY3RGb2xkZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmb2xkZXI/LnBhcmVudElkKTtcbiAgfVxuXG4gIHBhcmVudHMudW5zaGlmdChERUZBVUxUX0ZPTERFUl9JRCk7IC8vIGFuZCB0aGUgZmlyc3QgZWxlbWVudCBzaG91bGQgYWx3YXlzIGJlIHRoZSBwcm9qZWN0IHJvb3RcblxuICByZXR1cm4gcGFyZW50cztcbn07XG4iLCJpbXBvcnQge0RFRkFVTFRfRk9MREVSX0lEfSBmcm9tICdAY29kZWJyaWRnZS9jb25zdGFudHMnO1xuaW1wb3J0IHtGb2xkZXJJZH0gZnJvbSAnQGNvZGVicmlkZ2UvdHlwZXMnO1xuXG5pbXBvcnQge011bHRpRmlsZVNvdXJjZX0gZnJvbSAnQGNkby9hcHBzL2xhYjIvdHlwZXMnO1xuXG5pbXBvcnQge2dldEZvbGRlckxpbmVhZ2V9IGZyb20gJy4vZ2V0Rm9sZGVyTGluZWFnZSc7XG5cbi8qKlxuICogR2V0cyB0aGUgZnVsbCBwYXRoIG9mIGEgZm9sZGVyIHdpdGhpbiBhIHByb2plY3QsIGdpdmVuIGl0cyBJRCBhbmQgYSBsaXN0IG9mIGFsbCBwcm9qZWN0IGZvbGRlcnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIGZvbGRlciBoaWVyYXJjaHkgYnkgcmVjdXJzaXZlbHkgc2VhcmNoaW5nIGZvciBwYXJlbnQgZm9sZGVycyB1c2luZyB0aGVpciBJRHMuXG4gKiBJZiB0aGUgc3BlY2lmaWVkIGZvbGRlciBpcyBub3QgZm91bmQgb3IgaGFzIG5vIHBhcmVudCBmb2xkZXJzLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIGZvbGRlcklkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZm9sZGVyLlxuICogQHBhcmFtIHByb2plY3RGb2xkZXJzIC0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgZm9sZGVycyB3aXRoaW4gdGhlIHByb2plY3QsIGluY2x1ZGluZyB0aGUgdGFyZ2V0IGZvbGRlci5cbiAqIEByZXR1cm5zIC0gVGhlIGZ1bGwgcGF0aCBvZiB0aGUgdGFyZ2V0IGZvbGRlciwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZvbGRlclBhdGggPSAoXG4gIGZvbGRlcklkOiBGb2xkZXJJZCxcbiAgcHJvamVjdEZvbGRlcnM6IE11bHRpRmlsZVNvdXJjZVsnZm9sZGVycyddXG4pID0+IHtcbiAgaWYgKGZvbGRlcklkID09PSBERUZBVUxUX0ZPTERFUl9JRCkge1xuICAgIHJldHVybiAnLyc7XG4gIH1cblxuICBjb25zdCBmdWxsUGF0aCA9IGdldEZvbGRlckxpbmVhZ2UoZm9sZGVySWQsIE9iamVjdC52YWx1ZXMocHJvamVjdEZvbGRlcnMpKTtcblxuICByZXR1cm4gZnVsbFBhdGhcbiAgICAubWFwKGlkID0+IChpZCA9PT0gREVGQVVMVF9GT0xERVJfSUQgPyAnJyA6IHByb2plY3RGb2xkZXJzW2lkXS5uYW1lKSlcbiAgICAuam9pbignLycpO1xufTtcbiIsImltcG9ydCB7TXVsdGlGaWxlU291cmNlfSBmcm9tICdAY2RvL2FwcHMvbGFiMi90eXBlcyc7XG5cbmltcG9ydCB7c2hvdWxkU2hvd0ZpbGV9IGZyb20gJy4vZmlsZVV0aWxzJztcbmltcG9ydCB7c29ydEZpbGVzQnlOYW1lfSBmcm9tICcuL3NvcnRGaWxlc0J5TmFtZSc7XG5cbi8qKlxuICogUmV0cmlldmVzIGFuIGFycmF5IG9mIG9wZW4gZmlsZSBvYmplY3RzIGZyb20gdGhlIHNvdXJjZSwgZmlsdGVyaW5nIGJhc2VkIG9uIHRoZSBgc2hvdWxkU2hvd0ZpbGVgIGZ1bmN0aW9uLlxuICpcbiAqIElmIHRoZSBzb3VyY2UgaGFzIGEgZGVmaW5lZCBgb3BlbkZpbGVzYCBwcm9wZXJ0eSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBvcGVuIGZpbGVzIHRoYXRcbiAgIHBhc3MgdGhlIGBzaG91bGRTaG93RmlsZWAgY2hlY2suIFRoZSBjaGVjayBpcyBwZXJmb3JtZWQgb24gdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSBvYmplY3Qgb2J0YWluZWQgZnJvbSB0aGVcbiAgIHNvdXJjZSdzIGBmaWxlc2AgcHJvcGVydHkgdXNpbmcgdGhlIGZpbGUgSUQuXG4gKlxuICogSWYgYG9wZW5GaWxlc2AgaXMgbm90IGRlZmluZWQsIHRoZSBmdW5jdGlvbiBmaXJzdCBzb3J0cyBhbGwgc291cmNlIGZpbGVzIGJ5IG5hbWUgYW5kIHRoZW4gZmlsdGVycyB0aGUgc29ydGVkXG4gICBmaWxlcyB1c2luZyB0aGUgYHNob3VsZFNob3dGaWxlYCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbiBkZXBlbmRzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYHNob3VsZFNob3dGaWxlYCBmdW5jdGlvbiAobm90IHByb3ZpZGVkKS5cbiAqXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBvcGVuIGZpbGUgb2JqZWN0cyB0aGF0IHBhc3MgdGhlIGBzaG91bGRTaG93RmlsZWAgY2hlY2sgYW5kIHNob3VsZCBiZSBzaG93bi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE9wZW5GaWxlcyA9IChzb3VyY2U6IE11bHRpRmlsZVNvdXJjZSkgPT4ge1xuICBpZiAoc291cmNlLm9wZW5GaWxlcykge1xuICAgIHJldHVybiBzb3VyY2Uub3BlbkZpbGVzXG4gICAgICAuZmlsdGVyKGYgPT4gc2hvdWxkU2hvd0ZpbGUoc291cmNlLmZpbGVzW2ZdKSlcbiAgICAgIC5tYXAoZmlsZUlkID0+IHNvdXJjZS5maWxlc1tmaWxlSWRdKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc29ydEZpbGVzQnlOYW1lKHNvdXJjZSwge211c3RCZU9wZW46IHRydWV9KS5maWx0ZXIoZiA9PlxuICAgICAgc2hvdWxkU2hvd0ZpbGUoZilcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIGFuIGFycmF5IG9mIG9wZW4gZmlsZSBJRHMgZnJvbSBhIHNvdXJjZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlbGllcyBvbiBgZ2V0T3BlbkZpbGVzYCB0byByZXRyaWV2ZSB0aGUgYWN0dWFsIG9wZW4gZmlsZSBvYmplY3RzLiBJdCB0aGVuIGl0ZXJhdGVzIG92ZXIgdGhvc2UgZmlsZXMgYW5kXG4gKiBleHRyYWN0cyB0aGVpciBgaWRgIHByb3BlcnRpZXMsIHJldHVybmluZyBhbiBhcnJheSBvZiBmaWxlIElEcy5cbiAqXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIHRoZSBJRHMgb2YgdGhlIG9wZW4gZmlsZXMgaW4gdGhlIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE9wZW5GaWxlSWRzID0gKHNvdXJjZTogTXVsdGlGaWxlU291cmNlKSA9PiB7XG4gIGNvbnN0IG9wZW5GaWxlcyA9IGdldE9wZW5GaWxlcyhzb3VyY2UpO1xuXG4gIHJldHVybiBvcGVuRmlsZXMubWFwKGZpbGUgPT4gZmlsZS5pZCk7XG59O1xuIiwiaW1wb3J0IHtERUZBVUxUX0ZPTERFUl9JRH0gZnJvbSAnQGNvZGVicmlkZ2UvY29uc3RhbnRzJztcbmltcG9ydCB7UHJvamVjdEZpbGV9IGZyb20gJ0Bjb2RlYnJpZGdlL3R5cGVzJztcblxuaW1wb3J0IHtNdWx0aUZpbGVTb3VyY2V9IGZyb20gJ0BjZG8vYXBwcy9sYWIyL3R5cGVzJztcblxuaW1wb3J0IHt2YWxpZGF0ZUZpbGVOYW1lfSBmcm9tICcuL3ZhbGlkYXRlRmlsZU5hbWUnO1xuXG50eXBlIEdldFBvc3NpYmxlRGVzdGluYXRpb25Gb2xkZXJzRm9yRmlsZUFyZ3MgPSB7XG4gIGZpbGU6IFByb2plY3RGaWxlO1xuICBwcm9qZWN0RmlsZXM6IE11bHRpRmlsZVNvdXJjZVsnZmlsZXMnXTtcbiAgcHJvamVjdEZvbGRlcnM6IE11bHRpRmlsZVNvdXJjZVsnZm9sZGVycyddO1xuICBpc1N0YXJ0TW9kZTogYm9vbGVhbjtcbiAgdmFsaWRhdGlvbkZpbGU6IFByb2plY3RGaWxlIHwgdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGEgbGlzdCBvZiBwb3NzaWJsZSBkZXN0aW5hdGlvbiBmb2xkZXJzIGZvciBhIGdpdmVuIHByb2plY3QgZmlsZS5cbiAqXG4gKiBDYWxsIGl0IHdpdGggYSBmaWxlICsgdmFyaW91cyBzdXBwb3J0IGRhdGEsIGFuZCBpdCB3aWxsIHJldHVybiBhIGxpc3Qgb2YgZm9sZGVycyB0aGF0IHRoZSBmaWxlIGNvdWxkIGJlIG1vdmVkIGludG8uXG4gKlxuICogQHBhcmFtIGFyZ3MgQW4gb2JqZWN0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbGUgYW5kIHByb2plY3QuXG4gKlxuICogQHByb3BlcnR5IGFyZ3MuZmlsZSAtIFRoZSBQcm9qZWN0RmlsZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBmaWxlIGluIHF1ZXN0aW9uLlxuICogQHByb3BlcnR5IGFyZ3MucHJvamVjdEZpbGVzIC0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZXhpc3RpbmcgZmlsZXMgaW4gdGhlIHByb2plY3QuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3RydWN0dXJlIHNob3VsZCBtYXRjaCB0aGUgYFByb2plY3RUeXBlWydmaWxlcyddYCB0eXBlIGZyb20gYEBjb2RlYnJpZGdlL3R5cGVzYC5cbiAqIEBwcm9wZXJ0eSBhcmdzLnByb2plY3RGb2xkZXJzIC0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgYXZhaWxhYmxlIGZvbGRlcnMgaW4gdGhlIHByb2plY3QuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3RydWN0dXJlIHNob3VsZCBtYXRjaCB0aGUgYFByb2plY3RUeXBlWydmb2xkZXJzJ11gIHR5cGUgZnJvbSBgQGNvZGVicmlkZ2UvdHlwZXNgLlxuICogQHByb3BlcnR5IGFyZ3MuaXNTdGFydE1vZGUgLSBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBwcm9qZWN0IGlzIGluIHN0YXJ0IG1vZGUgKGluaXRpYWwgY3JlYXRpb24pLlxuICogQHByb3BlcnR5IGFyZ3MudmFsaWRhdGlvbkZpbGUgLSBBbiBvcHRpb25hbCBQcm9qZWN0RmlsZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgZmlsZSB1c2VkIGZvciB2YWxpZGF0aW9uIHB1cnBvc2VzLlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZvbGRlciBvYmplY3RzIHRoYXQgdGhpcyBmaWxlIGNvdWxkIGJlIHBsYWNlZCBpbnRvXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0UG9zc2libGVEZXN0aW5hdGlvbkZvbGRlcnNGb3JGaWxlID0gKHtcbiAgZmlsZSxcbiAgcHJvamVjdEZpbGVzLFxuICBwcm9qZWN0Rm9sZGVycyxcbiAgaXNTdGFydE1vZGUsXG4gIHZhbGlkYXRpb25GaWxlLFxufTogR2V0UG9zc2libGVEZXN0aW5hdGlvbkZvbGRlcnNGb3JGaWxlQXJncykgPT5cbiAgW3tpZDogREVGQVVMVF9GT0xERVJfSUR9LCAuLi5PYmplY3QudmFsdWVzKHByb2plY3RGb2xkZXJzKV0uZmlsdGVyKFxuICAgIGYgPT5cbiAgICAgICFCb29sZWFuKFxuICAgICAgICB2YWxpZGF0ZUZpbGVOYW1lKHtcbiAgICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgIGZvbGRlcklkOiBmLmlkLFxuICAgICAgICAgIHByb2plY3RGaWxlcyxcbiAgICAgICAgICBpc1N0YXJ0TW9kZSxcbiAgICAgICAgICB2YWxpZGF0aW9uRmlsZSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgKTtcbiIsImltcG9ydCB7REVGQVVMVF9GT0xERVJfSUR9IGZyb20gJ0Bjb2RlYnJpZGdlL2NvbnN0YW50cyc7XG5pbXBvcnQge1Byb2plY3RGb2xkZXJ9IGZyb20gJ0Bjb2RlYnJpZGdlL3R5cGVzJztcblxuaW1wb3J0IHtNdWx0aUZpbGVTb3VyY2V9IGZyb20gJ0BjZG8vYXBwcy9sYWIyL3R5cGVzJztcblxuaW1wb3J0IHt2YWxpZGF0ZUZvbGRlck1vdmV9IGZyb20gJy4vdmFsaWRhdGVGb2xkZXJNb3ZlJztcblxudHlwZSBHZXRQb3NzaWJsZURlc3RpbmF0aW9uRm9sZGVyc0ZvckZvbGRlckFyZ3MgPSB7XG4gIGZvbGRlcjogUHJvamVjdEZvbGRlcjtcbiAgcHJvamVjdEZvbGRlcnM6IE11bHRpRmlsZVNvdXJjZVsnZm9sZGVycyddO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGEgbGlzdCBvZiBwb3NzaWJsZSBkZXN0aW5hdGlvbiBmb2xkZXJzIGZvciBhIGdpdmVuIGZvbGRlci5cbiAqXG4gKiBDYWxsIGl0IHdpdGggYSBmb2xkZXIgKyB0aGUgcHJvamVjdC5mb2xkZXJzIG9iamVjdCwgYW5kIGl0IHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBmb2xkZXJzIHRoYXQgdGhlIGZvbGRlciBjb3VsZCBiZSBtb3ZlZCBpbnRvLlxuICpcbiAqIEBwYXJhbSBhcmdzIEFuIG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmb2xkZXIgYW5kIHByb2plY3QuXG4gKlxuICogQHByb3BlcnR5IGFyZ3MuZm9sZGVyIC0gVGhlIFByb2plY3RGb2xkZXIgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZm9sZGVyIGluIHF1ZXN0aW9uLlxuICogQHByb3BlcnR5IGFyZ3MucHJvamVjdEZvbGRlcnMgLSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBhdmFpbGFibGUgZm9sZGVycyBpbiB0aGUgcHJvamVjdC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBzdHJ1Y3R1cmUgc2hvdWxkIG1hdGNoIHRoZSBgUHJvamVjdFR5cGVbJ2ZvbGRlcnMnXWAgdHlwZSBmcm9tIGBAY29kZWJyaWRnZS90eXBlc2AuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm9sZGVyIG9iamVjdHMgdGhhdCB0aGlzIGZvbGRlciBjb3VsZCBiZSBwbGFjZWQgaW50b1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFBvc3NpYmxlRGVzdGluYXRpb25Gb2xkZXJzRm9yRm9sZGVyID0gKHtcbiAgZm9sZGVyLFxuICBwcm9qZWN0Rm9sZGVycyxcbn06IEdldFBvc3NpYmxlRGVzdGluYXRpb25Gb2xkZXJzRm9yRm9sZGVyQXJncykgPT5cbiAgW3tpZDogREVGQVVMVF9GT0xERVJfSUR9LCAuLi5PYmplY3QudmFsdWVzKHByb2plY3RGb2xkZXJzKV0uZmlsdGVyKFxuICAgIGYgPT5cbiAgICAgIGYuaWQgIT09IGZvbGRlci5pZCAmJlxuICAgICAgIUJvb2xlYW4odmFsaWRhdGVGb2xkZXJNb3ZlKGZvbGRlci5uYW1lLCBmLmlkLCBwcm9qZWN0Rm9sZGVycywgZm9sZGVyLmlkKSlcbiAgKTtcbiIsImltcG9ydCB7Z2V0RmlsZUV4dGVuc2lvbn0gZnJvbSAnQGNkby9hcHBzL2xhYjIvdXRpbHMvbXVsdGlGaWxlU291cmNlVXRpbHMnO1xuXG5pbXBvcnQge1Byb2plY3RGaWxlfSBmcm9tICcuLi90eXBlcyc7XG5cbi8vIEdpdmVuIGEgUHJvamVjdEZpbGUsIGVpdGhlciBjcmVhdGUgYSBCbG9iIFVSTCBmb3IgaXQgb3IgZ2V0IGl0cyBleHRlcm5hbCBVUkwuXG5leHBvcnQgY29uc3QgZ2V0VXJsRm9yRmlsZSA9IChcbiAgZmlsZTogUHJvamVjdEZpbGUsXG4gIHBhcmVudE9yaWdpbjogc3RyaW5nLFxuICBleHRlcm5hbEZpbGVUeXBlczogc3RyaW5nW11cbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGV4dCA9IGdldEZpbGVFeHRlbnNpb24oZmlsZS5uYW1lKTtcbiAgbGV0IGZpbGVUeXBlID0gJyc7XG4gIGlmIChleHRlcm5hbEZpbGVUeXBlcy5pbmNsdWRlcyhleHQpKSB7XG4gICAgcmV0dXJuIGAke3BhcmVudE9yaWdpbn0ke2ZpbGU/LnVybH1gIHx8ICcnO1xuICB9IGVsc2UgaWYgKGV4dCA9PT0gJ2NzcycgfHwgZXh0ID09PSAnY3N2Jykge1xuICAgIGZpbGVUeXBlID0gYHRleHQvJHtleHR9YDtcbiAgfSBlbHNlIGlmIChleHQgPT09ICdqcycpIHtcbiAgICBmaWxlVHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICB9XG4gIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZmlsZS5jb250ZW50c10sIHt0eXBlOiBmaWxlVHlwZX0pO1xuICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbn07XG4iLCJleHBvcnQgZnVuY3Rpb24gaGFzUHJldmlldyhtaW5pQXBwOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgLy8gQW55IGxhYiB3aXRoIGEgbWluaSBhcHAgaGFzIGEgcHJldmlldy5cbiAgcmV0dXJuIG1pbmlBcHAgIT09IHVuZGVmaW5lZDtcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vYWlUdXRvclV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vZWRpdGFibGVGaWxlVHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldFVybEZvckZpbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9pc0R1cGxpY2F0ZUZpbGVOYW1lJztcbmV4cG9ydCAqIGZyb20gJy4vaXNEdXBsaWNhdGVGb2xkZXJOYW1lJztcbmV4cG9ydCAqIGZyb20gJy4vaXNWYWxpZEZpbGVOYW1lJztcbmV4cG9ydCAqIGZyb20gJy4vaXNWYWxpZEZvbGRlck5hbWUnO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlVXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9maW5kRmlsZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbmRGb2xkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9nZXRFbXB0eVByb2plY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXRFcnJvck1lc3NhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXRGaWxlTmFtZVdpdGhOdW1iZXJTdWZmaXgnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXRGaWxlc0J5TGFuZ3VhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXRGb2xkZXJDaGlsZHJlbic7XG5leHBvcnQgKiBmcm9tICcuL2dldEZvbGRlckxpbmVhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXRGb2xkZXJQYXRoJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0T3BlbkZpbGVzJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0UG9zc2libGVEZXN0aW5hdGlvbkZvbGRlcnNGb3JGaWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0UG9zc2libGVEZXN0aW5hdGlvbkZvbGRlcnNGb3JGb2xkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9oYXNQcmV2aWV3JztcbmV4cG9ydCAqIGZyb20gJy4vcmVwYWlyT3BlbkZpbGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc29ydEZpbGVzQnlOYW1lJztcbmV4cG9ydCAqIGZyb20gJy4vdW5pcXVlRmlsZU5hbWUnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0ZUJhY2twYWNrRmlsZU5hbWUnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0ZUZpbGVOYW1lJztcbmV4cG9ydCAqIGZyb20gJy4vdmFsaWRhdGVGb2xkZXJNb3ZlJztcbmV4cG9ydCAqIGZyb20gJy4vdmFsaWRhdGVGb2xkZXJOYW1lJztcbmV4cG9ydCAqIGZyb20gJy4vdmlld2FibGVJbWFnZUZpbGVUeXBlJztcbiIsImltcG9ydCB7UHJvamVjdEZpbGV9IGZyb20gJ0Bjb2RlYnJpZGdlL3R5cGVzJztcblxuaW1wb3J0IHtQcm9qZWN0RmlsZVR5cGV9IGZyb20gJ0BjZG8vYXBwcy9sYWIyL3R5cGVzJztcblxudHlwZSBJc0R1cGxpY2F0ZUZpbGVOYW1lQXJncyA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZm9sZGVySWQ6IHN0cmluZztcbiAgcHJvamVjdEZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9qZWN0RmlsZT47XG4gIGlzU3RhcnRNb2RlOiBib29sZWFuO1xuICB2YWxpZGF0aW9uRmlsZT86IFByb2plY3RGaWxlO1xufTtcblxuZXhwb3J0IGVudW0gRHVwbGljYXRlRmlsZUVycm9yIHtcbiAgRFVQTElDQVRFX0ZJTEUgPSAnRFVQTElDQVRFX0ZJTEUnLFxuICBEVVBMSUNBVEVfU1VQUE9SVF9GSUxFID0gJ0RVUExJQ0FURV9TVVBQT1JUX0ZJTEUnLFxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgbmFtZSBhbHJlYWR5IGV4aXN0cyB3aXRoaW4gYSBnaXZlbiBmb2xkZXIuXG4gKlxuICogQHBhcmFtIGFyZ3MgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAtICoqZmlsZU5hbWU6KiogVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gY2hlY2suXG4gKiAgIC0gKipmb2xkZXJJZDoqKiBUaGUgSUQgb2YgdGhlIHBhcmVudCBmb2xkZXIgZm9yIHRoZSBmaWxlLlxuICogICAtICoqcHJvamVjdEZpbGVzOioqIEFuIGFycmF5IG9mIHByb2plY3QgZmlsZXMuXG4gKiAgIC0gKippc1N0YXJ0TW9kZToqKiBJbmRpY2F0ZXMgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGluIHN0YXJ0IG1vZGUuXG4gKiAgIC0gKip2YWxpZGF0aW9uRmlsZToqKiBUaGUgdmFsaWRhdGlvbiBmaWxlIChvcHRpb25hbCkuXG4gKlxuICogQHJldHVybnMgQSB0cnV0aHkgdmFsdWUgaW5kaWNhdGluZyBhIGR1cGxpY2F0ZSBmaWxlIHNpdHVhdGlvbiBvciBgZmFsc2VgIGlmIG5vdCBhIGR1cGxpY2F0ZTpcbiAqICAgLSAqKkR1cGxpY2F0ZUZpbGVFcnJvci5EVVBMSUNBVEVfU1VQUE9SVF9GSUxFOioqIElmIHRoZSBmaWxlIG5hbWUgbWF0Y2hlcyB0aGUgdmFsaWRhdGlvbiBmaWxlIG5hbWUgaW4gbm9uLXN0YXJ0IG1vZGUsIG9yIGlmIGFuIGV4aXN0aW5nIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZCBmb2xkZXIgSUQgaXMgYSBzdXBwb3J0IG9yIHZhbGlkYXRpb24gZmlsZS5cbiAqICAgLSAqKkR1cGxpY2F0ZUZpbGVFcnJvci5EVVBMSUNBVEVfRklMRToqKiBJZiBhbiBleGlzdGluZyBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgZm9sZGVyIElEIGlzIG5vdCBhIHN1cHBvcnQgb3IgdmFsaWRhdGlvbiBmaWxlLlxuICogICAtICoqZmFsc2U6KiogSWYgdGhlIGZpbGUgbmFtZSBpcyBub3QgYSBkdXBsaWNhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0R1cGxpY2F0ZUZpbGVOYW1lID0gKHtcbiAgZmlsZU5hbWUsXG4gIGZvbGRlcklkLFxuICBwcm9qZWN0RmlsZXMsXG4gIGlzU3RhcnRNb2RlLFxuICB2YWxpZGF0aW9uRmlsZSxcbn06IElzRHVwbGljYXRlRmlsZU5hbWVBcmdzKSA9PiB7XG4gIC8vIFRoZSB2YWxpZGF0aW9uIGZpbGUgaXMgaW4gdGhlIHByb2plY3QgZmlsZXMgaW4gc3RhcnQgbW9kZS5cbiAgaWYgKCFpc1N0YXJ0TW9kZSAmJiB2YWxpZGF0aW9uRmlsZT8ubmFtZSA9PT0gZmlsZU5hbWUpIHtcbiAgICByZXR1cm4gRHVwbGljYXRlRmlsZUVycm9yLkRVUExJQ0FURV9TVVBQT1JUX0ZJTEU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZXhpc3RpbmdGaWxlID0gT2JqZWN0LnZhbHVlcyhwcm9qZWN0RmlsZXMpLmZpbmQoXG4gICAgICBmID0+IGYubmFtZSA9PT0gZmlsZU5hbWUgJiYgZi5mb2xkZXJJZCA9PT0gZm9sZGVySWRcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0ZpbGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZXhpc3RpbmdGaWxlLnR5cGUgPT09IFByb2plY3RGaWxlVHlwZS5TVVBQT1JUIHx8XG4gICAgICAgIGV4aXN0aW5nRmlsZS50eXBlID09PSBQcm9qZWN0RmlsZVR5cGUuVkFMSURBVElPTiB8fFxuICAgICAgICBleGlzdGluZ0ZpbGUudHlwZSA9PT0gUHJvamVjdEZpbGVUeXBlLlNZU1RFTV9TVVBQT1JUXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIER1cGxpY2F0ZUZpbGVFcnJvci5EVVBMSUNBVEVfU1VQUE9SVF9GSUxFO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIER1cGxpY2F0ZUZpbGVFcnJvci5EVVBMSUNBVEVfRklMRTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiaW1wb3J0IHtQcm9qZWN0Rm9sZGVyfSBmcm9tICdAY29kZWJyaWRnZS90eXBlcyc7XG5cbnR5cGUgSXNEdXBsaWNhdGVGb2xkZXJOYW1lQXJncyA9IHtcbiAgZm9sZGVyTmFtZTogc3RyaW5nO1xuICBwYXJlbnRJZDogc3RyaW5nO1xuICBwcm9qZWN0Rm9sZGVyczogUmVjb3JkPHN0cmluZywgUHJvamVjdEZvbGRlcj47XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZvbGRlciBuYW1lIGFscmVhZHkgZXhpc3RzIHdpdGhpbiBhIHNwZWNpZmljIHBhcmVudCBmb2xkZXIuXG4gKlxuICogQHBhcmFtIGFyZ3MgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAtICoqZm9sZGVyTmFtZToqKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIHRvIGNoZWNrIGZvciBkdXBsaWNhdGVzLlxuICogICAtICoqcGFyZW50SWQ6KiogVGhlIElEIG9mIHRoZSBwYXJlbnQgZm9sZGVyIHdoZXJlIHRoZSBuZXcgZm9sZGVyIHdvdWxkIGJlIGNyZWF0ZWQuXG4gKiAgIC0gKipwcm9qZWN0Rm9sZGVyczoqKiBBbiBhcnJheSBvZiBwcm9qZWN0IGZvbGRlcnMuXG4gKlxuICogQHJldHVybnMgYHRydWVgIGlmIGEgZm9sZGVyIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyB3aXRoaW4gdGhlIHBhcmVudCBmb2xkZXIsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgY29uc3QgaXNEdXBsaWNhdGVGb2xkZXJOYW1lID0gKHtcbiAgZm9sZGVyTmFtZSxcbiAgcGFyZW50SWQsXG4gIHByb2plY3RGb2xkZXJzLFxufTogSXNEdXBsaWNhdGVGb2xkZXJOYW1lQXJncykgPT5cbiAgT2JqZWN0LnZhbHVlcyhwcm9qZWN0Rm9sZGVycykuc29tZShcbiAgICBmID0+IGYubmFtZSA9PT0gZm9sZGVyTmFtZSAmJiBmLnBhcmVudElkID09PSBwYXJlbnRJZFxuICApO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBmaWxlIG5hbWUuXG4gKlxuICogQSB2YWxpZCBmaWxlIG5hbWUgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgd29yZCBjaGFyYWN0ZXJzIChsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3Jlcykgb3IgaHlwaGVucy5cbiAqIFdoZW4gYSBkcm9wZG93biBpcyBwcmVzZW50LCB0aGUgZmlsZSBleHRlbnNpb24gaXMgcHJvdmlkZWQgc2VwYXJhdGVseSwgc28gcGVyaW9kcyBhcmUgbm90IGFsbG93ZWQuXG4gKiBXaGVuIG5vIGRyb3Bkb3duIGlzIHByZXNlbnQsIHRoZSBmaWxlIGV4dGVuc2lvbiBpcyBvcHRpb25hbC5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBzdHJpbmcgdG8gY2hlY2suXG4gKiBAcGFyYW0gaGFzRHJvcGRvd24gLSBXaGV0aGVyIGEgZHJvcGRvd24gaXMgcHJlc2VudCBmb3Igc2VsZWN0aW5nIHRoZSBmaWxlIGV4dGVuc2lvbi5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgZmlsZSBuYW1lLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVmFsaWRGaWxlTmFtZSA9IChcbiAgbmFtZTogc3RyaW5nID0gJycsXG4gIGhhc0Ryb3Bkb3duOiBib29sZWFuID0gZmFsc2VcbikgPT5cbiAgaGFzRHJvcGRvd25cbiAgICA/IEJvb2xlYW4obmFtZS5tYXRjaCgvXltcXHctXSskLykpXG4gICAgOiBCb29sZWFuKG5hbWUubWF0Y2goL15bXFx3LV0rKFxcLlxcdyspPyQvKSk7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIGZvbGRlciBuYW1lLlxuICpcbiAqIEEgdmFsaWQgZm9sZGVyIG5hbWUgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgd29yZCBjaGFyYWN0ZXJzIChsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3Jlcykgb3IgaHlwaGVucy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBzdHJpbmcgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGZvbGRlciBuYW1lLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVmFsaWRGb2xkZXJOYW1lID0gKG5hbWU6IHN0cmluZyA9ICcnKSA9PlxuICBCb29sZWFuKG5hbWUubWF0Y2goL15bXFx3LV0rJC8pKTtcbiIsImltcG9ydCB7TXVsdGlGaWxlU291cmNlfSBmcm9tICdAY2RvL2FwcHMvbGFiMi90eXBlcyc7XG5cbi8vIFdlIHVzZWQgdG8gaGF2ZSBhbiAnb3BlbicgYXR0cmlidXRlIG9uIGZpbGVzLCBidXQgbm93IHdlIHRyYWNrIG9wZW4gZmlsZXNcbi8vIGluIHNvdXJjZS5vcGVuRmlsZXMuIFRoaXMgaXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggd2hpY2ggYWxsb3dzIGZvciB0YWIgb3JkZXJpbmcuXG4vLyBTb21lIHByb2plY3RzIG1heSBub3QgaGF2ZSBhbiBvcGVuRmlsZXMgYXJyYXkgZHVlIHRvIGxlZ2FjeSByZWFzb25zIGJ1dCBkb1xuLy8gaGF2ZSBcImFjdGl2ZVwiIGFuZC9vciBcIm9wZW5cIiBmaWxlcy4gSW4gdGhpcyBjYXNlLCB3ZSB3aWxsIHNldCBvcGVuRmlsZXMgdG8gYmUgdGhlXG4vLyBhY3RpdmUgYW5kL29yIG9wZW4gZmlsZXMuXG5leHBvcnQgY29uc3QgcmVwYWlyT3BlbkZpbGVzID0gKHNvdXJjZTogTXVsdGlGaWxlU291cmNlKTogTXVsdGlGaWxlU291cmNlID0+IHtcbiAgY29uc3Qgb3BlbkZpbGVzID0gc291cmNlLm9wZW5GaWxlcyA/IFsuLi5zb3VyY2Uub3BlbkZpbGVzXSA6IFtdO1xuICBsZXQgdXBkYXRlZE9wZW5MaXN0ID0gZmFsc2U7XG4gIE9iamVjdC52YWx1ZXMoc291cmNlLmZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgIGNvbnN0IGlzT3BlbiA9IChmaWxlIGFzIHVua25vd24gYXMge29wZW46IGJvb2xlYW59KS5vcGVuOyAvLyBMZWdhY3kgb3BlbiBhdHRyaWJ1dGVcbiAgICBpZiAoKGlzT3BlbiB8fCBmaWxlLmFjdGl2ZSkgJiYgIW9wZW5GaWxlcy5pbmNsdWRlcyhmaWxlLmlkKSkge1xuICAgICAgb3BlbkZpbGVzLnB1c2goZmlsZS5pZCk7XG4gICAgICB1cGRhdGVkT3Blbkxpc3QgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIGlmICh1cGRhdGVkT3Blbkxpc3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc291cmNlLFxuICAgICAgb3BlbkZpbGVzLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHNvdXJjZTtcbn07XG4iLCJpbXBvcnQge011bHRpRmlsZVNvdXJjZX0gZnJvbSAnQGNkby9hcHBzL2xhYjIvdHlwZXMnO1xuXG4vKipcbiAqIFNvcnRzIGFuIGFycmF5IG9mIGZpbGVzIGJ5IHRoZWlyIG5hbWVzLlxuICpcbiAqIEBwYXJhbSBmaWxlcyAtIEEgcmVjb3JkIG9mIHtbaWQgOiBGaWxlSWRdIDogUHJvamVjdEZpbGV9XG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICogICogYG9wdGlvbnMubXVzdEJlT3BlbmAgKGRlZmF1bHQ6IGB0cnVlYCk6IFdoZXRoZXIgdG8gaW5jbHVkZSBvbmx5IG9wZW4gZmlsZXMgaW4gdGhlIHNvcnRpbmcuXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSBjb250YWluaW5nIHRoZSBzb3J0ZWQgZmlsZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0RmlsZXNCeU5hbWUgPSAoXG4gIHNvdXJjZTogTXVsdGlGaWxlU291cmNlLFxuICBvcHRpb25zID0ge211c3RCZU9wZW46IHRydWV9XG4pID0+IHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoc291cmNlLmZpbGVzKVxuICAgIC5maWx0ZXIoXG4gICAgICBmID0+XG4gICAgICAgICFvcHRpb25zLm11c3RCZU9wZW4gfHxcbiAgICAgICAgKHNvdXJjZS5vcGVuRmlsZXM/LmluY2x1ZGVzKGYuaWQpICYmIG9wdGlvbnMubXVzdEJlT3BlbilcbiAgICApXG4gICAgLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xufTtcbiIsImltcG9ydCB7Z2V0RmlsZU5hbWVXaXRoTnVtYmVyU3VmZml4fSBmcm9tICcuL2dldEZpbGVOYW1lV2l0aE51bWJlclN1ZmZpeCc7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5wdXQgZmlsZW5hbWUgaWYgaXQgZG9lcyBub3QgY29sbGlkZSB3aXRoIGFueSBuYW1lIGluXG4gKiBgZXhpc3RpbmdgLiBPdGhlcndpc2UsIGluY3JlbWVudHMgYSBudW1lcmljIHN1ZmZpeCB1bnRpbCB0aGUgcmVzdWx0IGlzXG4gKiB1bmlxdWUuXG4gKi9cbmV4cG9ydCBjb25zdCB1bmlxdWVGaWxlTmFtZSA9IChcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgZXhpc3Rpbmc6IHN0cmluZ1tdLFxuICBzZXBhcmF0b3IgPSAnXydcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRha2VuID0gbmV3IFNldChleGlzdGluZyk7XG4gIGxldCBjYW5kaWRhdGUgPSBmaWxlbmFtZTtcbiAgd2hpbGUgKHRha2VuLmhhcyhjYW5kaWRhdGUpKSB7XG4gICAgY2FuZGlkYXRlID0gZ2V0RmlsZU5hbWVXaXRoTnVtYmVyU3VmZml4KGNhbmRpZGF0ZSwgc2VwYXJhdG9yKTtcbiAgfVxuICByZXR1cm4gY2FuZGlkYXRlO1xufTtcbiIsImltcG9ydCB7REVGQVVMVF9GT0xERVJfSUR9IGZyb20gJ0Bjb2RlYnJpZGdlL2NvbnN0YW50cyc7XG5pbXBvcnQge1Byb2plY3RGaWxlfSBmcm9tICdAY29kZWJyaWRnZS90eXBlcyc7XG5cbmltcG9ydCB7Z2V0RmlsZU5hbWVXaXRoTnVtYmVyU3VmZml4fSBmcm9tICcuL2dldEZpbGVOYW1lV2l0aE51bWJlclN1ZmZpeCc7XG5pbXBvcnQge2lzRHVwbGljYXRlRmlsZU5hbWUsIER1cGxpY2F0ZUZpbGVFcnJvcn0gZnJvbSAnLi9pc0R1cGxpY2F0ZUZpbGVOYW1lJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQmFja3BhY2tGaWxlTmFtZShcbiAgc2VsZWN0ZWRGaWxlOiBzdHJpbmcsXG4gIHByb2plY3RGaWxlczogUmVjb3JkPHN0cmluZywgUHJvamVjdEZpbGU+LFxuICB2YWxpZGF0aW9uRmlsZT86IFByb2plY3RGaWxlXG4pIHtcbiAgbGV0IGlzRHVwbGljYXRlTmFtZSA9IGlzRHVwbGljYXRlRmlsZU5hbWUoe1xuICAgIGZpbGVOYW1lOiBzZWxlY3RlZEZpbGUsXG4gICAgZm9sZGVySWQ6IERFRkFVTFRfRk9MREVSX0lELFxuICAgIHByb2plY3RGaWxlcyxcbiAgICBpc1N0YXJ0TW9kZTogZmFsc2UsXG4gICAgdmFsaWRhdGlvbkZpbGUsXG4gIH0pO1xuICBjb25zdCBpc1N1cHBvcnRGaWxlTmFtZSA9XG4gICAgaXNEdXBsaWNhdGVOYW1lID09PSBEdXBsaWNhdGVGaWxlRXJyb3IuRFVQTElDQVRFX1NVUFBPUlRfRklMRTtcbiAgbGV0IG5ld0ZpbGVOYW1lID0gc2VsZWN0ZWRGaWxlO1xuICB3aGlsZSAoaXNEdXBsaWNhdGVOYW1lKSB7XG4gICAgbmV3RmlsZU5hbWUgPSBnZXRGaWxlTmFtZVdpdGhOdW1iZXJTdWZmaXgobmV3RmlsZU5hbWUpO1xuICAgIGlzRHVwbGljYXRlTmFtZSA9IGlzRHVwbGljYXRlRmlsZU5hbWUoe1xuICAgICAgZmlsZU5hbWU6IG5ld0ZpbGVOYW1lLFxuICAgICAgZm9sZGVySWQ6IERFRkFVTFRfRk9MREVSX0lELFxuICAgICAgcHJvamVjdEZpbGVzLFxuICAgICAgaXNTdGFydE1vZGU6IGZhbHNlLFxuICAgICAgdmFsaWRhdGlvbkZpbGUsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtpc1N1cHBvcnRGaWxlTmFtZSwgbmV3RmlsZU5hbWV9O1xufVxuIiwiaW1wb3J0IHtJTlZBTElEX05BTUVfRVJST1J9IGZyb20gJ0Bjb2RlYnJpZGdlL2NvbnN0YW50cyc7XG5pbXBvcnQge0ZvbGRlcklkLCBQcm9qZWN0RmlsZX0gZnJvbSAnQGNvZGVicmlkZ2UvdHlwZXMnO1xuXG5pbXBvcnQgY29kZWJyaWRnZUkxOG4gZnJvbSAnQGNkby9hcHBzL2NvZGVicmlkZ2UvbG9jYWxlJztcbmltcG9ydCB7TXVsdGlGaWxlU291cmNlfSBmcm9tICdAY2RvL2FwcHMvbGFiMi90eXBlcyc7XG5cbmltcG9ydCB7aXNEdXBsaWNhdGVGaWxlTmFtZSwgRHVwbGljYXRlRmlsZUVycm9yfSBmcm9tICcuL2lzRHVwbGljYXRlRmlsZU5hbWUnO1xuaW1wb3J0IHtpc1ZhbGlkRmlsZU5hbWV9IGZyb20gJy4vaXNWYWxpZEZpbGVOYW1lJztcblxudHlwZSBWYWxpZGF0ZUZpbGVOYW1lQXJncyA9IHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZm9sZGVySWQ6IEZvbGRlcklkO1xuICBwcm9qZWN0RmlsZXM6IE11bHRpRmlsZVNvdXJjZVsnZmlsZXMnXTtcbiAgaXNTdGFydE1vZGU6IGJvb2xlYW47XG4gIHZhbGlkYXRpb25GaWxlOiBQcm9qZWN0RmlsZSB8IHVuZGVmaW5lZDtcbiAgdmFsaWRGaWxlVHlwZXM/OiBzdHJpbmdbXTtcbiAgc2VsZWN0ZWRGaWxlVHlwZT86IHN0cmluZztcbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgZmlsZSBuYW1lLiBJbnRlcm5hbGx5LCB0aGlzIGNoZWNrcyB0byBjb25maXJtIHRoYXQgdGhlIGZpbGUgaGFzIGFuIGV4dGVuc2lvbiwgdGhlIGZpbGUgbmFtZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0XG4gICBpbiB0aGUgcGFyZW50IGZvbGRlciwgYW5kIHRoYXQgdGhlIGZpbGUgbmFtZSBpcyB2YWxpZC4gQmUgYXdhcmUgdGhhdCBhbiBlbXB0eSBzdHJpbmcgaXMgY29uc2lkZXJlZCBhIHZhbGlkIG5hbWUuXG4gICBJZiB0aGUgb3B0aW9uYWwgdmFsaWRGaWxlVHlwZXMgbGlzdCBpcyBwYXNzZWQsIHRoaXMgY2hlY2tzIHdoZXRoZXIgZmlsZSBleHRlbnNpb24gaXMgaW5jbHVkZWQgaW4gdGhlIGxpc3QuXG4gKlxuICogQHBhcmFtIGFyZ3MgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogICAtICoqZmlsZU5hbWU6KiogVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gdmFsaWRhdGUuXG4gKiAgIC0gKipmb2xkZXJJZDoqKiBUaGUgSUQgb2YgdGhlIHBhcmVudCBmb2xkZXIuXG4gKiAgIC0gKipwcm9qZWN0RmlsZXM6KiogQW4gYXJyYXkgb2YgcHJvamVjdCBmaWxlcy5cbiAqICAgLSAqKmlzU3RhcnRNb2RlOioqIEluZGljYXRlcyBpZiB0aGUgYXBwbGljYXRpb24gaXMgaW4gc3RhcnQgbW9kZS5cbiAqICAgLSAqKnZhbGlkYXRpb25GaWxlOioqIFRoZSB2YWxpZGF0aW9uIGZpbGUuXG4gKiAgIC0gKip2YWxpZEZpbGVUeXBlczoqKiBMaXN0IG9mIHZhbGlkIGZpbGUgdHlwZXMgKG9wdGlvbmFsKVxuICogICAtICoqc2VsZWN0ZWRGaWxlVHlwZToqKiBUaGUgZmlsZSB0eXBlIHNlbGVjdGVkIGZyb20gYSBkcm9wZG93biAob3B0aW9uYWwpLlxuICogICAgIFdoZW4gcHJvdmlkZWQsIHRoaXMgaXMgdXNlZCBpbnN0ZWFkIG9mIGV4dHJhY3RpbmcgdGhlIGV4dGVuc2lvbiBmcm9tIHRoZVxuICogICAgIGZpbGUgbmFtZSBmb3IgdmFsaWRhdGlvbiBhZ2FpbnN0IHZhbGlkRmlsZVR5cGVzLlxuICogQHJldHVybnMgQSBzdHJpbmcgZXJyb3IgbWVzc2FnZSBpZiB0aGUgZmlsZSBuYW1lIGlzIGludmFsaWQsIG9yIHVuZGVmaW5lZCBpZiB0aGUgZmlsZSBuYW1lIGlzIHZhbGlkLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVGaWxlTmFtZSA9ICh7XG4gIGZpbGVOYW1lLFxuICBmb2xkZXJJZCxcbiAgcHJvamVjdEZpbGVzLFxuICBpc1N0YXJ0TW9kZSxcbiAgdmFsaWRhdGlvbkZpbGUsXG4gIHZhbGlkRmlsZVR5cGVzLFxuICBzZWxlY3RlZEZpbGVUeXBlLFxufTogVmFsaWRhdGVGaWxlTmFtZUFyZ3MpID0+IHtcbiAgaWYgKCFmaWxlTmFtZS5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJZiBzZWxlY3RlZEZpbGVUeXBlIGlzIHByb3ZpZGVkLCB1c2UgaXQgZm9yIHZhbGlkYXRpb24gaW5zdGVhZCBvZiBleHRyYWN0aW5nIGZyb20gZmlsZW5hbWUuXG4gIC8vIFRoaXMgYWxsb3dzIHRoZSBmaWxlIGV4dGVuc2lvbiB0byBjb21lIGZyb20gYSBkcm9wZG93biBzZWxlY3Rpb24gcmF0aGVyIHRoYW4gcmVxdWlyaW5nXG4gIC8vIHVzZXJzIHRvIHR5cGUgdGhlIGV4dGVuc2lvbiBpbiB0aGUgZmlsZW5hbWUuXG4gIGlmIChzZWxlY3RlZEZpbGVUeXBlKSB7XG4gICAgLy8gU2tpcCBleHRlbnNpb24gdmFsaWRhdGlvbiBzaW5jZSB0aGUgZXh0ZW5zaW9uIGNvbWVzIGZyb20gdGhlIGRyb3Bkb3duLlxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGZpbGVOYW1lLnNwbGl0KCcuJykucG9wKCk7XG4gICAgaWYgKCFleHRlbnNpb24gfHwgZXh0ZW5zaW9uID09PSBmaWxlTmFtZSkge1xuICAgICAgcmV0dXJuIGNvZGVicmlkZ2VJMThuLm5vRmlsZUV4dGVuc2lvbkVycm9yKCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkRmlsZVR5cGVzICYmICF2YWxpZEZpbGVUeXBlcy5pbmNsdWRlcyhleHRlbnNpb24pKSB7XG4gICAgICBjb25zdCB2YWxpZEZpbGVUeXBlc1N0cmluZyA9IHZhbGlkRmlsZVR5cGVzLmpvaW4oJywgJyk7XG4gICAgICByZXR1cm4gYCR7Y29kZWJyaWRnZUkxOG4uaW52YWxpZEZpbGVUeXBlKHtcbiAgICAgICAgZmlsZVR5cGU6IGV4dGVuc2lvbixcbiAgICAgIH0pfSAke2NvZGVicmlkZ2VJMThuLnZhbGlkRmlsZVR5cGVzSW5mbyh7XG4gICAgICAgIHZhbGlkRmlsZVR5cGVzOiB2YWxpZEZpbGVUeXBlc1N0cmluZyxcbiAgICAgIH0pfWA7XG4gICAgfVxuICB9XG5cbiAgLy8gV2hlbiB0aGUgZXh0ZW5zaW9uIGNvbWVzIGZyb20gdGhlIGRyb3Bkb3duLCB0aGUgYmFzZSBuYW1lIG11c3Qgbm90IGNhcnJ5XG4gIC8vIGl0cyBvd24gcGVyaW9kIOKAlCBvdGhlcndpc2UgXCJNeS5DbGFzc1wiICsgZHJvcGRvd24gXCJqYXZhXCIgeWllbGRzIHRoZVxuICAvLyBub25zZW5zZSBcIk15LkNsYXNzLmphdmFcIi4gUGFzc2luZyBoYXNEcm9wZG93biBlbmZvcmNlcyB0aGUgbm8tcGVyaW9kIHJ1bGUuXG4gIGlmICghaXNWYWxpZEZpbGVOYW1lKGZpbGVOYW1lLCBCb29sZWFuKHNlbGVjdGVkRmlsZVR5cGUpKSkge1xuICAgIHJldHVybiBJTlZBTElEX05BTUVfRVJST1I7XG4gIH1cblxuICAvLyBXaGVuIHRoZSBleHRlbnNpb24gY29tZXMgZnJvbSB0aGUgZHJvcGRvd24sIGBmaWxlTmFtZWAgaXMganVzdCB0aGUgYmFzZVxuICAvLyBuYW1lLiBUaGUgZHVwbGljYXRlIGNoZWNrIGNvbXBhcmVzIGFnYWluc3QgZnVsbCBmaWxlIG5hbWVzLCBzbyByZWNvbWJpbmVcbiAgLy8gYmVmb3JlIGNoZWNraW5nLlxuICBjb25zdCBmdWxsRmlsZU5hbWUgPSBzZWxlY3RlZEZpbGVUeXBlXG4gICAgPyBgJHtmaWxlTmFtZX0uJHtzZWxlY3RlZEZpbGVUeXBlfWBcbiAgICA6IGZpbGVOYW1lO1xuXG4gIGNvbnN0IGR1cGxpY2F0ZUZpbGVFcnJvciA9IGlzRHVwbGljYXRlRmlsZU5hbWUoe1xuICAgIGZpbGVOYW1lOiBmdWxsRmlsZU5hbWUsXG4gICAgZm9sZGVySWQsXG4gICAgcHJvamVjdEZpbGVzLFxuICAgIGlzU3RhcnRNb2RlLFxuICAgIHZhbGlkYXRpb25GaWxlLFxuICB9KTtcblxuICBpZiAoZHVwbGljYXRlRmlsZUVycm9yKSB7XG4gICAgaWYgKGR1cGxpY2F0ZUZpbGVFcnJvciA9PT0gRHVwbGljYXRlRmlsZUVycm9yLkRVUExJQ0FURV9TVVBQT1JUX0ZJTEUpIHtcbiAgICAgIHJldHVybiBjb2RlYnJpZGdlSTE4bi5kdXBsaWNhdGVTdXBwb3J0RmlsZUVycm9yKHtmaWxlTmFtZTogZnVsbEZpbGVOYW1lfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjb2RlYnJpZGdlSTE4bi5kdXBsaWNhdGVGaWxlRXJyb3Ioe2ZpbGVOYW1lOiBmdWxsRmlsZU5hbWV9KTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUZpbGVOYW1lRm9yTW9kYWwgPSAoXG4gIGFyZ3M6IFZhbGlkYXRlRmlsZU5hbWVBcmdzXG4pOiB7dGV4dDogc3RyaW5nOyB0eXBlOiAnZXJyb3InIHwgJ3dhcm5pbmcnfSB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IHZhbGlkYXRlRmlsZU5hbWUoYXJncyk7XG4gIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogZXJyb3JNZXNzYWdlLFxuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICB9O1xuICB9XG59O1xuIiwiaW1wb3J0IGNvZGVicmlkZ2VJMThuIGZyb20gJ0BjZG8vYXBwcy9jb2RlYnJpZGdlL2xvY2FsZSc7XG5pbXBvcnQge1Byb2plY3RGb2xkZXJ9IGZyb20gJ0BjZG8vYXBwcy9sYWIyL3R5cGVzJztcblxuaW1wb3J0IHtnZXRGb2xkZXJDaGlsZHJlbn0gZnJvbSAnLi9nZXRGb2xkZXJDaGlsZHJlbic7XG5pbXBvcnQge3ZhbGlkYXRlRm9sZGVyTmFtZX0gZnJvbSAnLi92YWxpZGF0ZUZvbGRlck5hbWUnO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVGb2xkZXJNb3ZlID0gKFxuICBmb2xkZXJOYW1lOiBzdHJpbmcsXG4gIHBhcmVudElkOiBzdHJpbmcsXG4gIHByb2plY3RGb2xkZXJzOiBSZWNvcmQ8c3RyaW5nLCBQcm9qZWN0Rm9sZGVyPixcbiAgZm9sZGVySWQ6IHN0cmluZ1xuKSA9PiB7XG4gIGxldCB2YWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0ZUZvbGRlck5hbWUoe1xuICAgIGZvbGRlck5hbWUsXG4gICAgcGFyZW50SWQsXG4gICAgcHJvamVjdEZvbGRlcnMsXG4gIH0pO1xuICBpZiAoIXZhbGlkYXRpb25FcnJvcikge1xuICAgIGNvbnN0IGNoaWxkRm9sZGVycyA9IGdldEZvbGRlckNoaWxkcmVuKFxuICAgICAgZm9sZGVySWQsXG4gICAgICBPYmplY3QudmFsdWVzKHByb2plY3RGb2xkZXJzKVxuICAgICk7XG4gICAgaWYgKGNoaWxkRm9sZGVycy5pbmNsdWRlcyhwYXJlbnRJZCkpIHtcbiAgICAgIHZhbGlkYXRpb25FcnJvciA9IGNvZGVicmlkZ2VJMThuLm1vdmVGb2xkZXJFcnJvckNoaWxkKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWxpZGF0aW9uRXJyb3I7XG59O1xuIiwiaW1wb3J0IHtJTlZBTElEX05BTUVfRVJST1J9IGZyb20gJ0Bjb2RlYnJpZGdlL2NvbnN0YW50cyc7XG5pbXBvcnQge0ZvbGRlcklkfSBmcm9tICdAY29kZWJyaWRnZS90eXBlcyc7XG5cbmltcG9ydCBjb2RlYnJpZGdlSTE4biBmcm9tICdAY2RvL2FwcHMvY29kZWJyaWRnZS9sb2NhbGUnO1xuaW1wb3J0IHtNdWx0aUZpbGVTb3VyY2V9IGZyb20gJ0BjZG8vYXBwcy9sYWIyL3R5cGVzJztcblxuaW1wb3J0IHtpc0R1cGxpY2F0ZUZvbGRlck5hbWV9IGZyb20gJy4vaXNEdXBsaWNhdGVGb2xkZXJOYW1lJztcbmltcG9ydCB7aXNWYWxpZEZvbGRlck5hbWV9IGZyb20gJy4vaXNWYWxpZEZvbGRlck5hbWUnO1xuXG50eXBlIFZhbGlkYXRlRm9sZGVyTmFtZUFyZ3MgPSB7XG4gIGZvbGRlck5hbWU6IHN0cmluZztcbiAgcGFyZW50SWQ6IEZvbGRlcklkO1xuICBwcm9qZWN0Rm9sZGVyczogTXVsdGlGaWxlU291cmNlWydmb2xkZXJzJ107XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlcyBhIGZvbGRlciBuYW1lLiBJbnRlcm5hbGx5LCB0aGlzIGNoZWNrcyB0byBjb25maXJtIHRoYXQgdGhlIGZvbGRlciBuYW1lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgaW4gdGhlIHBhcmVudCBmb2xkZXIsXG4gICBhbmQgdGhhdCB0aGUgZm9sZGVyIG5hbWUgaXMgdmFsaWQuIEJlIGF3YXJlIHRoYXQgYW4gZW1wdHkgc3RyaW5nIGlzIGNvbnNpZGVyZWQgYSB2YWxpZCBuYW1lLlxuICpcbiAqIEBwYXJhbSBhcmdzIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqICAgLSAqKmZvbGRlck5hbWU6KiogVGhlIG5hbWUgb2YgdGhlIGZvbGRlciB0byB2YWxpZGF0ZS5cbiAqICAgLSAqKnBhcmVudElkOioqIFRoZSBJRCBvZiB0aGUgcGFyZW50IGZvbGRlci5cbiAqICAgLSAqKnByb2plY3RGb2xkZXJzOioqIEFuIGFycmF5IG9mIHByb2plY3QgZm9sZGVycy5cbiAqXG4gKiBAcmV0dXJucyBBIHN0cmluZyBlcnJvciBtZXNzYWdlIGlmIHRoZSBmb2xkZXIgbmFtZSBpcyBpbnZhbGlkLCBvciB1bmRlZmluZWQgaWYgdGhlIGZvbGRlciBuYW1lIGlzIHZhbGlkLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVGb2xkZXJOYW1lID0gKHtcbiAgZm9sZGVyTmFtZSxcbiAgcGFyZW50SWQsXG4gIHByb2plY3RGb2xkZXJzLFxufTogVmFsaWRhdGVGb2xkZXJOYW1lQXJncykgPT4ge1xuICBpZiAoIWZvbGRlck5hbWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghaXNWYWxpZEZvbGRlck5hbWUoZm9sZGVyTmFtZSkpIHtcbiAgICByZXR1cm4gSU5WQUxJRF9OQU1FX0VSUk9SO1xuICB9XG5cbiAgY29uc3QgZHVwbGljYXRlID0gaXNEdXBsaWNhdGVGb2xkZXJOYW1lKHtcbiAgICBmb2xkZXJOYW1lLFxuICAgIHBhcmVudElkLFxuICAgIHByb2plY3RGb2xkZXJzLFxuICB9KTtcblxuICBpZiAoZHVwbGljYXRlKSB7XG4gICAgcmV0dXJuIGNvZGVicmlkZ2VJMThuLmR1cGxpY2F0ZUZvbGRlckVycm9yKHtmb2xkZXJOYW1lfSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUZvbGRlck5hbWVGb3JNb2RhbCA9IChcbiAgYXJnczogVmFsaWRhdGVGb2xkZXJOYW1lQXJnc1xuKToge3RleHQ6IHN0cmluZzsgdHlwZTogJ2Vycm9yJyB8ICd3YXJuaW5nJ30gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPSB2YWxpZGF0ZUZvbGRlck5hbWUoYXJncyk7XG4gIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogZXJyb3JNZXNzYWdlLFxuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICB9O1xuICB9XG59O1xuIiwiaW1wb3J0IHtXRUJMQUIyX0lNQUdFX0ZJTEVfVFlQRVN9IGZyb20gJ0BjZG8vYXBwcy93ZWJsYWIyL2NvbnN0YW50cyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIGZpbGUgZXh0ZW5zaW9uIGlzIGEgdmlld2FibGUgaW1hZ2UgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb24gLSBUaGUgZmlsZSBleHRlbnNpb24gdG8gY2hlY2sgKGUuZy4sIFwianBnXCIsIFwicG5nXCIpLlxuICogQHBhcmFtIHZpZXdhYmxlSW1hZ2VGaWxlVHlwZXNBcnJheSAtIEFuIG9wdGlvbmFsIGFycmF5IG9mIHZpZXdhYmxlIGltYWdlIGZpbGUgZXh0ZW5zaW9ucy4gSWYgbm90IHByb3ZpZGVkLCBhIGRlZmF1bHQgYXJyYXkgaXMgdXNlZC5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZmlsZSBleHRlbnNpb24gaXMgYSB2aWV3YWJsZSBpbWFnZSBmb3JtYXQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgY29uc3Qgdmlld2FibGVJbWFnZUZpbGVUeXBlID0gKFxuICBleHRlbnNpb246IHN0cmluZyxcbiAgdmlld2FibGVJbWFnZUZpbGVUeXBlc0FycmF5ID0gV0VCTEFCMl9JTUFHRV9GSUxFX1RZUEVTXG4pID0+IHtcbiAgY29uc3Qgdmlld2FibGVJbWFnZUZpbGVUeXBlcyA9IG5ldyBTZXQodmlld2FibGVJbWFnZUZpbGVUeXBlc0FycmF5KTtcbiAgcmV0dXJuIHZpZXdhYmxlSW1hZ2VGaWxlVHlwZXMuaGFzKGV4dGVuc2lvbik7XG59O1xuIiwiaW1wb3J0IHtBcHBOYW1lLCBQcm9qZWN0VHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBTT1VSQ0VfRklMRSA9ICdtYWluLmpzb24nO1xuXG5leHBvcnQgY29uc3QgQkxPQ0tMWV9MQUJTOiBBcHBOYW1lW10gPSBbJ2RhbmNlJywgJ211c2ljJ107XG5cbmV4cG9ydCBjb25zdCBMQUJTX1dJVEhfSlNPTl9TT1VSQ0VTOiBBcHBOYW1lW10gPSBbJ2FpY2hhdCddO1xuXG5leHBvcnQgY29uc3QgTUFJTl9QWVRIT05fRklMRSA9ICdtYWluLnB5JztcblxuZXhwb3J0IGVudW0gUEVSTUlTU0lPTlMge1xuICAvLyBBZGQgbW9yZSBwZXJtaXNzaW9ucyBhcyBuZWVkZWQuXG4gIExFVkVMQlVJTERFUiA9ICdsZXZlbGJ1aWxkZXInLFxuICBQUk9KRUNUX1ZBTElEQVRPUiA9ICdwcm9qZWN0X3ZhbGlkYXRvcicsXG59XG5cbmV4cG9ydCBjb25zdCBTVEFSVF9TT1VSQ0VTID0gJ3N0YXJ0X3NvdXJjZXMnO1xuZXhwb3J0IGNvbnN0IFRPT0xCT1hfQkxPQ0tTID0gJ3Rvb2xib3hfYmxvY2tzJztcbmV4cG9ydCBjb25zdCBFRElUX0VYRU1QTEFSID0gJ2VkaXRfZXhlbXBsYXInO1xuZXhwb3J0IGNvbnN0IFdJREdFVDJfU09VUkNFUyA9ICd3aWRnZXQyX3NvdXJjZXMnO1xuXG5leHBvcnQgY29uc3QgUFJPSkVDVF9UWVBFU19VU0lOR19ORVdfU0hBUkVfRElBTE9HOiBQcm9qZWN0VHlwZVtdID0gW1xuICAnbXVzaWMnLFxuICAncHl0aG9ubGFiJyxcbiAgJ3dlYmxhYjInLFxuICAnbXVzaWNfZGFuY2VfYWknLFxuXTtcblxuLy8gVGV4dC1iYXNlZCBsYWJzIHRoYXQgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgbGFiMi5cbmV4cG9ydCBjb25zdCBURVhUX0JBU0VEX0xBQlM6IEFwcE5hbWVbXSA9IFsnYWljaGF0JywgJ3B5dGhvbmxhYicsICd3ZWJsYWIyJ107XG5cbi8vIEJhbm5lciBtZXNzYWdlcyB0byBzaG93IGZvciB2YXJpb3VzIG1vZGVzLlxuZXhwb3J0IGVudW0gV0FSTklOR19CQU5ORVJfTUVTU0FHRVMge1xuICBTVEFOREFSRCA9ICdZb3UgYXJlIGVkaXRpbmcgc3RhcnQgc291cmNlcy4nLFxuICBURU1QTEFURSA9ICdXQVJOSU5HOiBZb3UgYXJlIGVkaXRpbmcgc3RhcnQgc291cmNlcyBmb3IgYSBsZXZlbCB3aXRoIGEgdGVtcGxhdGUuIFN0YXJ0IHNvdXJjZXMgc2hvdWxkIGJlIGRlZmluZWQgb24gdGhlIHRlbXBsYXRlLicsXG4gIExPQ0tfRklMRVMgPSAnUmVtaW5kZXI6IGxvY2sgYWxsIHN0YXJ0IGZpbGVzIHlvdXIgdmFsaWRhdGlvbiBmaWxlIHJlZmVyZW5jZXMuJyxcbiAgVE9PTEJPWF9NT0RFID0gJ1lvdSBhcmUgZWRpdGluZyB0b29sYm94IGJsb2Nrcy4nLFxuICBFWEVNUExBUl9NT0RFID0gJ1lvdSBhcmUgZWRpdGluZyBleGVtcGxhciBzb3VyY2VzLicsXG4gIFZJRVdJTkdfRVhFTVBMQVIgPSAnWW91IGFyZSB2aWV3aW5nIGFuIGV4YW1wbGUgc29sdXRpb24uJyxcbiAgVklFV0lOR19WRVJTSU9OID0gJ1lvdSBhcmUgdmlld2luZyBhbiBvbGRlciB2ZXJzaW9uIG9mIHRoaXMgcHJvamVjdC4gVG8gY29udGludWUgd29ya2luZywgeW91IGNhbiBlaXRoZXIgcmVzdG9yZSB0aGlzIHZlcnNpb24gb3IgZ28gYmFjayB0byB0aGUgY3VycmVudCB2ZXJzaW9uLicsXG4gIEVESVRJTkdfV0lER0VUMiA9ICdZb3UgYXJlIGVkaXRpbmcgYSB3aWRnZXQyICh7d2lkZ2V0SWR9KS4gIENoYW5nZXMgd2lsbCBhZmZlY3QgYWxsIGxldmVscyB0aGF0IHVzZSBpdC4nLFxufVxuXG4vLyBEZWZhdWx0IGhlaWdodCBvZiB0aGUgcHJlZGljdCBxdWVzdGlvbiBmcmVlIHJlc3BvbnNlIHRleHQgYXJlYS5cbmV4cG9ydCBjb25zdCBQUkVESUNUX0ZSRUVfUkVTUE9OU0VfREVGQVVMVF9IRUlHSFQgPSA1MDtcblxuZXhwb3J0IGVudW0gRm9udFNpemUge1xuICBUaW55ID0gMTAsXG4gIFNtYWxsID0gMTMsIC8vIERlZmF1bHQgZm9udCBzaXplXG4gIE1lZGl1bSA9IDE3LFxuICBMYXJnZSA9IDIyLFxuICBIdWdlID0gMjcsXG59XG5cbmV4cG9ydCBjb25zdCBJTklUSUFMX1ZFUlNJT05fSUQgPSAnaW5pdGlhbC12ZXJzaW9uJztcbiIsImltcG9ydCB7U1RBUlRfU09VUkNFU30gZnJvbSAnQGNkby9hcHBzL2xhYjIvY29uc3RhbnRzJztcbmltcG9ydCBjdXJyZW50TG9jYWxlIGZyb20gJ0BjZG8vYXBwcy91dGlsL2N1cnJlbnRMb2NhbGUnO1xuaW1wb3J0IGdldFNjcmlwdERhdGEsIHtoYXNTY3JpcHREYXRhfSBmcm9tICdAY2RvL2FwcHMvdXRpbC9nZXRTY3JpcHREYXRhJztcblxuaW1wb3J0IHtNdWx0aUZpbGVTb3VyY2UsIFByb2plY3RGaWxlLCBQcm9qZWN0RmlsZVR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuLy8gUGFydGlhbCBkZWZpbml0aW9uIG9mIHRoZSBBcHAgT3B0aW9ucyBzdHJ1Y3R1cmUsIG9ubHkgZGVmaW5pbmcgdGhlXG4vLyBwaWVjZXMgd2UgbmVlZCBpbiB0aGlzIGNvbXBvbmVudC5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGlhbEFwcE9wdGlvbnMge1xuICBjaGFubmVsOiBzdHJpbmc7XG4gIGVkaXRCbG9ja3M6IHN0cmluZztcbiAgbGV2ZWxJZDogbnVtYmVyO1xuICBzaGFyZTogYm9vbGVhbjtcbiAgaXNFZGl0aW5nRXhlbXBsYXI6IGJvb2xlYW47XG4gIGlzVmlld2luZ0V4ZW1wbGFyOiBib29sZWFuO1xuICBwdWJsaWNDYWNoaW5nOiBib29sZWFuO1xuICB0aGVtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGZXRjaCB0aGUgSUQgb2YgdGhlIGN1cnJlbnQgcHJvamVjdCBmcm9tIHRoZSBBcHAgT3B0aW9ucyBvYmplY3RcbiAqIGlmIGN1cnJlbnRseSBvbiBhIHN0YW5kYWxvbmUgcHJvamVjdCBsZXZlbCAoaS5lLiB1bmRlciAvcHJvamVjdHMpLlxuICpcbiAqIEByZXR1cm5zIGNoYW5uZWwgSUQgaWYgb24gYSBzdGFuZGFsb25lIHByb2plY3QgbGV2ZWwsIG51bGwgaWYgbm90LlxuICpcbiAqIE5vdGU6IFdlIGFyZSB0cnlpbmcgdG8gdXNlIGFwcCBvcHRpb25zIGFzIGxpdHRsZSBhcyBwb3NzaWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYWxvbmVQcm9qZWN0SWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGhhc1NjcmlwdERhdGEoJ3NjcmlwdFtkYXRhLWFwcG9wdGlvbnNdJykpIHtcbiAgICBjb25zdCBhcHBPcHRpb25zID0gZ2V0U2NyaXB0RGF0YSgnYXBwb3B0aW9ucycpIGFzIFBhcnRpYWxBcHBPcHRpb25zO1xuICAgIHJldHVybiBhcHBPcHRpb25zLmNoYW5uZWw7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsZXZlbCBJRCBwcm92aWRlZCBieSBBcHAgT3B0aW9ucywgaWYgYXZhaWxhYmxlLlxuICogVGhpcyBpcyBzcGVjaWZpY2FsbHkgdXNlZCBpbiBzY2VuYXJpb3Mgd2hlcmUgdGhlIGxldmVsIElEIGlzIG5vdCBwcm92aWRlZFxuICogYnkgb3RoZXIgbWVhbnMgKGZvciBleGFtcGxlIHZpYSBoZWFkZXIuanMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBPcHRpb25zTGV2ZWxJZCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAoaGFzU2NyaXB0RGF0YSgnc2NyaXB0W2RhdGEtYXBwb3B0aW9uc10nKSkge1xuICAgIGNvbnN0IGFwcE9wdGlvbnMgPSBnZXRTY3JpcHREYXRhKCdhcHBvcHRpb25zJykgYXMgUGFydGlhbEFwcE9wdGlvbnM7XG4gICAgcmV0dXJuIGFwcE9wdGlvbnMubGV2ZWxJZDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVkaXQgbW9kZSBwcm92aWRlZCBieSBBcHAgT3B0aW9ucywgaWYgYXZhaWxhYmxlLlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byB0ZWxsIGlmIHdlIGFyZSBhIGxldmVsYnVpbGRlciBtb2RlIChlLmcuIHN0YXJ0X3NvdXJjZXMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBPcHRpb25zRWRpdEJsb2NrcygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoaGFzU2NyaXB0RGF0YSgnc2NyaXB0W2RhdGEtYXBwb3B0aW9uc10nKSkge1xuICAgIGNvbnN0IGFwcE9wdGlvbnMgPSBnZXRTY3JpcHREYXRhKCdhcHBvcHRpb25zJykgYXMgUGFydGlhbEFwcE9wdGlvbnM7XG4gICAgcmV0dXJuIGFwcE9wdGlvbnMuZWRpdEJsb2NrcztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXNTdGFydE1vZGUoKSB7XG4gIHJldHVybiBnZXRBcHBPcHRpb25zRWRpdEJsb2NrcygpID09PSBTVEFSVF9TT1VSQ0VTO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIG9mIGlzRWRpdGluZ0V4ZW1wbGFyIHByb3ZpZGVkIGJ5IEFwcCBPcHRpb25zLCBpZiBhdmFpbGFibGUuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHRlbGwgaWYgd2UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGV4ZW1wbGFycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcE9wdGlvbnNFZGl0aW5nRXhlbXBsYXIoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChoYXNTY3JpcHREYXRhKCdzY3JpcHRbZGF0YS1hcHBvcHRpb25zXScpKSB7XG4gICAgY29uc3QgYXBwT3B0aW9ucyA9IGdldFNjcmlwdERhdGEoJ2FwcG9wdGlvbnMnKSBhcyBQYXJ0aWFsQXBwT3B0aW9ucztcbiAgICByZXR1cm4gYXBwT3B0aW9ucy5pc0VkaXRpbmdFeGVtcGxhcjtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIG9mIGlzVmlld2luZ0V4ZW1wbGFyIHByb3ZpZGVkIGJ5IEFwcCBPcHRpb25zLCBpZiBhdmFpbGFibGUuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHRlbGwgaWYgd2UgYXJlIGN1cnJlbnRseSB2aWV3aW5nIGV4ZW1wbGFycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcE9wdGlvbnNWaWV3aW5nRXhlbXBsYXIoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChoYXNTY3JpcHREYXRhKCdzY3JpcHRbZGF0YS1hcHBvcHRpb25zXScpKSB7XG4gICAgY29uc3QgYXBwT3B0aW9ucyA9IGdldFNjcmlwdERhdGEoJ2FwcG9wdGlvbnMnKSBhcyBQYXJ0aWFsQXBwT3B0aW9ucztcbiAgICByZXR1cm4gYXBwT3B0aW9ucy5pc1ZpZXdpbmdFeGVtcGxhcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwT3B0aW9uc1RoZW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChoYXNTY3JpcHREYXRhKCdzY3JpcHRbZGF0YS1hcHBvcHRpb25zXScpKSB7XG4gICAgY29uc3QgYXBwT3B0aW9ucyA9IGdldFNjcmlwdERhdGEoJ2FwcG9wdGlvbnMnKSBhcyBQYXJ0aWFsQXBwT3B0aW9ucztcbiAgICByZXR1cm4gYXBwT3B0aW9ucy50aGVtZTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgaWYgdGhlIGxhYiBzaG91bGQgcHJlc2VudGVkIGluIGEgc2hhcmUvcGxheS1vbmx5IHZpZXcsXG4gKiBpZiBwcmVzZW50IGluIEFwcCBPcHRpb25zLiBPbmx5IHVzZWQgaW4gc3RhbmRhbG9uZSBwcm9qZWN0IGxldmVscy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElzU2hhcmVWaWV3KCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICBpZiAoaGFzU2NyaXB0RGF0YSgnc2NyaXB0W2RhdGEtYXBwb3B0aW9uc10nKSkge1xuICAgIGNvbnN0IGFwcE9wdGlvbnMgPSBnZXRTY3JpcHREYXRhKCdhcHBvcHRpb25zJykgYXMgUGFydGlhbEFwcE9wdGlvbnM7XG4gICAgcmV0dXJuIGFwcE9wdGlvbnMuc2hhcmU7XG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaCB3aGV0aGVyIHRoZSBwYWdlIGlzIGNhY2hlZC5cbiAqXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBwYWdlIGlzIGNhY2hlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFB1YmxpY0NhY2hpbmcoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChoYXNTY3JpcHREYXRhKCdzY3JpcHRbZGF0YS1hcHBvcHRpb25zXScpKSB7XG4gICAgY29uc3QgYXBwT3B0aW9ucyA9IGdldFNjcmlwdERhdGEoJ2FwcG9wdGlvbnMnKSBhcyBQYXJ0aWFsQXBwT3B0aW9ucztcbiAgICByZXR1cm4gYXBwT3B0aW9ucy5wdWJsaWNDYWNoaW5nO1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBtYXAgb2Yge2ZpbGVJZDogUHJvamVjdEZpbGV9LCByZXR1cm4gdGhlIGZpcnN0IGZpbGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAqIEBwYXJhbSBmaWxlcyAtIE1hcCBvZiB7ZmlsZUlkOiBQcm9qZWN0RmlsZX1cbiAqIEBwYXJhbSBuYW1lIC0gTmFtZSBvZiB0aGUgZmlsZSB0byBmaW5kXG4gKiBAcmV0dXJucyBUaGUgUHJvamVjdEZpbGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlQnlOYW1lKFxuICBmaWxlczogUmVjb3JkPHN0cmluZywgUHJvamVjdEZpbGU+LFxuICBuYW1lOiBzdHJpbmdcbikge1xuICBmb3IgKGNvbnN0IGZpbGVJZCBpbiBmaWxlcykge1xuICAgIGlmIChmaWxlc1tmaWxlSWRdLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBmaWxlc1tmaWxlSWRdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIG1hcCBvZiB7ZmlsZUlkOiBQcm9qZWN0RmlsZX0sIHJldHVybiB0aGUgZmlyc3Qgbm9uLWhpZGRlbiwgYWN0aXZlIGZpbGUuXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIE11bHRpRmlsZVNvdXJjZSBmb3IgYSBnaXZlbiBwcm9qZWN0LlxuICogQHJldHVybnMgVGhlIGZpcnN0IG5vbi1oaWRkZW4sIGFjdGl2ZSBmaWxlLCB0aGUgZmlyc3Qgb3BlbiBmaWxlIGlmIG5vIGZpbGVzIGFyZSBhY3RpdmUsXG4gKiBvciB1bmRlZmluZWQgaWYgbm8gZmlsZXMgYXJlIG9wZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3RpdmVGaWxlRm9yU291cmNlKHNvdXJjZTogTXVsdGlGaWxlU291cmNlKSB7XG4gIGNvbnN0IGZpbGVzID0gT2JqZWN0LnZhbHVlcyhzb3VyY2UuZmlsZXMpO1xuICBjb25zdCBpc1N0YXJ0TW9kZSA9IGdldEFwcE9wdGlvbnNFZGl0QmxvY2tzKCkgPT09IFNUQVJUX1NPVVJDRVM7XG4gIC8vIE9ubHkgc3lzdGVtIHN1cHBvcnQgZmlsZXMgYXJlIGhpZGRlbiBpbiBzdGFydCBtb2RlLiBJbiBub24tc3RhcnQgbW9kZSwgb25seSBzaG93IHN0YXJ0ZXIgZmlsZXNcbiAgLy8gKG9yIGZpbGVzIHdpdGhvdXQgYSB0eXBlLCB3aGljaCBkZWZhdWx0IHRvIHN0YXJ0ZXIgZmlsZXMpLlxuICBjb25zdCB2aXNpYmxlRmlsZXMgPSBmaWxlcy5maWx0ZXIoXG4gICAgZiA9PlxuICAgICAgKGlzU3RhcnRNb2RlICYmIGYudHlwZSAhPT0gUHJvamVjdEZpbGVUeXBlLlNZU1RFTV9TVVBQT1JUKSB8fFxuICAgICAgIWYudHlwZSB8fFxuICAgICAgZi50eXBlID09PSBQcm9qZWN0RmlsZVR5cGUuU1RBUlRFUiB8fFxuICAgICAgZi50eXBlID09PSBQcm9qZWN0RmlsZVR5cGUuTE9DS0VEX1NUQVJURVJcbiAgKTtcblxuICAvLyBHZXQgdGhlIGZpcnN0IGFjdGl2ZSBmaWxlLCBpZiBubyBhY3RpdmUgZmlsZSB0aGVuIHRoZSBmaXJzdCBvcGVuIGZpbGUsXG4gIC8vIG9yIHVuZGVmaW5lZCBpZiBubyBmaWxlcyBhcmUgb3Blbi5cbiAgcmV0dXJuIChcbiAgICB2aXNpYmxlRmlsZXMuZmluZChmID0+IGYuYWN0aXZlKSB8fFxuICAgIHZpc2libGVGaWxlcy5maW5kKGYgPT4gc291cmNlLm9wZW5GaWxlcz8uaW5jbHVkZXMoZi5pZCkpXG4gICk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxhbmd1YWdlIGNvb2tpZSAoZWcsIGVuLVVTLCB3aGljaCBpcyBhbHNvIHRoZSBkZWZhdWx0IGlmIHRoZSBjb29raWUgaXMgbm90IHNldCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYWxlKCk6IHN0cmluZyB7XG4gIHJldHVybiBjdXJyZW50TG9jYWxlKCk7XG59XG4iLCIvLyBUT0RPOiBvdGhlciBjaGFubmVsIHByb3BlcnRpZXMgbWVudGlvbmVkIGluIHByb2plY3QuanM6XG4vLyBsZXZlbCwgZnJvemVuLCBoaWRkZW4sIHRodW1ibmFpbFVybCwgbWlncmF0ZWRUb1MzLCBzaGFyZWRXaXRoLCBsaWJyYXJ5TmFtZSwgbGlicmFyeURlc2NyaXB0aW9uLFxuLy8gbGF0ZXN0TGlicmFyeVZlcnNpb24sIHB1Ymxpc2hMaWJyYXJ5LCBsaWJyYXJ5UHVibGlzaGVkQXRcbi8vXG4vLyBEbyB3ZSBzdGlsbCB3YW50L25lZWQgdGhlc2U/IFNob3VsZCB0aGV5IGJlIG9uIGEgc2VwYXJhdGUgdHlwZT9cbi8vIElmIHRoZSBDaGFubmVsc0FwaSBvbiB0aGUgc2VydmVyIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGVzZSwgdGhleSBzaG91bGRcbi8vIGxpdmUgZWxzZXdoZXJlLlxuLy8gVGhlIGxpYnJhcnkgZGF0YSBzaG91bGQgZGVmaW5pdGVseSBsaXZlIGVsc2V3aGVyZS5cblxuaW1wb3J0IHtUaGVtZX0gZnJvbSAnQGNvZGUtZG90LW9yZy9jb21wb25lbnQtbGlicmFyeS9jb21tb24vY29udGV4dHMnO1xuaW1wb3J0IHtFeGNhbGlkcmF3RWxlbWVudH0gZnJvbSAnQGV4Y2FsaWRyYXcvZXhjYWxpZHJhdy90eXBlcy9lbGVtZW50L3R5cGVzJztcbmltcG9ydCB7XG4gIEV4Y2FsaWRyYXdJbml0aWFsRGF0YVN0YXRlLFxuICBCaW5hcnlGaWxlRGF0YSxcbiAgRGF0YVVSTCxcbn0gZnJvbSAnQGV4Y2FsaWRyYXcvZXhjYWxpZHJhdy90eXBlcy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RWRnZU1hcmtlclR5cGV9IGZyb20gJ0B4eWZsb3cvc3lzdGVtJztcbmltcG9ydCB0eXBlICogYXMgQmxvY2tseUNvcmUgZnJvbSAnYmxvY2tseS9jb3JlJztcbmltcG9ydCB7Q29tcG9uZW50VHlwZSwgQ1NTUHJvcGVydGllcywgTGF6eUV4b3RpY0NvbXBvbmVudH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQge0Jsb2NrRGVmaW5pdGlvbn0gZnJvbSAnQGNkby9hcHBzL2Jsb2NrbHkvdHlwZXMnO1xuaW1wb3J0IHtMZXZlbFByZWRpY3RTZXR0aW5nc30gZnJvbSAnQGNkby9hcHBzL2xhYjIvbGV2ZWxFZGl0b3JzL3R5cGVzJztcbmltcG9ydCB7QWlUdXRvclByb21wdFNldHRpbmdzfSBmcm9tICdAY2RvL2FwcHMvd2VibGFiMi90eXBlcyc7XG5cbmltcG9ydCB7bGFiMkVudHJ5UG9pbnRzfSBmcm9tICcuLi8uLi9sYWIyRW50cnlQb2ludHMnO1xuaW1wb3J0IHR5cGUge1xuICBJbWFnZU5vZGVEYXRhLFxuICBMaW5lQW5jaG9yTm9kZURhdGEsXG4gIFNoYXBlTm9kZURhdGEsXG4gIFRleHROb2RlRGF0YSxcbn0gZnJvbSAnLi4vc2tldGNobGFiL3JlYWN0Rmxvdy90eXBlcyc7XG5cbmV4cG9ydCB7VGhlbWV9O1xuXG4vLy8gLS0tLS0tIFVTRVIgQVBQIE9QVElPTlMgLS0tLS0tIC8vL1xuXG4vLyBQYXJ0aWFsIGRlZmluaXRpb24gb2YgdGhlIFVzZXJBcHBPcHRpb25zIHN0cnVjdHVyZSwgb25seSBkZWZpbmluZyB0aGVcbi8vIHBpZWNlcyB3ZSBuZWVkIGF0IHRoZSBtb21lbnQuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpYWxVc2VyQXBwT3B0aW9ucyB7XG4gIGlzSW5zdHJ1Y3RvcjogYm9vbGVhbjtcbn1cblxuLy8vIC0tLS0tLSBQUk9KRUNUUyAtLS0tLS0gLy8vXG5cbi8qKiBJZGVudGlmaWVzIGEgcHJvamVjdC4gQ29ycmVzcG9uZHMgdG8gdGhlIFwidmFsdWVcIiBKU09OIGNvbHVtbiBmb3IgdGhlIGVudHJ5IGluIHRoZSBwcm9qZWN0cyB0YWJsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbm5lbCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgaXNPd25lcjogYm9vbGVhbjtcbiAgcHJvamVjdFR5cGU6IFByb2plY3RUeXBlO1xuICBwdWJsaXNoZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICB0aHVtYm5haWxVcmw/OiBzdHJpbmc7XG4gIGZyb3plbj86IGJvb2xlYW47XG4gIC8vIENlcnRhaW4gcHJvamVjdCB0eXBlcyAobGlrZSBidWJibGUgY2hvaWNlIHN0YW5kYWxvbmUgcHJvamVjdHMpIGNhbiBoYXZlIHN1YnByb2plY3RzLlxuICBzdWJwcm9qZWN0cz86IHtsZXZlbF9pZDogbnVtYmVyOyBjaGFubmVsX2lkOiBzdHJpbmd9W107XG4gIC8vIE9wdGlvbmFsIGxhYi1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGlzIHByb2plY3QuICBJZiBwcm92aWRlZCwgdGhpcyB3aWxsIGJlIHNhdmVkXG4gIC8vIHRvIHRoZSBQcm9qZWN0IG1vZGVsIGluIHRoZSBkYXRhYmFzZSBhbG9uZyB3aXRoIHRoZSBvdGhlciBlbnRyaWVzIGluIHRoaXMgaW50ZXJmYWNlLFxuICAvLyBpbnNpZGUgdGhlIHZhbHVlIGZpZWxkIEpTT04uXG4gIGxhYkNvbmZpZz86IHtba2V5OiBzdHJpbmddOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfX07XG59XG5cbmV4cG9ydCB0eXBlIERlZmF1bHRDaGFubmVsID0gUGljazxDaGFubmVsLCAnbmFtZSc+O1xuXG4vKiogQSBwcm9qZWN0IGFuZCBpdHMgY29ycmVzcG9uZGluZyBzb3VyY2VzIGlmIHByZXNlbnQsIGZldGNoZWQgdG9nZXRoZXIgd2hlbiBsb2FkaW5nIGEgbGV2ZWwuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2plY3RBbmRTb3VyY2VzIHtcbiAgLy8gV2hlbiBwcm9qZWN0cyBhcmUgbG9hZGVkIGZvciB0aGUgZmlyc3QgdGltZSwgc291cmNlcyBtYXkgbm90IGJlIHByZXNlbnRcbiAgc291cmNlcz86IFByb2plY3RTb3VyY2VzO1xuICBjaGFubmVsOiBDaGFubmVsO1xuICBhYnVzZVNjb3JlPzogbnVtYmVyO1xuICBzaGFyaW5nRGlzYWJsZWQ/OiBib29sZWFuO1xuICBpc1RlYWNoZXJPZlByb2plY3RPd25lcj86IGJvb2xlYW47XG59XG5cbi8vLyAtLS0tLS0gU09VUkNFUyAtLS0tLS0gLy8vXG5cbi8vIFJlcHJlc2VudHMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZnVsbCBwcm9qZWN0IHNvdXJjZXMgb2JqZWN0IChpLmUuIHRoZSBtYWluLmpzb24gZmlsZSlcbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdFNvdXJjZXMge1xuICAvLyBTb3VyY2UgY29kZSBjYW4gZWl0aGVyIGJlIGEgc3RyaW5nLCBCbG9ja2x5IEpTT04sIG9yIGEgbmVzdGVkIEpTT04gb2JqZWN0IChmb3IgbXVsdGktZmlsZSkuXG4gIHNvdXJjZTogc3RyaW5nIHwgU291cmNlO1xuICAvLyBPcHRpb25hbCBsYWItc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBwcm9qZWN0XG4gIGxhYkNvbmZpZz86IExhYkNvbmZpZztcbiAgLy8gQWRkIG90aGVyIHByb3BlcnRpZXMgKGFuaW1hdGlvbnMsIGh0bWwsIGV0YykgYXMgbmVlZGVkLlxufVxuXG5leHBvcnQgdHlwZSBMYWJDb25maWcgPSB7W2tleTogc3RyaW5nXToge1trZXk6IHN0cmluZ106IHN0cmluZ319O1xuXG5leHBvcnQgdHlwZSBTb3VyY2UgPVxuICB8IEJsb2NrbHlTb3VyY2VcbiAgfCBNdWx0aUZpbGVTb3VyY2VcbiAgfCBFeGNhbGlkcmF3U291cmNlV2l0aEV4dGVybmFsRmlsZXNcbiAgfCBTa2V0Y2hsYWJSZWFjdEZsb3dTb3VyY2U7XG5cbi8vIC0tIFJFQUNUIEZMT1cgU0tFVENIIExBQiAtLSAvL1xuXG4vLyBTZXJpYWxpemFibGUgbm9kZS9lZGdlIHR5cGVzIGZvciBwcm9qZWN0IHN0b3JhZ2UuIFRoZXNlIG1pcnJvciB0aGVcbi8vIEB4eWZsb3cvcmVhY3QgTm9kZS9FZGdlIGZpZWxkcyB3ZSBwZXJzaXN0LCB3aXRob3V0IHRoZSBjb21wbGV4IERPTVxuLy8gdHlwZXMgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGggSW1tZXIncyBXcml0YWJsZURyYWZ0LiBDYXN0IHRvL2Zyb21cbi8vIHRoZSBmdWxsIFJlYWN0IEZsb3cgdHlwZXMgYXQgdGhlIHJlYWQvd3JpdGUgYm91bmRhcnkuXG5pbnRlcmZhY2UgU2tldGNobGFiUmVhY3RGbG93Tm9kZUJhc2Uge1xuICBpZDogc3RyaW5nO1xuICBwb3NpdGlvbjoge3g6IG51bWJlcjsgeTogbnVtYmVyfTtcbiAgLy8gd2lkdGggYW5kIGhlaWdodCBhcmUgc2V0IGJ5IE5vZGVSZXNpemVyIHdoZW4gdGhlIHVzZXIgZHJhZ3MgYSBoYW5kbGVcbiAgLy8gKG9yIGJ5IGtleWJvYXJkIHJlc2l6ZSkgYW5kIGFyZSBwZXJzaXN0ZWQgc28gdGhlIG5vZGUgcmVzdG9yZXMgYXQgdGhlXG4gIC8vIGNvcnJlY3Qgc2l6ZSBvbiByZWxvYWQuXG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIHN0eWxlPzogQ1NTUHJvcGVydGllcztcbn1cblxuZXhwb3J0IHR5cGUgU2tldGNobGFiUmVhY3RGbG93Tm9kZSA9XG4gIHwgKFNrZXRjaGxhYlJlYWN0Rmxvd05vZGVCYXNlICYge3R5cGU6ICdzaGFwZSc7IGRhdGE6IFNoYXBlTm9kZURhdGF9KVxuICB8IChTa2V0Y2hsYWJSZWFjdEZsb3dOb2RlQmFzZSAmIHt0eXBlOiAndGV4dCc7IGRhdGE6IFRleHROb2RlRGF0YX0pXG4gIHwgKFNrZXRjaGxhYlJlYWN0Rmxvd05vZGVCYXNlICYge3R5cGU6ICdpbWFnZSc7IGRhdGE6IEltYWdlTm9kZURhdGF9KVxuICB8IChTa2V0Y2hsYWJSZWFjdEZsb3dOb2RlQmFzZSAmIHtcbiAgICAgIHR5cGU6ICdsaW5lQW5jaG9yJztcbiAgICAgIGRhdGE6IExpbmVBbmNob3JOb2RlRGF0YTtcbiAgICB9KTtcblxuZXhwb3J0IGludGVyZmFjZSBTa2V0Y2hsYWJSZWFjdEZsb3dFZGdlIHtcbiAgaWQ6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG4gIHRhcmdldDogc3RyaW5nO1xuICBzdHlsZT86IENTU1Byb3BlcnRpZXM7XG4gIGRhdGE/OiB7XG4gICAgbG9ja2VkPzogYm9vbGVhbjtcbiAgICAvLyByb3RhdGlvbiBpcyBpbiBkZWdyZWVzLCBub3JtYWxpemVkIDAtMzU5LlxuICAgIHJvdGF0aW9uPzogbnVtYmVyO1xuICAgIHNob3dIYW5kbGVzPzogYm9vbGVhbjtcbiAgfTtcbiAgc291cmNlSGFuZGxlPzogc3RyaW5nO1xuICB0YXJnZXRIYW5kbGU/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIG1hcmtlclN0YXJ0PzogRWRnZU1hcmtlclR5cGU7XG4gIG1hcmtlckVuZD86IEVkZ2VNYXJrZXJUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNrZXRjaGxhYlJlYWN0Rmxvd1NvdXJjZSB7XG4gIG5vZGVzOiBTa2V0Y2hsYWJSZWFjdEZsb3dOb2RlW107XG4gIGVkZ2VzOiBTa2V0Y2hsYWJSZWFjdEZsb3dFZGdlW107XG4gIHZpZXdwb3J0Pzoge3g6IG51bWJlcjsgeTogbnVtYmVyOyB6b29tOiBudW1iZXJ9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNhdmVTb3VyY2VPcHRpb25zIHtcbiAgcHJvamVjdFR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlU291cmNlT3B0aW9ucyBleHRlbmRzIFNhdmVTb3VyY2VPcHRpb25zIHtcbiAgY3VycmVudFZlcnNpb246IHN0cmluZztcbiAgcmVwbGFjZTogYm9vbGVhbjtcbiAgZmlyc3RTYXZlVGltZXN0YW1wOiBzdHJpbmc7XG4gIHRhYklkOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyAtLSBCTE9DS0xZIC0tIC8vXG5cbi8vIEJsb2NrbHkgSlNPTiBpcyBjdXJyZW50bHkgdHlwZWQgYXMgYSBnZW5lcmljIG9iamVjdFxuZXhwb3J0IHR5cGUgQmxvY2tseVNvdXJjZSA9IHtba2V5OiBzdHJpbmddOiB1bmtub3dufTtcblxuLy8gLS0gU0tFVENIIExBQiAtLSAvL1xuXG5leHBvcnQgdHlwZSBTa2V0Y2hsYWJFeHRlcm5hbEZpbGVzID0gUmVjb3JkPEZpbGVJZCwgU2tldGNobGFiUHJvamVjdEZpbGU+O1xuXG4vLyBCeSBkZWZhdWx0LCBFeGNhbGlkcmF3IGZpbGUgZW50cmllcyByZXF1aXJlIGEgZGF0YVVSTCBmaWVsZCB0aGF0IGhhcyBhXG4vLyBiYXNlNjQgZW5jb2Rpbmcgb2YgdGhlIGZpbGUuIEFzIHdlIG1vdmUgdG8gc3RvcmUgaW1hZ2VzIGluIFMzLCB0aGlzIGZpZWxkXG4vLyBpcyBub3cgb3B0aW9uYWwuXG50eXBlIEV4Y2FsaWRyYXdGaWxlV2l0aE9wdGlvbmFsRGF0YSA9IE9taXQ8QmluYXJ5RmlsZURhdGEsICdkYXRhVVJMJz4gJiB7XG4gIGRhdGFVUkw/OiBEYXRhVVJMO1xufTtcblxuZXhwb3J0IHR5cGUgRXhjYWxpZHJhd0ZpbGVzV2l0aE9wdGlvbmFsRGF0YSA9IFJlY29yZDxcbiAgRXhjYWxpZHJhd0VsZW1lbnRbJ2lkJ10sXG4gIEV4Y2FsaWRyYXdGaWxlV2l0aE9wdGlvbmFsRGF0YVxuPjtcblxuLy8gV2UgYWRkIHRoZSBleHRlcm5hbEZpbGVzIHByb3BlcnR5IHRvIEV4Y2FsaWRyYXcncyBkZWZhdWx0IHN0YXRlXG4vLyB0byBtYXAgZWFjaCBmaWxlIHRvIGFuIGV4dGVybmFsIFVSTCAoYSBsb2NhdGlvbiBpbiBTMykgd2hlcmUgd2Ugc3RvcmUgdGhlIGltYWdlLlxuLy8gV2Ugb3ZlcnJpZGUgdGhlIGZpbGVzIHByb3BlcnR5IHdpdGggYSB2ZXJzaW9uIG9mIHRoZWlyIGZpbGUgdHlwZSB3aGVyZSB0aGUgZGF0YVVSTFxuLy8gaXMgbm90IHJlcXVpcmVkIChpZSwgc2luY2Ugd2UncmUgc3RvcmluZyB0aGUgaW1hZ2UgaW4gUzMgaW5zdGVhZCBvZiBhcyBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZykuXG5leHBvcnQgdHlwZSBFeGNhbGlkcmF3U291cmNlV2l0aEV4dGVybmFsRmlsZXMgPSBPbWl0PFxuICBFeGNhbGlkcmF3SW5pdGlhbERhdGFTdGF0ZSxcbiAgJ2ZpbGVzJ1xuPiAmIHtcbiAgZmlsZXM/OiBFeGNhbGlkcmF3RmlsZXNXaXRoT3B0aW9uYWxEYXRhO1xuICBleHRlcm5hbEZpbGVzPzogU2tldGNobGFiRXh0ZXJuYWxGaWxlcztcbn07XG5cbmV4cG9ydCB0eXBlIFNrZXRjaGxhYlByb2plY3RGaWxlID0gUGljazxQcm9qZWN0RmlsZSwgJ2lkJyB8ICd1cmwnPiAmIHtcbiAgdXBsb2FkZWQ/OiBib29sZWFuO1xuICBzdGFydGVyQXNzZXQ/OiBib29sZWFuO1xuICBmaWxlbmFtZVdpdGhFeHRlbnNpb24/OiBzdHJpbmc7XG59O1xuXG4vLyAtLSBNVUxUSS1GSUxFIC0tIC8vXG5cbmV4cG9ydCB0eXBlIEZpbGVJZCA9IHN0cmluZztcbmV4cG9ydCB0eXBlIEZvbGRlcklkID0gc3RyaW5nO1xuXG4vLyBUaGlzIHN0cnVjdHVyZSAoYXMgd2VsbCBhcyBQcm9qZWN0Rm9sZGVyIGFuZCBQcm9qZWN0RmlsZSkgaXMgc3RpbGwgaW4gZmx1eFxuLy8gYW5kIG1heSBjaGFuZ2UgZ29pbmcgZm9yd2FyZC4gSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgbGFicyB0aGF0IGFyZSBub3QgcmVsZWFzZWRcbi8vIHlldC5cbi8vIE5vdGUgdGhhdCBpZiBpdCBjaGFuZ2VzIGZpbGVzX2FwaS5oYXNfdmFsaWRfZW5jb2Rpbmc/IG1heSBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gY29ycmVjdGx5IHZhbGlkYXRlXG4vLyB0aGUgbmV3IHN0cnVjdHVyZS5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGaWxlU291cmNlIHtcbiAgZm9sZGVyczogUmVjb3JkPEZvbGRlcklkLCBQcm9qZWN0Rm9sZGVyPjtcbiAgZmlsZXM6IFJlY29yZDxGaWxlSWQsIFByb2plY3RGaWxlPjtcbiAgb3BlbkZpbGVzPzogRmlsZUlkW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdEZpbGUge1xuICBpZDogRmlsZUlkO1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvbnRlbnRzOiBzdHJpbmc7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGZvbGRlcklkOiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9qZWN0RmlsZVR5cGU7XG4gIHVybD86IHN0cmluZztcbiAgZmxhZ2dlZD86IGJvb2xlYW47XG4gIGlzQWlUdXRvclZlcnNpb25VcGRhdGVkPzogYm9vbGVhbjtcbiAgaXNBaVR1dG9yVmVyc2lvbkNyZWF0ZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb2plY3QgZmlsZSB0eXBlcyBhcmUgYXMgZm9sbG93czpcbiAqIFN0YXJ0ZXI6IEZpbGVzIHRoYXQgY29tZSBmcm9tIGxldmVsIHN0YXJ0IGNvZGUgdGhhdCBhcmUgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gKiBTdXBwb3J0OiBGaWxlcyB0aGF0IGNvbWUgZnJvbSBsZXZlbCBzdGFydCBjb2RlIHRoYXQgYXJlIGhpZGRlbiBhbmQgbm90IGVkaXRhYmxlIGJ5IHRoZSB1c2VyLlxuICogVmFsaWRhdGlvbjogVGhlIGZpbGUgdGhhdCBjb250YWluIHRoZSBsZXZlbCdzIHZhbGlkYXRpb24gY29kZSwgd2hpY2ggaXMgYSBjb2RlIGZpbGUgdGhhdCB3aWxsIGJlXG4gKiBydW4gYnkgdGhlIGxhYi4gVGhpcyBmaWxlIGlzIGhpZGRlbiBmcm9tIHVzZXJzLlxuICogTG9ja2VkIFN0YXJ0ZXI6IEZpbGVzIHRoYXQgY29tZSBmcm9tIGxldmVsIHN0YXJ0IGNvZGUgdGhhdCBhcmUgZWRpdGFibGUgYnkgdGhlIHVzZXIsIGJ1dCBjYW5ub3QgYmVcbiAqICBkZWxldGVkIG9yIHJlbmFtZWQuXG4gKiBTeXN0ZW0gU3VwcG9ydDogRmlsZXMgdGhhdCBhcmUgdXNlZCBmb3IgcnVubmluZyBjb2RlIGFuZCBmb3Igc2hhcmUvcmVtaXgsIGJ1dCBhcmUgaGlkZGVuIGZyb20gdGhlIHVzZXIuXG4gKiAgRm9yIGV4YW1wbGUsIHRoZSBzZXJpYWxpemVkIG1hemUgZm9yIGEgbmVpZ2hib3Job29kIGxldmVsLlxuICpcbiAqICBOT1RFOiB3ZSBoYXZlIHNvbWUgbG9naWMgdGhhdCBhc3N1bWVzIHRoYXQgaWYgYSBmaWxlIGhhcyBiZWVuIGFzc2lnbmVkIG9uZSBvZiB0aGVzZSB0eXBlcyxcbiAqICB0aGF0IGl0IHdhcyB1cGxvYWRlZCBieSBhIGxldmVsYnVpbGRlci4gSWYgdGhhdCBjaGFuZ2VzLCB3ZSBzaG91bGQgdXBkYXRlIHRoZSBsb2dpYyB0aGF0IGRlY2lkZXMgd2hldGhlciB0b1xuICogIGRlbGV0ZSBhIGZpbGUgZnJvbSBTMyBpbiBtdWx0aUZpbGVTb3VyY2VFZGl0VXRpbHMuXG4gKi9cbmV4cG9ydCBlbnVtIFByb2plY3RGaWxlVHlwZSB7XG4gIFNUQVJURVIgPSAnc3RhcnRlcicsXG4gIFNVUFBPUlQgPSAnc3VwcG9ydCcsXG4gIFZBTElEQVRJT04gPSAndmFsaWRhdGlvbicsXG4gIExPQ0tFRF9TVEFSVEVSID0gJ2xvY2tlZF9zdGFydGVyJyxcbiAgU1lTVEVNX1NVUFBPUlQgPSAnc3lzdGVtX3N1cHBvcnQnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2plY3RGb2xkZXIge1xuICBpZDogRm9sZGVySWQ7XG4gIG5hbWU6IHN0cmluZztcbiAgcGFyZW50SWQ6IHN0cmluZztcbiAgb3Blbj86IGJvb2xlYW47XG59XG5cbi8vLyAtLS0tLS0gTEVWRUxTIC0tLS0tLSAvLy9cblxuLyoqXG4gKiBMYWJzIG1heSBleHRlbmQgdGhpcyB0eXBlIHRvIGFkZCBsYWItc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZXZlbFByb3BlcnRpZXMge1xuICAvLyBOb3QgYSBjb21wbGV0ZSBsaXN0OyBhZGQgcHJvcGVydGllcyBhcyBuZWVkZWQuXG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgaXNQcm9qZWN0TGV2ZWw/OiBib29sZWFuO1xuICBoaWRlU2hhcmVBbmRSZW1peD86IGJvb2xlYW47XG4gIHVzZXNQcm9qZWN0cz86IGJvb2xlYW47XG4gIGxldmVsRGF0YT86IExldmVsRGF0YTtcbiAgYXBwTmFtZTogQXBwTmFtZTtcbiAgbG9uZ0luc3RydWN0aW9ucz86IHN0cmluZztcbiAgZnJlZVBsYXk/OiBib29sZWFuO1xuICBlZGl0X2Jsb2Nrcz86IHN0cmluZztcbiAgaXNLMT86IGJvb2xlYW47XG4gIHNraW4/OiBzdHJpbmc7XG4gIC8vIERhbmNlIHN0b3JlcyB0aGUgZnVsbCBtYWluLmpzb24gc291cmNlIHN0cnVjdHVyZSAoUHJvamVjdFNvdXJjZXMpIGluIHN0YXJ0L3RlbXBsYXRlL2V4ZW1wbGFyIHNvdXJjZXMsXG4gIC8vIHdoaWxlIFB5dGhvbkxhYi9XZWJsYWIyIHN0b3JlcyBqdXN0IHRoZSBzb3VyY2UgY29kZSAoTXVsdGlGaWxlU291cmNlKS4gVE9ETzogQ2FuIHdlIHJlY29uY2lsZSB0aGVzZT9cbiAgc3RhcnRTb3VyY2VzPzogUHJvamVjdFNvdXJjZXMgfCBNdWx0aUZpbGVTb3VyY2U7XG4gIHRlbXBsYXRlU291cmNlcz86IFByb2plY3RTb3VyY2VzIHwgTXVsdGlGaWxlU291cmNlO1xuICB2YWxpZGF0aW9ucz86IFZhbGlkYXRpb25bXTtcbiAgYmFzZUFzc2V0VXJsPzogc3RyaW5nO1xuICAvLyBBbiBvcHRpb25hbCBVUkwgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc2tpcCB0aGUgcHJvZ3Jlc3Npb24uXG4gIHNraXBVcmw/OiBzdHJpbmc7XG4gIC8vIFByb2plY3QgVGVtcGxhdGUgbGV2ZWwgbmFtZSBmb3IgdGhlIGxldmVsIGlmIGl0IGV4aXN0cy5cbiAgcHJvamVjdFRlbXBsYXRlTGV2ZWxOYW1lPzogc3RyaW5nO1xuICAvLyBIZWxwIGFuZCBUaXBzIHZhbHVlc1xuICBtYXBSZWZlcmVuY2U/OiBzdHJpbmc7XG4gIHJlZmVyZW5jZUxpbmtzPzogc3RyaW5nW107XG4gIGhlbHBWaWRlb3M/OiBWaWRlb0RhdGFbXTtcbiAgLy8gRXhlbXBsYXJzXG4gIHNob3dFeGVtcGxhckxpbms/OiBib29sZWFuO1xuICBleGVtcGxhclNvdXJjZXM/OiBQcm9qZWN0U291cmNlcyB8IE11bHRpRmlsZVNvdXJjZTtcbiAgZXhlbXBsYXJTZXR0aW5ncz86IEV4ZW1wbGFyU2V0dGluZ3M7XG4gIC8vIEZvciBUZWFjaGVycyBPbmx5IHZhbHVlXG4gIHRlYWNoZXJNYXJrZG93bj86IHN0cmluZztcbiAgcHJlZGljdFNldHRpbmdzPzogTGV2ZWxQcmVkaWN0U2V0dGluZ3M7XG4gIHByb2R1Y3RUb3Vycz86IHN0cmluZ1tdO1xuICBzdWJtaXR0YWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVFZGl0UnVuRm9yU3VibWlzc2lvbj86IGJvb2xlYW47XG4gIGZpbmlzaFVybD86IHN0cmluZztcbiAgZmluaXNoRGlhbG9nPzogU2hhcmVEaWFsb2dJZDtcbiAgb2ZmZXJCcm93c2VyVHRzPzogYm9vbGVhbjtcbiAgdXNlU2Vjb25kYXJ5RmluaXNoQnV0dG9uPzogYm9vbGVhbjtcbiAgLy8gUHl0aG9uIExhYi9Db2RlYnJpZGdlIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgdmFsaWRhdGlvbkZpbGU/OiBQcm9qZWN0RmlsZTtcbiAgZW5hYmxlTWljcm9CaXQ/OiBib29sZWFuO1xuICBtaW5pQXBwPzogc3RyaW5nO1xuICBzZXJpYWxpemVkTWF6ZT86IE1hemVDZWxsW11bXTtcbiAgc3RhcnREaXJlY3Rpb24/OiBudW1iZXI7XG4gIHdpZGdldFZpZXc/OiBib29sZWFuO1xuICB3aWRnZXRWaWV3QWxsb3dTaG93Q29kZT86IGJvb2xlYW47XG4gIGFpVHV0b3JNb2RlPzogc3RyaW5nO1xuICBhaVR1dG9yUHJvbXB0U2V0dGluZ3M/OiBBaVR1dG9yUHJvbXB0U2V0dGluZ3M7XG4gIGxldmVsU3lzdGVtUHJvbXB0Pzogc3RyaW5nO1xuICAvLyBQcm9wZXJ0aWVzIGFkZGVkIGZvciBwYXJpdHkgd2l0aCBub24tbGFiMiBBSSBUdXRvciBsZXZlbHNcbiAgYWlUdXRvckF2YWlsYWJsZT86IGJvb2xlYW47XG4gIGlzQXNzZXNzbWVudD86IGJvb2xlYW47XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHN0YXJ0ZXJBc3NldHM/OiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcbiAgc2hvd1J1YnJpYz86IGJvb2xlYW47XG4gIGN1c3RvbUhlbHBlckxpYnJhcnk/OiBzdHJpbmc7XG4gIHZhbGlkYXRpb25Db2RlPzogc3RyaW5nO1xuICBoaWRlVmVyc2lvbkhpc3Rvcnk/OiBib29sZWFuO1xuICBwYXJlbnRMZXZlbE5hbWU/OiBzdHJpbmc7XG4gIHJlcXVpcmVFZGl0VG9Db250aW51ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIExldmVsUHJvcGVydGllc01hcCA9IHtbbGV2ZWxJZDogc3RyaW5nXTogTGV2ZWxQcm9wZXJ0aWVzfTtcblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja2x5TGV2ZWxQcm9wZXJ0aWVzIGV4dGVuZHMgTGV2ZWxQcm9wZXJ0aWVzIHtcbiAgdG9vbGJveERlZmluaXRpb24/OiBCbG9ja2x5Q29yZS51dGlscy50b29sYm94LlRvb2xib3hJbmZvO1xuICBzaGFyZWRCbG9ja3M/OiBCbG9ja0RlZmluaXRpb25bXTtcbn1cblxuLy8gTGV2ZWwgY29uZmlndXJhdGlvbiBkYXRhIHVzZWQgYnkgcHJvamVjdC1iYWNrZWQgbGFicyB0aGF0IGRvbid0IHJlcXVpcmVcbi8vIHJlbG9hZHMgYmV0d2VlbiBsZXZlbHMuIExhYnMgbWF5IGRlZmluZSBtb3JlIHNwZWNpZmljIGZpZWxkcy5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdExldmVsRGF0YSB7XG4gIHN0YXJ0U291cmNlczogU291cmNlO1xufVxuXG4vLyBUaGUgbGV2ZWwgZGF0YSBmb3IgYSBzdGFuZGFsb25lX3ZpZGVvIGxldmVsIHRoYXQgZG9lc24ndCByZXF1aXJlXG4vLyByZWxvYWRzIGJldHdlZW4gbGV2ZWxzLlxuZXhwb3J0IGludGVyZmFjZSBWaWRlb0xldmVsRGF0YSB7XG4gIHNyYzogc3RyaW5nO1xuICBkb3dubG9hZDogc3RyaW5nO1xuICB0aHVtYm5haWw6IHN0cmluZztcbn1cblxuLy8gVGhlIGxldmVsIGRhdGEgZm9yIGEgYnViYmxlX2Nob2ljZSBsZXZlbCB0aGF0IGRvZXNuJ3QgcmVxdWlyZVxuLy8gcmVsb2FkcyBiZXR3ZWVuIGxldmVscy5cbmV4cG9ydCBpbnRlcmZhY2UgQnViYmxlQ2hvaWNlTGV2ZWxEYXRhIHtcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3VibGV2ZWxzOiBCdWJibGVDaG9pY2VTdWJsZXZlbFtdO1xuICBoaWRlTGV0dGVyczogYm9vbGVhbjtcbn1cblxuLy8gQnViYmxlIENob2ljZSBzcGVjaWZpYyBwcm9wZXJ0eVxuZXhwb3J0IGludGVyZmFjZSBCdWJibGVDaG9pY2VTdWJsZXZlbCB7XG4gIGRpc3BsYXlfbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbGV2ZWxfaWQ6IHN0cmluZztcbiAgdGh1bWJuYWlsX3VybDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgcG9zaXRpb246IG51bWJlcjtcbn1cblxuLy8gQWRkdGlvbmFsIGZpZWxkcyBmb3IgdmlkZW9zIHRoYXQgYXJlIGxpbmtlZCBhcyByZWZlcmVuY2VzIGluIHRoZVxuLy8gSGVscCAmIFRpcHMgdGFiIG9mIEluc3RydWN0aW9ucy5cbmludGVyZmFjZSBWaWRlb0RhdGEgZXh0ZW5kcyBWaWRlb0xldmVsRGF0YSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGtleT86IHN0cmluZztcbiAgZW5hYmxlX2ZhbGxiYWNrPzogYm9vbGVhbjtcbiAgYXV0b3BsYXk/OiBib29sZWFuO1xufVxuXG4vLyBFeGVtcGxhciBzZXR0aW5ncyBmb3IgYSBsZXZlbC5cbmV4cG9ydCBpbnRlcmZhY2UgRXhlbXBsYXJTZXR0aW5ncyB7XG4gIHZhbGlkYXRpb25FbmFibGVkOiBib29sZWFuO1xuICB2YWxpZGF0aW9uU3VjY2Vzc01lc3NhZ2U6IHN0cmluZztcbiAgdmFsaWRhdGlvbkZhaWx1cmVNZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8vIFB5dGhvbiBMYWIgc3BlY2lmaWMgcHJvcGVydHlcbmV4cG9ydCBpbnRlcmZhY2UgTWF6ZUNlbGwge1xuICB0aWxlVHlwZTogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyO1xuICBhc3NldElkOiBudW1iZXI7XG59XG5cbi8vIENvbmZpZ3VyYXRpb24gZm9yIGhvdyBhIExhYiBzaG91bGQgYmUgcmVuZGVyZWRcbmV4cG9ydCBpbnRlcmZhY2UgTGFiMkVudHJ5UG9pbnQge1xuICAvKipcbiAgICogQSBsYXp5IGxvYWRlZCB2aWV3IGZvciB0aGUgbGFiLiBUaGlzIHNob3VsZCBiZSBhIGxhenktbG9hZGVkIHJlYWN0XG4gICAqIGNvbXBvbmVudCB1c2luZyBhIGR5bmFtaWMgaW1wb3J0LiBTZWUgYHB5dGhvbmxhYi9lbnRyeXBvaW50LnRzeGAgZm9yIGFuXG4gICAqIGV4YW1wbGUuXG4gICAqL1xuICB2aWV3OiBMYXp5RXhvdGljQ29tcG9uZW50PENvbXBvbmVudFR5cGU8TGFiUHJvcHM+PjtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHRoZW1lcyB0aGF0IHRoZSBsYWIgc3VwcG9ydHMuXG4gICAqL1xuICB0aGVtZXM6IFRoZW1lW107XG59XG5cbmV4cG9ydCB0eXBlIExldmVsRGF0YSA9XG4gIHwgUHJvamVjdExldmVsRGF0YVxuICB8IFZpZGVvTGV2ZWxEYXRhXG4gIHwgQnViYmxlQ2hvaWNlTGV2ZWxEYXRhO1xuXG5leHBvcnQgdHlwZSBQcm9qZWN0VHlwZSA9XG4gIHwgQXBwTmFtZVxuICB8IFN0YW5kYWxvbmVBcHBOYW1lXG4gIHwgJ2FydGlzdCdcbiAgfCAnYXJ0aXN0X2sxJ1xuICB8ICdmcm96ZW4nXG4gIHwgJ21pbmVjcmFmdF9hZHZlbnR1cmVyJ1xuICB8ICdtaW5lY3JhZnRfaGVybydcbiAgfCAnbWluZWNyYWZ0X2Rlc2lnbmVyJ1xuICB8ICdtaW5lY3JhZnRfY29kZWJ1aWxkZXInXG4gIHwgJ21pbmVjcmFmdF9hcXVhdGljJ1xuICB8ICdhbGdlYnJhX2dhbWUnXG4gIHwgJ3N0YXJ3YXJzJ1xuICB8ICdzdGFyd2Fyc2Jsb2Nrc19ob3VyJ1xuICB8ICdpY2VhZ2UnXG4gIHwgJ2luZmluaXR5J1xuICB8ICdndW1iYWxsJ1xuICB8ICdwbGF5bGFiJ1xuICB8ICdwbGF5bGFiX2sxJ1xuICB8ICdzcG9ydHMnXG4gIHwgJ2Jhc2tldGJhbGwnXG4gIHwgJ211c2ljX2RhbmNlX2FpJztcblxuZXhwb3J0IHR5cGUgQXBwTmFtZSA9IGtleW9mIHR5cGVvZiBsYWIyRW50cnlQb2ludHM7XG5cbmV4cG9ydCB0eXBlIFN0YW5kYWxvbmVBcHBOYW1lID1cbiAgfCAnc3ByaXRlbGFiJ1xuICB8ICdzdG9yeSdcbiAgfCAnc2NpZW5jZSdcbiAgfCAncG9ldHJ5X2hvYydcbiAgfCAncG9ldHJ5J1xuICB8ICd0aW1lX2NhcHN1bGUnXG4gIHwgJ2RhbmNlJztcblxuLy8vIC0tLS0tLSBWQUxJREFUSU9OUyAtLS0tLS0gLy8vXG5cbi8vIEEgdmFsaWRhdGlvbiBjb25kaXRpb24uXG5leHBvcnQgaW50ZXJmYWNlIENvbmRpdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbnR5cGUgVmFsdWVUeXBlID0gJ3N0cmluZycgfCAnbnVtYmVyJztcbnR5cGUgQ29uZGl0aW9uVmFsdWVUeXBlID0gYCR7VmFsdWVUeXBlfToke1ZhbHVlVHlwZX1gIHwgVmFsdWVUeXBlO1xuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25UeXBlIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZVR5cGU/OiBDb25kaXRpb25WYWx1ZVR5cGU7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHZhbHVlT3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG4vLyBWYWxpZGF0aW9uIGluIHRoZSBsZXZlbC5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbiB7XG4gIGNvbmRpdGlvbnM6IENvbmRpdGlvbltdO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGNhbGxvdXQ/OiBzdHJpbmc7XG4gIG5leHQ6IGJvb2xlYW47XG4gIGtleTogc3RyaW5nO1xuICBjb21tZW50Pzogc3RyaW5nO1xufVxuXG4vLy8gLS0tLS0tIE1JU0MgLS0tLS0tIC8vL1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhTGlua3NMZXZlbERhdGEge1xuICBsaW5rczoge1trZXk6IHN0cmluZ106IHt0ZXh0OiBzdHJpbmc7IHVybDogc3RyaW5nOyBhY2Nlc3Nfa2V5Pzogc3RyaW5nfVtdfTtcbiAgY2FuX2Nsb25lOiBib29sZWFuO1xuICBjYW5fZGVsZXRlOiBib29sZWFuO1xuICBsZXZlbF9uYW1lOiBzdHJpbmc7XG4gIHNjcmlwdF9sZXZlbF9wYXRoX2xpbmtzOiBTY3JpcHRMZXZlbFBhdGhMaW5rW107XG4gIHBhcmVudF9sZXZlbF9wYXRoX2xpbmtzOiBQYXJlbnRMZXZlbFBhdGhMaW5rW107XG4gIGlzX3N0YW5kYWxvbmVfcHJvamVjdDogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFMaW5rc1Byb2plY3REYXRhIHtcbiAgb3duZXJfaW5mbz86IHtzdG9yYWdlX2lkOiBudW1iZXI7IG5hbWU6IHN0cmluZ307XG4gIHByb2plY3RfaW5mbz86IHtcbiAgICBpZDogbnVtYmVyO1xuICAgIHNvdXJjZXNfbGluazogc3RyaW5nO1xuICAgIGlzX2ZlYXR1cmVkX3Byb2plY3Q6IGJvb2xlYW47XG4gICAgZmVhdHVyZWRfc3RhdHVzOiBzdHJpbmc7XG4gICAgcmVtaXhfYW5jZXN0cnk6IHN0cmluZ1tdO1xuICAgIGlzX3B1Ymxpc2hlZF9wcm9qZWN0OiAneWVzJyB8ICdubyc7XG4gICAgYWJ1c2Vfc2NvcmU6IG51bWJlcjtcbiAgfTtcbiAgbWVlc2FnZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9qZWN0VmVyc2lvbiB7XG4gIHZlcnNpb25JZDogc3RyaW5nO1xuICBsYXN0TW9kaWZpZWQ6IHN0cmluZztcbiAgaXNMYXRlc3Q6IGJvb2xlYW47XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyaXB0TGV2ZWxQYXRoTGluayB7XG4gIHNjcmlwdDogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyZW50TGV2ZWxQYXRoTGluayB7XG4gIGxldmVsX25hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBraW5kOiBzdHJpbmc7XG4gIHBvc2l0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFiUHJvcHM8XG4gIFQgZXh0ZW5kcyBMZXZlbFByb3BlcnRpZXMgPSBMZXZlbFByb3BlcnRpZXMsXG4gIFUgZXh0ZW5kcyBQcm9qZWN0U291cmNlcyA9IFByb2plY3RTb3VyY2VzXG4+IHtcbiAgbGV2ZWxQcm9wZXJ0aWVzOiBUO1xuICBpbml0aWFsU291cmNlcz86IFU7XG4gIGNoYW5uZWw/OiBDaGFubmVsO1xufVxuXG5leHBvcnQgdHlwZSBTaGFyZURpYWxvZ0lkID0gJ2hvYzIwMjQnIHwgJ2hvYWkyMDI1JztcblxuZXhwb3J0IHR5cGUgTGV2ZWxOYXZpZ2F0aW9uQ29uZmlybWF0aW9uID0gKCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG4iLCJpbXBvcnQge1Byb2plY3RGaWxlLCBQcm9qZWN0Rm9sZGVyfSBmcm9tICdAY2RvL2FwcHMvbGFiMi90eXBlcyc7XG5cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wZXJhdGlvbnMgb24gbXVsdGktZmlsZSBzb3VyY2VzIGluIGxhYjIuXG5cbi8vIFJldHVybnMgdGhlIGxvd2VyY2FzZSBmaWxlIGV4dGVuc2lvbiBmcm9tIGEgZmlsZW5hbWUgKGUuZy4sIFwibWFpbi5weVwiID0+IFwicHlcIikuXG4vLyBJZiB0aGVyZSBpcyBubyBleHRlbnNpb24sIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuZXhwb3J0IGNvbnN0IGdldEZpbGVFeHRlbnNpb24gPSAoZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyA9PlxuICBmaWxlbmFtZS5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuXG4vLyBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIGZpbGUgSUQgYmFzZWQgb24gdGhlIGV4aXN0aW5nIGZpbGVzIGluIHRoZSBwcm9qZWN0LlxuZXhwb3J0IGNvbnN0IGdldE5leHRGaWxlSWQgPSAoZmlsZXM6IFByb2plY3RGaWxlW10pID0+IHtcbiAgcmV0dXJuIFN0cmluZyhNYXRoLm1heCgwLCAuLi5maWxlcy5tYXAoZiA9PiBOdW1iZXIoZi5pZCkpKSArIDEpO1xufTtcblxuLy8gR2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBmb2xkZXIgSUQgYmFzZWQgb24gdGhlIGV4aXN0aW5nIGZvbGRlcnMgaW4gdGhlIHByb2plY3QuXG5leHBvcnQgY29uc3QgZ2V0TmV4dEZvbGRlcklkID0gKGZvbGRlcnM6IFByb2plY3RGb2xkZXJbXSkgPT4ge1xuICByZXR1cm4gU3RyaW5nKE1hdGgubWF4KDAsIC4uLmZvbGRlcnMubWFwKGYgPT4gTnVtYmVyKGYuaWQpKSkgKyAxKTtcbn07XG5cbi8vIEZpbmQgYWxsIHN1YmZvbGRlcnMgb2YgYSBnaXZlbiBwYXJlbnQgZm9sZGVyLCBnaXZlbiB0aGUgcGFyZW50IGZvbGRlcidzIElEXG4vLyBhbmQgdGhlIGN1cnJlbnQgZm9sZGVyIGxpc3QuXG5leHBvcnQgY29uc3QgZmluZFN1YkZvbGRlcnMgPSAocGFyZW50SWQ6IHN0cmluZywgZm9sZGVyczogUHJvamVjdEZvbGRlcltdKSA9PlxuICBmb2xkZXJzLnJlZHVjZSgoYnVja2V0LCBmOiBQcm9qZWN0Rm9sZGVyKSA9PiB7XG4gICAgaWYgKGYucGFyZW50SWQgPT09IHBhcmVudElkKSB7XG4gICAgICBidWNrZXQucHVzaChmLmlkLCAuLi5maW5kU3ViRm9sZGVycyhmLmlkLCBmb2xkZXJzKSk7XG4gICAgfVxuICAgIHJldHVybiBidWNrZXQ7XG4gIH0sIDxzdHJpbmdbXT5bXSk7XG5cbi8vIEZpbmQgYWxsIGZpbGVzIGluIGEgZ2l2ZW4gZm9sZGVyIGFuZCBpdHMgc3ViZm9sZGVycywgcmV0dXJuaW5nIGEgbGlzdCBJRHMuXG5leHBvcnQgY29uc3QgZmluZEZpbGVzID0gKFxuICBmb2xkZXJJZDogc3RyaW5nLFxuICBmaWxlczogUHJvamVjdEZpbGVbXSxcbiAgZm9sZGVycz86IFByb2plY3RGb2xkZXJbXVxuKSA9PiB7XG4gIGNvbnN0IGZvbGRlcklkcyA9IG5ldyBTZXQoXG4gICAgZm9sZGVycyA/IFtmb2xkZXJJZCwgLi4uZmluZFN1YkZvbGRlcnMoZm9sZGVySWQsIGZvbGRlcnMpXSA6IFtmb2xkZXJJZF1cbiAgKTtcbiAgcmV0dXJuIGZpbGVzLnJlZHVjZSgoYnVja2V0LCBmOiBQcm9qZWN0RmlsZSkgPT4ge1xuICAgIGlmIChmb2xkZXJJZHMuaGFzKGYuZm9sZGVySWQpKSB7XG4gICAgICBidWNrZXQucHVzaChmLmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1Y2tldDtcbiAgfSwgPHN0cmluZ1tdPltdKTtcbn07XG4iLCJpbXBvcnQgbG9jYWxpemF0aW9uIGZyb20gJ0BjZG8vYXBwcy9sb2NhbGl6YXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIHJldHVybiBsb2NhbGl6YXRpb24ubG9jYWxlO1xufTtcbiIsImltcG9ydCB7ZXh0ZW5zaW9ucyBhcyBtaW1lVG9FeHRlbnNpb25zfSBmcm9tICdtaW1lLXR5cGVzJztcblxuaW1wb3J0IHtTYWZlQW5kU3VwcG9ydGVkSW1hZ2VUeXBlc30gZnJvbSAnQGNkby9nZW5lcmF0ZWQtc2NyaXB0cy9zaGFyZWRDb25zdGFudHMnO1xuXG5pbXBvcnQge0FpVHV0b3JNb2RlLCBBaVR1dG9yQW5zd2VyVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgY29uc3QgV0VCTEFCMl9FRElUQUJMRV9GSUxFX1RZUEVTID0gW1xuICAnaHRtbCcsXG4gICdjc3MnLFxuICAnanMnLFxuICAnbWQnLFxuICAndHh0JyxcbiAgJ2NzdicsXG4gICdqc29uJyxcbl07XG5cbmV4cG9ydCBjb25zdCBXRUJMQUIyX0lNQUdFX0ZJTEVfVFlQRVMgPSBTYWZlQW5kU3VwcG9ydGVkSW1hZ2VUeXBlcy5mbGF0TWFwKFxuICBtaW1lID0+IChtaW1lVG9FeHRlbnNpb25zW21pbWVdID8/IFtdKS5maWx0ZXIoZXh0ID0+IGV4dCAhPT0gJ2pwZScpXG4pO1xuXG5leHBvcnQgY29uc3QgV0VCTEFCMl9TVVBQT1JURURfRklMRV9UWVBFUyA9IFdFQkxBQjJfRURJVEFCTEVfRklMRV9UWVBFUy5jb25jYXQoXG4gIFdFQkxBQjJfSU1BR0VfRklMRV9UWVBFU1xuKTtcblxuZXhwb3J0IGNvbnN0IEFJX1NBVkVEX0NPTU1FTlQgPSAnQUkqKipTQVZFJztcblxuLy8gVGhlIGRlZmF1bHQgc2V0IG9mIGFuc3dlciB0eXBlcyBpcyBhbGwgZXhjZXB0IGJ1aWxkSmF2YVNjcmlwdC5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOU1dFUl9UWVBFUzogQWlUdXRvckFuc3dlclR5cGVbXSA9IFtcbiAgJ2J1aWxkSFRNTCcsXG4gICdidWlsZENTUycsXG4gICdhc2snLFxuICAnaGludCcsXG4gICdkZWJ1ZycsXG4gICdleGFtcGxlJyxcbiAgJ2V4cGxhaW5Db2RlJyxcbiAgJ2RvY3VtZW50YXRpb24nLFxuICAncHNldWRvY29kZScsXG4gICd0ZXN0Q2FzZScsXG5dO1xuXG4vLyBNYXAgb2Ygb3VyIGxlZ2FjeSBtb2RlcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIGFuc3dlciB0eXBlcy4gVGhpcyBpcyB1c2VkIHRvIHBvcHVsYXRlIHRoZSBhbnN3ZXIgdHlwZXMgZm9yIGxldmVsc1xuLy8gdGhhdCB3ZXJlIGNyZWF0ZWQgd2l0aCBhIGxlZ2FjeSBtb2RlIGJlZm9yZSB3ZSBoYWQgYW5zd2VyIHR5cGVzLlxuZXhwb3J0IGNvbnN0IFRVVE9SX01PREVfVE9fQU5TV0VSX1RZUEU6IFJlY29yZDxcbiAgQWlUdXRvck1vZGUsXG4gIEFpVHV0b3JBbnN3ZXJUeXBlW11cbj4gPSB7XG4gIHN1Z2dlc3Q6IFtcbiAgICAnYnVpbGRIVE1MJyxcbiAgICAnYnVpbGRDU1MnLFxuICAgICdhc2snLFxuICAgICdoaW50JyxcbiAgICAnZGVidWcnLFxuICAgICdleGFtcGxlJyxcbiAgICAnZXhwbGFpbkNvZGUnLFxuICAgICdkb2N1bWVudGF0aW9uJyxcbiAgICAncHNldWRvY29kZScsXG4gIF0sXG4gIG91dGxpbmU6IFtcbiAgICAnYnVpbGRIVE1MJyxcbiAgICAnYnVpbGRDU1MnLFxuICAgICdhc2snLFxuICAgICdoaW50JyxcbiAgICAnZGVidWcnLFxuICAgICdleGFtcGxlJyxcbiAgICAnZXhwbGFpbkNvZGUnLFxuICAgICdkb2N1bWVudGF0aW9uJyxcbiAgICAncHNldWRvY29kZScsXG4gIF0sXG4gIGd1aWRlOiBbXG4gICAgJ2J1aWxkSFRNTCcsXG4gICAgJ2J1aWxkQ1NTJyxcbiAgICAnYXNrJyxcbiAgICAnaGludCcsXG4gICAgJ2RlYnVnJyxcbiAgICAnZXhhbXBsZScsXG4gICAgJ2V4cGxhaW5Db2RlJyxcbiAgICAnZG9jdW1lbnRhdGlvbicsXG4gICAgJ3BzZXVkb2NvZGUnLFxuICBdLFxuICBwcm9kdWNlOiBbXG4gICAgJ2J1aWxkSFRNTCcsXG4gICAgJ2J1aWxkQ1NTJyxcbiAgICAnYXNrJyxcbiAgICAnaGludCcsXG4gICAgJ2RlYnVnJyxcbiAgICAnZXhhbXBsZScsXG4gICAgJ2V4cGxhaW5Db2RlJyxcbiAgICAnZG9jdW1lbnRhdGlvbicsXG4gIF0sXG4gIGRlc2lnbmVyOiBbXG4gICAgJ2J1aWxkSFRNTCcsXG4gICAgJ2J1aWxkQ1NTJyxcbiAgICAnYXNrJyxcbiAgICAnaGludCcsXG4gICAgJ2RlYnVnJyxcbiAgICAnZXhhbXBsZScsXG4gICAgJ2V4cGxhaW5Db2RlJyxcbiAgICAnZG9jdW1lbnRhdGlvbicsXG4gIF0sXG4gIHR1dG9yOiBbXG4gICAgJ2J1aWxkSFRNTCcsXG4gICAgJ2J1aWxkQ1NTJyxcbiAgICAnYXNrJyxcbiAgICAnaGludCcsXG4gICAgJ2RlYnVnJyxcbiAgICAnZXhhbXBsZScsXG4gICAgJ2V4cGxhaW5Db2RlJyxcbiAgICAnZG9jdW1lbnRhdGlvbicsXG4gICAgJ3BzZXVkb2NvZGUnLFxuICBdLFxuICBlbmdpbmVlcjogW1xuICAgICdidWlsZEhUTUwnLFxuICAgICdidWlsZENTUycsXG4gICAgJ2J1aWxkSmF2YVNjcmlwdCcsXG4gICAgJ2FzaycsXG4gICAgJ2hpbnQnLFxuICAgICdkZWJ1ZycsXG4gICAgJ2V4YW1wbGUnLFxuICAgICdleHBsYWluQ29kZScsXG4gICAgJ2RvY3VtZW50YXRpb24nLFxuICAgICdwc2V1ZG9jb2RlJyxcbiAgXSxcbiAgcWE6IFtcbiAgICAnYnVpbGRIVE1MJyxcbiAgICAnYnVpbGRDU1MnLFxuICAgICdhc2snLFxuICAgICdoaW50JyxcbiAgICAnZGVidWcnLFxuICAgICdleGFtcGxlJyxcbiAgICAnZXhwbGFpbkNvZGUnLFxuICAgICdkb2N1bWVudGF0aW9uJyxcbiAgICAncHNldWRvY29kZScsXG4gICAgJ3Rlc3RDYXNlJyxcbiAgXSxcbn07XG5cbmV4cG9ydCBjb25zdCBXRUJMQUIyX1dFTENPTUVfQ0hBVF9NRVNTQUdFID1cbiAgXCJIaSwgSSdtIHlvdXIgQUkgVHV0b3IhIEkgY2FuIGhlbHAgeW91IGJyYWluc3Rvcm0sIGRlYnVnLCBhbmQgd29yayB0aHJvdWdoIHRoaXMgbGV2ZWwuXCI7XG4iLCJcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KTtjb25zdCBuPXJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKSxyPXJlcXVpcmUoXCJyZWFjdFwiKSxzPXIuY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIGgodD0hMSl7Y29uc3QgZT1yLnVzZUNvbnRleHQocyk7aWYoIWUpe2lmKHQpcmV0dXJue307dGhyb3cgbmV3IEVycm9yKFwidXNlVGhlbWUgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFRoZW1lUHJvdmlkZXJcIil9cmV0dXJuIGV9Y29uc3QgYz0oe2NoaWxkcmVuOnR9KT0+e2NvbnN0W2Usb109ci51c2VTdGF0ZShcIkxpZ2h0XCIpLGk9KCk9PntvKHU9PnU9PT1cIkxpZ2h0XCI/XCJEYXJrXCI6XCJMaWdodFwiKX07cmV0dXJuIG4uanN4KHMuUHJvdmlkZXIse3ZhbHVlOnt0aGVtZTplLHRvZ2dsZVRoZW1lOmksc2V0VGhlbWU6b30sY2hpbGRyZW46bi5qc3goXCJkaXZcIix7XCJkYXRhLXRoZW1lXCI6ZSxjaGlsZHJlbjp0fSl9KX07ZXhwb3J0cy5UaGVtZVByb3ZpZGVyPWM7ZXhwb3J0cy51c2VUaGVtZT1oO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VGhlbWVDb250ZXh0LmpzLm1hcFxuIiwiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSk7Y29uc3QgZT1yZXF1aXJlKFwiLi9Ecm9wZG93bkNvbnRleHQuanNcIikscj1yZXF1aXJlKFwiLi9UaGVtZUNvbnRleHQuanNcIik7ZXhwb3J0cy5Ecm9wZG93blByb3ZpZGVyV3JhcHBlcj1lLkRyb3Bkb3duUHJvdmlkZXJXcmFwcGVyO2V4cG9ydHMudXNlRHJvcGRvd25Db250ZXh0PWUudXNlRHJvcGRvd25Db250ZXh0O2V4cG9ydHMuVGhlbWVQcm92aWRlcj1yLlRoZW1lUHJvdmlkZXI7ZXhwb3J0cy51c2VUaGVtZT1yLnVzZVRoZW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iXSwibmFtZXMiOlsiX2kxOG5TdHJpbmdUcmFja2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsImxvY2FsZSIsInNhZmVMb2FkTG9jYWxlIiwibG9jYWxlV2l0aEkxOG5TdHJpbmdUcmFja2VyIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9wcm9wVHlwZXMiLCJfcmVhY3QiLCJfRm9udEF3ZXNvbWUiLCJfbG9jYWxlIiwiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3NldFByb3RvdHlwZU9mIiwidCIsIk9iamVjdCIsInNldFByb3RvdHlwZU9mIiwiYmluZCIsIl9fcHJvdG9fXyIsIl9kZWZpbmVQcm9wZXJ0eSIsInIiLCJfdG9Qcm9wZXJ0eUtleSIsImkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX1JlYWN0JENvbXBvbmVudCIsIlNwaW5uZXIiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9pbmhlcml0c0xvb3NlIiwiY3JlYXRlIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJ0aGlzIiwicHJvcHMiLCJzaXplIiwic3R5bGUiLCJkaXNwbGF5U2l6ZSIsImNyZWF0ZUVsZW1lbnQiLCJpY29uIiwiY2xhc3NOYW1lIiwiY29uY2F0IiwidGl0bGUiLCJpMThuIiwibG9hZGluZyIsImlkIiwiUmVhY3QiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJvbmVPZiIsIm9iamVjdCIsImRlZmF1bHQiLCJNaW5pQXBwcyIsIkRFRkFVTFRfRk9MREVSX0lEIiwiTUFaRV9GSUxFX05BTUUiLCJjb2RlYnJpZGdlTGFic1dpdGhDb25zb2xlIiwiSU5WQUxJRF9OQU1FX0VSUk9SIiwiZW5hYmxlVXNlckFkZGVkU2VsZWN0aW9uQ29udGV4dCIsImFwcE5hbWUiLCJkZWZhdWx0RWRpdGFibGVGaWxlVHlwZXNBcnJheSIsImVkaXRhYmxlRmlsZVR5cGUiLCJsYW5ndWFnZSIsImVkaXRhYmxlRmlsZVR5cGVzQXJyYXkiLCJTZXQiLCJoYXMiLCJzaG91bGRTaG93RmlsZSIsImZpbGUiLCJnZXRBcHBPcHRpb25zRWRpdEJsb2NrcyIsIlNUQVJUX1NPVVJDRVMiLCJ0eXBlIiwiUHJvamVjdEZpbGVUeXBlIiwiU1lTVEVNX1NVUFBPUlQiLCJTVEFSVEVSIiwiTE9DS0VEX1NUQVJURVIiLCJnZXRGaWxlSWNvbk5hbWVBbmRTdHlsZSIsImZpbGVUeXBlIiwibmFtZSIsInNwbGl0IiwicG9wIiwiaWNvbkNvbmZpZyIsIkZJTEVfVFlQRV9JQ09OX01BUCIsImljb25OYW1lIiwiaWNvblN0eWxlIiwiVkFMSURBVElPTiIsIlNVUFBPUlQiLCJwcmVwYXJlU291cmNlRm9yTGV2ZWxidWlsZGVyU2F2ZSIsInNvdXJjZSIsInBhcnNlZFNvdXJjZSIsInZhbGlkYXRpb25GaWxlIiwibmV3RmlsZXMiLCJmcm9tRW50cmllcyIsImVudHJpZXMiLCJmaWxlcyIsImZpbHRlciIsImdldFZhbGlkYXRpb25Gcm9tU291cmNlIiwib3BlbkZpbGVzIiwiaW5jbHVkZXMiLCJhY3RpdmUiLCJjb21iaW5lU3RhcnRTb3VyY2VzQW5kVmFsaWRhdGlvbiIsInJldHVyblZhbHVlIiwicHkiLCJpc0JyYW5kIiwiY3N2IiwidHh0IiwibWQiLCJodG1sIiwianMiLCJqc29uIiwiY3NzIiwianBnIiwicG5nIiwianBlZyIsIndlYnAiLCJ2YWx1ZXMiLCJmaW5kIiwiZiIsImZpbmRGaWxlIiwic291cmNlcyIsImZpbGVuYW1lIiwiZm9sZGVySWQiLCJmaW5kRm9sZGVyIiwiZm9sZGVyTGluZWFnZSIsIm9wdGlvbnMiLCJyZWR1Y2UiLCJwYXJlbnRJZCIsImxlbmd0aCIsImZvbGRlciIsImZvbGRlcnMiLCJyZXF1aXJlZCIsIkVycm9yIiwiam9pbiIsImdldEVtcHR5UHJvamVjdCIsImdldEVycm9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJnZXRGaWxlTmFtZVdpdGhOdW1iZXJTdWZmaXgiLCJzZXBhcmF0b3IiLCJwYXJ0cyIsImZpbGVFeHRlbnNpb24iLCJuYW1lUGFydHMiLCJsYXN0UGFydCIsIm51bWJlclN1ZmZpeCIsInRlc3QiLCJwYXJzZUludCIsIk5hTiIsIm5ld051bWJlciIsImlzSW50ZWdlciIsIm5ld05hbWUiLCJnZXRGaWxlc0J5TGFuZ3VhZ2UiLCJnZXRGaWxlRXh0ZW5zaW9uIiwiZ2V0Rm9sZGVyQ2hpbGRyZW4iLCJwcm9qZWN0Rm9sZGVycyIsImNoaWxkcmVuIiwiYWxsQ2hpbGRJZHMiLCJtYXAiLCJjaGlsZCIsImZvckVhY2giLCJwdXNoIiwiZ2V0Rm9sZGVyTGluZWFnZSIsInBhcmVudHMiLCJ1bnNoaWZ0IiwiZ2V0Rm9sZGVyUGF0aCIsImdldE9wZW5GaWxlcyIsImZpbGVJZCIsInNvcnRGaWxlc0J5TmFtZSIsIm11c3RCZU9wZW4iLCJnZXRPcGVuRmlsZUlkcyIsImdldFBvc3NpYmxlRGVzdGluYXRpb25Gb2xkZXJzRm9yRmlsZSIsInByb2plY3RGaWxlcyIsImlzU3RhcnRNb2RlIiwiQm9vbGVhbiIsInZhbGlkYXRlRmlsZU5hbWUiLCJmaWxlTmFtZSIsImdldFBvc3NpYmxlRGVzdGluYXRpb25Gb2xkZXJzRm9yRm9sZGVyIiwidmFsaWRhdGVGb2xkZXJNb3ZlIiwiZ2V0VXJsRm9yRmlsZSIsInBhcmVudE9yaWdpbiIsImV4dGVybmFsRmlsZVR5cGVzIiwiZXh0IiwidXJsIiwiYmxvYiIsIkJsb2IiLCJjb250ZW50cyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImhhc1ByZXZpZXciLCJtaW5pQXBwIiwidW5kZWZpbmVkIiwiRHVwbGljYXRlRmlsZUVycm9yIiwiaXNEdXBsaWNhdGVGaWxlTmFtZSIsIkRVUExJQ0FURV9TVVBQT1JUX0ZJTEUiLCJleGlzdGluZ0ZpbGUiLCJEVVBMSUNBVEVfRklMRSIsImlzRHVwbGljYXRlRm9sZGVyTmFtZSIsImZvbGRlck5hbWUiLCJzb21lIiwiaXNWYWxpZEZpbGVOYW1lIiwiaGFzRHJvcGRvd24iLCJtYXRjaCIsImlzVmFsaWRGb2xkZXJOYW1lIiwicmVwYWlyT3BlbkZpbGVzIiwidXBkYXRlZE9wZW5MaXN0Iiwib3BlbiIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJ1bmlxdWVGaWxlTmFtZSIsImV4aXN0aW5nIiwidGFrZW4iLCJjYW5kaWRhdGUiLCJ2YWxpZGF0ZUJhY2twYWNrRmlsZU5hbWUiLCJzZWxlY3RlZEZpbGUiLCJpc0R1cGxpY2F0ZU5hbWUiLCJpc1N1cHBvcnRGaWxlTmFtZSIsIm5ld0ZpbGVOYW1lIiwidmFsaWRGaWxlVHlwZXMiLCJzZWxlY3RlZEZpbGVUeXBlIiwiZXh0ZW5zaW9uIiwibm9GaWxlRXh0ZW5zaW9uRXJyb3IiLCJ2YWxpZEZpbGVUeXBlc1N0cmluZyIsImludmFsaWRGaWxlVHlwZSIsInZhbGlkRmlsZVR5cGVzSW5mbyIsImZ1bGxGaWxlTmFtZSIsImR1cGxpY2F0ZUZpbGVFcnJvciIsImR1cGxpY2F0ZVN1cHBvcnRGaWxlRXJyb3IiLCJ2YWxpZGF0ZUZpbGVOYW1lRm9yTW9kYWwiLCJhcmdzIiwiZXJyb3JNZXNzYWdlIiwidGV4dCIsInZhbGlkYXRpb25FcnJvciIsInZhbGlkYXRlRm9sZGVyTmFtZSIsIm1vdmVGb2xkZXJFcnJvckNoaWxkIiwiZHVwbGljYXRlRm9sZGVyRXJyb3IiLCJ2YWxpZGF0ZUZvbGRlck5hbWVGb3JNb2RhbCIsInZpZXdhYmxlSW1hZ2VGaWxlVHlwZSIsInZpZXdhYmxlSW1hZ2VGaWxlVHlwZXNBcnJheSIsIldFQkxBQjJfSU1BR0VfRklMRV9UWVBFUyIsIlBFUk1JU1NJT05TIiwiV0FSTklOR19CQU5ORVJfTUVTU0FHRVMiLCJGb250U2l6ZSIsIlNPVVJDRV9GSUxFIiwiQkxPQ0tMWV9MQUJTIiwiTEFCU19XSVRIX0pTT05fU09VUkNFUyIsIk1BSU5fUFlUSE9OX0ZJTEUiLCJUT09MQk9YX0JMT0NLUyIsIkVESVRfRVhFTVBMQVIiLCJXSURHRVQyX1NPVVJDRVMiLCJQUk9KRUNUX1RZUEVTX1VTSU5HX05FV19TSEFSRV9ESUFMT0ciLCJURVhUX0JBU0VEX0xBQlMiLCJQUkVESUNUX0ZSRUVfUkVTUE9OU0VfREVGQVVMVF9IRUlHSFQiLCJJTklUSUFMX1ZFUlNJT05fSUQiLCJnZXRTdGFuZGFsb25lUHJvamVjdElkIiwiaGFzU2NyaXB0RGF0YSIsImNoYW5uZWwiLCJnZXRBcHBPcHRpb25zTGV2ZWxJZCIsImxldmVsSWQiLCJnZXRJc1N0YXJ0TW9kZSIsImdldEFwcE9wdGlvbnNFZGl0aW5nRXhlbXBsYXIiLCJpc0VkaXRpbmdFeGVtcGxhciIsImdldEFwcE9wdGlvbnNWaWV3aW5nRXhlbXBsYXIiLCJpc1ZpZXdpbmdFeGVtcGxhciIsImdldEFwcE9wdGlvbnNUaGVtZSIsInRoZW1lIiwiZ2V0SXNTaGFyZVZpZXciLCJzaGFyZSIsImdldFB1YmxpY0NhY2hpbmciLCJwdWJsaWNDYWNoaW5nIiwiZ2V0RmlsZUJ5TmFtZSIsImdldEFjdGl2ZUZpbGVGb3JTb3VyY2UiLCJ2aXNpYmxlRmlsZXMiLCJnZXRDdXJyZW50TG9jYWxlIiwiZWRpdEJsb2NrcyIsIlRoZW1lIiwidG9Mb3dlckNhc2UiLCJnZXROZXh0RmlsZUlkIiwiTWF0aCIsIm1heCIsImdldE5leHRGb2xkZXJJZCIsImZpbmRTdWJGb2xkZXJzIiwiYnVja2V0IiwiZmluZEZpbGVzIiwiZm9sZGVySWRzIiwiV0VCTEFCMl9FRElUQUJMRV9GSUxFX1RZUEVTIiwiU2FmZUFuZFN1cHBvcnRlZEltYWdlVHlwZXMiLCJmbGF0TWFwIiwibWltZSIsIldFQkxBQjJfU1VQUE9SVEVEX0ZJTEVfVFlQRVMiLCJBSV9TQVZFRF9DT01NRU5UIiwiREVGQVVMVF9BTlNXRVJfVFlQRVMiLCJUVVRPUl9NT0RFX1RPX0FOU1dFUl9UWVBFIiwic3VnZ2VzdCIsIm91dGxpbmUiLCJndWlkZSIsInByb2R1Y2UiLCJkZXNpZ25lciIsInR1dG9yIiwiZW5naW5lZXIiLCJxYSIsIldFQkxBQjJfV0VMQ09NRV9DSEFUX01FU1NBR0UiLCJ0b1N0cmluZ1RhZyIsIm4iLCJzIiwiY3JlYXRlQ29udGV4dCIsIlRoZW1lUHJvdmlkZXIiLCJ1c2VTdGF0ZSIsImpzeCIsIlByb3ZpZGVyIiwidG9nZ2xlVGhlbWUiLCJ1Iiwic2V0VGhlbWUiLCJ1c2VUaGVtZSIsImgiLCJ1c2VDb250ZXh0IiwiRHJvcGRvd25Qcm92aWRlcldyYXBwZXIiLCJ1c2VEcm9wZG93bkNvbnRleHQiXSwic291cmNlUm9vdCI6IiJ9