Files
schedule/src/schedule-2.0/public/build/vendors~dropzone.js

61 lines
125 KiB
JavaScript

(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["vendors~dropzone"],{
/***/ "./node_modules/dropzone/dist/min/dropzone.min.css":
/*!*********************************************************!*\
!*** ./node_modules/dropzone/dist/min/dropzone.min.css ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// extracted by mini-css-extract-plugin
/***/ }),
/***/ "./node_modules/dropzone/dist/min/dropzone.min.js":
/*!********************************************************!*\
!*** ./node_modules/dropzone/dist/min/dropzone.min.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(module) {function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _possibleConstructorReturn(e,t){return!t||"object"!==_typeof(t)&&"function"!=typeof t?_assertThisInitialized(e):t}function _getPrototypeOf(e){return(_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_setPrototypeOf(e,t)}function _setPrototypeOf(e,t){return(_setPrototypeOf=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}var Emitter=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"on",value:function(e,t){return this._callbacks=this._callbacks||{},this._callbacks[e]||(this._callbacks[e]=[]),this._callbacks[e].push(t),this}},{key:"emit",value:function(e){this._callbacks=this._callbacks||{};var t=this._callbacks[e];if(t){for(var n=arguments.length,i=new Array(1<n?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=!0,a=!1,l=void 0;try{for(var s,u=t[Symbol.iterator]();!(o=(s=u.next()).done);o=!0){s.value.apply(this,i)}}catch(e){a=!0,l=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw l}}}return this}},{key:"off",value:function(e,t){if(!this._callbacks||0===arguments.length)return this._callbacks={},this;var n=this._callbacks[e];if(!n)return this;if(1===arguments.length)return delete this._callbacks[e],this;for(var i=0;i<n.length;i++){if(n[i]===t){n.splice(i,1);break}}return this}}]),e}(),Dropzone=function(){function C(e,t){var n,i,r;if(_classCallCheck(this,C),(n=_possibleConstructorReturn(this,_getPrototypeOf(C).call(this))).element=e,n.version=C.version,n.defaultOptions.previewTemplate=n.defaultOptions.previewTemplate.replace(/\n*/g,""),n.clickableElements=[],n.listeners=[],n.files=[],"string"==typeof n.element&&(n.element=document.querySelector(n.element)),!n.element||null==n.element.nodeType)throw new Error("Invalid dropzone element.");if(n.element.dropzone)throw new Error("Dropzone already attached.");C.instances.push(_assertThisInitialized(n)),n.element.dropzone=_assertThisInitialized(n);var o=null!=(r=C.optionsForElement(n.element))?r:{};if(n.options=C.extend({},n.defaultOptions,o,null!=t?t:{}),n.options.forceFallback||!C.isBrowserSupported())return _possibleConstructorReturn(n,n.options.fallback.call(_assertThisInitialized(n)));if(null==n.options.url&&(n.options.url=n.element.getAttribute("action")),!n.options.url)throw new Error("No URL provided.");if(n.options.acceptedFiles&&n.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");if(n.options.uploadMultiple&&n.options.chunking)throw new Error("You cannot set both: uploadMultiple and chunking.");return n.options.acceptedMimeTypes&&(n.options.acceptedFiles=n.options.acceptedMimeTypes,delete n.options.acceptedMimeTypes),null!=n.options.renameFilename&&(n.options.renameFile=function(e){return n.options.renameFilename.call(_assertThisInitialized(n),e.name,e)}),n.options.method=n.options.method.toUpperCase(),(i=n.getExistingFallback())&&i.parentNode&&i.parentNode.removeChild(i),!1!==n.options.previewsContainer&&(n.options.previewsContainer?n.previewsContainer=C.getElement(n.options.previewsContainer,"previewsContainer"):n.previewsContainer=n.element),n.options.clickable&&(!0===n.options.clickable?n.clickableElements=[n.element]:n.clickableElements=C.getElements(n.options.clickable,"clickable")),n.init(),n}return _inherits(C,Emitter),_createClass(C,null,[{key:"initClass",value:function(){this.prototype.Emitter=Emitter,this.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],this.prototype.defaultOptions={url:null,method:"post",withCredentials:!1,timeout:3e4,parallelUploads:2,uploadMultiple:!1,chunking:!1,forceChunking:!1,chunkSize:2e6,parallelChunkUploads:!1,retryChunks:!1,retryChunksLimit:3,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:"contain",filesizeBase:1e3,maxFiles:null,headers:null,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictUploadCanceled:"Upload canceled.",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){},params:function(e,t,n){if(n)return{dzuuid:n.file.upload.uuid,dzchunkindex:n.index,dztotalfilesize:n.file.size,dzchunksize:this.options.chunkSize,dztotalchunkcount:n.file.upload.totalChunkCount,dzchunkbyteoffset:n.index*this.options.chunkSize}},accept:function(e,t){return t()},chunksUploaded:function(e,t){t()},fallback:function(){var e;this.element.className="".concat(this.element.className," dz-browser-not-supported");var t=!0,n=!1,i=void 0;try{for(var r,o=this.element.getElementsByTagName("div")[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;if(/(^| )dz-message($| )/.test(a.className)){(e=a).className="dz-message";break}}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}e||(e=C.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(e));var l=e.getElementsByTagName("span")[0];return l&&(null!=l.textContent?l.textContent=this.options.dictFallbackMessage:null!=l.innerText&&(l.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(e,t,n,i){var r={srcX:0,srcY:0,srcWidth:e.width,srcHeight:e.height},o=e.width/e.height;null==t&&null==n?(t=r.srcWidth,n=r.srcHeight):null==t?t=n*o:null==n&&(n=t/o);var a=(t=Math.min(t,r.srcWidth))/(n=Math.min(n,r.srcHeight));if(r.srcWidth>t||r.srcHeight>n)if("crop"===i)a<o?(r.srcHeight=e.height,r.srcWidth=r.srcHeight*a):(r.srcWidth=e.width,r.srcHeight=r.srcWidth/a);else{if("contain"!==i)throw new Error("Unknown resizeMethod '".concat(i,"'"));a<o?n=t/o:t=n*o}return r.srcX=(e.width-r.srcWidth)/2,r.srcY=(e.height-r.srcHeight)/2,r.trgWidth=t,r.trgHeight=n,r},transformFile:function(e,t){return(this.options.resizeWidth||this.options.resizeHeight)&&e.type.match(/image.*/)?this.resizeImage(e,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,t):t(e)},previewTemplate:'<div class="dz-preview dz-file-preview">\n <div class="dz-image"><img data-dz-thumbnail /></div>\n <div class="dz-details">\n <div class="dz-size"><span data-dz-size></span></div>\n <div class="dz-filename"><span data-dz-name></span></div>\n </div>\n <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n <div class="dz-error-message"><span data-dz-errormessage></span></div>\n <div class="dz-success-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>Check</title>\n <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF"></path>\n </g>\n </svg>\n </div>\n <div class="dz-error-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>Error</title>\n <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z"></path>\n </g>\n </g>\n </svg>\n </div>\n</div>',drop:function(){return this.element.classList.remove("dz-drag-hover")},dragstart:function(){},dragend:function(){return this.element.classList.remove("dz-drag-hover")},dragenter:function(){return this.element.classList.add("dz-drag-hover")},dragover:function(){return this.element.classList.add("dz-drag-hover")},dragleave:function(){return this.element.classList.remove("dz-drag-hover")},paste:function(){},reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(t){var n=this;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){t.previewElement=C.createElement(this.options.previewTemplate.trim()),t.previewTemplate=t.previewElement,this.previewsContainer.appendChild(t.previewElement);var e=!0,i=!1,r=void 0;try{for(var o,a=t.previewElement.querySelectorAll("[data-dz-name]")[Symbol.iterator]();!(e=(o=a.next()).done);e=!0){var l=o.value;l.textContent=t.name}}catch(e){i=!0,r=e}finally{try{e||null==a.return||a.return()}finally{if(i)throw r}}var s=!0,u=!1,c=void 0;try{for(var d,p=t.previewElement.querySelectorAll("[data-dz-size]")[Symbol.iterator]();!(s=(d=p.next()).done);s=!0)(l=d.value).innerHTML=this.filesize(t.size)}catch(e){u=!0,c=e}finally{try{s||null==p.return||p.return()}finally{if(u)throw c}}this.options.addRemoveLinks&&(t._removeLink=C.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'.concat(this.options.dictRemoveFile,"</a>")),t.previewElement.appendChild(t._removeLink));var h=function(e){return e.preventDefault(),e.stopPropagation(),t.status===C.UPLOADING?C.confirm(n.options.dictCancelUploadConfirmation,function(){return n.removeFile(t)}):n.options.dictRemoveFileConfirmation?C.confirm(n.options.dictRemoveFileConfirmation,function(){return n.removeFile(t)}):n.removeFile(t)},f=!0,v=!1,m=void 0;try{for(var y,g=t.previewElement.querySelectorAll("[data-dz-remove]")[Symbol.iterator]();!(f=(y=g.next()).done);f=!0){y.value.addEventListener("click",h)}}catch(e){v=!0,m=e}finally{try{f||null==g.return||g.return()}finally{if(v)throw m}}}},removedfile:function(e){return null!=e.previewElement&&null!=e.previewElement.parentNode&&e.previewElement.parentNode.removeChild(e.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(e,t){if(e.previewElement){e.previewElement.classList.remove("dz-file-preview");var n=!0,i=!1,r=void 0;try{for(var o,a=e.previewElement.querySelectorAll("[data-dz-thumbnail]")[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var l=o.value;l.alt=e.name,l.src=t}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}return setTimeout(function(){return e.previewElement.classList.add("dz-image-preview")},1)}},error:function(e,t){if(e.previewElement){e.previewElement.classList.add("dz-error"),"String"!=typeof t&&t.error&&(t=t.error);var n=!0,i=!1,r=void 0;try{for(var o,a=e.previewElement.querySelectorAll("[data-dz-errormessage]")[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){o.value.textContent=t}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}}},errormultiple:function(){},processing:function(e){if(e.previewElement&&(e.previewElement.classList.add("dz-processing"),e._removeLink))return e._removeLink.innerHTML=this.options.dictCancelUpload},processingmultiple:function(){},uploadprogress:function(e,t){if(e.previewElement){var n=!0,i=!1,r=void 0;try{for(var o,a=e.previewElement.querySelectorAll("[data-dz-uploadprogress]")[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var l=o.value;"PROGRESS"===l.nodeName?l.value=t:l.style.width="".concat(t,"%")}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}}},totaluploadprogress:function(){},sending:function(){},sendingmultiple:function(){},success:function(e){if(e.previewElement)return e.previewElement.classList.add("dz-success")},successmultiple:function(){},canceled:function(e){return this.emit("error",e,this.options.dictUploadCanceled)},canceledmultiple:function(){},complete:function(e){if(e._removeLink&&(e._removeLink.innerHTML=this.options.dictRemoveFile),e.previewElement)return e.previewElement.classList.add("dz-complete")},completemultiple:function(){},maxfilesexceeded:function(){},maxfilesreached:function(){},queuecomplete:function(){},addedfiles:function(){}},this.prototype._thumbnailQueue=[],this.prototype._processingThumbnail=!1}},{key:"extend",value:function(e){for(var t=arguments.length,n=new Array(1<t?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];for(var r=0,o=n;r<o.length;r++){var a=o[r];for(var l in a){var s=a[l];e[l]=s}}return e}}]),_createClass(C,[{key:"getAcceptedFiles",value:function(){return this.files.filter(function(e){return e.accepted}).map(function(e){return e})}},{key:"getRejectedFiles",value:function(){return this.files.filter(function(e){return!e.accepted}).map(function(e){return e})}},{key:"getFilesWithStatus",value:function(t){return this.files.filter(function(e){return e.status===t}).map(function(e){return e})}},{key:"getQueuedFiles",value:function(){return this.getFilesWithStatus(C.QUEUED)}},{key:"getUploadingFiles",value:function(){return this.getFilesWithStatus(C.UPLOADING)}},{key:"getAddedFiles",value:function(){return this.getFilesWithStatus(C.ADDED)}},{key:"getActiveFiles",value:function(){return this.files.filter(function(e){return e.status===C.UPLOADING||e.status===C.QUEUED}).map(function(e){return e})}},{key:"init",value:function(){var s=this;if("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(C.createElement('<div class="dz-default dz-message"><button class="dz-button" type="button">'.concat(this.options.dictDefaultMessage,"</button></div>"))),this.clickableElements.length){!function l(){return s.hiddenFileInput&&s.hiddenFileInput.parentNode.removeChild(s.hiddenFileInput),s.hiddenFileInput=document.createElement("input"),s.hiddenFileInput.setAttribute("type","file"),(null===s.options.maxFiles||1<s.options.maxFiles)&&s.hiddenFileInput.setAttribute("multiple","multiple"),s.hiddenFileInput.className="dz-hidden-input",null!==s.options.acceptedFiles&&s.hiddenFileInput.setAttribute("accept",s.options.acceptedFiles),null!==s.options.capture&&s.hiddenFileInput.setAttribute("capture",s.options.capture),s.hiddenFileInput.style.visibility="hidden",s.hiddenFileInput.style.position="absolute",s.hiddenFileInput.style.top="0",s.hiddenFileInput.style.left="0",s.hiddenFileInput.style.height="0",s.hiddenFileInput.style.width="0",C.getElement(s.options.hiddenInputContainer,"hiddenInputContainer").appendChild(s.hiddenFileInput),s.hiddenFileInput.addEventListener("change",function(){var e=s.hiddenFileInput.files;if(e.length){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;s.addFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}}return s.emit("addedfiles",e),l()})}()}this.URL=null!==window.URL?window.URL:window.webkitURL;var e=!0,t=!1,n=void 0;try{for(var i,r=this.events[Symbol.iterator]();!(e=(i=r.next()).done);e=!0){var o=i.value;this.on(o,this.options[o])}}catch(e){t=!0,n=e}finally{try{e||null==r.return||r.return()}finally{if(t)throw n}}this.on("uploadprogress",function(){return s.updateTotalUploadProgress()}),this.on("removedfile",function(){return s.updateTotalUploadProgress()}),this.on("canceled",function(e){return s.emit("complete",e)}),this.on("complete",function(e){if(0===s.getAddedFiles().length&&0===s.getUploadingFiles().length&&0===s.getQueuedFiles().length)return setTimeout(function(){return s.emit("queuecomplete")},0)});function a(e){var t;return(t=e).dataTransfer.types&&t.dataTransfer.types.some(function(e){return"Files"==e})&&(e.stopPropagation(),e.preventDefault?e.preventDefault():e.returnValue=!1)}return this.listeners=[{element:this.element,events:{dragstart:function(e){return s.emit("dragstart",e)},dragenter:function(e){return a(e),s.emit("dragenter",e)},dragover:function(e){var t;try{t=e.dataTransfer.effectAllowed}catch(e){}return e.dataTransfer.dropEffect="move"===t||"linkMove"===t?"move":"copy",a(e),s.emit("dragover",e)},dragleave:function(e){return s.emit("dragleave",e)},drop:function(e){return a(e),s.drop(e)},dragend:function(e){return s.emit("dragend",e)}}}],this.clickableElements.forEach(function(t){return s.listeners.push({element:t,events:{click:function(e){return t===s.element&&e.target!==s.element&&!C.elementInside(e.target,s.element.querySelector(".dz-message"))||s.hiddenFileInput.click(),!0}}})}),this.enable(),this.options.init.call(this)}},{key:"destroy",value:function(){return this.disable(),this.removeAllFiles(!0),null!=this.hiddenFileInput&&this.hiddenFileInput.parentNode&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,C.instances.splice(C.instances.indexOf(this),1)}},{key:"updateTotalUploadProgress",value:function(){var e,t=0,n=0;if(this.getActiveFiles().length){var i=!0,r=!1,o=void 0;try{for(var a,l=this.getActiveFiles()[Symbol.iterator]();!(i=(a=l.next()).done);i=!0){var s=a.value;t+=s.upload.bytesSent,n+=s.upload.total}}catch(e){r=!0,o=e}finally{try{i||null==l.return||l.return()}finally{if(r)throw o}}e=100*t/n}else e=100;return this.emit("totaluploadprogress",e,n,t)}},{key:"_getParamName",value:function(e){return"function"==typeof this.options.paramName?this.options.paramName(e):"".concat(this.options.paramName).concat(this.options.uploadMultiple?"[".concat(e,"]"):"")}},{key:"_renameFile",value:function(e){return"function"!=typeof this.options.renameFile?e.name:this.options.renameFile(e)}},{key:"getFallbackForm",value:function(){var e,t;if(e=this.getExistingFallback())return e;var n='<div class="dz-fallback">';this.options.dictFallbackText&&(n+="<p>".concat(this.options.dictFallbackText,"</p>")),n+='<input type="file" name="'.concat(this._getParamName(0),'" ').concat(this.options.uploadMultiple?'multiple="multiple"':void 0,' /><input type="submit" value="Upload!"></div>');var i=C.createElement(n);return"FORM"!==this.element.tagName?(t=C.createElement('<form action="'.concat(this.options.url,'" enctype="multipart/form-data" method="').concat(this.options.method,'"></form>'))).appendChild(i):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=t?t:i}},{key:"getExistingFallback",value:function(){for(var e=function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;if(/(^| )fallback($| )/.test(a.className))return a}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}},t=0,n=["div","form"];t<n.length;t++){var i,r=n[t];if(i=e(this.element.getElementsByTagName(r)))return i}}},{key:"setupEventListeners",value:function(){return this.listeners.map(function(i){return function(){var e=[];for(var t in i.events){var n=i.events[t];e.push(i.element.addEventListener(t,n,!1))}return e}()})}},{key:"removeEventListeners",value:function(){return this.listeners.map(function(i){return function(){var e=[];for(var t in i.events){var n=i.events[t];e.push(i.element.removeEventListener(t,n,!1))}return e}()})}},{key:"disable",value:function(){var t=this;return this.clickableElements.forEach(function(e){return e.classList.remove("dz-clickable")}),this.removeEventListeners(),this.disabled=!0,this.files.map(function(e){return t.cancelUpload(e)})}},{key:"enable",value:function(){return delete this.disabled,this.clickableElements.forEach(function(e){return e.classList.add("dz-clickable")}),this.setupEventListeners()}},{key:"filesize",value:function(e){var t=0,n="b";if(0<e){for(var i=["tb","gb","mb","kb","b"],r=0;r<i.length;r++){var o=i[r];if(Math.pow(this.options.filesizeBase,4-r)/10<=e){t=e/Math.pow(this.options.filesizeBase,4-r),n=o;break}}t=Math.round(10*t)/10}return"<strong>".concat(t,"</strong> ").concat(this.options.dictFileSizeUnits[n])}},{key:"_updateMaxFilesReachedClass",value:function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")}},{key:"drop",value:function(e){if(e.dataTransfer){this.emit("drop",e);for(var t=[],n=0;n<e.dataTransfer.files.length;n++)t[n]=e.dataTransfer.files[n];if(t.length){var i=e.dataTransfer.items;i&&i.length&&null!=i[0].webkitGetAsEntry?this._addFilesFromItems(i):this.handleFiles(t)}this.emit("addedfiles",t)}}},{key:"paste",value:function(e){if(null!=__guard__(null!=e?e.clipboardData:void 0,function(e){return e.items})){this.emit("paste",e);var t=e.clipboardData.items;return t.length?this._addFilesFromItems(t):void 0}}},{key:"handleFiles",value:function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;this.addFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}}},{key:"_addFilesFromItems",value:function(s){var u=this;return function(){var e=[],t=!0,n=!1,i=void 0;try{for(var r,o=s[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a,l=r.value;null!=l.webkitGetAsEntry&&(a=l.webkitGetAsEntry())?a.isFile?e.push(u.addFile(l.getAsFile())):a.isDirectory?e.push(u._addFilesFromDirectory(a,a.name)):e.push(void 0):null!=l.getAsFile&&(null==l.kind||"file"===l.kind)?e.push(u.addFile(l.getAsFile())):e.push(void 0)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return e}()}},{key:"_addFilesFromDirectory",value:function(e,s){function t(t){return __guardMethod__(console,"log",function(e){return e.log(t)})}var u=this,n=e.createReader();return function l(){return n.readEntries(function(e){if(0<e.length){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;a.isFile?a.file(function(e){if(!u.options.ignoreHiddenFiles||"."!==e.name.substring(0,1))return e.fullPath="".concat(s,"/").concat(e.name),u.addFile(e)}):a.isDirectory&&u._addFilesFromDirectory(a,"".concat(s,"/").concat(a.name))}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}l()}return null},t)}()}},{key:"accept",value:function(e,t){this.options.maxFilesize&&e.size>1024*this.options.maxFilesize*1024?t(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(e.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):C.isValidFile(e,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(t(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",e)):this.options.accept.call(this,e,t):t(this.options.dictInvalidFileType)}},{key:"addFile",value:function(t){var n=this;t.upload={uuid:C.uuidv4(),progress:0,total:t.size,bytesSent:0,filename:this._renameFile(t)},this.files.push(t),t.status=C.ADDED,this.emit("addedfile",t),this._enqueueThumbnail(t),this.accept(t,function(e){e?(t.accepted=!1,n._errorProcessing([t],e)):(t.accepted=!0,n.options.autoQueue&&n.enqueueFile(t)),n._updateMaxFilesReachedClass()})}},{key:"enqueueFiles",value:function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;this.enqueueFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return null}},{key:"enqueueFile",value:function(e){var t=this;if(e.status!==C.ADDED||!0!==e.accepted)throw new Error("This file can't be queued because it has already been processed or was rejected.");if(e.status=C.QUEUED,this.options.autoProcessQueue)return setTimeout(function(){return t.processQueue()},0)}},{key:"_enqueueThumbnail",value:function(e){var t=this;if(this.options.createImageThumbnails&&e.type.match(/image.*/)&&e.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(e),setTimeout(function(){return t._processThumbnailQueue()},0)}},{key:"_processThumbnailQueue",value:function(){var t=this;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length){this._processingThumbnail=!0;var n=this._thumbnailQueue.shift();return this.createThumbnail(n,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(e){return t.emit("thumbnail",n,e),t._processingThumbnail=!1,t._processThumbnailQueue()})}}},{key:"removeFile",value:function(e){if(e.status===C.UPLOADING&&this.cancelUpload(e),this.files=without(this.files,e),this.emit("removedfile",e),0===this.files.length)return this.emit("reset")}},{key:"removeAllFiles",value:function(e){null==e&&(e=!1);var t=!0,n=!1,i=void 0;try{for(var r,o=this.files.slice()[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;a.status===C.UPLOADING&&!e||this.removeFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return null}},{key:"resizeImage",value:function(r,e,t,n,o){var a=this;return this.createThumbnail(r,e,t,n,!0,function(e,t){if(null==t)return o(r);var n=a.options.resizeMimeType;null==n&&(n=r.type);var i=t.toDataURL(n,a.options.resizeQuality);return"image/jpeg"!==n&&"image/jpg"!==n||(i=ExifRestore.restore(r.dataURL,i)),o(C.dataURItoBlob(i))})}},{key:"createThumbnail",value:function(e,t,n,i,r,o){var a=this,l=new FileReader;l.onload=function(){e.dataURL=l.result,"image/svg+xml"!==e.type?a.createThumbnailFromUrl(e,t,n,i,r,o):null!=o&&o(l.result)},l.readAsDataURL(e)}},{key:"displayExistingFile",value:function(t,e,n,i,r){var o=this,a=!(4<arguments.length&&void 0!==r)||r;if(this.emit("addedfile",t),this.emit("complete",t),a){t.dataURL=e,this.createThumbnailFromUrl(t,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.resizeMethod,this.options.fixOrientation,function(e){o.emit("thumbnail",t,e),n&&n()},i)}else this.emit("thumbnail",t,e),n&&n()}},{key:"createThumbnailFromUrl",value:function(o,a,l,s,t,u,e){var c=this,d=document.createElement("img");return e&&(d.crossOrigin=e),d.onload=function(){var e=function(e){return e(1)};return"undefined"!=typeof EXIF&&null!==EXIF&&t&&(e=function(e){return EXIF.getData(d,function(){return e(EXIF.getTag(this,"Orientation"))})}),e(function(e){o.width=d.width,o.height=d.height;var t=c.options.resize.call(c,o,a,l,s),n=document.createElement("canvas"),i=n.getContext("2d");switch(n.width=t.trgWidth,n.height=t.trgHeight,4<e&&(n.width=t.trgHeight,n.height=t.trgWidth),e){case 2:i.translate(n.width,0),i.scale(-1,1);break;case 3:i.translate(n.width,n.height),i.rotate(Math.PI);break;case 4:i.translate(0,n.height),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-n.width);break;case 7:i.rotate(.5*Math.PI),i.translate(n.height,-n.width),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-n.height,0)}drawImageIOSFix(i,d,null!=t.srcX?t.srcX:0,null!=t.srcY?t.srcY:0,t.srcWidth,t.srcHeight,null!=t.trgX?t.trgX:0,null!=t.trgY?t.trgY:0,t.trgWidth,t.trgHeight);var r=n.toDataURL("image/png");if(null!=u)return u(r,n)})},null!=u&&(d.onerror=u),d.src=o.dataURL}},{key:"processQueue",value:function(){var e=this.options.parallelUploads,t=this.getUploadingFiles().length,n=t;if(!(e<=t)){var i=this.getQueuedFiles();if(0<i.length){if(this.options.uploadMultiple)return this.processFiles(i.slice(0,e-t));for(;n<e;){if(!i.length)return;this.processFile(i.shift()),n++}}}}},{key:"processFile",value:function(e){return this.processFiles([e])}},{key:"processFiles",value:function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;a.processing=!0,a.status=C.UPLOADING,this.emit("processing",a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return this.options.uploadMultiple&&this.emit("processingmultiple",e),this.uploadFiles(e)}},{key:"_getFilesWithXhr",value:function(t){return this.files.filter(function(e){return e.xhr===t}).map(function(e){return e})}},{key:"cancelUpload",value:function(e){if(e.status===C.UPLOADING){var t=this._getFilesWithXhr(e.xhr),n=!0,i=!1,r=void 0;try{for(var o,a=t[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){o.value.status=C.CANCELED}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}void 0!==e.xhr&&e.xhr.abort();var l=!0,s=!1,u=void 0;try{for(var c,d=t[Symbol.iterator]();!(l=(c=d.next()).done);l=!0){var p=c.value;this.emit("canceled",p)}}catch(e){s=!0,u=e}finally{try{l||null==d.return||d.return()}finally{if(s)throw u}}this.options.uploadMultiple&&this.emit("canceledmultiple",t)}else e.status!==C.ADDED&&e.status!==C.QUEUED||(e.status=C.CANCELED,this.emit("canceled",e),this.options.uploadMultiple&&this.emit("canceledmultiple",[e]));if(this.options.autoProcessQueue)return this.processQueue()}},{key:"resolveOption",value:function(e){if("function"!=typeof e)return e;for(var t=arguments.length,n=new Array(1<t?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return e.apply(this,n)}},{key:"uploadFile",value:function(e){return this.uploadFiles([e])}},{key:"uploadFiles",value:function(s){var u=this;this._transformFiles(s,function(e){if(u.options.chunking){var t=e[0];s[0].upload.chunked=u.options.chunking&&(u.options.forceChunking||t.size>u.options.chunkSize),s[0].upload.totalChunkCount=Math.ceil(t.size/u.options.chunkSize)}if(s[0].upload.chunked){var r=s[0],o=e[0];r.upload.chunks=[];var i=function(){for(var e=0;void 0!==r.upload.chunks[e];)e++;if(!(e>=r.upload.totalChunkCount)){0;var t=e*u.options.chunkSize,n=Math.min(t+u.options.chunkSize,r.size),i={name:u._getParamName(0),data:o.webkitSlice?o.webkitSlice(t,n):o.slice(t,n),filename:r.upload.filename,chunkIndex:e};r.upload.chunks[e]={file:r,index:e,dataBlock:i,status:C.UPLOADING,progress:0,retries:0},u._uploadData(s,[i])}};if(r.upload.finishedChunkUpload=function(e){var t=!0;e.status=C.SUCCESS,e.dataBlock=null,e.xhr=null;for(var n=0;n<r.upload.totalChunkCount;n++){if(void 0===r.upload.chunks[n])return i();r.upload.chunks[n].status!==C.SUCCESS&&(t=!1)}t&&u.options.chunksUploaded(r,function(){u._finished(s,"",null)})},u.options.parallelChunkUploads)for(var n=0;n<r.upload.totalChunkCount;n++)i();else i()}else{for(var a=[],l=0;l<s.length;l++)a[l]={name:u._getParamName(l),data:e[l],filename:s[l].upload.filename};u._uploadData(s,a)}})}},{key:"_getChunk",value:function(e,t){for(var n=0;n<e.upload.totalChunkCount;n++)if(void 0!==e.upload.chunks[n]&&e.upload.chunks[n].xhr===t)return e.upload.chunks[n]}},{key:"_uploadData",value:function(t,e){var n=this,i=new XMLHttpRequest,r=!0,o=!1,a=void 0;try{for(var l,s=t[Symbol.iterator]();!(r=(l=s.next()).done);r=!0){l.value.xhr=i}}catch(e){o=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw a}}t[0].upload.chunked&&(t[0].upload.chunks[e[0].chunkIndex].xhr=i);var u=this.resolveOption(this.options.method,t),c=this.resolveOption(this.options.url,t);i.open(u,c,!0),i.timeout=this.resolveOption(this.options.timeout,t),i.withCredentials=!!this.options.withCredentials,i.onload=function(e){n._finishedUploading(t,i,e)},i.ontimeout=function(){n._handleUploadError(t,i,"Request timedout after ".concat(n.options.timeout," seconds"))},i.onerror=function(){n._handleUploadError(t,i)},(null!=i.upload?i.upload:i).onprogress=function(e){return n._updateFilesUploadProgress(t,i,e)};var d={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"};for(var p in this.options.headers&&C.extend(d,this.options.headers),d){var h=d[p];h&&i.setRequestHeader(p,h)}var f=new FormData;if(this.options.params){var v=this.options.params;for(var m in"function"==typeof v&&(v=v.call(this,t,i,t[0].upload.chunked?this._getChunk(t[0],i):null)),v){var y=v[m];f.append(m,y)}}var g=!0,b=!1,k=void 0;try{for(var w,F=t[Symbol.iterator]();!(g=(w=F.next()).done);g=!0){var z=w.value;this.emit("sending",z,i,f)}}catch(e){b=!0,k=e}finally{try{g||null==F.return||F.return()}finally{if(b)throw k}}this.options.uploadMultiple&&this.emit("sendingmultiple",t,i,f),this._addFormElementData(f);for(var x=0;x<e.length;x++){var E=e[x];f.append(E.name,E.data,E.filename)}this.submitRequest(i,f,t)}},{key:"_transformFiles",value:function(n,i){for(var e=this,r=[],o=0,t=function(t){e.options.transformFile.call(e,n[t],function(e){r[t]=e,++o===n.length&&i(r)})},a=0;a<n.length;a++)t(a)}},{key:"_addFormElementData",value:function(e){if("FORM"===this.element.tagName){var t=!0,n=!1,i=void 0;try{for(var r,o=this.element.querySelectorAll("input, textarea, select, button")[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value,l=a.getAttribute("name"),s=a.getAttribute("type");if(s=s&&s.toLowerCase(),null!=l)if("SELECT"===a.tagName&&a.hasAttribute("multiple")){var u=!0,c=!1,d=void 0;try{for(var p,h=a.options[Symbol.iterator]();!(u=(p=h.next()).done);u=!0){var f=p.value;f.selected&&e.append(l,f.value)}}catch(e){c=!0,d=e}finally{try{u||null==h.return||h.return()}finally{if(c)throw d}}}else(!s||"checkbox"!==s&&"radio"!==s||a.checked)&&e.append(l,a.value)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}}}},{key:"_updateFilesUploadProgress",value:function(e,t,n){var i;if(void 0!==n){if(i=100*n.loaded/n.total,e[0].upload.chunked){var r=e[0],o=this._getChunk(r,t);o.progress=i,o.total=n.total,o.bytesSent=n.loaded;r.upload.progress=0,r.upload.total=0;for(var a=r.upload.bytesSent=0;a<r.upload.totalChunkCount;a++)void 0!==r.upload.chunks[a]&&void 0!==r.upload.chunks[a].progress&&(r.upload.progress+=r.upload.chunks[a].progress,r.upload.total+=r.upload.chunks[a].total,r.upload.bytesSent+=r.upload.chunks[a].bytesSent);r.upload.progress=r.upload.progress/r.upload.totalChunkCount}else{var l=!0,s=!1,u=void 0;try{for(var c,d=e[Symbol.iterator]();!(l=(c=d.next()).done);l=!0){var p=c.value;p.upload.progress=i,p.upload.total=n.total,p.upload.bytesSent=n.loaded}}catch(e){s=!0,u=e}finally{try{l||null==d.return||d.return()}finally{if(s)throw u}}}var h=!0,f=!1,v=void 0;try{for(var m,y=e[Symbol.iterator]();!(h=(m=y.next()).done);h=!0){var g=m.value;this.emit("uploadprogress",g,g.upload.progress,g.upload.bytesSent)}}catch(e){f=!0,v=e}finally{try{h||null==y.return||y.return()}finally{if(f)throw v}}}else{var b=!0,k=!0,w=!(i=100),F=void 0;try{for(var z,x=e[Symbol.iterator]();!(k=(z=x.next()).done);k=!0){var E=z.value;100===E.upload.progress&&E.upload.bytesSent===E.upload.total||(b=!1),E.upload.progress=i,E.upload.bytesSent=E.upload.total}}catch(e){w=!0,F=e}finally{try{k||null==x.return||x.return()}finally{if(w)throw F}}if(b)return;var C=!0,_=!1,S=void 0;try{for(var D,T=e[Symbol.iterator]();!(C=(D=T.next()).done);C=!0){var L=D.value;this.emit("uploadprogress",L,i,L.upload.bytesSent)}}catch(e){_=!0,S=e}finally{try{C||null==T.return||T.return()}finally{if(_)throw S}}}}},{key:"_finishedUploading",value:function(e,t,n){var i;if(e[0].status!==C.CANCELED&&4===t.readyState){if("arraybuffer"!==t.responseType&&"blob"!==t.responseType&&(i=t.responseText,t.getResponseHeader("content-type")&&~t.getResponseHeader("content-type").indexOf("application/json")))try{i=JSON.parse(i)}catch(e){n=e,i="Invalid JSON response from server."}this._updateFilesUploadProgress(e),200<=t.status&&t.status<300?e[0].upload.chunked?e[0].upload.finishedChunkUpload(this._getChunk(e[0],t)):this._finished(e,i,n):this._handleUploadError(e,t,i)}}},{key:"_handleUploadError",value:function(e,t,n){if(e[0].status!==C.CANCELED){if(e[0].upload.chunked&&this.options.retryChunks){var i=this._getChunk(e[0],t);if(i.retries++<this.options.retryChunksLimit)return void this._uploadData(e,[i.dataBlock]);console.warn("Retried this chunk too often. Giving up.")}this._errorProcessing(e,n||this.options.dictResponseError.replace("{{statusCode}}",t.status),t)}}},{key:"submitRequest",value:function(e,t){e.send(t)}},{key:"_finished",value:function(e,t,n){var i=!0,r=!1,o=void 0;try{for(var a,l=e[Symbol.iterator]();!(i=(a=l.next()).done);i=!0){var s=a.value;s.status=C.SUCCESS,this.emit("success",s,t,n),this.emit("complete",s)}}catch(e){r=!0,o=e}finally{try{i||null==l.return||l.return()}finally{if(r)throw o}}if(this.options.uploadMultiple&&(this.emit("successmultiple",e,t,n),this.emit("completemultiple",e)),this.options.autoProcessQueue)return this.processQueue()}},{key:"_errorProcessing",value:function(e,t,n){var i=!0,r=!1,o=void 0;try{for(var a,l=e[Symbol.iterator]();!(i=(a=l.next()).done);i=!0){var s=a.value;s.status=C.ERROR,this.emit("error",s,t,n),this.emit("complete",s)}}catch(e){r=!0,o=e}finally{try{i||null==l.return||l.return()}finally{if(r)throw o}}if(this.options.uploadMultiple&&(this.emit("errormultiple",e,t,n),this.emit("completemultiple",e)),this.options.autoProcessQueue)return this.processQueue()}}],[{key:"uuidv4",value:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}}]),C}();Dropzone.initClass(),Dropzone.version="5.7.0",Dropzone.options={},Dropzone.optionsForElement=function(e){return e.getAttribute("id")?Dropzone.options[camelize(e.getAttribute("id"))]:void 0},Dropzone.instances=[],Dropzone.forElement=function(e){if("string"==typeof e&&(e=document.querySelector(e)),null==(null!=e?e.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return e.dropzone},Dropzone.autoDiscover=!0,Dropzone.discover=function(){var s;if(document.querySelectorAll)s=document.querySelectorAll(".dropzone");else{s=[];var e=function(l){return function(){var e=[],t=!0,n=!1,i=void 0;try{for(var r,o=l[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;/(^| )dropzone($| )/.test(a.className)?e.push(s.push(a)):e.push(void 0)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return e}()};e(document.getElementsByTagName("div")),e(document.getElementsByTagName("form"))}return function(){var e=[],t=!0,n=!1,i=void 0;try{for(var r,o=s[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;!1!==Dropzone.optionsForElement(a)?e.push(new Dropzone(a)):e.push(void 0)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return e}()},Dropzone.blacklistedBrowsers=[/opera.*(Macintosh|Windows Phone).*version\/12/i],Dropzone.isBrowserSupported=function(){var e=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a")){var t=!0,n=!1,i=void 0;try{for(var r,o=Dropzone.blacklistedBrowsers[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){r.value.test(navigator.userAgent)&&(e=!1)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}}else e=!1;else e=!1;return e},Dropzone.dataURItoBlob=function(e){for(var t=atob(e.split(",")[1]),n=e.split(",")[0].split(":")[1].split(";")[0],i=new ArrayBuffer(t.length),r=new Uint8Array(i),o=0,a=t.length,l=0<=a;l?o<=a:a<=o;l?o++:o--)r[o]=t.charCodeAt(o);return new Blob([i],{type:n})};var without=function(e,t){return e.filter(function(e){return e!==t}).map(function(e){return e})},camelize=function(e){return e.replace(/[\-_](\w)/g,function(e){return e.charAt(1).toUpperCase()})};Dropzone.createElement=function(e){var t=document.createElement("div");return t.innerHTML=e,t.childNodes[0]},Dropzone.elementInside=function(e,t){if(e===t)return!0;for(;e=e.parentNode;)if(e===t)return!0;return!1},Dropzone.getElement=function(e,t){var n;if("string"==typeof e?n=document.querySelector(e):null!=e.nodeType&&(n=e),null==n)throw new Error("Invalid `".concat(t,"` option provided. Please provide a CSS selector or a plain HTML element."));return n},Dropzone.getElements=function(e,t){var n,i;if(e instanceof Array){i=[];try{var r=!0,o=!1,a=void 0;try{for(var l,s=e[Symbol.iterator]();!(r=(l=s.next()).done);r=!0)n=l.value,i.push(this.getElement(n,t))}catch(e){o=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw a}}}catch(e){i=null}}else if("string"==typeof e){var u=!0,c=!(i=[]),d=void 0;try{for(var p,h=document.querySelectorAll(e)[Symbol.iterator]();!(u=(p=h.next()).done);u=!0)n=p.value,i.push(n)}catch(e){c=!0,d=e}finally{try{u||null==h.return||h.return()}finally{if(c)throw d}}}else null!=e.nodeType&&(i=[e]);if(null==i||!i.length)throw new Error("Invalid `".concat(t,"` option provided. Please provide a CSS selector, a plain HTML element or a list of those."));return i},Dropzone.confirm=function(e,t,n){return window.confirm(e)?t():null!=n?n():void 0},Dropzone.isValidFile=function(e,t){if(!t)return!0;t=t.split(",");var n=e.type,i=n.replace(/\/.*$/,""),r=!0,o=!1,a=void 0;try{for(var l,s=t[Symbol.iterator]();!(r=(l=s.next()).done);r=!0){var u=l.value;if("."===(u=u.trim()).charAt(0)){if(-1!==e.name.toLowerCase().indexOf(u.toLowerCase(),e.name.length-u.length))return!0}else if(/\/\*$/.test(u)){if(i===u.replace(/\/.*$/,""))return!0}else if(n===u)return!0}}catch(e){o=!0,a=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw a}}return!1},"undefined"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(e){return this.each(function(){return new Dropzone(this,e)})}), true&&null!==module?module.exports=Dropzone:window.Dropzone=Dropzone,Dropzone.ADDED="added",Dropzone.QUEUED="queued",Dropzone.ACCEPTED=Dropzone.QUEUED,Dropzone.UPLOADING="uploading",Dropzone.PROCESSING=Dropzone.UPLOADING,Dropzone.CANCELED="canceled",Dropzone.ERROR="error",Dropzone.SUCCESS="success";var detectVerticalSquash=function(e){e.naturalWidth;var t=e.naturalHeight,n=document.createElement("canvas");n.width=1,n.height=t;var i=n.getContext("2d");i.drawImage(e,0,0);for(var r=i.getImageData(1,0,1,t).data,o=0,a=t,l=t;o<l;){0===r[4*(l-1)+3]?a=l:o=l,l=a+o>>1}var s=l/t;return 0==s?1:s},drawImageIOSFix=function(e,t,n,i,r,o,a,l,s,u){var c=detectVerticalSquash(t);return e.drawImage(t,n,i,r,o,a,l,s,u/c)},ExifRestore=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"initClass",value:function(){this.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}},{key:"encode64",value:function(e){for(var t="",n=void 0,i=void 0,r="",o=void 0,a=void 0,l=void 0,s="",u=0;o=(n=e[u++])>>2,a=(3&n)<<4|(i=e[u++])>>4,l=(15&i)<<2|(r=e[u++])>>6,s=63&r,isNaN(i)?l=s=64:isNaN(r)&&(s=64),t=t+this.KEY_STR.charAt(o)+this.KEY_STR.charAt(a)+this.KEY_STR.charAt(l)+this.KEY_STR.charAt(s),n=i=r="",o=a=l=s="",u<e.length;);return t}},{key:"restore",value:function(e,t){if(!e.match("data:image/jpeg;base64,"))return t;var n=this.decode64(e.replace("data:image/jpeg;base64,","")),i=this.slice2Segments(n),r=this.exifManipulation(t,i);return"data:image/jpeg;base64,".concat(this.encode64(r))}},{key:"exifManipulation",value:function(e,t){var n=this.getExifArray(t),i=this.insertExif(e,n);return new Uint8Array(i)}},{key:"getExifArray",value:function(e){for(var t=void 0,n=0;n<e.length;){if(255===(t=e[n])[0]&225===t[1])return t;n++}return[]}},{key:"insertExif",value:function(e,t){var n=e.replace("data:image/jpeg;base64,",""),i=this.decode64(n),r=i.indexOf(255,3),o=i.slice(0,r),a=i.slice(r),l=o;return l=(l=l.concat(t)).concat(a)}},{key:"slice2Segments",value:function(e){for(var t=0,n=[];;){if(255===e[t]&218===e[t+1])break;if(255===e[t]&216===e[t+1])t+=2;else{var i=t+(256*e[t+2]+e[t+3])+2,r=e.slice(t,i);n.push(r),t=i}if(t>e.length)break}return n}},{key:"decode64",value:function(e){var t=void 0,n=void 0,i="",r=void 0,o=void 0,a="",l=0,s=[];for(/[^A-Za-z0-9\+\/\=]/g.exec(e)&&console.warn("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");t=this.KEY_STR.indexOf(e.charAt(l++))<<2|(r=this.KEY_STR.indexOf(e.charAt(l++)))>>4,n=(15&r)<<4|(o=this.KEY_STR.indexOf(e.charAt(l++)))>>2,i=(3&o)<<6|(a=this.KEY_STR.indexOf(e.charAt(l++))),s.push(t),64!==o&&s.push(n),64!==a&&s.push(i),t=n=i="",r=o=a="",l<e.length;);return s}}]),e}();ExifRestore.initClass();var contentLoaded=function(t,n){function i(e){if("readystatechange"!==e.type||"complete"===o.readyState)return("load"===e.type?t:o)[s](u+e.type,i,!1),!r&&(r=!0)?n.call(t,e.type||e):void 0}var r=!1,e=!0,o=t.document,a=o.documentElement,l=o.addEventListener?"addEventListener":"attachEvent",s=o.addEventListener?"removeEventListener":"detachEvent",u=o.addEventListener?"":"on";if("complete"!==o.readyState){if(o.createEventObject&&a.doScroll){try{e=!t.frameElement}catch(e){}e&&!function t(){try{a.doScroll("left")}catch(e){return void setTimeout(t,50)}return i("poll")}()}return o[l](u+"DOMContentLoaded",i,!1),o[l](u+"readystatechange",i,!1),t[l](u+"load",i,!1)}};function __guard__(e,t){return null!=e?t(e):void 0}function __guardMethod__(e,t,n){return null!=e&&"function"==typeof e[t]?n(e,t):void 0}Dropzone._autoDiscoverFunction=function(){if(Dropzone.autoDiscover)return Dropzone.discover()},contentLoaded(window,Dropzone._autoDiscoverFunction);
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ "./node_modules/webpack/buildin/module.js")(module)))
/***/ }),
/***/ "./node_modules/webpack/buildin/module.js":
/*!***********************************!*\
!*** (webpack)/buildin/module.js ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = function(module) {
if (!module.webpackPolyfill) {
module.deprecate = function() {};
module.paths = [];
// module.parent = undefined by default
if (!module.children) module.children = [];
Object.defineProperty(module, "loaded", {
enumerable: true,
get: function() {
return module.l;
}
});
Object.defineProperty(module, "id", {
enumerable: true,
get: function() {
return module.i;
}
});
module.webpackPolyfill = 1;
}
return module;
};
/***/ })
}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZHJvcHpvbmUvZGlzdC9taW4vZHJvcHpvbmUubWluLmNzcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZHJvcHpvbmUvZGlzdC9taW4vZHJvcHpvbmUubWluLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsdUM7Ozs7Ozs7Ozs7OztBQ0FBLDhDQUFhLG9CQUFvQix1RkFBdUYsZ0JBQWdCLGFBQWEsb0dBQW9HLEtBQUsseUNBQXlDLGtGQUFrRiw0QkFBNEIsK0VBQStFLDZDQUE2QyxLQUFLLG1DQUFtQyxvR0FBb0csU0FBUyx3QkFBd0IsNEdBQTRHLDBDQUEwQyxhQUFhLHFDQUFxQywwQkFBMEIsOEJBQThCLDREQUE0RCx1QkFBdUIsT0FBTyw4QkFBOEIsOEVBQThFLGdDQUFnQyxZQUFZLFdBQVcsS0FBSyxXQUFXLCtHQUErRyw2QkFBNkIsdUVBQXVFLHVCQUF1QixhQUFhLHdCQUF3Qix3QkFBd0IsNkJBQTZCLDBDQUEwQyw4RUFBOEUsRUFBRSw2QkFBNkIsb0NBQW9DLHlCQUF5QixNQUFNLHNEQUFzRCxJQUFJLHdCQUF3Qix1QkFBdUIsSUFBSSxpQ0FBaUMsdUJBQXVCLE1BQU0sdUJBQXVCLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsZUFBZSxhQUFhLEVBQUUsOEJBQThCLG1FQUFtRSxNQUFNLHlCQUF5QixrQkFBa0IsOERBQThELFlBQVksV0FBVyxLQUFLLGFBQWEsY0FBYyxPQUFPLGFBQWEsS0FBSyx1QkFBdUIsZ0JBQWdCLFVBQVUsOFpBQThaLG9FQUFvRSx5RkFBeUYsb0RBQW9ELHdCQUF3QixnQ0FBZ0MsMklBQTJJLDRIQUE0SCw4S0FBOEsscUhBQXFILCtMQUErTCx5RUFBeUUsdWNBQXVjLGtEQUFrRCxpQ0FBaUMsMmRBQTJkLGk5QkFBaTlCLFVBQVUsc0JBQXNCLGFBQWEsNEdB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QUUsa0NBQWtDLFVBQVUsZ0JBQWdCLCtDQUErQyw4QkFBOEIsd0NBQXdDLHdCQUF3QixhQUFhLHdCQUF3Qiw2QkFBNkIsaUNBQWlDLGtGQUFrRixFQUFFLGlDQUFpQyx3RUFBd0UsME9BQTBPLEVBQUUsVUFBVSxFQUFFLGtDQUFrQyw2QkFBNkIsbUJBQW1CLCtDQUErQyxvRUFBb0UsdUJBQXVCLG1DQUFtQyxFQUFFLDJDQUEyQyxrREFBa0QsMEJBQTBCLEVBQUUscUNBQXFDLHFCQUFxQixXQUFXLEVBQUUseUNBQXlDLElBQUksVUFBVSxFQUFFLHFDQUFxQyxpQ0FBaUMsbUZBQW1GLG9DQUFvQyxFQUFFLHVDQUF1QyxrQkFBa0IsRUFBRSxpQ0FBaUMsZ0NBQWdDLEtBQUssNkNBQTZDLGNBQWMsb0JBQW9CLFVBQVUsRUFBRSxpQ0FBaUMsMkRBQTJELDBPQUEwTyx5UUFBeVEsRUFBRSxVQUFVLEtBQUssR0FBRyx3QkFBd0IsZ0NBQWdDLGNBQWMsOElBQThJLDJMQUEyTCw4QkFBOEIsb0NBQW9DLElBQUksa0JBQWtCLFVBQVUsaUJBQWlCLElBQUksbUJBQW1CLFNBQVMsNkJBQTZCLGlCQUFpQixHQUFHLDZGQUE2Rix3QkFBd0IsMkJBQTJCLGdDQUFnQyxzREFBc0QsMENBQTBDLG9EQUFvRCxzRDs7Ozs7Ozs7Ozs7O0FDQS85OUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6InZlbmRvcnN+ZHJvcHpvbmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBfdHlwZW9mKGUpe3JldHVybihfdHlwZW9mPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihlLHQpe3JldHVybiF0fHxcIm9iamVjdFwiIT09X3R5cGVvZih0KSYmXCJmdW5jdGlvblwiIT10eXBlb2YgdD9fYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpOnR9ZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKGUpe3JldHVybihfZ2V0UHJvdG90eXBlT2Y9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIGV9ZnVuY3Rpb24gX2luaGVyaXRzKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZfc2V0UHJvdG90eXBlT2YoZSx0KX1mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YoZSx0KXtyZXR1cm4oX3NldFByb3RvdHlwZU9mPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGkua2V5LGkpfX1mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSx0LG4pe3JldHVybiB0JiZfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSx0KSxuJiZfZGVmaW5lUHJvcGVydGllcyhlLG4pLGV9dmFyIEVtaXR0ZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsZSl9cmV0dXJuIF9jcmVhdGVDbGFzcyhlLFt7a2V5Olwib25cIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHx7fSx0aGlzLl9jYWxsYmFja3NbZV18fCh0aGlzLl9jYWxsYmFja3NbZV09W10pLHRoaXMuX2NhbGxiYWNrc1tlXS5wdXNoKHQpLHRoaXN9fSx7a2V5OlwiZW1pdFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9O3ZhciB0PXRoaXMuX2NhbGxiYWNrc1tlXTtpZih0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheSgxPG4/bi0xOjApLHI9MTtyPG47cisrKWlbci0xXT1hcmd1bWVudHNbcl07dmFyIG89ITAsYT0hMSxsPXZvaWQgMDt0cnl7Zm9yKHZhciBzLHU9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShvPShzPXUubmV4dCgpKS5kb25lKTtvPSEwKXtzLnZhbHVlLmFwcGx5KHRoaXMsaSl9fWNhdGNoKGUpe2E9ITAsbD1lfWZpbmFsbHl7dHJ5e298fG51bGw9PXUucmV0dXJufHx1LnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBsfX19cmV0dXJuIHRoaXN9fSx7a2V5Olwib2ZmXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5fY2FsbGJhY2tzfHwwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fY2FsbGJhY2tzPXt9LHRoaXM7dmFyIG49dGhpcy5fY2FsbGJhY2tzW2VdO2lmKCFuKXJldHVybiB0aGlzO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBkZWxldGUgdGhpcy5fY2FsbGJhY2tzW2VdLHRoaXM7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe2lmKG5baV09PT10KXtuLnNwbGljZShpLDEpO2JyZWFrfX1yZXR1cm4gdGhpc319XSksZX0oKSxEcm9wem9uZT1mdW5jdGlvbigpe2Z1bmN0aW9uIEMoZSx0KXt2YXIgbixpLHI7aWYoX2NsYXNzQ2FsbENoZWNrKHRoaXMsQyksKG49X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcyxfZ2V0UHJvdG90eXBlT2YoQykuY2FsbCh0aGlzKSkpLmVsZW1lbnQ9ZSxuLnZlcnNpb249Qy52ZXJzaW9uLG4uZGVmYXVsdE9wdGlvbnMucHJldmlld1RlbXBsYXRlPW4uZGVmYXVsdE9wdGlvbnMucHJldmlld1RlbXBsYXRlLnJlcGxhY2UoL1xcbiovZyxcIlwiKSxuLmNsaWNrYWJsZUVsZW1lbnRzPVtdLG4ubGlzdGVuZXJzPVtdLG4uZmlsZXM9W10sXCJzdHJpbmdcIj09dHlwZW9mIG4uZWxlbWVudCYmKG4uZWxlbWVudD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4uZWxlbWVudCkpLCFuLmVsZW1lbnR8fG51bGw9PW4uZWxlbWVudC5ub2RlVHlwZSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRyb3B6b25lIGVsZW1lbnQuXCIpO2lmKG4uZWxlbWVudC5kcm9wem9uZSl0aHJvdyBuZXcgRXJyb3IoXCJEcm9wem9uZSBhbHJlYWR5IGF0dGFjaGVkLlwiKTtDLmluc3RhbmNlcy5wdXNoKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQobikpLG4uZWxlbWVudC5kcm9wem9uZT1fYXNzZXJ0VGhpc0luaXRpYWxpemVkKG4pO3ZhciBvPW51bGwhPShyPUMub3B0aW9uc0ZvckVsZW1lbnQobi5lbGVtZW50KSk/cjp7fTtpZihuLm9wdGlvbnM9Qy5leHRlbmQoe30sbi5kZWZhdWx0T3B0aW9ucyxvLG51bGwhPXQ/dDp7fSksbi5vcHRpb25zLmZvcmNlRmFsbGJhY2t8fCFDLmlzQnJvd3NlclN1cHBvcnRlZCgpKXJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihuLG4ub3B0aW9ucy5mYWxsYmFjay5jYWxsKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQobikpKTtpZihudWxsPT1uLm9wdGlvbnMudXJsJiYobi5vcHRpb25zLnVybD1uLmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiYWN0aW9uXCIpKSwhbi5vcHRpb25zLnVybCl0aHJvdyBuZXcgRXJyb3IoXCJObyBVUkwgcHJvdmlkZWQuXCIpO2lmKG4ub3B0aW9ucy5hY2NlcHRlZEZpbGVzJiZuLm9wdGlvbnMuYWNjZXB0ZWRNaW1lVHlwZXMpdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbid0IHByb3ZpZGUgYm90aCAnYWNjZXB0ZWRGaWxlcycgYW5kICdhY2NlcHRlZE1pbWVUeXBlcycuICdhY2NlcHRlZE1pbWVUeXBlcycgaXMgZGVwcmVjYXRlZC5cIik7aWYobi5vcHRpb25zLnVwbG9hZE11bHRpcGxlJiZuLm9wdGlvbnMuY2h1bmtpbmcpdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbm5vdCBzZXQgYm90aDogdXBsb2FkTXVsdGlwbGUgYW5kIGNodW5raW5nLlwiKTtyZXR1cm4gbi5vcHRpb25zLmFjY2VwdGVkTWltZVR5cGVzJiYobi5vcHRpb25zLmFjY2VwdGVkRmlsZXM9bi5vcHRpb25zLmFjY2VwdGVkTWltZVR5cGVzLGRlbGV0ZSBuLm9wdGlvbnMuYWNjZXB0ZWRNaW1lVHlwZXMpLG51bGwhPW4ub3B0aW9ucy5yZW5hbWVGaWxlbmFtZSYmKG4ub3B0aW9ucy5yZW5hbWVGaWxlPWZ1bmN0aW9uKGUpe3JldHVybiBuLm9wdGlvbnMucmVuYW1lRmlsZW5hbWUuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKG4pLGUubmFtZSxlKX0pLG4ub3B0aW9ucy5tZXRob2Q9bi5vcHRpb25zLm1ldGhvZC50b1VwcGVyQ2FzZSgpLChpPW4uZ2V0RXhpc3RpbmdGYWxsYmFjaygpKSYmaS5wYXJlbnROb2RlJiZpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSksITEhPT1uLm9wdGlvbnMucHJldmlld3NDb250YWluZXImJihuLm9wdGlvbnMucHJldmlld3NDb250YWluZXI/bi5wcmV2aWV3c0NvbnRhaW5lcj1DLmdldEVsZW1lbnQobi5vcHRpb25zLnByZXZpZXdzQ29udGFpbmVyLFwicHJldmlld3NDb250YWluZXJcIik6bi5wcmV2aWV3c0NvbnRhaW5lcj1uLmVsZW1lbnQpLG4ub3B0aW9ucy5jbGlja2FibGUmJighMD09PW4ub3B0aW9ucy5jbGlja2FibGU/bi5jbGlja2FibGVFbGVtZW50cz1bbi5lbGVtZW50XTpuLmNsaWNrYWJsZUVsZW1lbnRzPUMuZ2V0RWxlbWVudHMobi5vcHRpb25zLmNsaWNrYWJsZSxcImNsaWNrYWJsZVwiKSksbi5pbml0KCksbn1yZXR1cm4gX2luaGVyaXRzKEMsRW1pdHRlciksX2NyZWF0ZUNsYXNzKEMsbnVsbCxbe2tleTpcImluaXRDbGFzc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm90b3R5cGUuRW1pdHRlcj1FbWl0dGVyLHRoaXMucHJvdG90eXBlLmV2ZW50cz1bXCJkcm9wXCIsXCJkcmFnc3RhcnRcIixcImRyYWdlbmRcIixcImRyYWdlbnRlclwiLFwiZHJhZ292ZXJcIixcImRyYWdsZWF2ZVwiLFwiYWRkZWRmaWxlXCIsXCJhZGRlZGZpbGVzXCIsXCJyZW1vdmVkZmlsZVwiLFwidGh1bWJuYWlsXCIsXCJlcnJvclwiLFwiZXJyb3JtdWx0aXBsZVwiLFwicHJvY2Vzc2luZ1wiLFwicHJvY2Vzc2luZ211bHRpcGxlXCIsXCJ1cGxvYWRwcm9ncmVzc1wiLFwidG90YWx1cGxvYWRwcm9ncmVzc1wiLFwic2VuZGluZ1wiLFwic2VuZGluZ211bHRpcGxlXCIsXCJzdWNjZXNzXCIsXCJzdWNjZXNzbXVsdGlwbGVcIixcImNhbmNlbGVkXCIsXCJjYW5jZWxlZG11bHRpcGxlXCIsXCJjb21wbGV0ZVwiLFwiY29tcGxldGVtdWx0aXBsZVwiLFwicmVzZXRcIixcIm1heGZpbGVzZXhjZWVkZWRcIixcIm1heGZpbGVzcmVhY2hlZFwiLFwicXVldWVjb21wbGV0ZVwiXSx0aGlzLnByb3RvdHlwZS5kZWZhdWx0T3B0aW9ucz17dXJsOm51bGwsbWV0aG9kOlwicG9zdFwiLHdpdGhDcmVkZW50aWFsczohMSx0aW1lb3V0OjNlNCxwYXJhbGxlbFVwbG9hZHM6Mix1cGxvYWRNdWx0aXBsZTohMSxjaHVua2luZzohMSxmb3JjZUNodW5raW5nOiExLGNodW5rU2l6ZToyZTYscGFyYWxsZWxDaHVua1VwbG9hZHM6ITEscmV0cnlDaHVua3M6ITEscmV0cnlDaHVua3NMaW1pdDozLG1heEZpbGVzaXplOjI1NixwYXJhbU5hbWU6XCJmaWxlXCIsY3JlYXRlSW1hZ2VUaHVtYm5haWxzOiEwLG1heFRodW1ibmFpbEZpbGVzaXplOjEwLHRodW1ibmFpbFdpZHRoOjEyMCx0aHVtYm5haWxIZWlnaHQ6MTIwLHRodW1ibmFpbE1ldGhvZDpcImNyb3BcIixyZXNpemVXaWR0aDpudWxsLHJlc2l6ZUhlaWdodDpudWxsLHJlc2l6ZU1pbWVUeXBlOm51bGwscmVzaXplUXVhbGl0eTouOCxyZXNpemVNZXRob2Q6XCJjb250YWluXCIsZmlsZXNpemVCYXNlOjFlMyxtYXhGaWxlczpudWxsLGhlYWRlcnM6bnVsbCxjbGlja2FibGU6ITAsaWdub3JlSGlkZGVuRmlsZXM6ITAsYWNjZXB0ZWRGaWxlczpudWxsLGFjY2VwdGVkTWltZVR5cGVzOm51bGwsYXV0b1Byb2Nlc3NRdWV1ZTohMCxhdXRvUXVldWU6ITAsYWRkUmVtb3ZlTGlua3M6ITEscHJldmlld3NDb250YWluZXI6bnVsbCxoaWRkZW5JbnB1dENvbnRhaW5lcjpcImJvZHlcIixjYXB0dXJlOm51bGwscmVuYW1lRmlsZW5hbWU6bnVsbCxyZW5hbWVGaWxlOm51bGwsZm9yY2VGYWxsYmFjazohMSxkaWN0RGVmYXVsdE1lc3NhZ2U6XCJEcm9wIGZpbGVzIGhlcmUgdG8gdXBsb2FkXCIsZGljdEZhbGxiYWNrTWVzc2FnZTpcIllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGRyYWcnbidkcm9wIGZpbGUgdXBsb2Fkcy5cIixkaWN0RmFsbGJhY2tUZXh0OlwiUGxlYXNlIHVzZSB0aGUgZmFsbGJhY2sgZm9ybSBiZWxvdyB0byB1cGxvYWQgeW91ciBmaWxlcyBsaWtlIGluIHRoZSBvbGRlbiBkYXlzLlwiLGRpY3RGaWxlVG9vQmlnOlwiRmlsZSBpcyB0b28gYmlnICh7e2ZpbGVzaXplfX1NaUIpLiBNYXggZmlsZXNpemU6IHt7bWF4RmlsZXNpemV9fU1pQi5cIixkaWN0SW52YWxpZEZpbGVUeXBlOlwiWW91IGNhbid0IHVwbG9hZCBmaWxlcyBvZiB0aGlzIHR5cGUuXCIsZGljdFJlc3BvbnNlRXJyb3I6XCJTZXJ2ZXIgcmVzcG9uZGVkIHdpdGgge3tzdGF0dXNDb2RlfX0gY29kZS5cIixkaWN0Q2FuY2VsVXBsb2FkOlwiQ2FuY2VsIHVwbG9hZFwiLGRpY3RVcGxvYWRDYW5jZWxlZDpcIlVwbG9hZCBjYW5jZWxlZC5cIixkaWN0Q2FuY2VsVXBsb2FkQ29uZmlybWF0aW9uOlwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNhbmNlbCB0aGlzIHVwbG9hZD9cIixkaWN0UmVtb3ZlRmlsZTpcIlJlbW92ZSBmaWxlXCIsZGljdFJlbW92ZUZpbGVDb25maXJtYXRpb246bnVsbCxkaWN0TWF4RmlsZXNFeGNlZWRlZDpcIllvdSBjYW4gbm90IHVwbG9hZCBhbnkgbW9yZSBmaWxlcy5cIixkaWN0RmlsZVNpemVVbml0czp7dGI6XCJUQlwiLGdiOlwiR0JcIixtYjpcIk1CXCIsa2I6XCJLQlwiLGI6XCJiXCJ9LGluaXQ6ZnVuY3Rpb24oKXt9LHBhcmFtczpmdW5jdGlvbihlLHQsbil7aWYobilyZXR1cm57ZHp1dWlkOm4uZmlsZS51cGxvYWQudXVpZCxkemNodW5raW5kZXg6bi5pbmRleCxkenRvdGFsZmlsZXNpemU6bi5maWxlLnNpemUsZHpjaHVua3NpemU6dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxkenRvdGFsY2h1bmtjb3VudDpuLmZpbGUudXBsb2FkLnRvdGFsQ2h1bmtDb3VudCxkemNodW5rYnl0ZW9mZnNldDpuLmluZGV4KnRoaXMub3B0aW9ucy5jaHVua1NpemV9fSxhY2NlcHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCgpfSxjaHVua3NVcGxvYWRlZDpmdW5jdGlvbihlLHQpe3QoKX0sZmFsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZTt0aGlzLmVsZW1lbnQuY2xhc3NOYW1lPVwiXCIuY29uY2F0KHRoaXMuZWxlbWVudC5jbGFzc05hbWUsXCIgZHotYnJvd3Nlci1ub3Qtc3VwcG9ydGVkXCIpO3ZhciB0PSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPXRoaXMuZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKVtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShyPW8ubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgYT1yLnZhbHVlO2lmKC8oXnwgKWR6LW1lc3NhZ2UoJHwgKS8udGVzdChhLmNsYXNzTmFtZSkpeyhlPWEpLmNsYXNzTmFtZT1cImR6LW1lc3NhZ2VcIjticmVha319fWNhdGNoKGUpe249ITAsaT1lfWZpbmFsbHl7dHJ5e3R8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX1lfHwoZT1DLmNyZWF0ZUVsZW1lbnQoJzxkaXYgY2xhc3M9XCJkei1tZXNzYWdlXCI+PHNwYW4+PC9zcGFuPjwvZGl2PicpLHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChlKSk7dmFyIGw9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNwYW5cIilbMF07cmV0dXJuIGwmJihudWxsIT1sLnRleHRDb250ZW50P2wudGV4dENvbnRlbnQ9dGhpcy5vcHRpb25zLmRpY3RGYWxsYmFja01lc3NhZ2U6bnVsbCE9bC5pbm5lclRleHQmJihsLmlubmVyVGV4dD10aGlzLm9wdGlvbnMuZGljdEZhbGxiYWNrTWVzc2FnZSkpLHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmdldEZhbGxiYWNrRm9ybSgpKX0scmVzaXplOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPXtzcmNYOjAsc3JjWTowLHNyY1dpZHRoOmUud2lkdGgsc3JjSGVpZ2h0OmUuaGVpZ2h0fSxvPWUud2lkdGgvZS5oZWlnaHQ7bnVsbD09dCYmbnVsbD09bj8odD1yLnNyY1dpZHRoLG49ci5zcmNIZWlnaHQpOm51bGw9PXQ/dD1uKm86bnVsbD09biYmKG49dC9vKTt2YXIgYT0odD1NYXRoLm1pbih0LHIuc3JjV2lkdGgpKS8obj1NYXRoLm1pbihuLHIuc3JjSGVpZ2h0KSk7aWYoci5zcmNXaWR0aD50fHxyLnNyY0hlaWdodD5uKWlmKFwiY3JvcFwiPT09aSlhPG8/KHIuc3JjSGVpZ2h0PWUuaGVpZ2h0LHIuc3JjV2lkdGg9ci5zcmNIZWlnaHQqYSk6KHIuc3JjV2lkdGg9ZS53aWR0aCxyLnNyY0hlaWdodD1yLnNyY1dpZHRoL2EpO2Vsc2V7aWYoXCJjb250YWluXCIhPT1pKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gcmVzaXplTWV0aG9kICdcIi5jb25jYXQoaSxcIidcIikpO2E8bz9uPXQvbzp0PW4qb31yZXR1cm4gci5zcmNYPShlLndpZHRoLXIuc3JjV2lkdGgpLzIsci5zcmNZPShlLmhlaWdodC1yLnNyY0hlaWdodCkvMixyLnRyZ1dpZHRoPXQsci50cmdIZWlnaHQ9bixyfSx0cmFuc2Zvcm1GaWxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKHRoaXMub3B0aW9ucy5yZXNpemVXaWR0aHx8dGhpcy5vcHRpb25zLnJlc2l6ZUhlaWdodCkmJmUudHlwZS5tYXRjaCgvaW1hZ2UuKi8pP3RoaXMucmVzaXplSW1hZ2UoZSx0aGlzLm9wdGlvbnMucmVzaXplV2lkdGgsdGhpcy5vcHRpb25zLnJlc2l6ZUhlaWdodCx0aGlzLm9wdGlvbnMucmVzaXplTWV0aG9kLHQpOnQoZSl9LHByZXZpZXdUZW1wbGF0ZTonPGRpdiBjbGFzcz1cImR6LXByZXZpZXcgZHotZmlsZS1wcmV2aWV3XCI+XFxuICA8ZGl2IGNsYXNzPVwiZHotaW1hZ2VcIj48aW1nIGRhdGEtZHotdGh1bWJuYWlsIC8+PC9kaXY+XFxuICA8ZGl2IGNsYXNzPVwiZHotZGV0YWlsc1wiPlxcbiAgICA8ZGl2IGNsYXNzPVwiZHotc2l6ZVwiPjxzcGFuIGRhdGEtZHotc2l6ZT48L3NwYW4+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XCJkei1maWxlbmFtZVwiPjxzcGFuIGRhdGEtZHotbmFtZT48L3NwYW4+PC9kaXY+XFxuICA8L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XCJkei1wcm9ncmVzc1wiPjxzcGFuIGNsYXNzPVwiZHotdXBsb2FkXCIgZGF0YS1kei11cGxvYWRwcm9ncmVzcz48L3NwYW4+PC9kaXY+XFxuICA8ZGl2IGNsYXNzPVwiZHotZXJyb3ItbWVzc2FnZVwiPjxzcGFuIGRhdGEtZHotZXJyb3JtZXNzYWdlPjwvc3Bhbj48L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XCJkei1zdWNjZXNzLW1hcmtcIj5cXG4gICAgPHN2ZyB3aWR0aD1cIjU0cHhcIiBoZWlnaHQ9XCI1NHB4XCIgdmlld0JveD1cIjAgMCA1NCA1NFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XFxuICAgICAgPHRpdGxlPkNoZWNrPC90aXRsZT5cXG4gICAgICA8ZyBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxcbiAgICAgICAgPHBhdGggZD1cIk0yMy41LDMxLjg0MzE0NTggTDE3LjU4NTI0MTksMjUuOTI4Mzg3NyBDMTYuMDI0ODI1MywyNC4zNjc5NzExIDEzLjQ5MTAyOTQsMjQuMzY2ODM1IDExLjkyODkzMjIsMjUuOTI4OTMyMiBDMTAuMzcwMDEzNiwyNy40ODc4NTA4IDEwLjM2NjU5MTIsMzAuMDIzNDQ1NSAxMS45MjgzODc3LDMxLjU4NTI0MTkgTDIwLjQxNDc1ODEsNDAuMDcxNjEyMyBDMjAuNTEzMzk5OSw0MC4xNzAyNTQxIDIwLjYxNTkzMTUsNDAuMjYyNjY0OSAyMC43MjE4NjE1LDQwLjM0ODg0MzUgQzIyLjI4MzU2NjksNDEuODcyNTY1MSAyNC43OTQyMzQsNDEuODYyNjIwMiAyNi4zNDYxNTY0LDQwLjMxMDY5NzggTDQzLjMxMDY5NzgsMjMuMzQ2MTU2NCBDNDQuODc3MTAyMSwyMS43Nzk3NTIxIDQ0Ljg3NTgwNTcsMTkuMjQ4Mzg4NyA0My4zMTM3MDg1LDE3LjY4NjI5MTUgQzQxLjc1NDc4OTksMTYuMTI3MzcyOSAzOS4yMTc2MDM1LDE2LjEyNTU0MjIgMzcuNjUzODQzNiwxNy42ODkzMDIyIEwyMy41LDMxLjg0MzE0NTggWiBNMjcsNTMgQzQxLjM1OTQwMzUsNTMgNTMsNDEuMzU5NDAzNSA1MywyNyBDNTMsMTIuNjQwNTk2NSA0MS4zNTk0MDM1LDEgMjcsMSBDMTIuNjQwNTk2NSwxIDEsMTIuNjQwNTk2NSAxLDI3IEMxLDQxLjM1OTQwMzUgMTIuNjQwNTk2NSw1MyAyNyw1MyBaXCIgc3Ryb2tlLW9wYWNpdHk9XCIwLjE5ODc5NDE1OFwiIHN0cm9rZT1cIiM3NDc0NzRcIiBmaWxsLW9wYWNpdHk9XCIwLjgxNjUxOTQ3NVwiIGZpbGw9XCIjRkZGRkZGXCI+PC9wYXRoPlxcbiAgICAgIDwvZz5cXG4gICAgPC9zdmc+XFxuICA8L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XCJkei1lcnJvci1tYXJrXCI+XFxuICAgIDxzdmcgd2lkdGg9XCI1NHB4XCIgaGVpZ2h0PVwiNTRweFwiIHZpZXdCb3g9XCIwIDAgNTQgNTRcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiPlxcbiAgICAgIDx0aXRsZT5FcnJvcjwvdGl0bGU+XFxuICAgICAgPGcgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjFcIiBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cXG4gICAgICAgIDxnIHN0cm9rZT1cIiM3NDc0NzRcIiBzdHJva2Utb3BhY2l0eT1cIjAuMTk4Nzk0MTU4XCIgZmlsbD1cIiNGRkZGRkZcIiBmaWxsLW9wYWNpdHk9XCIwLjgxNjUxOTQ3NVwiPlxcbiAgICAgICAgICA8cGF0aCBkPVwiTTMyLjY1Njg1NDIsMjkgTDM4LjMxMDY5NzgsMjMuMzQ2MTU2NCBDMzkuODc3MTAyMSwyMS43Nzk3NTIxIDM5Ljg3NTgwNTcsMTkuMjQ4Mzg4NyAzOC4zMTM3MDg1LDE3LjY4NjI5MTUgQzM2Ljc1NDc4OTksMTYuMTI3MzcyOSAzNC4yMTc2MDM1LDE2LjEyNTU0MjIgMzIuNjUzODQzNiwxNy42ODkzMDIyIEwyNywyMy4zNDMxNDU4IEwyMS4zNDYxNTY0LDE3LjY4OTMwMjIgQzE5Ljc4MjM5NjUsMTYuMTI1NTQyMiAxNy4yNDUyMTAxLDE2LjEyNzM3MjkgMTUuNjg2MjkxNSwxNy42ODYyOTE1IEMxNC4xMjQxOTQzLDE5LjI0ODM4ODcgMTQuMTIyODk3OSwyMS43Nzk3NTIxIDE1LjY4OTMwMjIsMjMuMzQ2MTU2NCBMMjEuMzQzMTQ1OCwyOSBMMTUuNjg5MzAyMiwzNC42NTM4NDM2IEMxNC4xMjI4OTc5LDM2LjIyMDI0NzkgMTQuMTI0MTk0MywzOC43NTE2MTEzIDE1LjY4NjI5MTUsNDAuMzEzNzA4NSBDMTcuMjQ1MjEwMSw0MS44NzI2MjcxIDE5Ljc4MjM5NjUsNDEuODc0NDU3OCAyMS4zNDYxNTY0LDQwLjMxMDY5NzggTDI3LDM0LjY1Njg1NDIgTDMyLjY1Mzg0MzYsNDAuMzEwNjk3OCBDMzQuMjE3NjAzNSw0MS44NzQ0NTc4IDM2Ljc1NDc4OTksNDEuODcyNjI3MSAzOC4zMTM3MDg1LDQwLjMxMzcwODUgQzM5Ljg3NTgwNTcsMzguNzUxNjExMyAzOS44NzcxMDIxLDM2LjIyMDI0NzkgMzguMzEwNjk3OCwzNC42NTM4NDM2IEwzMi42NTY4NTQyLDI5IFogTTI3LDUzIEM0MS4zNTk0MDM1LDUzIDUzLDQxLjM1OTQwMzUgNTMsMjcgQzUzLDEyLjY0MDU5NjUgNDEuMzU5NDAzNSwxIDI3LDEgQzEyLjY0MDU5NjUsMSAxLDEyLjY0MDU5NjUgMSwyNyBDMSw0MS4zNTk0MDM1IDEyLjY0MDU5NjUsNTMgMjcsNTMgWlwiPjwvcGF0aD5cXG4gICAgICAgIDwvZz5cXG4gICAgICA8L2c+XFxuICAgIDwvc3ZnPlxcbiAgPC9kaXY+XFxuPC9kaXY+Jyxkcm9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHotZHJhZy1ob3ZlclwiKX0sZHJhZ3N0YXJ0OmZ1bmN0aW9uKCl7fSxkcmFnZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHotZHJhZy1ob3ZlclwiKX0sZHJhZ2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZHotZHJhZy1ob3ZlclwiKX0sZHJhZ292ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkei1kcmFnLWhvdmVyXCIpfSxkcmFnbGVhdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJkei1kcmFnLWhvdmVyXCIpfSxwYXN0ZTpmdW5jdGlvbigpe30scmVzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJkei1zdGFydGVkXCIpfSxhZGRlZGZpbGU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcztpZih0aGlzLmVsZW1lbnQ9PT10aGlzLnByZXZpZXdzQ29udGFpbmVyJiZ0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LXN0YXJ0ZWRcIiksdGhpcy5wcmV2aWV3c0NvbnRhaW5lcil7dC5wcmV2aWV3RWxlbWVudD1DLmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLnByZXZpZXdUZW1wbGF0ZS50cmltKCkpLHQucHJldmlld1RlbXBsYXRlPXQucHJldmlld0VsZW1lbnQsdGhpcy5wcmV2aWV3c0NvbnRhaW5lci5hcHBlbmRDaGlsZCh0LnByZXZpZXdFbGVtZW50KTt2YXIgZT0hMCxpPSExLHI9dm9pZCAwO3RyeXtmb3IodmFyIG8sYT10LnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kei1uYW1lXVwiKVtTeW1ib2wuaXRlcmF0b3JdKCk7IShlPShvPWEubmV4dCgpKS5kb25lKTtlPSEwKXt2YXIgbD1vLnZhbHVlO2wudGV4dENvbnRlbnQ9dC5uYW1lfX1jYXRjaChlKXtpPSEwLHI9ZX1maW5hbGx5e3RyeXtlfHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgcn19dmFyIHM9ITAsdT0hMSxjPXZvaWQgMDt0cnl7Zm9yKHZhciBkLHA9dC5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZHotc2l6ZV1cIilbU3ltYm9sLml0ZXJhdG9yXSgpOyEocz0oZD1wLm5leHQoKSkuZG9uZSk7cz0hMCkobD1kLnZhbHVlKS5pbm5lckhUTUw9dGhpcy5maWxlc2l6ZSh0LnNpemUpfWNhdGNoKGUpe3U9ITAsYz1lfWZpbmFsbHl7dHJ5e3N8fG51bGw9PXAucmV0dXJufHxwLnJldHVybigpfWZpbmFsbHl7aWYodSl0aHJvdyBjfX10aGlzLm9wdGlvbnMuYWRkUmVtb3ZlTGlua3MmJih0Ll9yZW1vdmVMaW5rPUMuY3JlYXRlRWxlbWVudCgnPGEgY2xhc3M9XCJkei1yZW1vdmVcIiBocmVmPVwiamF2YXNjcmlwdDp1bmRlZmluZWQ7XCIgZGF0YS1kei1yZW1vdmU+Jy5jb25jYXQodGhpcy5vcHRpb25zLmRpY3RSZW1vdmVGaWxlLFwiPC9hPlwiKSksdC5wcmV2aWV3RWxlbWVudC5hcHBlbmRDaGlsZCh0Ll9yZW1vdmVMaW5rKSk7dmFyIGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHQuc3RhdHVzPT09Qy5VUExPQURJTkc/Qy5jb25maXJtKG4ub3B0aW9ucy5kaWN0Q2FuY2VsVXBsb2FkQ29uZmlybWF0aW9uLGZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVtb3ZlRmlsZSh0KX0pOm4ub3B0aW9ucy5kaWN0UmVtb3ZlRmlsZUNvbmZpcm1hdGlvbj9DLmNvbmZpcm0obi5vcHRpb25zLmRpY3RSZW1vdmVGaWxlQ29uZmlybWF0aW9uLGZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVtb3ZlRmlsZSh0KX0pOm4ucmVtb3ZlRmlsZSh0KX0sZj0hMCx2PSExLG09dm9pZCAwO3RyeXtmb3IodmFyIHksZz10LnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kei1yZW1vdmVdXCIpW1N5bWJvbC5pdGVyYXRvcl0oKTshKGY9KHk9Zy5uZXh0KCkpLmRvbmUpO2Y9ITApe3kudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaCl9fWNhdGNoKGUpe3Y9ITAsbT1lfWZpbmFsbHl7dHJ5e2Z8fG51bGw9PWcucmV0dXJufHxnLnJldHVybigpfWZpbmFsbHl7aWYodil0aHJvdyBtfX19fSxyZW1vdmVkZmlsZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZS5wcmV2aWV3RWxlbWVudCYmbnVsbCE9ZS5wcmV2aWV3RWxlbWVudC5wYXJlbnROb2RlJiZlLnByZXZpZXdFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZS5wcmV2aWV3RWxlbWVudCksdGhpcy5fdXBkYXRlTWF4RmlsZXNSZWFjaGVkQ2xhc3MoKX0sdGh1bWJuYWlsOmZ1bmN0aW9uKGUsdCl7aWYoZS5wcmV2aWV3RWxlbWVudCl7ZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHotZmlsZS1wcmV2aWV3XCIpO3ZhciBuPSEwLGk9ITEscj12b2lkIDA7dHJ5e2Zvcih2YXIgbyxhPWUucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWR6LXRodW1ibmFpbF1cIilbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1hLm5leHQoKSkuZG9uZSk7bj0hMCl7dmFyIGw9by52YWx1ZTtsLmFsdD1lLm5hbWUsbC5zcmM9dH19Y2F0Y2goZSl7aT0hMCxyPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09YS5yZXR1cm58fGEucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IHJ9fXJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImR6LWltYWdlLXByZXZpZXdcIil9LDEpfX0sZXJyb3I6ZnVuY3Rpb24oZSx0KXtpZihlLnByZXZpZXdFbGVtZW50KXtlLnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkei1lcnJvclwiKSxcIlN0cmluZ1wiIT10eXBlb2YgdCYmdC5lcnJvciYmKHQ9dC5lcnJvcik7dmFyIG49ITAsaT0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9ZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZHotZXJyb3JtZXNzYWdlXVwiKVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPWEubmV4dCgpKS5kb25lKTtuPSEwKXtvLnZhbHVlLnRleHRDb250ZW50PXR9fWNhdGNoKGUpe2k9ITAscj1lfWZpbmFsbHl7dHJ5e258fG51bGw9PWEucmV0dXJufHxhLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyByfX19fSxlcnJvcm11bHRpcGxlOmZ1bmN0aW9uKCl7fSxwcm9jZXNzaW5nOmZ1bmN0aW9uKGUpe2lmKGUucHJldmlld0VsZW1lbnQmJihlLnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkei1wcm9jZXNzaW5nXCIpLGUuX3JlbW92ZUxpbmspKXJldHVybiBlLl9yZW1vdmVMaW5rLmlubmVySFRNTD10aGlzLm9wdGlvbnMuZGljdENhbmNlbFVwbG9hZH0scHJvY2Vzc2luZ211bHRpcGxlOmZ1bmN0aW9uKCl7fSx1cGxvYWRwcm9ncmVzczpmdW5jdGlvbihlLHQpe2lmKGUucHJldmlld0VsZW1lbnQpe3ZhciBuPSEwLGk9ITEscj12b2lkIDA7dHJ5e2Zvcih2YXIgbyxhPWUucHJldmlld0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWR6LXVwbG9hZHByb2dyZXNzXVwiKVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPWEubmV4dCgpKS5kb25lKTtuPSEwKXt2YXIgbD1vLnZhbHVlO1wiUFJPR1JFU1NcIj09PWwubm9kZU5hbWU/bC52YWx1ZT10Omwuc3R5bGUud2lkdGg9XCJcIi5jb25jYXQodCxcIiVcIil9fWNhdGNoKGUpe2k9ITAscj1lfWZpbmFsbHl7dHJ5e258fG51bGw9PWEucmV0dXJufHxhLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyByfX19fSx0b3RhbHVwbG9hZHByb2dyZXNzOmZ1bmN0aW9uKCl7fSxzZW5kaW5nOmZ1bmN0aW9uKCl7fSxzZW5kaW5nbXVsdGlwbGU6ZnVuY3Rpb24oKXt9LHN1Y2Nlc3M6ZnVuY3Rpb24oZSl7aWYoZS5wcmV2aWV3RWxlbWVudClyZXR1cm4gZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZHotc3VjY2Vzc1wiKX0sc3VjY2Vzc211bHRpcGxlOmZ1bmN0aW9uKCl7fSxjYW5jZWxlZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lbWl0KFwiZXJyb3JcIixlLHRoaXMub3B0aW9ucy5kaWN0VXBsb2FkQ2FuY2VsZWQpfSxjYW5jZWxlZG11bHRpcGxlOmZ1bmN0aW9uKCl7fSxjb21wbGV0ZTpmdW5jdGlvbihlKXtpZihlLl9yZW1vdmVMaW5rJiYoZS5fcmVtb3ZlTGluay5pbm5lckhUTUw9dGhpcy5vcHRpb25zLmRpY3RSZW1vdmVGaWxlKSxlLnByZXZpZXdFbGVtZW50KXJldHVybiBlLnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkei1jb21wbGV0ZVwiKX0sY29tcGxldGVtdWx0aXBsZTpmdW5jdGlvbigpe30sbWF4ZmlsZXNleGNlZWRlZDpmdW5jdGlvbigpe30sbWF4ZmlsZXNyZWFjaGVkOmZ1bmN0aW9uKCl7fSxxdWV1ZWNvbXBsZXRlOmZ1bmN0aW9uKCl7fSxhZGRlZGZpbGVzOmZ1bmN0aW9uKCl7fX0sdGhpcy5wcm90b3R5cGUuX3RodW1ibmFpbFF1ZXVlPVtdLHRoaXMucHJvdG90eXBlLl9wcm9jZXNzaW5nVGh1bWJuYWlsPSExfX0se2tleTpcImV4dGVuZFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KDE8dD90LTE6MCksaT0xO2k8dDtpKyspbltpLTFdPWFyZ3VtZW50c1tpXTtmb3IodmFyIHI9MCxvPW47cjxvLmxlbmd0aDtyKyspe3ZhciBhPW9bcl07Zm9yKHZhciBsIGluIGEpe3ZhciBzPWFbbF07ZVtsXT1zfX1yZXR1cm4gZX19XSksX2NyZWF0ZUNsYXNzKEMsW3trZXk6XCJnZXRBY2NlcHRlZEZpbGVzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWNjZXB0ZWR9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KX19LHtrZXk6XCJnZXRSZWplY3RlZEZpbGVzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuYWNjZXB0ZWR9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KX19LHtrZXk6XCJnZXRGaWxlc1dpdGhTdGF0dXNcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhdHVzPT09dH0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZX0pfX0se2tleTpcImdldFF1ZXVlZEZpbGVzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRGaWxlc1dpdGhTdGF0dXMoQy5RVUVVRUQpfX0se2tleTpcImdldFVwbG9hZGluZ0ZpbGVzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRGaWxlc1dpdGhTdGF0dXMoQy5VUExPQURJTkcpfX0se2tleTpcImdldEFkZGVkRmlsZXNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEZpbGVzV2l0aFN0YXR1cyhDLkFEREVEKX19LHtrZXk6XCJnZXRBY3RpdmVGaWxlc1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXR1cz09PUMuVVBMT0FESU5HfHxlLnN0YXR1cz09PUMuUVVFVUVEfSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9fSx7a2V5OlwiaW5pdFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHM9dGhpcztpZihcImZvcm1cIj09PXRoaXMuZWxlbWVudC50YWdOYW1lJiZ0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZW5jdHlwZVwiLFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiKSx0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZHJvcHpvbmVcIikmJiF0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5kei1tZXNzYWdlXCIpJiZ0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoQy5jcmVhdGVFbGVtZW50KCc8ZGl2IGNsYXNzPVwiZHotZGVmYXVsdCBkei1tZXNzYWdlXCI+PGJ1dHRvbiBjbGFzcz1cImR6LWJ1dHRvblwiIHR5cGU9XCJidXR0b25cIj4nLmNvbmNhdCh0aGlzLm9wdGlvbnMuZGljdERlZmF1bHRNZXNzYWdlLFwiPC9idXR0b24+PC9kaXY+XCIpKSksdGhpcy5jbGlja2FibGVFbGVtZW50cy5sZW5ndGgpeyFmdW5jdGlvbiBsKCl7cmV0dXJuIHMuaGlkZGVuRmlsZUlucHV0JiZzLmhpZGRlbkZpbGVJbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHMuaGlkZGVuRmlsZUlucHV0KSxzLmhpZGRlbkZpbGVJbnB1dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIikscy5oaWRkZW5GaWxlSW5wdXQuc2V0QXR0cmlidXRlKFwidHlwZVwiLFwiZmlsZVwiKSwobnVsbD09PXMub3B0aW9ucy5tYXhGaWxlc3x8MTxzLm9wdGlvbnMubWF4RmlsZXMpJiZzLmhpZGRlbkZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiLFwibXVsdGlwbGVcIikscy5oaWRkZW5GaWxlSW5wdXQuY2xhc3NOYW1lPVwiZHotaGlkZGVuLWlucHV0XCIsbnVsbCE9PXMub3B0aW9ucy5hY2NlcHRlZEZpbGVzJiZzLmhpZGRlbkZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoXCJhY2NlcHRcIixzLm9wdGlvbnMuYWNjZXB0ZWRGaWxlcyksbnVsbCE9PXMub3B0aW9ucy5jYXB0dXJlJiZzLmhpZGRlbkZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoXCJjYXB0dXJlXCIscy5vcHRpb25zLmNhcHR1cmUpLHMuaGlkZGVuRmlsZUlucHV0LnN0eWxlLnZpc2liaWxpdHk9XCJoaWRkZW5cIixzLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIscy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUudG9wPVwiMFwiLHMuaGlkZGVuRmlsZUlucHV0LnN0eWxlLmxlZnQ9XCIwXCIscy5oaWRkZW5GaWxlSW5wdXQuc3R5bGUuaGVpZ2h0PVwiMFwiLHMuaGlkZGVuRmlsZUlucHV0LnN0eWxlLndpZHRoPVwiMFwiLEMuZ2V0RWxlbWVudChzLm9wdGlvbnMuaGlkZGVuSW5wdXRDb250YWluZXIsXCJoaWRkZW5JbnB1dENvbnRhaW5lclwiKS5hcHBlbmRDaGlsZChzLmhpZGRlbkZpbGVJbnB1dCkscy5oaWRkZW5GaWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLGZ1bmN0aW9uKCl7dmFyIGU9cy5oaWRkZW5GaWxlSW5wdXQuZmlsZXM7aWYoZS5sZW5ndGgpe3ZhciB0PSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0ocj1vLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGE9ci52YWx1ZTtzLmFkZEZpbGUoYSl9fWNhdGNoKGUpe249ITAsaT1lfWZpbmFsbHl7dHJ5e3R8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX19cmV0dXJuIHMuZW1pdChcImFkZGVkZmlsZXNcIixlKSxsKCl9KX0oKX10aGlzLlVSTD1udWxsIT09d2luZG93LlVSTD93aW5kb3cuVVJMOndpbmRvdy53ZWJraXRVUkw7dmFyIGU9ITAsdD0hMSxuPXZvaWQgMDt0cnl7Zm9yKHZhciBpLHI9dGhpcy5ldmVudHNbU3ltYm9sLml0ZXJhdG9yXSgpOyEoZT0oaT1yLm5leHQoKSkuZG9uZSk7ZT0hMCl7dmFyIG89aS52YWx1ZTt0aGlzLm9uKG8sdGhpcy5vcHRpb25zW29dKX19Y2F0Y2goZSl7dD0hMCxuPWV9ZmluYWxseXt0cnl7ZXx8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZih0KXRocm93IG59fXRoaXMub24oXCJ1cGxvYWRwcm9ncmVzc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHMudXBkYXRlVG90YWxVcGxvYWRQcm9ncmVzcygpfSksdGhpcy5vbihcInJlbW92ZWRmaWxlXCIsZnVuY3Rpb24oKXtyZXR1cm4gcy51cGRhdGVUb3RhbFVwbG9hZFByb2dyZXNzKCl9KSx0aGlzLm9uKFwiY2FuY2VsZWRcIixmdW5jdGlvbihlKXtyZXR1cm4gcy5lbWl0KFwiY29tcGxldGVcIixlKX0pLHRoaXMub24oXCJjb21wbGV0ZVwiLGZ1bmN0aW9uKGUpe2lmKDA9PT1zLmdldEFkZGVkRmlsZXMoKS5sZW5ndGgmJjA9PT1zLmdldFVwbG9hZGluZ0ZpbGVzKCkubGVuZ3RoJiYwPT09cy5nZXRRdWV1ZWRGaWxlcygpLmxlbmd0aClyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBzLmVtaXQoXCJxdWV1ZWNvbXBsZXRlXCIpfSwwKX0pO2Z1bmN0aW9uIGEoZSl7dmFyIHQ7cmV0dXJuKHQ9ZSkuZGF0YVRyYW5zZmVyLnR5cGVzJiZ0LmRhdGFUcmFuc2Zlci50eXBlcy5zb21lKGZ1bmN0aW9uKGUpe3JldHVyblwiRmlsZXNcIj09ZX0pJiYoZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKTplLnJldHVyblZhbHVlPSExKX1yZXR1cm4gdGhpcy5saXN0ZW5lcnM9W3tlbGVtZW50OnRoaXMuZWxlbWVudCxldmVudHM6e2RyYWdzdGFydDpmdW5jdGlvbihlKXtyZXR1cm4gcy5lbWl0KFwiZHJhZ3N0YXJ0XCIsZSl9LGRyYWdlbnRlcjpmdW5jdGlvbihlKXtyZXR1cm4gYShlKSxzLmVtaXQoXCJkcmFnZW50ZXJcIixlKX0sZHJhZ292ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7dHJ5e3Q9ZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZH1jYXRjaChlKXt9cmV0dXJuIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9XCJtb3ZlXCI9PT10fHxcImxpbmtNb3ZlXCI9PT10P1wibW92ZVwiOlwiY29weVwiLGEoZSkscy5lbWl0KFwiZHJhZ292ZXJcIixlKX0sZHJhZ2xlYXZlOmZ1bmN0aW9uKGUpe3JldHVybiBzLmVtaXQoXCJkcmFnbGVhdmVcIixlKX0sZHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gYShlKSxzLmRyb3AoZSl9LGRyYWdlbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHMuZW1pdChcImRyYWdlbmRcIixlKX19fV0sdGhpcy5jbGlja2FibGVFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBzLmxpc3RlbmVycy5wdXNoKHtlbGVtZW50OnQsZXZlbnRzOntjbGljazpmdW5jdGlvbihlKXtyZXR1cm4gdD09PXMuZWxlbWVudCYmZS50YXJnZXQhPT1zLmVsZW1lbnQmJiFDLmVsZW1lbnRJbnNpZGUoZS50YXJnZXQscy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZHotbWVzc2FnZVwiKSl8fHMuaGlkZGVuRmlsZUlucHV0LmNsaWNrKCksITB9fX0pfSksdGhpcy5lbmFibGUoKSx0aGlzLm9wdGlvbnMuaW5pdC5jYWxsKHRoaXMpfX0se2tleTpcImRlc3Ryb3lcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGUoKSx0aGlzLnJlbW92ZUFsbEZpbGVzKCEwKSxudWxsIT10aGlzLmhpZGRlbkZpbGVJbnB1dCYmdGhpcy5oaWRkZW5GaWxlSW5wdXQucGFyZW50Tm9kZSYmKHRoaXMuaGlkZGVuRmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5oaWRkZW5GaWxlSW5wdXQpLHRoaXMuaGlkZGVuRmlsZUlucHV0PW51bGwpLGRlbGV0ZSB0aGlzLmVsZW1lbnQuZHJvcHpvbmUsQy5pbnN0YW5jZXMuc3BsaWNlKEMuaW5zdGFuY2VzLmluZGV4T2YodGhpcyksMSl9fSx7a2V5OlwidXBkYXRlVG90YWxVcGxvYWRQcm9ncmVzc1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wLG49MDtpZih0aGlzLmdldEFjdGl2ZUZpbGVzKCkubGVuZ3RoKXt2YXIgaT0hMCxyPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIGEsbD10aGlzLmdldEFjdGl2ZUZpbGVzKClbU3ltYm9sLml0ZXJhdG9yXSgpOyEoaT0oYT1sLm5leHQoKSkuZG9uZSk7aT0hMCl7dmFyIHM9YS52YWx1ZTt0Kz1zLnVwbG9hZC5ieXRlc1NlbnQsbis9cy51cGxvYWQudG90YWx9fWNhdGNoKGUpe3I9ITAsbz1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PWwucmV0dXJufHxsLnJldHVybigpfWZpbmFsbHl7aWYocil0aHJvdyBvfX1lPTEwMCp0L259ZWxzZSBlPTEwMDtyZXR1cm4gdGhpcy5lbWl0KFwidG90YWx1cGxvYWRwcm9ncmVzc1wiLGUsbix0KX19LHtrZXk6XCJfZ2V0UGFyYW1OYW1lXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLnBhcmFtTmFtZT90aGlzLm9wdGlvbnMucGFyYW1OYW1lKGUpOlwiXCIuY29uY2F0KHRoaXMub3B0aW9ucy5wYXJhbU5hbWUpLmNvbmNhdCh0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGU/XCJbXCIuY29uY2F0KGUsXCJdXCIpOlwiXCIpfX0se2tleTpcIl9yZW5hbWVGaWxlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpcy5vcHRpb25zLnJlbmFtZUZpbGU/ZS5uYW1lOnRoaXMub3B0aW9ucy5yZW5hbWVGaWxlKGUpfX0se2tleTpcImdldEZhbGxiYWNrRm9ybVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdDtpZihlPXRoaXMuZ2V0RXhpc3RpbmdGYWxsYmFjaygpKXJldHVybiBlO3ZhciBuPSc8ZGl2IGNsYXNzPVwiZHotZmFsbGJhY2tcIj4nO3RoaXMub3B0aW9ucy5kaWN0RmFsbGJhY2tUZXh0JiYobis9XCI8cD5cIi5jb25jYXQodGhpcy5vcHRpb25zLmRpY3RGYWxsYmFja1RleHQsXCI8L3A+XCIpKSxuKz0nPGlucHV0IHR5cGU9XCJmaWxlXCIgbmFtZT1cIicuY29uY2F0KHRoaXMuX2dldFBhcmFtTmFtZSgwKSwnXCIgJykuY29uY2F0KHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZT8nbXVsdGlwbGU9XCJtdWx0aXBsZVwiJzp2b2lkIDAsJyAvPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJVcGxvYWQhXCI+PC9kaXY+Jyk7dmFyIGk9Qy5jcmVhdGVFbGVtZW50KG4pO3JldHVyblwiRk9STVwiIT09dGhpcy5lbGVtZW50LnRhZ05hbWU/KHQ9Qy5jcmVhdGVFbGVtZW50KCc8Zm9ybSBhY3Rpb249XCInLmNvbmNhdCh0aGlzLm9wdGlvbnMudXJsLCdcIiBlbmN0eXBlPVwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIG1ldGhvZD1cIicpLmNvbmNhdCh0aGlzLm9wdGlvbnMubWV0aG9kLCdcIj48L2Zvcm0+JykpKS5hcHBlbmRDaGlsZChpKToodGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImVuY3R5cGVcIixcIm11bHRpcGFydC9mb3JtLWRhdGFcIiksdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcIm1ldGhvZFwiLHRoaXMub3B0aW9ucy5tZXRob2QpKSxudWxsIT10P3Q6aX19LHtrZXk6XCJnZXRFeGlzdGluZ0ZhbGxiYWNrXCIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciByLG89ZVtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShyPW8ubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgYT1yLnZhbHVlO2lmKC8oXnwgKWZhbGxiYWNrKCR8ICkvLnRlc3QoYS5jbGFzc05hbWUpKXJldHVybiBhfX1jYXRjaChlKXtuPSEwLGk9ZX1maW5hbGx5e3RyeXt0fHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgaX19fSx0PTAsbj1bXCJkaXZcIixcImZvcm1cIl07dDxuLmxlbmd0aDt0Kyspe3ZhciBpLHI9blt0XTtpZihpPWUodGhpcy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHIpKSlyZXR1cm4gaX19fSx7a2V5Olwic2V0dXBFdmVudExpc3RlbmVyc1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGlzdGVuZXJzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gaS5ldmVudHMpe3ZhciBuPWkuZXZlbnRzW3RdO2UucHVzaChpLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITEpKX1yZXR1cm4gZX0oKX0pfX0se2tleTpcInJlbW92ZUV2ZW50TGlzdGVuZXJzXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saXN0ZW5lcnMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiBpLmV2ZW50cyl7dmFyIG49aS5ldmVudHNbdF07ZS5wdXNoKGkuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSkpfXJldHVybiBlfSgpfSl9fSx7a2V5OlwiZGlzYWJsZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5jbGlja2FibGVFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTGlzdC5yZW1vdmUoXCJkei1jbGlja2FibGVcIil9KSx0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXJzKCksdGhpcy5kaXNhYmxlZD0hMCx0aGlzLmZpbGVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5jYW5jZWxVcGxvYWQoZSl9KX19LHtrZXk6XCJlbmFibGVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBkZWxldGUgdGhpcy5kaXNhYmxlZCx0aGlzLmNsaWNrYWJsZUVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NMaXN0LmFkZChcImR6LWNsaWNrYWJsZVwiKX0pLHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpfX0se2tleTpcImZpbGVzaXplXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPVwiYlwiO2lmKDA8ZSl7Zm9yKHZhciBpPVtcInRiXCIsXCJnYlwiLFwibWJcIixcImtiXCIsXCJiXCJdLHI9MDtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXTtpZihNYXRoLnBvdyh0aGlzLm9wdGlvbnMuZmlsZXNpemVCYXNlLDQtcikvMTA8PWUpe3Q9ZS9NYXRoLnBvdyh0aGlzLm9wdGlvbnMuZmlsZXNpemVCYXNlLDQtciksbj1vO2JyZWFrfX10PU1hdGgucm91bmQoMTAqdCkvMTB9cmV0dXJuXCI8c3Ryb25nPlwiLmNvbmNhdCh0LFwiPC9zdHJvbmc+IFwiKS5jb25jYXQodGhpcy5vcHRpb25zLmRpY3RGaWxlU2l6ZVVuaXRzW25dKX19LHtrZXk6XCJfdXBkYXRlTWF4RmlsZXNSZWFjaGVkQ2xhc3NcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLm9wdGlvbnMubWF4RmlsZXMmJnRoaXMuZ2V0QWNjZXB0ZWRGaWxlcygpLmxlbmd0aD49dGhpcy5vcHRpb25zLm1heEZpbGVzPyh0aGlzLmdldEFjY2VwdGVkRmlsZXMoKS5sZW5ndGg9PT10aGlzLm9wdGlvbnMubWF4RmlsZXMmJnRoaXMuZW1pdChcIm1heGZpbGVzcmVhY2hlZFwiLHRoaXMuZmlsZXMpLHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZHotbWF4LWZpbGVzLXJlYWNoZWRcIikpOnRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHotbWF4LWZpbGVzLXJlYWNoZWRcIil9fSx7a2V5OlwiZHJvcFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUuZGF0YVRyYW5zZmVyKXt0aGlzLmVtaXQoXCJkcm9wXCIsZSk7Zm9yKHZhciB0PVtdLG49MDtuPGUuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aDtuKyspdFtuXT1lLmRhdGFUcmFuc2Zlci5maWxlc1tuXTtpZih0Lmxlbmd0aCl7dmFyIGk9ZS5kYXRhVHJhbnNmZXIuaXRlbXM7aSYmaS5sZW5ndGgmJm51bGwhPWlbMF0ud2Via2l0R2V0QXNFbnRyeT90aGlzLl9hZGRGaWxlc0Zyb21JdGVtcyhpKTp0aGlzLmhhbmRsZUZpbGVzKHQpfXRoaXMuZW1pdChcImFkZGVkZmlsZXNcIix0KX19fSx7a2V5OlwicGFzdGVcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihudWxsIT1fX2d1YXJkX18obnVsbCE9ZT9lLmNsaXBib2FyZERhdGE6dm9pZCAwLGZ1bmN0aW9uKGUpe3JldHVybiBlLml0ZW1zfSkpe3RoaXMuZW1pdChcInBhc3RlXCIsZSk7dmFyIHQ9ZS5jbGlwYm9hcmREYXRhLml0ZW1zO3JldHVybiB0Lmxlbmd0aD90aGlzLl9hZGRGaWxlc0Zyb21JdGVtcyh0KTp2b2lkIDB9fX0se2tleTpcImhhbmRsZUZpbGVzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciByLG89ZVtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShyPW8ubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgYT1yLnZhbHVlO3RoaXMuYWRkRmlsZShhKX19Y2F0Y2goZSl7bj0hMCxpPWV9ZmluYWxseXt0cnl7dHx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGl9fX19LHtrZXk6XCJfYWRkRmlsZXNGcm9tSXRlbXNcIix2YWx1ZTpmdW5jdGlvbihzKXt2YXIgdT10aGlzO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPVtdLHQ9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciByLG89c1tTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShyPW8ubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgYSxsPXIudmFsdWU7bnVsbCE9bC53ZWJraXRHZXRBc0VudHJ5JiYoYT1sLndlYmtpdEdldEFzRW50cnkoKSk/YS5pc0ZpbGU/ZS5wdXNoKHUuYWRkRmlsZShsLmdldEFzRmlsZSgpKSk6YS5pc0RpcmVjdG9yeT9lLnB1c2godS5fYWRkRmlsZXNGcm9tRGlyZWN0b3J5KGEsYS5uYW1lKSk6ZS5wdXNoKHZvaWQgMCk6bnVsbCE9bC5nZXRBc0ZpbGUmJihudWxsPT1sLmtpbmR8fFwiZmlsZVwiPT09bC5raW5kKT9lLnB1c2godS5hZGRGaWxlKGwuZ2V0QXNGaWxlKCkpKTplLnB1c2godm9pZCAwKX19Y2F0Y2goZSl7bj0hMCxpPWV9ZmluYWxseXt0cnl7dHx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGl9fXJldHVybiBlfSgpfX0se2tleTpcIl9hZGRGaWxlc0Zyb21EaXJlY3RvcnlcIix2YWx1ZTpmdW5jdGlvbihlLHMpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIF9fZ3VhcmRNZXRob2RfXyhjb25zb2xlLFwibG9nXCIsZnVuY3Rpb24oZSl7cmV0dXJuIGUubG9nKHQpfSl9dmFyIHU9dGhpcyxuPWUuY3JlYXRlUmVhZGVyKCk7cmV0dXJuIGZ1bmN0aW9uIGwoKXtyZXR1cm4gbi5yZWFkRW50cmllcyhmdW5jdGlvbihlKXtpZigwPGUubGVuZ3RoKXt2YXIgdD0hMCxuPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIHIsbz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKHQ9KHI9by5uZXh0KCkpLmRvbmUpO3Q9ITApe3ZhciBhPXIudmFsdWU7YS5pc0ZpbGU/YS5maWxlKGZ1bmN0aW9uKGUpe2lmKCF1Lm9wdGlvbnMuaWdub3JlSGlkZGVuRmlsZXN8fFwiLlwiIT09ZS5uYW1lLnN1YnN0cmluZygwLDEpKXJldHVybiBlLmZ1bGxQYXRoPVwiXCIuY29uY2F0KHMsXCIvXCIpLmNvbmNhdChlLm5hbWUpLHUuYWRkRmlsZShlKX0pOmEuaXNEaXJlY3RvcnkmJnUuX2FkZEZpbGVzRnJvbURpcmVjdG9yeShhLFwiXCIuY29uY2F0KHMsXCIvXCIpLmNvbmNhdChhLm5hbWUpKX19Y2F0Y2goZSl7bj0hMCxpPWV9ZmluYWxseXt0cnl7dHx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGl9fWwoKX1yZXR1cm4gbnVsbH0sdCl9KCl9fSx7a2V5OlwiYWNjZXB0XCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLm9wdGlvbnMubWF4RmlsZXNpemUmJmUuc2l6ZT4xMDI0KnRoaXMub3B0aW9ucy5tYXhGaWxlc2l6ZSoxMDI0P3QodGhpcy5vcHRpb25zLmRpY3RGaWxlVG9vQmlnLnJlcGxhY2UoXCJ7e2ZpbGVzaXplfX1cIixNYXRoLnJvdW5kKGUuc2l6ZS8xMDI0LzEwLjI0KS8xMDApLnJlcGxhY2UoXCJ7e21heEZpbGVzaXplfX1cIix0aGlzLm9wdGlvbnMubWF4RmlsZXNpemUpKTpDLmlzVmFsaWRGaWxlKGUsdGhpcy5vcHRpb25zLmFjY2VwdGVkRmlsZXMpP251bGwhPXRoaXMub3B0aW9ucy5tYXhGaWxlcyYmdGhpcy5nZXRBY2NlcHRlZEZpbGVzKCkubGVuZ3RoPj10aGlzLm9wdGlvbnMubWF4RmlsZXM/KHQodGhpcy5vcHRpb25zLmRpY3RNYXhGaWxlc0V4Y2VlZGVkLnJlcGxhY2UoXCJ7e21heEZpbGVzfX1cIix0aGlzLm9wdGlvbnMubWF4RmlsZXMpKSx0aGlzLmVtaXQoXCJtYXhmaWxlc2V4Y2VlZGVkXCIsZSkpOnRoaXMub3B0aW9ucy5hY2NlcHQuY2FsbCh0aGlzLGUsdCk6dCh0aGlzLm9wdGlvbnMuZGljdEludmFsaWRGaWxlVHlwZSl9fSx7a2V5OlwiYWRkRmlsZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7dC51cGxvYWQ9e3V1aWQ6Qy51dWlkdjQoKSxwcm9ncmVzczowLHRvdGFsOnQuc2l6ZSxieXRlc1NlbnQ6MCxmaWxlbmFtZTp0aGlzLl9yZW5hbWVGaWxlKHQpfSx0aGlzLmZpbGVzLnB1c2godCksdC5zdGF0dXM9Qy5BRERFRCx0aGlzLmVtaXQoXCJhZGRlZGZpbGVcIix0KSx0aGlzLl9lbnF1ZXVlVGh1bWJuYWlsKHQpLHRoaXMuYWNjZXB0KHQsZnVuY3Rpb24oZSl7ZT8odC5hY2NlcHRlZD0hMSxuLl9lcnJvclByb2Nlc3NpbmcoW3RdLGUpKToodC5hY2NlcHRlZD0hMCxuLm9wdGlvbnMuYXV0b1F1ZXVlJiZuLmVucXVldWVGaWxlKHQpKSxuLl91cGRhdGVNYXhGaWxlc1JlYWNoZWRDbGFzcygpfSl9fSx7a2V5OlwiZW5xdWV1ZUZpbGVzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciByLG89ZVtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShyPW8ubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgYT1yLnZhbHVlO3RoaXMuZW5xdWV1ZUZpbGUoYSl9fWNhdGNoKGUpe249ITAsaT1lfWZpbmFsbHl7dHJ5e3R8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX1yZXR1cm4gbnVsbH19LHtrZXk6XCJlbnF1ZXVlRmlsZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoZS5zdGF0dXMhPT1DLkFEREVEfHwhMCE9PWUuYWNjZXB0ZWQpdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmaWxlIGNhbid0IGJlIHF1ZXVlZCBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIG9yIHdhcyByZWplY3RlZC5cIik7aWYoZS5zdGF0dXM9Qy5RVUVVRUQsdGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNzUXVldWUpcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm9jZXNzUXVldWUoKX0sMCl9fSx7a2V5OlwiX2VucXVldWVUaHVtYm5haWxcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHRoaXMub3B0aW9ucy5jcmVhdGVJbWFnZVRodW1ibmFpbHMmJmUudHlwZS5tYXRjaCgvaW1hZ2UuKi8pJiZlLnNpemU8PTEwMjQqdGhpcy5vcHRpb25zLm1heFRodW1ibmFpbEZpbGVzaXplKjEwMjQpcmV0dXJuIHRoaXMuX3RodW1ibmFpbFF1ZXVlLnB1c2goZSksc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll9wcm9jZXNzVGh1bWJuYWlsUXVldWUoKX0sMCl9fSx7a2V5OlwiX3Byb2Nlc3NUaHVtYm5haWxRdWV1ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5fcHJvY2Vzc2luZ1RodW1ibmFpbCYmMCE9PXRoaXMuX3RodW1ibmFpbFF1ZXVlLmxlbmd0aCl7dGhpcy5fcHJvY2Vzc2luZ1RodW1ibmFpbD0hMDt2YXIgbj10aGlzLl90aHVtYm5haWxRdWV1ZS5zaGlmdCgpO3JldHVybiB0aGlzLmNyZWF0ZVRodW1ibmFpbChuLHRoaXMub3B0aW9ucy50aHVtYm5haWxXaWR0aCx0aGlzLm9wdGlvbnMudGh1bWJuYWlsSGVpZ2h0LHRoaXMub3B0aW9ucy50aHVtYm5haWxNZXRob2QsITAsZnVuY3Rpb24oZSl7cmV0dXJuIHQuZW1pdChcInRodW1ibmFpbFwiLG4sZSksdC5fcHJvY2Vzc2luZ1RodW1ibmFpbD0hMSx0Ll9wcm9jZXNzVGh1bWJuYWlsUXVldWUoKX0pfX19LHtrZXk6XCJyZW1vdmVGaWxlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5zdGF0dXM9PT1DLlVQTE9BRElORyYmdGhpcy5jYW5jZWxVcGxvYWQoZSksdGhpcy5maWxlcz13aXRob3V0KHRoaXMuZmlsZXMsZSksdGhpcy5lbWl0KFwicmVtb3ZlZGZpbGVcIixlKSwwPT09dGhpcy5maWxlcy5sZW5ndGgpcmV0dXJuIHRoaXMuZW1pdChcInJlc2V0XCIpfX0se2tleTpcInJlbW92ZUFsbEZpbGVzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7bnVsbD09ZSYmKGU9ITEpO3ZhciB0PSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPXRoaXMuZmlsZXMuc2xpY2UoKVtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShyPW8ubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgYT1yLnZhbHVlO2Euc3RhdHVzPT09Qy5VUExPQURJTkcmJiFlfHx0aGlzLnJlbW92ZUZpbGUoYSl9fWNhdGNoKGUpe249ITAsaT1lfWZpbmFsbHl7dHJ5e3R8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX1yZXR1cm4gbnVsbH19LHtrZXk6XCJyZXNpemVJbWFnZVwiLHZhbHVlOmZ1bmN0aW9uKHIsZSx0LG4sbyl7dmFyIGE9dGhpcztyZXR1cm4gdGhpcy5jcmVhdGVUaHVtYm5haWwocixlLHQsbiwhMCxmdW5jdGlvbihlLHQpe2lmKG51bGw9PXQpcmV0dXJuIG8ocik7dmFyIG49YS5vcHRpb25zLnJlc2l6ZU1pbWVUeXBlO251bGw9PW4mJihuPXIudHlwZSk7dmFyIGk9dC50b0RhdGFVUkwobixhLm9wdGlvbnMucmVzaXplUXVhbGl0eSk7cmV0dXJuXCJpbWFnZS9qcGVnXCIhPT1uJiZcImltYWdlL2pwZ1wiIT09bnx8KGk9RXhpZlJlc3RvcmUucmVzdG9yZShyLmRhdGFVUkwsaSkpLG8oQy5kYXRhVVJJdG9CbG9iKGkpKX0pfX0se2tleTpcImNyZWF0ZVRodW1ibmFpbFwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLGkscixvKXt2YXIgYT10aGlzLGw9bmV3IEZpbGVSZWFkZXI7bC5vbmxvYWQ9ZnVuY3Rpb24oKXtlLmRhdGFVUkw9bC5yZXN1bHQsXCJpbWFnZS9zdmcreG1sXCIhPT1lLnR5cGU/YS5jcmVhdGVUaHVtYm5haWxGcm9tVXJsKGUsdCxuLGkscixvKTpudWxsIT1vJiZvKGwucmVzdWx0KX0sbC5yZWFkQXNEYXRhVVJMKGUpfX0se2tleTpcImRpc3BsYXlFeGlzdGluZ0ZpbGVcIix2YWx1ZTpmdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPXRoaXMsYT0hKDQ8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09cil8fHI7aWYodGhpcy5lbWl0KFwiYWRkZWRmaWxlXCIsdCksdGhpcy5lbWl0KFwiY29tcGxldGVcIix0KSxhKXt0LmRhdGFVUkw9ZSx0aGlzLmNyZWF0ZVRodW1ibmFpbEZyb21VcmwodCx0aGlzLm9wdGlvbnMudGh1bWJuYWlsV2lkdGgsdGhpcy5vcHRpb25zLnRodW1ibmFpbEhlaWdodCx0aGlzLm9wdGlvbnMucmVzaXplTWV0aG9kLHRoaXMub3B0aW9ucy5maXhPcmllbnRhdGlvbixmdW5jdGlvbihlKXtvLmVtaXQoXCJ0aHVtYm5haWxcIix0LGUpLG4mJm4oKX0saSl9ZWxzZSB0aGlzLmVtaXQoXCJ0aHVtYm5haWxcIix0LGUpLG4mJm4oKX19LHtrZXk6XCJjcmVhdGVUaHVtYm5haWxGcm9tVXJsXCIsdmFsdWU6ZnVuY3Rpb24obyxhLGwscyx0LHUsZSl7dmFyIGM9dGhpcyxkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7cmV0dXJuIGUmJihkLmNyb3NzT3JpZ2luPWUpLGQub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUoMSl9O3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBFWElGJiZudWxsIT09RVhJRiYmdCYmKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEVYSUYuZ2V0RGF0YShkLGZ1bmN0aW9uKCl7cmV0dXJuIGUoRVhJRi5nZXRUYWcodGhpcyxcIk9yaWVudGF0aW9uXCIpKX0pfSksZShmdW5jdGlvbihlKXtvLndpZHRoPWQud2lkdGgsby5oZWlnaHQ9ZC5oZWlnaHQ7dmFyIHQ9Yy5vcHRpb25zLnJlc2l6ZS5jYWxsKGMsbyxhLGwscyksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLGk9bi5nZXRDb250ZXh0KFwiMmRcIik7c3dpdGNoKG4ud2lkdGg9dC50cmdXaWR0aCxuLmhlaWdodD10LnRyZ0hlaWdodCw0PGUmJihuLndpZHRoPXQudHJnSGVpZ2h0LG4uaGVpZ2h0PXQudHJnV2lkdGgpLGUpe2Nhc2UgMjppLnRyYW5zbGF0ZShuLndpZHRoLDApLGkuc2NhbGUoLTEsMSk7YnJlYWs7Y2FzZSAzOmkudHJhbnNsYXRlKG4ud2lkdGgsbi5oZWlnaHQpLGkucm90YXRlKE1hdGguUEkpO2JyZWFrO2Nhc2UgNDppLnRyYW5zbGF0ZSgwLG4uaGVpZ2h0KSxpLnNjYWxlKDEsLTEpO2JyZWFrO2Nhc2UgNTppLnJvdGF0ZSguNSpNYXRoLlBJKSxpLnNjYWxlKDEsLTEpO2JyZWFrO2Nhc2UgNjppLnJvdGF0ZSguNSpNYXRoLlBJKSxpLnRyYW5zbGF0ZSgwLC1uLndpZHRoKTticmVhaztjYXNlIDc6aS5yb3RhdGUoLjUqTWF0aC5QSSksaS50cmFuc2xhdGUobi5oZWlnaHQsLW4ud2lkdGgpLGkuc2NhbGUoLTEsMSk7YnJlYWs7Y2FzZSA4Omkucm90YXRlKC0uNSpNYXRoLlBJKSxpLnRyYW5zbGF0ZSgtbi5oZWlnaHQsMCl9ZHJhd0ltYWdlSU9TRml4KGksZCxudWxsIT10LnNyY1g/dC5zcmNYOjAsbnVsbCE9dC5zcmNZP3Quc3JjWTowLHQuc3JjV2lkdGgsdC5zcmNIZWlnaHQsbnVsbCE9dC50cmdYP3QudHJnWDowLG51bGwhPXQudHJnWT90LnRyZ1k6MCx0LnRyZ1dpZHRoLHQudHJnSGVpZ2h0KTt2YXIgcj1uLnRvRGF0YVVSTChcImltYWdlL3BuZ1wiKTtpZihudWxsIT11KXJldHVybiB1KHIsbil9KX0sbnVsbCE9dSYmKGQub25lcnJvcj11KSxkLnNyYz1vLmRhdGFVUkx9fSx7a2V5OlwicHJvY2Vzc1F1ZXVlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMucGFyYWxsZWxVcGxvYWRzLHQ9dGhpcy5nZXRVcGxvYWRpbmdGaWxlcygpLmxlbmd0aCxuPXQ7aWYoIShlPD10KSl7dmFyIGk9dGhpcy5nZXRRdWV1ZWRGaWxlcygpO2lmKDA8aS5sZW5ndGgpe2lmKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSlyZXR1cm4gdGhpcy5wcm9jZXNzRmlsZXMoaS5zbGljZSgwLGUtdCkpO2Zvcig7bjxlOyl7aWYoIWkubGVuZ3RoKXJldHVybjt0aGlzLnByb2Nlc3NGaWxlKGkuc2hpZnQoKSksbisrfX19fX0se2tleTpcInByb2Nlc3NGaWxlXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHJvY2Vzc0ZpbGVzKFtlXSl9fSx7a2V5OlwicHJvY2Vzc0ZpbGVzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciByLG89ZVtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShyPW8ubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgYT1yLnZhbHVlO2EucHJvY2Vzc2luZz0hMCxhLnN0YXR1cz1DLlVQTE9BRElORyx0aGlzLmVtaXQoXCJwcm9jZXNzaW5nXCIsYSl9fWNhdGNoKGUpe249ITAsaT1lfWZpbmFsbHl7dHJ5e3R8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX1yZXR1cm4gdGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlJiZ0aGlzLmVtaXQoXCJwcm9jZXNzaW5nbXVsdGlwbGVcIixlKSx0aGlzLnVwbG9hZEZpbGVzKGUpfX0se2tleTpcIl9nZXRGaWxlc1dpdGhYaHJcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUueGhyPT09dH0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZX0pfX0se2tleTpcImNhbmNlbFVwbG9hZFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUuc3RhdHVzPT09Qy5VUExPQURJTkcpe3ZhciB0PXRoaXMuX2dldEZpbGVzV2l0aFhocihlLnhociksbj0hMCxpPSExLHI9dm9pZCAwO3RyeXtmb3IodmFyIG8sYT10W1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89YS5uZXh0KCkpLmRvbmUpO249ITApe28udmFsdWUuc3RhdHVzPUMuQ0FOQ0VMRUR9fWNhdGNoKGUpe2k9ITAscj1lfWZpbmFsbHl7dHJ5e258fG51bGw9PWEucmV0dXJufHxhLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyByfX12b2lkIDAhPT1lLnhociYmZS54aHIuYWJvcnQoKTt2YXIgbD0hMCxzPSExLHU9dm9pZCAwO3RyeXtmb3IodmFyIGMsZD10W1N5bWJvbC5pdGVyYXRvcl0oKTshKGw9KGM9ZC5uZXh0KCkpLmRvbmUpO2w9ITApe3ZhciBwPWMudmFsdWU7dGhpcy5lbWl0KFwiY2FuY2VsZWRcIixwKX19Y2F0Y2goZSl7cz0hMCx1PWV9ZmluYWxseXt0cnl7bHx8bnVsbD09ZC5yZXR1cm58fGQucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IHV9fXRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSYmdGhpcy5lbWl0KFwiY2FuY2VsZWRtdWx0aXBsZVwiLHQpfWVsc2UgZS5zdGF0dXMhPT1DLkFEREVEJiZlLnN0YXR1cyE9PUMuUVVFVUVEfHwoZS5zdGF0dXM9Qy5DQU5DRUxFRCx0aGlzLmVtaXQoXCJjYW5jZWxlZFwiLGUpLHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSYmdGhpcy5lbWl0KFwiY2FuY2VsZWRtdWx0aXBsZVwiLFtlXSkpO2lmKHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVlKXJldHVybiB0aGlzLnByb2Nlc3NRdWV1ZSgpfX0se2tleTpcInJlc29sdmVPcHRpb25cIix2YWx1ZTpmdW5jdGlvbihlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXJldHVybiBlO2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KDE8dD90LTE6MCksaT0xO2k8dDtpKyspbltpLTFdPWFyZ3VtZW50c1tpXTtyZXR1cm4gZS5hcHBseSh0aGlzLG4pfX0se2tleTpcInVwbG9hZEZpbGVcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGxvYWRGaWxlcyhbZV0pfX0se2tleTpcInVwbG9hZEZpbGVzXCIsdmFsdWU6ZnVuY3Rpb24ocyl7dmFyIHU9dGhpczt0aGlzLl90cmFuc2Zvcm1GaWxlcyhzLGZ1bmN0aW9uKGUpe2lmKHUub3B0aW9ucy5jaHVua2luZyl7dmFyIHQ9ZVswXTtzWzBdLnVwbG9hZC5jaHVua2VkPXUub3B0aW9ucy5jaHVua2luZyYmKHUub3B0aW9ucy5mb3JjZUNodW5raW5nfHx0LnNpemU+dS5vcHRpb25zLmNodW5rU2l6ZSksc1swXS51cGxvYWQudG90YWxDaHVua0NvdW50PU1hdGguY2VpbCh0LnNpemUvdS5vcHRpb25zLmNodW5rU2l6ZSl9aWYoc1swXS51cGxvYWQuY2h1bmtlZCl7dmFyIHI9c1swXSxvPWVbMF07ci51cGxvYWQuY2h1bmtzPVtdO3ZhciBpPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7dm9pZCAwIT09ci51cGxvYWQuY2h1bmtzW2VdOyllKys7aWYoIShlPj1yLnVwbG9hZC50b3RhbENodW5rQ291bnQpKXswO3ZhciB0PWUqdS5vcHRpb25zLmNodW5rU2l6ZSxuPU1hdGgubWluKHQrdS5vcHRpb25zLmNodW5rU2l6ZSxyLnNpemUpLGk9e25hbWU6dS5fZ2V0UGFyYW1OYW1lKDApLGRhdGE6by53ZWJraXRTbGljZT9vLndlYmtpdFNsaWNlKHQsbik6by5zbGljZSh0LG4pLGZpbGVuYW1lOnIudXBsb2FkLmZpbGVuYW1lLGNodW5rSW5kZXg6ZX07ci51cGxvYWQuY2h1bmtzW2VdPXtmaWxlOnIsaW5kZXg6ZSxkYXRhQmxvY2s6aSxzdGF0dXM6Qy5VUExPQURJTkcscHJvZ3Jlc3M6MCxyZXRyaWVzOjB9LHUuX3VwbG9hZERhdGEocyxbaV0pfX07aWYoci51cGxvYWQuZmluaXNoZWRDaHVua1VwbG9hZD1mdW5jdGlvbihlKXt2YXIgdD0hMDtlLnN0YXR1cz1DLlNVQ0NFU1MsZS5kYXRhQmxvY2s9bnVsbCxlLnhocj1udWxsO2Zvcih2YXIgbj0wO248ci51cGxvYWQudG90YWxDaHVua0NvdW50O24rKyl7aWYodm9pZCAwPT09ci51cGxvYWQuY2h1bmtzW25dKXJldHVybiBpKCk7ci51cGxvYWQuY2h1bmtzW25dLnN0YXR1cyE9PUMuU1VDQ0VTUyYmKHQ9ITEpfXQmJnUub3B0aW9ucy5jaHVua3NVcGxvYWRlZChyLGZ1bmN0aW9uKCl7dS5fZmluaXNoZWQocyxcIlwiLG51bGwpfSl9LHUub3B0aW9ucy5wYXJhbGxlbENodW5rVXBsb2Fkcylmb3IodmFyIG49MDtuPHIudXBsb2FkLnRvdGFsQ2h1bmtDb3VudDtuKyspaSgpO2Vsc2UgaSgpfWVsc2V7Zm9yKHZhciBhPVtdLGw9MDtsPHMubGVuZ3RoO2wrKylhW2xdPXtuYW1lOnUuX2dldFBhcmFtTmFtZShsKSxkYXRhOmVbbF0sZmlsZW5hbWU6c1tsXS51cGxvYWQuZmlsZW5hbWV9O3UuX3VwbG9hZERhdGEocyxhKX19KX19LHtrZXk6XCJfZ2V0Q2h1bmtcIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248ZS51cGxvYWQudG90YWxDaHVua0NvdW50O24rKylpZih2b2lkIDAhPT1lLnVwbG9hZC5jaHVua3Nbbl0mJmUudXBsb2FkLmNodW5rc1tuXS54aHI9PT10KXJldHVybiBlLnVwbG9hZC5jaHVua3Nbbl19fSx7a2V5OlwiX3VwbG9hZERhdGFcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1uZXcgWE1MSHR0cFJlcXVlc3Qscj0hMCxvPSExLGE9dm9pZCAwO3RyeXtmb3IodmFyIGwscz10W1N5bWJvbC5pdGVyYXRvcl0oKTshKHI9KGw9cy5uZXh0KCkpLmRvbmUpO3I9ITApe2wudmFsdWUueGhyPWl9fWNhdGNoKGUpe289ITAsYT1lfWZpbmFsbHl7dHJ5e3J8fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYobyl0aHJvdyBhfX10WzBdLnVwbG9hZC5jaHVua2VkJiYodFswXS51cGxvYWQuY2h1bmtzW2VbMF0uY2h1bmtJbmRleF0ueGhyPWkpO3ZhciB1PXRoaXMucmVzb2x2ZU9wdGlvbih0aGlzLm9wdGlvbnMubWV0aG9kLHQpLGM9dGhpcy5yZXNvbHZlT3B0aW9uKHRoaXMub3B0aW9ucy51cmwsdCk7aS5vcGVuKHUsYywhMCksaS50aW1lb3V0PXRoaXMucmVzb2x2ZU9wdGlvbih0aGlzLm9wdGlvbnMudGltZW91dCx0KSxpLndpdGhDcmVkZW50aWFscz0hIXRoaXMub3B0aW9ucy53aXRoQ3JlZGVudGlhbHMsaS5vbmxvYWQ9ZnVuY3Rpb24oZSl7bi5fZmluaXNoZWRVcGxvYWRpbmcodCxpLGUpfSxpLm9udGltZW91dD1mdW5jdGlvbigpe24uX2hhbmRsZVVwbG9hZEVycm9yKHQsaSxcIlJlcXVlc3QgdGltZWRvdXQgYWZ0ZXIgXCIuY29uY2F0KG4ub3B0aW9ucy50aW1lb3V0LFwiIHNlY29uZHNcIikpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtuLl9oYW5kbGVVcGxvYWRFcnJvcih0LGkpfSwobnVsbCE9aS51cGxvYWQ/aS51cGxvYWQ6aSkub25wcm9ncmVzcz1mdW5jdGlvbihlKXtyZXR1cm4gbi5fdXBkYXRlRmlsZXNVcGxvYWRQcm9ncmVzcyh0LGksZSl9O3ZhciBkPXtBY2NlcHQ6XCJhcHBsaWNhdGlvbi9qc29uXCIsXCJDYWNoZS1Db250cm9sXCI6XCJuby1jYWNoZVwiLFwiWC1SZXF1ZXN0ZWQtV2l0aFwiOlwiWE1MSHR0cFJlcXVlc3RcIn07Zm9yKHZhciBwIGluIHRoaXMub3B0aW9ucy5oZWFkZXJzJiZDLmV4dGVuZChkLHRoaXMub3B0aW9ucy5oZWFkZXJzKSxkKXt2YXIgaD1kW3BdO2gmJmkuc2V0UmVxdWVzdEhlYWRlcihwLGgpfXZhciBmPW5ldyBGb3JtRGF0YTtpZih0aGlzLm9wdGlvbnMucGFyYW1zKXt2YXIgdj10aGlzLm9wdGlvbnMucGFyYW1zO2Zvcih2YXIgbSBpblwiZnVuY3Rpb25cIj09dHlwZW9mIHYmJih2PXYuY2FsbCh0aGlzLHQsaSx0WzBdLnVwbG9hZC5jaHVua2VkP3RoaXMuX2dldENodW5rKHRbMF0saSk6bnVsbCkpLHYpe3ZhciB5PXZbbV07Zi5hcHBlbmQobSx5KX19dmFyIGc9ITAsYj0hMSxrPXZvaWQgMDt0cnl7Zm9yKHZhciB3LEY9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShnPSh3PUYubmV4dCgpKS5kb25lKTtnPSEwKXt2YXIgej13LnZhbHVlO3RoaXMuZW1pdChcInNlbmRpbmdcIix6LGksZil9fWNhdGNoKGUpe2I9ITAsaz1lfWZpbmFsbHl7dHJ5e2d8fG51bGw9PUYucmV0dXJufHxGLnJldHVybigpfWZpbmFsbHl7aWYoYil0aHJvdyBrfX10aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUmJnRoaXMuZW1pdChcInNlbmRpbmdtdWx0aXBsZVwiLHQsaSxmKSx0aGlzLl9hZGRGb3JtRWxlbWVudERhdGEoZik7Zm9yKHZhciB4PTA7eDxlLmxlbmd0aDt4Kyspe3ZhciBFPWVbeF07Zi5hcHBlbmQoRS5uYW1lLEUuZGF0YSxFLmZpbGVuYW1lKX10aGlzLnN1Ym1pdFJlcXVlc3QoaSxmLHQpfX0se2tleTpcIl90cmFuc2Zvcm1GaWxlc1wiLHZhbHVlOmZ1bmN0aW9uKG4saSl7Zm9yKHZhciBlPXRoaXMscj1bXSxvPTAsdD1mdW5jdGlvbih0KXtlLm9wdGlvbnMudHJhbnNmb3JtRmlsZS5jYWxsKGUsblt0XSxmdW5jdGlvbihlKXtyW3RdPWUsKytvPT09bi5sZW5ndGgmJmkocil9KX0sYT0wO2E8bi5sZW5ndGg7YSsrKXQoYSl9fSx7a2V5OlwiX2FkZEZvcm1FbGVtZW50RGF0YVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKFwiRk9STVwiPT09dGhpcy5lbGVtZW50LnRhZ05hbWUpe3ZhciB0PSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPXRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGJ1dHRvblwiKVtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShyPW8ubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgYT1yLnZhbHVlLGw9YS5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpLHM9YS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO2lmKHM9cyYmcy50b0xvd2VyQ2FzZSgpLG51bGwhPWwpaWYoXCJTRUxFQ1RcIj09PWEudGFnTmFtZSYmYS5oYXNBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiKSl7dmFyIHU9ITAsYz0hMSxkPXZvaWQgMDt0cnl7Zm9yKHZhciBwLGg9YS5vcHRpb25zW1N5bWJvbC5pdGVyYXRvcl0oKTshKHU9KHA9aC5uZXh0KCkpLmRvbmUpO3U9ITApe3ZhciBmPXAudmFsdWU7Zi5zZWxlY3RlZCYmZS5hcHBlbmQobCxmLnZhbHVlKX19Y2F0Y2goZSl7Yz0hMCxkPWV9ZmluYWxseXt0cnl7dXx8bnVsbD09aC5yZXR1cm58fGgucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGR9fX1lbHNlKCFzfHxcImNoZWNrYm94XCIhPT1zJiZcInJhZGlvXCIhPT1zfHxhLmNoZWNrZWQpJiZlLmFwcGVuZChsLGEudmFsdWUpfX1jYXRjaChlKXtuPSEwLGk9ZX1maW5hbGx5e3RyeXt0fHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgaX19fX19LHtrZXk6XCJfdXBkYXRlRmlsZXNVcGxvYWRQcm9ncmVzc1wiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaTtpZih2b2lkIDAhPT1uKXtpZihpPTEwMCpuLmxvYWRlZC9uLnRvdGFsLGVbMF0udXBsb2FkLmNodW5rZWQpe3ZhciByPWVbMF0sbz10aGlzLl9nZXRDaHVuayhyLHQpO28ucHJvZ3Jlc3M9aSxvLnRvdGFsPW4udG90YWwsby5ieXRlc1NlbnQ9bi5sb2FkZWQ7ci51cGxvYWQucHJvZ3Jlc3M9MCxyLnVwbG9hZC50b3RhbD0wO2Zvcih2YXIgYT1yLnVwbG9hZC5ieXRlc1NlbnQ9MDthPHIudXBsb2FkLnRvdGFsQ2h1bmtDb3VudDthKyspdm9pZCAwIT09ci51cGxvYWQuY2h1bmtzW2FdJiZ2b2lkIDAhPT1yLnVwbG9hZC5jaHVua3NbYV0ucHJvZ3Jlc3MmJihyLnVwbG9hZC5wcm9ncmVzcys9ci51cGxvYWQuY2h1bmtzW2FdLnByb2dyZXNzLHIudXBsb2FkLnRvdGFsKz1yLnVwbG9hZC5jaHVua3NbYV0udG90YWwsci51cGxvYWQuYnl0ZXNTZW50Kz1yLnVwbG9hZC5jaHVua3NbYV0uYnl0ZXNTZW50KTtyLnVwbG9hZC5wcm9ncmVzcz1yLnVwbG9hZC5wcm9ncmVzcy9yLnVwbG9hZC50b3RhbENodW5rQ291bnR9ZWxzZXt2YXIgbD0hMCxzPSExLHU9dm9pZCAwO3RyeXtmb3IodmFyIGMsZD1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKGw9KGM9ZC5uZXh0KCkpLmRvbmUpO2w9ITApe3ZhciBwPWMudmFsdWU7cC51cGxvYWQucHJvZ3Jlc3M9aSxwLnVwbG9hZC50b3RhbD1uLnRvdGFsLHAudXBsb2FkLmJ5dGVzU2VudD1uLmxvYWRlZH19Y2F0Y2goZSl7cz0hMCx1PWV9ZmluYWxseXt0cnl7bHx8bnVsbD09ZC5yZXR1cm58fGQucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IHV9fX12YXIgaD0hMCxmPSExLHY9dm9pZCAwO3RyeXtmb3IodmFyIG0seT1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKGg9KG09eS5uZXh0KCkpLmRvbmUpO2g9ITApe3ZhciBnPW0udmFsdWU7dGhpcy5lbWl0KFwidXBsb2FkcHJvZ3Jlc3NcIixnLGcudXBsb2FkLnByb2dyZXNzLGcudXBsb2FkLmJ5dGVzU2VudCl9fWNhdGNoKGUpe2Y9ITAsdj1lfWZpbmFsbHl7dHJ5e2h8fG51bGw9PXkucmV0dXJufHx5LnJldHVybigpfWZpbmFsbHl7aWYoZil0aHJvdyB2fX19ZWxzZXt2YXIgYj0hMCxrPSEwLHc9IShpPTEwMCksRj12b2lkIDA7dHJ5e2Zvcih2YXIgeix4PWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEoaz0oej14Lm5leHQoKSkuZG9uZSk7az0hMCl7dmFyIEU9ei52YWx1ZTsxMDA9PT1FLnVwbG9hZC5wcm9ncmVzcyYmRS51cGxvYWQuYnl0ZXNTZW50PT09RS51cGxvYWQudG90YWx8fChiPSExKSxFLnVwbG9hZC5wcm9ncmVzcz1pLEUudXBsb2FkLmJ5dGVzU2VudD1FLnVwbG9hZC50b3RhbH19Y2F0Y2goZSl7dz0hMCxGPWV9ZmluYWxseXt0cnl7a3x8bnVsbD09eC5yZXR1cm58fHgucmV0dXJuKCl9ZmluYWxseXtpZih3KXRocm93IEZ9fWlmKGIpcmV0dXJuO3ZhciBDPSEwLF89ITEsUz12b2lkIDA7dHJ5e2Zvcih2YXIgRCxUPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEoQz0oRD1ULm5leHQoKSkuZG9uZSk7Qz0hMCl7dmFyIEw9RC52YWx1ZTt0aGlzLmVtaXQoXCJ1cGxvYWRwcm9ncmVzc1wiLEwsaSxMLnVwbG9hZC5ieXRlc1NlbnQpfX1jYXRjaChlKXtfPSEwLFM9ZX1maW5hbGx5e3RyeXtDfHxudWxsPT1ULnJldHVybnx8VC5yZXR1cm4oKX1maW5hbGx5e2lmKF8pdGhyb3cgU319fX19LHtrZXk6XCJfZmluaXNoZWRVcGxvYWRpbmdcIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIGk7aWYoZVswXS5zdGF0dXMhPT1DLkNBTkNFTEVEJiY0PT09dC5yZWFkeVN0YXRlKXtpZihcImFycmF5YnVmZmVyXCIhPT10LnJlc3BvbnNlVHlwZSYmXCJibG9iXCIhPT10LnJlc3BvbnNlVHlwZSYmKGk9dC5yZXNwb25zZVRleHQsdC5nZXRSZXNwb25zZUhlYWRlcihcImNvbnRlbnQtdHlwZVwiKSYmfnQuZ2V0UmVzcG9uc2VIZWFkZXIoXCJjb250ZW50LXR5cGVcIikuaW5kZXhPZihcImFwcGxpY2F0aW9uL2pzb25cIikpKXRyeXtpPUpTT04ucGFyc2UoaSl9Y2F0Y2goZSl7bj1lLGk9XCJJbnZhbGlkIEpTT04gcmVzcG9uc2UgZnJvbSBzZXJ2ZXIuXCJ9dGhpcy5fdXBkYXRlRmlsZXNVcGxvYWRQcm9ncmVzcyhlKSwyMDA8PXQuc3RhdHVzJiZ0LnN0YXR1czwzMDA/ZVswXS51cGxvYWQuY2h1bmtlZD9lWzBdLnVwbG9hZC5maW5pc2hlZENodW5rVXBsb2FkKHRoaXMuX2dldENodW5rKGVbMF0sdCkpOnRoaXMuX2ZpbmlzaGVkKGUsaSxuKTp0aGlzLl9oYW5kbGVVcGxvYWRFcnJvcihlLHQsaSl9fX0se2tleTpcIl9oYW5kbGVVcGxvYWRFcnJvclwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtpZihlWzBdLnN0YXR1cyE9PUMuQ0FOQ0VMRUQpe2lmKGVbMF0udXBsb2FkLmNodW5rZWQmJnRoaXMub3B0aW9ucy5yZXRyeUNodW5rcyl7dmFyIGk9dGhpcy5fZ2V0Q2h1bmsoZVswXSx0KTtpZihpLnJldHJpZXMrKzx0aGlzLm9wdGlvbnMucmV0cnlDaHVua3NMaW1pdClyZXR1cm4gdm9pZCB0aGlzLl91cGxvYWREYXRhKGUsW2kuZGF0YUJsb2NrXSk7Y29uc29sZS53YXJuKFwiUmV0cmllZCB0aGlzIGNodW5rIHRvbyBvZnRlbi4gR2l2aW5nIHVwLlwiKX10aGlzLl9lcnJvclByb2Nlc3NpbmcoZSxufHx0aGlzLm9wdGlvbnMuZGljdFJlc3BvbnNlRXJyb3IucmVwbGFjZShcInt7c3RhdHVzQ29kZX19XCIsdC5zdGF0dXMpLHQpfX19LHtrZXk6XCJzdWJtaXRSZXF1ZXN0XCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlLnNlbmQodCl9fSx7a2V5OlwiX2ZpbmlzaGVkXCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPSEwLHI9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgYSxsPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEoaT0oYT1sLm5leHQoKSkuZG9uZSk7aT0hMCl7dmFyIHM9YS52YWx1ZTtzLnN0YXR1cz1DLlNVQ0NFU1MsdGhpcy5lbWl0KFwic3VjY2Vzc1wiLHMsdCxuKSx0aGlzLmVtaXQoXCJjb21wbGV0ZVwiLHMpfX1jYXRjaChlKXtyPSEwLG89ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1sLnJldHVybnx8bC5yZXR1cm4oKX1maW5hbGx5e2lmKHIpdGhyb3cgb319aWYodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlJiYodGhpcy5lbWl0KFwic3VjY2Vzc211bHRpcGxlXCIsZSx0LG4pLHRoaXMuZW1pdChcImNvbXBsZXRlbXVsdGlwbGVcIixlKSksdGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNzUXVldWUpcmV0dXJuIHRoaXMucHJvY2Vzc1F1ZXVlKCl9fSx7a2V5OlwiX2Vycm9yUHJvY2Vzc2luZ1wiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT0hMCxyPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIGEsbD1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKGk9KGE9bC5uZXh0KCkpLmRvbmUpO2k9ITApe3ZhciBzPWEudmFsdWU7cy5zdGF0dXM9Qy5FUlJPUix0aGlzLmVtaXQoXCJlcnJvclwiLHMsdCxuKSx0aGlzLmVtaXQoXCJjb21wbGV0ZVwiLHMpfX1jYXRjaChlKXtyPSEwLG89ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1sLnJldHVybnx8bC5yZXR1cm4oKX1maW5hbGx5e2lmKHIpdGhyb3cgb319aWYodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlJiYodGhpcy5lbWl0KFwiZXJyb3JtdWx0aXBsZVwiLGUsdCxuKSx0aGlzLmVtaXQoXCJjb21wbGV0ZW11bHRpcGxlXCIsZSkpLHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVlKXJldHVybiB0aGlzLnByb2Nlc3NRdWV1ZSgpfX1dLFt7a2V5OlwidXVpZHY0XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5cInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UoL1t4eV0vZyxmdW5jdGlvbihlKXt2YXIgdD0xNipNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKFwieFwiPT09ZT90OjMmdHw4KS50b1N0cmluZygxNil9KX19XSksQ30oKTtEcm9wem9uZS5pbml0Q2xhc3MoKSxEcm9wem9uZS52ZXJzaW9uPVwiNS43LjBcIixEcm9wem9uZS5vcHRpb25zPXt9LERyb3B6b25lLm9wdGlvbnNGb3JFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZShcImlkXCIpP0Ryb3B6b25lLm9wdGlvbnNbY2FtZWxpemUoZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSldOnZvaWQgMH0sRHJvcHpvbmUuaW5zdGFuY2VzPVtdLERyb3B6b25lLmZvckVsZW1lbnQ9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSkpLG51bGw9PShudWxsIT1lP2UuZHJvcHpvbmU6dm9pZCAwKSl0aHJvdyBuZXcgRXJyb3IoXCJObyBEcm9wem9uZSBmb3VuZCBmb3IgZ2l2ZW4gZWxlbWVudC4gVGhpcyBpcyBwcm9iYWJseSBiZWNhdXNlIHlvdSdyZSB0cnlpbmcgdG8gYWNjZXNzIGl0IGJlZm9yZSBEcm9wem9uZSBoYWQgdGhlIHRpbWUgdG8gaW5pdGlhbGl6ZS4gVXNlIHRoZSBgaW5pdGAgb3B0aW9uIHRvIHNldHVwIGFueSBhZGRpdGlvbmFsIG9ic2VydmVycyBvbiB5b3VyIERyb3B6b25lLlwiKTtyZXR1cm4gZS5kcm9wem9uZX0sRHJvcHpvbmUuYXV0b0Rpc2NvdmVyPSEwLERyb3B6b25lLmRpc2NvdmVyPWZ1bmN0aW9uKCl7dmFyIHM7aWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbClzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZHJvcHpvbmVcIik7ZWxzZXtzPVtdO3ZhciBlPWZ1bmN0aW9uKGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPVtdLHQ9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciByLG89bFtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShyPW8ubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgYT1yLnZhbHVlOy8oXnwgKWRyb3B6b25lKCR8ICkvLnRlc3QoYS5jbGFzc05hbWUpP2UucHVzaChzLnB1c2goYSkpOmUucHVzaCh2b2lkIDApfX1jYXRjaChlKXtuPSEwLGk9ZX1maW5hbGx5e3RyeXt0fHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgaX19cmV0dXJuIGV9KCl9O2UoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkaXZcIikpLGUoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJmb3JtXCIpKX1yZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1bXSx0PSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0ocj1vLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGE9ci52YWx1ZTshMSE9PURyb3B6b25lLm9wdGlvbnNGb3JFbGVtZW50KGEpP2UucHVzaChuZXcgRHJvcHpvbmUoYSkpOmUucHVzaCh2b2lkIDApfX1jYXRjaChlKXtuPSEwLGk9ZX1maW5hbGx5e3RyeXt0fHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgaX19cmV0dXJuIGV9KCl9LERyb3B6b25lLmJsYWNrbGlzdGVkQnJvd3NlcnM9Wy9vcGVyYS4qKE1hY2ludG9zaHxXaW5kb3dzIFBob25lKS4qdmVyc2lvblxcLzEyL2ldLERyb3B6b25lLmlzQnJvd3NlclN1cHBvcnRlZD1mdW5jdGlvbigpe3ZhciBlPSEwO2lmKHdpbmRvdy5GaWxlJiZ3aW5kb3cuRmlsZVJlYWRlciYmd2luZG93LkZpbGVMaXN0JiZ3aW5kb3cuQmxvYiYmd2luZG93LkZvcm1EYXRhJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKWlmKFwiY2xhc3NMaXN0XCJpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKSl7dmFyIHQ9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciByLG89RHJvcHpvbmUuYmxhY2tsaXN0ZWRCcm93c2Vyc1tTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShyPW8ubmV4dCgpKS5kb25lKTt0PSEwKXtyLnZhbHVlLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJihlPSExKX19Y2F0Y2goZSl7bj0hMCxpPWV9ZmluYWxseXt0cnl7dHx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGl9fX1lbHNlIGU9ITE7ZWxzZSBlPSExO3JldHVybiBlfSxEcm9wem9uZS5kYXRhVVJJdG9CbG9iPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hdG9iKGUuc3BsaXQoXCIsXCIpWzFdKSxuPWUuc3BsaXQoXCIsXCIpWzBdLnNwbGl0KFwiOlwiKVsxXS5zcGxpdChcIjtcIilbMF0saT1uZXcgQXJyYXlCdWZmZXIodC5sZW5ndGgpLHI9bmV3IFVpbnQ4QXJyYXkoaSksbz0wLGE9dC5sZW5ndGgsbD0wPD1hO2w/bzw9YTphPD1vO2w/bysrOm8tLSlyW29dPXQuY2hhckNvZGVBdChvKTtyZXR1cm4gbmV3IEJsb2IoW2ldLHt0eXBlOm59KX07dmFyIHdpdGhvdXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT10fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlfSl9LGNhbWVsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXC1fXShcXHcpL2csZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCl9KX07RHJvcHpvbmUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiB0LmlubmVySFRNTD1lLHQuY2hpbGROb2Rlc1swXX0sRHJvcHpvbmUuZWxlbWVudEluc2lkZT1mdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiEwO2Zvcig7ZT1lLnBhcmVudE5vZGU7KWlmKGU9PT10KXJldHVybiEwO3JldHVybiExfSxEcm9wem9uZS5nZXRFbGVtZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG47aWYoXCJzdHJpbmdcIj09dHlwZW9mIGU/bj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpOm51bGwhPWUubm9kZVR5cGUmJihuPWUpLG51bGw9PW4pdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBgXCIuY29uY2F0KHQsXCJgIG9wdGlvbiBwcm92aWRlZC4gUGxlYXNlIHByb3ZpZGUgYSBDU1Mgc2VsZWN0b3Igb3IgYSBwbGFpbiBIVE1MIGVsZW1lbnQuXCIpKTtyZXR1cm4gbn0sRHJvcHpvbmUuZ2V0RWxlbWVudHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixpO2lmKGUgaW5zdGFuY2VvZiBBcnJheSl7aT1bXTt0cnl7dmFyIHI9ITAsbz0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBsLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShyPShsPXMubmV4dCgpKS5kb25lKTtyPSEwKW49bC52YWx1ZSxpLnB1c2godGhpcy5nZXRFbGVtZW50KG4sdCkpfWNhdGNoKGUpe289ITAsYT1lfWZpbmFsbHl7dHJ5e3J8fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYobyl0aHJvdyBhfX19Y2F0Y2goZSl7aT1udWxsfX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgdT0hMCxjPSEoaT1bXSksZD12b2lkIDA7dHJ5e2Zvcih2YXIgcCxoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSlbU3ltYm9sLml0ZXJhdG9yXSgpOyEodT0ocD1oLm5leHQoKSkuZG9uZSk7dT0hMCluPXAudmFsdWUsaS5wdXNoKG4pfWNhdGNoKGUpe2M9ITAsZD1lfWZpbmFsbHl7dHJ5e3V8fG51bGw9PWgucmV0dXJufHxoLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBkfX19ZWxzZSBudWxsIT1lLm5vZGVUeXBlJiYoaT1bZV0pO2lmKG51bGw9PWl8fCFpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGBcIi5jb25jYXQodCxcImAgb3B0aW9uIHByb3ZpZGVkLiBQbGVhc2UgcHJvdmlkZSBhIENTUyBzZWxlY3RvciwgYSBwbGFpbiBIVE1MIGVsZW1lbnQgb3IgYSBsaXN0IG9mIHRob3NlLlwiKSk7cmV0dXJuIGl9LERyb3B6b25lLmNvbmZpcm09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB3aW5kb3cuY29uZmlybShlKT90KCk6bnVsbCE9bj9uKCk6dm9pZCAwfSxEcm9wem9uZS5pc1ZhbGlkRmlsZT1mdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybiEwO3Q9dC5zcGxpdChcIixcIik7dmFyIG49ZS50eXBlLGk9bi5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpLHI9ITAsbz0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBsLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShyPShsPXMubmV4dCgpKS5kb25lKTtyPSEwKXt2YXIgdT1sLnZhbHVlO2lmKFwiLlwiPT09KHU9dS50cmltKCkpLmNoYXJBdCgwKSl7aWYoLTEhPT1lLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHUudG9Mb3dlckNhc2UoKSxlLm5hbWUubGVuZ3RoLXUubGVuZ3RoKSlyZXR1cm4hMH1lbHNlIGlmKC9cXC9cXCokLy50ZXN0KHUpKXtpZihpPT09dS5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpKXJldHVybiEwfWVsc2UgaWYobj09PXUpcmV0dXJuITB9fWNhdGNoKGUpe289ITAsYT1lfWZpbmFsbHl7dHJ5e3J8fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYobyl0aHJvdyBhfX1yZXR1cm4hMX0sXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGpRdWVyeSYmbnVsbCE9PWpRdWVyeSYmKGpRdWVyeS5mbi5kcm9wem9uZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEcm9wem9uZSh0aGlzLGUpfSl9KSxcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlJiZudWxsIT09bW9kdWxlP21vZHVsZS5leHBvcnRzPURyb3B6b25lOndpbmRvdy5Ecm9wem9uZT1Ecm9wem9uZSxEcm9wem9uZS5BRERFRD1cImFkZGVkXCIsRHJvcHpvbmUuUVVFVUVEPVwicXVldWVkXCIsRHJvcHpvbmUuQUNDRVBURUQ9RHJvcHpvbmUuUVVFVUVELERyb3B6b25lLlVQTE9BRElORz1cInVwbG9hZGluZ1wiLERyb3B6b25lLlBST0NFU1NJTkc9RHJvcHpvbmUuVVBMT0FESU5HLERyb3B6b25lLkNBTkNFTEVEPVwiY2FuY2VsZWRcIixEcm9wem9uZS5FUlJPUj1cImVycm9yXCIsRHJvcHpvbmUuU1VDQ0VTUz1cInN1Y2Nlc3NcIjt2YXIgZGV0ZWN0VmVydGljYWxTcXVhc2g9ZnVuY3Rpb24oZSl7ZS5uYXR1cmFsV2lkdGg7dmFyIHQ9ZS5uYXR1cmFsSGVpZ2h0LG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtuLndpZHRoPTEsbi5oZWlnaHQ9dDt2YXIgaT1uLmdldENvbnRleHQoXCIyZFwiKTtpLmRyYXdJbWFnZShlLDAsMCk7Zm9yKHZhciByPWkuZ2V0SW1hZ2VEYXRhKDEsMCwxLHQpLmRhdGEsbz0wLGE9dCxsPXQ7bzxsOyl7MD09PXJbNCoobC0xKSszXT9hPWw6bz1sLGw9YStvPj4xfXZhciBzPWwvdDtyZXR1cm4gMD09cz8xOnN9LGRyYXdJbWFnZUlPU0ZpeD1mdW5jdGlvbihlLHQsbixpLHIsbyxhLGwscyx1KXt2YXIgYz1kZXRlY3RWZXJ0aWNhbFNxdWFzaCh0KTtyZXR1cm4gZS5kcmF3SW1hZ2UodCxuLGkscixvLGEsbCxzLHUvYyl9LEV4aWZSZXN0b3JlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe19jbGFzc0NhbGxDaGVjayh0aGlzLGUpfXJldHVybiBfY3JlYXRlQ2xhc3MoZSxudWxsLFt7a2V5OlwiaW5pdENsYXNzXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLktFWV9TVFI9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwifX0se2tleTpcImVuY29kZTY0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVwiXCIsbj12b2lkIDAsaT12b2lkIDAscj1cIlwiLG89dm9pZCAwLGE9dm9pZCAwLGw9dm9pZCAwLHM9XCJcIix1PTA7bz0obj1lW3UrK10pPj4yLGE9KDMmbik8PDR8KGk9ZVt1KytdKT4+NCxsPSgxNSZpKTw8Mnwocj1lW3UrK10pPj42LHM9NjMmcixpc05hTihpKT9sPXM9NjQ6aXNOYU4ocikmJihzPTY0KSx0PXQrdGhpcy5LRVlfU1RSLmNoYXJBdChvKSt0aGlzLktFWV9TVFIuY2hhckF0KGEpK3RoaXMuS0VZX1NUUi5jaGFyQXQobCkrdGhpcy5LRVlfU1RSLmNoYXJBdChzKSxuPWk9cj1cIlwiLG89YT1sPXM9XCJcIix1PGUubGVuZ3RoOyk7cmV0dXJuIHR9fSx7a2V5OlwicmVzdG9yZVwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIWUubWF0Y2goXCJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LFwiKSlyZXR1cm4gdDt2YXIgbj10aGlzLmRlY29kZTY0KGUucmVwbGFjZShcImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsXCIsXCJcIikpLGk9dGhpcy5zbGljZTJTZWdtZW50cyhuKSxyPXRoaXMuZXhpZk1hbmlwdWxhdGlvbih0LGkpO3JldHVyblwiZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCxcIi5jb25jYXQodGhpcy5lbmNvZGU2NChyKSl9fSx7a2V5OlwiZXhpZk1hbmlwdWxhdGlvblwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRFeGlmQXJyYXkodCksaT10aGlzLmluc2VydEV4aWYoZSxuKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaSl9fSx7a2V5OlwiZ2V0RXhpZkFycmF5XCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXZvaWQgMCxuPTA7bjxlLmxlbmd0aDspe2lmKDI1NT09PSh0PWVbbl0pWzBdJjIyNT09PXRbMV0pcmV0dXJuIHQ7bisrfXJldHVybltdfX0se2tleTpcImluc2VydEV4aWZcIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWUucmVwbGFjZShcImRhdGE6aW1hZ2UvanBlZztiYXNlNjQsXCIsXCJcIiksaT10aGlzLmRlY29kZTY0KG4pLHI9aS5pbmRleE9mKDI1NSwzKSxvPWkuc2xpY2UoMCxyKSxhPWkuc2xpY2UociksbD1vO3JldHVybiBsPShsPWwuY29uY2F0KHQpKS5jb25jYXQoYSl9fSx7a2V5Olwic2xpY2UyU2VnbWVudHNcIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPVtdOzspe2lmKDI1NT09PWVbdF0mMjE4PT09ZVt0KzFdKWJyZWFrO2lmKDI1NT09PWVbdF0mMjE2PT09ZVt0KzFdKXQrPTI7ZWxzZXt2YXIgaT10KygyNTYqZVt0KzJdK2VbdCszXSkrMixyPWUuc2xpY2UodCxpKTtuLnB1c2gociksdD1pfWlmKHQ+ZS5sZW5ndGgpYnJlYWt9cmV0dXJuIG59fSx7a2V5OlwiZGVjb2RlNjRcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD12b2lkIDAsbj12b2lkIDAsaT1cIlwiLHI9dm9pZCAwLG89dm9pZCAwLGE9XCJcIixsPTAscz1bXTtmb3IoL1teQS1aYS16MC05XFwrXFwvXFw9XS9nLmV4ZWMoZSkmJmNvbnNvbGUud2FybihcIlRoZXJlIHdlcmUgaW52YWxpZCBiYXNlNjQgY2hhcmFjdGVycyBpbiB0aGUgaW5wdXQgdGV4dC5cXG5WYWxpZCBiYXNlNjQgY2hhcmFjdGVycyBhcmUgQS1aLCBhLXosIDAtOSwgJysnLCAnLycsYW5kICc9J1xcbkV4cGVjdCBlcnJvcnMgaW4gZGVjb2RpbmcuXCIpLGU9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOVxcK1xcL1xcPV0vZyxcIlwiKTt0PXRoaXMuS0VZX1NUUi5pbmRleE9mKGUuY2hhckF0KGwrKykpPDwyfChyPXRoaXMuS0VZX1NUUi5pbmRleE9mKGUuY2hhckF0KGwrKykpKT4+NCxuPSgxNSZyKTw8NHwobz10aGlzLktFWV9TVFIuaW5kZXhPZihlLmNoYXJBdChsKyspKSk+PjIsaT0oMyZvKTw8NnwoYT10aGlzLktFWV9TVFIuaW5kZXhPZihlLmNoYXJBdChsKyspKSkscy5wdXNoKHQpLDY0IT09byYmcy5wdXNoKG4pLDY0IT09YSYmcy5wdXNoKGkpLHQ9bj1pPVwiXCIscj1vPWE9XCJcIixsPGUubGVuZ3RoOyk7cmV0dXJuIHN9fV0pLGV9KCk7RXhpZlJlc3RvcmUuaW5pdENsYXNzKCk7dmFyIGNvbnRlbnRMb2FkZWQ9ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBpKGUpe2lmKFwicmVhZHlzdGF0ZWNoYW5nZVwiIT09ZS50eXBlfHxcImNvbXBsZXRlXCI9PT1vLnJlYWR5U3RhdGUpcmV0dXJuKFwibG9hZFwiPT09ZS50eXBlP3Q6bylbc10odStlLnR5cGUsaSwhMSksIXImJihyPSEwKT9uLmNhbGwodCxlLnR5cGV8fGUpOnZvaWQgMH12YXIgcj0hMSxlPSEwLG89dC5kb2N1bWVudCxhPW8uZG9jdW1lbnRFbGVtZW50LGw9by5hZGRFdmVudExpc3RlbmVyP1wiYWRkRXZlbnRMaXN0ZW5lclwiOlwiYXR0YWNoRXZlbnRcIixzPW8uYWRkRXZlbnRMaXN0ZW5lcj9cInJlbW92ZUV2ZW50TGlzdGVuZXJcIjpcImRldGFjaEV2ZW50XCIsdT1vLmFkZEV2ZW50TGlzdGVuZXI/XCJcIjpcIm9uXCI7aWYoXCJjb21wbGV0ZVwiIT09by5yZWFkeVN0YXRlKXtpZihvLmNyZWF0ZUV2ZW50T2JqZWN0JiZhLmRvU2Nyb2xsKXt0cnl7ZT0hdC5mcmFtZUVsZW1lbnR9Y2F0Y2goZSl7fWUmJiFmdW5jdGlvbiB0KCl7dHJ5e2EuZG9TY3JvbGwoXCJsZWZ0XCIpfWNhdGNoKGUpe3JldHVybiB2b2lkIHNldFRpbWVvdXQodCw1MCl9cmV0dXJuIGkoXCJwb2xsXCIpfSgpfXJldHVybiBvW2xdKHUrXCJET01Db250ZW50TG9hZGVkXCIsaSwhMSksb1tsXSh1K1wicmVhZHlzdGF0ZWNoYW5nZVwiLGksITEpLHRbbF0odStcImxvYWRcIixpLCExKX19O2Z1bmN0aW9uIF9fZ3VhcmRfXyhlLHQpe3JldHVybiBudWxsIT1lP3QoZSk6dm9pZCAwfWZ1bmN0aW9uIF9fZ3VhcmRNZXRob2RfXyhlLHQsbil7cmV0dXJuIG51bGwhPWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVbdF0/bihlLHQpOnZvaWQgMH1Ecm9wem9uZS5fYXV0b0Rpc2NvdmVyRnVuY3Rpb249ZnVuY3Rpb24oKXtpZihEcm9wem9uZS5hdXRvRGlzY292ZXIpcmV0dXJuIERyb3B6b25lLmRpc2NvdmVyKCl9LGNvbnRlbnRMb2FkZWQod2luZG93LERyb3B6b25lLl9hdXRvRGlzY292ZXJGdW5jdGlvbik7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==