9 lines
101 KiB
JavaScript

/*
This is the Obsidian example vault is amazing, there are a lot of dazzling features and showcase, I believe you will wonder a bit, is this Obsidian?
[Blue-topaz-examples](https://github.com/cumany/Blue-topaz-examples)
*/
var me=Object.create;var H=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var ve=Object.getPrototypeOf,ye=Object.prototype.hasOwnProperty;var R=i=>H(i,"__esModule",{value:!0});var Te=(i,e)=>{R(i);for(var a in e)H(i,a,{get:e[a],enumerable:!0})},Se=(i,e,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of Ce(e))!ye.call(i,c)&&c!=="default"&&H(i,c,{get:()=>e[c],enumerable:!(a=be(e,c))||a.enumerable});return i},D=i=>Se(R(H(i!=null?me(ve(i)):{},"default",i&&i.__esModule&&"default"in i?{get:()=>i.default,enumerable:!0}:{value:i,enumerable:!0})),i);var w=(i,e,a)=>new Promise((c,p)=>{var n=o=>{try{s(a.next(o))}catch(r){p(r)}},t=o=>{try{s(a.throw(o))}catch(r){p(r)}},s=o=>o.done?c(o.value):Promise.resolve(o.value).then(n,t);s((a=a.apply(i,e)).next())});Te(exports,{default:()=>z,refresh_node:()=>ue,selfDestruct:()=>V});var m=D(require("obsidian"));var v=D(require("obsidian"));function I(i,e,a,c,p,n=null){return w(this,null,function*(){let t=/(?<=^\s*)[0-9]+\.\s/,s=/(?<=^\s*)[\-\+]\s/,o,r="";(o=t.exec(a))!==null?(r=o[0],a=a.replace(t,"")):(o=s.exec(a))!==null&&(r=o[0],a=a.replace(s,""));let g=c;yield v.MarkdownRenderer.renderMarkdown(a,g,p,n);let f=g.createEl("a");f.addClass("text"),f.onclick=function(h){var l;let d=(l=parseInt(g.parentElement.getAttribute("data-line")))!=null?l:0;if(h.ctrlKey||h.metaKey)we(e,d);else{Ee(e,d);let C=g.parentElement.parentElement.querySelector(".text-wrap.located");C&&C.removeClass("located"),g.addClass("located")}};let u=g.querySelector("p");if(u){let h=/<a[^>]*>|<\/[^>]*a>/gm;r?f.innerHTML=r+u.innerHTML.replace(h,""):f.innerHTML=u.innerHTML.replace(h,""),g.removeChild(u),i.settings.isTooltip&&(g.setAttribute("aria-label",a),i.settings.positionStyle=="right"&&g.setAttribute("aria-label-position","left"),i.settings.positionStyle=="left"&&g.setAttribute("aria-label-position","right"),i.settings.positionStyle=="both"&&g.setAttribute("aria-label-position","top"))}})}function _(i,e,a,c,p){return w(this,null,function*(){let n=a.createEl("li");n.addClass("heading-list-item"),n.setAttribute("data-level",c.level.toString()),n.setAttribute("data-id",p.toString()),n.setAttribute("data-line",c.position.start.line.toString());let t=n.createEl("div");t.addClass("text-wrap"),I(i,e,c.heading,t,e.file.path,null);let s=n.createEl("div");s.addClass("line-wrap"),s.createDiv().addClass("line")})}var Ee=(i,e)=>{i.leaf.openFile(i.file,{eState:{line:e}})},we=(i,e)=>{var n,t;let a=(t=(n=i==null?void 0:i.currentMode.getFoldInfo())==null?void 0:n.folds)!=null?t:[],c=e,p=0;if(a.some((s,o)=>(p=o,s.from==c)))a.splice(p,1);else{let s={from:e,to:e+1};a.push(s)}i==null||i.currentMode.applyFoldInfo({folds:a,lines:i.editor.lineCount()}),i==null||i.onMarkdownFold()};function P(i,e){var p;let a=(n,t)=>{let s=i.workspace.getActiveFile(),o=i.metadataCache.getFileCache(s).headings,r=[];if(o==null||o.map(l=>{l.heading=l.heading.replace(/<\/?[\s\S]*?(?:".*")*>/g,""),r.push(l)}),e.headingdata=r,e.headingdata.length==0)return;e.settings.positionStyle=="right"?(t.addClass("floating-right"),t.removeClass("floating-left"),t.removeClass("floating-both")):e.settings.positionStyle=="left"?(t.addClass("floating-left"),t.removeClass("floating-rigth"),t.removeClass("floating-both")):e.settings.positionStyle=="both"&&(t.addClass("floating-both"),t.removeClass("floating-left"),t.removeClass("floating-rigth")),e.settings.isLeft?(t.removeClass("alignLeft"),t.addClass("alignLeft")):t.removeClass("alignLeft");let g=t.createEl("ul");g.addClass("floating-toc");let f=g.createEl("div");f.addClass("toolbar"),f.addClass("pin"),f.addClass("hide"),new v.ButtonComponent(f).setIcon("pin").setTooltip("pin").onClick(()=>{t.classList.contains("pin")?t.removeClass("pin"):t.addClass("pin")}),g.onmouseenter=function(){f.removeClass("hide"),t.addClass("hover")},g.onmouseleave=function(){f.addClass("hide"),t.removeClass("hover")},new v.ButtonComponent(f).setIcon("double-up-arrow-glyph").setTooltip("Scroll to Top").setClass("top").onClick(()=>{let l=this.app.workspace.getActiveViewOfType(v.MarkdownView);l&&l.setEphemeralState({scroll:0})}),new v.ButtonComponent(f).setIcon("copy").setTooltip("copy to clipboard").setClass("copy").onClick(()=>w(this,null,function*(){let l=e.headingdata.map(C=>" ".repeat(C.level-1)+C.heading);yield navigator.clipboard.writeText(l.join(`
`)),new v.Notice("Copied")})),e.settings.ignoreTopHeader&&(e.headingdata=i.metadataCache.getFileCache(s).headings.slice(1)),e.headingdata.forEach((l,C)=>{let O=i.workspace.getActiveViewOfType(v.MarkdownView);_(e,O,g,l,C)}),n==null||n.querySelector(".markdown-source-view").insertAdjacentElement("beforebegin",t)};if(this.app.workspace.getActiveViewOfType(v.MarkdownView)){(0,v.requireApiVersion)("0.15.0")?activeDocument=activeWindow.document:activeDocument=window.document;let n=e.app.workspace.getActiveViewOfType(v.MarkdownView);if(n){if((p=n.contentEl)==null?void 0:p.querySelector(".floating-toc-div"))return;{let s=createEl("div");s.addClass("floating-toc-div"),e.settings.isDefaultPin&&s.addClass("pin"),a(n.contentEl,s)}}}}var S=D(require("obsidian"));var W=["left","right","both"],j={ignoreTopHeader:!1,positionStyle:"left",isLoadOnMobile:!0,isLeft:!1,isDefaultPin:!1,isTooltip:!1};var pe=D(require("obsidian"));var U={};var G={};var J={};var K={};var q={"Floating TOC position":"Floating TOC position","Floating TOC position, default on the left side of the notes":"Floating TOC position, default on the left side of the notes","Ignore top-level headers":"Ignore top-level headers","Select whether to ignore the top-level headings. When turned on, the top-level headings in the current note are not displayed in the floating TOC.":"Select whether to ignore the top-level headings. When turned on, the top-level headings in the current note are not displayed in the floating TOC.","Plugin Settings":"Plugin Settings","Default Pin":"Default Pin","Enable Tooltip":"Enable Tooltip","Plugin Style Settings":"Plugin Style Settings","Mobile enabled or not":"Mobile enabled or not","Whether to enable the plugin for the mobile client, the default is enabled.":"Whether to enable the plugin for the mobile client, the default is enabled.","If the floating Toc option is not found in the style setting, please reload the style setting plugin (turn it off and on again)":"If the floating Toc option is not found in the style setting, please reload the style setting plugin (turn it off and on again)","Left alignment of TOC text":"Left alignment of TOC text","Aligned on both sides":"Aligned on both sides","Floating TOC position, on the right side of the notes":"Floating TOC position, on the right side of the notes","whether the text in TOC is left aligned":"whether the text in TOC is left aligned","When the panel is split left and right, the right side of the layout is aligned right and the left side of the panel is aligned left.":"When the panel is split left and right, the right side of the layout is aligned right and the left side of the panel is aligned left."};var Y={};var $={};var Q={};var X={};var Z={};var ee={};var te={};var ie={};var ne={};var oe={};var le={};var ae={};var se={};var re={};var de={};var ce={};var ge={"Floating TOC position":"\u6D6E\u52A8\u76EE\u5F55\u663E\u793A\u4F4D\u7F6E","Floating TOC position, default on the left side of the notes":"\u6D6E\u52A8\u76EE\u5F55\u663E\u793A\u4F4D\u7F6E\uFF0C\u9ED8\u8BA4\u663E\u793A\u5728\u7B14\u8BB0\u5DE6\u4FA7","Ignore top-level headers":"\u662F\u5426\u5FFD\u7565\u9876\u7EA7\u76EE\u5F55","Select whether to ignore the top-level headings. When turned on, the top-level headings in the current note are not displayed in the floating TOC.":"\u9009\u62E9\u662F\u5426\u5FFD\u7565\u9876\u7EA7\u6807\u9898\uFF0C\u5F00\u542F\u540E\u5F53\u524D\u6587\u6863\u4E2D\u6700\u9876\u7EA7\u7684\u6807\u9898\u4E0D\u663E\u793A\u5728\u6D6E\u52A8\u76EE\u5F55\u4E2D\u3002","Plugin Settings":"\u63D2\u4EF6\u8BBE\u7F6E","Default Pin":"\u662F\u5426\u9ED8\u8BA4\u9489\u5728\u7B14\u8BB0\u4E0A","Enable Tooltip":"\u662F\u5426\u5F00\u542F\u6807\u9898\u63D0\u793A","Plugin Style Settings":"\u63D2\u4EF6\u6837\u5F0F\u8BBE\u7F6E","Mobile enabled or not":"\u662F\u5426\u5728\u79FB\u52A8\u7AEF\u542F\u7528","Whether to enable the plugin for the mobile client, the default is enabled.":"\u79FB\u52A8\u5BA2\u6237\u7AEF\u662F\u5426\u542F\u7528\u63D2\u4EF6\uFF0C\u9ED8\u8BA4\u542F\u7528\u3002","If the floating Toc option is not found in the style setting, please reload the style setting plugin (turn it off and on again)":"\u5982\u679Cstyle setting \u4E2D\u65E0\u6CD5\u770B\u5230 floating Toc\u9009\u9879\uFF0C\u8BF7\u91CD\u8F7Dstyle setting\u63D2\u4EF6\uFF08\u5173\u95ED\u518D\u5F00\u542F\u5373\u53EF\uFF09","Left alignment of TOC text":"\u76EE\u5F55\u6587\u5B57\u5DE6\u5BF9\u9F50","Floating TOC position, on the right side of the notes":"\u6D6E\u52A8\u76EE\u5F55\u663E\u793A\u4F4D\u7F6E\uFF0C\u663E\u793A\u5728\u7B14\u8BB0\u53F3\u4FA7","whether the text in TOC is left aligned":"\u5F53\u5DE5\u5177\u680F\u5728\u53F3\u4FA7\u65F6\uFF0C\u76EE\u5F55\u4E2D\u7684\u6807\u9898\u662F\u5426\u5DE6\u5BF9\u9F50","Aligned on both sides":"\u4E24\u7AEF\u5BF9\u9F50","When the panel is split left and right, the right side of the layout is aligned right and the left side of the panel is aligned left.":"\u5F53\u9762\u677F\u5DE6\u53F3\u5206\u5272\u7684\u65F6\u5019\uFF0C\u53F3\u4FA7\u7248\u9762\u53F3\u5BF9\u9F50\uFF0C\u5DE6\u4FA7\u9762\u677F\u5DE6\u5BF9\u9F50\u3002"};var he={"Floating TOC position":"\u6D6E\u52D5\u76EE\u9304\u986F\u793A\u4F4D\u7F6E","Floating TOC position, default on the left side of the notes":"\u6D6E\u52D5\u76EE\u9304\u986F\u793A\u4F4D\u7F6E\uFF0C\u9ED8\u8A8D\u986F\u793A\u5728\u7B46\u8A18\u5DE6\u5074","Ignore top-level headers":"\u662F\u5426\u5FFD\u7565\u9802\u7D1A\u76EE\u9304","Select whether to ignore the top-level headings. When turned on, the top-level headings in the current note are not displayed in the floating TOC.":"\u9078\u64C7\u662F\u5426\u5FFD\u7565\u9802\u7D1A\u6A19\u984C\uFF0C\u958B\u555F\u5F8C\u7576\u524D\u6587\u6A94\u4E2D\u6700\u9802\u7D1A\u7684\u6A19\u984C\u4E0D\u986F\u793A\u5728\u6D6E\u52D5\u76EE\u9304\u4E2D\u3002","Plugin Settings":"\u63D2\u4EF6\u8A2D\u7F6E","Default Pin":"\u662F\u5426\u9ED8\u8A8D\u91D8\u5728\u7B46\u8A18\u4E0A","Plugin Style Settings":"\u63D2\u4EF6\u6A23\u5F0F\u8A2D\u7F6E","Mobile enabled or not":"\u662F\u5426\u5728\u79FB\u52D5\u7AEF\u555F\u7528","Whether to enable the plugin for the mobile client, the default is enabled.":"\u79FB\u52D5\u5BA2\u6236\u7AEF\u662F\u5426\u555F\u7528\u63D2\u4EF6\uFF0C\u9ED8\u8A8D\u555F\u7528\u3002","If the floating Toc option is not found in the style setting, please reload the style setting plugin (turn it off and on again)":"\u5982\u679Cstyle setting \u4E2D\u7121\u6CD5\u770B\u5230 floating Toc\u9078\u9805\uFF0C\u8ACB\u91CD\u8F09style setting\u63D2\u4EF6\uFF08\u95DC\u9589\u518D\u958B\u555F\u5373\u53EF\uFF09","Left alignment of TOC text":"\u76EE\u9304\u6587\u5B57\u5DE6\u5C0D\u9F4A","Floating TOC position, on the right side of the notes":"\u6D6E\u52D5\u76EE\u9304\u986F\u793A\u4F4D\u7F6E\uFF0C\u986F\u793A\u5728\u7B46\u8A18\u53F3\u5074","whether the text in TOC is left or right aligned When the floating toc is on the right":"\u7576\u5DE5\u5177\u6B04\u5728\u53F3\u5074\u6642\uFF0C\u76EE\u9304\u4E2D\u7684\u6A19\u984C\u662F\u5426\u5DE6\u5C0D\u9F4A","Aligned on both sides":"\u5169\u7AEF\u5C0D\u9F4A","When the panel is split left and right, the right side of the layout is aligned right and the left side of the panel is aligned left.":"\u7576\u9762\u677F\u5DE6\u53F3\u5206\u5272\u7684\u6642\u5019\uFF0C\u53F3\u5074\u7248\u9762\u53F3\u5C0D\u9F4A\uFF0C\u5DE6\u5074\u9762\u677F\u5DE6\u5C0D\u9F4A\u3002"};var xe={ar:U,cs:G,da:J,de:K,en:q,"en-gb":Y,es:$,fr:Q,hi:X,id:Z,it:ee,ja:te,ko:ie,nl:ne,nn:oe,pl:le,pt:ae,"pt-br":se,ro:re,ru:de,tr:ce,"zh-cn":ge,"zh-tw":he},fe=xe[pe.moment.locale()];function y(i){return fe&&fe[i]||q[i]}var N=class extends S.PluginSettingTab{constructor(e,a){super(e,a);this.plugin=a,addEventListener("refresh-toc",()=>{V(),P(e,this.plugin)})}display(){let{containerEl:e}=this;e.empty(),e.createEl("h1",{text:"Obsidian Floating TOC "}),e.createEl("span",{text:""}).createEl("a",{text:"Author: Cuman \u2728",href:"https://github.com/cumany"}),e.createEl("span",{text:""}).createEl("a",{text:"Readme:\u4E2D\u6587",href:"https://github.com/cumany/obsidian-floating-toc-plugin/blob/master/README-zh_cn.md"}),e.createEl("span",{text:""}).createEl("a",{text:"|English ",href:"https://github.com/cumany/obsidian-floating-toc-plugin/blob/master/README.md"});let a=e.createEl("div");a.addClass("callout"),a.setAttribute("data-callout","info");let c=a.createEl("div",{text:"\u{1F511}TIPS:"});c.addClass("callout-title"),c.createEl("br"),a.createEl("div",{text:"ctrl + click on the floating toc to collapse/expand the header."}).addClass("callout-content"),e.createEl("h2",{text:y("Plugin Settings")});let n=new S.Setting(e);n.setName(y("Floating TOC position")),this.plugin.settings.positionStyle=="both"?n.setDesc(y("When the panel is split left and right, the right side of the layout is aligned right and the left side of the panel is aligned left.")):this.plugin.settings.positionStyle=="right"?n.setDesc(y("Floating TOC position, on the right side of the notes")):n.setDesc(y("Floating TOC position, default on the left side of the notes")),n.addDropdown(h=>{let d={};W.map(l=>d[l]=l),h.addOptions(d),h.setValue(this.plugin.settings.positionStyle).onChange(l=>{this.plugin.settings.positionStyle=l,this.plugin.saveSettings(),setTimeout(()=>{this.display(),dispatchEvent(new Event("refresh-toc"))},100)})}),this.plugin.settings.positionStyle!="left"&&new S.Setting(e).setName(y("Left alignment of TOC text")).setDesc(y("whether the text in TOC is left aligned")).addToggle(h=>{var d;return h.setValue((d=this.plugin.settings)==null?void 0:d.isLeft).onChange(l=>{this.plugin.settings.isLeft=l,this.plugin.saveSettings(),setTimeout(()=>{this.display(),dispatchEvent(new Event("refresh-toc"))},100)})}),new S.Setting(e).setName(y("Mobile enabled or not")).setDesc(y("Whether to enable the plugin for the mobile client, the default is enabled.")).addToggle(h=>{var d;return h.setValue((d=this.plugin.settings)==null?void 0:d.isLoadOnMobile).onChange(l=>{this.plugin.settings.isLoadOnMobile=l,this.plugin.saveSettings(),setTimeout(()=>{dispatchEvent(new Event("refresh-toc"))},100)})}),new S.Setting(e).setName(y("Ignore top-level headers")).setDesc(y("Select whether to ignore the top-level headings. When turned on, the top-level headings in the current note are not displayed in the floating TOC.")).addToggle(h=>{var d;return h.setValue((d=this.plugin.settings)==null?void 0:d.ignoreTopHeader).onChange(l=>{this.plugin.settings.ignoreTopHeader=l,this.plugin.saveSettings(),setTimeout(()=>{dispatchEvent(new Event("refresh-toc"))},100)})}),new S.Setting(e).setName(y("Default Pin")).addToggle(h=>{var d;return h.setValue((d=this.plugin.settings)==null?void 0:d.isDefaultPin).onChange(l=>{this.plugin.settings.isDefaultPin=l,this.plugin.saveSettings(),setTimeout(()=>{dispatchEvent(new Event("refresh-toc"))},100)})}),new S.Setting(e).setName(y("Enable Tooltip")).addToggle(h=>{var d;return h.setValue((d=this.plugin.settings)==null?void 0:d.isTooltip).onChange(l=>{this.plugin.settings.isTooltip=l,this.plugin.saveSettings(),setTimeout(()=>{dispatchEvent(new Event("refresh-toc"))},100)})}),e.createEl("h2",{text:y("Plugin Style Settings")});let t=e.createEl("div");t.addClass("callout"),t.setAttribute("data-callout","warning"),t.createEl("div",{text:"\u{1F514} Notice: Please click the button again,If the floating-toc option is not found in the style settings"}).addClass("callout-title");let o=t.createEl("div");o.addClass("callout-content"),app.plugins.enabledPlugins.has("obsidian-style-settings")?(o.createEl("br"),new S.ButtonComponent(o).setIcon("palette").setClass("mod-cta").setButtonText("\u{1F3A8} Open style settings").onClick(()=>{app.setting.open(),app.setting.openTabById("obsidian-style-settings"),app.workspace.trigger("parse-style-settings"),setTimeout(()=>{var l,C,O;let d=app.setting.activeTab.containerEl.querySelector(".setting-item-heading[data-id='floating-toc-styles']");d?(l=d.addClass)==null||l.call(d,"float-cta"):(app.workspace.trigger("parse-style-settings"),(O=(C=app.setting.activeTab.containerEl.querySelector(".setting-item-heading[data-id='floating-toc-styles']"))==null?void 0:C.addClass)==null||O.call(C,"float-cta"))},250)})):(o.createEl("br"),o.createEl("span",{text:""}).createEl("a",{text:"Please install or enable the style-settings plugin",href:"obsidian://show-plugin?id=obsidian-style-settings"}));let g=e.createEl("div",{cls:"cDonationSection"}),f=createEl("p"),u=createEl("p");u.appendText("If you like this Plugin and are considering donating to support continued development, use the button below!"),f.setAttribute("style","color: var(--text-muted)"),g.appendChild(u),g.appendChild(f),g.appendChild(Ae("https://github.com/cumany#thank-you-very-much-for-your-support"))}},Ae=i=>{let e=createEl("a");return e.setAttribute("href",i),e.addClass("buymeacoffee-img"),e.innerHTML='<img src="https://img.buymeacoffee.com/button-api/?text=Buy me a coffee &emoji=&slug=Cuman&button_colour=BD5FFF&font_colour=ffffff&font_family=Poppins&outline_colour=000000&coffee_colour=FFDD00" />',e};var E,F=0;function V(){(0,m.requireApiVersion)("0.15.0")?E=activeWindow.document:E=window.document,E.querySelectorAll(".floating-toc-div").forEach(e=>{e&&e.remove()})}function ue(i,e){var c;(0,m.requireApiVersion)("0.15.0")?E=activeWindow.document:E=window.document;let a=(c=e.contentEl)==null?void 0:c.querySelector(".floating-toc-div");if(a){let p=a.querySelector("ul.floating-toc");p||(p=a.createEl("ul"),p.addClass("floating-toc"));let n=a==null?void 0:a.querySelectorAll("li.heading-list-item"),t=i.headingdata;return t?(n.length>=t.length?n==null||n.forEach((s,o)=>{var r;if(t[o]){if(t[o].level==s.getAttribute("data-level")&&t[o].heading==s.children[0].innerText&&t[o].position.start.line==s.getAttribute("data-line"))return;s.setAttribute("data-level",t[o].level.toString()),s.setAttribute("data-id",o.toString()),s.setAttribute("data-line",t[o].position.start.line.toString()),(r=s.children[0].querySelector("a"))==null||r.remove(),I(i,e,t[o].heading,s.children[0],e.file.path,null)}else s.remove()}):t==null||t.forEach((s,o)=>{var r;if(o<=n.length-1){if(s.level.toString()==n[o].getAttribute("data-level")&&s.heading==n[o].children[0].innerText&&s.position.start.line.toString()==n[o].getAttribute("data-line"))return;n[o].setAttribute("data-level",s.level.toString()),n[o].setAttribute("data-id",o.toString()),n[o].setAttribute("data-line",s.position.start.line.toString()),(r=n[o].children[0].querySelector("a"))==null||r.remove(),I(i,e,s.heading,n[o].children[0],e.file.path,null)}else _(i,e,p,s,o)}),!0):(p.remove(),!1)}else return!1}function B(i){var e=[];if(i==null?void 0:i.previousElementSibling)for(;i=i.previousElementSibling;)i.nodeType==1&&e.push(i);return e}function Oe(i,e,a){var p,n,t,s,o,r;let c=a.target;if(((p=c.parentElement)==null?void 0:p.classList.contains("cm-editor"))||((n=c.parentElement)==null?void 0:n.classList.contains("markdown-reading-view"))){let g=i.workspace.getActiveViewOfType(m.MarkdownView),f,u={};if(g){f=(t=g.currentMode.getScroll())!=null?t:0;let h=e.headingdata,d=(s=h==null?void 0:h.length)!=null?s:0,l=g.contentEl.querySelector(".floating-toc");if(l){let C=parseInt((o=l.querySelector("li.heading-list-item"))==null?void 0:o.getAttribute("data-line")),O=parseInt((r=l.lastElementChild)==null?void 0:r.getAttribute("data-line"));if(f<=0){let M=l.querySelector(".heading-list-item.located");M&&M.removeClass("located");let b=l==null?void 0:l.querySelector(`li[data-line='${C}']`);b&&b.addClass("located");let k=parseInt(b==null?void 0:b.getAttribute("data-level"));k=k>1?k-1:1;let T=B(b),L=l==null?void 0:l.querySelector("li.focus");L&&L.removeClass("focus"),T.some(x=>{if(x.dataset.level<=k.toString())return x.addClass("focus"),!0});let A=l.querySelector(".heading-list-item");setTimeout(()=>A.scrollIntoViewIfNeeded(),300)}else{for(;--d>=0;)if(h[d].position.start.line<=f){u=h[d],F=h[d].position.start.line;break}if(!u)return;let M=l.querySelector(".heading-list-item.located");M&&M.removeClass("located"),!F&&l&&(F=C);let b=l==null?void 0:l.querySelector(`li[data-line='${F}']`);if(b){if(F==O||F==C)b.addClass("located");else if(b.nextElementSibling)if(parseInt(b.nextElementSibling.getAttribute("data-line"))<=f){b.nextElementSibling.addClass("located");let T=parseInt(b.nextElementSibling.getAttribute("data-level"));T=T>1?T-1:1;let L=B(b.nextElementSibling),A=l==null?void 0:l.querySelector("li.focus");A&&A.removeClass("focus"),L.some(x=>{if(x.dataset.level<=T.toString())return x.addClass("focus"),!0})}else{b.addClass("located");let T=parseInt(b.getAttribute("data-level"));T=T>1?T-1:1;let L=B(b),A=l==null?void 0:l.querySelector("li.focus");A&&A.removeClass("focus"),L.some(x=>{if(x.dataset.level<=T.toString())return x.addClass("focus"),!0})}b.scrollIntoViewIfNeeded()}}}}}}var z=class extends m.Plugin{constructor(){super(...arguments);this.handleScroll=(e,a,c)=>(0,m.debounce)(Oe(e,a,c),200)}onload(){return w(this,null,function*(){(0,m.requireApiVersion)("0.15.0")?E=activeWindow.document:E=window.document,yield this.loadSettings();let e=n=>{n&&(ue(this,n)||P(app,this))},a=this.settings.isLoadOnMobile;if(m.Platform.isMobileApp&&a){console.log("floating toc disable loading on mobile");return}this.addCommand({id:"pin-toc-panel",name:"Pinning the Floating TOC panel",icon:"pin",callback:()=>w(this,null,function*(){let n=this.app.workspace.getActiveViewOfType(m.MarkdownView);if(n){let t=n.contentEl.querySelector(".floating-toc-div");t&&(t.classList.contains("pin")?t.removeClass("pin"):t.addClass("pin"))}})}),this.addCommand({id:"hide-toc-panel",name:"Hide/Show the Floating TOC panel",icon:"list",callback:()=>w(this,null,function*(){let n=this.app.workspace.getActiveViewOfType(m.MarkdownView);if(n){let t=n.contentEl.querySelector(".floating-toc-div");t&&(t.classList.contains("hide")?t.removeClass("hide"):t.addClass("hide"))}})}),this.registerEvent(this.app.workspace.on("active-leaf-change",()=>{let n=this.app.workspace.getActiveViewOfType(m.MarkdownView);if(n){let t=this.app.workspace.getActiveFile(),s=this.app.metadataCache.getFileCache(t).headings,o=[];s==null||s.map(r=>{r.heading=r.heading.replace(/<\/?[\s\S]*?(?:".*")*>/g,""),o.push(r)}),this.headingdata=o,this.settings.ignoreTopHeader&&(this.headingdata=s.slice(1)),p(n)}})),this.registerEvent(this.app.metadataCache.on("changed",()=>{var t;let n=this.app.workspace.getActiveViewOfType(m.MarkdownView);if(n){let s=n.file,o=this.app.metadataCache.getFileCache(s).headings,r=[];o==null||o.map(u=>{u.heading=u.heading.replace(/<\/?[\s\S]*?(?:".*")*>/g,""),r.push(u)});let g=r==null?void 0:r.map(u=>u.level+u.heading+u.position.start.line),f=(t=this.headingdata)==null?void 0:t.map(u=>u.level+u.heading+u.position.start.line);if(JSON.stringify(f)==JSON.stringify(g))return;this.headingdata=r,this.settings.ignoreTopHeader&&(this.headingdata=r.slice(1)),p(n)}}));let c=n=>{e(n)},p=n=>(0,m.debounce)(c(n),300,!0);E.addEventListener("scroll",n=>{this.handleScroll(this.app,this,n)},!0),this.addSettingTab(new N(this.app,this)),e(this.app.workspace.getActiveViewOfType(m.MarkdownView)),(0,m.requireApiVersion)("0.15.0")&&this.app.workspace.on("window-open",n=>{n.doc.addEventListener("scroll",t=>{this.handleScroll(this.app,this,t)},!0)}),app.workspace.onLayoutReady(()=>{app.workspace.trigger("parse-style-settings")})})}onunload(){(0,m.requireApiVersion)("0.15.0")?E=activeWindow.document:E=window.document,E.removeEventListener("scroll",e=>{this.handleScroll(this.app,this,e)},!0),V()}setHeadingdata(e){this.headingdata=e}loadSettings(){return w(this,null,function*(){this.settings=Object.assign({},j,yield this.loadData())})}saveSettings(){return w(this,null,function*(){yield this.saveData(this.settings)})}};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21haW4udHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvZmxvYXRpbmd0b2NVSS50cyIsICIuLi9zcmMvc2V0dGluZ3Mvc2V0dGluZ3NUYWIudHMiLCAiLi4vc3JjL3NldHRpbmdzL3NldHRpbmdzRGF0YS50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2hlbHBlci50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9hci50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9jei50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9kYS50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9kZS50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9lbi50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9lbi1nYi50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9lcy50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9mci50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9oaS50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9pZC50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9pdC50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9qYS50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9rby50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9ubC50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9uby50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9wbC50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9wdC50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9wdC1ici50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9yby50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS9ydS50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS90ci50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS96aC1jbi50cyIsICIuLi9zcmMvdHJhbnNsYXRpb25zL2xvY2FsZS96aC10dy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgZGVib3VuY2UsIFBsYXRmb3JtLCByZXF1aXJlQXBpVmVyc2lvbiwgTWFya2Rvd25WaWV3LCBQbHVnaW4sIEhlYWRpbmdDYWNoZSwgQXBwIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IGNyZWF0VG9jLCBjcmVhdGVMaSwgcmVuZGVySGVhZGVyIH0gZnJvbSBcInNyYy9jb21wb25lbnRzL2Zsb2F0aW5ndG9jVUlcIlxyXG5pbXBvcnQgeyBGbG90aW5nVE9DU2V0dGluZ1RhYiB9IGZyb20gXCJzcmMvc2V0dGluZ3Mvc2V0dGluZ3NUYWJcIjtcclxuaW1wb3J0IHsgRmxvdGluZ1RPQ1NldHRpbmcsIERFRkFVTFRfU0VUVElOR1MgfSBmcm9tIFwic3JjL3NldHRpbmdzL3NldHRpbmdzRGF0YVwiO1xyXG5cclxuXHJcbmxldCBhY3RpdmVEb2N1bWVudDogRG9jdW1lbnQ7XHJcbmxldCBsaW5lID0gMDtcclxuZXhwb3J0IGZ1bmN0aW9uIHNlbGZEZXN0cnVjdCgpIHtcclxuXHRyZXF1aXJlQXBpVmVyc2lvbihcIjAuMTUuMFwiKSA/IGFjdGl2ZURvY3VtZW50ID0gYWN0aXZlV2luZG93LmRvY3VtZW50IDogYWN0aXZlRG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XHJcblx0bGV0IGZsb2F0X3RvY19kb20gPSBhY3RpdmVEb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG5cdFx0XCIuZmxvYXRpbmctdG9jLWRpdlwiXHJcblx0KTtcclxuXHRmbG9hdF90b2NfZG9tLmZvckVhY2goZWxlbWVudCA9PiB7XHJcblx0XHRpZiAoZWxlbWVudCkge1xyXG5cdFx0XHRlbGVtZW50LnJlbW92ZSgpO1xyXG5cdFx0fVxyXG5cclxuXHR9KTtcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoX25vZGUocGx1Z2luOiBGbG9hdGluZ1RvYywgdmlldzogTWFya2Rvd25WaWV3KSB7XHJcblx0cmVxdWlyZUFwaVZlcnNpb24oXCIwLjE1LjBcIikgPyBhY3RpdmVEb2N1bWVudCA9IGFjdGl2ZVdpbmRvdy5kb2N1bWVudCA6IGFjdGl2ZURvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xyXG5cdC8vbGV0IGN1cnJlbnRsZWFmID0gYWN0aXZlRG9jdW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXCIud29ya3NwYWNlLWxlYWYubW9kLWFjdGl2ZVwiKTtcclxuXHQvL2xldCB2aWV3PXBsdWdpbi5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KVxyXG5cdGxldCBmbG9hdF90b2NfZG9tID0gdmlldy5jb250ZW50RWw/LnF1ZXJ5U2VsZWN0b3IoXCIuZmxvYXRpbmctdG9jLWRpdlwiKTtcclxuXHQvL2NvbnNvbGUubG9nKGZsb2F0X3RvY19kb20sXCJmbG9hdF90b2NfZG9tXCIpXHJcblx0aWYgKGZsb2F0X3RvY19kb20pIHtcclxuXHRcdGxldCB1bF9kb20gPSBmbG9hdF90b2NfZG9tLnF1ZXJ5U2VsZWN0b3IoXCJ1bC5mbG9hdGluZy10b2NcIikgYXMgSFRNTEVsZW1lbnRcclxuXHRcdGlmICghdWxfZG9tKVxyXG5cdFx0XHR1bF9kb20gPSBmbG9hdF90b2NfZG9tLmNyZWF0ZUVsKFwidWxcIiksIHVsX2RvbS5hZGRDbGFzcyhcImZsb2F0aW5nLXRvY1wiKVxyXG5cdFx0bGV0IGxpX2RvbSA9IGZsb2F0X3RvY19kb20/LnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaS5oZWFkaW5nLWxpc3QtaXRlbVwiKVxyXG5cdFx0bGV0IGhlYWRpbmdkYXRhID0gcGx1Z2luLmhlYWRpbmdkYXRhXHJcblx0XHQvL2NvbnNvbGUubG9nKGhlYWRpbmdkYXRhLFwiaGVhZGluZ2RhdGFcIilcclxuXHRcdGlmIChoZWFkaW5nZGF0YSkge1xyXG5cdFx0XHQvL1x0Y29uc29sZS5sb2coXCJyZWZyZXNoX25vZGVcIilcclxuXHRcdFx0aWYgKGxpX2RvbS5sZW5ndGggPj0gaGVhZGluZ2RhdGEubGVuZ3RoKSB7XHJcblx0XHRcdFx0bGlfZG9tPy5mb3JFYWNoKChlbCwgaSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGhlYWRpbmdkYXRhW2ldKSB7XHJcblx0XHRcdFx0XHRcdGlmICgoaGVhZGluZ2RhdGFbaV0ubGV2ZWwgPT0gZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1sZXZlbFwiKSlcclxuXHRcdFx0XHRcdFx0XHQmJiAoaGVhZGluZ2RhdGFbaV0uaGVhZGluZyA9PSAoZWwuY2hpbGRyZW5bMF0gYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dClcclxuXHRcdFx0XHRcdFx0XHQmJiAoaGVhZGluZ2RhdGFbaV0ucG9zaXRpb24uc3RhcnQubGluZSA9PSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWxpbmVcIikpKSAvL1x1N0VBN1x1NTIyQlx1RkYwQ1x1NTE4NVx1NUJCOVx1ODg0Q1x1NTNGN1x1NUI4Q1x1NTE2OFx1NEUwMFx1ODFGNFx1NUMzMVx1NEUwRFx1OTcwMFx1ODk4MVx1NjZGNFx1NjVCMFx1MzAwMlxyXG5cdFx0XHRcdFx0XHRcdHJldHVyblxyXG5cdFx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWxldmVsXCIsIGhlYWRpbmdkYXRhW2ldLmxldmVsLnRvU3RyaW5nKCkpO1xyXG5cdFx0XHRcdFx0XHRcdGVsLnNldEF0dHJpYnV0ZShcImRhdGEtaWRcIiwgaS50b1N0cmluZygpKTtcclxuXHRcdFx0XHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWxpbmVcIiwgaGVhZGluZ2RhdGFbaV0ucG9zaXRpb24uc3RhcnQubGluZS50b1N0cmluZygpKTtcclxuXHRcdFx0XHRcdFx0XHRlbC5jaGlsZHJlblswXS5xdWVyeVNlbGVjdG9yKFwiYVwiKT8ucmVtb3ZlKCk7XHJcblx0XHRcdFx0XHRcdFx0cmVuZGVySGVhZGVyKHBsdWdpbix2aWV3LCBoZWFkaW5nZGF0YVtpXS5oZWFkaW5nLCBlbC5jaGlsZHJlblswXSBhcyBIVE1MRWxlbWVudCwgdmlldy5maWxlLnBhdGgsIG51bGwpXHJcblx0XHRcdFx0XHRcdFx0Ly8oZWwuY2hpbGRyZW5bMF0gYXMgSFRNTEVsZW1lbnQpLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cInRleHRcIj4nICsgaGVhZGluZ2RhdGFbaV0uaGVhZGluZyArICc8L2E+J1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRlbC5yZW1vdmUoKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aGVhZGluZ2RhdGE/LmZvckVhY2goKGVsOiBIZWFkaW5nQ2FjaGUsIGk6IG51bWJlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGkgPD0gKGxpX2RvbS5sZW5ndGggLSAxKSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoKGVsLmxldmVsLnRvU3RyaW5nKCkgPT0gbGlfZG9tW2ldLmdldEF0dHJpYnV0ZShcImRhdGEtbGV2ZWxcIikpXHJcblx0XHRcdFx0XHRcdFx0JiYgKGVsLmhlYWRpbmcgPT0gKGxpX2RvbVtpXS5jaGlsZHJlblswXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0KVxyXG5cdFx0XHRcdFx0XHRcdCYmIChlbC5wb3NpdGlvbi5zdGFydC5saW5lLnRvU3RyaW5nKCkgPT0gbGlfZG9tW2ldLmdldEF0dHJpYnV0ZShcImRhdGEtbGluZVwiKSkpIC8vXHU3RUE3XHU1MjJCXHVGRjBDXHU1MTg1XHU1QkI5XHU4ODRDXHU1M0Y3XHU1QjhDXHU1MTY4XHU0RTAwXHU4MUY0XHU1QzMxXHU0RTBEXHU5NzAwXHU4OTgxXHU2NkY0XHU2NUIwXHUzMDAyXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuXHJcblx0XHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGxpX2RvbVtpXS5zZXRBdHRyaWJ1dGUoXCJkYXRhLWxldmVsXCIsIGVsLmxldmVsLnRvU3RyaW5nKCkpO1xyXG5cdFx0XHRcdFx0XHRcdGxpX2RvbVtpXS5zZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIsIGkudG9TdHJpbmcoKSk7XHJcblx0XHRcdFx0XHRcdFx0bGlfZG9tW2ldLnNldEF0dHJpYnV0ZShcImRhdGEtbGluZVwiLCBlbC5wb3NpdGlvbi5zdGFydC5saW5lLnRvU3RyaW5nKCkpO1xyXG5cdFx0XHRcdFx0XHRcdC8vKGxpX2RvbVtpXS5jaGlsZHJlblswXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwidGV4dFwiPicgKyBlbC5oZWFkaW5nICsgJzwvYT4nXHJcblx0XHRcdFx0XHRcdFx0bGlfZG9tW2ldLmNoaWxkcmVuWzBdLnF1ZXJ5U2VsZWN0b3IoXCJhXCIpPy5yZW1vdmUoKTtcclxuXHRcdFx0XHRcdFx0XHRyZW5kZXJIZWFkZXIocGx1Z2luLHZpZXcsIGVsLmhlYWRpbmcsIGxpX2RvbVtpXS5jaGlsZHJlblswXSBhcyBIVE1MRWxlbWVudCwgdmlldy5maWxlLnBhdGgsIG51bGwpXHJcblxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHRcdFx0Y3JlYXRlTGkocGx1Z2luLHZpZXcsIHVsX2RvbSwgZWwsIGkpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR1bF9kb20ucmVtb3ZlKCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0fSBlbHNlXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG59XHJcbmZ1bmN0aW9uIHNpYmxpbmdFbGVtcyhlbGVtOiBFbGVtZW50KSB7XHJcblx0dmFyIG5vZGVzID0gW107XHJcblx0aWYgKGVsZW0/LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcclxuXHRcdHdoaWxlICgoZWxlbSA9IGVsZW0ucHJldmlvdXNFbGVtZW50U2libGluZykpIHtcclxuXHRcdFx0aWYgKGVsZW0ubm9kZVR5cGUgPT0gMSkge1xyXG5cdFx0XHRcdG5vZGVzLnB1c2goZWxlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIG5vZGVzO1xyXG5cclxufVxyXG5mdW5jdGlvbiBfaGFuZGxlU2Nyb2xsKGFwcDogQXBwLCBwbHVnaW46IEZsb2F0aW5nVG9jLCBldnQ6IEV2ZW50KTogYW55IHtcclxuXHRsZXQgdGFyZ2V0ID0gZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudFxyXG5cdGlmICh0YXJnZXQucGFyZW50RWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKFwiY20tZWRpdG9yXCIpIHx8IHRhcmdldC5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoXCJtYXJrZG93bi1yZWFkaW5nLXZpZXdcIikpIHtcclxuXHRcdGNvbnN0IHZpZXcgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KVxyXG5cdFx0bGV0IGN1cnJlbnRfbGluZVxyXG5cdFx0bGV0IGN1cnJlbnRfaGVhZGluZyA9IHt9O1xyXG5cdFx0aWYgKHZpZXcpIHtcclxuXHRcdFx0Y3VycmVudF9saW5lID0gdmlldy5jdXJyZW50TW9kZS5nZXRTY3JvbGwoKSA/PyAwXHJcblx0XHRcdC8qIFx0bGV0IGZsb2F0X3RvY19kb20gPSB2aWV3LmNvbnRlbnRFbD8ucXVlcnlTZWxlY3RvcihcIi5mbG9hdGluZy10b2MtZGl2XCIpO1xyXG5cdFx0XHRcdGxldCBsaV9kb20gPSBmbG9hdF90b2NfZG9tPy5xdWVyeVNlbGVjdG9yQWxsKFwibGkuaGVhZGluZy1saXN0LWl0ZW1cIilcclxuXHRcdFx0XHRsZXQgaGVhZGxpbmUgPSBbXTtcclxuXHRcdFx0XHRsaV9kb20/LmZvckVhY2goKGVsLCBpKSA9PiB7XHJcblx0XHRcdFx0XHRoZWFkbGluZS5wdXNoKGxpX2RvbVtpXS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWxpbmVcIikpXHJcblx0XHRcdFx0fSkgKi9cclxuXHJcblx0XHRcdC8vXHRjb25zb2xlLmxvZyhjdXJyZW50X2xpbmUsIFwiY3RoaXN1cnJlbnRfbGluZVwiKVxyXG5cdFx0XHRsZXQgaGVhZGluZ3MgPSBwbHVnaW4uaGVhZGluZ2RhdGE7XHJcblx0XHRcdGxldCBpID0gaGVhZGluZ3M/Lmxlbmd0aCA/PyAwXHJcblx0XHRcdGxldCBmbG9hdHRvYyA9IHZpZXcuY29udGVudEVsLnF1ZXJ5U2VsZWN0b3IoXCIuZmxvYXRpbmctdG9jXCIpXHJcblx0XHRcdGlmIChmbG9hdHRvYykge1xyXG5cdFx0XHRcdGxldCBmaXJzdGxpbmUgPSBwYXJzZUludChmbG9hdHRvYy5xdWVyeVNlbGVjdG9yKFwibGkuaGVhZGluZy1saXN0LWl0ZW1cIik/LmdldEF0dHJpYnV0ZShcImRhdGEtbGluZVwiKSlcclxuXHRcdFx0XHRsZXQgbGFzdGxpbmUgPSBwYXJzZUludChmbG9hdHRvYy5sYXN0RWxlbWVudENoaWxkPy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWxpbmVcIikpXHJcblx0XHRcdFx0Ly9cdTZFREFcdTUyQThcdTUyMzBcdTk4NzZcdTkwRThcdUZGMENcdTYzMDdcdTc5M0FcdTU2NjhcdTVCOUFcdTRGNERcdTUyMzBcdTk4NzZcdTkwRThcclxuXHRcdFx0XHRpZiAoY3VycmVudF9saW5lIDw9IDApIHtcclxuXHRcdFx0XHRcdGxldCBwcmV2TG9jYXRpb24gPSBmbG9hdHRvYy5xdWVyeVNlbGVjdG9yKFwiLmhlYWRpbmctbGlzdC1pdGVtLmxvY2F0ZWRcIilcclxuXHRcdFx0XHRcdGlmIChwcmV2TG9jYXRpb24pIHtcclxuXHRcdFx0XHRcdFx0cHJldkxvY2F0aW9uLnJlbW92ZUNsYXNzKFwibG9jYXRlZFwiKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGxldCBjdXJMb2NhdGlvbiA9IGZsb2F0dG9jPy5xdWVyeVNlbGVjdG9yKGBsaVtkYXRhLWxpbmU9JyR7Zmlyc3RsaW5lfSddYClcclxuXHRcdFx0XHRcdGlmIChjdXJMb2NhdGlvbikgY3VyTG9jYXRpb24uYWRkQ2xhc3MoXCJsb2NhdGVkXCIpO1xyXG5cclxuXHJcblx0XHRcdFx0XHRsZXQgbGV2ZWwgPSBwYXJzZUludChjdXJMb2NhdGlvbj8uZ2V0QXR0cmlidXRlKFwiZGF0YS1sZXZlbFwiKSlcclxuXHRcdFx0XHRcdGxldmVsID0gbGV2ZWwgPiAxID8gbGV2ZWwgLSAxIDogMTtcclxuXHRcdFx0XHRcdGxldCBzaWJsaW5ncyA9IHNpYmxpbmdFbGVtcyhjdXJMb2NhdGlvbik7XHJcblx0XHRcdFx0XHRsZXQgZm9jdXNlbGUgPSBmbG9hdHRvYz8ucXVlcnlTZWxlY3RvcihgbGkuZm9jdXNgKVxyXG5cdFx0XHRcdFx0aWYgKGZvY3VzZWxlKSB7XHJcblx0XHRcdFx0XHRcdGZvY3VzZWxlLnJlbW92ZUNsYXNzKFwiZm9jdXNcIilcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHNpYmxpbmdzLnNvbWUoZWxlbWVudCA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICgoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5kYXRhc2V0WydsZXZlbCddIDw9IGxldmVsLnRvU3RyaW5nKCkpIHsgZWxlbWVudC5hZGRDbGFzcygnZm9jdXMnKTsgcmV0dXJuIHRydWUgfVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cclxuXHRcdFx0XHRcdGxldCBMb2NhdGlvbiA9IGZsb2F0dG9jLnF1ZXJ5U2VsZWN0b3IoXCIuaGVhZGluZy1saXN0LWl0ZW1cIilcclxuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4gTG9jYXRpb24uc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpLCAzMDApXHJcblxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdHdoaWxlICgtLWkgPj0gMCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoaGVhZGluZ3NbaV0ucG9zaXRpb24uc3RhcnQubGluZSA8PSBjdXJyZW50X2xpbmUpIHtcclxuXHRcdFx0XHRcdFx0XHRjdXJyZW50X2hlYWRpbmcgPSBoZWFkaW5nc1tpXVxyXG5cdFx0XHRcdFx0XHRcdC8vXHRjb25zb2xlLmxvZyhjdXJyZW50X2xpbmUsIFwiY3VycmVudF9saW5lXCIpXHJcblx0XHRcdFx0XHRcdFx0Ly9cdGNvbnNvbGUubG9nKGN1cnJlbnRfaGVhZGluZywgXCJjdXJyZW50X2hlYWRpbmdcIilcclxuXHRcdFx0XHRcdFx0XHRsaW5lID0gaGVhZGluZ3NbaV0ucG9zaXRpb24uc3RhcnQubGluZVxyXG5cdFx0XHRcdFx0XHRcdGJyZWFrXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghY3VycmVudF9oZWFkaW5nKSB7XHJcblx0XHRcdFx0XHRcdHJldHVyblxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vbGV0IGNvbnRhaW5lciA9IGFjdGl2ZURvY3VtZW50Py5xdWVyeVNlbGVjdG9yKFwiLndvcmtzcGFjZS1sZWFmLm1vZC1hY3RpdmVcIik7XHJcblxyXG5cdFx0XHRcdFx0bGV0IHByZXZMb2NhdGlvbiA9IGZsb2F0dG9jLnF1ZXJ5U2VsZWN0b3IoXCIuaGVhZGluZy1saXN0LWl0ZW0ubG9jYXRlZFwiKVxyXG5cdFx0XHRcdFx0aWYgKHByZXZMb2NhdGlvbikge1xyXG5cdFx0XHRcdFx0XHRwcmV2TG9jYXRpb24ucmVtb3ZlQ2xhc3MoXCJsb2NhdGVkXCIpXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0XHRcdGlmICghbGluZSAmJiBmbG9hdHRvYykgbGluZSA9IGZpcnN0bGluZVxyXG5cdFx0XHRcdFx0bGV0IGN1ckxvY2F0aW9uID0gZmxvYXR0b2M/LnF1ZXJ5U2VsZWN0b3IoYGxpW2RhdGEtbGluZT0nJHtsaW5lfSddYClcclxuXHRcdFx0XHRcdC8vY29uc29sZS5sb2coY3VyTG9jYXRpb24sIFwiY3VyTG9jYXRpb25cIilcclxuXHRcdFx0XHRcdGlmIChjdXJMb2NhdGlvbikge1xyXG5cdFx0XHRcdFx0XHRpZiAobGluZSA9PSBsYXN0bGluZSB8fCBsaW5lID09IGZpcnN0bGluZSkge1xyXG5cdFx0XHRcdFx0XHRcdGN1ckxvY2F0aW9uLmFkZENsYXNzKFwibG9jYXRlZFwiKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlXHJcblxyXG5cdFx0XHRcdFx0XHRcdGlmIChjdXJMb2NhdGlvbi5uZXh0RWxlbWVudFNpYmxpbmcpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGxldCBuZXh0TGluZSA9IHBhcnNlSW50KGN1ckxvY2F0aW9uLm5leHRFbGVtZW50U2libGluZy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWxpbmVcIikpXHJcblx0XHRcdFx0XHRcdFx0XHRpZiAobmV4dExpbmUgPD0gY3VycmVudF9saW5lKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vXHRjb25zb2xlLmxvZyhuZXh0TGluZSwnbmV4dExpbmUnKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VyTG9jYXRpb24ubmV4dEVsZW1lbnRTaWJsaW5nLmFkZENsYXNzKFwibG9jYXRlZFwiKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGxldmVsID0gcGFyc2VJbnQoY3VyTG9jYXRpb24ubmV4dEVsZW1lbnRTaWJsaW5nLmdldEF0dHJpYnV0ZShcImRhdGEtbGV2ZWxcIikpXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldmVsID0gbGV2ZWwgPiAxID8gbGV2ZWwgLSAxIDogMTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNpYmxpbmdzID0gc2libGluZ0VsZW1zKGN1ckxvY2F0aW9uLm5leHRFbGVtZW50U2libGluZyk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBmb2N1c2VsZSA9IGZsb2F0dG9jPy5xdWVyeVNlbGVjdG9yKGBsaS5mb2N1c2ApXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChmb2N1c2VsZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvY3VzZWxlLnJlbW92ZUNsYXNzKFwiZm9jdXNcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaWJsaW5ncy5zb21lKGVsZW1lbnQgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5kYXRhc2V0WydsZXZlbCddIDw9IGxldmVsLnRvU3RyaW5nKCkpIHsgZWxlbWVudC5hZGRDbGFzcygnZm9jdXMnKTsgcmV0dXJuIHRydWUgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vXHRjb25zb2xlLmxvZyh2aWV3LmVkaXRvci5nZXRTY3JvbGxJbmZvKCksJ2dldExpbmUnKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VyTG9jYXRpb24uYWRkQ2xhc3MoXCJsb2NhdGVkXCIpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgbGV2ZWwgPSBwYXJzZUludChjdXJMb2NhdGlvbi5nZXRBdHRyaWJ1dGUoXCJkYXRhLWxldmVsXCIpKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXZlbCA9IGxldmVsID4gMSA/IGxldmVsIC0gMSA6IDE7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBzaWJsaW5ncyA9IHNpYmxpbmdFbGVtcyhjdXJMb2NhdGlvbik7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBmb2N1c2VsZSA9IGZsb2F0dG9jPy5xdWVyeVNlbGVjdG9yKGBsaS5mb2N1c2ApXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChmb2N1c2VsZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvY3VzZWxlLnJlbW92ZUNsYXNzKFwiZm9jdXNcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaWJsaW5ncy5zb21lKGVsZW1lbnQgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICgoZWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5kYXRhc2V0WydsZXZlbCddIDw9IGxldmVsLnRvU3RyaW5nKCkpIHsgZWxlbWVudC5hZGRDbGFzcygnZm9jdXMnKTsgcmV0dXJuIHRydWUgfVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdC8vY3VyTG9jYXRpb24uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogXCJjZW50ZXJcIiB9KVxyXG5cdFx0XHRcdFx0XHRjdXJMb2NhdGlvbi5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb2F0aW5nVG9jIGV4dGVuZHMgUGx1Z2luIHtcclxuXHRhcHA6IEFwcDtcclxuXHRzZXR0aW5nczogRmxvdGluZ1RPQ1NldHRpbmc7XHJcblx0aGVhZGluZ2RhdGE6IGFueTtcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0cmVxdWlyZUFwaVZlcnNpb24oXCIwLjE1LjBcIikgPyBhY3RpdmVEb2N1bWVudCA9IGFjdGl2ZVdpbmRvdy5kb2N1bWVudCA6IGFjdGl2ZURvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xyXG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuXHRcdGNvbnN0IHVwZGF0ZUhlYWRpbmdzRm9yVmlldyA9ICh2aWV3OiBNYXJrZG93blZpZXcpID0+IHtcclxuXHRcdFx0dmlldyA/IHJlZnJlc2hfbm9kZSh0aGlzLCB2aWV3KSA/IGZhbHNlIDogY3JlYXRUb2MoYXBwLCB0aGlzKSA6IGZhbHNlXHJcblxyXG5cdFx0fTtcclxuXHRcdGxldCBpc0xvYWRPbk1vYmlsZSA9IHRoaXMuc2V0dGluZ3MuaXNMb2FkT25Nb2JpbGVcclxuXHRcdGlmIChQbGF0Zm9ybS5pc01vYmlsZUFwcCAmJiBpc0xvYWRPbk1vYmlsZSkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgZmxvYXRpbmcgdG9jIGRpc2FibGUgbG9hZGluZyBvbiBtb2JpbGVgKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdH1cclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiBcInBpbi10b2MtcGFuZWxcIixcclxuXHRcdFx0bmFtZTogXCJQaW5uaW5nIHRoZSBGbG9hdGluZyBUT0MgcGFuZWxcIixcclxuXHRcdFx0aWNvbjogXCJwaW5cIixcclxuXHRcdFx0Y2FsbGJhY2s6IGFzeW5jICgpID0+IHtcclxuXHRcdFx0XHRsZXQgdmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldylcclxuXHRcdFx0XHRpZiAodmlldykge1xyXG5cdFx0XHRcdFx0bGV0IGZsb2F0aW5nVG9jV3JhcHBlciA9IHZpZXcuY29udGVudEVsLnF1ZXJ5U2VsZWN0b3IoXCIuZmxvYXRpbmctdG9jLWRpdlwiKVxyXG5cdFx0XHRcdFx0aWYgKGZsb2F0aW5nVG9jV3JhcHBlcikge1xyXG5cdFx0XHRcdFx0XHRpZiAoZmxvYXRpbmdUb2NXcmFwcGVyLmNsYXNzTGlzdC5jb250YWlucyhcInBpblwiKSlcclxuXHRcdFx0XHRcdFx0XHRmbG9hdGluZ1RvY1dyYXBwZXIucmVtb3ZlQ2xhc3MoXCJwaW5cIilcclxuXHRcdFx0XHRcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0XHRcdGZsb2F0aW5nVG9jV3JhcHBlci5hZGRDbGFzcyhcInBpblwiKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogXCJoaWRlLXRvYy1wYW5lbFwiLFxyXG5cdFx0XHRuYW1lOiBcIkhpZGUvU2hvdyB0aGUgRmxvYXRpbmcgVE9DIHBhbmVsXCIsXHJcblx0XHRcdGljb246IFwibGlzdFwiLFxyXG5cdFx0XHRjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xyXG5cdFx0XHRcdGxldCB2aWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KVxyXG5cdFx0XHRcdGlmICh2aWV3KSB7XHJcblx0XHRcdFx0XHRsZXQgZmxvYXRpbmdUb2NXcmFwcGVyID0gdmlldy5jb250ZW50RWwucXVlcnlTZWxlY3RvcihcIi5mbG9hdGluZy10b2MtZGl2XCIpXHJcblx0XHRcdFx0XHRpZiAoZmxvYXRpbmdUb2NXcmFwcGVyKSB7XHJcblx0XHRcdFx0XHRcdGlmIChmbG9hdGluZ1RvY1dyYXBwZXIuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZVwiKSlcclxuXHRcdFx0XHRcdFx0XHRmbG9hdGluZ1RvY1dyYXBwZXIucmVtb3ZlQ2xhc3MoXCJoaWRlXCIpXHJcblx0XHRcdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdFx0XHRmbG9hdGluZ1RvY1dyYXBwZXIuYWRkQ2xhc3MoXCJoaWRlXCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHR9KTtcclxuXHRcdHRoaXMucmVnaXN0ZXJFdmVudChcclxuXHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLm9uKFwiYWN0aXZlLWxlYWYtY2hhbmdlXCIsICgpID0+IHtcclxuXHRcdFx0XHRsZXQgdmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldylcclxuXHRcdFx0XHRpZiAodmlldykge1xyXG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudF9maWxlID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKVxyXG5cdFx0XHRcdFx0bGV0IGhlYWRpbmcgPSB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShjdXJyZW50X2ZpbGUpLmhlYWRpbmdzXHJcblx0XHRcdFx0XHRsZXQgY2xlYW5oZWFkaW5nOiBIZWFkaW5nQ2FjaGVbXSA9IFtdXHJcblx0XHRcdFx0XHRoZWFkaW5nPy5tYXAoKGl0ZW06IEhlYWRpbmdDYWNoZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpdGVtLmhlYWRpbmcgPSBpdGVtLmhlYWRpbmcucmVwbGFjZSgvPFxcLz9bXFxzXFxTXSo/KD86XCIuKlwiKSo+L2csIFwiXCIpOyAvLyBjbGVhbiBodG1sIHRhZ3NcclxuXHRcdFx0XHRcdFx0Y2xlYW5oZWFkaW5nLnB1c2goaXRlbSlcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHR0aGlzLmhlYWRpbmdkYXRhID0gY2xlYW5oZWFkaW5nO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuc2V0dGluZ3MuaWdub3JlVG9wSGVhZGVyKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmhlYWRpbmdkYXRhID0gaGVhZGluZy5zbGljZSgxKTtcclxuXHJcblx0XHRcdFx0XHRyZWZyZXNoKHZpZXcpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cdFx0LyogXHRcdHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oXCJmaWxlLW9wZW5cIiwgKGZpbGUpID0+IHtcclxuXHRcdFx0XHRcdGxldCB2aWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KVxyXG5cdFx0XHRcdFx0aWYgKHZpZXcpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudF9maWxlID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKVxyXG5cdFx0XHRcdFx0XHRsZXQgaGVhZGluZyA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGN1cnJlbnRfZmlsZSkuaGVhZGluZ3NcclxuXHRcdFx0XHRcdFx0Z2xvYmFsVGhpcy5oZWFkaW5nZGF0YSA9IGhlYWRpbmdcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJyZWZyZXNoXCIpXHJcblx0XHRcdFx0XHRcdHJlZnJlc2godmlldyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHQpOyAqL1xyXG5cdFx0dGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUub24oJ2NoYW5nZWQnLCAoKSA9PiB7XHJcblx0XHRcdGxldCB2aWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KVxyXG5cdFx0XHRpZiAodmlldykge1xyXG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRfZmlsZSA9IHZpZXcuZmlsZVxyXG5cclxuXHRcdFx0XHRsZXQgaGVhZGluZyA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGN1cnJlbnRfZmlsZSkuaGVhZGluZ3NcclxuXHRcdFx0XHRsZXQgY2xlYW5oZWFkaW5nOiBIZWFkaW5nQ2FjaGVbXSA9IFtdXHJcblx0XHRcdFx0aGVhZGluZz8ubWFwKChpdGVtOiBIZWFkaW5nQ2FjaGUpID0+IHtcclxuXHRcdFx0XHRcdGl0ZW0uaGVhZGluZyA9IGl0ZW0uaGVhZGluZy5yZXBsYWNlKC88XFwvP1tcXHNcXFNdKj8oPzpcIi4qXCIpKj4vZywgXCJcIik7IC8vIGNsZWFuIGh0bWwgdGFnc1xyXG5cdFx0XHRcdFx0Y2xlYW5oZWFkaW5nLnB1c2goaXRlbSlcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdGxldCBuZXdoZWFkaW5nID0gY2xlYW5oZWFkaW5nPy5tYXAoaXRlbSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gaXRlbS5sZXZlbCArIGl0ZW0uaGVhZGluZyArIGl0ZW0ucG9zaXRpb24uc3RhcnQubGluZVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0bGV0IG5ld2hlYWRpbmdkYXRhID0gdGhpcy5oZWFkaW5nZGF0YT8ubWFwKChpdGVtOiBIZWFkaW5nQ2FjaGUpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiBpdGVtLmxldmVsICsgaXRlbS5oZWFkaW5nICsgaXRlbS5wb3NpdGlvbi5zdGFydC5saW5lXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHRpZiAoSlNPTi5zdHJpbmdpZnkobmV3aGVhZGluZ2RhdGEpID09IEpTT04uc3RyaW5naWZ5KG5ld2hlYWRpbmcpKVxyXG5cdFx0XHRcdFx0cmV0dXJuICAvL1x1NjgwN1x1OTg5OFx1N0VEM1x1Njc4NFx1ODg0Q1x1NTNGN1x1NkNBMVx1NjcwOVx1NTNEOFx1NTMxNlx1NEUwRFx1NjZGNFx1NjVCMFxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0Ly9cdGNvbnNvbGUubG9nKFwicmVmcmVzaFwiKVxyXG5cclxuXHRcdFx0XHRcdHRoaXMuaGVhZGluZ2RhdGEgPSBjbGVhbmhlYWRpbmc7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHRoaXMuc2V0dGluZ3MuaWdub3JlVG9wSGVhZGVyKVxyXG5cdFx0XHRcdFx0XHR0aGlzLmhlYWRpbmdkYXRhID0gY2xlYW5oZWFkaW5nLnNsaWNlKDEpO1xyXG5cdFx0XHRcdFx0cmVmcmVzaCh2aWV3KVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdH0pKVxyXG5cclxuXHRcdGNvbnN0IHJlZnJlc2hfb3V0bGluZSA9ICh2aWV3OiBNYXJrZG93blZpZXcpOiBhbnkgPT4ge1xyXG5cdFx0XHR1cGRhdGVIZWFkaW5nc0ZvclZpZXcodmlldylcclxuXHRcdH1cclxuXHRcdGNvbnN0IHJlZnJlc2ggPSAodmlldzogTWFya2Rvd25WaWV3KSA9PiBkZWJvdW5jZShyZWZyZXNoX291dGxpbmUodmlldyksIDMwMCwgdHJ1ZSlcclxuXHRcdC8qIFx0XHR0aGlzLnJlZ2lzdGVyRXZlbnQoXHJcblx0XHRcdFx0XHR0aGlzLmFwcC53b3Jrc3BhY2Uub24oXCJlZGl0b3ItY2hhbmdlXCIsIChlZGl0b3IpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aXZlVmlldyA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdFx0XHRcdFx0aWYgKGFjdGl2ZVZpZXcpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcmVzb2x2ZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnJlZ2lzdGVyRXZlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLm9uKFwicmVzb2x2ZVwiLCAoZmlsZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWN0aXZlVmlldy5maWxlID09PSBmaWxlICYmICFyZXNvbHZlZCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkID0gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGVIZWFkaW5nc0ZvclZpZXcoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdCk7ICovXHJcblxyXG5cclxuXHRcdGFjdGl2ZURvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgKGV2ZW50KSA9PiB7XHJcblx0XHRcdHRoaXMuaGFuZGxlU2Nyb2xsKHRoaXMuYXBwLCB0aGlzLCBldmVudClcclxuXHRcdH0sIHRydWUpXHJcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IEZsb3RpbmdUT0NTZXR0aW5nVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblxyXG5cdFx0dXBkYXRlSGVhZGluZ3NGb3JWaWV3KHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldykpO1xyXG5cdFx0aWYgKHJlcXVpcmVBcGlWZXJzaW9uKFwiMC4xNS4wXCIpKSB7XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5vbignd2luZG93LW9wZW4nLCAobGVhZikgPT4ge1xyXG5cdFx0XHRcdGxlYWYuZG9jLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgKGV2ZW50KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmhhbmRsZVNjcm9sbCh0aGlzLmFwcCwgdGhpcywgZXZlbnQpXHJcblx0XHRcdFx0fSwgdHJ1ZSlcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRhcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoKCkgPT4ge1xyXG5cdFx0XHRhcHAud29ya3NwYWNlLnRyaWdnZXIoXCJwYXJzZS1zdHlsZS1zZXR0aW5nc1wiKTtcclxuXHRcdH0pO1xyXG5cclxuXHR9XHJcblxyXG5cclxuXHRoYW5kbGVTY3JvbGwgPSAoYXBwOiBBcHAsIHBsdWdpbjogRmxvYXRpbmdUb2MsIGV2dDogRXZlbnQpID0+IGRlYm91bmNlKF9oYW5kbGVTY3JvbGwoYXBwLCBwbHVnaW4sIGV2dCksIDIwMClcclxuXHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0cmVxdWlyZUFwaVZlcnNpb24oXCIwLjE1LjBcIikgPyBhY3RpdmVEb2N1bWVudCA9IGFjdGl2ZVdpbmRvdy5kb2N1bWVudCA6IGFjdGl2ZURvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xyXG5cdFx0YWN0aXZlRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCAoZXZlbnQpID0+IHtcclxuXHRcdFx0dGhpcy5oYW5kbGVTY3JvbGwodGhpcy5hcHAsIHRoaXMsIGV2ZW50KVxyXG5cdFx0fSwgdHJ1ZSlcclxuXHRcdHNlbGZEZXN0cnVjdCgpO1xyXG5cdH1cclxuXHRzZXRIZWFkaW5nZGF0YShjb250ZW50OiBIZWFkaW5nQ2FjaGUpOiB2b2lkIHtcclxuXHRcdHRoaXMuaGVhZGluZ2RhdGEgPSBjb250ZW50O1xyXG5cdH1cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcclxuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcblx0fVxyXG59XHJcbiIsICJcclxuaW1wb3J0IHR5cGUgRmxvYXRpbmdUb2MgZnJvbSBcInNyYy9tYWluXCI7XHJcbmltcG9ydCB7IEFwcCwgTm90aWNlLCByZXF1aXJlQXBpVmVyc2lvbiwgTWFya2Rvd25WaWV3LCBDb21wb25lbnQsIEhlYWRpbmdDYWNoZSwgTWFya2Rvd25SZW5kZXJlciwgQnV0dG9uQ29tcG9uZW50LCBWaWV3IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcblxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlckhlYWRlcihcclxuICAgIHBsdWdpbjogRmxvYXRpbmdUb2MsXHJcbiAgICB2aWV3OiBNYXJrZG93blZpZXcsXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50LFxyXG4gICAgbm90ZVBhdGg/OiBzdHJpbmcsXHJcbiAgICBjb21wb25lbnQ6IENvbXBvbmVudCA9IG51bGxcclxuKSB7XHJcbiAgICBjb25zdCByZWdleCA9IC8oPzw9XlxccyopWzAtOV0rXFwuXFxzLzsgLy9cdTY3MDlcdTVFOEZcdTUyMTdcdTg4NjhcclxuICAgIGNvbnN0IHJlZ2V4MiA9IC8oPzw9XlxccyopW1xcLVxcK11cXHMvOyAvL1x1NjVFMFx1NUU4Rlx1NTIxN1x1ODg2OCAgXHJcbiAgICBsZXQgbTtcclxuICAgIGxldCBwcmVsaXN0ID0gJyc7XHJcbiAgICBpZiAoKG0gPSByZWdleC5leGVjKHNvdXJjZSkpICE9PSBudWxsKSB7XHJcbiAgICAgICAgcHJlbGlzdCA9IG1bMF1cclxuICAgICAgICBzb3VyY2UgPSBzb3VyY2UucmVwbGFjZShyZWdleCwgJycpO1xyXG4gICAgfSBlbHNlIGlmICgobSA9IHJlZ2V4Mi5leGVjKHNvdXJjZSkpICE9PSBudWxsKSB7XHJcbiAgICAgICAgcHJlbGlzdCA9IG1bMF1cclxuICAgICAgICBzb3VyY2UgPSBzb3VyY2UucmVwbGFjZShyZWdleDIsICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc3ViY29udGFpbmVyID0gY29udGFpbmVyXHJcbiAgICBhd2FpdCBNYXJrZG93blJlbmRlcmVyLnJlbmRlck1hcmtkb3duKFxyXG4gICAgICAgIHNvdXJjZSxcclxuICAgICAgICBzdWJjb250YWluZXIsXHJcbiAgICAgICAgbm90ZVBhdGgsXHJcbiAgICAgICAgY29tcG9uZW50XHJcbiAgICApO1xyXG4gICAgbGV0IGF0YWcgPSBzdWJjb250YWluZXIuY3JlYXRlRWwoXCJhXCIpO1xyXG4gICAgYXRhZy5hZGRDbGFzcyhcInRleHRcIilcclxuICAgIGF0YWcub25jbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGxldCBzdGFydGxpbmUgPSBwYXJzZUludChzdWJjb250YWluZXIucGFyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWxpbmVcIikpID8/IDBcclxuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XHJcbiAgICAgICAgICAgIGZvbGRIZWFkZXIodmlldywgc3RhcnRsaW5lKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9wZW5GaWxldG9saW5lKHZpZXcsIHN0YXJ0bGluZSlcclxuICAgICAgICAgICAgbGV0IHByZXZMb2NhdGlvbiA9IHN1YmNvbnRhaW5lci5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi50ZXh0LXdyYXAubG9jYXRlZFwiKVxyXG4gICAgICAgICAgICBpZiAocHJldkxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBwcmV2TG9jYXRpb24ucmVtb3ZlQ2xhc3MoXCJsb2NhdGVkXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3ViY29udGFpbmVyLmFkZENsYXNzKFwibG9jYXRlZFwiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBwYXIgPSBzdWJjb250YWluZXIucXVlcnlTZWxlY3RvcihcInBcIik7XHJcbiAgICBpZiAocGFyKSB7XHJcbiAgICAgICAgY29uc3QgcmVnZXggPSAvPGFbXj5dKj58PFxcL1tePl0qYT4vZ207IC8vXHU1MjIwXHU5NjY0XHU2MjQwXHU2NzA5YVx1NjgwN1x1N0I3RVxyXG4gICAgICAgIC8vY29uc3QgcmVnZXggPSAvKD88PVxcPltePF0qPykgL2c7IC8vXHU1MjIwXHU5NjY0XHU2MjQwXHU2NzA5XHU3QTdBXHU3NjdEXHU3QjI2XHJcbiAgICAgICAgaWYgKHByZWxpc3QpXHJcbiAgICAgICAgICAgIGF0YWcuaW5uZXJIVE1MID0gcHJlbGlzdCArIHBhci5pbm5lckhUTUwucmVwbGFjZShyZWdleCwgJycpO1xyXG4gICAgICAgIGVsc2UgYXRhZy5pbm5lckhUTUwgPSBwYXIuaW5uZXJIVE1MLnJlcGxhY2UocmVnZXgsICcnKTtcclxuICAgICAgICBzdWJjb250YWluZXIucmVtb3ZlQ2hpbGQocGFyKTtcclxuICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLmlzVG9vbHRpcCkge1xyXG4gICAgICAgICAgICBzdWJjb250YWluZXIuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgc291cmNlKVxyXG4gICAgICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLnBvc2l0aW9uU3R5bGUgPT0gXCJyaWdodFwiKVxyXG4gICAgICAgICAgICAgICAgc3ViY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbC1wb3NpdGlvbicsICdsZWZ0JylcclxuICAgICAgICAgICAgaWYgKHBsdWdpbi5zZXR0aW5ncy5wb3NpdGlvblN0eWxlID09IFwibGVmdFwiKVxyXG4gICAgICAgICAgICAgICAgc3ViY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbC1wb3NpdGlvbicsICdyaWdodCcpXHJcbiAgICAgICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MucG9zaXRpb25TdHlsZSA9PSBcImJvdGhcIilcclxuICAgICAgICAgICAgICAgIHN1YmNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwtcG9zaXRpb24nLCAndG9wJylcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUxpKHBsdWdpbjogRmxvYXRpbmdUb2MsIHZpZXc6IE1hcmtkb3duVmlldywgdWxfZG9tOiBIVE1MRWxlbWVudCwgaGVhZGluZzogSGVhZGluZ0NhY2hlLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBsZXQgbGlfZG9tID0gdWxfZG9tLmNyZWF0ZUVsKFwibGlcIilcclxuICAgIGxpX2RvbS5hZGRDbGFzcyhcImhlYWRpbmctbGlzdC1pdGVtXCIpXHJcbiAgICBsaV9kb20uc2V0QXR0cmlidXRlKFwiZGF0YS1sZXZlbFwiLCBoZWFkaW5nLmxldmVsLnRvU3RyaW5nKCkpXHJcbiAgICBsaV9kb20uc2V0QXR0cmlidXRlKFwiZGF0YS1pZFwiLCBpbmRleC50b1N0cmluZygpKVxyXG4gICAgbGlfZG9tLnNldEF0dHJpYnV0ZShcImRhdGEtbGluZVwiLCBoZWFkaW5nLnBvc2l0aW9uLnN0YXJ0LmxpbmUudG9TdHJpbmcoKSlcclxuICAgIGxldCB0ZXh0X2RvbSA9IGxpX2RvbS5jcmVhdGVFbChcImRpdlwiKVxyXG4gICAgdGV4dF9kb20uYWRkQ2xhc3MoXCJ0ZXh0LXdyYXBcIilcclxuICAgIHJlbmRlckhlYWRlcihwbHVnaW4sIHZpZXcsIGhlYWRpbmcuaGVhZGluZywgdGV4dF9kb20sIHZpZXcuZmlsZS5wYXRoLCBudWxsKVxyXG5cclxuICAgIC8vIHRleHQuaW5uZXJIVE1MID0gaGVhZGluZy5oZWFkaW5nXHJcbiAgICBsZXQgbGluZV9kb20gPSBsaV9kb20uY3JlYXRlRWwoXCJkaXZcIilcclxuICAgIGxpbmVfZG9tLmFkZENsYXNzKFwibGluZS13cmFwXCIpXHJcbiAgICBsaW5lX2RvbS5jcmVhdGVEaXYoKS5hZGRDbGFzcyhcImxpbmVcIilcclxufVxyXG5cclxuY29uc3Qgb3BlbkZpbGV0b2xpbmUgPSAodmlldzogTWFya2Rvd25WaWV3LCBsaW5lTnVtYmVyOiBudW1iZXIpID0+IHtcclxuICAgIC8vY29uc3QgY3VycmVudF9maWxlID0gcGx1Z2luLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpXHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJsaW5lIG51bWJlclwiLCBsaW5lTnVtYmVyKTtcclxuICAgIC8vIGxldCBsZWFmID0gcGx1Z2luLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZihmYWxzZSk7XHJcbiAgICB2aWV3LmxlYWYub3BlbkZpbGUodmlldy5maWxlLCB7XHJcbiAgICAgICAgZVN0YXRlOiB7IGxpbmU6IGxpbmVOdW1iZXIgfSxcclxuICAgIH0pO1xyXG59O1xyXG5jb25zdCBmb2xkSGVhZGVyID0gKHZpZXc6IE1hcmtkb3duVmlldywgc3RhcnRsaW5lOiBudW1iZXIpID0+IHtcclxuICAgIC8vIGNvbnN0IHZpZXcgPSBwbHVnaW4uYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldylcclxuICAgIGNvbnN0IGV4aXN0aW5nRm9sZHMgPSB2aWV3Py5jdXJyZW50TW9kZS5nZXRGb2xkSW5mbygpPy5mb2xkcyA/PyBbXTtcclxuICAgIGNvbnN0IGhlYWRmcm9tID0gc3RhcnRsaW5lXHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgaWYgKGV4aXN0aW5nRm9sZHMuc29tZSgoaXRlbSwgaWR4KSA9PiB7IGluZGV4ID0gaWR4OyByZXR1cm4gaXRlbS5mcm9tID09IGhlYWRmcm9tIH0pKSAvL1x1NjgwN1x1OTg5OFx1NTM5Rlx1Njc2NVx1NURGMlx1N0VDRlx1NjI5OFx1NTNFMFx1NzJCNlx1NjAwMVxyXG4gICAgICAgIGV4aXN0aW5nRm9sZHMuc3BsaWNlKGluZGV4LCAxKTsgLy9cdTUyMjBcdTk2NjRcdTYyOThcdTUzRTBcdTcyQjZcdTYwMDFcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBoZWFkaW5nc0F0TGV2ZWwgPSB7XHJcbiAgICAgICAgICAgIGZyb206IHN0YXJ0bGluZSxcclxuICAgICAgICAgICAgdG86IHN0YXJ0bGluZSArIDEsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV4aXN0aW5nRm9sZHMucHVzaChoZWFkaW5nc0F0TGV2ZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHZpZXc/LmN1cnJlbnRNb2RlLmFwcGx5Rm9sZEluZm8oe1xyXG4gICAgICAgIGZvbGRzOiBleGlzdGluZ0ZvbGRzLFxyXG4gICAgICAgIGxpbmVzOiB2aWV3LmVkaXRvci5saW5lQ291bnQoKSxcclxuICAgIH0pO1xyXG4gICAgdmlldz8ub25NYXJrZG93bkZvbGQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0VG9jKFxyXG4gICAgYXBwOiBBcHAsXHJcbiAgICBwbHVnaW46IEZsb2F0aW5nVG9jXHJcbik6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IGdlblRvYyA9IChjdXJyZW50bGVhZjogSFRNTEVsZW1lbnQsIGZsb2F0aW5nVG9jV3JhcHBlcjogSFRNTERpdkVsZW1lbnQpID0+IHtcclxuICAgICAgICBjb25zdCBjdXJyZW50X2ZpbGUgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKVxyXG5cclxuICAgICAgICBsZXQgaGVhZGluZyA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShjdXJyZW50X2ZpbGUpLmhlYWRpbmdzXHJcbiAgICAgICAgbGV0IGNsZWFuaGVhZGluZzogSGVhZGluZ0NhY2hlW10gPSBbXVxyXG4gICAgICAgIGhlYWRpbmc/Lm1hcCgoaXRlbTogSGVhZGluZ0NhY2hlKSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0uaGVhZGluZyA9IGl0ZW0uaGVhZGluZy5yZXBsYWNlKC88XFwvP1tcXHNcXFNdKj8oPzpcIi4qXCIpKj4vZywgXCJcIik7IC8vIGNsZWFuIGh0bWwgdGFnc1xyXG4gICAgICAgICAgICBjbGVhbmhlYWRpbmcucHVzaChpdGVtKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcGx1Z2luLmhlYWRpbmdkYXRhID0gY2xlYW5oZWFkaW5nO1xyXG4gICAgICAgIGlmIChwbHVnaW4uaGVhZGluZ2RhdGEubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLnBvc2l0aW9uU3R5bGUgPT0gXCJyaWdodFwiKVxyXG4gICAgICAgICAgICBmbG9hdGluZ1RvY1dyYXBwZXIuYWRkQ2xhc3MoXCJmbG9hdGluZy1yaWdodFwiKSwgZmxvYXRpbmdUb2NXcmFwcGVyLnJlbW92ZUNsYXNzKFwiZmxvYXRpbmctbGVmdFwiKSwgZmxvYXRpbmdUb2NXcmFwcGVyLnJlbW92ZUNsYXNzKFwiZmxvYXRpbmctYm90aFwiKVxyXG4gICAgICAgIGVsc2UgaWYgKHBsdWdpbi5zZXR0aW5ncy5wb3NpdGlvblN0eWxlID09IFwibGVmdFwiKVxyXG4gICAgICAgICAgICBmbG9hdGluZ1RvY1dyYXBwZXIuYWRkQ2xhc3MoXCJmbG9hdGluZy1sZWZ0XCIpLCBmbG9hdGluZ1RvY1dyYXBwZXIucmVtb3ZlQ2xhc3MoXCJmbG9hdGluZy1yaWd0aFwiKSwgZmxvYXRpbmdUb2NXcmFwcGVyLnJlbW92ZUNsYXNzKFwiZmxvYXRpbmctYm90aFwiKVxyXG4gICAgICAgIGVsc2UgaWYgKHBsdWdpbi5zZXR0aW5ncy5wb3NpdGlvblN0eWxlID09IFwiYm90aFwiKVxyXG4gICAgICAgICAgICBmbG9hdGluZ1RvY1dyYXBwZXIuYWRkQ2xhc3MoXCJmbG9hdGluZy1ib3RoXCIpLCBmbG9hdGluZ1RvY1dyYXBwZXIucmVtb3ZlQ2xhc3MoXCJmbG9hdGluZy1sZWZ0XCIpLCBmbG9hdGluZ1RvY1dyYXBwZXIucmVtb3ZlQ2xhc3MoXCJmbG9hdGluZy1yaWd0aFwiKVxyXG4gICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MuaXNMZWZ0KVxyXG4gICAgICAgICAgICBmbG9hdGluZ1RvY1dyYXBwZXIucmVtb3ZlQ2xhc3MoXCJhbGlnbkxlZnRcIiksIGZsb2F0aW5nVG9jV3JhcHBlci5hZGRDbGFzcyhcImFsaWduTGVmdFwiKVxyXG4gICAgICAgIGVsc2UgZmxvYXRpbmdUb2NXcmFwcGVyLnJlbW92ZUNsYXNzKFwiYWxpZ25MZWZ0XCIpXHJcbiAgICAgICAgbGV0IHVsX2RvbSA9IGZsb2F0aW5nVG9jV3JhcHBlci5jcmVhdGVFbChcInVsXCIpXHJcbiAgICAgICAgdWxfZG9tLmFkZENsYXNzKFwiZmxvYXRpbmctdG9jXCIpXHJcbiAgICAgICAgbGV0IHRvb2xiYXIgPSB1bF9kb20uY3JlYXRlRWwoXCJkaXZcIilcclxuICAgICAgICB0b29sYmFyLmFkZENsYXNzKFwidG9vbGJhclwiKVxyXG4gICAgICAgIHRvb2xiYXIuYWRkQ2xhc3MoXCJwaW5cIilcclxuICAgICAgICB0b29sYmFyLmFkZENsYXNzKFwiaGlkZVwiKVxyXG4gICAgICAgIGxldCBwaW5CdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KHRvb2xiYXIpO1xyXG4gICAgICAgIHBpbkJ1dHRvblxyXG4gICAgICAgICAgICAuc2V0SWNvbihcInBpblwiKVxyXG4gICAgICAgICAgICAuc2V0VG9vbHRpcChcInBpblwiKVxyXG4gICAgICAgICAgICAub25DbGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmxvYXRpbmdUb2NXcmFwcGVyLmNsYXNzTGlzdC5jb250YWlucyhcInBpblwiKSlcclxuICAgICAgICAgICAgICAgICAgICBmbG9hdGluZ1RvY1dyYXBwZXIucmVtb3ZlQ2xhc3MoXCJwaW5cIilcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBmbG9hdGluZ1RvY1dyYXBwZXIuYWRkQ2xhc3MoXCJwaW5cIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHVsX2RvbS5vbm1vdXNlZW50ZXIgPSBmdW5jdGlvbiAoKSB7IC8vXHU3OUZCXHU1MTY1XHU0RThCXHU0RUY2XHJcbiAgICAgICAgICAgIHRvb2xiYXIucmVtb3ZlQ2xhc3MoXCJoaWRlXCIpXHJcbiAgICAgICAgICAgIGZsb2F0aW5nVG9jV3JhcHBlci5hZGRDbGFzcyhcImhvdmVyXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVsX2RvbS5vbm1vdXNlbGVhdmUgPSBmdW5jdGlvbiAoKSB7IC8vXHU3OUZCXHU1MUZBXHU0RThCXHU0RUY2XHJcbiAgICAgICAgICAgIHRvb2xiYXIuYWRkQ2xhc3MoXCJoaWRlXCIpXHJcbiAgICAgICAgICAgIGZsb2F0aW5nVG9jV3JhcHBlci5yZW1vdmVDbGFzcyhcImhvdmVyXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0b3BCdXV0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KHRvb2xiYXIpO1xyXG4gICAgICAgIHRvcEJ1dXRvblxyXG4gICAgICAgICAgICAuc2V0SWNvbihcImRvdWJsZS11cC1hcnJvdy1nbHlwaFwiKVxyXG4gICAgICAgICAgICAuc2V0VG9vbHRpcChcIlNjcm9sbCB0byBUb3BcIilcclxuICAgICAgICAgICAgLnNldENsYXNzKFwidG9wXCIpXHJcbiAgICAgICAgICAgIC5vbkNsaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICB2aWV3LnNldEVwaGVtZXJhbFN0YXRlKHsgXCJzY3JvbGxcIjogMCB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBDb3B5QnV1dG9uID0gbmV3IEJ1dHRvbkNvbXBvbmVudCh0b29sYmFyKTtcclxuICAgICAgICBDb3B5QnV1dG9uXHJcbiAgICAgICAgICAgIC5zZXRJY29uKFwiY29weVwiKVxyXG4gICAgICAgICAgICAuc2V0VG9vbHRpcChcImNvcHkgdG8gY2xpcGJvYXJkXCIpXHJcbiAgICAgICAgICAgIC5zZXRDbGFzcyhcImNvcHlcIilcclxuICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBwbHVnaW4uaGVhZGluZ2RhdGEubWFwKChoOiBIZWFkaW5nQ2FjaGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIgICAgXCIucmVwZWF0KGgubGV2ZWwgLSAxKSArIGguaGVhZGluZ1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhlYWRlcnMuam9pbihcIlxcblwiKSlcclxuICAgICAgICAgICAgICAgIG5ldyBOb3RpY2UoXCJDb3BpZWRcIilcclxuICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICBpZiAocGx1Z2luLnNldHRpbmdzLmlnbm9yZVRvcEhlYWRlcilcclxuICAgICAgICAgICAgcGx1Z2luLmhlYWRpbmdkYXRhID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGN1cnJlbnRfZmlsZSkuaGVhZGluZ3Muc2xpY2UoMSk7XHJcbiAgICAgICAgcGx1Z2luLmhlYWRpbmdkYXRhLmZvckVhY2goKGhlYWRpbmc6IEhlYWRpbmdDYWNoZSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldylcclxuICAgICAgICAgICAgY3JlYXRlTGkocGx1Z2luLCB2aWV3LCB1bF9kb20sIGhlYWRpbmcsIGluZGV4KVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjdXJyZW50bGVhZlxyXG4gICAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoXCIubWFya2Rvd24tc291cmNlLXZpZXdcIilcclxuICAgICAgICAgICAgLmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWJlZ2luXCIsIGZsb2F0aW5nVG9jV3JhcHBlcik7XHJcblxyXG5cclxuICAgIH07XHJcbiAgICBsZXQgTWFya2Rvd24gPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xyXG4gICAgaWYgKE1hcmtkb3duKSB7XHJcbiAgICAgICAgcmVxdWlyZUFwaVZlcnNpb24oXCIwLjE1LjBcIikgPyBhY3RpdmVEb2N1bWVudCA9IGFjdGl2ZVdpbmRvdy5kb2N1bWVudCA6IGFjdGl2ZURvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xyXG4gICAgICAgIGxldCB2aWV3ID0gcGx1Z2luLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpXHJcbiAgICAgICAgaWYgKHZpZXcpIHtcclxuICAgICAgICAgICAgbGV0IGZsb2F0X3RvY19kb20gPSB2aWV3LmNvbnRlbnRFbD8ucXVlcnlTZWxlY3RvcihcIi5mbG9hdGluZy10b2MtZGl2XCIpO1xyXG4gICAgICAgICAgICBpZiAoIWZsb2F0X3RvY19kb20pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0aW5nVG9jV3JhcHBlciA9IGNyZWF0ZUVsKFwiZGl2XCIpO1xyXG4gICAgICAgICAgICAgICAgZmxvYXRpbmdUb2NXcmFwcGVyLmFkZENsYXNzKFwiZmxvYXRpbmctdG9jLWRpdlwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChwbHVnaW4uc2V0dGluZ3MuaXNEZWZhdWx0UGluKSBmbG9hdGluZ1RvY1dyYXBwZXIuYWRkQ2xhc3MoXCJwaW5cIilcclxuICAgICAgICAgICAgICAgIGdlblRvYyh2aWV3LmNvbnRlbnRFbCwgZmxvYXRpbmdUb2NXcmFwcGVyKVxyXG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn0iLCAiaW1wb3J0IHR5cGUgRmxvYXRpbmdUb2MgZnJvbSBcInNyYy9tYWluXCI7XHJcbmltcG9ydCB7IEFwcCwgU2V0dGluZywgUGx1Z2luU2V0dGluZ1RhYiwgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IFBPU0lUSU9OX1NUWUxFUyB9IGZyb20gXCJzcmMvc2V0dGluZ3Mvc2V0dGluZ3NEYXRhXCI7XHJcbmltcG9ydCB7IHNlbGZEZXN0cnVjdCB9IGZyb20gXCJzcmMvbWFpblwiO1xyXG5pbXBvcnQgeyBjcmVhdFRvYyB9IGZyb20gXCJzcmMvY29tcG9uZW50cy9mbG9hdGluZ3RvY1VJXCJcclxuaW1wb3J0IHsgdCB9IGZyb20gJ3NyYy90cmFuc2xhdGlvbnMvaGVscGVyJztcclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEZsb3RpbmdUT0NTZXR0aW5nVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XHJcbiAgcGx1Z2luOiBGbG9hdGluZ1RvYztcclxuICBhcHBlbmRNZXRob2Q6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogRmxvYXRpbmdUb2MpIHtcclxuICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xyXG4gICAgYWRkRXZlbnRMaXN0ZW5lcihcInJlZnJlc2gtdG9jXCIsICgpID0+IHtcclxuICAgICAgc2VsZkRlc3RydWN0KCk7XHJcbiAgICAgIGNyZWF0VG9jKGFwcCwgdGhpcy5wbHVnaW4pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcclxuICAgIGNvbnRhaW5lckVsLmVtcHR5KCk7XHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbChcImgxXCIsIHsgdGV4dDogXCJPYnNpZGlhbiBGbG9hdGluZyBUT0MgXCIgfSk7XHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbChcInNwYW5cIiwgeyB0ZXh0OiBcIlwiIH0pLmNyZWF0ZUVsKFwiYVwiLCB7XHJcbiAgICAgIHRleHQ6IFwiQXV0aG9yOiBDdW1hbiBcdTI3MjhcIixcclxuICAgICAgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vY3VtYW55XCIsXHJcbiAgICB9KVxyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KS5jcmVhdGVFbChcImFcIiwge1xyXG4gICAgICB0ZXh0OiBcIlJlYWRtZTpcdTRFMkRcdTY1ODdcIixcclxuICAgICAgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vY3VtYW55L29ic2lkaWFuLWZsb2F0aW5nLXRvYy1wbHVnaW4vYmxvYi9tYXN0ZXIvUkVBRE1FLXpoX2NuLm1kXCIsXHJcbiAgICB9KVxyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoXCJzcGFuXCIsIHsgdGV4dDogXCJcIiB9KS5jcmVhdGVFbChcImFcIiwge1xyXG4gICAgICB0ZXh0OiBcInxFbmdsaXNoICBcIixcclxuICAgICAgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vY3VtYW55L29ic2lkaWFuLWZsb2F0aW5nLXRvYy1wbHVnaW4vYmxvYi9tYXN0ZXIvUkVBRE1FLm1kXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgdGlwc0UxID0gY29udGFpbmVyRWwuY3JlYXRlRWwoXCJkaXZcIik7XHJcbiAgICB0aXBzRTEuYWRkQ2xhc3MoJ2NhbGxvdXQnKTtcclxuICAgIHRpcHNFMS5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNhbGxvdXRcIiwgXCJpbmZvXCIpO1xyXG4gICAgbGV0IHRpcHNfdGl0bGVFMSA9IHRpcHNFMS5jcmVhdGVFbChcImRpdlwiLCB7IHRleHQ6IFwiXHVEODNEXHVERDExVElQUzpcIiB9KVxyXG4gICAgdGlwc190aXRsZUUxLmFkZENsYXNzKFwiY2FsbG91dC10aXRsZVwiKVxyXG4gICAgdGlwc190aXRsZUUxLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICBsZXQgdGlwc19jb250ZW50RTEgPSB0aXBzRTEuY3JlYXRlRWwoXCJkaXZcIix7XHJcbiAgICAgIHRleHQ6IFwiY3RybCArIGNsaWNrIG9uIHRoZSBmbG9hdGluZyB0b2MgdG8gY29sbGFwc2UvZXhwYW5kIHRoZSBoZWFkZXIuXCJcclxuICAgIH0pXHJcbiAgICB0aXBzX2NvbnRlbnRFMS5hZGRDbGFzcyhcImNhbGxvdXQtY29udGVudFwiKTtcclxuIFxyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IHQoXCJQbHVnaW4gU2V0dGluZ3NcIikgfSk7XHJcbiAgICBsZXQgcG9zRTEgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgIHBvc0UxLnNldE5hbWUodCgnRmxvYXRpbmcgVE9DIHBvc2l0aW9uJylcclxuICAgIClcclxuICAgIGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wb3NpdGlvblN0eWxlID09IFwiYm90aFwiKSB7XHJcbiAgICAgIHBvc0UxLnNldERlc2MoXHJcbiAgICAgICAgdChcIldoZW4gdGhlIHBhbmVsIGlzIHNwbGl0IGxlZnQgYW5kIHJpZ2h0LCB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgbGF5b3V0IGlzIGFsaWduZWQgcmlnaHQgYW5kIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHBhbmVsIGlzIGFsaWduZWQgbGVmdC5cIilcclxuICAgICAgKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wb3NpdGlvblN0eWxlID09IFwicmlnaHRcIikge1xyXG4gICAgICBwb3NFMS5zZXREZXNjKFxyXG4gICAgICAgIHQoXCJGbG9hdGluZyBUT0MgcG9zaXRpb24sIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBub3Rlc1wiKVxyXG4gICAgICApXHJcbiAgICB9IGVsc2VcclxuICAgICAgcG9zRTEuc2V0RGVzYyh0KCdGbG9hdGluZyBUT0MgcG9zaXRpb24sIGRlZmF1bHQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgbm90ZXMnKSk7XHJcbiAgICBwb3NFMS5hZGREcm9wZG93bigoZHJvcGRvd24pID0+IHtcclxuICAgICAgbGV0IHBvc290aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgICBQT1NJVElPTl9TVFlMRVMubWFwKChwb3NvdGlvbjogc3RyaW5nKSA9PiAocG9zb3Rpb25zW3Bvc290aW9uXSA9IHBvc290aW9uKSk7XHJcbiAgICAgIGRyb3Bkb3duLmFkZE9wdGlvbnMocG9zb3Rpb25zKTtcclxuICAgICAgZHJvcGRvd25cclxuICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MucG9zaXRpb25TdHlsZSlcclxuICAgICAgICAub25DaGFuZ2UoKHBvc2l0aW9uU3R5bGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MucG9zaXRpb25TdHlsZSA9IHBvc2l0aW9uU3R5bGU7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXkoKTtcclxuICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJyZWZyZXNoLXRvY1wiKSk7XHJcbiAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MucG9zaXRpb25TdHlsZSAhPSBcImxlZnRcIikge1xyXG4gICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAuc2V0TmFtZSh0KCdMZWZ0IGFsaWdubWVudCBvZiBUT0MgdGV4dCcpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zZXREZXNjKFxyXG4gICAgICAgICAgdChcIndoZXRoZXIgdGhlIHRleHQgaW4gVE9DIGlzIGxlZnQgYWxpZ25lZFwiKVxyXG4gICAgICAgIClcclxuICAgICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3M/LmlzTGVmdClcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaXNMZWZ0ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmRpc3BsYXkoKTtcclxuICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInJlZnJlc2gtdG9jXCIpKTtcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUodCgnTW9iaWxlIGVuYWJsZWQgb3Igbm90JylcclxuICAgICAgKVxyXG4gICAgICAuc2V0RGVzYyhcclxuICAgICAgICB0KFwiV2hldGhlciB0byBlbmFibGUgdGhlIHBsdWdpbiBmb3IgdGhlIG1vYmlsZSBjbGllbnQsIHRoZSBkZWZhdWx0IGlzIGVuYWJsZWQuXCIpXHJcbiAgICAgIClcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzPy5pc0xvYWRPbk1vYmlsZSlcclxuICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pc0xvYWRPbk1vYmlsZSA9IHZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJyZWZyZXNoLXRvY1wiKSk7XHJcbiAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH0pKTtcclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSh0KCdJZ25vcmUgdG9wLWxldmVsIGhlYWRlcnMnKVxyXG4gICAgICApXHJcbiAgICAgIC5zZXREZXNjKFxyXG4gICAgICAgIHQoXCJTZWxlY3Qgd2hldGhlciB0byBpZ25vcmUgdGhlIHRvcC1sZXZlbCBoZWFkaW5ncy4gV2hlbiB0dXJuZWQgb24sIHRoZSB0b3AtbGV2ZWwgaGVhZGluZ3MgaW4gdGhlIGN1cnJlbnQgbm90ZSBhcmUgbm90IGRpc3BsYXllZCBpbiB0aGUgZmxvYXRpbmcgVE9DLlwiKVxyXG4gICAgICApXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncz8uaWdub3JlVG9wSGVhZGVyKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmlnbm9yZVRvcEhlYWRlciA9IHZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJyZWZyZXNoLXRvY1wiKSk7XHJcbiAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH0pKTtcclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSh0KCdEZWZhdWx0IFBpbicpXHJcbiAgICAgIClcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzPy5pc0RlZmF1bHRQaW4pXHJcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaXNEZWZhdWx0UGluID0gdmFsdWU7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBkaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInJlZnJlc2gtdG9jXCIpKTtcclxuICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKHQoJ0VuYWJsZSBUb29sdGlwJylcclxuICAgICAgKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3M/LmlzVG9vbHRpcClcclxuICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pc1Rvb2x0aXAgPSB2YWx1ZTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicmVmcmVzaC10b2NcIikpO1xyXG4gICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICB9KSk7XHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogdChcIlBsdWdpbiBTdHlsZSBTZXR0aW5nc1wiKSB9KTtcclxuICAgIGxldCBzdHlsZUUxID0gY29udGFpbmVyRWwuY3JlYXRlRWwoXCJkaXZcIik7XHJcbiAgICBzdHlsZUUxLmFkZENsYXNzKCdjYWxsb3V0Jyk7XHJcbiAgICBzdHlsZUUxLnNldEF0dHJpYnV0ZShcImRhdGEtY2FsbG91dFwiLCBcIndhcm5pbmdcIik7XHJcbiAgICBsZXQgdGl0bGVFMSA9IHN0eWxlRTEuY3JlYXRlRWwoXCJkaXZcIiwgeyB0ZXh0OiBcIlx1RDgzRFx1REQxNCBOb3RpY2U6IFBsZWFzZSBjbGljayB0aGUgYnV0dG9uIGFnYWluLElmIHRoZSBmbG9hdGluZy10b2Mgb3B0aW9uIGlzIG5vdCBmb3VuZCBpbiB0aGUgc3R5bGUgc2V0dGluZ3NcIiB9KVxyXG4gICAgdGl0bGVFMS5hZGRDbGFzcyhcImNhbGxvdXQtdGl0bGVcIilcclxuICAgIGxldCBjb250ZW50RTEgPSBzdHlsZUUxLmNyZWF0ZUVsKFwiZGl2XCIpXHJcbiAgICBjb250ZW50RTEuYWRkQ2xhc3MoXCJjYWxsb3V0LWNvbnRlbnRcIik7XHJcbiAgICBjb25zdCBpc0VuYWJsZWQgPSBhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMoXCJvYnNpZGlhbi1zdHlsZS1zZXR0aW5nc1wiKTtcclxuICAgIGlmIChpc0VuYWJsZWQpIHtcclxuICAgICAgY29udGVudEUxLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgIGxldCBidXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KGNvbnRlbnRFMSk7XHJcbiAgICAgIGJ1dHRvblxyXG4gICAgICAgIC5zZXRJY29uKFwicGFsZXR0ZVwiKVxyXG4gICAgICAgIC5zZXRDbGFzcyhcIm1vZC1jdGFcIilcclxuICAgICAgICAuc2V0QnV0dG9uVGV4dChcIlx1RDgzQ1x1REZBOCBPcGVuIHN0eWxlIHNldHRpbmdzXCIpXHJcbiAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xyXG4gICAgICAgICAgYXBwLnNldHRpbmcub3BlbigpO1xyXG4gICAgICAgICAgYXBwLnNldHRpbmcub3BlblRhYkJ5SWQoXCJvYnNpZGlhbi1zdHlsZS1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgIGFwcC53b3Jrc3BhY2UudHJpZ2dlcihcInBhcnNlLXN0eWxlLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmbG9hdHNldHRpbmdFSSA9IGFwcC5zZXR0aW5nLmFjdGl2ZVRhYi5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yKFwiLnNldHRpbmctaXRlbS1oZWFkaW5nW2RhdGEtaWQ9J2Zsb2F0aW5nLXRvYy1zdHlsZXMnXVwiKVxyXG4gICAgICAgICAgICBpZiAoZmxvYXRzZXR0aW5nRUkpIHsgZmxvYXRzZXR0aW5nRUkuYWRkQ2xhc3M/LihcImZsb2F0LWN0YVwiKTsgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBhcHAud29ya3NwYWNlLnRyaWdnZXIoXCJwYXJzZS1zdHlsZS1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICBhcHAuc2V0dGluZy5hY3RpdmVUYWIuY29udGFpbmVyRWwucXVlcnlTZWxlY3RvcihcIi5zZXR0aW5nLWl0ZW0taGVhZGluZ1tkYXRhLWlkPSdmbG9hdGluZy10b2Mtc3R5bGVzJ11cIik/LmFkZENsYXNzPy4oXCJmbG9hdC1jdGFcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9LCAyNTApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGVudEUxLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgIGNvbnRlbnRFMS5jcmVhdGVFbChcInNwYW5cIiwgeyB0ZXh0OiBcIlwiIH0pLmNyZWF0ZUVsKFwiYVwiLCB7XHJcbiAgICAgICAgdGV4dDogXCJQbGVhc2UgaW5zdGFsbCBvciBlbmFibGUgdGhlIHN0eWxlLXNldHRpbmdzIHBsdWdpblwiLFxyXG4gICAgICAgIGhyZWY6IFwib2JzaWRpYW46Ly9zaG93LXBsdWdpbj9pZD1vYnNpZGlhbi1zdHlsZS1zZXR0aW5nc1wiLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCBjRG9uYXRpb25EaXYgPSBjb250YWluZXJFbC5jcmVhdGVFbChcImRpdlwiLCB7XHJcbiAgICAgIGNsczogXCJjRG9uYXRpb25TZWN0aW9uXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjcmVkaXQgPSBjcmVhdGVFbChcInBcIik7XHJcbiAgICBjb25zdCBkb25hdGVUZXh0ID0gY3JlYXRlRWwoXCJwXCIpO1xyXG4gICAgZG9uYXRlVGV4dC5hcHBlbmRUZXh0KFxyXG4gICAgICBcIklmIHlvdSBsaWtlIHRoaXMgUGx1Z2luIGFuZCBhcmUgY29uc2lkZXJpbmcgZG9uYXRpbmcgdG8gc3VwcG9ydCBjb250aW51ZWQgZGV2ZWxvcG1lbnQsIHVzZSB0aGUgYnV0dG9uIGJlbG93IVwiXHJcbiAgICApO1xyXG4gICAgY3JlZGl0LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpXCIpO1xyXG4gICAgY0RvbmF0aW9uRGl2LmFwcGVuZENoaWxkKGRvbmF0ZVRleHQpO1xyXG4gICAgY0RvbmF0aW9uRGl2LmFwcGVuZENoaWxkKGNyZWRpdCk7XHJcblxyXG4gICAgY0RvbmF0aW9uRGl2LmFwcGVuZENoaWxkKFxyXG4gICAgICBjcmVhdGVEb25hdGVCdXR0b24oXCJodHRwczovL2dpdGh1Yi5jb20vY3VtYW55I3RoYW5rLXlvdS12ZXJ5LW11Y2gtZm9yLXlvdXItc3VwcG9ydFwiKVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNyZWF0ZURvbmF0ZUJ1dHRvbiA9IChsaW5rOiBzdHJpbmcpOiBIVE1MRWxlbWVudCA9PiB7XHJcbiAgY29uc3QgYSA9IGNyZWF0ZUVsKFwiYVwiKTtcclxuICBhLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgbGluayk7XHJcbiAgYS5hZGRDbGFzcyhcImJ1eW1lYWNvZmZlZS1pbWdcIik7XHJcbiAgYS5pbm5lckhUTUwgPSBgPGltZyBzcmM9XCJodHRwczovL2ltZy5idXltZWFjb2ZmZWUuY29tL2J1dHRvbi1hcGkvP3RleHQ9QnV5IG1lIGEgY29mZmVlICZlbW9qaT0mc2x1Zz1DdW1hbiZidXR0b25fY29sb3VyPUJENUZGRiZmb250X2NvbG91cj1mZmZmZmYmZm9udF9mYW1pbHk9UG9wcGlucyZvdXRsaW5lX2NvbG91cj0wMDAwMDAmY29mZmVlX2NvbG91cj1GRkREMDBcIiAvPmA7XHJcbiAgcmV0dXJuIGE7XHJcbn07XHJcblxyXG5cclxuXHJcbiIsICJcclxuXHJcbmV4cG9ydCBjb25zdCBQT1NJVElPTl9TVFlMRVMgPSBbXCJsZWZ0XCIsIFwicmlnaHRcIixcImJvdGhcIl07XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGbG90aW5nVE9DU2V0dGluZyB7XHJcbiAgaWdub3JlVG9wSGVhZGVyOiBib29sZWFuO1xyXG4gIHBvc2l0aW9uU3R5bGU6IHN0cmluZztcclxuICBpc0xvYWRPbk1vYmlsZTpib29sZWFuO1xyXG4gIGlzTGVmdDpib29sZWFuO1xyXG4gIGlzRGVmYXVsdFBpbjpib29sZWFuO1xyXG4gIGlzVG9vbHRpcDpib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogRmxvdGluZ1RPQ1NldHRpbmcgPSB7XHJcbiAgaWdub3JlVG9wSGVhZGVyOiBmYWxzZSxcclxuICBwb3NpdGlvblN0eWxlOiBcImxlZnRcIixcclxuICBpc0xvYWRPbk1vYmlsZTogdHJ1ZSxcclxuICBpc0xlZnQ6IGZhbHNlLFxyXG4gIGlzRGVmYXVsdFBpbjpmYWxzZSxcclxuICBpc1Rvb2x0aXA6ZmFsc2VcclxufTtcclxuIiwgIi8vIENvZGUgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vdmFsZW50aW5lMTk1L29ic2lkaWFuLWFkbW9uaXRpb24vYmxvYi9tYXN0ZXIvc3JjL2xhbmcvaGVscGVycy50c1xyXG5cclxuaW1wb3J0IHsgbW9tZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuaW1wb3J0IGFyIGZyb20gJy4vbG9jYWxlL2FyJztcclxuaW1wb3J0IGN6IGZyb20gJy4vbG9jYWxlL2N6JztcclxuaW1wb3J0IGRhIGZyb20gJy4vbG9jYWxlL2RhJztcclxuaW1wb3J0IGRlIGZyb20gJy4vbG9jYWxlL2RlJztcclxuaW1wb3J0IGVuIGZyb20gJy4vbG9jYWxlL2VuJztcclxuaW1wb3J0IGVuR0IgZnJvbSAnLi9sb2NhbGUvZW4tZ2InO1xyXG5pbXBvcnQgZXMgZnJvbSAnLi9sb2NhbGUvZXMnO1xyXG5pbXBvcnQgZnIgZnJvbSAnLi9sb2NhbGUvZnInO1xyXG5pbXBvcnQgaGkgZnJvbSAnLi9sb2NhbGUvaGknO1xyXG5pbXBvcnQgaWQgZnJvbSAnLi9sb2NhbGUvaWQnO1xyXG5pbXBvcnQgaXQgZnJvbSAnLi9sb2NhbGUvaXQnO1xyXG5pbXBvcnQgamEgZnJvbSAnLi9sb2NhbGUvamEnO1xyXG5pbXBvcnQga28gZnJvbSAnLi9sb2NhbGUva28nO1xyXG5pbXBvcnQgbmwgZnJvbSAnLi9sb2NhbGUvbmwnO1xyXG5pbXBvcnQgbm8gZnJvbSAnLi9sb2NhbGUvbm8nO1xyXG5pbXBvcnQgcGwgZnJvbSAnLi9sb2NhbGUvcGwnO1xyXG5pbXBvcnQgcHQgZnJvbSAnLi9sb2NhbGUvcHQnO1xyXG5pbXBvcnQgcHRCUiBmcm9tICcuL2xvY2FsZS9wdC1icic7XHJcbmltcG9ydCBybyBmcm9tICcuL2xvY2FsZS9ybyc7XHJcbmltcG9ydCBydSBmcm9tICcuL2xvY2FsZS9ydSc7XHJcbmltcG9ydCB0ciBmcm9tICcuL2xvY2FsZS90cic7XHJcbmltcG9ydCB6aENOIGZyb20gJy4vbG9jYWxlL3poLWNuJztcclxuaW1wb3J0IHpoVFcgZnJvbSAnLi9sb2NhbGUvemgtdHcnO1xyXG5cclxuY29uc3QgbG9jYWxlTWFwOiB7IFtrOiBzdHJpbmddOiBQYXJ0aWFsPHR5cGVvZiBlbj4gfSA9IHtcclxuICBhcixcclxuICBjczogY3osXHJcbiAgZGEsXHJcbiAgZGUsXHJcbiAgZW4sXHJcbiAgJ2VuLWdiJzogZW5HQixcclxuICBlcyxcclxuICBmcixcclxuICBoaSxcclxuICBpZCxcclxuICBpdCxcclxuICBqYSxcclxuICBrbyxcclxuICBubCxcclxuICBubjogbm8sXHJcbiAgcGwsXHJcbiAgcHQsXHJcbiAgJ3B0LWJyJzogcHRCUixcclxuICBybyxcclxuICBydSxcclxuICB0cixcclxuICAnemgtY24nOiB6aENOLFxyXG4gICd6aC10dyc6IHpoVFcsXHJcbn07XHJcblxyXG5jb25zdCBsb2NhbGUgPSBsb2NhbGVNYXBbbW9tZW50LmxvY2FsZSgpXTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0KHN0cjoga2V5b2YgdHlwZW9mIGVuKTogc3RyaW5nIHtcclxuICByZXR1cm4gKGxvY2FsZSAmJiBsb2NhbGVbc3RyXSkgfHwgZW5bc3RyXTtcclxufVxyXG4iLCAiLy8gXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjMxXHUwNjI4XHUwNjRBXHUwNjI5XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7fTtcclxuIiwgIi8vIFx1MDEwRGVcdTAxNjF0aW5hXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7fTtcclxuIiwgIi8vIERhbnNrXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7fTtcclxuIiwgIi8vIERldXRzY2hcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHt9O1xyXG4iLCAiZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgJ0Zsb2F0aW5nIFRPQyBwb3NpdGlvbic6J0Zsb2F0aW5nIFRPQyBwb3NpdGlvbicsXHJcbiAgICAnRmxvYXRpbmcgVE9DIHBvc2l0aW9uLCBkZWZhdWx0IG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIG5vdGVzJzonRmxvYXRpbmcgVE9DIHBvc2l0aW9uLCBkZWZhdWx0IG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIG5vdGVzJyxcclxuICAgICdJZ25vcmUgdG9wLWxldmVsIGhlYWRlcnMnOidJZ25vcmUgdG9wLWxldmVsIGhlYWRlcnMnLFxyXG4gICAgJ1NlbGVjdCB3aGV0aGVyIHRvIGlnbm9yZSB0aGUgdG9wLWxldmVsIGhlYWRpbmdzLiBXaGVuIHR1cm5lZCBvbiwgdGhlIHRvcC1sZXZlbCBoZWFkaW5ncyBpbiB0aGUgY3VycmVudCBub3RlIGFyZSBub3QgZGlzcGxheWVkIGluIHRoZSBmbG9hdGluZyBUT0MuJzonU2VsZWN0IHdoZXRoZXIgdG8gaWdub3JlIHRoZSB0b3AtbGV2ZWwgaGVhZGluZ3MuIFdoZW4gdHVybmVkIG9uLCB0aGUgdG9wLWxldmVsIGhlYWRpbmdzIGluIHRoZSBjdXJyZW50IG5vdGUgYXJlIG5vdCBkaXNwbGF5ZWQgaW4gdGhlIGZsb2F0aW5nIFRPQy4nLCAgICBcclxuICAgICdQbHVnaW4gU2V0dGluZ3MnOidQbHVnaW4gU2V0dGluZ3MnLFxyXG4gICAgJ0RlZmF1bHQgUGluJzonRGVmYXVsdCBQaW4nLFxyXG4gICAgJ0VuYWJsZSBUb29sdGlwJzonRW5hYmxlIFRvb2x0aXAnLFxyXG4gICAgJ1BsdWdpbiBTdHlsZSBTZXR0aW5ncyc6ICdQbHVnaW4gU3R5bGUgU2V0dGluZ3MnLFxyXG4gICAgJ01vYmlsZSBlbmFibGVkIG9yIG5vdCc6J01vYmlsZSBlbmFibGVkIG9yIG5vdCcsXHJcbiAgICAnV2hldGhlciB0byBlbmFibGUgdGhlIHBsdWdpbiBmb3IgdGhlIG1vYmlsZSBjbGllbnQsIHRoZSBkZWZhdWx0IGlzIGVuYWJsZWQuJzonV2hldGhlciB0byBlbmFibGUgdGhlIHBsdWdpbiBmb3IgdGhlIG1vYmlsZSBjbGllbnQsIHRoZSBkZWZhdWx0IGlzIGVuYWJsZWQuJyxcclxuICAgICdJZiB0aGUgZmxvYXRpbmcgVG9jIG9wdGlvbiBpcyBub3QgZm91bmQgaW4gdGhlIHN0eWxlIHNldHRpbmcsIHBsZWFzZSByZWxvYWQgdGhlIHN0eWxlIHNldHRpbmcgcGx1Z2luICh0dXJuIGl0IG9mZiBhbmQgb24gYWdhaW4pJzonSWYgdGhlIGZsb2F0aW5nIFRvYyBvcHRpb24gaXMgbm90IGZvdW5kIGluIHRoZSBzdHlsZSBzZXR0aW5nLCBwbGVhc2UgcmVsb2FkIHRoZSBzdHlsZSBzZXR0aW5nIHBsdWdpbiAodHVybiBpdCBvZmYgYW5kIG9uIGFnYWluKScsXHJcbiAgICAnTGVmdCBhbGlnbm1lbnQgb2YgVE9DIHRleHQnOidMZWZ0IGFsaWdubWVudCBvZiBUT0MgdGV4dCcsXHJcbiAgICAnQWxpZ25lZCBvbiBib3RoIHNpZGVzJzonQWxpZ25lZCBvbiBib3RoIHNpZGVzJyxcclxuICAgICdGbG9hdGluZyBUT0MgcG9zaXRpb24sIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBub3Rlcyc6J0Zsb2F0aW5nIFRPQyBwb3NpdGlvbiwgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIG5vdGVzJyxcclxuICAgICd3aGV0aGVyIHRoZSB0ZXh0IGluIFRPQyBpcyBsZWZ0IGFsaWduZWQnOid3aGV0aGVyIHRoZSB0ZXh0IGluIFRPQyBpcyBsZWZ0IGFsaWduZWQnLFxyXG4gICAgJ1doZW4gdGhlIHBhbmVsIGlzIHNwbGl0IGxlZnQgYW5kIHJpZ2h0LCB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgbGF5b3V0IGlzIGFsaWduZWQgcmlnaHQgYW5kIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHBhbmVsIGlzIGFsaWduZWQgbGVmdC4nOidXaGVuIHRoZSBwYW5lbCBpcyBzcGxpdCBsZWZ0IGFuZCByaWdodCwgdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGxheW91dCBpcyBhbGlnbmVkIHJpZ2h0IGFuZCB0aGUgbGVmdCBzaWRlIG9mIHRoZSBwYW5lbCBpcyBhbGlnbmVkIGxlZnQuJ1xyXG59O1xyXG4iLCAiLy8gQnJpdGlzaCBFbmdsaXNoXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7fTtcclxuIiwgIi8vIEVzcGFcdTAwRjFvbFxyXG5cclxuZXhwb3J0IGRlZmF1bHQge307XHJcbiIsICJleHBvcnQgZGVmYXVsdCB7fTtcclxuIiwgIi8vIFx1MDkzOVx1MDkzRlx1MDkyOFx1MDk0RFx1MDkyNlx1MDk0MFxyXG5cclxuZXhwb3J0IGRlZmF1bHQge307XHJcbiIsICIvLyBCYWhhc2EgSW5kb25lc2lhXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7fTtcclxuIiwgIi8vIEl0YWxpYW5vXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7fTtcclxuIiwgIi8vIFx1NjVFNVx1NjcyQ1x1OEE5RVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge307XHJcbiIsICIvLyBcdUQ1NUNcdUFENkRcdUM1QjRcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHt9O1xyXG4iLCAiLy8gTmVkZXJsYW5kc1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge307XHJcbiIsICIvLyBOb3Jza1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge307XHJcbiIsICIvLyBqXHUwMTE5enlrIHBvbHNraVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge307XHJcbiIsICJleHBvcnQgZGVmYXVsdCB7fTtcclxuIiwgImV4cG9ydCBkZWZhdWx0IHt9O1xyXG4iLCAiLy8gUm9tXHUwMEUyblx1MDEwM1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge307XHJcbiIsICIvLyBcdTA0NDBcdTA0NDNcdTA0NDFcdTA0NDFcdTA0M0FcdTA0MzhcdTA0MzlcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHt9O1xyXG4iLCAiLy8gVFx1MDBGQ3JrXHUwMEU3ZVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge307XHJcbiIsICJleHBvcnQgZGVmYXVsdCB7XHJcbiAgLy8gc2V0dGluZy50c1xyXG4gICdGbG9hdGluZyBUT0MgcG9zaXRpb24nOiAnXHU2RDZFXHU1MkE4XHU3NkVFXHU1RjU1XHU2NjNFXHU3OTNBXHU0RjREXHU3RjZFJyxcclxuICAnRmxvYXRpbmcgVE9DIHBvc2l0aW9uLCBkZWZhdWx0IG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIG5vdGVzJzogJ1x1NkQ2RVx1NTJBOFx1NzZFRVx1NUY1NVx1NjYzRVx1NzkzQVx1NEY0RFx1N0Y2RVx1RkYwQ1x1OUVEOFx1OEJBNFx1NjYzRVx1NzkzQVx1NTcyOFx1N0IxNFx1OEJCMFx1NURFNlx1NEZBNycsXHJcbiAgJ0lnbm9yZSB0b3AtbGV2ZWwgaGVhZGVycyc6ICdcdTY2MkZcdTU0MjZcdTVGRkRcdTc1NjVcdTk4NzZcdTdFQTdcdTc2RUVcdTVGNTUnLFxyXG4gICdTZWxlY3Qgd2hldGhlciB0byBpZ25vcmUgdGhlIHRvcC1sZXZlbCBoZWFkaW5ncy4gV2hlbiB0dXJuZWQgb24sIHRoZSB0b3AtbGV2ZWwgaGVhZGluZ3MgaW4gdGhlIGN1cnJlbnQgbm90ZSBhcmUgbm90IGRpc3BsYXllZCBpbiB0aGUgZmxvYXRpbmcgVE9DLic6ICdcdTkwMDlcdTYyRTlcdTY2MkZcdTU0MjZcdTVGRkRcdTc1NjVcdTk4NzZcdTdFQTdcdTY4MDdcdTk4OThcdUZGMENcdTVGMDBcdTU0MkZcdTU0MEVcdTVGNTNcdTUyNERcdTY1ODdcdTY4NjNcdTRFMkRcdTY3MDBcdTk4NzZcdTdFQTdcdTc2ODRcdTY4MDdcdTk4OThcdTRFMERcdTY2M0VcdTc5M0FcdTU3MjhcdTZENkVcdTUyQThcdTc2RUVcdTVGNTVcdTRFMkRcdTMwMDInLFxyXG4gICdQbHVnaW4gU2V0dGluZ3MnOiAnXHU2M0QyXHU0RUY2XHU4QkJFXHU3RjZFJyxcclxuICAnRGVmYXVsdCBQaW4nOidcdTY2MkZcdTU0MjZcdTlFRDhcdThCQTRcdTk0ODlcdTU3MjhcdTdCMTRcdThCQjBcdTRFMEEnLFxyXG4gICdFbmFibGUgVG9vbHRpcCc6J1x1NjYyRlx1NTQyNlx1NUYwMFx1NTQyRlx1NjgwN1x1OTg5OFx1NjNEMFx1NzkzQScsXHJcbiAgJ1BsdWdpbiBTdHlsZSBTZXR0aW5ncyc6ICdcdTYzRDJcdTRFRjZcdTY4MzdcdTVGMEZcdThCQkVcdTdGNkUnLFxyXG4gICdNb2JpbGUgZW5hYmxlZCBvciBub3QnOiAnXHU2NjJGXHU1NDI2XHU1NzI4XHU3OUZCXHU1MkE4XHU3QUVGXHU1NDJGXHU3NTI4JyxcclxuICAnV2hldGhlciB0byBlbmFibGUgdGhlIHBsdWdpbiBmb3IgdGhlIG1vYmlsZSBjbGllbnQsIHRoZSBkZWZhdWx0IGlzIGVuYWJsZWQuJzonXHU3OUZCXHU1MkE4XHU1QkEyXHU2MjM3XHU3QUVGXHU2NjJGXHU1NDI2XHU1NDJGXHU3NTI4XHU2M0QyXHU0RUY2XHVGRjBDXHU5RUQ4XHU4QkE0XHU1NDJGXHU3NTI4XHUzMDAyJyxcclxuICAnSWYgdGhlIGZsb2F0aW5nIFRvYyBvcHRpb24gaXMgbm90IGZvdW5kIGluIHRoZSBzdHlsZSBzZXR0aW5nLCBwbGVhc2UgcmVsb2FkIHRoZSBzdHlsZSBzZXR0aW5nIHBsdWdpbiAodHVybiBpdCBvZmYgYW5kIG9uIGFnYWluKSc6J1x1NTk4Mlx1Njc5Q3N0eWxlIHNldHRpbmcgXHU0RTJEXHU2NUUwXHU2Q0Q1XHU3NzBCXHU1MjMwIGZsb2F0aW5nIFRvY1x1OTAwOVx1OTg3OVx1RkYwQ1x1OEJGN1x1OTFDRFx1OEY3RHN0eWxlIHNldHRpbmdcdTYzRDJcdTRFRjZcdUZGMDhcdTUxNzNcdTk1RURcdTUxOERcdTVGMDBcdTU0MkZcdTUzNzNcdTUzRUZcdUZGMDknLFxyXG4gICdMZWZ0IGFsaWdubWVudCBvZiBUT0MgdGV4dCc6J1x1NzZFRVx1NUY1NVx1NjU4N1x1NUI1N1x1NURFNlx1NUJGOVx1OUY1MCcsXHJcbiAgJ0Zsb2F0aW5nIFRPQyBwb3NpdGlvbiwgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIG5vdGVzJzonXHU2RDZFXHU1MkE4XHU3NkVFXHU1RjU1XHU2NjNFXHU3OTNBXHU0RjREXHU3RjZFXHVGRjBDXHU2NjNFXHU3OTNBXHU1NzI4XHU3QjE0XHU4QkIwXHU1M0YzXHU0RkE3JyxcclxuICAnd2hldGhlciB0aGUgdGV4dCBpbiBUT0MgaXMgbGVmdCBhbGlnbmVkJzonXHU1RjUzXHU1REU1XHU1MTc3XHU2ODBGXHU1NzI4XHU1M0YzXHU0RkE3XHU2NUY2XHVGRjBDXHU3NkVFXHU1RjU1XHU0RTJEXHU3Njg0XHU2ODA3XHU5ODk4XHU2NjJGXHU1NDI2XHU1REU2XHU1QkY5XHU5RjUwJyxcclxuICAnQWxpZ25lZCBvbiBib3RoIHNpZGVzJzonXHU0RTI0XHU3QUVGXHU1QkY5XHU5RjUwJyxcclxuICAnV2hlbiB0aGUgcGFuZWwgaXMgc3BsaXQgbGVmdCBhbmQgcmlnaHQsIHRoZSByaWdodCBzaWRlIG9mIHRoZSBsYXlvdXQgaXMgYWxpZ25lZCByaWdodCBhbmQgdGhlIGxlZnQgc2lkZSBvZiB0aGUgcGFuZWwgaXMgYWxpZ25lZCBsZWZ0Lic6J1x1NUY1M1x1OTc2Mlx1Njc3Rlx1NURFNlx1NTNGM1x1NTIwNlx1NTI3Mlx1NzY4NFx1NjVGNlx1NTAxOVx1RkYwQ1x1NTNGM1x1NEZBN1x1NzI0OFx1OTc2Mlx1NTNGM1x1NUJGOVx1OUY1MFx1RkYwQ1x1NURFNlx1NEZBN1x1OTc2Mlx1Njc3Rlx1NURFNlx1NUJGOVx1OUY1MFx1MzAwMidcclxufTtcclxuIiwgImV4cG9ydCBkZWZhdWx0IHtcclxuICAvLyBzZXR0aW5nLnRzXHJcbiAgJ0Zsb2F0aW5nIFRPQyBwb3NpdGlvbic6ICdcdTZENkVcdTUyRDVcdTc2RUVcdTkzMDRcdTk4NkZcdTc5M0FcdTRGNERcdTdGNkUnLFxyXG4gICdGbG9hdGluZyBUT0MgcG9zaXRpb24sIGRlZmF1bHQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgbm90ZXMnOiAnXHU2RDZFXHU1MkQ1XHU3NkVFXHU5MzA0XHU5ODZGXHU3OTNBXHU0RjREXHU3RjZFXHVGRjBDXHU5RUQ4XHU4QThEXHU5ODZGXHU3OTNBXHU1NzI4XHU3QjQ2XHU4QTE4XHU1REU2XHU1MDc0JyxcclxuICAnSWdub3JlIHRvcC1sZXZlbCBoZWFkZXJzJzogJ1x1NjYyRlx1NTQyNlx1NUZGRFx1NzU2NVx1OTgwMlx1N0QxQVx1NzZFRVx1OTMwNCcsXHJcbiAgJ1NlbGVjdCB3aGV0aGVyIHRvIGlnbm9yZSB0aGUgdG9wLWxldmVsIGhlYWRpbmdzLiBXaGVuIHR1cm5lZCBvbiwgdGhlIHRvcC1sZXZlbCBoZWFkaW5ncyBpbiB0aGUgY3VycmVudCBub3RlIGFyZSBub3QgZGlzcGxheWVkIGluIHRoZSBmbG9hdGluZyBUT0MuJzogJ1x1OTA3OFx1NjRDN1x1NjYyRlx1NTQyNlx1NUZGRFx1NzU2NVx1OTgwMlx1N0QxQVx1NkExOVx1OTg0Q1x1RkYwQ1x1OTU4Qlx1NTU1Rlx1NUY4Q1x1NzU3Nlx1NTI0RFx1NjU4N1x1NkE5NFx1NEUyRFx1NjcwMFx1OTgwMlx1N0QxQVx1NzY4NFx1NkExOVx1OTg0Q1x1NEUwRFx1OTg2Rlx1NzkzQVx1NTcyOFx1NkQ2RVx1NTJENVx1NzZFRVx1OTMwNFx1NEUyRFx1MzAwMicsXHJcbiAgJ1BsdWdpbiBTZXR0aW5ncyc6ICdcdTYzRDJcdTRFRjZcdThBMkRcdTdGNkUnLFxyXG4gICdEZWZhdWx0IFBpbic6J1x1NjYyRlx1NTQyNlx1OUVEOFx1OEE4RFx1OTFEOFx1NTcyOFx1N0I0Nlx1OEExOFx1NEUwQScsXHJcbiAgJ1BsdWdpbiBTdHlsZSBTZXR0aW5ncyc6ICdcdTYzRDJcdTRFRjZcdTZBMjNcdTVGMEZcdThBMkRcdTdGNkUnLFxyXG4gICdNb2JpbGUgZW5hYmxlZCBvciBub3QnOiAnXHU2NjJGXHU1NDI2XHU1NzI4XHU3OUZCXHU1MkQ1XHU3QUVGXHU1NTVGXHU3NTI4JyxcclxuICAnV2hldGhlciB0byBlbmFibGUgdGhlIHBsdWdpbiBmb3IgdGhlIG1vYmlsZSBjbGllbnQsIHRoZSBkZWZhdWx0IGlzIGVuYWJsZWQuJzonXHU3OUZCXHU1MkQ1XHU1QkEyXHU2MjM2XHU3QUVGXHU2NjJGXHU1NDI2XHU1NTVGXHU3NTI4XHU2M0QyXHU0RUY2XHVGRjBDXHU5RUQ4XHU4QThEXHU1NTVGXHU3NTI4XHUzMDAyJyxcclxuICAnSWYgdGhlIGZsb2F0aW5nIFRvYyBvcHRpb24gaXMgbm90IGZvdW5kIGluIHRoZSBzdHlsZSBzZXR0aW5nLCBwbGVhc2UgcmVsb2FkIHRoZSBzdHlsZSBzZXR0aW5nIHBsdWdpbiAodHVybiBpdCBvZmYgYW5kIG9uIGFnYWluKSc6J1x1NTk4Mlx1Njc5Q3N0eWxlIHNldHRpbmcgXHU0RTJEXHU3MTIxXHU2Q0Q1XHU3NzBCXHU1MjMwIGZsb2F0aW5nIFRvY1x1OTA3OFx1OTgwNVx1RkYwQ1x1OEFDQlx1OTFDRFx1OEYwOXN0eWxlIHNldHRpbmdcdTYzRDJcdTRFRjZcdUZGMDhcdTk1RENcdTk1ODlcdTUxOERcdTk1OEJcdTU1NUZcdTUzNzNcdTUzRUZcdUZGMDknLFxyXG4gICdMZWZ0IGFsaWdubWVudCBvZiBUT0MgdGV4dCc6J1x1NzZFRVx1OTMwNFx1NjU4N1x1NUI1N1x1NURFNlx1NUMwRFx1OUY0QScsXHJcbiAgJ0Zsb2F0aW5nIFRPQyBwb3NpdGlvbiwgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIG5vdGVzJzonXHU2RDZFXHU1MkQ1XHU3NkVFXHU5MzA0XHU5ODZGXHU3OTNBXHU0RjREXHU3RjZFXHVGRjBDXHU5ODZGXHU3OTNBXHU1NzI4XHU3QjQ2XHU4QTE4XHU1M0YzXHU1MDc0JyxcclxuICAnd2hldGhlciB0aGUgdGV4dCBpbiBUT0MgaXMgbGVmdCBvciByaWdodCBhbGlnbmVkIFdoZW4gdGhlIGZsb2F0aW5nIHRvYyBpcyBvbiB0aGUgcmlnaHQnOidcdTc1NzZcdTVERTVcdTUxNzdcdTZCMDRcdTU3MjhcdTUzRjNcdTUwNzRcdTY2NDJcdUZGMENcdTc2RUVcdTkzMDRcdTRFMkRcdTc2ODRcdTZBMTlcdTk4NENcdTY2MkZcdTU0MjZcdTVERTZcdTVDMERcdTlGNEEnLFxyXG4gICdBbGlnbmVkIG9uIGJvdGggc2lkZXMnOidcdTUxNjlcdTdBRUZcdTVDMERcdTlGNEEnLFxyXG4gICdXaGVuIHRoZSBwYW5lbCBpcyBzcGxpdCBsZWZ0IGFuZCByaWdodCwgdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGxheW91dCBpcyBhbGlnbmVkIHJpZ2h0IGFuZCB0aGUgbGVmdCBzaWRlIG9mIHRoZSBwYW5lbCBpcyBhbGlnbmVkIGxlZnQuJzonXHU3NTc2XHU5NzYyXHU2NzdGXHU1REU2XHU1M0YzXHU1MjA2XHU1MjcyXHU3Njg0XHU2NjQyXHU1MDE5XHVGRjBDXHU1M0YzXHU1MDc0XHU3MjQ4XHU5NzYyXHU1M0YzXHU1QzBEXHU5RjRBXHVGRjBDXHU1REU2XHU1MDc0XHU5NzYyXHU2NzdGXHU1REU2XHU1QzBEXHU5RjRBXHUzMDAyJ1xyXG59O1xyXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs2eUJBQUEseUVBQStGLHVCQ0UvRixNQUErSCx1QkFHL0gsV0FDSSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFBdUIsS0FDekIsZ0NBQ0UsR0FBTSxHQUFRLHNCQUNSLEVBQVMsb0JBQ1gsRUFDQSxFQUFVLEdBQ2QsQUFBSyxHQUFJLEVBQU0sS0FBSyxNQUFhLEtBQzdCLEdBQVUsRUFBRSxHQUNaLEVBQVMsRUFBTyxRQUFRLEVBQU8sS0FDdkIsR0FBSSxFQUFPLEtBQUssTUFBYSxNQUNyQyxHQUFVLEVBQUUsR0FDWixFQUFTLEVBQU8sUUFBUSxFQUFRLEtBR3BDLEdBQUksR0FBZSxFQUNuQixLQUFNLG9CQUFpQixlQUNuQixFQUNBLEVBQ0EsRUFDQSxHQUVKLEdBQUksR0FBTyxFQUFhLFNBQVMsS0FDakMsRUFBSyxTQUFTLFFBQ2QsRUFBSyxR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