-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path1313.04f7e370.iframe.bundle.js
More file actions
3 lines (3 loc) · 63.9 KB
/
1313.04f7e370.iframe.bundle.js
File metadata and controls
3 lines (3 loc) · 63.9 KB
1
2
3
/*! For license information please see 1313.04f7e370.iframe.bundle.js.LICENSE.txt */
(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[1313,3333,5714,8095,476,2857,5238,7619,0,4285,6666,2742,361,7504,5123,3218,837,7980,5599,3694],{"./node_modules/js-cookie/src/js.cookie.js":(module,exports,__webpack_require__)=>{var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_RESULT__;!function(factory){if(void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=factory)?__WEBPACK_AMD_DEFINE_FACTORY__.call(exports,__webpack_require__,exports,module):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__),!0,module.exports=factory(),!!0){var OldCookies=window.Cookies,api=window.Cookies=factory();api.noConflict=function(){return window.Cookies=OldCookies,api}}}((function(){function extend(){for(var i=0,result={};i<arguments.length;i++){var attributes=arguments[i];for(var key in attributes)result[key]=attributes[key]}return result}return function init(converter){function api(key,value,attributes){var result;if("undefined"!=typeof document){if(arguments.length>1){if("number"==typeof(attributes=extend({path:"/"},api.defaults,attributes)).expires){var expires=new Date;expires.setMilliseconds(expires.getMilliseconds()+864e5*attributes.expires),attributes.expires=expires}try{result=JSON.stringify(value),/^[\{\[]/.test(result)&&(value=result)}catch(e){}return value=converter.write?converter.write(value,key):encodeURIComponent(String(value)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),key=(key=(key=encodeURIComponent(String(key))).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent)).replace(/[\(\)]/g,escape),document.cookie=[key,"=",value,attributes.expires?"; expires="+attributes.expires.toUTCString():"",attributes.path?"; path="+attributes.path:"",attributes.domain?"; domain="+attributes.domain:"",attributes.secure?"; secure":""].join("")}key||(result={});for(var cookies=document.cookie?document.cookie.split("; "):[],rdecode=/(%[0-9A-Z]{2})+/g,i=0;i<cookies.length;i++){var parts=cookies[i].split("="),cookie=parts.slice(1).join("=");'"'===cookie.charAt(0)&&(cookie=cookie.slice(1,-1));try{var name=parts[0].replace(rdecode,decodeURIComponent);if(cookie=converter.read?converter.read(cookie,name):converter(cookie,name)||cookie.replace(rdecode,decodeURIComponent),this.json)try{cookie=JSON.parse(cookie)}catch(e){}if(key===name){result=cookie;break}key||(result[name]=cookie)}catch(e){}}return result}}return api.set=api,api.get=function(key){return api.call(api,key)},api.getJSON=function(){return api.apply({json:!0},[].slice.call(arguments))},api.defaults={},api.remove=function(key,attributes){api(key,"",extend(attributes,{expires:-1}))},api.withConverter=init,api}((function(){}))}))},"./node_modules/prop-types/factoryWithThrowingShims.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var ReactPropTypesSecret=__webpack_require__("./node_modules/prop-types/lib/ReactPropTypesSecret.js");function emptyFunction(){}module.exports=function(){function shim(props,propName,componentName,location,propFullName,secret){if(secret!==ReactPropTypesSecret){var err=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw err.name="Invariant Violation",err}}function getShim(){return shim}shim.isRequired=shim;var ReactPropTypes={array:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim};return ReactPropTypes.checkPropTypes=emptyFunction,ReactPropTypes.PropTypes=ReactPropTypes,ReactPropTypes}},"./node_modules/prop-types/index.js":(module,__unused_webpack_exports,__webpack_require__)=>{module.exports=__webpack_require__("./node_modules/prop-types/factoryWithThrowingShims.js")()},"./node_modules/prop-types/lib/ReactPropTypesSecret.js":module=>{"use strict";module.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},"./node_modules/query-string/index.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";var strictUriEncode=__webpack_require__("./node_modules/strict-uri-encode/index.js");function encode(value,strict){return strict?strictUriEncode(value):encodeURIComponent(value)}exports.extract=function(str){return str.split("?")[1]||""},exports.parse=function(str){var ret=Object.create(null);return"string"!=typeof str?ret:(str=str.trim().replace(/^(\?|#|&)/,""))?(str.split("&").forEach((function(param){var parts=param.replace(/\+/g," ").split("="),key=parts.shift(),val=parts.length>0?parts.join("="):void 0;key=decodeURIComponent(key),val=void 0===val?null:decodeURIComponent(val),void 0===ret[key]?ret[key]=val:Array.isArray(ret[key])?ret[key].push(val):ret[key]=[ret[key],val]})),ret):ret},exports.stringify=function(obj,opts){var strict=!1!==(opts=opts||{}).strict;return obj?Object.keys(obj).sort().map((function(key){var val=obj[key];if(void 0===val)return"";if(null===val)return key;if(Array.isArray(val)){var result=[];return val.slice().sort().forEach((function(val2){void 0!==val2&&(null===val2?result.push(encode(key,strict)):result.push(encode(key,strict)+"="+encode(val2,strict)))})),result.join("&")}return encode(key,strict)+"="+encode(val,strict)})).filter((function(x){return x.length>0})).join("&"):""}},"./node_modules/strict-uri-encode/index.js":module=>{"use strict";module.exports=function(str){return encodeURIComponent(str).replace(/[!'()*]/g,(function(c){return"%"+c.charCodeAt(0).toString(16).toUpperCase()}))}},"./node_modules/whatwg-fetch/fetch.js":function(){!function(self){"use strict";if(!self.fetch){var support_searchParams="URLSearchParams"in self,support_iterable="Symbol"in self&&"iterator"in Symbol,support_blob="FileReader"in self&&"Blob"in self&&function(){try{return new Blob,!0}catch(e){return!1}}(),support_formData="FormData"in self,support_arrayBuffer="ArrayBuffer"in self;if(support_arrayBuffer)var viewClasses=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],isDataView=function(obj){return obj&&DataView.prototype.isPrototypeOf(obj)},isArrayBufferView=ArrayBuffer.isView||function(obj){return obj&&viewClasses.indexOf(Object.prototype.toString.call(obj))>-1};Headers.prototype.append=function(name,value){name=normalizeName(name),value=normalizeValue(value);var oldValue=this.map[name];this.map[name]=oldValue?oldValue+","+value:value},Headers.prototype.delete=function(name){delete this.map[normalizeName(name)]},Headers.prototype.get=function(name){return name=normalizeName(name),this.has(name)?this.map[name]:null},Headers.prototype.has=function(name){return this.map.hasOwnProperty(normalizeName(name))},Headers.prototype.set=function(name,value){this.map[normalizeName(name)]=normalizeValue(value)},Headers.prototype.forEach=function(callback,thisArg){for(var name in this.map)this.map.hasOwnProperty(name)&&callback.call(thisArg,this.map[name],name,this)},Headers.prototype.keys=function(){var items=[];return this.forEach((function(value,name){items.push(name)})),iteratorFor(items)},Headers.prototype.values=function(){var items=[];return this.forEach((function(value){items.push(value)})),iteratorFor(items)},Headers.prototype.entries=function(){var items=[];return this.forEach((function(value,name){items.push([name,value])})),iteratorFor(items)},support_iterable&&(Headers.prototype[Symbol.iterator]=Headers.prototype.entries);var methods=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];Request.prototype.clone=function(){return new Request(this,{body:this._bodyInit})},Body.call(Request.prototype),Body.call(Response.prototype),Response.prototype.clone=function(){return new Response(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new Headers(this.headers),url:this.url})},Response.error=function(){var response=new Response(null,{status:0,statusText:""});return response.type="error",response};var redirectStatuses=[301,302,303,307,308];Response.redirect=function(url,status){if(-1===redirectStatuses.indexOf(status))throw new RangeError("Invalid status code");return new Response(null,{status,headers:{location:url}})},self.Headers=Headers,self.Request=Request,self.Response=Response,self.fetch=function(input,init){return new Promise((function(resolve,reject){var request=new Request(input,init),xhr=new XMLHttpRequest;xhr.onload=function(){var rawHeaders,headers,options={status:xhr.status,statusText:xhr.statusText,headers:(rawHeaders=xhr.getAllResponseHeaders()||"",headers=new Headers,rawHeaders.split(/\r?\n/).forEach((function(line){var parts=line.split(":"),key=parts.shift().trim();if(key){var value=parts.join(":").trim();headers.append(key,value)}})),headers)};options.url="responseURL"in xhr?xhr.responseURL:options.headers.get("X-Request-URL");var body="response"in xhr?xhr.response:xhr.responseText;resolve(new Response(body,options))},xhr.onerror=function(){reject(new TypeError("Network request failed"))},xhr.ontimeout=function(){reject(new TypeError("Network request failed"))},xhr.open(request.method,request.url,!0),"include"===request.credentials&&(xhr.withCredentials=!0),"responseType"in xhr&&support_blob&&(xhr.responseType="blob"),request.headers.forEach((function(value,name){xhr.setRequestHeader(name,value)})),xhr.send(void 0===request._bodyInit?null:request._bodyInit)}))},self.fetch.polyfill=!0}function normalizeName(name){if("string"!=typeof name&&(name=String(name)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name))throw new TypeError("Invalid character in header field name");return name.toLowerCase()}function normalizeValue(value){return"string"!=typeof value&&(value=String(value)),value}function iteratorFor(items){var iterator={next:function(){var value=items.shift();return{done:void 0===value,value}}};return support_iterable&&(iterator[Symbol.iterator]=function(){return iterator}),iterator}function Headers(headers){this.map={},headers instanceof Headers?headers.forEach((function(value,name){this.append(name,value)}),this):Array.isArray(headers)?headers.forEach((function(header){this.append(header[0],header[1])}),this):headers&&Object.getOwnPropertyNames(headers).forEach((function(name){this.append(name,headers[name])}),this)}function consumed(body){if(body.bodyUsed)return Promise.reject(new TypeError("Already read"));body.bodyUsed=!0}function fileReaderReady(reader){return new Promise((function(resolve,reject){reader.onload=function(){resolve(reader.result)},reader.onerror=function(){reject(reader.error)}}))}function readBlobAsArrayBuffer(blob){var reader=new FileReader,promise=fileReaderReady(reader);return reader.readAsArrayBuffer(blob),promise}function bufferClone(buf){if(buf.slice)return buf.slice(0);var view=new Uint8Array(buf.byteLength);return view.set(new Uint8Array(buf)),view.buffer}function Body(){return this.bodyUsed=!1,this._initBody=function(body){if(this._bodyInit=body,body)if("string"==typeof body)this._bodyText=body;else if(support_blob&&Blob.prototype.isPrototypeOf(body))this._bodyBlob=body;else if(support_formData&&FormData.prototype.isPrototypeOf(body))this._bodyFormData=body;else if(support_searchParams&&URLSearchParams.prototype.isPrototypeOf(body))this._bodyText=body.toString();else if(support_arrayBuffer&&support_blob&&isDataView(body))this._bodyArrayBuffer=bufferClone(body.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer]);else{if(!support_arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(body)&&!isArrayBufferView(body))throw new Error("unsupported BodyInit type");this._bodyArrayBuffer=bufferClone(body)}else this._bodyText="";this.headers.get("content-type")||("string"==typeof body?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):support_searchParams&&URLSearchParams.prototype.isPrototypeOf(body)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},support_blob&&(this.blob=function(){var rejected=consumed(this);if(rejected)return rejected;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?consumed(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(readBlobAsArrayBuffer)}),this.text=function(){var rejected=consumed(this);if(rejected)return rejected;if(this._bodyBlob)return function readBlobAsText(blob){var reader=new FileReader,promise=fileReaderReady(reader);return reader.readAsText(blob),promise}(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(function readArrayBufferAsText(buf){for(var view=new Uint8Array(buf),chars=new Array(view.length),i=0;i<view.length;i++)chars[i]=String.fromCharCode(view[i]);return chars.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},support_formData&&(this.formData=function(){return this.text().then(decode)}),this.json=function(){return this.text().then(JSON.parse)},this}function Request(input,options){var body=(options=options||{}).body;if(input instanceof Request){if(input.bodyUsed)throw new TypeError("Already read");this.url=input.url,this.credentials=input.credentials,options.headers||(this.headers=new Headers(input.headers)),this.method=input.method,this.mode=input.mode,body||null==input._bodyInit||(body=input._bodyInit,input.bodyUsed=!0)}else this.url=String(input);if(this.credentials=options.credentials||this.credentials||"omit",!options.headers&&this.headers||(this.headers=new Headers(options.headers)),this.method=function normalizeMethod(method){var upcased=method.toUpperCase();return methods.indexOf(upcased)>-1?upcased:method}(options.method||this.method||"GET"),this.mode=options.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&body)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(body)}function decode(body){var form=new FormData;return body.trim().split("&").forEach((function(bytes){if(bytes){var split=bytes.split("="),name=split.shift().replace(/\+/g," "),value=split.join("=").replace(/\+/g," ");form.append(decodeURIComponent(name),decodeURIComponent(value))}})),form}function Response(bodyInit,options){options||(options={}),this.type="default",this.status="status"in options?options.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in options?options.statusText:"OK",this.headers=new Headers(options.headers),this.url=options.url||"",this._initBody(bodyInit)}}("undefined"!=typeof self?self:this)}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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U0FBU2dGLFNBQVU1RCxTQUNyQkEsVUFDSEEsUUFBVSxDQUFDLEdBR2I5SCxLQUFLaUgsS0FBTyxVQUNaakgsS0FBSzJHLE9BQVMsV0FBWW1CLFFBQVVBLFFBQVFuQixPQUFTLElBQ3JEM0csS0FBSzJMLEdBQUszTCxLQUFLMkcsUUFBVSxLQUFPM0csS0FBSzJHLE9BQVMsSUFDOUMzRyxLQUFLNEcsV0FBYSxlQUFnQmtCLFFBQVVBLFFBQVFsQixXQUFhLEtBQ2pFNUcsS0FBSzZHLFFBQVUsSUFBSXZCLFFBQVF3QyxRQUFRakIsU0FDbkM3RyxLQUFLOEcsSUFBTWdCLFFBQVFoQixLQUFPLEdBQzFCOUcsS0FBS2tLLFVBQVV3QixTQUNqQixDQTJFRCxDQTVjRCxDQTRjbUIsb0JBQVRsSCxLQUF1QkEsS0FBT3hFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2pzLWNvb2tpZS9zcmMvanMuY29va2llLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3F1ZXJ5LXN0cmluZy9pbmRleC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc3RyaWN0LXVyaS1lbmNvZGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEphdmFTY3JpcHQgQ29va2llIHYyLjEuM1xuICogaHR0cHM6Ly9naXRodWIuY29tL2pzLWNvb2tpZS9qcy1jb29raWVcbiAqXG4gKiBDb3B5cmlnaHQgMjAwNiwgMjAxNSBLbGF1cyBIYXJ0bCAmIEZhZ25lciBCcmFja1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKi9cbjsoZnVuY3Rpb24gKGZhY3RvcnkpIHtcblx0dmFyIHJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlciA9IGZhbHNlO1xuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKGZhY3RvcnkpO1xuXHRcdHJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlciA9IHRydWU7XG5cdH1cblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRcdHJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlciA9IHRydWU7XG5cdH1cblx0aWYgKCFyZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXIpIHtcblx0XHR2YXIgT2xkQ29va2llcyA9IHdpbmRvdy5Db29raWVzO1xuXHRcdHZhciBhcGkgPSB3aW5kb3cuQ29va2llcyA9IGZhY3RvcnkoKTtcblx0XHRhcGkubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHdpbmRvdy5Db29raWVzID0gT2xkQ29va2llcztcblx0XHRcdHJldHVybiBhcGk7XG5cdFx0fTtcblx0fVxufShmdW5jdGlvbiAoKSB7XG5cdGZ1bmN0aW9uIGV4dGVuZCAoKSB7XG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGF0dHJpYnV0ZXMgPSBhcmd1bWVudHNbIGkgXTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdHJlc3VsdFtrZXldID0gYXR0cmlidXRlc1trZXldO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZnVuY3Rpb24gaW5pdCAoY29udmVydGVyKSB7XG5cdFx0ZnVuY3Rpb24gYXBpIChrZXksIHZhbHVlLCBhdHRyaWJ1dGVzKSB7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXHRcdFx0aWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXcml0ZVxuXG5cdFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0YXR0cmlidXRlcyA9IGV4dGVuZCh7XG5cdFx0XHRcdFx0cGF0aDogJy8nXG5cdFx0XHRcdH0sIGFwaS5kZWZhdWx0cywgYXR0cmlidXRlcyk7XG5cblx0XHRcdFx0aWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmV4cGlyZXMgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0dmFyIGV4cGlyZXMgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdGV4cGlyZXMuc2V0TWlsbGlzZWNvbmRzKGV4cGlyZXMuZ2V0TWlsbGlzZWNvbmRzKCkgKyBhdHRyaWJ1dGVzLmV4cGlyZXMgKiA4NjRlKzUpO1xuXHRcdFx0XHRcdGF0dHJpYnV0ZXMuZXhwaXJlcyA9IGV4cGlyZXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblx0XHRcdFx0XHRpZiAoL15bXFx7XFxbXS8udGVzdChyZXN1bHQpKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IHJlc3VsdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRcdFx0aWYgKCFjb252ZXJ0ZXIud3JpdGUpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodmFsdWUpKVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8M0F8M0N8M0V8M0R8MkZ8M0Z8NDB8NUJ8NUR8NUV8NjB8N0J8N0R8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBjb252ZXJ0ZXIud3JpdGUodmFsdWUsIGtleSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRrZXkgPSBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGtleSkpO1xuXHRcdFx0XHRrZXkgPSBrZXkucmVwbGFjZSgvJSgyM3wyNHwyNnwyQnw1RXw2MHw3QykvZywgZGVjb2RlVVJJQ29tcG9uZW50KTtcblx0XHRcdFx0a2V5ID0ga2V5LnJlcGxhY2UoL1tcXChcXCldL2csIGVzY2FwZSk7XG5cblx0XHRcdFx0cmV0dXJuIChkb2N1bWVudC5jb29raWUgPSBbXG5cdFx0XHRcdFx0a2V5LCAnPScsIHZhbHVlLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZXMuZXhwaXJlcyA/ICc7IGV4cGlyZXM9JyArIGF0dHJpYnV0ZXMuZXhwaXJlcy50b1VUQ1N0cmluZygpIDogJycsIC8vIHVzZSBleHBpcmVzIGF0dHJpYnV0ZSwgbWF4LWFnZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFXG5cdFx0XHRcdFx0YXR0cmlidXRlcy5wYXRoID8gJzsgcGF0aD0nICsgYXR0cmlidXRlcy5wYXRoIDogJycsXG5cdFx0XHRcdFx0YXR0cmlidXRlcy5kb21haW4gPyAnOyBkb21haW49JyArIGF0dHJpYnV0ZXMuZG9tYWluIDogJycsXG5cdFx0XHRcdFx0YXR0cmlidXRlcy5zZWN1cmUgPyAnOyBzZWN1cmUnIDogJydcblx0XHRcdFx0XS5qb2luKCcnKSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlYWRcblxuXHRcdFx0aWYgKCFrZXkpIHtcblx0XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRvIHByZXZlbnQgdGhlIGZvciBsb29wIGluIHRoZSBmaXJzdCBwbGFjZSBhc3NpZ24gYW4gZW1wdHkgYXJyYXlcblx0XHRcdC8vIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNvb2tpZXMgYXQgYWxsLiBBbHNvIHByZXZlbnRzIG9kZCByZXN1bHQgd2hlblxuXHRcdFx0Ly8gY2FsbGluZyBcImdldCgpXCJcblx0XHRcdHZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llID8gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7ICcpIDogW107XG5cdFx0XHR2YXIgcmRlY29kZSA9IC8oJVswLTlBLVpdezJ9KSsvZztcblx0XHRcdHZhciBpID0gMDtcblxuXHRcdFx0Zm9yICg7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBwYXJ0cyA9IGNvb2tpZXNbaV0uc3BsaXQoJz0nKTtcblx0XHRcdFx0dmFyIGNvb2tpZSA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oJz0nKTtcblxuXHRcdFx0XHRpZiAoY29va2llLmNoYXJBdCgwKSA9PT0gJ1wiJykge1xuXHRcdFx0XHRcdGNvb2tpZSA9IGNvb2tpZS5zbGljZSgxLCAtMSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHZhciBuYW1lID0gcGFydHNbMF0ucmVwbGFjZShyZGVjb2RlLCBkZWNvZGVVUklDb21wb25lbnQpO1xuXHRcdFx0XHRcdGNvb2tpZSA9IGNvbnZlcnRlci5yZWFkID9cblx0XHRcdFx0XHRcdGNvbnZlcnRlci5yZWFkKGNvb2tpZSwgbmFtZSkgOiBjb252ZXJ0ZXIoY29va2llLCBuYW1lKSB8fFxuXHRcdFx0XHRcdFx0Y29va2llLnJlcGxhY2UocmRlY29kZSwgZGVjb2RlVVJJQ29tcG9uZW50KTtcblxuXHRcdFx0XHRcdGlmICh0aGlzLmpzb24pIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvb2tpZSA9IEpTT04ucGFyc2UoY29va2llKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGtleSA9PT0gbmFtZSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0gY29va2llO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFrZXkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdFtuYW1lXSA9IGNvb2tpZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXG5cdFx0YXBpLnNldCA9IGFwaTtcblx0XHRhcGkuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGFwaS5jYWxsKGFwaSwga2V5KTtcblx0XHR9O1xuXHRcdGFwaS5nZXRKU09OID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGFwaS5hcHBseSh7XG5cdFx0XHRcdGpzb246IHRydWVcblx0XHRcdH0sIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG5cdFx0fTtcblx0XHRhcGkuZGVmYXVsdHMgPSB7fTtcblxuXHRcdGFwaS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5LCBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRhcGkoa2V5LCAnJywgZXh0ZW5kKGF0dHJpYnV0ZXMsIHtcblx0XHRcdFx0ZXhwaXJlczogLTFcblx0XHRcdH0pKTtcblx0XHR9O1xuXG5cdFx0YXBpLndpdGhDb252ZXJ0ZXIgPSBpbml0O1xuXG5cdFx0cmV0dXJuIGFwaTtcblx0fVxuXG5cdHJldHVybiBpbml0KGZ1bmN0aW9uICgpIHt9KTtcbn0pKTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gc2hpbShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIHRocm93IGVycjtcbiAgfTtcbiAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcbiAgICByZXR1cm4gc2hpbTtcbiAgfTtcbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW1cbiAgfTtcblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGVtcHR5RnVuY3Rpb247XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIFN5bWJvbC5mb3IgJiZcbiAgICBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG4gICAgMHhlYWM3O1xuXG4gIHZhciBpc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXG4gICAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJpY3RVcmlFbmNvZGUgPSByZXF1aXJlKCdzdHJpY3QtdXJpLWVuY29kZScpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsdWUsIHN0cmljdCkge1xuXHRyZXR1cm4gc3RyaWN0ID8gc3RyaWN0VXJpRW5jb2RlKHZhbHVlKSA6IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG59XG5cbmV4cG9ydHMuZXh0cmFjdCA9IGZ1bmN0aW9uIChzdHIpIHtcblx0cmV0dXJuIHN0ci5zcGxpdCgnPycpWzFdIHx8ICcnO1xufTtcblxuZXhwb3J0cy5wYXJzZSA9IGZ1bmN0aW9uIChzdHIpIHtcblx0Ly8gQ3JlYXRlIGFuIG9iamVjdCB3aXRoIG5vIHByb3RvdHlwZVxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3F1ZXJ5LXN0cmluZy9pc3N1ZXMvNDdcblx0dmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cblx0aWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdHN0ciA9IHN0ci50cmltKCkucmVwbGFjZSgvXihcXD98I3wmKS8sICcnKTtcblxuXHRpZiAoIXN0cikge1xuXHRcdHJldHVybiByZXQ7XG5cdH1cblxuXHRzdHIuc3BsaXQoJyYnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuXHRcdHZhciBwYXJ0cyA9IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCAnICcpLnNwbGl0KCc9Jyk7XG5cdFx0Ly8gRmlyZWZveCAocHJlIDQwKSBkZWNvZGVzIGAlM0RgIHRvIGA9YFxuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcXVlcnktc3RyaW5nL3B1bGwvMzdcblx0XHR2YXIga2V5ID0gcGFydHMuc2hpZnQoKTtcblx0XHR2YXIgdmFsID0gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzLmpvaW4oJz0nKSA6IHVuZGVmaW5lZDtcblxuXHRcdGtleSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXkpO1xuXG5cdFx0Ly8gbWlzc2luZyBgPWAgc2hvdWxkIGJlIGBudWxsYDpcblx0XHQvLyBodHRwOi8vdzMub3JnL1RSLzIwMTIvV0QtdXJsLTIwMTIwNTI0LyNjb2xsZWN0LXVybC1wYXJhbWV0ZXJzXG5cdFx0dmFsID0gdmFsID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVjb2RlVVJJQ29tcG9uZW50KHZhbCk7XG5cblx0XHRpZiAocmV0W2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0W2tleV0gPSB2YWw7XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJldFtrZXldKSkge1xuXHRcdFx0cmV0W2tleV0ucHVzaCh2YWwpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXRba2V5XSA9IFtyZXRba2V5XSwgdmFsXTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiByZXQ7XG59O1xuXG5leHBvcnRzLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChvYmosIG9wdHMpIHtcblx0b3B0cyA9IG9wdHMgfHwge307XG5cblx0dmFyIHN0cmljdCA9IG9wdHMuc3RyaWN0ICE9PSBmYWxzZTtcblxuXHRyZXR1cm4gb2JqID8gT2JqZWN0LmtleXMob2JqKS5zb3J0KCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcblx0XHR2YXIgdmFsID0gb2JqW2tleV07XG5cblx0XHRpZiAodmFsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAodmFsID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4ga2V5O1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcblx0XHRcdHZhciByZXN1bHQgPSBbXTtcblxuXHRcdFx0dmFsLnNsaWNlKCkuc29ydCgpLmZvckVhY2goZnVuY3Rpb24gKHZhbDIpIHtcblx0XHRcdFx0aWYgKHZhbDIgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWwyID09PSBudWxsKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goZW5jb2RlKGtleSwgc3RyaWN0KSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goZW5jb2RlKGtleSwgc3RyaWN0KSArICc9JyArIGVuY29kZSh2YWwyLCBzdHJpY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiByZXN1bHQuam9pbignJicpO1xuXHRcdH1cblxuXHRcdHJldHVybiBlbmNvZGUoa2V5LCBzdHJpY3QpICsgJz0nICsgZW5jb2RlKHZhbCwgc3RyaWN0KTtcblx0fSkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG5cdFx0cmV0dXJuIHgubGVuZ3RoID4gMDtcblx0fSkuam9pbignJicpIDogJyc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uIChjKSB7XG5cdFx0cmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0fSk7XG59O1xuIiwiKGZ1bmN0aW9uKHNlbGYpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGlmIChzZWxmLmZldGNoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgc3VwcG9ydCA9IHtcbiAgICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIHNlbGYsXG4gICAgaXRlcmFibGU6ICdTeW1ib2wnIGluIHNlbGYgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gICAgYmxvYjogJ0ZpbGVSZWFkZXInIGluIHNlbGYgJiYgJ0Jsb2InIGluIHNlbGYgJiYgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gICAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gc2VsZixcbiAgICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBzZWxmXG4gIH1cblxuICBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICAgIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICAgIF1cblxuICAgIHZhciBpc0RhdGFWaWV3ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbiAgICB9XG5cbiAgICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPSBBcnJheUJ1ZmZlci5pc1ZpZXcgfHwgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gICAgfVxuICAgIGlmICgvW15hLXowLTlcXC0jJCUmJyorLlxcXl9gfH5dL2kudGVzdChuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUnKVxuICAgIH1cbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuICBmdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICAgIHZhciBpdGVyYXRvciA9IHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvclxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpdGVyYXRvclxuICB9XG5cbiAgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgdGhpcy5tYXAgPSB7fVxuXG4gICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICB9LCB0aGlzKVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICAgIH0sIHRoaXMpXG4gICAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICAgIH0sIHRoaXMpXG4gICAgfVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICAgIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUrJywnK3ZhbHVlIDogdmFsdWVcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICAgIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IFtdXG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7IGl0ZW1zLnB1c2gobmFtZSkgfSlcbiAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gIH1cblxuICBIZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXVxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkgeyBpdGVtcy5wdXNoKHZhbHVlKSB9KVxuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgfVxuXG4gIEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXVxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkgeyBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pIH0pXG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xuICB9XG5cbiAgZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICAgIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gICAgfVxuICAgIGJvZHkuYm9keVVzZWQgPSB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgICB9XG4gICAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICAgIHJldHVybiBwcm9taXNlXG4gIH1cblxuICBmdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxuICAgIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pXG4gICAgfVxuICAgIHJldHVybiBjaGFycy5qb2luKCcnKVxuICB9XG5cbiAgZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gICAgaWYgKGJ1Zi5zbGljZSkge1xuICAgICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEJvZHkoKSB7XG4gICAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgICAgaWYgKCFib2R5KSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgQm9keUluaXQgdHlwZScpXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBjb25zdW1lZCh0aGlzKSB8fCBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxuICB2YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gICAgcmV0dXJuIChtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSkgPyB1cGNhc2VkIDogbWV0aG9kXG4gIH1cblxuICBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgICB9XG4gICAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgICAgfVxuICAgICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgICB9XG5cbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdvbWl0J1xuICAgIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gICAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICAgIH1cbiAgICB0aGlzLl9pbml0Qm9keShib2R5KVxuICB9XG5cbiAgUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgeyBib2R5OiB0aGlzLl9ib2R5SW5pdCB9KVxuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgYm9keS50cmltKCkuc3BsaXQoJyYnKS5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBmb3JtXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICAgIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAgIHJhd0hlYWRlcnMuc3BsaXQoL1xccj9cXG4vKS5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cblxuICBCb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbiAgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH1cblxuICAgIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICAgIHRoaXMuc3RhdHVzID0gJ3N0YXR1cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMuc3RhdHVzIDogMjAwXG4gICAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICdzdGF0dXNUZXh0JyBpbiBvcHRpb25zID8gb3B0aW9ucy5zdGF0dXNUZXh0IDogJ09LJ1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gICAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG4gIH1cblxuICBCb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG4gIFJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgICAgdXJsOiB0aGlzLnVybFxuICAgIH0pXG4gIH1cblxuICBSZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gICAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIHZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG4gIFJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG4gIH1cblxuICBzZWxmLkhlYWRlcnMgPSBIZWFkZXJzXG4gIHNlbGYuUmVxdWVzdCA9IFJlcXVlc3RcbiAgc2VsZi5SZXNwb25zZSA9IFJlc3BvbnNlXG5cbiAgc2VsZi5mZXRjaCA9IGZ1bmN0aW9uKGlucHV0LCBpbml0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcbiAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9XG5cbiAgICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH1cblxuICAgICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QudXJsLCB0cnVlKVxuXG4gICAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIgJiYgc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH1cblxuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuXG4gICAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICAgIH0pXG4gIH1cbiAgc2VsZi5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzKTtcbiJdLCJuYW1lcyI6WyJmYWN0b3J5IiwibW9kdWxlIiwiZXhwb3J0cyIsIk9sZENvb2tpZXMiLCJ3aW5kb3ciLCJDb29raWVzIiwiYXBpIiwibm9Db25mbGljdCIsImV4dGVuZCIsImkiLCJyZXN1bHQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhdHRyaWJ1dGVzIiwia2V5IiwiaW5pdCIsImNvbnZlcnRlciIsInZhbHVlIiwiZG9jdW1lbnQiLCJwYXRoIiwiZGVmYXVsdHMiLCJleHBpcmVzIiwiRGF0ZSIsInNldE1pbGxpc2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0ZXN0IiwiZSIsIndyaXRlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiU3RyaW5nIiwicmVwbGFjZSIsImRlY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsImNvb2tpZSIsInRvVVRDU3RyaW5nIiwiZG9tYWluIiwic2VjdXJlIiwiam9pbiIsImNvb2tpZXMiLCJzcGxpdCIsInJkZWNvZGUiLCJwYXJ0cyIsInNsaWNlIiwiY2hhckF0IiwibmFtZSIsInJlYWQiLCJ0aGlzIiwianNvbiIsInBhcnNlIiwic2V0IiwiZ2V0IiwiY2FsbCIsImdldEpTT04iLCJhcHBseSIsInJlbW92ZSIsIndpdGhDb252ZXJ0ZXIiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJzaGltIiwicHJvcHMiLCJwcm9wTmFtZSIsImNvbXBvbmVudE5hbWUiLCJsb2NhdGlvbiIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImVyciIsIkVycm9yIiwiZ2V0U2hpbSIsImlzUmVxdWlyZWQiLCJSZWFjdFByb3BUeXBlcyIsImFycmF5IiwiYm9vbCIsImZ1bmMiLCJudW1iZXIiLCJvYmplY3QiLCJzdHJpbmciLCJzeW1ib2wiLCJhbnkiLCJhcnJheU9mIiwiZWxlbWVudCIsImluc3RhbmNlT2YiLCJub2RlIiwib2JqZWN0T2YiLCJvbmVPZiIsIm9uZU9mVHlwZSIsInNoYXBlIiwiZXhhY3QiLCJjaGVja1Byb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmljdFVyaUVuY29kZSIsImVuY29kZSIsInN0cmljdCIsImV4dHJhY3QiLCJzdHIiLCJyZXQiLCJPYmplY3QiLCJjcmVhdGUiLCJ0cmltIiwiZm9yRWFjaCIsInBhcmFtIiwic2hpZnQiLCJ2YWwiLCJ1bmRlZmluZWQiLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwib2JqIiwib3B0cyIsImtleXMiLCJzb3J0IiwibWFwIiwidmFsMiIsImZpbHRlciIsIngiLCJjIiwiY2hhckNvZGVBdCIsInRvU3RyaW5nIiwidG9VcHBlckNhc2UiLCJzZWxmIiwiZmV0Y2giLCJzdXBwb3J0IiwiU3ltYm9sIiwiQmxvYiIsInZpZXdDbGFzc2VzIiwiaXNEYXRhVmlldyIsIkRhdGFWaWV3IiwicHJvdG90eXBlIiwiaXNQcm90b3R5cGVPZiIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJpbmRleE9mIiwiSGVhZGVycyIsImFwcGVuZCIsIm5vcm1hbGl6ZU5hbWUiLCJub3JtYWxpemVWYWx1ZSIsIm9sZFZhbHVlIiwiaGFzIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsYmFjayIsInRoaXNBcmciLCJpdGVtcyIsIml0ZXJhdG9yRm9yIiwidmFsdWVzIiwiZW50cmllcyIsIml0ZXJhdG9yIiwibWV0aG9kcyIsIlJlcXVlc3QiLCJjbG9uZSIsImJvZHkiLCJfYm9keUluaXQiLCJCb2R5IiwiUmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyIsInVybCIsImVycm9yIiwicmVzcG9uc2UiLCJ0eXBlIiwicmVkaXJlY3RTdGF0dXNlcyIsInJlZGlyZWN0IiwiUmFuZ2VFcnJvciIsImlucHV0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXF1ZXN0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvbmxvYWQiLCJyYXdIZWFkZXJzIiwib3B0aW9ucyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImxpbmUiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsIm9uZXJyb3IiLCJUeXBlRXJyb3IiLCJvbnRpbWVvdXQiLCJvcGVuIiwibWV0aG9kIiwiY3JlZGVudGlhbHMiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsInBvbHlmaWxsIiwidG9Mb3dlckNhc2UiLCJuZXh0IiwiZG9uZSIsImhlYWRlciIsImdldE93blByb3BlcnR5TmFtZXMiLCJjb25zdW1lZCIsImJvZHlVc2VkIiwiZmlsZVJlYWRlclJlYWR5IiwicmVhZGVyIiwicmVhZEJsb2JBc0FycmF5QnVmZmVyIiwiYmxvYiIsIkZpbGVSZWFkZXIiLCJwcm9taXNlIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJidWZmZXJDbG9uZSIsImJ1ZiIsInZpZXciLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsImJ1ZmZlciIsIl9pbml0Qm9keSIsIl9ib2R5VGV4dCIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJyZWplY3RlZCIsImFycmF5QnVmZmVyIiwidGhlbiIsInRleHQiLCJyZWFkQmxvYkFzVGV4dCIsInJlYWRBc1RleHQiLCJyZWFkQXJyYXlCdWZmZXJBc1RleHQiLCJjaGFycyIsImZyb21DaGFyQ29kZSIsImZvcm1EYXRhIiwiZGVjb2RlIiwibW9kZSIsIm5vcm1hbGl6ZU1ldGhvZCIsInVwY2FzZWQiLCJyZWZlcnJlciIsImZvcm0iLCJieXRlcyIsImJvZHlJbml0Iiwib2siXSwic291cmNlUm9vdCI6IiJ9