| Server IP : 82.208.35.60 / Your IP : 216.73.216.89 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/ |
Upload File : |
/*! For license information please see cms_page.bundle.js.LICENSE.txt */
(()=>{var e={4110:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=window.$;t.default=function(e,t){n.post(e).then((function(){return window.location.assign(t)}))}},61353:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(99663)),o=i(n(22600));function i(e){return e&&e.__esModule?e:{default:e}}var a=window.$,s=function(){function e(t){(0,r.default)(this,e),this.selector=".ps-sortable-column",this.columns=a(t).find(this.selector)}return(0,o.default)(e,[{key:"attach",value:function(){var e=this;this.columns.on("click",(function(t){var n=a(t.delegateTarget);e.sortByColumn(n,e.getToggledSortDirection(n))}))}},{key:"sortBy",value:function(e,t){var n=this.columns.is('[data-sort-col-name="'+e+'"]');if(!n)throw new Error('Cannot sort by "'+e+'": invalid column');this.sortByColumn(n,t)}},{key:"sortByColumn",value:function(e,t){window.location=this.getUrl(e.data("sortColName"),"desc"===t?"desc":"asc",e.data("sortPrefix"))}},{key:"getToggledSortDirection",value:function(e){return"asc"===e.data("sortDirection")?"desc":"asc"}},{key:"getUrl",value:function(e,t,n){var r=new URL(window.location.href),o=r.searchParams;return n?(o.set(n+"[orderBy]",e),o.set(n+"[sortOrder]",t)):(o.set("orderBy",e),o.set("sortOrder",t)),r.toString()}}]),e}();t.default=s},76544:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventEmitter=void 0;var r,o=(r=n(17187))&&r.__esModule?r:{default:r},i=t.EventEmitter=new o.default;t.default=i},19078:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(99663)),o=i(n(22600));function i(e){return e&&e.__esModule?e:{default:e}}var a=window.$,s=function(){function e(t){var n=this;return(0,r.default)(this,e),this.$container=a(t),this.$container.on("click",".js-input-wrapper",(function(e){var t=a(e.currentTarget);n.toggleChildTree(t)})),this.$container.on("click",".js-toggle-choice-tree-action",(function(e){var t=a(e.currentTarget);n.toggleTree(t)})),{enableAutoCheckChildren:function(){return n.enableAutoCheckChildren()},enableAllInputs:function(){return n.enableAllInputs()},disableAllInputs:function(){return n.disableAllInputs()}}}return(0,o.default)(e,[{key:"enableAutoCheckChildren",value:function(){this.$container.on("change",'input[type="checkbox"]',(function(e){var t=a(e.currentTarget);t.closest("li").find('ul input[type="checkbox"]').prop("checked",t.is(":checked"))}))}},{key:"enableAllInputs",value:function(){this.$container.find("input").removeAttr("disabled")}},{key:"disableAllInputs",value:function(){this.$container.find("input").attr("disabled","disabled")}},{key:"toggleChildTree",value:function(e){var t=e.closest("li");t.hasClass("expanded")?t.removeClass("expanded").addClass("collapsed"):t.hasClass("collapsed")&&t.removeClass("collapsed").addClass("expanded")}},{key:"toggleTree",value:function(e){var t=e.closest(".js-choice-tree-container"),n=e.data("action"),r={addClass:{expand:"expanded",collapse:"collapsed"},removeClass:{expand:"collapsed",collapse:"expanded"},nextAction:{expand:"collapse",collapse:"expand"},text:{expand:"collapsed-text",collapse:"expanded-text"},icon:{expand:"collapsed-icon",collapse:"expanded-icon"}};t.find("li").each((function(e,t){var o=a(t);o.hasClass(r.removeClass[n])&&o.removeClass(r.removeClass[n]).addClass(r.addClass[n])})),e.data("action",r.nextAction[n]),e.find(".material-icons").text(e.data(r.icon[n])),e.find(".js-toggle-text").text(e.data(r.text[n]))}}]),e}();t.default=s},91781:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a(n(99663)),o=a(n(22600)),i=a(n(68840));function a(e){return e&&e.__esModule?e:{default:e}}var s=window.$,l=function(){function e(){(0,r.default)(this,e)}return(0,o.default)(e,[{key:"extend",value:function(e){var t=this;e.getContainer().on("click",".js-submit-row-action",(function(n){n.preventDefault();var r=s(n.currentTarget),o=r.data("confirmMessage"),i=r.data("title"),a=r.data("method");if(i)t.showConfirmModal(r,e,o,i,a);else{if(o.length&&!window.confirm(o))return;t.postForm(r,a)}}))}},{key:"postForm",value:function(e,t){var n=["GET","POST"].includes(t),r=s("<form>",{action:e.data("url"),method:n?t:"POST"}).appendTo("body");n||r.append(s("<input>",{type:"_hidden",name:"_method",value:t})),r.submit()}},{key:"showConfirmModal",value:function(e,t,n,r,o){var a=this,s=e.data("confirmButtonLabel"),l=e.data("closeButtonLabel"),u=e.data("confirmButtonClass");new i.default({id:t.getId()+"-grid-confirm-modal",confirmTitle:r,confirmMessage:n,confirmButtonLabel:s,closeButtonLabel:l,confirmButtonClass:u},(function(){return a.postForm(e,o)})).show()}}]),e}();t.default=l},5595:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(99663)),o=i(n(22600));function i(e){return e&&e.__esModule?e:{default:e}}var a=window.$,s=function(){function e(){(0,r.default)(this,e)}return(0,o.default)(e,[{key:"extend",value:function(e){this.handleBulkActionCheckboxSelect(e),this.handleBulkActionSelectAllCheckbox(e)}},{key:"handleBulkActionSelectAllCheckbox",value:function(e){var t=this;e.getContainer().on("change",".js-bulk-action-select-all",(function(n){var r=a(n.currentTarget).is(":checked");r?t.enableBulkActionsBtn(e):t.disableBulkActionsBtn(e),e.getContainer().find(".js-bulk-action-checkbox").prop("checked",r)}))}},{key:"handleBulkActionCheckboxSelect",value:function(e){var t=this;e.getContainer().on("change",".js-bulk-action-checkbox",(function(){e.getContainer().find(".js-bulk-action-checkbox:checked").length>0?t.enableBulkActionsBtn(e):t.disableBulkActionsBtn(e)}))}},{key:"enableBulkActionsBtn",value:function(e){e.getContainer().find(".js-bulk-actions-btn").prop("disabled",!1)}},{key:"disableBulkActionsBtn",value:function(e){e.getContainer().find(".js-bulk-actions-btn").prop("disabled",!0)}}]),e}();t.default=s},4499:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(99663)),o=i(n(22600));function i(e){return e&&e.__esModule?e:{default:e}}var a=window.$,s=function(){function e(){(0,r.default)(this,e)}return(0,o.default)(e,[{key:"extend",value:function(e){var t=this;e.getContainer().find("table.table").find(".ps-togglable-row").on("click",(function(e){e.preventDefault(),t.toggleValue(a(e.delegateTarget))}))}},{key:"toggleValue",value:function(e){var t=e.data("toggleUrl");this.submitAsForm(t)}},{key:"submitAsForm",value:function(e){a("<form>",{action:e,method:"POST"}).appendTo("body").submit()}}]),e}();t.default=s},2573:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(99663)),o=i(n(22600));function i(e){return e&&e.__esModule?e:{default:e}}var a=window.$,s=function(){function e(){(0,r.default)(this,e)}return(0,o.default)(e,[{key:"extend",value:function(e){var t=this;e.getHeaderContainer().on("click",".js-common_show_query-grid-action",(function(){return t.onShowSqlQueryClick(e)})),e.getHeaderContainer().on("click",".js-common_export_sql_manager-grid-action",(function(){return t.onExportSqlManagerClick(e)}))}},{key:"onShowSqlQueryClick",value:function(e){var t=a("#"+e.getId()+"_common_show_query_modal_form");this.fillExportForm(t,e);var n=a("#"+e.getId()+"_grid_common_show_query_modal");n.modal("show"),n.on("click",".btn-sql-submit",(function(){return t.submit()}))}},{key:"onExportSqlManagerClick",value:function(e){var t=a("#"+e.getId()+"_common_show_query_modal_form");this.fillExportForm(t,e),t.submit()}},{key:"fillExportForm",value:function(e,t){var n=t.getContainer().find(".js-grid-table").data("query");e.find('textarea[name="sql"]').val(n),e.find('input[name="name"]').val(this.getNameFromBreadcrumb())}},{key:"getNameFromBreadcrumb",value:function(){var e=a(".header-toolbar").find(".breadcrumb-item"),t="";return e.each((function(e,n){var r=a(n),o=r.find("a").length>0?r.find("a").text():r.text();t.length>0&&(t=t.concat(" > ")),t=t.concat(o)})),t}}]),e}();t.default=s},96803:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a(n(99663)),o=a(n(22600)),i=a(n(4110));function a(e){return e&&e.__esModule?e:{default:e}}var s=window.$,l=function(){function e(){(0,r.default)(this,e)}return(0,o.default)(e,[{key:"extend",value:function(e){e.getContainer().on("click",".js-reset-search",(function(e){(0,i.default)(s(e.currentTarget).data("url"),s(e.currentTarget).data("redirect"))}))}}]),e}();t.default=l},91137:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(99663)),o=i(n(22600));function i(e){return e&&e.__esModule?e:{default:e}}var a=function(){function e(){(0,r.default)(this,e)}return(0,o.default)(e,[{key:"extend",value:function(e){var t=e.getContainer().find(".column-filters");t.find(".grid-search-button").prop("disabled",!0),t.find("input:not(.js-bulk-action-select-all), select").on("input dp.change",(function(){t.find(".grid-search-button").prop("disabled",!1),t.find(".js-grid-reset-button").prop("hidden",!1)}))}}]),e}();t.default=a},58899:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(99663)),o=i(n(22600));function i(e){return e&&e.__esModule?e:{default:e}}var a=window.$,s=function(){function e(){(0,r.default)(this,e)}return(0,o.default)(e,[{key:"extend",value:function(e){this.initRowLinks(e),this.initConfirmableActions(e)}},{key:"initConfirmableActions",value:function(e){e.getContainer().on("click",".js-link-row-action",(function(e){var t=a(e.currentTarget).data("confirm-message");t.length&&!window.confirm(t)&&e.preventDefault()}))}},{key:"initRowLinks",value:function(e){a("tr",e.getContainer()).each((function(){var e=a(this);a(".js-link-row-action[data-clickable-row=1]:first",e).each((function(){var t=a(this),n=t.closest("td"),r=a("td.clickable",e).not(n),o=!1;r.addClass("cursor-pointer").mousedown((function(){a(window).mousemove((function(){o=!0,a(window).unbind("mousemove")}))})),r.mouseup((function(){var e=o;if(o=!1,a(window).unbind("mousemove"),!e){var n=t.data("confirm-message");n.length&&!window.confirm(n)||(document.location=t.attr("href"))}}))}))}))}}]),e}();t.default=s},92448:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a(n(12424)),o=a(n(99663)),i=a(n(22600));function a(e){return e&&e.__esModule?e:{default:e}}n(73867);var s=window.$,l=function(){function e(){var t=this;return(0,o.default)(this,e),{extend:function(e){return t.extend(e)}}}return(0,i.default)(e,[{key:"extend",value:function(e){var t=this;this.grid=e,this.addIdsToGridTableRows(),e.getContainer().find(".js-grid-table").tableDnD({onDragClass:"position-row-while-drag",dragHandle:".js-drag-handle",onDrop:function(e,n){return t.handlePositionChange(n)}}),e.getContainer().find(".js-drag-handle").hover((function(){s(this).closest("tr").addClass("hover")}),(function(){s(this).closest("tr").removeClass("hover")}))}},{key:"handlePositionChange",value:function(e){var t=s(e).find(".js-"+this.grid.getId()+"-position:first"),n=t.data("update-url"),r=t.data("update-method"),o={positions:this.getRowsPositions()};this.updatePosition(n,o,r)}},{key:"getRowsPositions",value:function(){for(var e=JSON.parse(s.tableDnD.jsonize())[this.grid.getId()+"_grid_table"],t=[],n=void 0,r=0;r<e.length;r+=1)n=this.grid.getContainer().find("#"+e[r]),t.push({rowMarker:e[r],offset:n.data("dragAndDropOffset")});return this.computeMappingBetweenOldAndNewPositions(t)}},{key:"addIdsToGridTableRows",value:function(){var e=0;this.grid.getContainer().find(".js-grid-table .js-"+this.grid.getId()+"-position").each((function(t,n){var r=s(n),o="row_"+r.data("id")+"_"+r.data("position");r.closest("tr").attr("id",o),r.closest("td").addClass("js-drag-handle"),r.closest("tr").data("dragAndDropOffset",e),e+=1}))}},{key:"updatePosition",value:function(e,t,n){for(var r=["GET","POST"].includes(n),o=s("<form>",{action:e,method:r?n:"POST"}).appendTo("body"),i=t.positions.length,a=void 0,l=0;l<i;l+=1)a=t.positions[l],o.append(s("<input>",{type:"hidden",name:"positions["+l+"][rowId]",value:a.rowId}),s("<input>",{type:"hidden",name:"positions["+l+"][oldPosition]",value:a.oldPosition}),s("<input>",{type:"hidden",name:"positions["+l+"][newPosition]",value:a.newPosition}));r||o.append(s("<input>",{type:"hidden",name:"_method",value:n})),o.submit()}},{key:"computeMappingBetweenOldAndNewPositions",value:function(e){for(var t=/^row_(\d+)_(\d+)$/,n=Array(e.length).fill().map(Object),o=0;o<e.length;o+=1){var i=t.exec(e[o].rowMarker),a=(0,r.default)(i,3),s=a[1],l=a[2];n[o].rowId=s,n[o].oldPosition=parseInt(l,10),n[e[o].offset].newPosition=n[o].oldPosition}return n}}]),e}();t.default=l},37758:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(99663)),o=i(n(22600));function i(e){return e&&e.__esModule?e:{default:e}}var a=function(){function e(){(0,r.default)(this,e)}return(0,o.default)(e,[{key:"extend",value:function(e){e.getHeaderContainer().on("click",".js-common_refresh_list-grid-action",(function(){window.location.reload()}))}}]),e}();t.default=a},58630:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a(n(99663)),o=a(n(22600)),i=a(n(61353));function a(e){return e&&e.__esModule?e:{default:e}}var s=function(){function e(){(0,r.default)(this,e)}return(0,o.default)(e,[{key:"extend",value:function(e){var t=e.getContainer().find("table.table");new i.default(t).attach()}}]),e}();t.default=s},17868:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a(n(99663)),o=a(n(22600)),i=a(n(68840));function a(e){return e&&e.__esModule?e:{default:e}}var s=window.$,l=function(){function e(){var t=this;return(0,r.default)(this,e),{extend:function(e){return t.extend(e)}}}return(0,o.default)(e,[{key:"extend",value:function(e){var t=this;e.getContainer().on("click",".js-bulk-action-submit-btn",(function(n){t.submit(n,e)}))}},{key:"submit",value:function(e,t){var n=s(e.currentTarget),r=n.data("confirm-message"),o=n.data("confirmTitle");void 0!==r&&r.length>0?void 0!==o?this.showConfirmModal(n,t,r,o):window.confirm(r)&&this.postForm(n,t):this.postForm(n,t)}},{key:"showConfirmModal",value:function(e,t,n,r){var o=this,a=e.data("confirmButtonLabel"),s=e.data("closeButtonLabel"),l=e.data("confirmButtonClass");new i.default({id:t.getId()+"-grid-confirm-modal",confirmTitle:r,confirmMessage:n,confirmButtonLabel:a,closeButtonLabel:s,confirmButtonClass:l},(function(){return o.postForm(e,t)})).show()}},{key:"postForm",value:function(e,t){var n=s("#"+t.getId()+"_filter_form");n.attr("action",e.data("form-url")),n.attr("method",e.data("form-method")),n.submit()}}]),e}();t.default=l},53277:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(99663)),o=i(n(22600));function i(e){return e&&e.__esModule?e:{default:e}}var a=window.$,s=function(){function e(t){(0,r.default)(this,e),this.id=t,this.$container=a("#"+this.id+"_grid")}return(0,o.default)(e,[{key:"getId",value:function(){return this.id}},{key:"getContainer",value:function(){return this.$container}},{key:"getHeaderContainer",value:function(){return this.$container.closest(".js-grid-panel").find(".js-grid-header")}},{key:"addExtension",value:function(e){e.extend(this)}}]),e}();t.default=s},68840:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,o=(r=n(85315))&&r.__esModule?r:{default:r};t.default=function(e,t,n){var r=this,a=e.id,s=e.closable;this.modal=function(e){var t,n=e.id,r=void 0===n?"confirm-modal":n,i=e.confirmTitle,a=e.confirmMessage,s=void 0===a?"":a,l=e.closeButtonLabel,u=void 0===l?"Close":l,c=e.confirmButtonLabel,d=void 0===c?"Accept":c,f=e.confirmButtonClass,h=void 0===f?"btn-primary":f,p=e.customButtons,v=void 0===p?[]:p,g={};return g.container=document.createElement("div"),g.container.classList.add("modal","fade"),g.container.id=r,g.dialog=document.createElement("div"),g.dialog.classList.add("modal-dialog"),g.content=document.createElement("div"),g.content.classList.add("modal-content"),g.header=document.createElement("div"),g.header.classList.add("modal-header"),i&&(g.title=document.createElement("h4"),g.title.classList.add("modal-title"),g.title.innerHTML=i),g.closeIcon=document.createElement("button"),g.closeIcon.classList.add("close"),g.closeIcon.setAttribute("type","button"),g.closeIcon.dataset.dismiss="modal",g.closeIcon.innerHTML="×",g.body=document.createElement("div"),g.body.classList.add("modal-body","text-left","font-weight-normal"),g.message=document.createElement("p"),g.message.classList.add("confirm-message"),g.message.innerHTML=s,g.footer=document.createElement("div"),g.footer.classList.add("modal-footer"),g.closeButton=document.createElement("button"),g.closeButton.setAttribute("type","button"),g.closeButton.classList.add("btn","btn-outline-secondary","btn-lg"),g.closeButton.dataset.dismiss="modal",g.closeButton.innerHTML=u,g.confirmButton=document.createElement("button"),g.confirmButton.setAttribute("type","button"),g.confirmButton.classList.add("btn",h,"btn-lg","btn-confirm-submit"),g.confirmButton.dataset.dismiss="modal",g.confirmButton.innerHTML=d,i?g.header.append(g.title,g.closeIcon):g.header.appendChild(g.closeIcon),g.body.appendChild(g.message),(t=g.footer).append.apply(t,[g.closeButton].concat((0,o.default)(v),[g.confirmButton])),g.content.append(g.header,g.body,g.footer),g.dialog.appendChild(g.content),g.container.appendChild(g.dialog),g}(e),this.$modal=i(this.modal.container),this.show=function(){r.$modal.modal()},this.modal.confirmButton.addEventListener("click",t),this.$modal.modal({backdrop:!!s||"static",keyboard:void 0===s||s,closable:void 0===s||s,show:!1}),this.$modal.on("hidden.bs.modal",(function(){document.querySelector("#"+a).remove(),n&&n()})),document.body.appendChild(this.modal.container)};var i=window.$},3010:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(99663)),o=i(n(22600));function i(e){return e&&e.__esModule?e:{default:e}}var a=window.$,s=function(){function e(){(0,r.default)(this,e)}return(0,o.default)(e,[{key:"extend",value:function(e){var t=e.getContainer();t.on("click",".js-remove-helper-block",(function(e){t.remove();var n=a(e.target),r=n.data("closeUrl"),o=n.data("cardName");r&&a.post(r,{close:1,name:o})}))}}]),e}();t.default=s},50204:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(99663)),o=i(n(22600));function i(e){return e&&e.__esModule?e:{default:e}}var a=window.$,s=function(){function e(t){(0,r.default)(this,e),this.id=t,this.$container=a("#"+this.id)}return(0,o.default)(e,[{key:"getContainer",value:function(){return this.$container}},{key:"addExtension",value:function(e){e.extend(this)}}]),e}();t.default=s},52666:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,o=(r=n(99663))&&r.__esModule?r:{default:r},i=window.$;t.default=function e(t){var n=t.tokenFieldSelector,r=t.options,a=void 0===r?{}:r;(0,o.default)(this,e),i(n).tokenfield(a)}},48473:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=window.$;t.default=function(e){var t=e.sourceElementSelector,r=e.destinationElementSelector,o=e.options,i=void 0===o?{eventName:"input"}:o;n(document).on(i.eventName,""+t,(function(e){n(r).val(window.str2url(n(e.currentTarget).val(),"UTF-8"))}))}},92526:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a(n(99663)),o=a(n(22600)),i=n(76544);function a(e){return e&&e.__esModule?e:{default:e}}var s=window.$,l=function(){function e(t){var n=this;(0,r.default)(this,e);var o=t||{};return this.localeItemSelector=o.localeItemSelector||".js-locale-item",this.localeButtonSelector=o.localeButtonSelector||".js-locale-btn",this.localeInputSelector=o.localeInputSelector||".js-locale-input",this.selectedLocale=s(this.localeItemSelector).data("locale"),s("body").on("click",this.localeItemSelector,this.toggleLanguage.bind(this)),i.EventEmitter.on("languageSelected",this.toggleInputs.bind(this)),{localeItemSelector:this.localeItemSelector,localeButtonSelector:this.localeButtonSelector,localeInputSelector:this.localeInputSelector,refreshFormInputs:function(e){n.refreshInputs(e)},getSelectedLocale:function(){return n.selectedLocale}}}return(0,o.default)(e,[{key:"refreshInputs",value:function(e){this.selectedLocale&&i.EventEmitter.emit("languageSelected",{selectedLocale:this.selectedLocale,form:e})}},{key:"toggleLanguage",value:function(e){var t=s(e.target),n=t.closest("form");this.selectedLocale=t.data("locale"),this.refreshInputs(n)}},{key:"toggleInputs",value:function(e){var t=e.form;this.selectedLocale=e.selectedLocale;var n=t.find(this.localeButtonSelector),r=n.data("change-language-url");n.text(this.selectedLocale),t.find(this.localeInputSelector).addClass("d-none"),t.find(this.localeInputSelector+".js-locale-"+this.selectedLocale).removeClass("d-none"),r&&this.saveSelectedLanguage(r,this.selectedLocale)}},{key:"saveSelectedLanguage",value:function(e,t){s.post({url:e,data:{language_iso_code:t}})}}]),e}();t.default=l},24043:(e,t,n)=>{e.exports={default:n(47185),__esModule:!0}},26378:(e,t,n)=>{e.exports={default:n(3597),__esModule:!0}},40863:(e,t,n)=>{e.exports={default:n(21035),__esModule:!0}},32242:(e,t,n)=>{e.exports={default:n(33391),__esModule:!0}},99663:(e,t)=>{"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},22600:(e,t,n)=>{"use strict";t.__esModule=!0;var r,o=(r=n(32242))&&r.__esModule?r:{default:r};t.default=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),(0,o.default)(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}()},12424:(e,t,n)=>{"use strict";t.__esModule=!0;var r=i(n(40863)),o=i(n(26378));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){if(Array.isArray(e))return e;if((0,r.default)(Object(e)))return function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var s,l=(0,o.default)(e);!(r=(s=l.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&l.return&&l.return()}finally{if(i)throw a}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}},85315:(e,t,n)=>{"use strict";t.__esModule=!0;var r,o=(r=n(24043))&&r.__esModule?r:{default:r};t.default=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return(0,o.default)(e)}},47185:(e,t,n)=>{n(91867),n(2586),e.exports=n(34579).Array.from},3597:(e,t,n)=>{n(73871),n(91867),e.exports=n(46459)},21035:(e,t,n)=>{n(73871),n(91867),e.exports=n(89553)},33391:(e,t,n)=>{n(31477);var r=n(34579).Object;e.exports=function(e,t,n){return r.defineProperty(e,t,n)}},85663:e=>{e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},79003:e=>{e.exports=function(){}},12159:(e,t,n)=>{var r=n(36727);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},57428:(e,t,n)=>{var r=n(7932),o=n(78728),i=n(16531);e.exports=function(e){return function(t,n,a){var s,l=r(t),u=o(l.length),c=i(a,u);if(e&&n!=n){for(;u>c;)if((s=l[c++])!=s)return!0}else for(;u>c;c++)if((e||c in l)&&l[c]===n)return e||c||0;return!e&&-1}}},14677:(e,t,n)=>{var r=n(32894),o=n(22939)("toStringTag"),i="Arguments"==r(function(){return arguments}());e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?n:i?r(t):"Object"==(a=r(t))&&"function"==typeof t.callee?"Arguments":a}},32894:e=>{var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},34579:e=>{var t=e.exports={version:"2.6.11"};"number"==typeof __e&&(__e=t)},52445:(e,t,n)=>{"use strict";var r=n(4743),o=n(83101);e.exports=function(e,t,n){t in e?r.f(e,t,o(0,n)):e[t]=n}},19216:(e,t,n)=>{var r=n(85663);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},8333:e=>{e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},89666:(e,t,n)=>{e.exports=!n(7929)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},97467:(e,t,n)=>{var r=n(36727),o=n(33938).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},73338:e=>{e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},83856:(e,t,n)=>{var r=n(33938),o=n(34579),i=n(19216),a=n(41818),s=n(27069),l=function(e,t,n){var u,c,d,f=e&l.F,h=e&l.G,p=e&l.S,v=e&l.P,g=e&l.B,m=e&l.W,y=h?o:o[t]||(o[t]={}),b=y.prototype,w=h?r:p?r[t]:(r[t]||{}).prototype;for(u in h&&(n=t),n)(c=!f&&w&&void 0!==w[u])&&s(y,u)||(d=c?w[u]:n[u],y[u]=h&&"function"!=typeof w[u]?n[u]:g&&c?i(d,r):m&&w[u]==d?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(d):v&&"function"==typeof d?i(Function.call,d):d,v&&((y.virtual||(y.virtual={}))[u]=d,e&l.R&&b&&!b[u]&&a(b,u,d)))};l.F=1,l.G=2,l.S=4,l.P=8,l.B=16,l.W=32,l.U=64,l.R=128,e.exports=l},7929:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},33938:e=>{var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},27069:e=>{var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},41818:(e,t,n)=>{var r=n(4743),o=n(83101);e.exports=n(89666)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},54881:(e,t,n)=>{var r=n(33938).document;e.exports=r&&r.documentElement},33758:(e,t,n)=>{e.exports=!n(89666)&&!n(7929)((function(){return 7!=Object.defineProperty(n(97467)("div"),"a",{get:function(){return 7}}).a}))},50799:(e,t,n)=>{var r=n(32894);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},45991:(e,t,n)=>{var r=n(15449),o=n(22939)("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||i[o]===e)}},36727:e=>{e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},95602:(e,t,n)=>{var r=n(12159);e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){var i=e.return;throw void 0!==i&&r(i.call(e)),t}}},33945:(e,t,n)=>{"use strict";var r=n(98989),o=n(83101),i=n(25378),a={};n(41818)(a,n(22939)("iterator"),(function(){return this})),e.exports=function(e,t,n){e.prototype=r(a,{next:o(1,n)}),i(e,t+" Iterator")}},45700:(e,t,n)=>{"use strict";var r=n(16227),o=n(83856),i=n(57470),a=n(41818),s=n(15449),l=n(33945),u=n(25378),c=n(95089),d=n(22939)("iterator"),f=!([].keys&&"next"in[].keys()),h="keys",p="values",v=function(){return this};e.exports=function(e,t,n,g,m,y,b){l(n,t,g);var w,_,x,D=function(e){if(!f&&e in j)return j[e];switch(e){case h:case p:return function(){return new n(this,e)}}return function(){return new n(this,e)}},C=t+" Iterator",k=m==p,L=!1,j=e.prototype,O=j[d]||j["@@iterator"]||m&&j[m],S=O||D(m),T=m?k?D("entries"):S:void 0,M="Array"==t&&j.entries||O;if(M&&(x=c(M.call(new e)))!==Object.prototype&&x.next&&(u(x,C,!0),r||"function"==typeof x[d]||a(x,d,v)),k&&O&&O.name!==p&&(L=!0,S=function(){return O.call(this)}),r&&!b||!f&&!L&&j[d]||a(j,d,S),s[t]=S,s[C]=v,m)if(w={values:k?S:D(p),keys:y?S:D(h),entries:T},b)for(_ in w)_ in j||i(j,_,w[_]);else o(o.P+o.F*(f||L),t,w);return w}},96630:(e,t,n)=>{var r=n(22939)("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){return{done:n=!0}},i[r]=function(){return a},e(i)}catch(e){}return n}},85084:e=>{e.exports=function(e,t){return{value:t,done:!!e}}},15449:e=>{e.exports={}},16227:e=>{e.exports=!0},98989:(e,t,n)=>{var r=n(12159),o=n(57856),i=n(73338),a=n(58989)("IE_PROTO"),s=function(){},l=function(){var e,t=n(97467)("iframe"),r=i.length;for(t.style.display="none",n(54881).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),l=e.F;r--;)delete l.prototype[i[r]];return l()};e.exports=Object.create||function(e,t){var n;return null!==e?(s.prototype=r(e),n=new s,s.prototype=null,n[a]=e):n=l(),void 0===t?n:o(n,t)}},4743:(e,t,n)=>{var r=n(12159),o=n(33758),i=n(33206),a=Object.defineProperty;t.f=n(89666)?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},57856:(e,t,n)=>{var r=n(4743),o=n(12159),i=n(46162);e.exports=n(89666)?Object.defineProperties:function(e,t){o(e);for(var n,a=i(t),s=a.length,l=0;s>l;)r.f(e,n=a[l++],t[n]);return e}},95089:(e,t,n)=>{var r=n(27069),o=n(66530),i=n(58989)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},12963:(e,t,n)=>{var r=n(27069),o=n(7932),i=n(57428)(!1),a=n(58989)("IE_PROTO");e.exports=function(e,t){var n,s=o(e),l=0,u=[];for(n in s)n!=a&&r(s,n)&&u.push(n);for(;t.length>l;)r(s,n=t[l++])&&(~i(u,n)||u.push(n));return u}},46162:(e,t,n)=>{var r=n(12963),o=n(73338);e.exports=Object.keys||function(e){return r(e,o)}},83101:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},57470:(e,t,n)=>{e.exports=n(41818)},25378:(e,t,n)=>{var r=n(4743).f,o=n(27069),i=n(22939)("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},58989:(e,t,n)=>{var r=n(20250)("keys"),o=n(65730);e.exports=function(e){return r[e]||(r[e]=o(e))}},20250:(e,t,n)=>{var r=n(34579),o=n(33938),i="__core-js_shared__",a=o[i]||(o[i]={});(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n(16227)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},90510:(e,t,n)=>{var r=n(11052),o=n(8333);e.exports=function(e){return function(t,n){var i,a,s=String(o(t)),l=r(n),u=s.length;return l<0||l>=u?e?"":void 0:(i=s.charCodeAt(l))<55296||i>56319||l+1===u||(a=s.charCodeAt(l+1))<56320||a>57343?e?s.charAt(l):i:e?s.slice(l,l+2):a-56320+(i-55296<<10)+65536}}},16531:(e,t,n)=>{var r=n(11052),o=Math.max,i=Math.min;e.exports=function(e,t){return(e=r(e))<0?o(e+t,0):i(e,t)}},11052:e=>{var t=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:t)(e)}},7932:(e,t,n)=>{var r=n(50799),o=n(8333);e.exports=function(e){return r(o(e))}},78728:(e,t,n)=>{var r=n(11052),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},66530:(e,t,n)=>{var r=n(8333);e.exports=function(e){return Object(r(e))}},33206:(e,t,n)=>{var r=n(36727);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},65730:e=>{var t=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+n).toString(36))}},22939:(e,t,n)=>{var r=n(20250)("wks"),o=n(65730),i=n(33938).Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},83728:(e,t,n)=>{var r=n(14677),o=n(22939)("iterator"),i=n(15449);e.exports=n(34579).getIteratorMethod=function(e){if(null!=e)return e[o]||e["@@iterator"]||i[r(e)]}},46459:(e,t,n)=>{var r=n(12159),o=n(83728);e.exports=n(34579).getIterator=function(e){var t=o(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return r(t.call(e))}},89553:(e,t,n)=>{var r=n(14677),o=n(22939)("iterator"),i=n(15449);e.exports=n(34579).isIterable=function(e){var t=Object(e);return void 0!==t[o]||"@@iterator"in t||i.hasOwnProperty(r(t))}},2586:(e,t,n)=>{"use strict";var r=n(19216),o=n(83856),i=n(66530),a=n(95602),s=n(45991),l=n(78728),u=n(52445),c=n(83728);o(o.S+o.F*!n(96630)((function(e){Array.from(e)})),"Array",{from:function(e){var t,n,o,d,f=i(e),h="function"==typeof this?this:Array,p=arguments.length,v=p>1?arguments[1]:void 0,g=void 0!==v,m=0,y=c(f);if(g&&(v=r(v,p>2?arguments[2]:void 0,2)),null==y||h==Array&&s(y))for(n=new h(t=l(f.length));t>m;m++)u(n,m,g?v(f[m],m):f[m]);else for(d=y.call(f),n=new h;!(o=d.next()).done;m++)u(n,m,g?a(d,v,[o.value,m],!0):o.value);return n.length=m,n}})},3882:(e,t,n)=>{"use strict";var r=n(79003),o=n(85084),i=n(15449),a=n(7932);e.exports=n(45700)(Array,"Array",(function(e,t){this._t=a(e),this._i=0,this._k=t}),(function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,o(1)):o(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])}),"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},31477:(e,t,n)=>{var r=n(83856);r(r.S+r.F*!n(89666),"Object",{defineProperty:n(4743).f})},91867:(e,t,n)=>{"use strict";var r=n(90510)(!0);n(45700)(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})}))},73871:(e,t,n)=>{n(3882);for(var r=n(33938),o=n(41818),i=n(15449),a=n(22939)("toStringTag"),s="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),l=0;l<s.length;l++){var u=s[l],c=r[u],d=c&&c.prototype;d&&!d[a]&&o(d,a,u),i[u]=i.Array}},17187:e=>{"use strict";var t,n="object"==typeof Reflect?Reflect:null,r=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var a=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function u(e,t,n,r){var o,i,a,u;if(s(n),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),i=e._events),a=i[t]),void 0===a)a=i[t]=n,++e._eventsCount;else if("function"==typeof a?a=i[t]=r?[n,a]:[a,n]:r?a.unshift(n):a.push(n),(o=l(e))>0&&a.length>o&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,u=c,console&&console.warn&&console.warn(u)}return e}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=c.bind(r);return o.listener=n,r.wrapFn=o,o}function f(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(o):p(o,o.length)}function h(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function p(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return l(this)},i.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o="error"===e,i=this._events;if(void 0!==i)o=o&&void 0===i.error;else if(!o)return!1;if(o){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var l=i[e];if(void 0===l)return!1;if("function"==typeof l)r(l,this,t);else{var u=l.length,c=p(l,u);for(n=0;n<u;++n)r(c[n],this,t)}return!0},i.prototype.addListener=function(e,t){return u(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return u(this,e,t,!0)},i.prototype.once=function(e,t){return s(t),this.on(e,d(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return s(t),this.prependListener(e,d(this,e,t)),this},i.prototype.removeListener=function(e,t){var n,r,o,i,a;if(s(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(o=-1,i=n.length-1;i>=0;i--)if(n[i]===t||n[i].listener===t){a=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,o),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit("removeListener",e,a||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var o,i=Object.keys(n);for(r=0;r<i.length;++r)"removeListener"!==(o=i[r])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},i.prototype.listeners=function(e){return f(this,e,!0)},i.prototype.rawListeners=function(e){return f(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):h.call(e,t)},i.prototype.listenerCount=h,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},73867:(e,t,n)=>{var r,o,i,a,s,l,u=n(73609);r=u,o=window,i=window.document,a="touchstart mousedown",s="touchmove mousemove",l="touchend mouseup",r(i).ready((function(){function e(e){for(var t={},n=e.match(/([^;:]+)/g)||[];n.length;)t[n.shift()]=n.shift().trim();return t}r("table").each((function(){"dnd"===r(this).data("table")&&r(this).tableDnD({onDragStyle:r(this).data("ondragstyle")&&e(r(this).data("ondragstyle"))||null,onDropStyle:r(this).data("ondropstyle")&&e(r(this).data("ondropstyle"))||null,onDragClass:void 0===r(this).data("ondragclass")?"tDnD_whileDrag":r(this).data("ondragclass"),onDrop:r(this).data("ondrop")&&new Function("table","row",r(this).data("ondrop")),onDragStart:r(this).data("ondragstart")&&new Function("table","row",r(this).data("ondragstart")),onDragStop:r(this).data("ondragstop")&&new Function("table","row",r(this).data("ondragstop")),scrollAmount:r(this).data("scrollamount")||5,sensitivity:r(this).data("sensitivity")||10,hierarchyLevel:r(this).data("hierarchylevel")||0,indentArtifact:r(this).data("indentartifact")||'<div class="indent"> </div>',autoWidthAdjust:r(this).data("autowidthadjust")||!0,autoCleanRelations:r(this).data("autocleanrelations")||!0,jsonPretifySeparator:r(this).data("jsonpretifyseparator")||"\t",serializeRegexp:r(this).data("serializeregexp")&&new RegExp(r(this).data("serializeregexp"))||/[^\-]*$/,serializeParamName:r(this).data("serializeparamname")||!1,dragHandle:r(this).data("draghandle")||null})}))})),u.tableDnD={currentTable:null,dragObject:null,mouseOffset:null,oldX:0,oldY:0,build:function(e){return this.each((function(){this.tableDnDConfig=r.extend({onDragStyle:null,onDropStyle:null,onDragClass:"tDnD_whileDrag",onDrop:null,onDragStart:null,onDragStop:null,scrollAmount:5,sensitivity:10,hierarchyLevel:0,indentArtifact:'<div class="indent"> </div>',autoWidthAdjust:!0,autoCleanRelations:!0,jsonPretifySeparator:"\t",serializeRegexp:/[^\-]*$/,serializeParamName:!1,dragHandle:null},e||{}),r.tableDnD.makeDraggable(this),this.tableDnDConfig.hierarchyLevel&&r.tableDnD.makeIndented(this)})),this},makeIndented:function(e){var t,n,o=e.tableDnDConfig,i=e.rows,a=r(i).first().find("td:first")[0],s=0,l=0;if(r(e).hasClass("indtd"))return null;n=r(e).addClass("indtd").attr("style"),r(e).css({whiteSpace:"nowrap"});for(var u=0;u<i.length;u++)l<r(i[u]).find("td:first").text().length&&(l=r(i[u]).find("td:first").text().length,t=u);for(r(a).css({width:"auto"}),u=0;u<o.hierarchyLevel;u++)r(i[t]).find("td:first").prepend(o.indentArtifact);for(a&&r(a).css({width:a.offsetWidth}),n&&r(e).css(n),u=0;u<o.hierarchyLevel;u++)r(i[t]).find("td:first").children(":first").remove();return o.hierarchyLevel&&r(i).each((function(){(s=r(this).data("level")||0)<=o.hierarchyLevel&&r(this).data("level",s)||r(this).data("level",0);for(var e=0;e<r(this).data("level");e++)r(this).find("td:first").prepend(o.indentArtifact)})),this},makeDraggable:function(e){var t=e.tableDnDConfig;t.dragHandle&&r(t.dragHandle,e).each((function(){r(this).bind(a,(function(n){return r.tableDnD.initialiseDrag(r(this).parents("tr")[0],e,this,n,t),!1}))}))||r(e.rows).each((function(){r(this).hasClass("nodrag")?r(this).css("cursor",""):r(this).bind(a,(function(n){if("TD"===n.target.tagName)return r.tableDnD.initialiseDrag(this,e,this,n,t),!1})).css("cursor","move")}))},currentOrder:function(){var e=this.currentTable.rows;return r.map(e,(function(e){return(r(e).data("level")+e.id).replace(/\s/g,"")})).join("")},initialiseDrag:function(e,t,n,o,a){this.dragObject=e,this.currentTable=t,this.mouseOffset=this.getMouseOffset(n,o),this.originalOrder=this.currentOrder(),r(i).bind(s,this.mousemove).bind(l,this.mouseup),a.onDragStart&&a.onDragStart(t,n)},updateTables:function(){this.each((function(){this.tableDnDConfig&&r.tableDnD.makeDraggable(this)}))},mouseCoords:function(e){return e.originalEvent.changedTouches?{x:e.originalEvent.changedTouches[0].clientX,y:e.originalEvent.changedTouches[0].clientY}:e.pageX||e.pageY?{x:e.pageX,y:e.pageY}:{x:e.clientX+i.body.scrollLeft-i.body.clientLeft,y:e.clientY+i.body.scrollTop-i.body.clientTop}},getMouseOffset:function(e,t){var n,r;return t=t||o.event,r=this.getPosition(e),{x:(n=this.mouseCoords(t)).x-r.x,y:n.y-r.y}},getPosition:function(e){var t=0,n=0;for(0===e.offsetHeight&&(e=e.firstChild);e.offsetParent;)t+=e.offsetLeft,n+=e.offsetTop,e=e.offsetParent;return{x:t+=e.offsetLeft,y:n+=e.offsetTop}},autoScroll:function(e){var t=this.currentTable.tableDnDConfig,n=o.pageYOffset,r=o.innerHeight?o.innerHeight:i.documentElement.clientHeight?i.documentElement.clientHeight:i.body.clientHeight;i.all&&(void 0!==i.compatMode&&"BackCompat"!==i.compatMode?n=i.documentElement.scrollTop:void 0!==i.body&&(n=i.body.scrollTop)),e.y-n<t.scrollAmount&&o.scrollBy(0,-t.scrollAmount)||r-(e.y-n)<t.scrollAmount&&o.scrollBy(0,t.scrollAmount)},moveVerticle:function(e,t){0!==e.vertical&&t&&this.dragObject!==t&&this.dragObject.parentNode===t.parentNode&&(0>e.vertical&&this.dragObject.parentNode.insertBefore(this.dragObject,t.nextSibling)||0<e.vertical&&this.dragObject.parentNode.insertBefore(this.dragObject,t))},moveHorizontal:function(e,t){var n,o=this.currentTable.tableDnDConfig;if(!o.hierarchyLevel||0===e.horizontal||!t||this.dragObject!==t)return null;n=r(t).data("level"),0<e.horizontal&&n>0&&r(t).find("td:first").children(":first").remove()&&r(t).data("level",--n),0>e.horizontal&&n<o.hierarchyLevel&&r(t).prev().data("level")>=n&&r(t).children(":first").prepend(o.indentArtifact)&&r(t).data("level",++n)},mousemove:function(e){var t,n,o,i,a,s=r(r.tableDnD.dragObject),l=r.tableDnD.currentTable.tableDnDConfig;return e&&e.preventDefault(),!!r.tableDnD.dragObject&&("touchmove"===e.type&&event.preventDefault(),l.onDragClass&&s.addClass(l.onDragClass)||s.css(l.onDragStyle),i=(n=r.tableDnD.mouseCoords(e)).x-r.tableDnD.mouseOffset.x,a=n.y-r.tableDnD.mouseOffset.y,r.tableDnD.autoScroll(n),t=r.tableDnD.findDropTargetRow(s,a),o=r.tableDnD.findDragDirection(i,a),r.tableDnD.moveVerticle(o,t),r.tableDnD.moveHorizontal(o,t),!1)},findDragDirection:function(e,t){var n=this.currentTable.tableDnDConfig.sensitivity,r=this.oldX,o=this.oldY,i={horizontal:e>=r-n&&e<=r+n?0:e>r?-1:1,vertical:t>=o-n&&t<=o+n?0:t>o?-1:1};return 0!==i.horizontal&&(this.oldX=e),0!==i.vertical&&(this.oldY=t),i},findDropTargetRow:function(e,t){for(var n=0,o=this.currentTable.rows,i=this.currentTable.tableDnDConfig,a=0,s=null,l=0;l<o.length;l++)if(s=o[l],a=this.getPosition(s).y,n=parseInt(s.offsetHeight)/2,0===s.offsetHeight&&(a=this.getPosition(s.firstChild).y,n=parseInt(s.firstChild.offsetHeight)/2),t>a-n&&t<a+n)return e.is(s)||i.onAllowDrop&&!i.onAllowDrop(e,s)||r(s).hasClass("nodrop")?null:s;return null},processMouseup:function(){if(!this.currentTable||!this.dragObject)return null;var e=this.currentTable.tableDnDConfig,t=this.dragObject,n=0,o=0;r(i).unbind(s,this.mousemove).unbind(l,this.mouseup),e.hierarchyLevel&&e.autoCleanRelations&&r(this.currentTable.rows).first().find("td:first").children().each((function(){(o=r(this).parents("tr:first").data("level"))&&r(this).parents("tr:first").data("level",--o)&&r(this).remove()}))&&e.hierarchyLevel>1&&r(this.currentTable.rows).each((function(){if((o=r(this).data("level"))>1)for(n=r(this).prev().data("level");o>n+1;)r(this).find("td:first").children(":first").remove(),r(this).data("level",--o)})),e.onDragClass&&r(t).removeClass(e.onDragClass)||r(t).css(e.onDropStyle),this.dragObject=null,e.onDrop&&this.originalOrder!==this.currentOrder()&&r(t).hide().fadeIn("fast")&&e.onDrop(this.currentTable,t),e.onDragStop&&e.onDragStop(this.currentTable,t),this.currentTable=null},mouseup:function(e){return e&&e.preventDefault(),r.tableDnD.processMouseup(),!1},jsonize:function(e){var t=this.currentTable;return e?JSON.stringify(this.tableData(t),null,t.tableDnDConfig.jsonPretifySeparator):JSON.stringify(this.tableData(t))},serialize:function(){return r.param(this.tableData(this.currentTable))},serializeTable:function(e){for(var t="",n=e.tableDnDConfig.serializeParamName||e.id,r=e.rows,o=0;o<r.length;o++){t.length>0&&(t+="&");var i=r[o].id;i&&e.tableDnDConfig&&e.tableDnDConfig.serializeRegexp&&(t+=n+"[]="+(i=i.match(e.tableDnDConfig.serializeRegexp)[0]))}return t},serializeTables:function(){var e=[];return r("table").each((function(){this.id&&e.push(r.param(r.tableDnD.tableData(this)))})),e.join("&")},tableData:function(e){var t,n,o,i,a=e.tableDnDConfig,s=[],l=0,u=0,c=null,d={};if(e||(e=this.currentTable),!e||!e.rows||!e.rows.length)return{error:{code:500,message:"Not a valid table."}};if(!e.id&&!a.serializeParamName)return{error:{code:500,message:"No serializable unique id provided."}};i=a.autoCleanRelations&&e.rows||r.makeArray(e.rows),t=function(e){return e&&a&&a.serializeRegexp?e.match(a.serializeRegexp)[0]:e},d[o=n=a.serializeParamName||e.id]=[],!a.autoCleanRelations&&r(i[0]).data("level")&&i.unshift({id:"undefined"});for(var f=0;f<i.length;f++)if(a.hierarchyLevel){if(0===(u=r(i[f]).data("level")||0))o=n,s=[];else if(u>l)s.push([o,l]),o=t(i[f-1].id);else if(u<l)for(var h=0;h<s.length;h++)s[h][1]===u&&(o=s[h][0]),s[h][1]>=l&&(s[h][1]=0);l=u,r.isArray(d[o])||(d[o]=[]),(c=t(i[f].id))&&d[o].push(c)}else(c=t(i[f].id))&&d[o].push(c);return d}},u.fn.extend({tableDnD:r.tableDnD.build,tableDnDUpdate:r.tableDnD.updateTables,tableDnDSerialize:r.proxy(r.tableDnD.serialize,r.tableDnD),tableDnDSerializeAll:r.tableDnD.serializeTables,tableDnDData:r.proxy(r.tableDnD.tableData,r.tableDnD)})},73609:e=>{"use strict";e.exports=window.jQuery}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}(()=>{"use strict";var e=b(n(53277)),t=b(n(58630)),r=b(n(91781)),o=b(n(96803)),i=b(n(37758)),a=b(n(2573)),s=b(n(58899)),l=b(n(17868)),u=b(n(5595)),c=b(n(4499)),d=b(n(92448)),f=b(n(19078)),h=b(n(92526)),p=b(n(48473)),v=b(n(91137)),g=b(n(52666)),m=b(n(50204)),y=b(n(3010));function b(e){return e&&e.__esModule?e:{default:e}}(0,window.$)((function(){var n=new e.default("cms_page_category");n.addExtension(new i.default),n.addExtension(new a.default),n.addExtension(new o.default),n.addExtension(new t.default),n.addExtension(new s.default),n.addExtension(new l.default),n.addExtension(new u.default),n.addExtension(new r.default),n.addExtension(new c.default),n.addExtension(new d.default),n.addExtension(new v.default);var b=new h.default;(0,p.default)({sourceElementSelector:'input[name^="cms_page_category[name]"]',destinationElementSelector:b.localeInputSelector+':not(.d-none) input[name^="cms_page_category[friendly_url]"]'}),new f.default("#cms_page_category_parent_category"),new f.default("#cms_page_category_shop_association").enableAutoCheckChildren(),new g.default({tokenFieldSelector:'input[name^="cms_page_category[meta_keywords]"]',options:{createTokensOnBlur:!0}});var w=new e.default("cms_page");w.addExtension(new i.default),w.addExtension(new a.default),w.addExtension(new o.default),w.addExtension(new t.default),w.addExtension(new c.default),w.addExtension(new u.default),w.addExtension(new l.default),w.addExtension(new r.default),w.addExtension(new d.default),w.addExtension(new v.default),w.addExtension(new s.default),new m.default("cms-pages-showcase-card").addExtension(new y.default)}))})(),window.cms_page={}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvdXRpbHMvcmVzZXRfc2VhcmNoLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC91dGlscy90YWJsZS1zb3J0aW5nLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvZXZlbnQtZW1pdHRlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL2Zvcm0vY2hvaWNlLXRyZWUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9ncmlkL2V4dGVuc2lvbi9hY3Rpb24vcm93L3N1Ym1pdC1yb3ctYWN0aW9uLWV4dGVuc2lvbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL2dyaWQvZXh0ZW5zaW9uL2J1bGstYWN0aW9uLWNoZWNrYm94LWV4dGVuc2lvbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL2dyaWQvZXh0ZW5zaW9uL2NvbHVtbi10b2dnbGluZy1leHRlbnNpb24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9ncmlkL2V4dGVuc2lvbi9leHBvcnQtdG8tc3FsLW1hbmFnZXItZXh0ZW5zaW9uLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvZ3JpZC9leHRlbnNpb24vZmlsdGVycy1yZXNldC1leHRlbnNpb24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9ncmlkL2V4dGVuc2lvbi9maWx0ZXJzLXN1Ym1pdC1idXR0b24tZW5hYmxlci1leHRlbnNpb24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9ncmlkL2V4dGVuc2lvbi9saW5rLXJvdy1hY3Rpb24tZXh0ZW5zaW9uLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvZ3JpZC9leHRlbnNpb24vcG9zaXRpb24tZXh0ZW5zaW9uLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvZ3JpZC9leHRlbnNpb24vcmVsb2FkLWxpc3QtZXh0ZW5zaW9uLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvZ3JpZC9leHRlbnNpb24vc29ydGluZy1leHRlbnNpb24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9ncmlkL2V4dGVuc2lvbi9zdWJtaXQtYnVsay1hY3Rpb24tZXh0ZW5zaW9uLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvZ3JpZC9ncmlkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvbW9kYWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9zaG93Y2FzZS1jYXJkL2V4dGVuc2lvbi9zaG93Y2FzZS1jYXJkLWNsb3NlLWV4dGVuc2lvbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL3Nob3djYXNlLWNhcmQvc2hvd2Nhc2UtY2FyZC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL3RhZ2dhYmxlLWZpZWxkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvdGV4dC10by1saW5rLXJld3JpdGUtY29waWVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvdHJhbnNsYXRhYmxlLWlucHV0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvYXJyYXkvZnJvbS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2lzLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vaXMtaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmlzLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvdGFibGVkbmQvZGlzdC9qcXVlcnkudGFibGVkbmQubWluLmpzIiwid2VicGFjazovL1tuYW1lXS9leHRlcm5hbCBcImpRdWVyeVwiIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9jbXMtcGFnZS9pbmRleC5qcyJdLCJuYW1lcyI6WyIkIiwid2luZG93IiwidXJsIiwicmVkaXJlY3RVcmwiLCJwb3N0IiwidGhlbiIsImxvY2F0aW9uIiwiYXNzaWduIiwiVGFibGVTb3J0aW5nIiwidGFibGUiLCJ0aGlzIiwic2VsZWN0b3IiLCJjb2x1bW5zIiwiZmluZCIsIm9uIiwiZSIsIiRjb2x1bW4iLCJkZWxlZ2F0ZVRhcmdldCIsInNvcnRCeUNvbHVtbiIsImdldFRvZ2dsZWRTb3J0RGlyZWN0aW9uIiwiY29sdW1uTmFtZSIsImRpcmVjdGlvbiIsImlzIiwiRXJyb3IiLCJjb2x1bW4iLCJnZXRVcmwiLCJkYXRhIiwiY29sTmFtZSIsInByZWZpeCIsIlVSTCIsImhyZWYiLCJwYXJhbXMiLCJzZWFyY2hQYXJhbXMiLCJzZXQiLCJ0b1N0cmluZyIsIkV2ZW50RW1pdHRlciIsIkV2ZW50RW1pdHRlckNsYXNzIiwiQ2hvaWNlVHJlZSIsInRyZWVTZWxlY3RvciIsIiRjb250YWluZXIiLCJldmVudCIsIiRpbnB1dFdyYXBwZXIiLCJjdXJyZW50VGFyZ2V0IiwidG9nZ2xlQ2hpbGRUcmVlIiwiJGFjdGlvbiIsInRvZ2dsZVRyZWUiLCJlbmFibGVBdXRvQ2hlY2tDaGlsZHJlbiIsImVuYWJsZUFsbElucHV0cyIsImRpc2FibGVBbGxJbnB1dHMiLCIkY2xpY2tlZENoZWNrYm94IiwiY2xvc2VzdCIsInByb3AiLCJyZW1vdmVBdHRyIiwiYXR0ciIsIiRwYXJlbnRXcmFwcGVyIiwiaGFzQ2xhc3MiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwiJHBhcmVudENvbnRhaW5lciIsImFjdGlvbiIsImNvbmZpZyIsImV4cGFuZCIsImNvbGxhcHNlIiwibmV4dEFjdGlvbiIsInRleHQiLCJpY29uIiwiZWFjaCIsImluZGV4IiwiaXRlbSIsIiRpdGVtIiwiU3VibWl0Um93QWN0aW9uRXh0ZW5zaW9uIiwiZ3JpZCIsImdldENvbnRhaW5lciIsInByZXZlbnREZWZhdWx0IiwiJGJ1dHRvbiIsImNvbmZpcm1NZXNzYWdlIiwiY29uZmlybVRpdGxlIiwibWV0aG9kIiwic2hvd0NvbmZpcm1Nb2RhbCIsImxlbmd0aCIsImNvbmZpcm0iLCJwb3N0Rm9ybSIsImlzR2V0T3JQb3N0TWV0aG9kIiwiaW5jbHVkZXMiLCIkZm9ybSIsImFwcGVuZFRvIiwiYXBwZW5kIiwidHlwZSIsIm5hbWUiLCJ2YWx1ZSIsInN1Ym1pdCIsIiRzdWJtaXRCdG4iLCJjb25maXJtQnV0dG9uTGFiZWwiLCJjbG9zZUJ1dHRvbkxhYmVsIiwiY29uZmlybUJ1dHRvbkNsYXNzIiwiQ29uZmlybU1vZGFsIiwiaWQiLCJnZXRJZCIsInNob3ciLCJCdWxrQWN0aW9uQ2hlY2tib3hFeHRlbnNpb24iLCJoYW5kbGVCdWxrQWN0aW9uQ2hlY2tib3hTZWxlY3QiLCJoYW5kbGVCdWxrQWN0aW9uU2VsZWN0QWxsQ2hlY2tib3giLCJpc0NoZWNrZWQiLCJlbmFibGVCdWxrQWN0aW9uc0J0biIsImRpc2FibGVCdWxrQWN0aW9uc0J0biIsIkNvbHVtblRvZ2dsaW5nRXh0ZW5zaW9uIiwidG9nZ2xlVmFsdWUiLCJyb3ciLCJ0b2dnbGVVcmwiLCJzdWJtaXRBc0Zvcm0iLCJFeHBvcnRUb1NxbE1hbmFnZXJFeHRlbnNpb24iLCJnZXRIZWFkZXJDb250YWluZXIiLCJvblNob3dTcWxRdWVyeUNsaWNrIiwib25FeHBvcnRTcWxNYW5hZ2VyQ2xpY2siLCIkc3FsTWFuYWdlckZvcm0iLCJmaWxsRXhwb3J0Rm9ybSIsIiRtb2RhbCIsIm1vZGFsIiwicXVlcnkiLCJ2YWwiLCJnZXROYW1lRnJvbUJyZWFkY3J1bWIiLCIkYnJlYWRjcnVtYnMiLCJpIiwiJGJyZWFkY3J1bWIiLCJicmVhZGNydW1iVGl0bGUiLCJjb25jYXQiLCJGaWx0ZXJzUmVzZXRFeHRlbnNpb24iLCJGaWx0ZXJzU3VibWl0QnV0dG9uRW5hYmxlckV4dGVuc2lvbiIsIiRmaWx0ZXJzUm93IiwiTGlua1Jvd0FjdGlvbkV4dGVuc2lvbiIsImluaXRSb3dMaW5rcyIsImluaXRDb25maXJtYWJsZUFjdGlvbnMiLCIkcGFyZW50Um93IiwiJHJvd0FjdGlvbiIsIiRwYXJlbnRDZWxsIiwiY2xpY2thYmxlQ2VsbHMiLCJub3QiLCJpc0RyYWdnaW5nIiwibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwidW5iaW5kIiwibW91c2V1cCIsIndhc0RyYWdnaW5nIiwiZG9jdW1lbnQiLCJQb3NpdGlvbkV4dGVuc2lvbiIsImV4dGVuZCIsImFkZElkc1RvR3JpZFRhYmxlUm93cyIsInRhYmxlRG5EIiwib25EcmFnQ2xhc3MiLCJkcmFnSGFuZGxlIiwib25Ecm9wIiwiaGFuZGxlUG9zaXRpb25DaGFuZ2UiLCJob3ZlciIsIiRyb3dQb3NpdGlvbkNvbnRhaW5lciIsInVwZGF0ZVVybCIsInBvc2l0aW9ucyIsImdldFJvd3NQb3NpdGlvbnMiLCJ1cGRhdGVQb3NpdGlvbiIsInJvd3NEYXRhIiwiSlNPTiIsInBhcnNlIiwianNvbml6ZSIsImNvbXBsZXRlUm93c0RhdGEiLCJ0ckRhdGEiLCJwdXNoIiwicm93TWFya2VyIiwib2Zmc2V0IiwiY29tcHV0ZU1hcHBpbmdCZXR3ZWVuT2xkQW5kTmV3UG9zaXRpb25zIiwiY291bnRlciIsInBvc2l0aW9uV3JhcHBlciIsIiRwb3NpdGlvbldyYXBwZXIiLCJwb3NpdGlvbnNOYiIsInBvc2l0aW9uIiwicm93SWQiLCJvbGRQb3NpdGlvbiIsIm5ld1Bvc2l0aW9uIiwicmVnZXgiLCJtYXBwaW5nIiwiQXJyYXkiLCJmaWxsIiwibWFwIiwiT2JqZWN0IiwiZXhlYyIsInBhcnNlSW50IiwiUmVsb2FkTGlzdEV4dGVuc2lvbiIsInJlbG9hZCIsIlNvcnRpbmdFeHRlbnNpb24iLCIkc29ydGFibGVUYWJsZSIsImF0dGFjaCIsIlN1Ym1pdEJ1bGtBY3Rpb25FeHRlbnNpb24iLCJ1bmRlZmluZWQiLCJHcmlkIiwiZXh0ZW5zaW9uIiwiY29uZmlybUNhbGxiYWNrIiwiY2FuY2VsQ2FsbGJhY2siLCJjbG9zYWJsZSIsImN1c3RvbUJ1dHRvbnMiLCJjb250YWluZXIiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiZGlhbG9nIiwiY29udGVudCIsImhlYWRlciIsInRpdGxlIiwiaW5uZXJIVE1MIiwiY2xvc2VJY29uIiwic2V0QXR0cmlidXRlIiwiZGF0YXNldCIsImRpc21pc3MiLCJib2R5IiwibWVzc2FnZSIsImZvb3RlciIsImNsb3NlQnV0dG9uIiwiY29uZmlybUJ1dHRvbiIsImFwcGVuZENoaWxkIiwiTW9kYWwiLCJhZGRFdmVudExpc3RlbmVyIiwiYmFja2Ryb3AiLCJrZXlib2FyZCIsInF1ZXJ5U2VsZWN0b3IiLCJyZW1vdmUiLCJTaG93Y2FzZUNhcmRDbG9zZUV4dGVuc2lvbiIsImhlbHBlckJsb2NrIiwiZXZ0IiwiJGJ0biIsInRhcmdldCIsImNhcmROYW1lIiwiY2xvc2UiLCJTaG93Y2FzZUNhcmQiLCJ0b2tlbkZpZWxkU2VsZWN0b3IiLCJvcHRpb25zIiwidG9rZW5maWVsZCIsInNvdXJjZUVsZW1lbnRTZWxlY3RvciIsImRlc3RpbmF0aW9uRWxlbWVudFNlbGVjdG9yIiwiZXZlbnROYW1lIiwic3RyMnVybCIsIlRyYW5zbGF0YWJsZUlucHV0Iiwib3B0cyIsImxvY2FsZUl0ZW1TZWxlY3RvciIsImxvY2FsZUJ1dHRvblNlbGVjdG9yIiwibG9jYWxlSW5wdXRTZWxlY3RvciIsInNlbGVjdGVkTG9jYWxlIiwidG9nZ2xlTGFuZ3VhZ2UiLCJiaW5kIiwidG9nZ2xlSW5wdXRzIiwicmVmcmVzaEZvcm1JbnB1dHMiLCJmb3JtIiwicmVmcmVzaElucHV0cyIsImdldFNlbGVjdGVkTG9jYWxlIiwiZW1pdCIsImxvY2FsZUl0ZW0iLCJsb2NhbGVCdXR0b24iLCJjaGFuZ2VMYW5ndWFnZVVybCIsInNhdmVTZWxlY3RlZExhbmd1YWdlIiwibGFuZ3VhZ2VfaXNvX2NvZGUiLCJtb2R1bGUiLCJleHBvcnRzIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiVHlwZUVycm9yIiwib2JqIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmluZVByb3BlcnRpZXMiLCJwcm9wcyIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJrZXkiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJwcm90b3R5cGUiLCJfaXNJdGVyYWJsZTMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2dldEl0ZXJhdG9yMyIsImFyciIsImlzQXJyYXkiLCJfYXJyIiwiX24iLCJfZCIsIl9lIiwiX3MiLCJfaSIsIm5leHQiLCJkb25lIiwiZXJyIiwic2xpY2VJdGVyYXRvciIsIl9mcm9tMiIsImFycjIiLCIkT2JqZWN0IiwiaXQiLCJkZXNjIiwiZGVmaW5lUHJvcGVydHkiLCJpc09iamVjdCIsInRvSU9iamVjdCIsInRvTGVuZ3RoIiwidG9BYnNvbHV0ZUluZGV4IiwiSVNfSU5DTFVERVMiLCIkdGhpcyIsImVsIiwiZnJvbUluZGV4IiwiTyIsImNvZiIsIlRBRyIsIkFSRyIsImFyZ3VtZW50cyIsIlQiLCJCIiwidHJ5R2V0IiwiY2FsbGVlIiwiY2FsbCIsInNsaWNlIiwiY29yZSIsInZlcnNpb24iLCJfX2UiLCIkZGVmaW5lUHJvcGVydHkiLCJjcmVhdGVEZXNjIiwib2JqZWN0IiwiZiIsImFGdW5jdGlvbiIsImZuIiwidGhhdCIsImEiLCJiIiwiYyIsImFwcGx5IiwiZ2V0Iiwic3BsaXQiLCJnbG9iYWwiLCJjdHgiLCJoaWRlIiwiaGFzIiwiJGV4cG9ydCIsInNvdXJjZSIsIm93biIsIm91dCIsIklTX0ZPUkNFRCIsIkYiLCJJU19HTE9CQUwiLCJHIiwiSVNfU1RBVElDIiwiUyIsIklTX1BST1RPIiwiUCIsIklTX0JJTkQiLCJJU19XUkFQIiwiVyIsImV4cFByb3RvIiwiQyIsIkZ1bmN0aW9uIiwidmlydHVhbCIsIlIiLCJVIiwiTWF0aCIsInNlbGYiLCJfX2ciLCJoYXNPd25Qcm9wZXJ0eSIsImRQIiwiZG9jdW1lbnRFbGVtZW50IiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJJdGVyYXRvcnMiLCJJVEVSQVRPUiIsIkFycmF5UHJvdG8iLCJhbk9iamVjdCIsIml0ZXJhdG9yIiwiZW50cmllcyIsInJldCIsImNyZWF0ZSIsInNldFRvU3RyaW5nVGFnIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJOQU1FIiwiTElCUkFSWSIsInJlZGVmaW5lIiwiJGl0ZXJDcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsIkJVR0dZIiwia2V5cyIsIktFWVMiLCJWQUxVRVMiLCJyZXR1cm5UaGlzIiwiQmFzZSIsIkRFRkFVTFQiLCJJU19TRVQiLCJGT1JDRUQiLCJtZXRob2RzIiwiZ2V0TWV0aG9kIiwia2luZCIsInByb3RvIiwiREVGX1ZBTFVFUyIsIlZBTFVFU19CVUciLCIkbmF0aXZlIiwiJGRlZmF1bHQiLCIkZW50cmllcyIsIiRhbnlOYXRpdmUiLCJ2YWx1ZXMiLCJTQUZFX0NMT1NJTkciLCJyaXRlciIsImZyb20iLCJza2lwQ2xvc2luZyIsInNhZmUiLCJpdGVyIiwiZFBzIiwiZW51bUJ1Z0tleXMiLCJJRV9QUk9UTyIsIkVtcHR5IiwiY3JlYXRlRGljdCIsImlmcmFtZURvY3VtZW50IiwiaWZyYW1lIiwic3R5bGUiLCJkaXNwbGF5Iiwic3JjIiwiY29udGVudFdpbmRvdyIsIm9wZW4iLCJ3cml0ZSIsImx0IiwiUHJvcGVydGllcyIsInJlc3VsdCIsIklFOF9ET01fREVGSU5FIiwidG9QcmltaXRpdmUiLCJBdHRyaWJ1dGVzIiwiZ2V0S2V5cyIsInRvT2JqZWN0IiwiT2JqZWN0UHJvdG8iLCJjb25zdHJ1Y3RvciIsImFycmF5SW5kZXhPZiIsIm5hbWVzIiwiJGtleXMiLCJiaXRtYXAiLCJkZWYiLCJ0YWciLCJzdGF0Iiwic2hhcmVkIiwidWlkIiwiU0hBUkVEIiwic3RvcmUiLCJtb2RlIiwiY29weXJpZ2h0IiwidG9JbnRlZ2VyIiwiZGVmaW5lZCIsIlRPX1NUUklORyIsInBvcyIsInMiLCJTdHJpbmciLCJsIiwiY2hhckNvZGVBdCIsImNoYXJBdCIsIm1heCIsIm1pbiIsImNlaWwiLCJmbG9vciIsImlzTmFOIiwiSU9iamVjdCIsInZhbHVlT2YiLCJweCIsInJhbmRvbSIsIlN5bWJvbCIsIlVTRV9TWU1CT0wiLCJjbGFzc29mIiwiaXRlckZuIiwiaXNBcnJheUl0ZXIiLCJjcmVhdGVQcm9wZXJ0eSIsImdldEl0ZXJGbiIsImFycmF5TGlrZSIsInN0ZXAiLCJhTGVuIiwibWFwZm4iLCJhZGRUb1Vuc2NvcGFibGVzIiwiaXRlcmF0ZWQiLCJfdCIsIl9rIiwiQXJndW1lbnRzIiwiJGF0IiwicG9pbnQiLCJUT19TVFJJTkdfVEFHIiwiRE9NSXRlcmFibGVzIiwiQ29sbGVjdGlvbiIsIlJlZmxlY3RPd25LZXlzIiwiUmVmbGVjdCIsIlJlZmxlY3RBcHBseSIsInJlY2VpdmVyIiwiYXJncyIsIm93bktleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiTnVtYmVySXNOYU4iLCJOdW1iZXIiLCJpbml0IiwiX2V2ZW50cyIsIl9ldmVudHNDb3VudCIsIl9tYXhMaXN0ZW5lcnMiLCJkZWZhdWx0TWF4TGlzdGVuZXJzIiwiY2hlY2tMaXN0ZW5lciIsImxpc3RlbmVyIiwiX2dldE1heExpc3RlbmVycyIsIl9hZGRMaXN0ZW5lciIsInByZXBlbmQiLCJtIiwiZXZlbnRzIiwiZXhpc3RpbmciLCJ3YXJuaW5nIiwibmV3TGlzdGVuZXIiLCJ1bnNoaWZ0Iiwid2FybmVkIiwidyIsImVtaXR0ZXIiLCJjb3VudCIsImNvbnNvbGUiLCJ3YXJuIiwib25jZVdyYXBwZXIiLCJmaXJlZCIsInJlbW92ZUxpc3RlbmVyIiwid3JhcEZuIiwiX29uY2VXcmFwIiwic3RhdGUiLCJ3cmFwcGVkIiwiX2xpc3RlbmVycyIsInVud3JhcCIsImV2bGlzdGVuZXIiLCJ1bndyYXBMaXN0ZW5lcnMiLCJhcnJheUNsb25lIiwibGlzdGVuZXJDb3VudCIsIm4iLCJjb3B5IiwiYXJnIiwiUmFuZ2VFcnJvciIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImRvRXJyb3IiLCJlcnJvciIsImVyIiwiY29udGV4dCIsImhhbmRsZXIiLCJsZW4iLCJsaXN0ZW5lcnMiLCJhZGRMaXN0ZW5lciIsInByZXBlbmRMaXN0ZW5lciIsIm9uY2UiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdCIsIm9yaWdpbmFsTGlzdGVuZXIiLCJzaGlmdCIsInBvcCIsInNwbGljZU9uZSIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsInJhd0xpc3RlbmVycyIsImV2ZW50TmFtZXMiLCJnIiwialF1ZXJ5IiwicmVhZHkiLCJtYXRjaCIsInRyaW0iLCJvbkRyYWdTdHlsZSIsIm9uRHJvcFN0eWxlIiwib25EcmFnU3RhcnQiLCJvbkRyYWdTdG9wIiwic2Nyb2xsQW1vdW50Iiwic2Vuc2l0aXZpdHkiLCJoaWVyYXJjaHlMZXZlbCIsImluZGVudEFydGlmYWN0IiwiYXV0b1dpZHRoQWRqdXN0IiwiYXV0b0NsZWFuUmVsYXRpb25zIiwianNvblByZXRpZnlTZXBhcmF0b3IiLCJzZXJpYWxpemVSZWdleHAiLCJSZWdFeHAiLCJzZXJpYWxpemVQYXJhbU5hbWUiLCJjdXJyZW50VGFibGUiLCJkcmFnT2JqZWN0IiwibW91c2VPZmZzZXQiLCJvbGRYIiwib2xkWSIsImJ1aWxkIiwidGFibGVEbkRDb25maWciLCJtYWtlRHJhZ2dhYmxlIiwibWFrZUluZGVudGVkIiwiZCIsInJvd3MiLCJmaXJzdCIsImgiLCJjc3MiLCJ3aGl0ZVNwYWNlIiwiaiIsIndpZHRoIiwib2Zmc2V0V2lkdGgiLCJjaGlsZHJlbiIsImluaXRpYWxpc2VEcmFnIiwicGFyZW50cyIsInRhZ05hbWUiLCJjdXJyZW50T3JkZXIiLCJyZXBsYWNlIiwiam9pbiIsImdldE1vdXNlT2Zmc2V0Iiwib3JpZ2luYWxPcmRlciIsInVwZGF0ZVRhYmxlcyIsIm1vdXNlQ29vcmRzIiwib3JpZ2luYWxFdmVudCIsImNoYW5nZWRUb3VjaGVzIiwieCIsImNsaWVudFgiLCJ5IiwiY2xpZW50WSIsInBhZ2VYIiwicGFnZVkiLCJzY3JvbGxMZWZ0IiwiY2xpZW50TGVmdCIsInNjcm9sbFRvcCIsImNsaWVudFRvcCIsImdldFBvc2l0aW9uIiwib2Zmc2V0SGVpZ2h0IiwiZmlyc3RDaGlsZCIsIm9mZnNldFBhcmVudCIsIm9mZnNldExlZnQiLCJvZmZzZXRUb3AiLCJhdXRvU2Nyb2xsIiwicGFnZVlPZmZzZXQiLCJpbm5lckhlaWdodCIsImNsaWVudEhlaWdodCIsImFsbCIsImNvbXBhdE1vZGUiLCJzY3JvbGxCeSIsIm1vdmVWZXJ0aWNsZSIsInZlcnRpY2FsIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsIm5leHRTaWJsaW5nIiwibW92ZUhvcml6b250YWwiLCJob3Jpem9udGFsIiwicHJldiIsImZpbmREcm9wVGFyZ2V0Um93IiwiZmluZERyYWdEaXJlY3Rpb24iLCJvbkFsbG93RHJvcCIsInByb2Nlc3NNb3VzZXVwIiwiZmFkZUluIiwic3RyaW5naWZ5IiwidGFibGVEYXRhIiwic2VyaWFsaXplIiwicGFyYW0iLCJzZXJpYWxpemVUYWJsZSIsInNlcmlhbGl6ZVRhYmxlcyIsImsiLCJjb2RlIiwibWFrZUFycmF5IiwidGFibGVEbkRVcGRhdGUiLCJ0YWJsZURuRFNlcmlhbGl6ZSIsInByb3h5IiwidGFibGVEbkRTZXJpYWxpemVBbGwiLCJ0YWJsZURuRERhdGEiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiY21zQ2F0ZWdvcnkiLCJhZGRFeHRlbnNpb24iLCJSZWxvYWRMaXN0QWN0aW9uRXh0ZW5zaW9uIiwiU3VibWl0QnVsa0V4dGVuc2lvbiIsInRyYW5zbGF0b3JJbnB1dCIsIlRhZ2dhYmxlRmllbGQiLCJjcmVhdGVUb2tlbnNPbkJsdXIiLCJjbXNHcmlkIl0sIm1hcHBpbmdzIjoiOzRGQTZCT0EsRUFBS0MsT0FBTEQsRSxVQUVNLFNBQXFCRSxFQUFLQyxHQUNyQ0gsRUFBRUksS0FBS0YsR0FBS0csTUFBSyxrQkFBTUosT0FBT0ssU0FBU0MsT0FBT0osUSxxS0NQekNILEVBQUtDLE9BQUxELEVBTURRLEUsV0FJSixXQUFZQyxJQUFPLHFCQUNqQkMsS0FBS0MsU0FBVyxzQkFDaEJELEtBQUtFLFFBQVVaLEVBQUVTLEdBQU9JLEtBQUtILEtBQUtDLFUsc0RBTTNCLFdBQ1BELEtBQUtFLFFBQVFFLEdBQUcsU0FBUyxTQUFDQyxHQUN4QixJQUFNQyxFQUFVaEIsRUFBRWUsRUFBRUUsZ0JBQ3BCLEVBQUtDLGFBQWFGLEVBQVMsRUFBS0csd0JBQXdCSCxTLDZCQVNyREksRUFBWUMsR0FDakIsSUFBTUwsRUFBVU4sS0FBS0UsUUFBUVUsR0FBYix3QkFBd0NGLEVBQXhDLE1BRWhCLElBQUtKLEVBQ0gsTUFBTSxJQUFJ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bUJBQW9CLGtEQUNwQkMsUUFBUyxDQUNQOGEsb0JBQW9CLEtBSXhCLElBQU1DLEVBQVUsSUFBSXZkLFVBQUssWUFDekJ1ZCxFQUFRTixhQUFhLElBQUlDLFdBQ3pCSyxFQUFRTixhQUFhLElBQUlsaUIsV0FDekJ3aUIsRUFBUU4sYUFBYSxJQUFJbGhCLFdBQ3pCd2hCLEVBQVFOLGFBQWEsSUFBSXRkLFdBQ3pCNGQsRUFBUU4sYUFBYSxJQUFJdmlCLFdBQ3pCNmlCLEVBQVFOLGFBQWEsSUFBSTdpQixXQUN6Qm1qQixFQUFRTixhQUFhLElBQUlFLFdBQ3pCSSxFQUFRTixhQUFhLElBQUkxa0IsV0FDekJnbEIsRUFBUU4sYUFBYSxJQUFJaGdCLFdBQ3pCc2dCLEVBQVFOLGFBQWEsSUFBSWpoQixXQUN6QnVoQixFQUFRTixhQUFhLElBQUkvZ0IsV0FFTCxJQUFJb0csVUFBYSwyQkFDekIyYSxhQUFhLElBQUlsYixlIiwiZmlsZSI6ImNtc19wYWdlLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuLyoqXG4gKiBTZW5kIGEgUG9zdCBSZXF1ZXN0IHRvIHJlc2V0IHNlYXJjaCBBY3Rpb24uXG4gKi9cblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG5jb25zdCBpbml0ID0gZnVuY3Rpb24gcmVzZXRTZWFyY2godXJsLCByZWRpcmVjdFVybCkge1xuICAkLnBvc3QodXJsKS50aGVuKCgpID0+IHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24ocmVkaXJlY3RVcmwpKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGluaXQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBNYWtlcyBhIHRhYmxlIHNvcnRhYmxlIGJ5IGNvbHVtbnMuXG4gKiBUaGlzIGZvcmNlcyBhIHBhZ2UgcmVsb2FkIHdpdGggbW9yZSBxdWVyeSBwYXJhbWV0ZXJzLlxuICovXG5jbGFzcyBUYWJsZVNvcnRpbmcge1xuICAvKipcbiAgICogQHBhcmFtIHtqUXVlcnl9IHRhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0YWJsZSkge1xuICAgIHRoaXMuc2VsZWN0b3IgPSAnLnBzLXNvcnRhYmxlLWNvbHVtbic7XG4gICAgdGhpcy5jb2x1bW5zID0gJCh0YWJsZSkuZmluZCh0aGlzLnNlbGVjdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyB0aGUgbGlzdGVuZXJzXG4gICAqL1xuICBhdHRhY2goKSB7XG4gICAgdGhpcy5jb2x1bW5zLm9uKCdjbGljaycsIChlKSA9PiB7XG4gICAgICBjb25zdCAkY29sdW1uID0gJChlLmRlbGVnYXRlVGFyZ2V0KTtcbiAgICAgIHRoaXMuc29ydEJ5Q29sdW1uKCRjb2x1bW4sIHRoaXMuZ2V0VG9nZ2xlZFNvcnREaXJlY3Rpb24oJGNvbHVtbikpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgdXNpbmcgYSBjb2x1bW4gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uIFwiYXNjXCIgb3IgXCJkZXNjXCJcbiAgICovXG4gIHNvcnRCeShjb2x1bW5OYW1lLCBkaXJlY3Rpb24pIHtcbiAgICBjb25zdCAkY29sdW1uID0gdGhpcy5jb2x1bW5zLmlzKGBbZGF0YS1zb3J0LWNvbC1uYW1lPVwiJHtjb2x1bW5OYW1lfVwiXWApO1xuXG4gICAgaWYgKCEkY29sdW1uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzb3J0IGJ5IFwiJHtjb2x1bW5OYW1lfVwiOiBpbnZhbGlkIGNvbHVtbmApO1xuICAgIH1cblxuICAgIHRoaXMuc29ydEJ5Q29sdW1uKCRjb2x1bW4sIGRpcmVjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB1c2luZyBhIGNvbHVtbiBlbGVtZW50XG4gICAqIEBwYXJhbSB7alF1ZXJ5fSBjb2x1bW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbiBcImFzY1wiIG9yIFwiZGVzY1wiXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzb3J0QnlDb2x1bW4oY29sdW1uLCBkaXJlY3Rpb24pIHtcbiAgICB3aW5kb3cubG9jYXRpb24gPSB0aGlzLmdldFVybChcbiAgICAgIGNvbHVtbi5kYXRhKCdzb3J0Q29sTmFtZScpLFxuICAgICAgKGRpcmVjdGlvbiA9PT0gJ2Rlc2MnKSA/ICdkZXNjJyA6ICdhc2MnLFxuICAgICAgY29sdW1uLmRhdGEoJ3NvcnRQcmVmaXgnKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGludmVydGVkIGRpcmVjdGlvbiB0byBzb3J0IGFjY29yZGluZyB0byB0aGUgY29sdW1uJ3MgY3VycmVudCBvbmVcbiAgICogQHBhcmFtIHtqUXVlcnl9IGNvbHVtblxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRUb2dnbGVkU29ydERpcmVjdGlvbihjb2x1bW4pIHtcbiAgICByZXR1cm4gY29sdW1uLmRhdGEoJ3NvcnREaXJlY3Rpb24nKSA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB1cmwgZm9yIHRoZSBzb3J0ZWQgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbE5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldFVybChjb2xOYW1lLCBkaXJlY3Rpb24sIHByZWZpeCkge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHVybC5zZWFyY2hQYXJhbXM7XG5cbiAgICBpZiAocHJlZml4KSB7XG4gICAgICBwYXJhbXMuc2V0KGAke3ByZWZpeH1bb3JkZXJCeV1gLCBjb2xOYW1lKTtcbiAgICAgIHBhcmFtcy5zZXQoYCR7cHJlZml4fVtzb3J0T3JkZXJdYCwgZGlyZWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnNldCgnb3JkZXJCeScsIGNvbE5hbWUpO1xuICAgICAgcGFyYW1zLnNldCgnc29ydE9yZGVyJywgZGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVTb3J0aW5nO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgRXZlbnRFbWl0dGVyQ2xhc3MgZnJvbSAnZXZlbnRzJztcblxuLyoqXG4gKiBXZSBpbnN0YW5jaWF0ZSBvbmUgRXZlbnRFbWl0dGVyIChyZXN0cmljdGVkIHZpYSBhIGNvbnN0KSBzbyB0aGF0IGV2ZXJ5IGNvbXBvbmVudHNcbiAqIHJlZ2lzdGVyL2Rpc3BhdGNoIG9uIHRoZSBzYW1lIG9uZSBhbmQgY2FuIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlci5cbiAqL1xuZXhwb3J0IGNvbnN0IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXJDbGFzcygpO1xuXG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBIYW5kbGVzIFVJIGludGVyYWN0aW9ucyBvZiBjaG9pY2UgdHJlZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VUcmVlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0cmVlU2VsZWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKHRyZWVTZWxlY3Rvcikge1xuICAgIHRoaXMuJGNvbnRhaW5lciA9ICQodHJlZVNlbGVjdG9yKTtcblxuICAgIHRoaXMuJGNvbnRhaW5lci5vbignY2xpY2snLCAnLmpzLWlucHV0LXdyYXBwZXInLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0ICRpbnB1dFdyYXBwZXIgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuXG4gICAgICB0aGlzLnRvZ2dsZUNoaWxkVHJlZSgkaW5wdXRXcmFwcGVyKTtcbiAgICB9KTtcblxuICAgIHRoaXMuJGNvbnRhaW5lci5vbignY2xpY2snLCAnLmpzLXRvZ2dsZS1jaG9pY2UtdHJlZS1hY3Rpb24nLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0ICRhY3Rpb24gPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuXG4gICAgICB0aGlzLnRvZ2dsZVRyZWUoJGFjdGlvbik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZW5hYmxlQXV0b0NoZWNrQ2hpbGRyZW46ICgpID0+IHRoaXMuZW5hYmxlQXV0b0NoZWNrQ2hpbGRyZW4oKSxcbiAgICAgIGVuYWJsZUFsbElucHV0czogKCkgPT4gdGhpcy5lbmFibGVBbGxJbnB1dHMoKSxcbiAgICAgIGRpc2FibGVBbGxJbnB1dHM6ICgpID0+IHRoaXMuZGlzYWJsZUFsbElucHV0cygpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIGF1dG9tYXRpYyBjaGVjay91bmNoZWNrIG9mIGNsaWNrZWQgaXRlbSdzIGNoaWxkcmVuLlxuICAgKi9cbiAgZW5hYmxlQXV0b0NoZWNrQ2hpbGRyZW4oKSB7XG4gICAgdGhpcy4kY29udGFpbmVyLm9uKCdjaGFuZ2UnLCAnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCAkY2xpY2tlZENoZWNrYm94ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgIGNvbnN0ICRpdGVtV2l0aENoaWxkcmVuID0gJGNsaWNrZWRDaGVja2JveC5jbG9zZXN0KCdsaScpO1xuXG4gICAgICAkaXRlbVdpdGhDaGlsZHJlblxuICAgICAgICAuZmluZCgndWwgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJylcbiAgICAgICAgLnByb3AoJ2NoZWNrZWQnLCAkY2xpY2tlZENoZWNrYm94LmlzKCc6Y2hlY2tlZCcpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgYWxsIGlucHV0cyBpbiB0aGUgY2hvaWNlIHRyZWUuXG4gICAqL1xuICBlbmFibGVBbGxJbnB1dHMoKSB7XG4gICAgdGhpcy4kY29udGFpbmVyLmZpbmQoJ2lucHV0JykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIGFsbCBpbnB1dHMgaW4gdGhlIGNob2ljZSB0cmVlLlxuICAgKi9cbiAgZGlzYWJsZUFsbElucHV0cygpIHtcbiAgICB0aGlzLiRjb250YWluZXIuZmluZCgnaW5wdXQnKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxhcHNlIG9yIGV4cGFuZCBzdWItdHJlZSBmb3Igc2luZ2xlIHBhcmVudFxuICAgKlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJGlucHV0V3JhcHBlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdG9nZ2xlQ2hpbGRUcmVlKCRpbnB1dFdyYXBwZXIpIHtcbiAgICBjb25zdCAkcGFyZW50V3JhcHBlciA9ICRpbnB1dFdyYXBwZXIuY2xvc2VzdCgnbGknKTtcblxuICAgIGlmICgkcGFyZW50V3JhcHBlci5oYXNDbGFzcygnZXhwYW5kZWQnKSkge1xuICAgICAgJHBhcmVudFdyYXBwZXJcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdleHBhbmRlZCcpXG4gICAgICAgIC5hZGRDbGFzcygnY29sbGFwc2VkJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoJHBhcmVudFdyYXBwZXIuaGFzQ2xhc3MoJ2NvbGxhcHNlZCcpKSB7XG4gICAgICAkcGFyZW50V3JhcHBlclxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNlZCcpXG4gICAgICAgIC5hZGRDbGFzcygnZXhwYW5kZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2Ugb3IgZXhwYW5kIHdob2xlIHRyZWVcbiAgICpcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRhY3Rpb25cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRvZ2dsZVRyZWUoJGFjdGlvbikge1xuICAgIGNvbnN0ICRwYXJlbnRDb250YWluZXIgPSAkYWN0aW9uLmNsb3Nlc3QoJy5qcy1jaG9pY2UtdHJlZS1jb250YWluZXInKTtcbiAgICBjb25zdCBhY3Rpb24gPSAkYWN0aW9uLmRhdGEoJ2FjdGlvbicpO1xuXG4gICAgLy8gdG9nZ2xlIGFjdGlvbiBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgYWRkQ2xhc3M6IHtcbiAgICAgICAgZXhwYW5kOiAnZXhwYW5kZWQnLFxuICAgICAgICBjb2xsYXBzZTogJ2NvbGxhcHNlZCcsXG4gICAgICB9LFxuICAgICAgcmVtb3ZlQ2xhc3M6IHtcbiAgICAgICAgZXhwYW5kOiAnY29sbGFwc2VkJyxcbiAgICAgICAgY29sbGFwc2U6ICdleHBhbmRlZCcsXG4gICAgICB9LFxuICAgICAgbmV4dEFjdGlvbjoge1xuICAgICAgICBleHBhbmQ6ICdjb2xsYXBzZScsXG4gICAgICAgIGNvbGxhcHNlOiAnZXhwYW5kJyxcbiAgICAgIH0sXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIGV4cGFuZDogJ2NvbGxhcHNlZC10ZXh0JyxcbiAgICAgICAgY29sbGFwc2U6ICdleHBhbmRlZC10ZXh0JyxcbiAgICAgIH0sXG4gICAgICBpY29uOiB7XG4gICAgICAgIGV4cGFuZDogJ2NvbGxhcHNlZC1pY29uJyxcbiAgICAgICAgY29sbGFwc2U6ICdleHBhbmRlZC1pY29uJyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgICRwYXJlbnRDb250YWluZXIuZmluZCgnbGknKS5lYWNoKChpbmRleCwgaXRlbSkgPT4ge1xuICAgICAgY29uc3QgJGl0ZW0gPSAkKGl0ZW0pO1xuXG4gICAgICBpZiAoJGl0ZW0uaGFzQ2xhc3MoY29uZmlnLnJlbW92ZUNsYXNzW2FjdGlvbl0pKSB7XG4gICAgICAgICRpdGVtLnJlbW92ZUNsYXNzKGNvbmZpZy5yZW1vdmVDbGFzc1thY3Rpb25dKVxuICAgICAgICAgIC5hZGRDbGFzcyhjb25maWcuYWRkQ2xhc3NbYWN0aW9uXSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkYWN0aW9uLmRhdGEoJ2FjdGlvbicsIGNvbmZpZy5uZXh0QWN0aW9uW2FjdGlvbl0pO1xuICAgICRhY3Rpb24uZmluZCgnLm1hdGVyaWFsLWljb25zJykudGV4dCgkYWN0aW9uLmRhdGEoY29uZmlnLmljb25bYWN0aW9uXSkpO1xuICAgICRhY3Rpb24uZmluZCgnLmpzLXRvZ2dsZS10ZXh0JykudGV4dCgkYWN0aW9uLmRhdGEoY29uZmlnLnRleHRbYWN0aW9uXSkpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBDb25maXJtTW9kYWwgZnJvbSAnQGNvbXBvbmVudHMvbW9kYWwnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogQ2xhc3MgU3VibWl0Um93QWN0aW9uRXh0ZW5zaW9uIGhhbmRsZXMgc3VibWl0dGluZyBvZiByb3cgYWN0aW9uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1Ym1pdFJvd0FjdGlvbkV4dGVuc2lvbiB7XG4gIC8qKlxuICAgKiBFeHRlbmQgZ3JpZFxuICAgKlxuICAgKiBAcGFyYW0ge0dyaWR9IGdyaWRcbiAgICovXG4gIGV4dGVuZChncmlkKSB7XG4gICAgZ3JpZC5nZXRDb250YWluZXIoKS5vbignY2xpY2snLCAnLmpzLXN1Ym1pdC1yb3ctYWN0aW9uJywgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCAkYnV0dG9uID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgIGNvbnN0IGNvbmZpcm1NZXNzYWdlID0gJGJ1dHRvbi5kYXRhKCdjb25maXJtTWVzc2FnZScpO1xuICAgICAgY29uc3QgY29uZmlybVRpdGxlID0gJGJ1dHRvbi5kYXRhKCd0aXRsZScpO1xuXG4gICAgICBjb25zdCBtZXRob2QgPSAkYnV0dG9uLmRhdGEoJ21ldGhvZCcpO1xuXG4gICAgICBpZiAoY29uZmlybVRpdGxlKSB7XG4gICAgICAgIHRoaXMuc2hvd0NvbmZpcm1Nb2RhbCgkYnV0dG9uLCBncmlkLCBjb25maXJtTWVzc2FnZSwgY29uZmlybVRpdGxlLCBtZXRob2QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNvbmZpcm1NZXNzYWdlLmxlbmd0aCAmJiAhd2luZG93LmNvbmZpcm0oY29uZmlybU1lc3NhZ2UpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wb3N0Rm9ybSgkYnV0dG9uLCBtZXRob2QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcG9zdEZvcm0oJGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgY29uc3QgaXNHZXRPclBvc3RNZXRob2QgPSBbJ0dFVCcsICdQT1NUJ10uaW5jbHVkZXMobWV0aG9kKTtcblxuICAgIGNvbnN0ICRmb3JtID0gJCgnPGZvcm0+Jywge1xuICAgICAgYWN0aW9uOiAkYnV0dG9uLmRhdGEoJ3VybCcpLFxuICAgICAgbWV0aG9kOiBpc0dldE9yUG9zdE1ldGhvZCA/IG1ldGhvZCA6ICdQT1NUJyxcbiAgICB9KS5hcHBlbmRUbygnYm9keScpO1xuXG4gICAgaWYgKCFpc0dldE9yUG9zdE1ldGhvZCkge1xuICAgICAgJGZvcm0uYXBwZW5kKCQoJzxpbnB1dD4nLCB7XG4gICAgICAgIHR5cGU6ICdfaGlkZGVuJyxcbiAgICAgICAgbmFtZTogJ19tZXRob2QnLFxuICAgICAgICB2YWx1ZTogbWV0aG9kLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgICRmb3JtLnN1Ym1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkc3VibWl0QnRuXG4gICAqIEBwYXJhbSB7R3JpZH0gZ3JpZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29uZmlybU1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpcm1UaXRsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kXG4gICAqL1xuICBzaG93Q29uZmlybU1vZGFsKCRzdWJtaXRCdG4sIGdyaWQsIGNvbmZpcm1NZXNzYWdlLCBjb25maXJtVGl0bGUsIG1ldGhvZCkge1xuICAgIGNvbnN0IGNvbmZpcm1CdXR0b25MYWJlbCA9ICRzdWJtaXRCdG4uZGF0YSgnY29uZmlybUJ1dHRvbkxhYmVsJyk7XG4gICAgY29uc3QgY2xvc2VCdXR0b25MYWJlbCA9ICRzdWJtaXRCdG4uZGF0YSgnY2xvc2VCdXR0b25MYWJlbCcpO1xuICAgIGNvbnN0IGNvbmZpcm1CdXR0b25DbGFzcyA9ICRzdWJtaXRCdG4uZGF0YSgnY29uZmlybUJ1dHRvbkNsYXNzJyk7XG5cbiAgICBjb25zdCBtb2RhbCA9IG5ldyBDb25maXJtTW9kYWwoe1xuICAgICAgaWQ6IGAke2dyaWQuZ2V0SWQoKX0tZ3JpZC1jb25maXJtLW1vZGFsYCxcbiAgICAgIGNvbmZpcm1UaXRsZSxcbiAgICAgIGNvbmZpcm1NZXNzYWdlLFxuICAgICAgY29uZmlybUJ1dHRvbkxhYmVsLFxuICAgICAgY2xvc2VCdXR0b25MYWJlbCxcbiAgICAgIGNvbmZpcm1CdXR0b25DbGFzcyxcbiAgICB9LCAoKSA9PiB0aGlzLnBvc3RGb3JtKCRzdWJtaXRCdG4sIG1ldGhvZCkpO1xuXG4gICAgbW9kYWwuc2hvdygpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBDbGFzcyBCdWxrQWN0aW9uU2VsZWN0Q2hlY2tib3hFeHRlbnNpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVsa0FjdGlvbkNoZWNrYm94RXh0ZW5zaW9uIHtcbiAgLyoqXG4gICAqIEV4dGVuZCBncmlkIHdpdGggYnVsayBhY3Rpb24gY2hlY2tib3hlcyBoYW5kbGluZyBmdW5jdGlvbmFsaXR5XG4gICAqXG4gICAqIEBwYXJhbSB7R3JpZH0gZ3JpZFxuICAgKi9cbiAgZXh0ZW5kKGdyaWQpIHtcbiAgICB0aGlzLmhhbmRsZUJ1bGtBY3Rpb25DaGVja2JveFNlbGVjdChncmlkKTtcbiAgICB0aGlzLmhhbmRsZUJ1bGtBY3Rpb25TZWxlY3RBbGxDaGVja2JveChncmlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIFwiU2VsZWN0IGFsbFwiIGJ1dHRvbiBpbiB0aGUgZ3JpZFxuICAgKlxuICAgKiBAcGFyYW0ge0dyaWR9IGdyaWRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGhhbmRsZUJ1bGtBY3Rpb25TZWxlY3RBbGxDaGVja2JveChncmlkKSB7XG4gICAgZ3JpZC5nZXRDb250YWluZXIoKS5vbignY2hhbmdlJywgJy5qcy1idWxrLWFjdGlvbi1zZWxlY3QtYWxsJywgKGUpID0+IHtcbiAgICAgIGNvbnN0ICRjaGVja2JveCA9ICQoZS5jdXJyZW50VGFyZ2V0KTtcblxuICAgICAgY29uc3QgaXNDaGVja2VkID0gJGNoZWNrYm94LmlzKCc6Y2hlY2tlZCcpO1xuXG4gICAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlQnVsa0FjdGlvbnNCdG4oZ3JpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2FibGVCdWxrQWN0aW9uc0J0bihncmlkKTtcbiAgICAgIH1cblxuICAgICAgZ3JpZC5nZXRDb250YWluZXIoKS5maW5kKCcuanMtYnVsay1hY3Rpb24tY2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgaXNDaGVja2VkKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGVhY2ggYnVsayBhY3Rpb24gY2hlY2tib3ggc2VsZWN0IGluIHRoZSBncmlkXG4gICAqXG4gICAqIEBwYXJhbSB7R3JpZH0gZ3JpZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaGFuZGxlQnVsa0FjdGlvbkNoZWNrYm94U2VsZWN0KGdyaWQpIHtcbiAgICBncmlkLmdldENvbnRhaW5lcigpLm9uKCdjaGFuZ2UnLCAnLmpzLWJ1bGstYWN0aW9uLWNoZWNrYm94JywgKCkgPT4ge1xuICAgICAgY29uc3QgY2hlY2tlZFJvd3NDb3VudCA9IGdyaWQuZ2V0Q29udGFpbmVyKCkuZmluZCgnLmpzLWJ1bGstYWN0aW9uLWNoZWNrYm94OmNoZWNrZWQnKS5sZW5ndGg7XG5cbiAgICAgIGlmIChjaGVja2VkUm93c0NvdW50ID4gMCkge1xuICAgICAgICB0aGlzLmVuYWJsZUJ1bGtBY3Rpb25zQnRuKGdyaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlQnVsa0FjdGlvbnNCdG4oZ3JpZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIGJ1bGsgYWN0aW9ucyBidXR0b25cbiAgICpcbiAgICogQHBhcmFtIHtHcmlkfSBncmlkXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbmFibGVCdWxrQWN0aW9uc0J0bihncmlkKSB7XG4gICAgZ3JpZC5nZXRDb250YWluZXIoKS5maW5kKCcuanMtYnVsay1hY3Rpb25zLWJ0bicpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGUgYnVsayBhY3Rpb25zIGJ1dHRvblxuICAgKlxuICAgKiBAcGFyYW0ge0dyaWR9IGdyaWRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRpc2FibGVCdWxrQWN0aW9uc0J0bihncmlkKSB7XG4gICAgZ3JpZC5nZXRDb250YWluZXIoKS5maW5kKCcuanMtYnVsay1hY3Rpb25zLWJ0bicpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIENsYXNzIFJlbG9hZExpc3RFeHRlbnNpb24gZXh0ZW5kcyBncmlkIHdpdGggXCJDb2x1bW4gdG9nZ2xpbmdcIiBmZWF0dXJlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbHVtblRvZ2dsaW5nRXh0ZW5zaW9uIHtcbiAgLyoqXG4gICAqIEV4dGVuZCBncmlkXG4gICAqXG4gICAqIEBwYXJhbSB7R3JpZH0gZ3JpZFxuICAgKi9cbiAgZXh0ZW5kKGdyaWQpIHtcbiAgICBjb25zdCAkdGFibGUgPSBncmlkLmdldENvbnRhaW5lcigpLmZpbmQoJ3RhYmxlLnRhYmxlJyk7XG4gICAgJHRhYmxlLmZpbmQoJy5wcy10b2dnbGFibGUtcm93Jykub24oJ2NsaWNrJywgKGUpID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudG9nZ2xlVmFsdWUoJChlLmRlbGVnYXRlVGFyZ2V0KSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtqUXVlcnl9IHJvd1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdG9nZ2xlVmFsdWUocm93KSB7XG4gICAgY29uc3QgdG9nZ2xlVXJsID0gcm93LmRhdGEoJ3RvZ2dsZVVybCcpO1xuXG4gICAgdGhpcy5zdWJtaXRBc0Zvcm0odG9nZ2xlVXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXRzIHJlcXVlc3QgdXJsIGFzIGZvcm1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvZ2dsZVVybFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3VibWl0QXNGb3JtKHRvZ2dsZVVybCkge1xuICAgIGNvbnN0ICRmb3JtID0gJCgnPGZvcm0+Jywge1xuICAgICAgYWN0aW9uOiB0b2dnbGVVcmwsXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB9KS5hcHBlbmRUbygnYm9keScpO1xuXG4gICAgJGZvcm0uc3VibWl0KCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIENsYXNzIEV4cG9ydFRvU3FsTWFuYWdlckV4dGVuc2lvbiBleHRlbmRzIGdyaWQgd2l0aCBleHBvcnRpbmcgcXVlcnkgdG8gU1FMIE1hbmFnZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb3J0VG9TcWxNYW5hZ2VyRXh0ZW5zaW9uIHtcbiAgLyoqXG4gICAqIEV4dGVuZCBncmlkXG4gICAqXG4gICAqIEBwYXJhbSB7R3JpZH0gZ3JpZFxuICAgKi9cbiAgZXh0ZW5kKGdyaWQpIHtcbiAgICBncmlkLmdldEhlYWRlckNvbnRhaW5lcigpLm9uKCdjbGljaycsICcuanMtY29tbW9uX3Nob3dfcXVlcnktZ3JpZC1hY3Rpb24nLCAoKSA9PiB0aGlzLm9uU2hvd1NxbFF1ZXJ5Q2xpY2soZ3JpZCkpO1xuICAgIGdyaWQuZ2V0SGVhZGVyQ29udGFpbmVyKCkub24oXG4gICAgICAnY2xpY2snLFxuICAgICAgJy5qcy1jb21tb25fZXhwb3J0X3NxbF9tYW5hZ2VyLWdyaWQtYWN0aW9uJyxcbiAgICAgICgpID0+IHRoaXMub25FeHBvcnRTcWxNYW5hZ2VyQ2xpY2soZ3JpZCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gY2xpY2tpbmcgb24gdGhlIFwic2hvdyBzcWwgcXVlcnlcIiB0b29sYmFyIGJ1dHRvblxuICAgKlxuICAgKiBAcGFyYW0ge0dyaWR9IGdyaWRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uU2hvd1NxbFF1ZXJ5Q2xpY2soZ3JpZCkge1xuICAgIGNvbnN0ICRzcWxNYW5hZ2VyRm9ybSA9ICQoYCMke2dyaWQuZ2V0SWQoKX1fY29tbW9uX3Nob3dfcXVlcnlfbW9kYWxfZm9ybWApO1xuICAgIHRoaXMuZmlsbEV4cG9ydEZvcm0oJHNxbE1hbmFnZXJGb3JtLCBncmlkKTtcblxuICAgIGNvbnN0ICRtb2RhbCA9ICQoYCMke2dyaWQuZ2V0SWQoKX1fZ3JpZF9jb21tb25fc2hvd19xdWVyeV9tb2RhbGApO1xuICAgICRtb2RhbC5tb2RhbCgnc2hvdycpO1xuXG4gICAgJG1vZGFsLm9uKCdjbGljaycsICcuYnRuLXNxbC1zdWJtaXQnLCAoKSA9PiAkc3FsTWFuYWdlckZvcm0uc3VibWl0KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiBjbGlja2luZyBvbiB0aGUgXCJleHBvcnQgdG8gdGhlIHNxbCBxdWVyeVwiIHRvb2xiYXIgYnV0dG9uXG4gICAqXG4gICAqIEBwYXJhbSB7R3JpZH0gZ3JpZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25FeHBvcnRTcWxNYW5hZ2VyQ2xpY2soZ3JpZCkge1xuICAgIGNvbnN0ICRzcWxNYW5hZ2VyRm9ybSA9ICQoYCMke2dyaWQuZ2V0SWQoKX1fY29tbW9uX3Nob3dfcXVlcnlfbW9kYWxfZm9ybWApO1xuXG4gICAgdGhpcy5maWxsRXhwb3J0Rm9ybSgkc3FsTWFuYWdlckZvcm0sIGdyaWQpO1xuXG4gICAgJHNxbE1hbmFnZXJGb3JtLnN1Ym1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbGwgZXhwb3J0IGZvcm0gd2l0aCBTUUwgYW5kIGl0J3MgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gJHNxbE1hbmFnZXJGb3JtXG4gICAqIEBwYXJhbSB7R3JpZH0gZ3JpZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZmlsbEV4cG9ydEZvcm0oJHNxbE1hbmFnZXJGb3JtLCBncmlkKSB7XG4gICAgY29uc3QgcXVlcnkgPSBncmlkLmdldENvbnRhaW5lcigpLmZpbmQoJy5qcy1ncmlkLXRhYmxlJykuZGF0YSgncXVlcnknKTtcblxuICAgICRzcWxNYW5hZ2VyRm9ybS5maW5kKCd0ZXh0YXJlYVtuYW1lPVwic3FsXCJdJykudmFsKHF1ZXJ5KTtcbiAgICAkc3FsTWFuYWdlckZvcm0uZmluZCgnaW5wdXRbbmFtZT1cIm5hbWVcIl0nKS52YWwodGhpcy5nZXROYW1lRnJvbUJyZWFkY3J1bWIoKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGV4cG9ydCBuYW1lIGZyb20gcGFnZSdzIGJyZWFkY3J1bWJcbiAgICpcbiAgICogQHJldHVybiB7U3RyaW5nfVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0TmFtZUZyb21CcmVhZGNydW1iKCkge1xuICAgIGNvbnN0ICRicmVhZGNydW1icyA9ICQoJy5oZWFkZXItdG9vbGJhcicpLmZpbmQoJy5icmVhZGNydW1iLWl0ZW0nKTtcbiAgICBsZXQgbmFtZSA9ICcnO1xuXG4gICAgJGJyZWFkY3J1bWJzLmVhY2goKGksIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0ICRicmVhZGNydW1iID0gJChpdGVtKTtcblxuICAgICAgY29uc3QgYnJlYWRjcnVtYlRpdGxlID0gJGJyZWFkY3J1bWIuZmluZCgnYScpLmxlbmd0aCA+IDBcbiAgICAgICAgPyAkYnJlYWRjcnVtYi5maW5kKCdhJykudGV4dCgpXG4gICAgICAgIDogJGJyZWFkY3J1bWIudGV4dCgpO1xuXG4gICAgICBpZiAobmFtZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLmNvbmNhdCgnID4gJyk7XG4gICAgICB9XG5cbiAgICAgIG5hbWUgPSBuYW1lLmNvbmNhdChicmVhZGNydW1iVGl0bGUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IHJlc2V0U2VhcmNoIGZyb20gJ0BhcHAvdXRpbHMvcmVzZXRfc2VhcmNoJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIENsYXNzIEZpbHRlcnNSZXNldEV4dGVuc2lvbiBleHRlbmRzIGdyaWQgd2l0aCBmaWx0ZXJzIHJlc2V0dGluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWx0ZXJzUmVzZXRFeHRlbnNpb24ge1xuICAvKipcbiAgICogRXh0ZW5kIGdyaWRcbiAgICpcbiAgICogQHBhcmFtIHtHcmlkfSBncmlkXG4gICAqL1xuICBleHRlbmQoZ3JpZCkge1xuICAgIGdyaWQuZ2V0Q29udGFpbmVyKCkub24oJ2NsaWNrJywgJy5qcy1yZXNldC1zZWFyY2gnLCAoZXZlbnQpID0+IHtcbiAgICAgIHJlc2V0U2VhcmNoKCQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YSgndXJsJyksICQoZXZlbnQuY3VycmVudFRhcmdldCkuZGF0YSgncmVkaXJlY3QnKSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuLyoqXG4gKiBSZXNwb25zaWJsZSBmb3IgZ3JpZCBmaWx0ZXJzIHNlYXJjaCBhbmQgcmVzZXQgYnV0dG9uIGF2YWlsYWJpbGl0eSB3aGVuIGZpbHRlciBpbnB1dHMgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsdGVyc1N1Ym1pdEJ1dHRvbkVuYWJsZXJFeHRlbnNpb24ge1xuICAvKipcbiAgICogRXh0ZW5kIGdyaWRcbiAgICpcbiAgICogQHBhcmFtIHtHcmlkfSBncmlkXG4gICAqL1xuICBleHRlbmQoZ3JpZCkge1xuICAgIGNvbnN0ICRmaWx0ZXJzUm93ID0gZ3JpZC5nZXRDb250YWluZXIoKS5maW5kKCcuY29sdW1uLWZpbHRlcnMnKTtcbiAgICAkZmlsdGVyc1Jvdy5maW5kKCcuZ3JpZC1zZWFyY2gtYnV0dG9uJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcblxuICAgICRmaWx0ZXJzUm93LmZpbmQoJ2lucHV0Om5vdCguanMtYnVsay1hY3Rpb24tc2VsZWN0LWFsbCksIHNlbGVjdCcpLm9uKCdpbnB1dCBkcC5jaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAkZmlsdGVyc1Jvdy5maW5kKCcuZ3JpZC1zZWFyY2gtYnV0dG9uJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgICAkZmlsdGVyc1Jvdy5maW5kKCcuanMtZ3JpZC1yZXNldC1idXR0b24nKS5wcm9wKCdoaWRkZW4nLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIENsYXNzIExpbmtSb3dBY3Rpb25FeHRlbnNpb24gaGFuZGxlcyBsaW5rIHJvdyBhY3Rpb25zXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpbmtSb3dBY3Rpb25FeHRlbnNpb24ge1xuICAvKipcbiAgICogRXh0ZW5kIGdyaWRcbiAgICpcbiAgICogQHBhcmFtIHtHcmlkfSBncmlkXG4gICAqL1xuICBleHRlbmQoZ3JpZCkge1xuICAgIHRoaXMuaW5pdFJvd0xpbmtzKGdyaWQpO1xuICAgIHRoaXMuaW5pdENvbmZpcm1hYmxlQWN0aW9ucyhncmlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgZ3JpZFxuICAgKlxuICAgKiBAcGFyYW0ge0dyaWR9IGdyaWRcbiAgICovXG4gIGluaXRDb25maXJtYWJsZUFjdGlvbnMoZ3JpZCkge1xuICAgIGdyaWQuZ2V0Q29udGFpbmVyKCkub24oJ2NsaWNrJywgJy5qcy1saW5rLXJvdy1hY3Rpb24nLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpcm1NZXNzYWdlID0gJChldmVudC5jdXJyZW50VGFyZ2V0KS5kYXRhKCdjb25maXJtLW1lc3NhZ2UnKTtcblxuICAgICAgaWYgKGNvbmZpcm1NZXNzYWdlLmxlbmd0aCAmJiAhd2luZG93LmNvbmZpcm0oY29uZmlybU1lc3NhZ2UpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY2xpY2sgZXZlbnQgb24gcm93cyB0aGF0IG1hdGNoZXMgdGhlIGZpcnN0IGxpbmsgYWN0aW9uIChpZiBwcmVzZW50KVxuICAgKlxuICAgKiBAcGFyYW0ge0dyaWR9IGdyaWRcbiAgICovXG4gIGluaXRSb3dMaW5rcyhncmlkKSB7XG4gICAgJCgndHInLCBncmlkLmdldENvbnRhaW5lcigpKS5lYWNoKGZ1bmN0aW9uIGluaXRFYWNoUm93KCkge1xuICAgICAgY29uc3QgJHBhcmVudFJvdyA9ICQodGhpcyk7XG5cbiAgICAgICQoJy5qcy1saW5rLXJvdy1hY3Rpb25bZGF0YS1jbGlja2FibGUtcm93PTFdOmZpcnN0JywgJHBhcmVudFJvdykuZWFjaChmdW5jdGlvbiBwcm9wYWdhdGVGaXJzdExpbmtBY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0ICRyb3dBY3Rpb24gPSAkKHRoaXMpO1xuICAgICAgICBjb25zdCAkcGFyZW50Q2VsbCA9ICRyb3dBY3Rpb24uY2xvc2VzdCgndGQnKTtcblxuICAgICAgICBjb25zdCBjbGlja2FibGVDZWxscyA9ICQoJ3RkLmNsaWNrYWJsZScsICRwYXJlbnRSb3cpLm5vdCgkcGFyZW50Q2VsbCk7XG4gICAgICAgIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIGNsaWNrYWJsZUNlbGxzLmFkZENsYXNzKCdjdXJzb3ItcG9pbnRlcicpLm1vdXNlZG93bigoKSA9PiB7XG4gICAgICAgICAgJCh3aW5kb3cpLm1vdXNlbW92ZSgoKSA9PiB7XG4gICAgICAgICAgICBpc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICQod2luZG93KS51bmJpbmQoJ21vdXNlbW92ZScpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjbGlja2FibGVDZWxscy5tb3VzZXVwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB3YXNEcmFnZ2luZyA9IGlzRHJhZ2dpbmc7XG4gICAgICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAgICQod2luZG93KS51bmJpbmQoJ21vdXNlbW92ZScpO1xuXG4gICAgICAgICAgaWYgKCF3YXNEcmFnZ2luZykge1xuICAgICAgICAgICAgY29uc3QgY29uZmlybU1lc3NhZ2UgPSAkcm93QWN0aW9uLmRhdGEoJ2NvbmZpcm0tbWVzc2FnZScpO1xuXG4gICAgICAgICAgICBpZiAoIWNvbmZpcm1NZXNzYWdlLmxlbmd0aCB8fCB3aW5kb3cuY29uZmlybShjb25maXJtTWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24gPSAkcm93QWN0aW9uLmF0dHIoJ2hyZWYnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0ICd0YWJsZWRuZC9kaXN0L2pxdWVyeS50YWJsZWRuZC5taW4nO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogQ2xhc3MgUG9zaXRpb25FeHRlbnNpb24gZXh0ZW5kcyBHcmlkIHdpdGggcmVvcmRlcmFibGUgcG9zaXRpb25zXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvc2l0aW9uRXh0ZW5zaW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4dGVuZDogKGdyaWQpID0+IHRoaXMuZXh0ZW5kKGdyaWQpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRXh0ZW5kIGdyaWRcbiAgICpcbiAgICogQHBhcmFtIHtHcmlkfSBncmlkXG4gICAqL1xuICBleHRlbmQoZ3JpZCkge1xuICAgIHRoaXMuZ3JpZCA9IGdyaWQ7XG4gICAgdGhpcy5hZGRJZHNUb0dyaWRUYWJsZVJvd3MoKTtcbiAgICBncmlkLmdldENvbnRhaW5lcigpLmZpbmQoJy5qcy1ncmlkLXRhYmxlJykudGFibGVEbkQoe1xuICAgICAgb25EcmFnQ2xhc3M6ICdwb3NpdGlvbi1yb3ctd2hpbGUtZHJhZycsXG4gICAgICBkcmFnSGFuZGxlOiAnLmpzLWRyYWctaGFuZGxlJyxcbiAgICAgIG9uRHJvcDogKHRhYmxlLCByb3cpID0+IHRoaXMuaGFuZGxlUG9zaXRpb25DaGFuZ2Uocm93KSxcbiAgICB9KTtcbiAgICBncmlkLmdldENvbnRhaW5lcigpLmZpbmQoJy5qcy1kcmFnLWhhbmRsZScpLmhvdmVyKFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykuYWRkQ2xhc3MoJ2hvdmVyJyk7XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykucmVtb3ZlQ2xhc3MoJ2hvdmVyJyk7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBwb3NpdGlvbiBpcyBjaGFuZ2VkIGhhbmRsZSB1cGRhdGVcbiAgICpcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm93XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBoYW5kbGVQb3NpdGlvbkNoYW5nZShyb3cpIHtcbiAgICBjb25zdCAkcm93UG9zaXRpb25Db250YWluZXIgPSAkKHJvdykuZmluZChgLmpzLSR7dGhpcy5ncmlkLmdldElkKCl9LXBvc2l0aW9uOmZpcnN0YCk7XG4gICAgY29uc3QgdXBkYXRlVXJsID0gJHJvd1Bvc2l0aW9uQ29udGFpbmVyLmRhdGEoJ3VwZGF0ZS11cmwnKTtcbiAgICBjb25zdCBtZXRob2QgPSAkcm93UG9zaXRpb25Db250YWluZXIuZGF0YSgndXBkYXRlLW1ldGhvZCcpO1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IHRoaXMuZ2V0Um93c1Bvc2l0aW9ucygpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtwb3NpdGlvbnN9O1xuXG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbih1cGRhdGVVcmwsIHBhcmFtcywgbWV0aG9kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRhYmxlIHBvc2l0aW9uc1xuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRSb3dzUG9zaXRpb25zKCkge1xuICAgIGNvbnN0IHRhYmxlRGF0YSA9IEpTT04ucGFyc2UoJC50YWJsZURuRC5qc29uaXplKCkpO1xuICAgIGNvbnN0IHJvd3NEYXRhID0gdGFibGVEYXRhW2Ake3RoaXMuZ3JpZC5nZXRJZCgpfV9ncmlkX3RhYmxlYF07XG4gICAgY29uc3QgY29tcGxldGVSb3dzRGF0YSA9IFtdO1xuXG4gICAgbGV0IHRyRGF0YTtcblxuICAgIC8vIHJldHJpZXZlIGRyYWdBbmREcm9wT2Zmc2V0IG9mZnNldCB0byBoYXZlIGFsbCBuZWVkZWQgZGF0YVxuICAgIC8vIGZvciBwb3NpdGlvbnMgbWFwcGluZyBldm9sdXRpb24gb3ZlciB0aW1lXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzRGF0YS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdHJEYXRhID0gdGhpcy5ncmlkLmdldENvbnRhaW5lcigpXG4gICAgICAgIC5maW5kKGAjJHtyb3dzRGF0YVtpXX1gKTtcblxuICAgICAgY29tcGxldGVSb3dzRGF0YS5wdXNoKHtcbiAgICAgICAgcm93TWFya2VyOiByb3dzRGF0YVtpXSxcbiAgICAgICAgb2Zmc2V0OiB0ckRhdGEuZGF0YSgnZHJhZ0FuZERyb3BPZmZzZXQnKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbXB1dGVNYXBwaW5nQmV0d2Vlbk9sZEFuZE5ld1Bvc2l0aW9ucyhjb21wbGV0ZVJvd3NEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgSUQncyB0byBHcmlkIHRhYmxlIHJvd3MgdG8gbWFrZSB0YWJsZURuRC5vbkRyb3AoKSBmdW5jdGlvbiB3b3JrLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkSWRzVG9HcmlkVGFibGVSb3dzKCkge1xuICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgIHRoaXMuZ3JpZC5nZXRDb250YWluZXIoKVxuICAgICAgLmZpbmQoYC5qcy1ncmlkLXRhYmxlIC5qcy0ke3RoaXMuZ3JpZC5nZXRJZCgpfS1wb3NpdGlvbmApXG4gICAgICAuZWFjaCgoaW5kZXgsIHBvc2l0aW9uV3JhcHBlcikgPT4ge1xuICAgICAgICBjb25zdCAkcG9zaXRpb25XcmFwcGVyID0gJChwb3NpdGlvbldyYXBwZXIpO1xuICAgICAgICBjb25zdCByb3dJZCA9ICRwb3NpdGlvbldyYXBwZXIuZGF0YSgnaWQnKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSAkcG9zaXRpb25XcmFwcGVyLmRhdGEoJ3Bvc2l0aW9uJyk7XG4gICAgICAgIGNvbnN0IGlkID0gYHJvd18ke3Jvd0lkfV8ke3Bvc2l0aW9ufWA7XG4gICAgICAgICRwb3NpdGlvbldyYXBwZXIuY2xvc2VzdCgndHInKS5hdHRyKCdpZCcsIGlkKTtcbiAgICAgICAgJHBvc2l0aW9uV3JhcHBlci5jbG9zZXN0KCd0ZCcpLmFkZENsYXNzKCdqcy1kcmFnLWhhbmRsZScpO1xuICAgICAgICAkcG9zaXRpb25XcmFwcGVyLmNsb3Nlc3QoJ3RyJykuZGF0YSgnZHJhZ0FuZERyb3BPZmZzZXQnLCBjb3VudGVyKTtcblxuICAgICAgICBjb3VudGVyICs9IDE7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHJvd3MgcG9zaXRpb25zIHVwZGF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlUG9zaXRpb24odXJsLCBwYXJhbXMsIG1ldGhvZCkge1xuICAgIGNvbnN0IGlzR2V0T3JQb3N0TWV0aG9kID0gWydHRVQnLCAnUE9TVCddLmluY2x1ZGVzKG1ldGhvZCk7XG5cbiAgICBjb25zdCAkZm9ybSA9ICQoJzxmb3JtPicsIHtcbiAgICAgIGFjdGlvbjogdXJsLFxuICAgICAgbWV0aG9kOiBpc0dldE9yUG9zdE1ldGhvZCA/IG1ldGhvZCA6ICdQT1NUJyxcbiAgICB9KS5hcHBlbmRUbygnYm9keScpO1xuXG4gICAgY29uc3QgcG9zaXRpb25zTmIgPSBwYXJhbXMucG9zaXRpb25zLmxlbmd0aDtcbiAgICBsZXQgcG9zaXRpb247XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9uc05iOyBpICs9IDEpIHtcbiAgICAgIHBvc2l0aW9uID0gcGFyYW1zLnBvc2l0aW9uc1tpXTtcbiAgICAgICRmb3JtLmFwcGVuZChcbiAgICAgICAgJCgnPGlucHV0PicsIHtcbiAgICAgICAgICB0eXBlOiAnaGlkZGVuJyxcbiAgICAgICAgICBuYW1lOiBgcG9zaXRpb25zWyR7aX1dW3Jvd0lkXWAsXG4gICAgICAgICAgdmFsdWU6IHBvc2l0aW9uLnJvd0lkLFxuICAgICAgICB9KSxcbiAgICAgICAgJCgnPGlucHV0PicsIHtcbiAgICAgICAgICB0eXBlOiAnaGlkZGVuJyxcbiAgICAgICAgICBuYW1lOiBgcG9zaXRpb25zWyR7aX1dW29sZFBvc2l0aW9uXWAsXG4gICAgICAgICAgdmFsdWU6IHBvc2l0aW9uLm9sZFBvc2l0aW9uLFxuICAgICAgICB9KSxcbiAgICAgICAgJCgnPGlucHV0PicsIHtcbiAgICAgICAgICB0eXBlOiAnaGlkZGVuJyxcbiAgICAgICAgICBuYW1lOiBgcG9zaXRpb25zWyR7aX1dW25ld1Bvc2l0aW9uXWAsXG4gICAgICAgICAgdmFsdWU6IHBvc2l0aW9uLm5ld1Bvc2l0aW9uLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBfbWV0aG9kIHBhcmFtIGlzIHVzZWQgYnkgU3ltZm9ueSB0byBzaW11bGF0ZSBERUxFVEUgYW5kIFBVVCBtZXRob2RzXG4gICAgaWYgKCFpc0dldE9yUG9zdE1ldGhvZCkge1xuICAgICAgJGZvcm0uYXBwZW5kKCQoJzxpbnB1dD4nLCB7XG4gICAgICAgIHR5cGU6ICdoaWRkZW4nLFxuICAgICAgICBuYW1lOiAnX21ldGhvZCcsXG4gICAgICAgIHZhbHVlOiBtZXRob2QsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgJGZvcm0uc3VibWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogUm93cyBoYXZlIGJlZW4gcmVvcmRlcmVkLiBUaGlzIGZ1bmN0aW9uXG4gICAqIGZpbmRzLCBmb3IgZWFjaCByb3cgSUQ6IHRoZSBvbGQgcG9zaXRpb24sIHRoZSBuZXcgcG9zaXRpb25cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29tcHV0ZU1hcHBpbmdCZXR3ZWVuT2xkQW5kTmV3UG9zaXRpb25zKHJvd3NEYXRhKSB7XG4gICAgY29uc3QgcmVnZXggPSAvXnJvd18oXFxkKylfKFxcZCspJC87XG4gICAgY29uc3QgbWFwcGluZyA9IEFycmF5KHJvd3NEYXRhLmxlbmd0aCkuZmlsbCgpLm1hcChPYmplY3QpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzRGF0YS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgWywgcm93SWQsIG9sZFBvc2l0aW9uXSA9IHJlZ2V4LmV4ZWMocm93c0RhdGFbaV0ucm93TWFya2VyKTtcbiAgICAgIG1hcHBpbmdbaV0ucm93SWQgPSByb3dJZDtcbiAgICAgIG1hcHBpbmdbaV0ub2xkUG9zaXRpb24gPSBwYXJzZUludChvbGRQb3NpdGlvbiwgMTApO1xuICAgICAgLy8gVGhpcyByb3cgd2lsbCBoYXZlIGFzIGEgbmV3IHBvc2l0aW9uIHRoZSBvbGQgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgb25lXG4gICAgICBtYXBwaW5nW3Jvd3NEYXRhW2ldLm9mZnNldF0ubmV3UG9zaXRpb24gPSBtYXBwaW5nW2ldLm9sZFBvc2l0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5nO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbi8qKlxuICogQ2xhc3MgUmVsb2FkTGlzdEV4dGVuc2lvbiBleHRlbmRzIGdyaWQgd2l0aCBcIkxpc3QgcmVsb2FkXCIgYWN0aW9uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbG9hZExpc3RFeHRlbnNpb24ge1xuICAvKipcbiAgICogRXh0ZW5kIGdyaWRcbiAgICpcbiAgICogQHBhcmFtIHtHcmlkfSBncmlkXG4gICAqL1xuICBleHRlbmQoZ3JpZCkge1xuICAgIGdyaWQuZ2V0SGVhZGVyQ29udGFpbmVyKCkub24oJ2NsaWNrJywgJy5qcy1jb21tb25fcmVmcmVzaF9saXN0LWdyaWQtYWN0aW9uJywgKCkgPT4ge1xuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH0pO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBUYWJsZVNvcnRpbmcgZnJvbSAnQGFwcC91dGlscy90YWJsZS1zb3J0aW5nJztcblxuLyoqXG4gKiBDbGFzcyBSZWxvYWRMaXN0RXh0ZW5zaW9uIGV4dGVuZHMgZ3JpZCB3aXRoIFwiTGlzdCByZWxvYWRcIiBhY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU29ydGluZ0V4dGVuc2lvbiB7XG4gIC8qKlxuICAgKiBFeHRlbmQgZ3JpZFxuICAgKlxuICAgKiBAcGFyYW0ge0dyaWR9IGdyaWRcbiAgICovXG4gIGV4dGVuZChncmlkKSB7XG4gICAgY29uc3QgJHNvcnRhYmxlVGFibGUgPSBncmlkLmdldENvbnRhaW5lcigpLmZpbmQoJ3RhYmxlLnRhYmxlJyk7XG5cbiAgICBuZXcgVGFibGVTb3J0aW5nKCRzb3J0YWJsZVRhYmxlKS5hdHRhY2goKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgQ29uZmlybU1vZGFsIGZyb20gJ0Bjb21wb25lbnRzL21vZGFsJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIEhhbmRsZXMgc3VibWl0IG9mIGdyaWQgYWN0aW9uc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJtaXRCdWxrQWN0aW9uRXh0ZW5zaW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4dGVuZDogKGdyaWQpID0+IHRoaXMuZXh0ZW5kKGdyaWQpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRXh0ZW5kIGdyaWQgd2l0aCBidWxrIGFjdGlvbiBzdWJtaXR0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7R3JpZH0gZ3JpZFxuICAgKi9cbiAgZXh0ZW5kKGdyaWQpIHtcbiAgICBncmlkLmdldENvbnRhaW5lcigpLm9uKCdjbGljaycsICcuanMtYnVsay1hY3Rpb24tc3VibWl0LWJ0bicsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5zdWJtaXQoZXZlbnQsIGdyaWQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBidWxrIGFjdGlvbiBzdWJtaXR0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7R3JpZH0gZ3JpZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3VibWl0KGV2ZW50LCBncmlkKSB7XG4gICAgY29uc3QgJHN1Ym1pdEJ0biA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgY29uZmlybU1lc3NhZ2UgPSAkc3VibWl0QnRuLmRhdGEoJ2NvbmZpcm0tbWVzc2FnZScpO1xuICAgIGNvbnN0IGNvbmZpcm1UaXRsZSA9ICRzdWJtaXRCdG4uZGF0YSgnY29uZmlybVRpdGxlJyk7XG5cbiAgICBpZiAoY29uZmlybU1lc3NhZ2UgIT09IHVuZGVmaW5lZCAmJiBjb25maXJtTWVzc2FnZS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoY29uZmlybVRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zaG93Q29uZmlybU1vZGFsKCRzdWJtaXRCdG4sIGdyaWQsIGNvbmZpcm1NZXNzYWdlLCBjb25maXJtVGl0bGUpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cuY29uZmlybShjb25maXJtTWVzc2FnZSkpIHtcbiAgICAgICAgdGhpcy5wb3N0Rm9ybSgkc3VibWl0QnRuLCBncmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3N0Rm9ybSgkc3VibWl0QnRuLCBncmlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRzdWJtaXRCdG5cbiAgICogQHBhcmFtIHtHcmlkfSBncmlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb25maXJtTWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29uZmlybVRpdGxlXG4gICAqL1xuICBzaG93Q29uZmlybU1vZGFsKCRzdWJtaXRCdG4sIGdyaWQsIGNvbmZpcm1NZXNzYWdlLCBjb25maXJtVGl0bGUpIHtcbiAgICBjb25zdCBjb25maXJtQnV0dG9uTGFiZWwgPSAkc3VibWl0QnRuLmRhdGEoJ2NvbmZpcm1CdXR0b25MYWJlbCcpO1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uTGFiZWwgPSAkc3VibWl0QnRuLmRhdGEoJ2Nsb3NlQnV0dG9uTGFiZWwnKTtcbiAgICBjb25zdCBjb25maXJtQnV0dG9uQ2xhc3MgPSAkc3VibWl0QnRuLmRhdGEoJ2NvbmZpcm1CdXR0b25DbGFzcycpO1xuXG4gICAgY29uc3QgbW9kYWwgPSBuZXcgQ29uZmlybU1vZGFsKHtcbiAgICAgIGlkOiBgJHtncmlkLmdldElkKCl9LWdyaWQtY29uZmlybS1tb2RhbGAsXG4gICAgICBjb25maXJtVGl0bGUsXG4gICAgICBjb25maXJtTWVzc2FnZSxcbiAgICAgIGNvbmZpcm1CdXR0b25MYWJlbCxcbiAgICAgIGNsb3NlQnV0dG9uTGFiZWwsXG4gICAgICBjb25maXJtQnV0dG9uQ2xhc3MsXG4gICAgfSwgKCkgPT4gdGhpcy5wb3N0Rm9ybSgkc3VibWl0QnRuLCBncmlkKSk7XG5cbiAgICBtb2RhbC5zaG93KCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRzdWJtaXRCdG5cbiAgICogQHBhcmFtIHtHcmlkfSBncmlkXG4gICAqL1xuICBwb3N0Rm9ybSgkc3VibWl0QnRuLCBncmlkKSB7XG4gICAgY29uc3QgJGZvcm0gPSAkKGAjJHtncmlkLmdldElkKCl9X2ZpbHRlcl9mb3JtYCk7XG5cbiAgICAkZm9ybS5hdHRyKCdhY3Rpb24nLCAkc3VibWl0QnRuLmRhdGEoJ2Zvcm0tdXJsJykpO1xuICAgICRmb3JtLmF0dHIoJ21ldGhvZCcsICRzdWJtaXRCdG4uZGF0YSgnZm9ybS1tZXRob2QnKSk7XG4gICAgJGZvcm0uc3VibWl0KCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIENsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBHcmlkIGV2ZW50c1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcmlkIHtcbiAgLyoqXG4gICAqIEdyaWQgaWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihpZCkge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLiRjb250YWluZXIgPSAkKGAjJHt0aGlzLmlkfV9ncmlkYCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGdyaWQgaWRcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldElkKCkge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBncmlkIGNvbnRhaW5lclxuICAgKlxuICAgKiBAcmV0dXJucyB7alF1ZXJ5fVxuICAgKi9cbiAgZ2V0Q29udGFpbmVyKCkge1xuICAgIHJldHVybiB0aGlzLiRjb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGdyaWQgaGVhZGVyIGNvbnRhaW5lclxuICAgKlxuICAgKiBAcmV0dXJucyB7alF1ZXJ5fVxuICAgKi9cbiAgZ2V0SGVhZGVyQ29udGFpbmVyKCkge1xuICAgIHJldHVybiB0aGlzLiRjb250YWluZXIuY2xvc2VzdCgnLmpzLWdyaWQtcGFuZWwnKS5maW5kKCcuanMtZ3JpZC1oZWFkZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgZ3JpZCB3aXRoIGV4dGVybmFsIGV4dGVuc2lvbnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV4dGVuc2lvblxuICAgKi9cbiAgYWRkRXh0ZW5zaW9uKGV4dGVuc2lvbikge1xuICAgIGV4dGVuc2lvbi5leHRlbmQodGhpcyk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIENvbmZpcm1Nb2RhbCBjb21wb25lbnRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb25maXJtVGl0bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb25maXJtTWVzc2FnZVxuICogQHBhcmFtIHtTdHJpbmd9IGNsb3NlQnV0dG9uTGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb25maXJtQnV0dG9uTGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb25maXJtQnV0dG9uQ2xhc3NcbiAqIEBwYXJhbSB7QXJyYXl9IGN1c3RvbUJ1dHRvbnNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gY2xvc2FibGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmZpcm1DYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FuY2VsQ2FsbGJhY2tcbiAqXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENvbmZpcm1Nb2RhbChwYXJhbXMsIGNvbmZpcm1DYWxsYmFjaywgY2FuY2VsQ2FsbGJhY2spIHtcbiAgLy8gQ29uc3RydWN0IHRoZSBtb2RhbFxuICBjb25zdCB7aWQsIGNsb3NhYmxlfSA9IHBhcmFtcztcbiAgdGhpcy5tb2RhbCA9IE1vZGFsKHBhcmFtcyk7XG5cbiAgLy8galF1ZXJ5IG1vZGFsIG9iamVjdFxuICB0aGlzLiRtb2RhbCA9ICQodGhpcy5tb2RhbC5jb250YWluZXIpO1xuXG4gIHRoaXMuc2hvdyA9ICgpID0+IHtcbiAgICB0aGlzLiRtb2RhbC5tb2RhbCgpO1xuICB9O1xuXG4gIHRoaXMubW9kYWwuY29uZmlybUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNvbmZpcm1DYWxsYmFjayk7XG5cbiAgdGhpcy4kbW9kYWwubW9kYWwoe1xuICAgIGJhY2tkcm9wOiBjbG9zYWJsZSA/IHRydWUgOiAnc3RhdGljJyxcbiAgICBrZXlib2FyZDogY2xvc2FibGUgIT09IHVuZGVmaW5lZCA/IGNsb3NhYmxlIDogdHJ1ZSxcbiAgICBjbG9zYWJsZTogY2xvc2FibGUgIT09IHVuZGVmaW5lZCA/IGNsb3NhYmxlIDogdHJ1ZSxcbiAgICBzaG93OiBmYWxzZSxcbiAgfSk7XG5cbiAgdGhpcy4kbW9kYWwub24oJ2hpZGRlbi5icy5tb2RhbCcsICgpID0+IHtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtpZH1gKS5yZW1vdmUoKTtcbiAgICBpZiAoY2FuY2VsQ2FsbGJhY2spIHtcbiAgICAgIGNhbmNlbENhbGxiYWNrKCk7XG4gICAgfVxuICB9KTtcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMubW9kYWwuY29udGFpbmVyKTtcbn1cblxuLyoqXG4gKiBNb2RhbCBjb21wb25lbnQgdG8gaW1wcm92ZSBsaXNpYmlsaXR5IGJ5IGNvbnN0cnVjdGluZyB0aGUgbW9kYWwgb3V0c2lkZSB0aGUgbWFpbiBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqXG4gKi9cbmZ1bmN0aW9uIE1vZGFsKHtcbiAgaWQgPSAnY29uZmlybS1tb2RhbCcsXG4gIGNvbmZpcm1UaXRsZSxcbiAgY29uZmlybU1lc3NhZ2UgPSAnJyxcbiAgY2xvc2VCdXR0b25MYWJlbCA9ICdDbG9zZScsXG4gIGNvbmZpcm1CdXR0b25MYWJlbCA9ICdBY2NlcHQnLFxuICBjb25maXJtQnV0dG9uQ2xhc3MgPSAnYnRuLXByaW1hcnknLFxuICBjdXN0b21CdXR0b25zID0gW10sXG59KSB7XG4gIGNvbnN0IG1vZGFsID0ge307XG5cbiAgLy8gTWFpbiBtb2RhbCBlbGVtZW50XG4gIG1vZGFsLmNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBtb2RhbC5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbW9kYWwnLCAnZmFkZScpO1xuICBtb2RhbC5jb250YWluZXIuaWQgPSBpZDtcblxuICAvLyBNb2RhbCBkaWFsb2cgZWxlbWVudFxuICBtb2RhbC5kaWFsb2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbW9kYWwuZGlhbG9nLmNsYXNzTGlzdC5hZGQoJ21vZGFsLWRpYWxvZycpO1xuXG4gIC8vIE1vZGFsIGNvbnRlbnQgZWxlbWVudFxuICBtb2RhbC5jb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1vZGFsLmNvbnRlbnQuY2xhc3NMaXN0LmFkZCgnbW9kYWwtY29udGVudCcpO1xuXG4gIC8vIE1vZGFsIGhlYWRlciBlbGVtZW50XG4gIG1vZGFsLmhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBtb2RhbC5oZWFkZXIuY2xhc3NMaXN0LmFkZCgnbW9kYWwtaGVhZGVyJyk7XG5cbiAgLy8gTW9kYWwgdGl0bGUgZWxlbWVudFxuICBpZiAoY29uZmlybVRpdGxlKSB7XG4gICAgbW9kYWwudGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoNCcpO1xuICAgIG1vZGFsLnRpdGxlLmNsYXNzTGlzdC5hZGQoJ21vZGFsLXRpdGxlJyk7XG4gICAgbW9kYWwudGl0bGUuaW5uZXJIVE1MID0gY29uZmlybVRpdGxlO1xuICB9XG5cbiAgLy8gTW9kYWwgY2xvc2UgYnV0dG9uIGljb25cbiAgbW9kYWwuY2xvc2VJY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gIG1vZGFsLmNsb3NlSWNvbi5jbGFzc0xpc3QuYWRkKCdjbG9zZScpO1xuICBtb2RhbC5jbG9zZUljb24uc2V0QXR0cmlidXRlKCd0eXBlJywgJ2J1dHRvbicpO1xuICBtb2RhbC5jbG9zZUljb24uZGF0YXNldC5kaXNtaXNzID0gJ21vZGFsJztcbiAgbW9kYWwuY2xvc2VJY29uLmlubmVySFRNTCA9ICfDlyc7XG5cbiAgLy8gTW9kYWwgYm9keSBlbGVtZW50XG4gIG1vZGFsLmJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbW9kYWwuYm9keS5jbGFzc0xpc3QuYWRkKCdtb2RhbC1ib2R5JywgJ3RleHQtbGVmdCcsICdmb250LXdlaWdodC1ub3JtYWwnKTtcblxuICAvLyBNb2RhbCBtZXNzYWdlIGVsZW1lbnRcbiAgbW9kYWwubWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgbW9kYWwubWVzc2FnZS5jbGFzc0xpc3QuYWRkKCdjb25maXJtLW1lc3NhZ2UnKTtcbiAgbW9kYWwubWVzc2FnZS5pbm5lckhUTUwgPSBjb25maXJtTWVzc2FnZTtcblxuICAvLyBNb2RhbCBmb290ZXIgZWxlbWVudFxuICBtb2RhbC5mb290ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbW9kYWwuZm9vdGVyLmNsYXNzTGlzdC5hZGQoJ21vZGFsLWZvb3RlcicpO1xuXG4gIC8vIE1vZGFsIGNsb3NlIGJ1dHRvbiBlbGVtZW50XG4gIG1vZGFsLmNsb3NlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gIG1vZGFsLmNsb3NlQnV0dG9uLnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcbiAgbW9kYWwuY2xvc2VCdXR0b24uY2xhc3NMaXN0LmFkZCgnYnRuJywgJ2J0bi1vdXRsaW5lLXNlY29uZGFyeScsICdidG4tbGcnKTtcbiAgbW9kYWwuY2xvc2VCdXR0b24uZGF0YXNldC5kaXNtaXNzID0gJ21vZGFsJztcbiAgbW9kYWwuY2xvc2VCdXR0b24uaW5uZXJIVE1MID0gY2xvc2VCdXR0b25MYWJlbDtcblxuICAvLyBNb2RhbCBjb25maXJtIGJ1dHRvbiBlbGVtZW50XG4gIG1vZGFsLmNvbmZpcm1CdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgbW9kYWwuY29uZmlybUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYnV0dG9uJyk7XG4gIG1vZGFsLmNvbmZpcm1CdXR0b24uY2xhc3NMaXN0LmFkZCgnYnRuJywgY29uZmlybUJ1dHRvbkNsYXNzLCAnYnRuLWxnJywgJ2J0bi1jb25maXJtLXN1Ym1pdCcpO1xuICBtb2RhbC5jb25maXJtQnV0dG9uLmRhdGFzZXQuZGlzbWlzcyA9ICdtb2RhbCc7XG4gIG1vZGFsLmNvbmZpcm1CdXR0b24uaW5uZXJIVE1MID0gY29uZmlybUJ1dHRvbkxhYmVsO1xuXG4gIC8vIENvbnN0cnVjdGluZyB0aGUgbW9kYWxcbiAgaWYgKGNvbmZpcm1UaXRsZSkge1xuICAgIG1vZGFsLmhlYWRlci5hcHBlbmQobW9kYWwudGl0bGUsIG1vZGFsLmNsb3NlSWNvbik7XG4gIH0gZWxzZSB7XG4gICAgbW9kYWwuaGVhZGVyLmFwcGVuZENoaWxkKG1vZGFsLmNsb3NlSWNvbik7XG4gIH1cblxuICBtb2RhbC5ib2R5LmFwcGVuZENoaWxkKG1vZGFsLm1lc3NhZ2UpO1xuICBtb2RhbC5mb290ZXIuYXBwZW5kKG1vZGFsLmNsb3NlQnV0dG9uLCAuLi5jdXN0b21CdXR0b25zLCBtb2RhbC5jb25maXJtQnV0dG9uKTtcbiAgbW9kYWwuY29udGVudC5hcHBlbmQobW9kYWwuaGVhZGVyLCBtb2RhbC5ib2R5LCBtb2RhbC5mb290ZXIpO1xuICBtb2RhbC5kaWFsb2cuYXBwZW5kQ2hpbGQobW9kYWwuY29udGVudCk7XG4gIG1vZGFsLmNvbnRhaW5lci5hcHBlbmRDaGlsZChtb2RhbC5kaWFsb2cpO1xuXG4gIHJldHVybiBtb2RhbDtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIENsYXNzIFNob3djYXNlQ2FyZENsb3NlRXh0ZW5zaW9uIGlzIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgaGVscGVyIGJsb2NrIGNsb3NpbmcgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hvd2Nhc2VDYXJkQ2xvc2VFeHRlbnNpb24ge1xuICAvKipcbiAgICogRXh0ZW5kIGhlbHBlciBibG9jay5cbiAgICpcbiAgICogQHBhcmFtIHtTaG93Y2FzZUNhcmR9IGhlbHBlckJsb2NrXG4gICAqL1xuICBleHRlbmQoaGVscGVyQmxvY2spIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBoZWxwZXJCbG9jay5nZXRDb250YWluZXIoKTtcbiAgICBjb250YWluZXIub24oJ2NsaWNrJywgJy5qcy1yZW1vdmUtaGVscGVyLWJsb2NrJywgKGV2dCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZSgpO1xuXG4gICAgICBjb25zdCAkYnRuID0gJChldnQudGFyZ2V0KTtcbiAgICAgIGNvbnN0IHVybCA9ICRidG4uZGF0YSgnY2xvc2VVcmwnKTtcbiAgICAgIGNvbnN0IGNhcmROYW1lID0gJGJ0bi5kYXRhKCdjYXJkTmFtZScpO1xuXG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIC8vIG5vdGlmeSB0aGUgY2FyZCB3YXMgY2xvc2VkXG4gICAgICAgICQucG9zdChcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xvc2U6IDEsXG4gICAgICAgICAgICBuYW1lOiBjYXJkTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBDbGFzcyBTaG93Y2FzZUNhcmQgaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGV2ZW50cyByZWxhdGVkIHdpdGggc2hvd2Nhc2UgY2FyZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hvd2Nhc2VDYXJkIHtcbiAgLyoqXG4gICAqIFNob3djYXNlIGNhcmQgaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuICAgKi9cbiAgY29uc3RydWN0b3IoaWQpIHtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy4kY29udGFpbmVyID0gJChgIyR7dGhpcy5pZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2hvd2Nhc2UgY2FyZCBjb250YWluZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtqUXVlcnl9XG4gICAqL1xuICBnZXRDb250YWluZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgc2hvd2Nhc2UgY2FyZCB3aXRoIGV4dGVybmFsIGV4dGVuc2lvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHRlbnNpb25cbiAgICovXG4gIGFkZEV4dGVuc2lvbihleHRlbnNpb24pIHtcbiAgICBleHRlbnNpb24uZXh0ZW5kKHRoaXMpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBjbGFzcyBUYWdnYWJsZUZpZWxkIGlzIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgZnVuY3Rpb25hbGl0eSBmcm9tIGJvb3RzdHJhcC10b2tlbmZpZWxkIHBsdWdpbi5cbiAqIEl0IGFsbG93cyB0byBoYXZlIHRhZ2dhYmxlIGZpZWxkcyB3aGljaCBhcmUgc3BsaXQgaW4gc2VwYXJhdGUgYmxvY2tzIG9uY2UgeW91IGNsaWNrIGVudGVyLiBWYWx1ZXMgb3JpZ2luYWxseSBzYXZlZFxuICogaW4gY29tbWEgc3BsaXQgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFnZ2FibGVGaWVsZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5GaWVsZFNlbGVjdG9yIC0gIGEgc2VsZWN0b3Igd2hpY2ggaXMgdXNlZCB3aXRoaW4galF1ZXJ5IG9iamVjdC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBleHRlbmRzIGJhc2ljIHRva2VuRmllbGQgYmVoYXZpb3Igd2l0aCBhZGRpdGlvbmFsIG9wdGlvbnMgc3VjaCBhcyBtaW5MZW5ndGgsIGRlbGltaXRlcixcbiAgICogYWxsb3cgdG8gYWRkIHRva2VuIG9uIGZvY3VzIG91dCBhY3Rpb24uIFNlZSBib290c3RyYXAtdG9rZW5maWVsZCBkb2NzIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe3Rva2VuRmllbGRTZWxlY3Rvciwgb3B0aW9ucyA9IHt9fSkge1xuICAgICQodG9rZW5GaWVsZFNlbGVjdG9yKS50b2tlbmZpZWxkKG9wdGlvbnMpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBDb21wb25lbnQgd2hpY2ggYWxsb3dzIHRvIGNvcHkgcmVndWxhciB0ZXh0IHRvIHVybCBmcmllbmRseSB0ZXh0XG4gKlxuICogVXNhZ2UgZXhhbXBsZSBpbiB0ZW1wbGF0ZTpcbiAqXG4gKiA8aW5wdXQgbmFtZT1cInNvdXJjZS1pbnB1dFwiXG4gKiAgICAgICAgY2xhc3M9XCJqcy1saW5rLXJld3JpdGUtY29waWVyLXNvdXJjZVwiPiAvLyBUaGUgb3JpZ2luYWwgdGV4dCB3aWxsIGJlIHRha2VuIGZyb20gdGhpcyBlbGVtZW50XG4gKiA8aW5wdXQgbmFtZT1cImRlc3RpbmF0aW9uLWlucHV0XCJcbiAqICAgICAgICBjbGFzcz1cImpzLWxpbmstcmV3cml0ZS1jb3BpZXItZGVzdGluYXRpb25cIj4gLy8gTW9kaWZpZWQgdGV4dCB3aWxsIGJlIGFkZGVkIHRvIHRoaXMgaW5wdXRcbiAqXG4gKiBpbiBqYXZhc2NyaXB0OlxuICpcbiAqIHRleHRUb0xpbmtSZXdyaXRlQ29waWVyKHtcbiAqICAgc291cmNlRWxlbWVudFNlbGVjdG9yOiAnLmpzLWxpbmstcmV3cml0ZS1jb3BpZXItc291cmNlJ1xuICogICBkZXN0aW5hdGlvbkVsZW1lbnRTZWxlY3RvcjogJy5qcy1saW5rLXJld3JpdGUtY29waWVyLWRlc3RpbmF0aW9uJyxcbiAqIH0pO1xuICpcbiAqIElmIHRoZSBzb3VyY2UtaW5wdXQgaGFzIHZhbHVlIFwidGVzdCBuYW1lXCIgdGhlIGxpbmsgcmV3cml0ZSB2YWx1ZSB3aWxsIGJlIFwidGVzdC1uYW1lXCIuXG4gKiBJZiB0aGUgc291cmNlLWlucHV0IGhhcyB2YWx1ZSBcInRlc3QgbmFtZSAjJFwiIGxpbmsgcmV3cml0ZSB3aWxsIGJlIFwidGVzdC1uYW1lLVwiIHNpbmNlICMkXG4gKiBhcmUgdW4gYWxsb3dlZCBjaGFyYWN0ZXJzIGluIHVybC5cbiAqXG4gKiBZb3UgY2FuIGFsc28gcGFzcyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gY2hhbmdlIHRoZSBldmVudCBuYW1lLCBvciBlbmNvZGluZyBmb3JtYXQ6XG4gKlxuICogdGV4dFRvTGlua1Jld3JpdGVDb3BpZXIoe1xuICogICBzb3VyY2VFbGVtZW50U2VsZWN0b3I6ICcuanMtbGluay1yZXdyaXRlLWNvcGllci1zb3VyY2UnXG4gKiAgIGRlc3RpbmF0aW9uRWxlbWVudFNlbGVjdG9yOiAnLmpzLWxpbmstcmV3cml0ZS1jb3BpZXItZGVzdGluYXRpb24nLFxuICogICBvcHRpb25zOiB7XG4gKiAgICAgZXZlbnROYW1lOiAnY2hhbmdlJywgLy8gZGVmYXVsdCBpcyAnaW5wdXQnXG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqL1xuY29uc3QgdGV4dFRvTGlua1Jld3JpdGVDb3BpZXIgPSAoXG4gIHtcbiAgICBzb3VyY2VFbGVtZW50U2VsZWN0b3IsXG4gICAgZGVzdGluYXRpb25FbGVtZW50U2VsZWN0b3IsXG4gICAgb3B0aW9ucyA9IHtldmVudE5hbWU6ICdpbnB1dCd9LFxuICB9LFxuKSA9PiB7XG4gICQoZG9jdW1lbnQpLm9uKG9wdGlvbnMuZXZlbnROYW1lLCBgJHtzb3VyY2VFbGVtZW50U2VsZWN0b3J9YCwgKGV2ZW50KSA9PiB7XG4gICAgJChkZXN0aW5hdGlvbkVsZW1lbnRTZWxlY3RvcikudmFsKHdpbmRvdy5zdHIydXJsKCQoZXZlbnQuY3VycmVudFRhcmdldCkudmFsKCksICdVVEYtOCcpKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0ZXh0VG9MaW5rUmV3cml0ZUNvcGllcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gJy4vZXZlbnQtZW1pdHRlcic7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gYXV0b21hdGljYWxseSB0b2dnbGUgdHJhbnNsYXRlZCBpbnB1dHMgKGRpc3BsYXllZCB3aXRoIG9uZVxuICogaW5wdXQgYW5kIGEgbGFuZ3VhZ2Ugc2VsZWN0b3IgdXNpbmcgdGhlIFRyYW5zbGF0YWJsZVR5cGUgU3ltZm9ueSBmb3JtIHR5cGUpLlxuICogQWxzbyBjb21wYXRpYmxlIHdpdGggVHJhbnNsYXRhYmxlRmllbGQgY2hhbmdlcy5cbiAqL1xuY2xhc3MgVHJhbnNsYXRhYmxlSW5wdXQge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICB0aGlzLmxvY2FsZUl0ZW1TZWxlY3RvciA9IG9wdHMubG9jYWxlSXRlbVNlbGVjdG9yIHx8ICcuanMtbG9jYWxlLWl0ZW0nO1xuICAgIHRoaXMubG9jYWxlQnV0dG9uU2VsZWN0b3IgPSBvcHRzLmxvY2FsZUJ1dHRvblNlbGVjdG9yIHx8ICcuanMtbG9jYWxlLWJ0bic7XG4gICAgdGhpcy5sb2NhbGVJbnB1dFNlbGVjdG9yID0gb3B0cy5sb2NhbGVJbnB1dFNlbGVjdG9yIHx8ICcuanMtbG9jYWxlLWlucHV0JztcbiAgICB0aGlzLnNlbGVjdGVkTG9jYWxlID0gJCh0aGlzLmxvY2FsZUl0ZW1TZWxlY3RvcikuZGF0YSgnbG9jYWxlJyk7XG5cbiAgICAkKCdib2R5Jykub24oXG4gICAgICAnY2xpY2snLFxuICAgICAgdGhpcy5sb2NhbGVJdGVtU2VsZWN0b3IsXG4gICAgICB0aGlzLnRvZ2dsZUxhbmd1YWdlLmJpbmQodGhpcyksXG4gICAgKTtcbiAgICBFdmVudEVtaXR0ZXIub24oJ2xhbmd1YWdlU2VsZWN0ZWQnLCB0aGlzLnRvZ2dsZUlucHV0cy5iaW5kKHRoaXMpKTtcblxuICAgIHJldHVybiB7XG4gICAgICBsb2NhbGVJdGVtU2VsZWN0b3I6IHRoaXMubG9jYWxlSXRlbVNlbGVjdG9yLFxuICAgICAgbG9jYWxlQnV0dG9uU2VsZWN0b3I6IHRoaXMubG9jYWxlQnV0dG9uU2VsZWN0b3IsXG4gICAgICBsb2NhbGVJbnB1dFNlbGVjdG9yOiB0aGlzLmxvY2FsZUlucHV0U2VsZWN0b3IsXG5cbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHtqUXVlcnl9IGZvcm1cbiAgICAgICAqL1xuICAgICAgcmVmcmVzaEZvcm1JbnB1dHM6IChmb3JtKSA9PiB7IHRoaXMucmVmcmVzaElucHV0cyhmb3JtKTsgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH1cbiAgICAgICAqL1xuICAgICAgZ2V0U2VsZWN0ZWRMb2NhbGU6ICgpID0+IHRoaXMuc2VsZWN0ZWRMb2NhbGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2pRdWVyeX0gZm9ybVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVmcmVzaElucHV0cyhmb3JtKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkTG9jYWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgRXZlbnRFbWl0dGVyLmVtaXQoJ2xhbmd1YWdlU2VsZWN0ZWQnLCB7XG4gICAgICBzZWxlY3RlZExvY2FsZTogdGhpcy5zZWxlY3RlZExvY2FsZSxcbiAgICAgIGZvcm0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggZXZlbnQgb24gbGFuZ3VhZ2Ugc2VsZWN0aW9uIHRvIHVwZGF0ZSBpbnB1dHMgYW5kIG90aGVyIGNvbXBvbmVudHMgd2hpY2ggZGVwZW5kIG9uIHRoZSBsb2NhbGUuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdG9nZ2xlTGFuZ3VhZ2UoZXZlbnQpIHtcbiAgICBjb25zdCBsb2NhbGVJdGVtID0gJChldmVudC50YXJnZXQpO1xuICAgIGNvbnN0IGZvcm0gPSBsb2NhbGVJdGVtLmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgICB0aGlzLnNlbGVjdGVkTG9jYWxlID0gbG9jYWxlSXRlbS5kYXRhKCdsb2NhbGUnKTtcbiAgICB0aGlzLnJlZnJlc2hJbnB1dHMoZm9ybSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIGFsbCB0cmFuc2xhdGFibGUgaW5wdXRzIGluIGZvcm0gaW4gd2hpY2ggbG9jYWxlIHdhcyBjaGFuZ2VkXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0b2dnbGVJbnB1dHMoZXZlbnQpIHtcbiAgICBjb25zdCB7Zm9ybX0gPSBldmVudDtcbiAgICB0aGlzLnNlbGVjdGVkTG9jYWxlID0gZXZlbnQuc2VsZWN0ZWRMb2NhbGU7XG4gICAgY29uc3QgbG9jYWxlQnV0dG9uID0gZm9ybS5maW5kKHRoaXMubG9jYWxlQnV0dG9uU2VsZWN0b3IpO1xuICAgIGNvbnN0IGNoYW5nZUxhbmd1YWdlVXJsID0gbG9jYWxlQnV0dG9uLmRhdGEoJ2NoYW5nZS1sYW5ndWFnZS11cmwnKTtcblxuICAgIGxvY2FsZUJ1dHRvbi50ZXh0KHRoaXMuc2VsZWN0ZWRMb2NhbGUpO1xuICAgIGZvcm0uZmluZCh0aGlzLmxvY2FsZUlucHV0U2VsZWN0b3IpLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICBmb3JtXG4gICAgICAuZmluZChgJHt0aGlzLmxvY2FsZUlucHV0U2VsZWN0b3J9LmpzLWxvY2FsZS0ke3RoaXMuc2VsZWN0ZWRMb2NhbGV9YClcbiAgICAgIC5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG5cbiAgICBpZiAoY2hhbmdlTGFuZ3VhZ2VVcmwpIHtcbiAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkTGFuZ3VhZ2UoY2hhbmdlTGFuZ3VhZ2VVcmwsIHRoaXMuc2VsZWN0ZWRMb2NhbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGxhbmd1YWdlIGNob2ljZSBmb3IgZW1wbG95ZWUgZm9ybXMuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjaGFuZ2VMYW5ndWFnZVVybFxuICAgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0ZWRMb2NhbGVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNhdmVTZWxlY3RlZExhbmd1YWdlKGNoYW5nZUxhbmd1YWdlVXJsLCBzZWxlY3RlZExvY2FsZSkge1xuICAgICQucG9zdCh7XG4gICAgICB1cmw6IGNoYW5nZUxhbmd1YWdlVXJsLFxuICAgICAgZGF0YToge1xuICAgICAgICBsYW5ndWFnZV9pc29fY29kZTogc2VsZWN0ZWRMb2NhbGUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zbGF0YWJsZUlucHV0O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2Zyb21cIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vZ2V0LWl0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2lzLWl0ZXJhYmxlXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpO1xuXG52YXIgX2RlZmluZVByb3BlcnR5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZmluZVByb3BlcnR5KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfaXNJdGVyYWJsZTIgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9pcy1pdGVyYWJsZVwiKTtcblxudmFyIF9pc0l0ZXJhYmxlMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzSXRlcmFibGUyKTtcblxudmFyIF9nZXRJdGVyYXRvcjIgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9nZXQtaXRlcmF0b3JcIik7XG5cbnZhciBfZ2V0SXRlcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0SXRlcmF0b3IyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkge1xuICAgIHZhciBfYXJyID0gW107XG4gICAgdmFyIF9uID0gdHJ1ZTtcbiAgICB2YXIgX2QgPSBmYWxzZTtcbiAgICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgX2kgPSAoMCwgX2dldEl0ZXJhdG9yMy5kZWZhdWx0KShhcnIpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9kID0gdHJ1ZTtcbiAgICAgIF9lID0gZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdKSBfaVtcInJldHVyblwiXSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gX2FycjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXNJdGVyYWJsZTMuZGVmYXVsdCkoT2JqZWN0KGFycikpKSB7XG4gICAgICByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbiAgICB9XG4gIH07XG59KCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZnJvbSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL2FycmF5L2Zyb21cIik7XG5cbnZhciBfZnJvbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mcm9tKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgYXJyMltpXSA9IGFycltpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKDAsIF9mcm9tMi5kZWZhdWx0KShhcnIpO1xuICB9XG59OyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuQXJyYXkuZnJvbTtcbiIsInJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3InKTtcbiIsInJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvY29yZS5pcy1pdGVyYWJsZScpO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyICRPYmplY3QgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiAkT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgSVNfV1JBUCA9IHR5cGUgJiAkZXhwb3J0Llc7XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXTtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBrZXksIG93biwgb3V0O1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChvd24gJiYgaGFzKGV4cG9ydHMsIGtleSkpIGNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24gKEMpIHtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBDKSB7XG4gICAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQygpO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZiAoSVNfUFJPVE8pIHtcbiAgICAgIChleHBvcnRzLnZpcnR1YWwgfHwgKGV4cG9ydHMudmlydHVhbCA9IHt9KSlba2V5XSA9IG91dDtcbiAgICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5wcm90b3R5cGUuJU5BTUUlXG4gICAgICBpZiAodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSkgaGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faGlkZScpO1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXQgPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3IgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGl0ZXJGbiA9IGdldChpdCk7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICByZXR1cm4gYW5PYmplY3QoaXRlckZuLmNhbGwoaXQpKTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuaXNJdGVyYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTyA9IE9iamVjdChpdCk7XG4gIHJldHVybiBPW0lURVJBVE9SXSAhPT0gdW5kZWZpbmVkXG4gICAgfHwgJ0BAaXRlcmF0b3InIGluIE9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgfHwgSXRlcmF0b3JzLmhhc093blByb3BlcnR5KGNsYXNzb2YoTykpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIFRPX1NUUklOR19UQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxudmFyIERPTUl0ZXJhYmxlcyA9ICgnQ1NTUnVsZUxpc3QsQ1NTU3R5bGVEZWNsYXJhdGlvbixDU1NWYWx1ZUxpc3QsQ2xpZW50UmVjdExpc3QsRE9NUmVjdExpc3QsRE9NU3RyaW5nTGlzdCwnICtcbiAgJ0RPTVRva2VuTGlzdCxEYXRhVHJhbnNmZXJJdGVtTGlzdCxGaWxlTGlzdCxIVE1MQWxsQ29sbGVjdGlvbixIVE1MQ29sbGVjdGlvbixIVE1MRm9ybUVsZW1lbnQsSFRNTFNlbGVjdEVsZW1lbnQsJyArXG4gICdNZWRpYUxpc3QsTWltZVR5cGVBcnJheSxOYW1lZE5vZGVNYXAsTm9kZUxpc3QsUGFpbnRSZXF1ZXN0TGlzdCxQbHVnaW4sUGx1Z2luQXJyYXksU1ZHTGVuZ3RoTGlzdCxTVkdOdW1iZXJMaXN0LCcgK1xuICAnU1ZHUGF0aFNlZ0xpc3QsU1ZHUG9pbnRMaXN0LFNWR1N0cmluZ0xpc3QsU1ZHVHJhbnNmb3JtTGlzdCxTb3VyY2VCdWZmZXJMaXN0LFN0eWxlU2hlZXRMaXN0LFRleHRUcmFja0N1ZUxpc3QsJyArXG4gICdUZXh0VHJhY2tMaXN0LFRvdWNoTGlzdCcpLnNwbGl0KCcsJyk7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgRE9NSXRlcmFibGVzLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gRE9NSXRlcmFibGVzW2ldO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKHByb3RvICYmICFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuIiwiLyohIGpxdWVyeS50YWJsZWRuZC5qcyAzMC0xMi0yMDE3ICovXG4hZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9XCJ0b3VjaHN0YXJ0IG1vdXNlZG93blwiLGY9XCJ0b3VjaG1vdmUgbW91c2Vtb3ZlXCIsZz1cInRvdWNoZW5kIG1vdXNldXBcIjthKGMpLnJlYWR5KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihhKXtmb3IodmFyIGI9e30sYz1hLm1hdGNoKC8oW147Ol0rKS9nKXx8W107Yy5sZW5ndGg7KWJbYy5zaGlmdCgpXT1jLnNoaWZ0KCkudHJpbSgpO3JldHVybiBifWEoXCJ0YWJsZVwiKS5lYWNoKGZ1bmN0aW9uKCl7XCJkbmRcIj09PWEodGhpcykuZGF0YShcInRhYmxlXCIpJiZhKHRoaXMpLnRhYmxlRG5EKHtvbkRyYWdTdHlsZTphKHRoaXMpLmRhdGEoXCJvbmRyYWdzdHlsZVwiKSYmYihhKHRoaXMpLmRhdGEoXCJvbmRyYWdzdHlsZVwiKSl8fG51bGwsb25Ecm9wU3R5bGU6YSh0aGlzKS5kYXRhKFwib25kcm9wc3R5bGVcIikmJmIoYSh0aGlzKS5kYXRhKFwib25kcm9wc3R5bGVcIikpfHxudWxsLG9uRHJhZ0NsYXNzOmEodGhpcykuZGF0YShcIm9uZHJhZ2NsYXNzXCIpPT09ZCYmXCJ0RG5EX3doaWxlRHJhZ1wifHxhKHRoaXMpLmRhdGEoXCJvbmRyYWdjbGFzc1wiKSxvbkRyb3A6YSh0aGlzKS5kYXRhKFwib25kcm9wXCIpJiZuZXcgRnVuY3Rpb24oXCJ0YWJsZVwiLFwicm93XCIsYSh0aGlzKS5kYXRhKFwib25kcm9wXCIpKSxvbkRyYWdTdGFydDphKHRoaXMpLmRhdGEoXCJvbmRyYWdzdGFydFwiKSYmbmV3IEZ1bmN0aW9uKFwidGFibGVcIixcInJvd1wiLGEodGhpcykuZGF0YShcIm9uZHJhZ3N0YXJ0XCIpKSxvbkRyYWdTdG9wOmEodGhpcykuZGF0YShcIm9uZHJhZ3N0b3BcIikmJm5ldyBGdW5jdGlvbihcInRhYmxlXCIsXCJyb3dcIixhKHRoaXMpLmRhdGEoXCJvbmRyYWdzdG9wXCIpKSxzY3JvbGxBbW91bnQ6YSh0aGlzKS5kYXRhKFwic2Nyb2xsYW1vdW50XCIpfHw1LHNlbnNpdGl2aXR5OmEodGhpcykuZGF0YShcInNlbnNpdGl2aXR5XCIpfHwxMCxoaWVyYXJjaHlMZXZlbDphKHRoaXMpLmRhdGEoXCJoaWVyYXJjaHlsZXZlbFwiKXx8MCxpbmRlbnRBcnRpZmFjdDphKHRoaXMpLmRhdGEoXCJpbmRlbnRhcnRpZmFjdFwiKXx8JzxkaXYgY2xhc3M9XCJpbmRlbnRcIj4mbmJzcDs8L2Rpdj4nLGF1dG9XaWR0aEFkanVzdDphKHRoaXMpLmRhdGEoXCJhdXRvd2lkdGhhZGp1c3RcIil8fCEwLGF1dG9DbGVhblJlbGF0aW9uczphKHRoaXMpLmRhdGEoXCJhdXRvY2xlYW5yZWxhdGlvbnNcIil8fCEwLGpzb25QcmV0aWZ5U2VwYXJhdG9yOmEodGhpcykuZGF0YShcImpzb25wcmV0aWZ5c2VwYXJhdG9yXCIpfHxcIlxcdFwiLHNlcmlhbGl6ZVJlZ2V4cDphKHRoaXMpLmRhdGEoXCJzZXJpYWxpemVyZWdleHBcIikmJm5ldyBSZWdFeHAoYSh0aGlzKS5kYXRhKFwic2VyaWFsaXplcmVnZXhwXCIpKXx8L1teXFwtXSokLyxzZXJpYWxpemVQYXJhbU5hbWU6YSh0aGlzKS5kYXRhKFwic2VyaWFsaXplcGFyYW1uYW1lXCIpfHwhMSxkcmFnSGFuZGxlOmEodGhpcykuZGF0YShcImRyYWdoYW5kbGVcIil8fG51bGx9KX0pfSksalF1ZXJ5LnRhYmxlRG5EPXtjdXJyZW50VGFibGU6bnVsbCxkcmFnT2JqZWN0Om51bGwsbW91c2VPZmZzZXQ6bnVsbCxvbGRYOjAsb2xkWTowLGJ1aWxkOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLnRhYmxlRG5EQ29uZmlnPWEuZXh0ZW5kKHtvbkRyYWdTdHlsZTpudWxsLG9uRHJvcFN0eWxlOm51bGwsb25EcmFnQ2xhc3M6XCJ0RG5EX3doaWxlRHJhZ1wiLG9uRHJvcDpudWxsLG9uRHJhZ1N0YXJ0Om51bGwsb25EcmFnU3RvcDpudWxsLHNjcm9sbEFtb3VudDo1LHNlbnNpdGl2aXR5OjEwLGhpZXJhcmNoeUxldmVsOjAsaW5kZW50QXJ0aWZhY3Q6JzxkaXYgY2xhc3M9XCJpbmRlbnRcIj4mbmJzcDs8L2Rpdj4nLGF1dG9XaWR0aEFkanVzdDohMCxhdXRvQ2xlYW5SZWxhdGlvbnM6ITAsanNvblByZXRpZnlTZXBhcmF0b3I6XCJcXHRcIixzZXJpYWxpemVSZWdleHA6L1teXFwtXSokLyxzZXJpYWxpemVQYXJhbU5hbWU6ITEsZHJhZ0hhbmRsZTpudWxsfSxifHx7fSksYS50YWJsZURuRC5tYWtlRHJhZ2dhYmxlKHRoaXMpLHRoaXMudGFibGVEbkRDb25maWcuaGllcmFyY2h5TGV2ZWwmJmEudGFibGVEbkQubWFrZUluZGVudGVkKHRoaXMpfSksdGhpc30sbWFrZUluZGVudGVkOmZ1bmN0aW9uKGIpe3ZhciBjLGQsZT1iLnRhYmxlRG5EQ29uZmlnLGY9Yi5yb3dzLGc9YShmKS5maXJzdCgpLmZpbmQoXCJ0ZDpmaXJzdFwiKVswXSxoPTAsaT0wO2lmKGEoYikuaGFzQ2xhc3MoXCJpbmR0ZFwiKSlyZXR1cm4gbnVsbDtkPWEoYikuYWRkQ2xhc3MoXCJpbmR0ZFwiKS5hdHRyKFwic3R5bGVcIiksYShiKS5jc3Moe3doaXRlU3BhY2U6XCJub3dyYXBcIn0pO2Zvcih2YXIgaj0wO2o8Zi5sZW5ndGg7aisrKWk8YShmW2pdKS5maW5kKFwidGQ6Zmlyc3RcIikudGV4dCgpLmxlbmd0aCYmKGk9YShmW2pdKS5maW5kKFwidGQ6Zmlyc3RcIikudGV4dCgpLmxlbmd0aCxjPWopO2ZvcihhKGcpLmNzcyh7d2lkdGg6XCJhdXRvXCJ9KSxqPTA7ajxlLmhpZXJhcmNoeUxldmVsO2orKylhKGZbY10pLmZpbmQoXCJ0ZDpmaXJzdFwiKS5wcmVwZW5kKGUuaW5kZW50QXJ0aWZhY3QpO2ZvcihnJiZhKGcpLmNzcyh7d2lkdGg6Zy5vZmZzZXRXaWR0aH0pLGQmJmEoYikuY3NzKGQpLGo9MDtqPGUuaGllcmFyY2h5TGV2ZWw7aisrKWEoZltjXSkuZmluZChcInRkOmZpcnN0XCIpLmNoaWxkcmVuKFwiOmZpcnN0XCIpLnJlbW92ZSgpO3JldHVybiBlLmhpZXJhcmNoeUxldmVsJiZhKGYpLmVhY2goZnVuY3Rpb24oKXsoaD1hKHRoaXMpLmRhdGEoXCJsZXZlbFwiKXx8MCk8PWUuaGllcmFyY2h5TGV2ZWwmJmEodGhpcykuZGF0YShcImxldmVsXCIsaCl8fGEodGhpcykuZGF0YShcImxldmVsXCIsMCk7Zm9yKHZhciBiPTA7YjxhKHRoaXMpLmRhdGEoXCJsZXZlbFwiKTtiKyspYSh0aGlzKS5maW5kKFwidGQ6Zmlyc3RcIikucHJlcGVuZChlLmluZGVudEFydGlmYWN0KX0pLHRoaXN9LG1ha2VEcmFnZ2FibGU6ZnVuY3Rpb24oYil7dmFyIGM9Yi50YWJsZURuRENvbmZpZztjLmRyYWdIYW5kbGUmJmEoYy5kcmFnSGFuZGxlLGIpLmVhY2goZnVuY3Rpb24oKXthKHRoaXMpLmJpbmQoZSxmdW5jdGlvbihkKXtyZXR1cm4gYS50YWJsZURuRC5pbml0aWFsaXNlRHJhZyhhKHRoaXMpLnBhcmVudHMoXCJ0clwiKVswXSxiLHRoaXMsZCxjKSwhMX0pfSl8fGEoYi5yb3dzKS5lYWNoKGZ1bmN0aW9uKCl7YSh0aGlzKS5oYXNDbGFzcyhcIm5vZHJhZ1wiKT9hKHRoaXMpLmNzcyhcImN1cnNvclwiLFwiXCIpOmEodGhpcykuYmluZChlLGZ1bmN0aW9uKGQpe2lmKFwiVERcIj09PWQudGFyZ2V0LnRhZ05hbWUpcmV0dXJuIGEudGFibGVEbkQuaW5pdGlhbGlzZURyYWcodGhpcyxiLHRoaXMsZCxjKSwhMX0pLmNzcyhcImN1cnNvclwiLFwibW92ZVwiKX0pfSxjdXJyZW50T3JkZXI6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmN1cnJlbnRUYWJsZS5yb3dzO3JldHVybiBhLm1hcChiLGZ1bmN0aW9uKGIpe3JldHVybihhKGIpLmRhdGEoXCJsZXZlbFwiKStiLmlkKS5yZXBsYWNlKC9cXHMvZyxcIlwiKX0pLmpvaW4oXCJcIil9LGluaXRpYWxpc2VEcmFnOmZ1bmN0aW9uKGIsZCxlLGgsaSl7dGhpcy5kcmFnT2JqZWN0PWIsdGhpcy5jdXJyZW50VGFibGU9ZCx0aGlzLm1vdXNlT2Zmc2V0PXRoaXMuZ2V0TW91c2VPZmZzZXQoZSxoKSx0aGlzLm9yaWdpbmFsT3JkZXI9dGhpcy5jdXJyZW50T3JkZXIoKSxhKGMpLmJpbmQoZix0aGlzLm1vdXNlbW92ZSkuYmluZChnLHRoaXMubW91c2V1cCksaS5vbkRyYWdTdGFydCYmaS5vbkRyYWdTdGFydChkLGUpfSx1cGRhdGVUYWJsZXM6ZnVuY3Rpb24oKXt0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLnRhYmxlRG5EQ29uZmlnJiZhLnRhYmxlRG5ELm1ha2VEcmFnZ2FibGUodGhpcyl9KX0sbW91c2VDb29yZHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlcz97eDphLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCx5OmEub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZfTphLnBhZ2VYfHxhLnBhZ2VZP3t4OmEucGFnZVgseTphLnBhZ2VZfTp7eDphLmNsaWVudFgrYy5ib2R5LnNjcm9sbExlZnQtYy5ib2R5LmNsaWVudExlZnQseTphLmNsaWVudFkrYy5ib2R5LnNjcm9sbFRvcC1jLmJvZHkuY2xpZW50VG9wfX0sZ2V0TW91c2VPZmZzZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlO3JldHVybiBjPWN8fGIuZXZlbnQsZT10aGlzLmdldFBvc2l0aW9uKGEpLGQ9dGhpcy5tb3VzZUNvb3JkcyhjKSx7eDpkLngtZS54LHk6ZC55LWUueX19LGdldFBvc2l0aW9uOmZ1bmN0aW9uKGEpe3ZhciBiPTAsYz0wO2ZvcigwPT09YS5vZmZzZXRIZWlnaHQmJihhPWEuZmlyc3RDaGlsZCk7YS5vZmZzZXRQYXJlbnQ7KWIrPWEub2Zmc2V0TGVmdCxjKz1hLm9mZnNldFRvcCxhPWEub2Zmc2V0UGFyZW50O3JldHVybiBiKz1hLm9mZnNldExlZnQsYys9YS5vZmZzZXRUb3Ase3g6Yix5OmN9fSxhdXRvU2Nyb2xsOmZ1bmN0aW9uKGEpe3ZhciBkPXRoaXMuY3VycmVudFRhYmxlLnRhYmxlRG5EQ29uZmlnLGU9Yi5wYWdlWU9mZnNldCxmPWIuaW5uZXJIZWlnaHQ/Yi5pbm5lckhlaWdodDpjLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ/Yy5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OmMuYm9keS5jbGllbnRIZWlnaHQ7Yy5hbGwmJih2b2lkIDAhPT1jLmNvbXBhdE1vZGUmJlwiQmFja0NvbXBhdFwiIT09Yy5jb21wYXRNb2RlP2U9Yy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOnZvaWQgMCE9PWMuYm9keSYmKGU9Yy5ib2R5LnNjcm9sbFRvcCkpLGEueS1lPGQuc2Nyb2xsQW1vdW50JiZiLnNjcm9sbEJ5KDAsLWQuc2Nyb2xsQW1vdW50KXx8Zi0oYS55LWUpPGQuc2Nyb2xsQW1vdW50JiZiLnNjcm9sbEJ5KDAsZC5zY3JvbGxBbW91bnQpfSxtb3ZlVmVydGljbGU6ZnVuY3Rpb24oYSxiKXswIT09YS52ZXJ0aWNhbCYmYiYmdGhpcy5kcmFnT2JqZWN0IT09YiYmdGhpcy5kcmFnT2JqZWN0LnBhcmVudE5vZGU9PT1iLnBhcmVudE5vZGUmJigwPmEudmVydGljYWwmJnRoaXMuZHJhZ09iamVjdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmRyYWdPYmplY3QsYi5uZXh0U2libGluZyl8fDA8YS52ZXJ0aWNhbCYmdGhpcy5kcmFnT2JqZWN0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZHJhZ09iamVjdCxiKSl9LG1vdmVIb3Jpem9udGFsOmZ1bmN0aW9uKGIsYyl7dmFyIGQsZT10aGlzLmN1cnJlbnRUYWJsZS50YWJsZURuRENvbmZpZztpZighZS5oaWVyYXJjaHlMZXZlbHx8MD09PWIuaG9yaXpvbnRhbHx8IWN8fHRoaXMuZHJhZ09iamVjdCE9PWMpcmV0dXJuIG51bGw7ZD1hKGMpLmRhdGEoXCJsZXZlbFwiKSwwPGIuaG9yaXpvbnRhbCYmZD4wJiZhKGMpLmZpbmQoXCJ0ZDpmaXJzdFwiKS5jaGlsZHJlbihcIjpmaXJzdFwiKS5yZW1vdmUoKSYmYShjKS5kYXRhKFwibGV2ZWxcIiwtLWQpLDA+Yi5ob3Jpem9udGFsJiZkPGUuaGllcmFyY2h5TGV2ZWwmJmEoYykucHJldigpLmRhdGEoXCJsZXZlbFwiKT49ZCYmYShjKS5jaGlsZHJlbihcIjpmaXJzdFwiKS5wcmVwZW5kKGUuaW5kZW50QXJ0aWZhY3QpJiZhKGMpLmRhdGEoXCJsZXZlbFwiLCsrZCl9LG1vdXNlbW92ZTpmdW5jdGlvbihiKXt2YXIgYyxkLGUsZixnLGg9YShhLnRhYmxlRG5ELmRyYWdPYmplY3QpLGk9YS50YWJsZURuRC5jdXJyZW50VGFibGUudGFibGVEbkRDb25maWc7cmV0dXJuIGImJmIucHJldmVudERlZmF1bHQoKSwhIWEudGFibGVEbkQuZHJhZ09iamVjdCYmKFwidG91Y2htb3ZlXCI9PT1iLnR5cGUmJmV2ZW50LnByZXZlbnREZWZhdWx0KCksaS5vbkRyYWdDbGFzcyYmaC5hZGRDbGFzcyhpLm9uRHJhZ0NsYXNzKXx8aC5jc3MoaS5vbkRyYWdTdHlsZSksZD1hLnRhYmxlRG5ELm1vdXNlQ29vcmRzKGIpLGY9ZC54LWEudGFibGVEbkQubW91c2VPZmZzZXQueCxnPWQueS1hLnRhYmxlRG5ELm1vdXNlT2Zmc2V0LnksYS50YWJsZURuRC5hdXRvU2Nyb2xsKGQpLGM9YS50YWJsZURuRC5maW5kRHJvcFRhcmdldFJvdyhoLGcpLGU9YS50YWJsZURuRC5maW5kRHJhZ0RpcmVjdGlvbihmLGcpLGEudGFibGVEbkQubW92ZVZlcnRpY2xlKGUsYyksYS50YWJsZURuRC5tb3ZlSG9yaXpvbnRhbChlLGMpLCExKX0sZmluZERyYWdEaXJlY3Rpb246ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmN1cnJlbnRUYWJsZS50YWJsZURuRENvbmZpZy5zZW5zaXRpdml0eSxkPXRoaXMub2xkWCxlPXRoaXMub2xkWSxmPWQtYyxnPWQrYyxoPWUtYyxpPWUrYyxqPXtob3Jpem9udGFsOmE+PWYmJmE8PWc/MDphPmQ/LTE6MSx2ZXJ0aWNhbDpiPj1oJiZiPD1pPzA6Yj5lPy0xOjF9O3JldHVybiAwIT09ai5ob3Jpem9udGFsJiYodGhpcy5vbGRYPWEpLDAhPT1qLnZlcnRpY2FsJiYodGhpcy5vbGRZPWIpLGp9LGZpbmREcm9wVGFyZ2V0Um93OmZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBkPTAsZT10aGlzLmN1cnJlbnRUYWJsZS5yb3dzLGY9dGhpcy5jdXJyZW50VGFibGUudGFibGVEbkRDb25maWcsZz0wLGg9bnVsbCxpPTA7aTxlLmxlbmd0aDtpKyspaWYoaD1lW2ldLGc9dGhpcy5nZXRQb3NpdGlvbihoKS55LGQ9cGFyc2VJbnQoaC5vZmZzZXRIZWlnaHQpLzIsMD09PWgub2Zmc2V0SGVpZ2h0JiYoZz10aGlzLmdldFBvc2l0aW9uKGguZmlyc3RDaGlsZCkueSxkPXBhcnNlSW50KGguZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQpLzIpLGM+Zy1kJiZjPGcrZClyZXR1cm4gYi5pcyhoKXx8Zi5vbkFsbG93RHJvcCYmIWYub25BbGxvd0Ryb3AoYixoKXx8YShoKS5oYXNDbGFzcyhcIm5vZHJvcFwiKT9udWxsOmg7cmV0dXJuIG51bGx9LHByb2Nlc3NNb3VzZXVwOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VycmVudFRhYmxlfHwhdGhpcy5kcmFnT2JqZWN0KXJldHVybiBudWxsO3ZhciBiPXRoaXMuY3VycmVudFRhYmxlLnRhYmxlRG5EQ29uZmlnLGQ9dGhpcy5kcmFnT2JqZWN0LGU9MCxoPTA7YShjKS51bmJpbmQoZix0aGlzLm1vdXNlbW92ZSkudW5iaW5kKGcsdGhpcy5tb3VzZXVwKSxiLmhpZXJhcmNoeUxldmVsJiZiLmF1dG9DbGVhblJlbGF0aW9ucyYmYSh0aGlzLmN1cnJlbnRUYWJsZS5yb3dzKS5maXJzdCgpLmZpbmQoXCJ0ZDpmaXJzdFwiKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXsoaD1hKHRoaXMpLnBhcmVudHMoXCJ0cjpmaXJzdFwiKS5kYXRhKFwibGV2ZWxcIikpJiZhKHRoaXMpLnBhcmVudHMoXCJ0cjpmaXJzdFwiKS5kYXRhKFwibGV2ZWxcIiwtLWgpJiZhKHRoaXMpLnJlbW92ZSgpfSkmJmIuaGllcmFyY2h5TGV2ZWw+MSYmYSh0aGlzLmN1cnJlbnRUYWJsZS5yb3dzKS5lYWNoKGZ1bmN0aW9uKCl7aWYoKGg9YSh0aGlzKS5kYXRhKFwibGV2ZWxcIikpPjEpZm9yKGU9YSh0aGlzKS5wcmV2KCkuZGF0YShcImxldmVsXCIpO2g+ZSsxOylhKHRoaXMpLmZpbmQoXCJ0ZDpmaXJzdFwiKS5jaGlsZHJlbihcIjpmaXJzdFwiKS5yZW1vdmUoKSxhKHRoaXMpLmRhdGEoXCJsZXZlbFwiLC0taCl9KSxiLm9uRHJhZ0NsYXNzJiZhKGQpLnJlbW92ZUNsYXNzKGIub25EcmFnQ2xhc3MpfHxhKGQpLmNzcyhiLm9uRHJvcFN0eWxlKSx0aGlzLmRyYWdPYmplY3Q9bnVsbCxiLm9uRHJvcCYmdGhpcy5vcmlnaW5hbE9yZGVyIT09dGhpcy5jdXJyZW50T3JkZXIoKSYmYShkKS5oaWRlKCkuZmFkZUluKFwiZmFzdFwiKSYmYi5vbkRyb3AodGhpcy5jdXJyZW50VGFibGUsZCksYi5vbkRyYWdTdG9wJiZiLm9uRHJhZ1N0b3AodGhpcy5jdXJyZW50VGFibGUsZCksdGhpcy5jdXJyZW50VGFibGU9bnVsbH0sbW91c2V1cDpmdW5jdGlvbihiKXtyZXR1cm4gYiYmYi5wcmV2ZW50RGVmYXVsdCgpLGEudGFibGVEbkQucHJvY2Vzc01vdXNldXAoKSwhMX0sanNvbml6ZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmN1cnJlbnRUYWJsZTtyZXR1cm4gYT9KU09OLnN0cmluZ2lmeSh0aGlzLnRhYmxlRGF0YShiKSxudWxsLGIudGFibGVEbkRDb25maWcuanNvblByZXRpZnlTZXBhcmF0b3IpOkpTT04uc3RyaW5naWZ5KHRoaXMudGFibGVEYXRhKGIpKX0sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGEucGFyYW0odGhpcy50YWJsZURhdGEodGhpcy5jdXJyZW50VGFibGUpKX0sc2VyaWFsaXplVGFibGU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVwiXCIsYz1hLnRhYmxlRG5EQ29uZmlnLnNlcmlhbGl6ZVBhcmFtTmFtZXx8YS5pZCxkPWEucm93cyxlPTA7ZTxkLmxlbmd0aDtlKyspe2IubGVuZ3RoPjAmJihiKz1cIiZcIik7dmFyIGY9ZFtlXS5pZDtmJiZhLnRhYmxlRG5EQ29uZmlnJiZhLnRhYmxlRG5EQ29uZmlnLnNlcmlhbGl6ZVJlZ2V4cCYmKGY9Zi5tYXRjaChhLnRhYmxlRG5EQ29uZmlnLnNlcmlhbGl6ZVJlZ2V4cClbMF0sYis9YytcIltdPVwiK2YpfXJldHVybiBifSxzZXJpYWxpemVUYWJsZXM6ZnVuY3Rpb24oKXt2YXIgYj1bXTtyZXR1cm4gYShcInRhYmxlXCIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmlkJiZiLnB1c2goYS5wYXJhbShhLnRhYmxlRG5ELnRhYmxlRGF0YSh0aGlzKSkpfSksYi5qb2luKFwiJlwiKX0sdGFibGVEYXRhOmZ1bmN0aW9uKGIpe3ZhciBjLGQsZSxmLGc9Yi50YWJsZURuRENvbmZpZyxoPVtdLGk9MCxqPTAsaz1udWxsLGw9e307aWYoYnx8KGI9dGhpcy5jdXJyZW50VGFibGUpLCFifHwhYi5yb3dzfHwhYi5yb3dzLmxlbmd0aClyZXR1cm57ZXJyb3I6e2NvZGU6NTAwLG1lc3NhZ2U6XCJOb3QgYSB2YWxpZCB0YWJsZS5cIn19O2lmKCFiLmlkJiYhZy5zZXJpYWxpemVQYXJhbU5hbWUpcmV0dXJue2Vycm9yOntjb2RlOjUwMCxtZXNzYWdlOlwiTm8gc2VyaWFsaXphYmxlIHVuaXF1ZSBpZCBwcm92aWRlZC5cIn19O2Y9Zy5hdXRvQ2xlYW5SZWxhdGlvbnMmJmIucm93c3x8YS5tYWtlQXJyYXkoYi5yb3dzKSxkPWcuc2VyaWFsaXplUGFyYW1OYW1lfHxiLmlkLGU9ZCxjPWZ1bmN0aW9uKGEpe3JldHVybiBhJiZnJiZnLnNlcmlhbGl6ZVJlZ2V4cD9hLm1hdGNoKGcuc2VyaWFsaXplUmVnZXhwKVswXTphfSxsW2VdPVtdLCFnLmF1dG9DbGVhblJlbGF0aW9ucyYmYShmWzBdKS5kYXRhKFwibGV2ZWxcIikmJmYudW5zaGlmdCh7aWQ6XCJ1bmRlZmluZWRcIn0pO2Zvcih2YXIgbT0wO208Zi5sZW5ndGg7bSsrKWlmKGcuaGllcmFyY2h5TGV2ZWwpe2lmKDA9PT0oaj1hKGZbbV0pLmRhdGEoXCJsZXZlbFwiKXx8MCkpZT1kLGg9W107ZWxzZSBpZihqPmkpaC5wdXNoKFtlLGldKSxlPWMoZlttLTFdLmlkKTtlbHNlIGlmKGo8aSlmb3IodmFyIG49MDtuPGgubGVuZ3RoO24rKyloW25dWzFdPT09aiYmKGU9aFtuXVswXSksaFtuXVsxXT49aSYmKGhbbl1bMV09MCk7aT1qLGEuaXNBcnJheShsW2VdKXx8KGxbZV09W10pLGs9YyhmW21dLmlkKSxrJiZsW2VdLnB1c2goayl9ZWxzZShrPWMoZlttXS5pZCkpJiZsW2VdLnB1c2goayk7cmV0dXJuIGx9fSxqUXVlcnkuZm4uZXh0ZW5kKHt0YWJsZURuRDphLnRhYmxlRG5ELmJ1aWxkLHRhYmxlRG5EVXBkYXRlOmEudGFibGVEbkQudXBkYXRlVGFibGVzLHRhYmxlRG5EU2VyaWFsaXplOmEucHJveHkoYS50YWJsZURuRC5zZXJpYWxpemUsYS50YWJsZURuRCksdGFibGVEbkRTZXJpYWxpemVBbGw6YS50YWJsZURuRC5zZXJpYWxpemVUYWJsZXMsdGFibGVEbkREYXRhOmEucHJveHkoYS50YWJsZURuRC50YWJsZURhdGEsYS50YWJsZURuRCl9KX0oalF1ZXJ5LHdpbmRvdyx3aW5kb3cuZG9jdW1lbnQpOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93W1wialF1ZXJ5XCJdOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBHcmlkIGZyb20gJ0Bjb21wb25lbnRzL2dyaWQvZ3JpZCc7XG5pbXBvcnQgU29ydGluZ0V4dGVuc2lvbiBmcm9tICdAY29tcG9uZW50cy9ncmlkL2V4dGVuc2lvbi9zb3J0aW5nLWV4dGVuc2lvbic7XG5pbXBvcnQgU3VibWl0Um93QWN0aW9uRXh0ZW5zaW9uIGZyb20gJ0Bjb21wb25lbnRzL2dyaWQvZXh0ZW5zaW9uL2FjdGlvbi9yb3cvc3VibWl0LXJvdy1hY3Rpb24tZXh0ZW5zaW9uJztcbmltcG9ydCBGaWx0ZXJzUmVzZXRFeHRlbnNpb24gZnJvbSAnQGNvbXBvbmVudHMvZ3JpZC9leHRlbnNpb24vZmlsdGVycy1yZXNldC1leHRlbnNpb24nO1xuaW1wb3J0IFJlbG9hZExpc3RBY3Rpb25FeHRlbnNpb24gZnJvbSAnQGNvbXBvbmVudHMvZ3JpZC9leHRlbnNpb24vcmVsb2FkLWxpc3QtZXh0ZW5zaW9uJztcbmltcG9ydCBFeHBvcnRUb1NxbE1hbmFnZXJFeHRlbnNpb24gZnJvbSAnQGNvbXBvbmVudHMvZ3JpZC9leHRlbnNpb24vZXhwb3J0LXRvLXNxbC1tYW5hZ2VyLWV4dGVuc2lvbic7XG5pbXBvcnQgTGlua1Jvd0FjdGlvbkV4dGVuc2lvbiBmcm9tICdAY29tcG9uZW50cy9ncmlkL2V4dGVuc2lvbi9saW5rLXJvdy1hY3Rpb24tZXh0ZW5zaW9uJztcbmltcG9ydCBTdWJtaXRCdWxrRXh0ZW5zaW9uIGZyb20gJ0Bjb21wb25lbnRzL2dyaWQvZXh0ZW5zaW9uL3N1Ym1pdC1idWxrLWFjdGlvbi1leHRlbnNpb24nO1xuaW1wb3J0IEJ1bGtBY3Rpb25DaGVja2JveEV4dGVuc2lvbiBmcm9tICdAY29tcG9uZW50cy9ncmlkL2V4dGVuc2lvbi9idWxrLWFjdGlvbi1jaGVja2JveC1leHRlbnNpb24nO1xuaW1wb3J0IENvbHVtblRvZ2dsaW5nRXh0ZW5zaW9uIGZyb20gJ0Bjb21wb25lbnRzL2dyaWQvZXh0ZW5zaW9uL2NvbHVtbi10b2dnbGluZy1leHRlbnNpb24nO1xuaW1wb3J0IFBvc2l0aW9uRXh0ZW5zaW9uIGZyb20gJ0Bjb21wb25lbnRzL2dyaWQvZXh0ZW5zaW9uL3Bvc2l0aW9uLWV4dGVuc2lvbic7XG5pbXBvcnQgQ2hvaWNlVHJlZSBmcm9tICdAY29tcG9uZW50cy9mb3JtL2Nob2ljZS10cmVlJztcbmltcG9ydCBUcmFuc2xhdGFibGVJbnB1dCBmcm9tICdAY29tcG9uZW50cy90cmFuc2xhdGFibGUtaW5wdXQnO1xuaW1wb3J0IHRleHRUb0xpbmtSZXdyaXRlQ29waWVyIGZyb20gJ0Bjb21wb25lbnRzL3RleHQtdG8tbGluay1yZXdyaXRlLWNvcGllcic7XG5pbXBvcnQgRmlsdGVyc1N1Ym1pdEJ1dHRvbkVuYWJsZXJFeHRlbnNpb25cbiAgZnJvbSAnQGNvbXBvbmVudHMvZ3JpZC9leHRlbnNpb24vZmlsdGVycy1zdWJtaXQtYnV0dG9uLWVuYWJsZXItZXh0ZW5zaW9uJztcbmltcG9ydCBUYWdnYWJsZUZpZWxkIGZyb20gJ0Bjb21wb25lbnRzL3RhZ2dhYmxlLWZpZWxkJztcbmltcG9ydCBTaG93Y2FzZUNhcmQgZnJvbSAnQGNvbXBvbmVudHMvc2hvd2Nhc2UtY2FyZC9zaG93Y2FzZS1jYXJkJztcbmltcG9ydCBTaG93Y2FzZUNhcmRDbG9zZUV4dGVuc2lvbiBmcm9tICdAY29tcG9uZW50cy9zaG93Y2FzZS1jYXJkL2V4dGVuc2lvbi9zaG93Y2FzZS1jYXJkLWNsb3NlLWV4dGVuc2lvbic7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuJCgoKSA9PiB7XG4gIGNvbnN0IGNtc0NhdGVnb3J5ID0gbmV3IEdyaWQoJ2Ntc19wYWdlX2NhdGVnb3J5Jyk7XG5cbiAgY21zQ2F0ZWdvcnkuYWRkRXh0ZW5zaW9uKG5ldyBSZWxvYWRMaXN0QWN0aW9uRXh0ZW5zaW9uKCkpO1xuICBjbXNDYXRlZ29yeS5hZGRFeHRlbnNpb24obmV3IEV4cG9ydFRvU3FsTWFuYWdlckV4dGVuc2lvbigpKTtcbiAgY21zQ2F0ZWdvcnkuYWRkRXh0ZW5zaW9uKG5ldyBGaWx0ZXJzUmVzZXRFeHRlbnNpb24oKSk7XG4gIGNtc0NhdGVnb3J5LmFkZEV4dGVuc2lvbihuZXcgU29ydGluZ0V4dGVuc2lvbigpKTtcbiAgY21zQ2F0ZWdvcnkuYWRkRXh0ZW5zaW9uKG5ldyBMaW5rUm93QWN0aW9uRXh0ZW5zaW9uKCkpO1xuICBjbXNDYXRlZ29yeS5hZGRFeHRlbnNpb24obmV3IFN1Ym1pdEJ1bGtFeHRlbnNpb24oKSk7XG4gIGNtc0NhdGVnb3J5LmFkZEV4dGVuc2lvbihuZXcgQnVsa0FjdGlvbkNoZWNrYm94RXh0ZW5zaW9uKCkpO1xuICBjbXNDYXRlZ29yeS5hZGRFeHRlbnNpb24obmV3IFN1Ym1pdFJvd0FjdGlvbkV4dGVuc2lvbigpKTtcbiAgY21zQ2F0ZWdvcnkuYWRkRXh0ZW5zaW9uKG5ldyBDb2x1bW5Ub2dnbGluZ0V4dGVuc2lvbigpKTtcbiAgY21zQ2F0ZWdvcnkuYWRkRXh0ZW5zaW9uKG5ldyBQb3NpdGlvbkV4dGVuc2lvbigpKTtcbiAgY21zQ2F0ZWdvcnkuYWRkRXh0ZW5zaW9uKG5ldyBGaWx0ZXJzU3VibWl0QnV0dG9uRW5hYmxlckV4dGVuc2lvbigpKTtcblxuICBjb25zdCB0cmFuc2xhdG9ySW5wdXQgPSBuZXcgVHJhbnNsYXRhYmxlSW5wdXQoKTtcblxuICB0ZXh0VG9MaW5rUmV3cml0ZUNvcGllcih7XG4gICAgc291cmNlRWxlbWVudFNlbGVjdG9yOiAnaW5wdXRbbmFtZV49XCJjbXNfcGFnZV9jYXRlZ29yeVtuYW1lXVwiXScsXG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW4gKi9cbiAgICBkZXN0aW5hdGlvbkVsZW1lbnRTZWxlY3RvcjogYCR7dHJhbnNsYXRvcklucHV0LmxvY2FsZUlucHV0U2VsZWN0b3J9Om5vdCguZC1ub25lKSBpbnB1dFtuYW1lXj1cImNtc19wYWdlX2NhdGVnb3J5W2ZyaWVuZGx5X3VybF1cIl1gLFxuICB9KTtcblxuICBuZXcgQ2hvaWNlVHJlZSgnI2Ntc19wYWdlX2NhdGVnb3J5X3BhcmVudF9jYXRlZ29yeScpO1xuXG4gIGNvbnN0IHNob3BDaG9pY2VUcmVlID0gbmV3IENob2ljZVRyZWUoJyNjbXNfcGFnZV9jYXRlZ29yeV9zaG9wX2Fzc29jaWF0aW9uJyk7XG4gIHNob3BDaG9pY2VUcmVlLmVuYWJsZUF1dG9DaGVja0NoaWxkcmVuKCk7XG5cbiAgbmV3IFRhZ2dhYmxlRmllbGQoe1xuICAgIHRva2VuRmllbGRTZWxlY3RvcjogJ2lucHV0W25hbWVePVwiY21zX3BhZ2VfY2F0ZWdvcnlbbWV0YV9rZXl3b3Jkc11cIl0nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGNyZWF0ZVRva2Vuc09uQmx1cjogdHJ1ZSxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBjbXNHcmlkID0gbmV3IEdyaWQoJ2Ntc19wYWdlJyk7XG4gIGNtc0dyaWQuYWRkRXh0ZW5zaW9uKG5ldyBSZWxvYWRMaXN0QWN0aW9uRXh0ZW5zaW9uKCkpO1xuICBjbXNHcmlkLmFkZEV4dGVuc2lvbihuZXcgRXhwb3J0VG9TcWxNYW5hZ2VyRXh0ZW5zaW9uKCkpO1xuICBjbXNHcmlkLmFkZEV4dGVuc2lvbihuZXcgRmlsdGVyc1Jlc2V0RXh0ZW5zaW9uKCkpO1xuICBjbXNHcmlkLmFkZEV4dGVuc2lvbihuZXcgU29ydGluZ0V4dGVuc2lvbigpKTtcbiAgY21zR3JpZC5hZGRFeHRlbnNpb24obmV3IENvbHVtblRvZ2dsaW5nRXh0ZW5zaW9uKCkpO1xuICBjbXNHcmlkLmFkZEV4dGVuc2lvbihuZXcgQnVsa0FjdGlvbkNoZWNrYm94RXh0ZW5zaW9uKCkpO1xuICBjbXNHcmlkLmFkZEV4dGVuc2lvbihuZXcgU3VibWl0QnVsa0V4dGVuc2lvbigpKTtcbiAgY21zR3JpZC5hZGRFeHRlbnNpb24obmV3IFN1Ym1pdFJvd0FjdGlvbkV4dGVuc2lvbigpKTtcbiAgY21zR3JpZC5hZGRFeHRlbnNpb24obmV3IFBvc2l0aW9uRXh0ZW5zaW9uKCkpO1xuICBjbXNHcmlkLmFkZEV4dGVuc2lvbihuZXcgRmlsdGVyc1N1Ym1pdEJ1dHRvbkVuYWJsZXJFeHRlbnNpb24oKSk7XG4gIGNtc0dyaWQuYWRkRXh0ZW5zaW9uKG5ldyBMaW5rUm93QWN0aW9uRXh0ZW5zaW9uKCkpO1xuXG4gIGNvbnN0IGhlbHBlckJsb2NrID0gbmV3IFNob3djYXNlQ2FyZCgnY21zLXBhZ2VzLXNob3djYXNlLWNhcmQnKTtcbiAgaGVscGVyQmxvY2suYWRkRXh0ZW5zaW9uKG5ldyBTaG93Y2FzZUNhcmRDbG9zZUV4dGVuc2lvbigpKTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==