From f518465b5ff05240e8cbdb88b84bc03b47b965f7 Mon Sep 17 00:00:00 2001 From: Masquerade Circus Date: Fri, 30 Jul 2021 18:00:15 -0500 Subject: [PATCH] Release 5.0.15 --- CHANGELOG.md | 10 ++++++++-- dist/valyrian.min.js | 2 +- dist/valyrian.min.js.map | 2 +- package.json | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64aa8d7..7d7b5b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,15 @@ -### [5.0.14](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.13...5.0.14) (2021-07-30) +### [5.0.15](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.14...5.0.15) (2021-07-30) + + +### Bug Fixes + +* **lib:** fix valyrian.js not updating the v- handlers ([1a52654](https://github.com/Masquerade-Circus/valyrian.js/commit/1a526540d3030cd198d33b1772c4d32e8aaf3bae)) +### [5.0.14](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.13...5.0.14) (2021-07-30) ### Bug Fixes -* **lib:** fix valyrian adding v- event handlers and direct dom handlers ([6a89654](https://github.com/Masquerade-Circus/valyrian.js/commit/6a89654314aa0396c4e2cf1fcb7aa212a44a1dcb)) +* **lib:** fix valyrian adding v- event handlers and direct dom handlers ([6a89654](https://github.com/Masquerade-Circus/valyrian.js/commit/6a89654314aa0396c4e2cf1fcb7aa212a44a1dcb)) ### [5.0.13](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.12...5.0.13) (2021-07-29) diff --git a/dist/valyrian.min.js b/dist/valyrian.min.js index 11c2359..bcace82 100644 --- a/dist/valyrian.min.js +++ b/dist/valyrian.min.js @@ -1 +1 @@ -(()=>{var e=class{constructor(e,o,n){this.props=o,this.children=n,this.name=e}},o=class{constructor(e){this.nodeValue=e}},n=class{constructor(e,o,n){this.props=o,this.children=n,this.component=e}},t="undefined"==typeof window||"undefined"!=typeof global;function d(e,o=!1){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function r(n){let t={};[].forEach.call(n.attributes,e=>t[e.nodeName]=e.nodeValue);let d=new e(n.nodeName.toLowerCase(),t,[]);d.dom=n;for(let e=0,t=n.childNodes.length;e{let o=d("div");return o.innerHTML=e.trim(),[].map.call(o.childNodes,e=>r(e))};(t?global:window).v=function p(){let l=(o,t,...d)=>"string"==typeof o?new e(o,t||{},d):new n(o,t||{},d);l.isMounted=!1,l.isNode=t;let s=["key","data","v-once","oncreate","onupdate","onremove","onbeforeupdate"];l.reservedWords=s,l.trust=i;let c={parentVnode:void 0,oldParentVnode:void 0,component:void 0};l.current=c;let a=new Map;l.usePlugin=(e,o={})=>!a.has(e)&&a.set(e,!0)&&e(l,o);let m=[];l.onCleanup=e=>{let o=l.current.parentVnode;o.onCleanup||(o.onCleanup=[]),o.onCleanup.push(e),-1===m.indexOf(o)&&m.push(o)};let u=null,f=()=>"",h=f,v=[];function V(e){let o=e.target,n=`v-on${e.type}`;for(;o;){if(o[n])return o[n](e,o),void(e.defaultPrevented||l.update());o=o.parentNode}}function y(e,o,n){if(-1!==s.indexOf(e)){if(e in S)return S[e](o.props[e],o,n)}else"function"==typeof o.props[e]?void 0===o.dom[`v-${e}`]&&(-1===v.indexOf(e)&&(u.addEventListener(e.slice(2),V),v.push(e)),o.dom[`v-${e}`]=o.props[e]):e in o.dom&&!o.isSVG?o.dom[e]!=o.props[e]&&(o.dom[e]=o.props[e]):(void 0===n||o.props[e]!==n.props[e])&&(!1===o.props[e]?o.dom.removeAttribute(e):o.dom.setAttribute(e,o.props[e]))}function N(e,o){for(let n in e.props)if(!1===y(n,e,o))return}function g(e,o){for(let n in o.props)-1===s.indexOf(n)&&!(n in e.props)&&"function"!=typeof o.props[n]&&(n in e.dom?e.dom[n]=null:e.dom.removeAttribute(n))}l.updateProperty=y;let w=o=>{for(let n=0,t=o.children.length;n0&&p[d-1].nodeValue?(p[d-1].nodeValue+=r,p.splice(d--,1)):r instanceof o||(p[d]=new o(String(r)))}let a=p.length;if(0===a){if(s>0){for(let o=s;o--;)i[o]instanceof e&&w(i[o]);t.dom.textContent=""}}else if(s&&p[0]instanceof e&&"key"in p[0].props){let o;if(i[0]instanceof e&&"key"in i[0].props)o=i.map(e=>e.props.key);else{for(let o=s;o--;)i[o]instanceof e&&w(i[o]);t.dom.textContent="",o=[]}let n=p.map(e=>e.props.key),r=Math.max(a,o.length);for(let s=0;s=a;--o)i[o]instanceof e&&w(i[o]),i[o].dom.parentNode&&t.dom.removeChild(i[o].dom)}t.children=p}let x=null,M=null;l.unMount=()=>{h=f;let e=l.update();return l.isMounted=!1,u=null,e},l.update=(o,...n)=>{if(x&&((()=>{for(let e=m.length;e--;)for(let o of m[e].onCleanup)o();m=[]})(),M=x,x=new e(x.name,x.props,[l(h,o,...n)]),x.dom=M.dom,x.isSVG=M.isSVG,C(x,M),l.isMounted=!0,l.isNode))return x.dom.innerHTML},l.mount=(e,o,n,...i)=>(l.isMounted&&l.unMount(),u=t?"string"==typeof e?d(e,"svg"===e):e:"string"==typeof e?document.querySelectorAll(e)[0]:e,null!==u&&(x=r(u),x.isSVG="svg"===x.name,M=x,h=o),l.update(n,...i));let S={};l.directive=(e,o)=>{let n=`v-${e}`;-1===s.indexOf(n)&&(s.push(n),S[n]=o)};let b=o=>(n,t,d)=>{if(o?n:!n){let o=document.createTextNode("");return d&&d.dom&&d.dom.parentNode&&(d instanceof e&&w(d),d.dom.parentNode.replaceChild(o,d.dom)),t.name="#text",t.children=[],t.props={},t.dom=o,!1}};return l.directive("if",b(!1)),l.directive("unless",b(!0)),l.directive("for",(e,o)=>{o.children=e.map(o.children[0])}),l.directive("show",(e,o)=>{o.dom.style.display=e?"":"none"}),l.directive("class",(e,o)=>{for(let n in e)o.dom.classList.toggle(n,e[n])}),l.directive("html",(e,o)=>{o.children=[i(e)]}),l.newInstance=p,l}()})(); \ No newline at end of file +(()=>{var e=class{constructor(e,o,n){this.props=o,this.children=n,this.name=e}},o=class{constructor(e){this.nodeValue=e}},n=class{constructor(e,o,n){this.props=o,this.children=n,this.component=e}},t="undefined"==typeof window||"undefined"!=typeof global;function d(e,o=!1){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function r(n){let t={};[].forEach.call(n.attributes,e=>t[e.nodeName]=e.nodeValue);let d=new e(n.nodeName.toLowerCase(),t,[]);d.dom=n;for(let e=0,t=n.childNodes.length;e{let o=d("div");return o.innerHTML=e.trim(),[].map.call(o.childNodes,e=>r(e))};(t?global:window).v=function p(){let l=(o,t,...d)=>"string"==typeof o?new e(o,t||{},d):new n(o,t||{},d);l.isMounted=!1,l.isNode=t;let s=["key","data","v-once","oncreate","onupdate","onremove","onbeforeupdate"];l.reservedWords=s,l.trust=i;let c={parentVnode:void 0,oldParentVnode:void 0,component:void 0};l.current=c;let a=new Map;l.usePlugin=(e,o={})=>!a.has(e)&&a.set(e,!0)&&e(l,o);let m=[];l.onCleanup=e=>{let o=l.current.parentVnode;o.onCleanup||(o.onCleanup=[]),o.onCleanup.push(e),-1===m.indexOf(o)&&m.push(o)};let u=null,f=()=>"",h=f,v=[];function V(e){let o=e.target,n=`v-on${e.type}`;for(;o;){if(o[n])return o[n](e,o),void(e.defaultPrevented||l.update());o=o.parentNode}}function y(e,o,n){if(-1!==s.indexOf(e)){if(e in S)return S[e](o.props[e],o,n)}else"function"==typeof o.props[e]?(void 0===o.dom[`v-${e}`]&&-1===v.indexOf(e)&&(u.addEventListener(e.slice(2),V),v.push(e)),o.dom[`v-${e}`]=o.props[e]):e in o.dom&&!o.isSVG?o.dom[e]!=o.props[e]&&(o.dom[e]=o.props[e]):(void 0===n||o.props[e]!==n.props[e])&&(!1===o.props[e]?o.dom.removeAttribute(e):o.dom.setAttribute(e,o.props[e]))}function N(e,o){for(let n in e.props)if(!1===y(n,e,o))return}function g(e,o){for(let n in o.props)-1===s.indexOf(n)&&!(n in e.props)&&"function"!=typeof o.props[n]&&(n in e.dom?e.dom[n]=null:e.dom.removeAttribute(n))}l.updateProperty=y;let w=o=>{for(let n=0,t=o.children.length;n0&&p[d-1].nodeValue?(p[d-1].nodeValue+=r,p.splice(d--,1)):r instanceof o||(p[d]=new o(String(r)))}let a=p.length;if(0===a){if(s>0){for(let o=s;o--;)i[o]instanceof e&&w(i[o]);t.dom.textContent=""}}else if(s&&p[0]instanceof e&&"key"in p[0].props){let o;if(i[0]instanceof e&&"key"in i[0].props)o=i.map(e=>e.props.key);else{for(let o=s;o--;)i[o]instanceof e&&w(i[o]);t.dom.textContent="",o=[]}let n=p.map(e=>e.props.key),r=Math.max(a,o.length);for(let s=0;s=a;--o)i[o]instanceof e&&w(i[o]),i[o].dom.parentNode&&t.dom.removeChild(i[o].dom)}t.children=p}let x=null,M=null;l.unMount=()=>{h=f;let e=l.update();return l.isMounted=!1,u=null,e},l.update=(o,...n)=>{if(x&&((()=>{for(let e=m.length;e--;)for(let o of m[e].onCleanup)o();m=[]})(),M=x,x=new e(x.name,x.props,[l(h,o,...n)]),x.dom=M.dom,x.isSVG=M.isSVG,C(x,M),l.isMounted=!0,l.isNode))return x.dom.innerHTML},l.mount=(e,o,n,...i)=>(l.isMounted&&l.unMount(),u=t?"string"==typeof e?d(e,"svg"===e):e:"string"==typeof e?document.querySelectorAll(e)[0]:e,null!==u&&(x=r(u),x.isSVG="svg"===x.name,M=x,h=o),l.update(n,...i));let S={};l.directive=(e,o)=>{let n=`v-${e}`;-1===s.indexOf(n)&&(s.push(n),S[n]=o)};let b=o=>(n,t,d)=>{if(o?n:!n){let o=document.createTextNode("");return d&&d.dom&&d.dom.parentNode&&(d instanceof e&&w(d),d.dom.parentNode.replaceChild(o,d.dom)),t.name="#text",t.children=[],t.props={},t.dom=o,!1}};return l.directive("if",b(!1)),l.directive("unless",b(!0)),l.directive("for",(e,o)=>{o.children=e.map(o.children[0])}),l.directive("show",(e,o)=>{o.dom.style.display=e?"":"none"}),l.directive("class",(e,o)=>{for(let n in e)o.dom.classList.toggle(n,e[n])}),l.directive("html",(e,o)=>{o.children=[i(e)]}),l.newInstance=p,l}()})(); \ No newline at end of file diff --git a/dist/valyrian.min.js.map b/dist/valyrian.min.js.map index 7032b82..f03c9bf 100644 --- a/dist/valyrian.min.js.map +++ b/dist/valyrian.min.js.map @@ -1 +1 @@ -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6WyJwIiwiY29uc3RydWN0b3IiLCJhIiwidSIsImMiLCJ0aGlzIiwicHJvcHMiLCJjaGlsZHJlbiIsIm5hbWUiLCJ4Iiwibm9kZVZhbHVlIiwiTSIsImNvbXBvbmVudCIsIlMiLCJ3aW5kb3ciLCJnbG9iYWwiLCJOIiwiZCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRlRWxlbWVudCIsIkwiLCJmb3JFYWNoIiwiY2FsbCIsImF0dHJpYnV0ZXMiLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwiZG9tIiwieSIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJub2RlVHlwZSIsInB1c2giLCJrIiwiRiIsImlubmVySFRNTCIsInRyaW0iLCJtYXAiLCJ2IiwiSCIsImUiLCJvIiwidCIsImlzTW91bnRlZCIsImlzTm9kZSIsInJlc2VydmVkV29yZHMiLCJ0cnVzdCIsInBhcmVudFZub2RlIiwib2xkUGFyZW50Vm5vZGUiLCJjdXJyZW50IiwiTWFwIiwidXNlUGx1Z2luIiwiaGFzIiwic2V0Iiwib25DbGVhbnVwIiwiaW5kZXhPZiIsImciLCJVIiwiVCIsIkciLCIkIiwidGFyZ2V0IiwidHlwZSIsImRlZmF1bHRQcmV2ZW50ZWQiLCJ1cGRhdGUiLCJwYXJlbnROb2RlIiwidyIsIk8iLCJhZGRFdmVudExpc3RlbmVyIiwic2xpY2UiLCJpc1NWRyIsInJlbW92ZUF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsIkUiLCJQIiwidXBkYXRlUHJvcGVydHkiLCJWIiwib25yZW1vdmUiLCJEIiwibCIsIkMiLCJpIiwibiIsInNwbGljZSIsIkFycmF5IiwiaXNBcnJheSIsInZpZXciLCJTdHJpbmciLCJ0ZXh0Q29udGVudCIsInIiLCJrZXkiLCJtIiwiTWF0aCIsIm1heCIsInMiLCJoIiwiQSIsInByb2Nlc3NlZCIsIm9uYmVmb3JldXBkYXRlIiwib251cGRhdGUiLCJvbmNyZWF0ZSIsImFwcGVuZENoaWxkIiwicmVwbGFjZUNoaWxkIiwicmVtb3ZlQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsImYiLCJiIiwidW5Nb3VudCIsIm1vdW50IiwicXVlcnlTZWxlY3RvckFsbCIsImRpcmVjdGl2ZSIsIlIiLCJzdHlsZSIsImRpc3BsYXkiLCJjbGFzc0xpc3QiLCJ0b2dnbGUiLCJuZXdJbnN0YW5jZSJdLCJtYXBwaW5ncyI6Ik1Bb0RBLElBQUFBLEVBQUEsTUFTRUMsWUFBWUMsRUFBY0MsRUFBY0MsR0FDdENDLEtBQUtDLE1BQVFILEVBQ2JFLEtBQUtFLFNBQVdILEVBQ2hCQyxLQUFLRyxLQUFPTixJQVNoQk8sRUFBQSxNQUlFUixZQUFZQyxHQUNWRyxLQUFLSyxVQUFZUixJQVVyQlMsRUFBQSxNQUtFVixZQUFZQyxFQUE4QkMsRUFBY0MsR0FDdERDLEtBQUtDLE1BQVFILEVBQ2JFLEtBQUtFLFNBQVdILEVBQ2hCQyxLQUFLTyxVQUFZVixJQXNCakJXLEVBQTJCLG9CQUFYQyxRQUE0QyxvQkFBWEMsT0FHckQsU0FBQUMsRUFBdUJDLEVBQWlCZixHQUFpQixHQUN2RCxPQUFPQSxFQUFRZ0IsU0FBU0MsZ0JBQWdCLDZCQUE4QkYsR0FBV0MsU0FBU0UsY0FBY0gsR0FJMUcsU0FBQUksRUFBb0JKLEdBQ2xCLElBQUlmLEVBQWUsR0FDbkIsR0FBR29CLFFBQVFDLEtBQUtOLEVBQUlPLFdBQWFwQixHQUFnQkYsRUFBTUUsRUFBS3FCLFVBQVlyQixFQUFLTSxXQUU3RSxJQUFJUCxFQUFlLElBQUlILEVBQU1pQixFQUFJUSxTQUFTQyxjQUFleEIsRUFBTyxJQUNoRUMsRUFBTXdCLElBQU1WLEVBRVosSUFBQSxJQUFTYixFQUFJLEVBQUd3QixFQUFJWCxFQUFJWSxXQUFXQyxPQUFRMUIsRUFBSXdCLEVBQUd4QixJQUNoRCxHQUFtQyxJQUEvQmEsRUFBSVksV0FBV3pCLEdBQUcyQixTQUNwQjVCLEVBQU1JLFNBQVN5QixLQUFLWCxFQUFXSixFQUFJWSxXQUFXekIsVUFBQSxHQUNOLElBQS9CYSxFQUFJWSxXQUFXekIsR0FBRzJCLFNBQWdC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TyxRQUNia0MsRUFBTW5DLFNBQVcsR0FDakJtQyxFQUFNcEMsTUFBUSxHQUNkb0MsRUFBTWYsSUFBTVcsR0FDTCxJQUlYLE9BQUFyQixFQUFFNkYsVUFBVSxLQUFNQyxHQUFjLElBQ2hDOUYsRUFBRTZGLFVBQVUsU0FBVUMsR0FBYyxJQUNwQzlGLEVBQUU2RixVQUFVLE1BQU8sQ0FBQ3RFLEVBQWdCQyxLQUNsQ0EsRUFBTWxDLFNBQVdpQyxFQUFJSCxJQUFJSSxFQUFNbEMsU0FBUyxNQUUxQ1UsRUFBRTZGLFVBQVUsT0FBUSxDQUFDdEUsRUFBZUMsS0FDakNBLEVBQU1kLElBQXVDcUYsTUFBTUMsUUFBVXpFLEVBQU8sR0FBSyxTQUU1RXZCLEVBQUU2RixVQUFVLFFBQVMsQ0FBQ3RFLEVBQW1DQyxLQUN2RCxJQUFBLElBQVNDLEtBQVFGLEVBQ2RDLEVBQU1kLElBQW1CdUYsVUFBVUMsT0FBT3pFLEVBQU1GLEVBQVFFLE1BRzdEekIsRUFBRTZGLFVBQVUsT0FBUSxDQUFDdEUsRUFBY0MsS0FDakNBLEVBQU1sQyxTQUFXLENBQUMyQixFQUFNTSxNQUcxQnZCLEVBQUVtRyxZQUFjN0UsRUFFVHRCLEVBR3NEc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBzb25hcmpzL2NvZ25pdGl2ZS1jb21wbGV4aXR5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cblxudHlwZSBWbm9kZU9yVW5rbm93biA9IFZub2RlQ29tcG9uZW50IHwgVm5vZGUgfCBUZXh0Vm5vZGUgfCBhbnk7XG5cbnR5cGUgRG9tQXR0cmlidXRlID0geyBub2RlTmFtZTogc3RyaW5nOyBub2RlVmFsdWU6IHN0cmluZyB9O1xuXG50eXBlIERvbUVsZW1lbnQgPSAoSFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50KSAmIFJlY29yZDxzdHJpbmcsIGFueT47XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGtleT86IHN0cmluZyB8IG51bWJlcjtcbiAgZGF0YT86IHN0cmluZztcbiAgb25jcmVhdGU/OiB7ICh2bm9kZTogVm5vZGUpOiBuZXZlciB9O1xuICBvbnVwZGF0ZT86IHsgKHZub2RlOiBWbm9kZSwgb2xkVm5vZGU6IFZub2RlIHwgVGV4dFZub2RlKTogbmV2ZXIgfTtcbiAgb25yZW1vdmU/OiB7IChvbGRWbm9kZTogVm5vZGUpOiBuZXZlciB9O1xuICBvbmJlZm9yZXVwZGF0ZT86IHsgKHZub2RlOiBWbm9kZSwgb2xkVm5vZGU6IFZub2RlIHwgVGV4dFZub2RlKTogdW5kZWZpbmVkIHwgYm9vbGVhbiB9O1xufSAmIFJlY29yZDxzdHJpbmcsIGFueT47XG5cbnR5cGUgQ29tcG9uZW50ID0gKHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIGNoaWxkcmVuPzogVm5vZGVPclVua25vd24pID0+IFZub2RlT3JVbmtub3duIHwgVm5vZGVPclVua25vd25bXTtcblxudHlwZSBWYWx5cmlhbkNvbXBvbmVudCA9XG4gIHwgQ29tcG9uZW50XG4gIHwgKFJlY29yZDxzdHJpbmcsIGFueT4gJiB7XG4gICAgICB2aWV3OiBDb21wb25lbnQ7XG4gICAgfSk7XG5cbnR5cGUgQ3VycmVudCA9IHsgcGFyZW50Vm5vZGU/OiBWbm9kZTsgb2xkUGFyZW50Vm5vZGU/OiBWbm9kZTsgY29tcG9uZW50PzogVm5vZGVDb21wb25lbnQgfTtcblxuaW50ZXJmYWNlIFBsdWdpbiB7XG4gICh2OiBWYWx5cmlhbiwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBuZXZlcjtcbn1cblxuaW50ZXJmYWNlIERpcmVjdGl2ZSB7XG4gICh2YWx1ZTogYW55LCB2bm9kZTogVm5vZGUsIG9sZFZub2RlPzogVm5vZGUgfCBUZXh0Vm5vZGUpOiB2b2lkIHwgYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFZhbHlyaWFuRXZlbnRIYW5kbGVyIHtcbiAgKGE6IEV2ZW50LCBkb206IERvbUVsZW1lbnQpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgVm5vZGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIHByb3BzOiBQcm9wcztcbiAgY2hpbGRyZW46IFZub2RlT3JVbmtub3duW107XG4gIGRvbT86IERvbUVsZW1lbnQ7XG4gIG9uQ2xlYW51cD86IEZ1bmN0aW9uQ29uc3RydWN0b3JbXTtcbiAgaXNTVkc/OiBib29sZWFuO1xuICBwcm9jZXNzZWQ/OiBib29sZWFuO1xufVxuXG5jbGFzcyBWbm9kZSBpbXBsZW1lbnRzIFZub2RlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBwcm9wczogUHJvcHM7XG4gIGNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bltdO1xuICBkb20/OiBEb21FbGVtZW50O1xuICBvbkNsZWFudXA/OiBGdW5jdGlvbkNvbnN0cnVjdG9yW107XG4gIGlzU1ZHPzogYm9vbGVhbjtcbiAgcHJvY2Vzc2VkPzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHByb3BzOiBQcm9wcywgY2hpbGRyZW46IFZub2RlT3JVbmtub3duKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG59XG5cbmludGVyZmFjZSBUZXh0Vm5vZGUge1xuICBkb20/OiBUZXh0O1xuICBub2RlVmFsdWU6IHN0cmluZztcbn1cblxuY2xhc3MgVGV4dFZub2RlIGltcGxlbWVudHMgVGV4dFZub2RlIHtcbiAgZG9tPzogVGV4dDtcbiAgbm9kZVZhbHVlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iobm9kZVZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5vZGVWYWx1ZSA9IG5vZGVWYWx1ZTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgVm5vZGVDb21wb25lbnQge1xuICBjb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50O1xuICBwcm9wczogUHJvcHM7XG4gIGNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bltdO1xufVxuXG5jbGFzcyBWbm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIFZub2RlQ29tcG9uZW50IHtcbiAgY29tcG9uZW50OiBWYWx5cmlhbkNvbXBvbmVudDtcbiAgcHJvcHM6IFByb3BzO1xuICBjaGlsZHJlbjogVm5vZGVPclVua25vd25bXTtcblxuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50LCBwcm9wczogUHJvcHMsIGNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bltdKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgVmFseXJpYW4ge1xuICAodGFnT3JDb21wb25lbnQ6IHN0cmluZyB8IFZhbHlyaWFuQ29tcG9uZW50LCBwcm9wcz86IFByb3BzIHwgbnVsbCwgY2hpbGRyZW4/OiBWbm9kZU9yVW5rbm93bik6IFZub2RlIHwgVm5vZGVDb21wb25lbnQ7XG4gIGlzTW91bnRlZDogYm9vbGVhbjtcbiAgaXNOb2RlOiBib29sZWFuO1xuICByZXNlcnZlZFdvcmRzOiBzdHJpbmdbXTtcbiAgY3VycmVudDogQ3VycmVudDtcbiAgdHJ1c3Q6IChodG1sU3RyaW5nOiBzdHJpbmcpID0+IFZub2RlW107XG4gIHVzZVBsdWdpbjogKHBsdWdpbjogUGx1Z2luLCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBvbkNsZWFudXA6IChjYWxsYmFjazogdHlwZW9mIEZ1bmN0aW9uKSA9PiB2b2lkO1xuICB1cGRhdGVQcm9wZXJ0eTogKG5hbWU6IHN0cmluZywgbmV3Vm5vZGU6IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkTm9kZTogVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KSA9PiB2b2lkO1xuICB1cGRhdGU6IChwcm9wcz86IFByb3BzIHwgbnVsbCwgLi4uY2hpbGRyZW46IFZub2RlT3JVbmtub3duKSA9PiBzdHJpbmcgfCB2b2lkO1xuICBtb3VudDogKGNvbnRhaW5lcjogc3RyaW5nIHwgRG9tRWxlbWVudCwgY29tcG9uZW50OiBWYWx5cmlhbkNvbXBvbmVudCwgcHJvcHM/OiBQcm9wcyB8IG51bGwsIC4uLmNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bltdKSA9PiBzdHJpbmcgfCB2b2lkO1xuICB1bk1vdW50OiAoKSA9PiBzdHJpbmcgfCBib29sZWFuIHwgdm9pZDtcbiAgZGlyZWN0aXZlOiAoZGlyZWN0aXZlOiBzdHJpbmcsIGhhbmRsZXI6IERpcmVjdGl2ZSkgPT4gdm9pZDtcbiAgbmV3SW5zdGFuY2U6ICgpID0+IFZhbHlyaWFuO1xuICBbeDogc3RyaW5nXTogYW55O1xufVxuXG5sZXQgaXNOb2RlID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBDcmVhdGUgTm9kZSBlbGVtZW50XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWU6IHN0cmluZywgaXNTVkc6IGJvb2xlYW4gPSBmYWxzZSk6IERvbUVsZW1lbnQge1xuICByZXR1cm4gaXNTVkcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB0YWdOYW1lKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG59XG5cbi8vIFRyYW5zZm9ybXMgYSBET00gbm9kZSB0byBhIFZOb2RlXG5mdW5jdGlvbiBkb21Ub1Zub2RlKGRvbTogRG9tRWxlbWVudCk6IFZub2RlIHtcbiAgbGV0IHByb3BzOiBQcm9wcyA9IHt9O1xuICBbXS5mb3JFYWNoLmNhbGwoZG9tLmF0dHJpYnV0ZXMsIChwcm9wOiBBdHRyKSA9PiAocHJvcHNbcHJvcC5ub2RlTmFtZV0gPSBwcm9wLm5vZGVWYWx1ZSkpO1xuXG4gIGxldCB2bm9kZTogVm5vZGUgPSBuZXcgVm5vZGUoZG9tLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIHByb3BzLCBbXSk7XG4gIHZub2RlLmRvbSA9IGRvbTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGRvbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChkb20uY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgdm5vZGUuY2hpbGRyZW4ucHVzaChkb21Ub1Zub2RlKGRvbS5jaGlsZE5vZGVzW2ldIGFzIERvbUVsZW1lbnQpKTtcbiAgICB9IGVsc2UgaWYgKGRvbS5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICBsZXQgdGV4dFZub2RlID0gbmV3IFRleHRWbm9kZShkb20uY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWUgfHwgXCJcIik7XG4gICAgICB0ZXh0Vm5vZGUuZG9tID0gZG9tLmNoaWxkTm9kZXNbaV0gYXMgdW5rbm93biBhcyBUZXh0O1xuICAgICAgdm5vZGUuY2hpbGRyZW4ucHVzaCh0ZXh0Vm5vZGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdm5vZGU7XG59XG5cbmNvbnN0IHRydXN0ID0gKGh0bWxTdHJpbmc6IHN0cmluZykgPT4ge1xuICBsZXQgZGl2ID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZGl2LmlubmVySFRNTCA9IGh0bWxTdHJpbmcudHJpbSgpO1xuXG4gIHJldHVybiBbXS5tYXAuY2FsbChkaXYuY2hpbGROb2RlcywgKGl0ZW0pID0+IGRvbVRvVm5vZGUoaXRlbSkpIGFzIFZub2RlW107XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxpbmVzLXBlci1mdW5jdGlvblxuZnVuY3Rpb24gdmFseXJpYW4oKTogVmFseXJpYW4ge1xuICBjb25zdCB2OiBWYWx5cmlhbiA9ICh0YWdPckNvbXBvbmVudCwgcHJvcHMsIC4uLmNoaWxkcmVuKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB0YWdPckNvbXBvbmVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIG5ldyBWbm9kZSh0YWdPckNvbXBvbmVudCwgcHJvcHMgfHwge30sIGNoaWxkcmVuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBWbm9kZUNvbXBvbmVudCh0YWdPckNvbXBvbmVudCwgcHJvcHMgfHwge30sIGNoaWxkcmVuKTtcbiAgICB9XG4gIH07XG5cbiAgdi5pc01vdW50ZWQgPSBmYWxzZTtcbiAgdi5pc05vZGUgPSBpc05vZGU7XG4gIGNvbnN0IHJlc2VydmVkV29yZHMgPSBbXCJrZXlcIiwgXCJkYXRhXCIsIFwidi1vbmNlXCIsIFwib25jcmVhdGVcIiwgXCJvbnVwZGF0ZVwiLCBcIm9ucmVtb3ZlXCIsIFwib25iZWZvcmV1cGRhdGVcIl07XG4gIHYucmVzZXJ2ZWRXb3JkcyA9IHJlc2VydmVkV29yZHM7XG4gIHYudHJ1c3QgPSB0cnVzdDtcblxuICBjb25zdCBjdXJyZW50OiBDdXJyZW50ID0ge1xuICAgIHBhcmVudFZub2RlOiB1bmRlZmluZWQsXG4gICAgb2xkUGFyZW50Vm5vZGU6IHVuZGVmaW5lZCxcbiAgICBjb21wb25lbnQ6IHVuZGVmaW5lZFxuICB9O1xuICB2LmN1cnJlbnQgPSBjdXJyZW50O1xuXG4gIGNvbnN0IHBsdWdpbnMgPSBuZXcgTWFwKCk7XG5cbiAgdi51c2VQbHVnaW4gPSAocGx1Z2luOiBQbHVnaW4sIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkgPT4gIXBsdWdpbnMuaGFzKHBsdWdpbikgJiYgcGx1Z2lucy5zZXQocGx1Z2luLCB0cnVlKSAmJiBwbHVnaW4odiBhcyBWYWx5cmlhbiwgb3B0aW9ucyk7XG5cbiAgbGV0IHZub2Rlc1RvQ2xlYW51cDogVm5vZGVbXSA9IFtdO1xuXG4gIHYub25DbGVhbnVwID0gKGNhbGxiYWNrOiBGdW5jdGlvbkNvbnN0cnVjdG9yKSA9PiB7XG4gICAgbGV0IHBhcmVudFZub2RlID0gdi5jdXJyZW50LnBhcmVudFZub2RlIGFzIFZub2RlO1xuICAgIGlmICghcGFyZW50Vm5vZGUub25DbGVhbnVwKSB7XG4gICAgICBwYXJlbnRWbm9kZS5vbkNsZWFudXAgPSBbXSBhcyBGdW5jdGlvbkNvbnN0cnVjdG9yW107XG4gICAgfVxuXG4gICAgcGFyZW50Vm5vZGUub25DbGVhbnVwLnB1c2goY2FsbGJhY2spO1xuXG4gICAgaWYgKHZub2Rlc1RvQ2xlYW51cC5pbmRleE9mKHBhcmVudFZub2RlKSA9PT0gLTEpIHtcbiAgICAgIHZub2Rlc1RvQ2xlYW51cC5wdXNoKHBhcmVudFZub2RlKTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IGNsZWFudXBWbm9kZXMgPSAoKSA9PiB7XG4gICAgZm9yIChsZXQgbCA9IHZub2Rlc1RvQ2xlYW51cC5sZW5ndGg7IGwtLTsgKSB7XG4gICAgICBmb3IgKGxldCBjYWxsYmFjayBvZiB2bm9kZXNUb0NsZWFudXBbbF0ub25DbGVhbnVwIGFzIEZ1bmN0aW9uQ29uc3RydWN0b3JbXSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH1cbiAgICB2bm9kZXNUb0NsZWFudXAgPSBbXTtcbiAgfTtcblxuICBsZXQgbWFpbkNvbnRhaW5lcjogRG9tRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBsZXQgZW1wdHlDb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50ID0gKCkgPT4gXCJcIjtcbiAgbGV0IG1vdW50ZWRDb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50ID0gZW1wdHlDb21wb25lbnQ7XG5cbiAgY29uc3QgYXR0YWNoZWRMaXN0ZW5lcnM6IHN0cmluZ1tdID0gW107XG4gIGZ1bmN0aW9uIGV2ZW50TGlzdGVuZXIoZTogRXZlbnQpIHtcbiAgICBsZXQgZG9tID0gZS50YXJnZXQgYXMgRG9tRWxlbWVudDtcbiAgICBsZXQgbmFtZSA9IGB2LW9uJHtlLnR5cGV9YDtcbiAgICB3aGlsZSAoZG9tKSB7XG4gICAgICBpZiAoZG9tW25hbWVdKSB7XG4gICAgICAgIChkb21bbmFtZV0gYXMgVmFseXJpYW5FdmVudEhhbmRsZXIpKGUsIGRvbSk7XG4gICAgICAgIGlmICghZS5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgdi51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkb20gPSBkb20ucGFyZW50Tm9kZSBhcyBEb21FbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KHByb3A6IHN0cmluZywgbmV3Vm5vZGU6IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkVm5vZGU/OiBWbm9kZSk6IHZvaWQgfCBib29sZWFuIHtcbiAgICBpZiAocmVzZXJ2ZWRXb3Jkcy5pbmRleE9mKHByb3ApICE9PSAtMSkge1xuICAgICAgaWYgKHByb3AgaW4gZGlyZWN0aXZlcykge1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlc1twcm9wXShuZXdWbm9kZS5wcm9wc1twcm9wXSwgbmV3Vm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXdWbm9kZS5wcm9wc1twcm9wXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAobmV3Vm5vZGUuZG9tW2B2LSR7cHJvcH1gXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhdHRhY2hlZExpc3RlbmVycy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgICAgICAgIChtYWluQ29udGFpbmVyIGFzIERvbUVsZW1lbnQpLmFkZEV2ZW50TGlzdGVuZXIocHJvcC5zbGljZSgyKSwgZXZlbnRMaXN0ZW5lcik7XG4gICAgICAgICAgYXR0YWNoZWRMaXN0ZW5lcnMucHVzaChwcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1Zub2RlLmRvbVtgdi0ke3Byb3B9YF0gPSBuZXdWbm9kZS5wcm9wc1twcm9wXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gbmV3Vm5vZGUuZG9tICYmICFuZXdWbm9kZS5pc1NWRykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgaWYgKG5ld1Zub2RlLmRvbVtwcm9wXSAhPSBuZXdWbm9kZS5wcm9wc1twcm9wXSkge1xuICAgICAgICBuZXdWbm9kZS5kb21bcHJvcF0gPSBuZXdWbm9kZS5wcm9wc1twcm9wXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9sZFZub2RlID09PSB1bmRlZmluZWQgfHwgbmV3Vm5vZGUucHJvcHNbcHJvcF0gIT09IG9sZFZub2RlLnByb3BzW3Byb3BdKSB7XG4gICAgICBpZiAobmV3Vm5vZGUucHJvcHNbcHJvcF0gPT09IGZhbHNlKSB7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5yZW1vdmVBdHRyaWJ1dGUocHJvcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdWbm9kZS5kb20uc2V0QXR0cmlidXRlKHByb3AsIG5ld1Zub2RlLnByb3BzW3Byb3BdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdi51cGRhdGVQcm9wZXJ0eSA9IHVwZGF0ZVByb3BlcnR5O1xuXG4gIC8vIFVwZGF0ZSBhIFZub2RlLmRvbSBIVE1MRWxlbWVudCB3aXRoIG5ldyBWbm9kZSBwcm9wcyB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSBvbGQgVm5vZGUgcHJvcHNcbiAgZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhuZXdWbm9kZTogVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRWbm9kZT86IFZub2RlKTogdm9pZCB7XG4gICAgZm9yIChsZXQgcHJvcCBpbiBuZXdWbm9kZS5wcm9wcykge1xuICAgICAgaWYgKHVwZGF0ZVByb3BlcnR5KHByb3AsIG5ld1Zub2RlLCBvbGRWbm9kZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0aWVzKG5ld1Zub2RlOiBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0sIG9sZFZub2RlOiBWbm9kZSkge1xuICAgIGZvciAobGV0IG5hbWUgaW4gb2xkVm5vZGUucHJvcHMpIHtcbiAgICAgIGlmIChyZXNlcnZlZFdvcmRzLmluZGV4T2YobmFtZSkgPT09IC0xICYmIG5hbWUgaW4gbmV3Vm5vZGUucHJvcHMgPT09IGZhbHNlICYmIHR5cGVvZiBvbGRWbm9kZS5wcm9wc1tuYW1lXSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG5ld1Zub2RlLmRvbSkge1xuICAgICAgICAgIG5ld1Zub2RlLmRvbVtuYW1lXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3Vm5vZGUuZG9tLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNhbGxSZW1vdmUgPSAodm5vZGU6IFZub2RlKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZub2RlLmNoaWxkcmVuW2ldIGluc3RhbmNlb2YgVm5vZGUgJiYgY2FsbFJlbW92ZSh2bm9kZS5jaGlsZHJlbltpXSk7XG4gICAgfVxuXG4gICAgdm5vZGUucHJvcHMub25yZW1vdmUgJiYgdm5vZGUucHJvcHMub25yZW1vdmUodm5vZGUpO1xuICB9O1xuICAvLyBQYXRjaCBhIERPTSBub2RlIHdpdGggYSBuZXcgVk5vZGUgdHJlZVxuICBmdW5jdGlvbiBwYXRjaChuZXdQYXJlbnRWbm9kZTogVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRQYXJlbnRWbm9kZT86IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSk6IHZvaWQge1xuICAgIGxldCBvbGRUcmVlID0gb2xkUGFyZW50Vm5vZGU/LmNoaWxkcmVuIHx8IFtdO1xuICAgIGxldCBuZXdUcmVlID0gbmV3UGFyZW50Vm5vZGUuY2hpbGRyZW47XG4gICAgbGV0IG9sZFRyZWVMZW5ndGggPSBvbGRUcmVlLmxlbmd0aDtcblxuICAgIGN1cnJlbnQucGFyZW50Vm5vZGUgPSBuZXdQYXJlbnRWbm9kZTtcbiAgICBjdXJyZW50Lm9sZFBhcmVudFZub2RlID0gb2xkUGFyZW50Vm5vZGU7XG5cbiAgICAvLyBGbGF0IG5ld1RyZWVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjaGlsZFZub2RlID0gbmV3VHJlZVtpXTtcblxuICAgICAgaWYgKGNoaWxkVm5vZGUgaW5zdGFuY2VvZiBWbm9kZSkge1xuICAgICAgICBjaGlsZFZub2RlLmlzU1ZHID0gbmV3UGFyZW50Vm5vZGUuaXNTVkcgfHwgY2hpbGRWbm9kZS5uYW1lID09PSBcInN2Z1wiO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZFZub2RlID09PSBudWxsIHx8IGNoaWxkVm5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEpO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoaWxkVm5vZGUpKSB7XG4gICAgICAgIG5ld1RyZWUuc3BsaWNlKGktLSwgMSwgLi4uY2hpbGRWbm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkVm5vZGUgaW5zdGFuY2VvZiBWbm9kZUNvbXBvbmVudCkge1xuICAgICAgICB2LmN1cnJlbnQuY29tcG9uZW50ID0gY2hpbGRWbm9kZTtcbiAgICAgICAgbmV3VHJlZS5zcGxpY2UoXG4gICAgICAgICAgaS0tLFxuICAgICAgICAgIDEsXG4gICAgICAgICAgLi4uW1xuICAgICAgICAgICAgXCJ2aWV3XCIgaW4gY2hpbGRWbm9kZS5jb21wb25lbnRcbiAgICAgICAgICAgICAgPyBjaGlsZFZub2RlLmNvbXBvbmVudC52aWV3LmNhbGwoY2hpbGRWbm9kZS5jb21wb25lbnQsIGNoaWxkVm5vZGUucHJvcHMsIGNoaWxkVm5vZGUuY2hpbGRyZW4pXG4gICAgICAgICAgICAgIDogKGNoaWxkVm5vZGUuY29tcG9uZW50IGFzIENvbXBvbmVudCkuY2FsbChjaGlsZFZub2RlLmNvbXBvbmVudCwgY2hpbGRWbm9kZS5wcm9wcywgY2hpbGRWbm9kZS5jaGlsZHJlbilcbiAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaSA+IDAgJiYgbmV3VHJlZVtpIC0gMV0ubm9kZVZhbHVlKSB7XG4gICAgICAgICAgbmV3VHJlZVtpIC0gMV0ubm9kZVZhbHVlICs9IGNoaWxkVm5vZGU7XG4gICAgICAgICAgbmV3VHJlZS5zcGxpY2UoaS0tLCAxKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVGV4dFZub2RlID09PSBmYWxzZSkge1xuICAgICAgICAgIG5ld1RyZWVbaV0gPSBuZXcgVGV4dFZub2RlKFN0cmluZyhjaGlsZFZub2RlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV3VHJlZUxlbmd0aCA9IG5ld1RyZWUubGVuZ3RoO1xuXG4gICAgLy8gaWYgbmV3VHJlZSBpcyBlbXB0eSwgcmVtb3ZlIGl0XG4gICAgaWYgKG5ld1RyZWVMZW5ndGggPT09IDApIHtcbiAgICAgIGlmIChvbGRUcmVlTGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGxldCBpID0gb2xkVHJlZUxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICBvbGRUcmVlW2ldIGluc3RhbmNlb2YgVm5vZGUgJiYgY2FsbFJlbW92ZShvbGRUcmVlW2ldKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGYXN0IG5vZGUgcmVtb3ZlIGJ5IHNldHRpbmcgdGV4dENvbnRlbnRcbiAgICAgICAgbmV3UGFyZW50Vm5vZGUuZG9tLnRleHRDb250ZW50ID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSB0cmVlIGlzIGtleWVkIGxpc3QgYW5kIGlzIG5vdCBmaXJzdCByZW5kZXJcbiAgICB9IGVsc2UgaWYgKG9sZFRyZWVMZW5ndGggJiYgbmV3VHJlZVswXSBpbnN0YW5jZW9mIFZub2RlICYmIFwia2V5XCIgaW4gbmV3VHJlZVswXS5wcm9wcykge1xuICAgICAgLy8gMS4gTXV0YXRlIHRoZSBvbGQga2V5IGxpc3QgdG8gbWF0Y2ggdGhlIG5ldyBrZXkgbGlzdFxuICAgICAgbGV0IG9sZEtleWVkTGlzdDtcblxuICAgICAgLy8gaWYgdGhlIG9sZFRyZWUgZG9lcyBub3QgaGF2ZSBhIGtleWVkIGxpc3QgZmFzdCByZW1vdmUgYWxsIG5vZGVzXG4gICAgICBpZiAob2xkVHJlZVswXSBpbnN0YW5jZW9mIFZub2RlID09PSBmYWxzZSB8fCBcImtleVwiIGluIG9sZFRyZWVbMF0ucHJvcHMgPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBvbGRUcmVlTGVuZ3RoOyBpLS07ICkge1xuICAgICAgICAgIG9sZFRyZWVbaV0gaW5zdGFuY2VvZiBWbm9kZSAmJiBjYWxsUmVtb3ZlKG9sZFRyZWVbaV0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZhc3Qgbm9kZSByZW1vdmUgYnkgc2V0dGluZyB0ZXh0Q29udGVudFxuICAgICAgICBuZXdQYXJlbnRWbm9kZS5kb20udGV4dENvbnRlbnQgPSBcIlwiO1xuICAgICAgICBvbGRLZXllZExpc3QgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9sZEtleWVkTGlzdCA9IG9sZFRyZWUubWFwKCh2bm9kZSkgPT4gdm5vZGUucHJvcHMua2V5KTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gT2J0YWluIHRoZSBtYXggbGVuZ3RoIG9mIGJvdGggbGlzdHNcbiAgICAgIGxldCBuZXdLZXllZExpc3QgPSBuZXdUcmVlLm1hcCgodm5vZGUpID0+IHZub2RlLnByb3BzLmtleSk7XG4gICAgICBjb25zdCBtYXhMaXN0TGVuZ3RoID0gTWF0aC5tYXgobmV3VHJlZUxlbmd0aCwgb2xkS2V5ZWRMaXN0Lmxlbmd0aCk7XG5cbiAgICAgIC8vIDMuIEN5Y2xlIG92ZXIgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdCB1bnRpbCB0aGUgbWF4IGxlbmd0aFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPCBuZXdUcmVlTGVuZ3RoKSB7XG4gICAgICAgICAgbGV0IGNoaWxkVm5vZGUgPSBuZXdUcmVlW2ldO1xuICAgICAgICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkS2V5ZWRMaXN0W2ldID09PSBuZXdLZXllZExpc3RbaV0gPyBvbGRUcmVlW2ldIDogb2xkVHJlZVtvbGRLZXllZExpc3QuaW5kZXhPZihjaGlsZFZub2RlLnByb3BzLmtleSldO1xuICAgICAgICAgIGxldCBzaG91bGRQYXRjaCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAob2xkQ2hpbGRWbm9kZSkge1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBvbGRDaGlsZFZub2RlLmRvbTtcbiAgICAgICAgICAgIG9sZENoaWxkVm5vZGUucHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChcInYtb25jZVwiIGluIGNoaWxkVm5vZGUucHJvcHMgfHwgKGNoaWxkVm5vZGUucHJvcHMub25iZWZvcmV1cGRhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmJlZm9yZXVwZGF0ZShjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICAgIC8vIHNraXAgdGhpcyBwYXRjaFxuICAgICAgICAgICAgICBjaGlsZFZub2RlLmNoaWxkcmVuID0gb2xkQ2hpbGRWbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgc2hvdWxkUGF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlbW92ZVByb3BlcnRpZXMoY2hpbGRWbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0sIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgaWYgKHYuaXNNb3VudGVkKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLm9udXBkYXRlKGNoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShjaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZFZub2RlLmRvbSA9IGNyZWF0ZUVsZW1lbnQoY2hpbGRWbm9kZS5uYW1lLCBjaGlsZFZub2RlLmlzU1ZHKTtcbiAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoY2hpbGRWbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0pO1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlKGNoaWxkVm5vZGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuZXdQYXJlbnRWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuZXdQYXJlbnRWbm9kZS5kb20uYXBwZW5kQ2hpbGQoY2hpbGRWbm9kZS5kb20pO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV3UGFyZW50Vm5vZGUuZG9tLmNoaWxkTm9kZXNbaV0gIT09IGNoaWxkVm5vZGUuZG9tKSB7XG4gICAgICAgICAgICBvbGRUcmVlW2ldIGluc3RhbmNlb2YgVm5vZGUgJiYgIW9sZFRyZWVbaV0ucHJvY2Vzc2VkICYmIG5ld0tleWVkTGlzdC5pbmRleE9mKG9sZFRyZWVbaV0ucHJvcHMua2V5KSA9PT0gLTEgJiYgY2FsbFJlbW92ZShvbGRUcmVlW2ldKTtcbiAgICAgICAgICAgIG5ld1BhcmVudFZub2RlLmRvbS5yZXBsYWNlQ2hpbGQoY2hpbGRWbm9kZS5kb20sIG5ld1BhcmVudFZub2RlLmRvbS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzaG91bGRQYXRjaCAmJiBwYXRjaChjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFvbGRUcmVlW2ldLnByb2Nlc3NlZCkge1xuICAgICAgICAgICAgb2xkVHJlZVtpXSBpbnN0YW5jZW9mIFZub2RlICYmIGNhbGxSZW1vdmUob2xkVHJlZVtpXSk7XG4gICAgICAgICAgICBvbGRUcmVlW2ldLmRvbS5wYXJlbnROb2RlICYmIG5ld1BhcmVudFZub2RlLmRvbS5yZW1vdmVDaGlsZChvbGRUcmVlW2ldLmRvbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBjaGlsZFZub2RlID0gbmV3VHJlZVtpXTtcbiAgICAgICAgbGV0IG9sZENoaWxkVm5vZGUgPSBvbGRUcmVlW2ldO1xuXG4gICAgICAgIC8vIGlmIG9sZENoaWxkVm5vZGUgaXMgdW5kZWZpbmVkLCBpdCdzIGEgbmV3IG5vZGUsIGFwcGVuZCBpdFxuICAgICAgICBpZiAob2xkQ2hpbGRWbm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGNoaWxkVm5vZGUgaW5zdGFuY2VvZiBWbm9kZSkge1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBjcmVhdGVFbGVtZW50KGNoaWxkVm5vZGUubmFtZSwgY2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KTtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShjaGlsZFZub2RlKTtcbiAgICAgICAgICAgIHBhdGNoKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZFZub2RlLm5vZGVWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld1BhcmVudFZub2RlLmRvbS5hcHBlbmRDaGlsZChjaGlsZFZub2RlLmRvbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaWYgY2hpbGRWbm9kZSBpcyBWbm9kZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBET00gbm9kZVxuICAgICAgICAgIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgICAgICAgIGlmIChjaGlsZFZub2RlLm5hbWUgPT09IG9sZENoaWxkVm5vZGUubmFtZSkge1xuICAgICAgICAgICAgICBjaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuXG4gICAgICAgICAgICAgIGlmIChcInYtb25jZVwiIGluIGNoaWxkVm5vZGUucHJvcHMgfHwgKGNoaWxkVm5vZGUucHJvcHMub25iZWZvcmV1cGRhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmJlZm9yZXVwZGF0ZShjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgLy8gc2tpcCB0aGlzIHBhdGNoXG4gICAgICAgICAgICAgICAgY2hpbGRWbm9kZS5jaGlsZHJlbiA9IG9sZENoaWxkVm5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZW1vdmVQcm9wZXJ0aWVzKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgdXBkYXRlUHJvcGVydGllcyhjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIGlmICh2LmlzTW91bnRlZCkge1xuICAgICAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub251cGRhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZShjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUoY2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGF0Y2goY2hpbGRWbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0sIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBjcmVhdGVFbGVtZW50KGNoaWxkVm5vZGUubmFtZSwgY2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoY2hpbGRWbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0pO1xuICAgICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUoY2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIG9sZENoaWxkVm5vZGUgaW5zdGFuY2VvZiBWbm9kZSAmJiBjYWxsUmVtb3ZlKG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgICAgICBuZXdQYXJlbnRWbm9kZS5kb20ucmVwbGFjZUNoaWxkKGNoaWxkVm5vZGUuZG9tLCBvbGRDaGlsZFZub2RlLmRvbSk7XG4gICAgICAgICAgICAgIHBhdGNoKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG9sZENoaWxkVm5vZGUgaW5zdGFuY2VvZiBWbm9kZSkge1xuICAgICAgICAgICAgICBjaGlsZFZub2RlLmRvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNoaWxkVm5vZGUubm9kZVZhbHVlKTtcbiAgICAgICAgICAgICAgY2FsbFJlbW92ZShvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgbmV3UGFyZW50Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChjaGlsZFZub2RlLmRvbSwgb2xkQ2hpbGRWbm9kZS5kb20gYXMgRG9tRWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgICAgICAgIGlmIChjaGlsZFZub2RlLm5vZGVWYWx1ZSAhPSBjaGlsZFZub2RlLmRvbS5ub2RlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjaGlsZFZub2RlLmRvbS5ub2RlVmFsdWUgPSBjaGlsZFZub2RlLm5vZGVWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBGb3IgcmVtYWluaW5nIG9sZCBjaGlsZHJlbjogcmVtb3ZlIGZyb20gRE9NLCBnYXJiYWdlIGNvbGxlY3RcbiAgICAgIGZvciAobGV0IGkgPSBvbGRUcmVlTGVuZ3RoIC0gMTsgaSA+PSBuZXdUcmVlTGVuZ3RoOyAtLWkpIHtcbiAgICAgICAgb2xkVHJlZVtpXSBpbnN0YW5jZW9mIFZub2RlICYmIGNhbGxSZW1vdmUob2xkVHJlZVtpXSk7XG4gICAgICAgIG9sZFRyZWVbaV0uZG9tLnBhcmVudE5vZGUgJiYgbmV3UGFyZW50Vm5vZGUuZG9tLnJlbW92ZUNoaWxkKG9sZFRyZWVbaV0uZG9tKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXdQYXJlbnRWbm9kZS5jaGlsZHJlbiA9IG5ld1RyZWU7XG4gIH1cblxuICBsZXQgbWFpblZub2RlOiBWbm9kZSB8IG51bGwgPSBudWxsO1xuICBsZXQgb2xkTWFpblZub2RlOiBWbm9kZSB8IG51bGwgPSBudWxsO1xuXG4gIHYudW5Nb3VudCA9ICgpID0+IHtcbiAgICBtb3VudGVkQ29tcG9uZW50ID0gZW1wdHlDb21wb25lbnQ7XG4gICAgbGV0IHJlc3VsdCA9IHYudXBkYXRlKCk7XG4gICAgdi5pc01vdW50ZWQgPSBmYWxzZTtcbiAgICBtYWluQ29udGFpbmVyID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHYudXBkYXRlID0gKHByb3BzLCAuLi5jaGlsZHJlbikgPT4ge1xuICAgIGlmIChtYWluVm5vZGUpIHtcbiAgICAgIGNsZWFudXBWbm9kZXMoKTtcbiAgICAgIG9sZE1haW5Wbm9kZSA9IG1haW5Wbm9kZTtcbiAgICAgIG1haW5Wbm9kZSA9IG5ldyBWbm9kZShtYWluVm5vZGUubmFtZSwgbWFpblZub2RlLnByb3BzLCBbdihtb3VudGVkQ29tcG9uZW50LCBwcm9wcywgLi4uY2hpbGRyZW4pXSk7XG4gICAgICBtYWluVm5vZGUuZG9tID0gb2xkTWFpblZub2RlLmRvbTtcbiAgICAgIG1haW5Wbm9kZS5pc1NWRyA9IG9sZE1haW5Wbm9kZS5pc1NWRztcbiAgICAgIHBhdGNoKG1haW5Wbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBOb2RlIH0sIG9sZE1haW5Wbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBOb2RlIH0pO1xuICAgICAgdi5pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgaWYgKHYuaXNOb2RlKSB7XG4gICAgICAgIHJldHVybiAobWFpblZub2RlLmRvbSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2Lm1vdW50ID0gKGNvbnRhaW5lciwgY29tcG9uZW50LCBwcm9wcywgLi4uY2hpbGRyZW4pID0+IHtcbiAgICBpZiAodi5pc01vdW50ZWQpIHtcbiAgICAgIHYudW5Nb3VudCgpO1xuICAgIH1cblxuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIG1haW5Db250YWluZXIgPSB0eXBlb2YgY29udGFpbmVyID09PSBcInN0cmluZ1wiID8gY3JlYXRlRWxlbWVudChjb250YWluZXIsIGNvbnRhaW5lciA9PT0gXCJzdmdcIikgOiBjb250YWluZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1haW5Db250YWluZXIgPSB0eXBlb2YgY29udGFpbmVyID09PSBcInN0cmluZ1wiID8gKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoY29udGFpbmVyKVswXSBhcyBEb21FbGVtZW50KSA6IGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBpZiAobWFpbkNvbnRhaW5lciAhPT0gbnVsbCkge1xuICAgICAgbWFpblZub2RlID0gZG9tVG9Wbm9kZShtYWluQ29udGFpbmVyKTtcbiAgICAgIG1haW5Wbm9kZS5pc1NWRyA9IG1haW5Wbm9kZS5uYW1lID09PSBcInN2Z1wiO1xuICAgICAgb2xkTWFpblZub2RlID0gbWFpblZub2RlO1xuICAgICAgbW91bnRlZENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gdi51cGRhdGUocHJvcHMsIC4uLmNoaWxkcmVuKTtcbiAgfTtcblxuICBsZXQgZGlyZWN0aXZlczogUmVjb3JkPHN0cmluZywgRGlyZWN0aXZlPiA9IHt9O1xuXG4gIHYuZGlyZWN0aXZlID0gKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlOiBEaXJlY3RpdmUpID0+IHtcbiAgICBsZXQgZnVsbE5hbWUgPSBgdi0ke25hbWV9YDtcbiAgICBpZiAocmVzZXJ2ZWRXb3Jkcy5pbmRleE9mKGZ1bGxOYW1lKSA9PT0gLTEpIHtcbiAgICAgIHJlc2VydmVkV29yZHMucHVzaChmdWxsTmFtZSk7XG4gICAgICBkaXJlY3RpdmVzW2Z1bGxOYW1lXSA9IGRpcmVjdGl2ZTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IGhpZGVEaXJlY3RpdmUgPSAodGVzdDogYm9vbGVhbikgPT4gKGJvb2w6IGJvb2xlYW4sIHZub2RlOiBWbm9kZSwgb2xkbm9kZT86IFZub2RlIHwgVGV4dFZub2RlKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gdGVzdCA/IGJvb2wgOiAhYm9vbDtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGxldCBuZXdkb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtcbiAgICAgIGlmIChvbGRub2RlICYmIG9sZG5vZGUuZG9tICYmIG9sZG5vZGUuZG9tLnBhcmVudE5vZGUpIHtcbiAgICAgICAgb2xkbm9kZSBpbnN0YW5jZW9mIFZub2RlICYmIGNhbGxSZW1vdmUob2xkbm9kZSk7XG4gICAgICAgIG9sZG5vZGUuZG9tLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld2RvbSwgb2xkbm9kZS5kb20pO1xuICAgICAgfVxuICAgICAgdm5vZGUubmFtZSA9IFwiI3RleHRcIjtcbiAgICAgIHZub2RlLmNoaWxkcmVuID0gW107XG4gICAgICB2bm9kZS5wcm9wcyA9IHt9O1xuICAgICAgdm5vZGUuZG9tID0gbmV3ZG9tIGFzIHVua25vd24gYXMgRG9tRWxlbWVudDtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgdi5kaXJlY3RpdmUoXCJpZlwiLCBoaWRlRGlyZWN0aXZlKGZhbHNlKSk7XG4gIHYuZGlyZWN0aXZlKFwidW5sZXNzXCIsIGhpZGVEaXJlY3RpdmUodHJ1ZSkpO1xuICB2LmRpcmVjdGl2ZShcImZvclwiLCAoc2V0OiB1bmtub3duW10sIHZub2RlOiBWbm9kZSkgPT4ge1xuICAgIHZub2RlLmNoaWxkcmVuID0gc2V0Lm1hcCh2bm9kZS5jaGlsZHJlblswXSBhcyAodmFsdWU6IHVua25vd24pID0+IEZ1bmN0aW9uKTtcbiAgfSk7XG4gIHYuZGlyZWN0aXZlKFwic2hvd1wiLCAoYm9vbDogYm9vbGVhbiwgdm5vZGU6IFZub2RlKSA9PiB7XG4gICAgKHZub2RlLmRvbSBhcyB7IHN0eWxlOiB7IGRpc3BsYXk6IHN0cmluZyB9IH0pLnN0eWxlLmRpc3BsYXkgPSBib29sID8gXCJcIiA6IFwibm9uZVwiO1xuICB9KTtcbiAgdi5kaXJlY3RpdmUoXCJjbGFzc1wiLCAoY2xhc3NlczogeyBbeDogc3RyaW5nXTogYm9vbGVhbiB9LCB2bm9kZTogVm5vZGUpID0+IHtcbiAgICBmb3IgKGxldCBuYW1lIGluIGNsYXNzZXMpIHtcbiAgICAgICh2bm9kZS5kb20gYXMgRG9tRWxlbWVudCkuY2xhc3NMaXN0LnRvZ2dsZShuYW1lLCBjbGFzc2VzW25hbWVdKTtcbiAgICB9XG4gIH0pO1xuICB2LmRpcmVjdGl2ZShcImh0bWxcIiwgKGh0bWw6IHN0cmluZywgdm5vZGU6IFZub2RlKSA9PiB7XG4gICAgdm5vZGUuY2hpbGRyZW4gPSBbdHJ1c3QoaHRtbCldO1xuICB9KTtcblxuICB2Lm5ld0luc3RhbmNlID0gdmFseXJpYW47XG5cbiAgcmV0dXJuIHY7XG59XG5cbigoaXNOb2RlID8gZ2xvYmFsIDogd2luZG93KSBhcyB1bmtub3duIGFzIHsgdjogVmFseXJpYW4gfSkudiA9IHZhbHlyaWFuKCk7XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6WyJwIiwiY29uc3RydWN0b3IiLCJhIiwidSIsImMiLCJ0aGlzIiwicHJvcHMiLCJjaGlsZHJlbiIsIm5hbWUiLCJ4Iiwibm9kZVZhbHVlIiwiTSIsImNvbXBvbmVudCIsIlMiLCJ3aW5kb3ciLCJnbG9iYWwiLCJOIiwiZCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRlRWxlbWVudCIsIkwiLCJmb3JFYWNoIiwiY2FsbCIsImF0dHJpYnV0ZXMiLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwiZG9tIiwieSIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJub2RlVHlwZSIsInB1c2giLCJrIiwiRiIsImlubmVySFRNTCIsInRyaW0iLCJtYXAiLCJ2IiwiSCIsImUiLCJvIiwidCIsImlzTW91bnRlZCIsImlzTm9kZSIsInJlc2VydmVkV29yZHMiLCJ0cnVzdCIsInBhcmVudFZub2RlIiwib2xkUGFyZW50Vm5vZGUiLCJjdXJyZW50IiwiTWFwIiwidXNlUGx1Z2luIiwiaGFzIiwic2V0Iiwib25DbGVhbnVwIiwiaW5kZXhPZiIsImciLCJVIiwiVCIsIkciLCIkIiwidGFyZ2V0IiwidHlwZSIsImRlZmF1bHRQcmV2ZW50ZWQiLCJ1cGRhdGUiLCJwYXJlbnROb2RlIiwidyIsIk8iLCJhZGRFdmVudExpc3RlbmVyIiwic2xpY2UiLCJpc1NWRyIsInJlbW92ZUF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsIkUiLCJQIiwidXBkYXRlUHJvcGVydHkiLCJWIiwib25yZW1vdmUiLCJEIiwibCIsIkMiLCJpIiwibiIsInNwbGljZSIsIkFycmF5IiwiaXNBcnJheSIsInZpZXciLCJTdHJpbmciLCJ0ZXh0Q29udGVudCIsInIiLCJrZXkiLCJtIiwiTWF0aCIsIm1heCIsInMiLCJoIiwiQSIsInByb2Nlc3NlZCIsIm9uYmVmb3JldXBkYXRlIiwib251cGRhdGUiLCJvbmNyZWF0ZSIsImFwcGVuZENoaWxkIiwicmVwbGFjZUNoaWxkIiwicmVtb3ZlQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsImYiLCJiIiwidW5Nb3VudCIsIm1vdW50IiwicXVlcnlTZWxlY3RvckFsbCIsImRpcmVjdGl2ZSIsIlIiLCJzdHlsZSIsImRpc3BsYXkiLCJjbGFzc0xpc3QiLCJ0b2dnbGUiLCJuZXdJbnN0YW5jZSJdLCJtYXBwaW5ncyI6Ik1Bb0RBLElBQUFBLEVBQUEsTUFTRUMsWUFBWUMsRUFBY0MsRUFBY0MsR0FDdENDLEtBQUtDLE1BQVFILEVBQ2JFLEtBQUtFLFNBQVdILEVBQ2hCQyxLQUFLRyxLQUFPTixJQVNoQk8sRUFBQSxNQUlFUixZQUFZQyxHQUNWRyxLQUFLSyxVQUFZUixJQVVyQlMsRUFBQSxNQUtFVixZQUFZQyxFQUE4QkMsRUFBY0MsR0FDdERDLEtBQUtDLE1BQVFILEVBQ2JFLEtBQUtFLFNBQVdILEVBQ2hCQyxLQUFLTyxVQUFZVixJQXNCakJXLEVBQTJCLG9CQUFYQyxRQUE0QyxvQkFBWEMsT0FHckQsU0FBQUMsRUFBdUJDLEVBQWlCZixHQUFpQixHQUN2RCxPQUFPQSxFQUFRZ0IsU0FBU0MsZ0JBQWdCLDZCQUE4QkYsR0FBV0MsU0FBU0UsY0FBY0gsR0FJMUcsU0FBQUksRUFBb0JKLEdBQ2xCLElBQUlmLEVBQWUsR0FDbkIsR0FBR29CLFFBQVFDLEtBQUtOLEVBQUlPLFdBQWFwQixHQUFnQkYsRUFBTUUsRUFBS3FCLFVBQVlyQixFQUFLTSxXQUU3RSxJQUFJUCxFQUFlLElBQUlILEVBQU1pQixFQUFJUSxTQUFTQyxjQUFleEIsRUFBTyxJQUNoRUMsRUFBTXdCLElBQU1WLEVBRVosSUFBQSxJQUFTYixFQUFJLEVBQUd3QixFQUFJWCxFQUFJWSxXQUFXQyxPQUFRMUIsRUFBSXdCLEVBQUd4QixJQUNoRCxHQUFtQyxJQUEvQmEsRUFBSVksV0FBV3pCLEdBQUcyQixTQUNwQjVCLEVBQU1JLFNBQVN5QixLQUFLWCxFQUFXSixFQUFJWSxXQUFXekIsVUFBQSxHQUNOLElBQS9CYSxFQUFJWSxXQUFXekIsR0FBRzJCLFNBQWdC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TyxRQUNia0MsRUFBTW5DLFNBQVcsR0FDakJtQyxFQUFNcEMsTUFBUSxHQUNkb0MsRUFBTWYsSUFBTVcsR0FDTCxJQUlYLE9BQUFyQixFQUFFNkYsVUFBVSxLQUFNQyxHQUFjLElBQ2hDOUYsRUFBRTZGLFVBQVUsU0FBVUMsR0FBYyxJQUNwQzlGLEVBQUU2RixVQUFVLE1BQU8sQ0FBQ3RFLEVBQWdCQyxLQUNsQ0EsRUFBTWxDLFNBQVdpQyxFQUFJSCxJQUFJSSxFQUFNbEMsU0FBUyxNQUUxQ1UsRUFBRTZGLFVBQVUsT0FBUSxDQUFDdEUsRUFBZUMsS0FDakNBLEVBQU1kLElBQXVDcUYsTUFBTUMsUUFBVXpFLEVBQU8sR0FBSyxTQUU1RXZCLEVBQUU2RixVQUFVLFFBQVMsQ0FBQ3RFLEVBQW1DQyxLQUN2RCxJQUFBLElBQVNDLEtBQVFGLEVBQ2RDLEVBQU1kLElBQW1CdUYsVUFBVUMsT0FBT3pFLEVBQU1GLEVBQVFFLE1BRzdEekIsRUFBRTZGLFVBQVUsT0FBUSxDQUFDdEUsRUFBY0MsS0FDakNBLEVBQU1sQyxTQUFXLENBQUMyQixFQUFNTSxNQUcxQnZCLEVBQUVtRyxZQUFjN0UsRUFFVHRCLEVBR3NEc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBzb25hcmpzL2NvZ25pdGl2ZS1jb21wbGV4aXR5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cblxudHlwZSBWbm9kZU9yVW5rbm93biA9IFZub2RlQ29tcG9uZW50IHwgVm5vZGUgfCBUZXh0Vm5vZGUgfCBhbnk7XG5cbnR5cGUgRG9tQXR0cmlidXRlID0geyBub2RlTmFtZTogc3RyaW5nOyBub2RlVmFsdWU6IHN0cmluZyB9O1xuXG50eXBlIERvbUVsZW1lbnQgPSAoSFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50KSAmIFJlY29yZDxzdHJpbmcsIGFueT47XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGtleT86IHN0cmluZyB8IG51bWJlcjtcbiAgZGF0YT86IHN0cmluZztcbiAgb25jcmVhdGU/OiB7ICh2bm9kZTogVm5vZGUpOiBuZXZlciB9O1xuICBvbnVwZGF0ZT86IHsgKHZub2RlOiBWbm9kZSwgb2xkVm5vZGU6IFZub2RlIHwgVGV4dFZub2RlKTogbmV2ZXIgfTtcbiAgb25yZW1vdmU/OiB7IChvbGRWbm9kZTogVm5vZGUpOiBuZXZlciB9O1xuICBvbmJlZm9yZXVwZGF0ZT86IHsgKHZub2RlOiBWbm9kZSwgb2xkVm5vZGU6IFZub2RlIHwgVGV4dFZub2RlKTogdW5kZWZpbmVkIHwgYm9vbGVhbiB9O1xufSAmIFJlY29yZDxzdHJpbmcsIGFueT47XG5cbnR5cGUgQ29tcG9uZW50ID0gKHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIGNoaWxkcmVuPzogVm5vZGVPclVua25vd24pID0+IFZub2RlT3JVbmtub3duIHwgVm5vZGVPclVua25vd25bXTtcblxudHlwZSBWYWx5cmlhbkNvbXBvbmVudCA9XG4gIHwgQ29tcG9uZW50XG4gIHwgKFJlY29yZDxzdHJpbmcsIGFueT4gJiB7XG4gICAgICB2aWV3OiBDb21wb25lbnQ7XG4gICAgfSk7XG5cbnR5cGUgQ3VycmVudCA9IHsgcGFyZW50Vm5vZGU/OiBWbm9kZTsgb2xkUGFyZW50Vm5vZGU/OiBWbm9kZTsgY29tcG9uZW50PzogVm5vZGVDb21wb25lbnQgfTtcblxuaW50ZXJmYWNlIFBsdWdpbiB7XG4gICh2OiBWYWx5cmlhbiwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBuZXZlcjtcbn1cblxuaW50ZXJmYWNlIERpcmVjdGl2ZSB7XG4gICh2YWx1ZTogYW55LCB2bm9kZTogVm5vZGUsIG9sZFZub2RlPzogVm5vZGUgfCBUZXh0Vm5vZGUpOiB2b2lkIHwgYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFZhbHlyaWFuRXZlbnRIYW5kbGVyIHtcbiAgKGE6IEV2ZW50LCBkb206IERvbUVsZW1lbnQpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgVm5vZGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIHByb3BzOiBQcm9wcztcbiAgY2hpbGRyZW46IFZub2RlT3JVbmtub3duW107XG4gIGRvbT86IERvbUVsZW1lbnQ7XG4gIG9uQ2xlYW51cD86IEZ1bmN0aW9uQ29uc3RydWN0b3JbXTtcbiAgaXNTVkc/OiBib29sZWFuO1xuICBwcm9jZXNzZWQ/OiBib29sZWFuO1xufVxuXG5jbGFzcyBWbm9kZSBpbXBsZW1lbnRzIFZub2RlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBwcm9wczogUHJvcHM7XG4gIGNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bltdO1xuICBkb20/OiBEb21FbGVtZW50O1xuICBvbkNsZWFudXA/OiBGdW5jdGlvbkNvbnN0cnVjdG9yW107XG4gIGlzU1ZHPzogYm9vbGVhbjtcbiAgcHJvY2Vzc2VkPzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHByb3BzOiBQcm9wcywgY2hpbGRyZW46IFZub2RlT3JVbmtub3duKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG59XG5cbmludGVyZmFjZSBUZXh0Vm5vZGUge1xuICBkb20/OiBUZXh0O1xuICBub2RlVmFsdWU6IHN0cmluZztcbn1cblxuY2xhc3MgVGV4dFZub2RlIGltcGxlbWVudHMgVGV4dFZub2RlIHtcbiAgZG9tPzogVGV4dDtcbiAgbm9kZVZhbHVlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iobm9kZVZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5vZGVWYWx1ZSA9IG5vZGVWYWx1ZTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgVm5vZGVDb21wb25lbnQge1xuICBjb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50O1xuICBwcm9wczogUHJvcHM7XG4gIGNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bltdO1xufVxuXG5jbGFzcyBWbm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIFZub2RlQ29tcG9uZW50IHtcbiAgY29tcG9uZW50OiBWYWx5cmlhbkNvbXBvbmVudDtcbiAgcHJvcHM6IFByb3BzO1xuICBjaGlsZHJlbjogVm5vZGVPclVua25vd25bXTtcblxuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50LCBwcm9wczogUHJvcHMsIGNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bltdKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgVmFseXJpYW4ge1xuICAodGFnT3JDb21wb25lbnQ6IHN0cmluZyB8IFZhbHlyaWFuQ29tcG9uZW50LCBwcm9wcz86IFByb3BzIHwgbnVsbCwgY2hpbGRyZW4/OiBWbm9kZU9yVW5rbm93bik6IFZub2RlIHwgVm5vZGVDb21wb25lbnQ7XG4gIGlzTW91bnRlZDogYm9vbGVhbjtcbiAgaXNOb2RlOiBib29sZWFuO1xuICByZXNlcnZlZFdvcmRzOiBzdHJpbmdbXTtcbiAgY3VycmVudDogQ3VycmVudDtcbiAgdHJ1c3Q6IChodG1sU3RyaW5nOiBzdHJpbmcpID0+IFZub2RlW107XG4gIHVzZVBsdWdpbjogKHBsdWdpbjogUGx1Z2luLCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBvbkNsZWFudXA6IChjYWxsYmFjazogdHlwZW9mIEZ1bmN0aW9uKSA9PiB2b2lkO1xuICB1cGRhdGVQcm9wZXJ0eTogKG5hbWU6IHN0cmluZywgbmV3Vm5vZGU6IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkTm9kZTogVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KSA9PiB2b2lkO1xuICB1cGRhdGU6IChwcm9wcz86IFByb3BzIHwgbnVsbCwgLi4uY2hpbGRyZW46IFZub2RlT3JVbmtub3duKSA9PiBzdHJpbmcgfCB2b2lkO1xuICBtb3VudDogKGNvbnRhaW5lcjogc3RyaW5nIHwgRG9tRWxlbWVudCwgY29tcG9uZW50OiBWYWx5cmlhbkNvbXBvbmVudCwgcHJvcHM/OiBQcm9wcyB8IG51bGwsIC4uLmNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bltdKSA9PiBzdHJpbmcgfCB2b2lkO1xuICB1bk1vdW50OiAoKSA9PiBzdHJpbmcgfCBib29sZWFuIHwgdm9pZDtcbiAgZGlyZWN0aXZlOiAoZGlyZWN0aXZlOiBzdHJpbmcsIGhhbmRsZXI6IERpcmVjdGl2ZSkgPT4gdm9pZDtcbiAgbmV3SW5zdGFuY2U6ICgpID0+IFZhbHlyaWFuO1xuICBbeDogc3RyaW5nXTogYW55O1xufVxuXG5sZXQgaXNOb2RlID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBDcmVhdGUgTm9kZSBlbGVtZW50XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWU6IHN0cmluZywgaXNTVkc6IGJvb2xlYW4gPSBmYWxzZSk6IERvbUVsZW1lbnQge1xuICByZXR1cm4gaXNTVkcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB0YWdOYW1lKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG59XG5cbi8vIFRyYW5zZm9ybXMgYSBET00gbm9kZSB0byBhIFZOb2RlXG5mdW5jdGlvbiBkb21Ub1Zub2RlKGRvbTogRG9tRWxlbWVudCk6IFZub2RlIHtcbiAgbGV0IHByb3BzOiBQcm9wcyA9IHt9O1xuICBbXS5mb3JFYWNoLmNhbGwoZG9tLmF0dHJpYnV0ZXMsIChwcm9wOiBBdHRyKSA9PiAocHJvcHNbcHJvcC5ub2RlTmFtZV0gPSBwcm9wLm5vZGVWYWx1ZSkpO1xuXG4gIGxldCB2bm9kZTogVm5vZGUgPSBuZXcgVm5vZGUoZG9tLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIHByb3BzLCBbXSk7XG4gIHZub2RlLmRvbSA9IGRvbTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGRvbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChkb20uY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgdm5vZGUuY2hpbGRyZW4ucHVzaChkb21Ub1Zub2RlKGRvbS5jaGlsZE5vZGVzW2ldIGFzIERvbUVsZW1lbnQpKTtcbiAgICB9IGVsc2UgaWYgKGRvbS5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICBsZXQgdGV4dFZub2RlID0gbmV3IFRleHRWbm9kZShkb20uY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWUgfHwgXCJcIik7XG4gICAgICB0ZXh0Vm5vZGUuZG9tID0gZG9tLmNoaWxkTm9kZXNbaV0gYXMgdW5rbm93biBhcyBUZXh0O1xuICAgICAgdm5vZGUuY2hpbGRyZW4ucHVzaCh0ZXh0Vm5vZGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdm5vZGU7XG59XG5cbmNvbnN0IHRydXN0ID0gKGh0bWxTdHJpbmc6IHN0cmluZykgPT4ge1xuICBsZXQgZGl2ID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZGl2LmlubmVySFRNTCA9IGh0bWxTdHJpbmcudHJpbSgpO1xuXG4gIHJldHVybiBbXS5tYXAuY2FsbChkaXYuY2hpbGROb2RlcywgKGl0ZW0pID0+IGRvbVRvVm5vZGUoaXRlbSkpIGFzIFZub2RlW107XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxpbmVzLXBlci1mdW5jdGlvblxuZnVuY3Rpb24gdmFseXJpYW4oKTogVmFseXJpYW4ge1xuICBjb25zdCB2OiBWYWx5cmlhbiA9ICh0YWdPckNvbXBvbmVudCwgcHJvcHMsIC4uLmNoaWxkcmVuKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB0YWdPckNvbXBvbmVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIG5ldyBWbm9kZSh0YWdPckNvbXBvbmVudCwgcHJvcHMgfHwge30sIGNoaWxkcmVuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBWbm9kZUNvbXBvbmVudCh0YWdPckNvbXBvbmVudCwgcHJvcHMgfHwge30sIGNoaWxkcmVuKTtcbiAgICB9XG4gIH07XG5cbiAgdi5pc01vdW50ZWQgPSBmYWxzZTtcbiAgdi5pc05vZGUgPSBpc05vZGU7XG4gIGNvbnN0IHJlc2VydmVkV29yZHMgPSBbXCJrZXlcIiwgXCJkYXRhXCIsIFwidi1vbmNlXCIsIFwib25jcmVhdGVcIiwgXCJvbnVwZGF0ZVwiLCBcIm9ucmVtb3ZlXCIsIFwib25iZWZvcmV1cGRhdGVcIl07XG4gIHYucmVzZXJ2ZWRXb3JkcyA9IHJlc2VydmVkV29yZHM7XG4gIHYudHJ1c3QgPSB0cnVzdDtcblxuICBjb25zdCBjdXJyZW50OiBDdXJyZW50ID0ge1xuICAgIHBhcmVudFZub2RlOiB1bmRlZmluZWQsXG4gICAgb2xkUGFyZW50Vm5vZGU6IHVuZGVmaW5lZCxcbiAgICBjb21wb25lbnQ6IHVuZGVmaW5lZFxuICB9O1xuICB2LmN1cnJlbnQgPSBjdXJyZW50O1xuXG4gIGNvbnN0IHBsdWdpbnMgPSBuZXcgTWFwKCk7XG5cbiAgdi51c2VQbHVnaW4gPSAocGx1Z2luOiBQbHVnaW4sIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkgPT4gIXBsdWdpbnMuaGFzKHBsdWdpbikgJiYgcGx1Z2lucy5zZXQocGx1Z2luLCB0cnVlKSAmJiBwbHVnaW4odiBhcyBWYWx5cmlhbiwgb3B0aW9ucyk7XG5cbiAgbGV0IHZub2Rlc1RvQ2xlYW51cDogVm5vZGVbXSA9IFtdO1xuXG4gIHYub25DbGVhbnVwID0gKGNhbGxiYWNrOiBGdW5jdGlvbkNvbnN0cnVjdG9yKSA9PiB7XG4gICAgbGV0IHBhcmVudFZub2RlID0gdi5jdXJyZW50LnBhcmVudFZub2RlIGFzIFZub2RlO1xuICAgIGlmICghcGFyZW50Vm5vZGUub25DbGVhbnVwKSB7XG4gICAgICBwYXJlbnRWbm9kZS5vbkNsZWFudXAgPSBbXSBhcyBGdW5jdGlvbkNvbnN0cnVjdG9yW107XG4gICAgfVxuXG4gICAgcGFyZW50Vm5vZGUub25DbGVhbnVwLnB1c2goY2FsbGJhY2spO1xuXG4gICAgaWYgKHZub2Rlc1RvQ2xlYW51cC5pbmRleE9mKHBhcmVudFZub2RlKSA9PT0gLTEpIHtcbiAgICAgIHZub2Rlc1RvQ2xlYW51cC5wdXNoKHBhcmVudFZub2RlKTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IGNsZWFudXBWbm9kZXMgPSAoKSA9PiB7XG4gICAgZm9yIChsZXQgbCA9IHZub2Rlc1RvQ2xlYW51cC5sZW5ndGg7IGwtLTsgKSB7XG4gICAgICBmb3IgKGxldCBjYWxsYmFjayBvZiB2bm9kZXNUb0NsZWFudXBbbF0ub25DbGVhbnVwIGFzIEZ1bmN0aW9uQ29uc3RydWN0b3JbXSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH1cbiAgICB2bm9kZXNUb0NsZWFudXAgPSBbXTtcbiAgfTtcblxuICBsZXQgbWFpbkNvbnRhaW5lcjogRG9tRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBsZXQgZW1wdHlDb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50ID0gKCkgPT4gXCJcIjtcbiAgbGV0IG1vdW50ZWRDb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50ID0gZW1wdHlDb21wb25lbnQ7XG5cbiAgY29uc3QgYXR0YWNoZWRMaXN0ZW5lcnM6IHN0cmluZ1tdID0gW107XG4gIGZ1bmN0aW9uIGV2ZW50TGlzdGVuZXIoZTogRXZlbnQpIHtcbiAgICBsZXQgZG9tID0gZS50YXJnZXQgYXMgRG9tRWxlbWVudDtcbiAgICBsZXQgbmFtZSA9IGB2LW9uJHtlLnR5cGV9YDtcbiAgICB3aGlsZSAoZG9tKSB7XG4gICAgICBpZiAoZG9tW25hbWVdKSB7XG4gICAgICAgIChkb21bbmFtZV0gYXMgVmFseXJpYW5FdmVudEhhbmRsZXIpKGUsIGRvbSk7XG4gICAgICAgIGlmICghZS5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgdi51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkb20gPSBkb20ucGFyZW50Tm9kZSBhcyBEb21FbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KHByb3A6IHN0cmluZywgbmV3Vm5vZGU6IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkVm5vZGU/OiBWbm9kZSk6IHZvaWQgfCBib29sZWFuIHtcbiAgICBpZiAocmVzZXJ2ZWRXb3Jkcy5pbmRleE9mKHByb3ApICE9PSAtMSkge1xuICAgICAgaWYgKHByb3AgaW4gZGlyZWN0aXZlcykge1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlc1twcm9wXShuZXdWbm9kZS5wcm9wc1twcm9wXSwgbmV3Vm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXdWbm9kZS5wcm9wc1twcm9wXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAobmV3Vm5vZGUuZG9tW2B2LSR7cHJvcH1gXSA9PT0gdW5kZWZpbmVkICYmIGF0dGFjaGVkTGlzdGVuZXJzLmluZGV4T2YocHJvcCkgPT09IC0xKSB7XG4gICAgICAgIChtYWluQ29udGFpbmVyIGFzIERvbUVsZW1lbnQpLmFkZEV2ZW50TGlzdGVuZXIocHJvcC5zbGljZSgyKSwgZXZlbnRMaXN0ZW5lcik7XG4gICAgICAgIGF0dGFjaGVkTGlzdGVuZXJzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgICBuZXdWbm9kZS5kb21bYHYtJHtwcm9wfWBdID0gbmV3Vm5vZGUucHJvcHNbcHJvcF07XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIG5ld1Zub2RlLmRvbSAmJiAhbmV3Vm5vZGUuaXNTVkcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgIGlmIChuZXdWbm9kZS5kb21bcHJvcF0gIT0gbmV3Vm5vZGUucHJvcHNbcHJvcF0pIHtcbiAgICAgICAgbmV3Vm5vZGUuZG9tW3Byb3BdID0gbmV3Vm5vZGUucHJvcHNbcHJvcF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbGRWbm9kZSA9PT0gdW5kZWZpbmVkIHx8IG5ld1Zub2RlLnByb3BzW3Byb3BdICE9PSBvbGRWbm9kZS5wcm9wc1twcm9wXSkge1xuICAgICAgaWYgKG5ld1Zub2RlLnByb3BzW3Byb3BdID09PSBmYWxzZSkge1xuICAgICAgICBuZXdWbm9kZS5kb20ucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLnNldEF0dHJpYnV0ZShwcm9wLCBuZXdWbm9kZS5wcm9wc1twcm9wXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHYudXBkYXRlUHJvcGVydHkgPSB1cGRhdGVQcm9wZXJ0eTtcblxuICAvLyBVcGRhdGUgYSBWbm9kZS5kb20gSFRNTEVsZW1lbnQgd2l0aCBuZXcgVm5vZGUgcHJvcHMgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gb2xkIFZub2RlIHByb3BzXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMobmV3Vm5vZGU6IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkVm5vZGU/OiBWbm9kZSk6IHZvaWQge1xuICAgIGZvciAobGV0IHByb3AgaW4gbmV3Vm5vZGUucHJvcHMpIHtcbiAgICAgIGlmICh1cGRhdGVQcm9wZXJ0eShwcm9wLCBuZXdWbm9kZSwgb2xkVm5vZGUpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlUHJvcGVydGllcyhuZXdWbm9kZTogVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRWbm9kZTogVm5vZGUpIHtcbiAgICBmb3IgKGxldCBuYW1lIGluIG9sZFZub2RlLnByb3BzKSB7XG4gICAgICBpZiAocmVzZXJ2ZWRXb3Jkcy5pbmRleE9mKG5hbWUpID09PSAtMSAmJiBuYW1lIGluIG5ld1Zub2RlLnByb3BzID09PSBmYWxzZSAmJiB0eXBlb2Ygb2xkVm5vZGUucHJvcHNbbmFtZV0gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAobmFtZSBpbiBuZXdWbm9kZS5kb20pIHtcbiAgICAgICAgICBuZXdWbm9kZS5kb21bbmFtZV0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1Zub2RlLmRvbS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBjYWxsUmVtb3ZlID0gKHZub2RlOiBWbm9kZSkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2bm9kZS5jaGlsZHJlbltpXSBpbnN0YW5jZW9mIFZub2RlICYmIGNhbGxSZW1vdmUodm5vZGUuY2hpbGRyZW5baV0pO1xuICAgIH1cblxuICAgIHZub2RlLnByb3BzLm9ucmVtb3ZlICYmIHZub2RlLnByb3BzLm9ucmVtb3ZlKHZub2RlKTtcbiAgfTtcbiAgLy8gUGF0Y2ggYSBET00gbm9kZSB3aXRoIGEgbmV3IFZOb2RlIHRyZWVcbiAgZnVuY3Rpb24gcGF0Y2gobmV3UGFyZW50Vm5vZGU6IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkUGFyZW50Vm5vZGU/OiBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0pOiB2b2lkIHtcbiAgICBsZXQgb2xkVHJlZSA9IG9sZFBhcmVudFZub2RlPy5jaGlsZHJlbiB8fCBbXTtcbiAgICBsZXQgbmV3VHJlZSA9IG5ld1BhcmVudFZub2RlLmNoaWxkcmVuO1xuICAgIGxldCBvbGRUcmVlTGVuZ3RoID0gb2xkVHJlZS5sZW5ndGg7XG5cbiAgICBjdXJyZW50LnBhcmVudFZub2RlID0gbmV3UGFyZW50Vm5vZGU7XG4gICAgY3VycmVudC5vbGRQYXJlbnRWbm9kZSA9IG9sZFBhcmVudFZub2RlO1xuXG4gICAgLy8gRmxhdCBuZXdUcmVlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdUcmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2hpbGRWbm9kZSA9IG5ld1RyZWVbaV07XG5cbiAgICAgIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgICAgY2hpbGRWbm9kZS5pc1NWRyA9IG5ld1BhcmVudFZub2RlLmlzU1ZHIHx8IGNoaWxkVm5vZGUubmFtZSA9PT0gXCJzdmdcIjtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRWbm9kZSA9PT0gbnVsbCB8fCBjaGlsZFZub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmV3VHJlZS5zcGxpY2UoaS0tLCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGlsZFZub2RlKSkge1xuICAgICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEsIC4uLmNoaWxkVm5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGVDb21wb25lbnQpIHtcbiAgICAgICAgdi5jdXJyZW50LmNvbXBvbmVudCA9IGNoaWxkVm5vZGU7XG4gICAgICAgIG5ld1RyZWUuc3BsaWNlKFxuICAgICAgICAgIGktLSxcbiAgICAgICAgICAxLFxuICAgICAgICAgIC4uLltcbiAgICAgICAgICAgIFwidmlld1wiIGluIGNoaWxkVm5vZGUuY29tcG9uZW50XG4gICAgICAgICAgICAgID8gY2hpbGRWbm9kZS5jb21wb25lbnQudmlldy5jYWxsKGNoaWxkVm5vZGUuY29tcG9uZW50LCBjaGlsZFZub2RlLnByb3BzLCBjaGlsZFZub2RlLmNoaWxkcmVuKVxuICAgICAgICAgICAgICA6IChjaGlsZFZub2RlLmNvbXBvbmVudCBhcyBDb21wb25lbnQpLmNhbGwoY2hpbGRWbm9kZS5jb21wb25lbnQsIGNoaWxkVm5vZGUucHJvcHMsIGNoaWxkVm5vZGUuY2hpbGRyZW4pXG4gICAgICAgICAgXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGkgPiAwICYmIG5ld1RyZWVbaSAtIDFdLm5vZGVWYWx1ZSkge1xuICAgICAgICAgIG5ld1RyZWVbaSAtIDFdLm5vZGVWYWx1ZSArPSBjaGlsZFZub2RlO1xuICAgICAgICAgIG5ld1RyZWUuc3BsaWNlKGktLSwgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hpbGRWbm9kZSBpbnN0YW5jZW9mIFRleHRWbm9kZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBuZXdUcmVlW2ldID0gbmV3IFRleHRWbm9kZShTdHJpbmcoY2hpbGRWbm9kZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5ld1RyZWVMZW5ndGggPSBuZXdUcmVlLmxlbmd0aDtcblxuICAgIC8vIGlmIG5ld1RyZWUgaXMgZW1wdHksIHJlbW92ZSBpdFxuICAgIGlmIChuZXdUcmVlTGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAob2xkVHJlZUxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IG9sZFRyZWVMZW5ndGg7IGktLTsgKSB7XG4gICAgICAgICAgb2xkVHJlZVtpXSBpbnN0YW5jZW9mIFZub2RlICYmIGNhbGxSZW1vdmUob2xkVHJlZVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmFzdCBub2RlIHJlbW92ZSBieSBzZXR0aW5nIHRleHRDb250ZW50XG4gICAgICAgIG5ld1BhcmVudFZub2RlLmRvbS50ZXh0Q29udGVudCA9IFwiXCI7XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGUgdHJlZSBpcyBrZXllZCBsaXN0IGFuZCBpcyBub3QgZmlyc3QgcmVuZGVyXG4gICAgfSBlbHNlIGlmIChvbGRUcmVlTGVuZ3RoICYmIG5ld1RyZWVbMF0gaW5zdGFuY2VvZiBWbm9kZSAmJiBcImtleVwiIGluIG5ld1RyZWVbMF0ucHJvcHMpIHtcbiAgICAgIC8vIDEuIE11dGF0ZSB0aGUgb2xkIGtleSBsaXN0IHRvIG1hdGNoIHRoZSBuZXcga2V5IGxpc3RcbiAgICAgIGxldCBvbGRLZXllZExpc3Q7XG5cbiAgICAgIC8vIGlmIHRoZSBvbGRUcmVlIGRvZXMgbm90IGhhdmUgYSBrZXllZCBsaXN0IGZhc3QgcmVtb3ZlIGFsbCBub2Rlc1xuICAgICAgaWYgKG9sZFRyZWVbMF0gaW5zdGFuY2VvZiBWbm9kZSA9PT0gZmFsc2UgfHwgXCJrZXlcIiBpbiBvbGRUcmVlWzBdLnByb3BzID09PSBmYWxzZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gb2xkVHJlZUxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICBvbGRUcmVlW2ldIGluc3RhbmNlb2YgVm5vZGUgJiYgY2FsbFJlbW92ZShvbGRUcmVlW2ldKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGYXN0IG5vZGUgcmVtb3ZlIGJ5IHNldHRpbmcgdGV4dENvbnRlbnRcbiAgICAgICAgbmV3UGFyZW50Vm5vZGUuZG9tLnRleHRDb250ZW50ID0gXCJcIjtcbiAgICAgICAgb2xkS2V5ZWRMaXN0ID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbGRLZXllZExpc3QgPSBvbGRUcmVlLm1hcCgodm5vZGUpID0+IHZub2RlLnByb3BzLmtleSk7XG4gICAgICB9XG5cbiAgICAgIC8vIDIuIE9idGFpbiB0aGUgbWF4IGxlbmd0aCBvZiBib3RoIGxpc3RzXG4gICAgICBsZXQgbmV3S2V5ZWRMaXN0ID0gbmV3VHJlZS5tYXAoKHZub2RlKSA9PiB2bm9kZS5wcm9wcy5rZXkpO1xuICAgICAgY29uc3QgbWF4TGlzdExlbmd0aCA9IE1hdGgubWF4KG5ld1RyZWVMZW5ndGgsIG9sZEtleWVkTGlzdC5sZW5ndGgpO1xuXG4gICAgICAvLyAzLiBDeWNsZSBvdmVyIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIGxpc3QgdW50aWwgdGhlIG1heCBsZW5ndGhcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpIDwgbmV3VHJlZUxlbmd0aCkge1xuICAgICAgICAgIGxldCBjaGlsZFZub2RlID0gbmV3VHJlZVtpXTtcbiAgICAgICAgICBsZXQgb2xkQ2hpbGRWbm9kZSA9IG9sZEtleWVkTGlzdFtpXSA9PT0gbmV3S2V5ZWRMaXN0W2ldID8gb2xkVHJlZVtpXSA6IG9sZFRyZWVbb2xkS2V5ZWRMaXN0LmluZGV4T2YoY2hpbGRWbm9kZS5wcm9wcy5rZXkpXTtcbiAgICAgICAgICBsZXQgc2hvdWxkUGF0Y2ggPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKG9sZENoaWxkVm5vZGUpIHtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUuZG9tID0gb2xkQ2hpbGRWbm9kZS5kb207XG4gICAgICAgICAgICBvbGRDaGlsZFZub2RlLnByb2Nlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoXCJ2LW9uY2VcIiBpbiBjaGlsZFZub2RlLnByb3BzIHx8IChjaGlsZFZub2RlLnByb3BzLm9uYmVmb3JldXBkYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25iZWZvcmV1cGRhdGUoY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSkgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAvLyBza2lwIHRoaXMgcGF0Y2hcbiAgICAgICAgICAgICAgY2hpbGRWbm9kZS5jaGlsZHJlbiA9IG9sZENoaWxkVm5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgICAgIHNob3VsZFBhdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZW1vdmVQcm9wZXJ0aWVzKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgdXBkYXRlUHJvcGVydGllcyhjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIGlmICh2LmlzTW91bnRlZCkge1xuICAgICAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub251cGRhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZShjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUoY2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBjcmVhdGVFbGVtZW50KGNoaWxkVm5vZGUubmFtZSwgY2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KTtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShjaGlsZFZub2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3UGFyZW50Vm5vZGUuZG9tLmNoaWxkTm9kZXNbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbmV3UGFyZW50Vm5vZGUuZG9tLmFwcGVuZENoaWxkKGNoaWxkVm5vZGUuZG9tKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5ld1BhcmVudFZub2RlLmRvbS5jaGlsZE5vZGVzW2ldICE9PSBjaGlsZFZub2RlLmRvbSkge1xuICAgICAgICAgICAgb2xkVHJlZVtpXSBpbnN0YW5jZW9mIFZub2RlICYmICFvbGRUcmVlW2ldLnByb2Nlc3NlZCAmJiBuZXdLZXllZExpc3QuaW5kZXhPZihvbGRUcmVlW2ldLnByb3BzLmtleSkgPT09IC0xICYmIGNhbGxSZW1vdmUob2xkVHJlZVtpXSk7XG4gICAgICAgICAgICBuZXdQYXJlbnRWbm9kZS5kb20ucmVwbGFjZUNoaWxkKGNoaWxkVm5vZGUuZG9tLCBuZXdQYXJlbnRWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2hvdWxkUGF0Y2ggJiYgcGF0Y2goY2hpbGRWbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0sIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghb2xkVHJlZVtpXS5wcm9jZXNzZWQpIHtcbiAgICAgICAgICAgIG9sZFRyZWVbaV0gaW5zdGFuY2VvZiBWbm9kZSAmJiBjYWxsUmVtb3ZlKG9sZFRyZWVbaV0pO1xuICAgICAgICAgICAgb2xkVHJlZVtpXS5kb20ucGFyZW50Tm9kZSAmJiBuZXdQYXJlbnRWbm9kZS5kb20ucmVtb3ZlQ2hpbGQob2xkVHJlZVtpXS5kb20pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWVMZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgY2hpbGRWbm9kZSA9IG5ld1RyZWVbaV07XG4gICAgICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkVHJlZVtpXTtcblxuICAgICAgICAvLyBpZiBvbGRDaGlsZFZub2RlIGlzIHVuZGVmaW5lZCwgaXQncyBhIG5ldyBub2RlLCBhcHBlbmQgaXRcbiAgICAgICAgaWYgKG9sZENoaWxkVm5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUuZG9tID0gY3JlYXRlRWxlbWVudChjaGlsZFZub2RlLm5hbWUsIGNoaWxkVm5vZGUuaXNTVkcpO1xuICAgICAgICAgICAgdXBkYXRlUHJvcGVydGllcyhjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSk7XG4gICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUoY2hpbGRWbm9kZSk7XG4gICAgICAgICAgICBwYXRjaChjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUuZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGRWbm9kZS5ub2RlVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdQYXJlbnRWbm9kZS5kb20uYXBwZW5kQ2hpbGQoY2hpbGRWbm9kZS5kb20pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGlmIGNoaWxkVm5vZGUgaXMgVm5vZGUsIHJlcGxhY2UgaXQgd2l0aCBpdHMgRE9NIG5vZGVcbiAgICAgICAgICBpZiAoY2hpbGRWbm9kZSBpbnN0YW5jZW9mIFZub2RlKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGRWbm9kZS5uYW1lID09PSBvbGRDaGlsZFZub2RlLm5hbWUpIHtcbiAgICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBvbGRDaGlsZFZub2RlLmRvbTtcblxuICAgICAgICAgICAgICBpZiAoXCJ2LW9uY2VcIiBpbiBjaGlsZFZub2RlLnByb3BzIHx8IChjaGlsZFZub2RlLnByb3BzLm9uYmVmb3JldXBkYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25iZWZvcmV1cGRhdGUoY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSkgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIC8vIHNraXAgdGhpcyBwYXRjaFxuICAgICAgICAgICAgICAgIGNoaWxkVm5vZGUuY2hpbGRyZW4gPSBvbGRDaGlsZFZub2RlLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmVtb3ZlUHJvcGVydGllcyhjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoY2hpbGRWbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0sIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgICAgICBpZiAodi5pc01vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9udXBkYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub251cGRhdGUoY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlKGNoaWxkVm5vZGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhdGNoKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoaWxkVm5vZGUuZG9tID0gY3JlYXRlRWxlbWVudChjaGlsZFZub2RlLm5hbWUsIGNoaWxkVm5vZGUuaXNTVkcpO1xuICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KTtcbiAgICAgICAgICAgICAgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlKGNoaWxkVm5vZGUpO1xuICAgICAgICAgICAgICBvbGRDaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUgJiYgY2FsbFJlbW92ZShvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgbmV3UGFyZW50Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChjaGlsZFZub2RlLmRvbSwgb2xkQ2hpbGRWbm9kZS5kb20pO1xuICAgICAgICAgICAgICBwYXRjaChjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChvbGRDaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZFZub2RlLm5vZGVWYWx1ZSk7XG4gICAgICAgICAgICAgIGNhbGxSZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIG5ld1BhcmVudFZub2RlLmRvbS5yZXBsYWNlQ2hpbGQoY2hpbGRWbm9kZS5kb20sIG9sZENoaWxkVm5vZGUuZG9tIGFzIERvbUVsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBvbGRDaGlsZFZub2RlLmRvbTtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICAgICAgICBpZiAoY2hpbGRWbm9kZS5ub2RlVmFsdWUgIT0gY2hpbGRWbm9kZS5kb20ubm9kZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20ubm9kZVZhbHVlID0gY2hpbGRWbm9kZS5ub2RlVmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRm9yIHJlbWFpbmluZyBvbGQgY2hpbGRyZW46IHJlbW92ZSBmcm9tIERPTSwgZ2FyYmFnZSBjb2xsZWN0XG4gICAgICBmb3IgKGxldCBpID0gb2xkVHJlZUxlbmd0aCAtIDE7IGkgPj0gbmV3VHJlZUxlbmd0aDsgLS1pKSB7XG4gICAgICAgIG9sZFRyZWVbaV0gaW5zdGFuY2VvZiBWbm9kZSAmJiBjYWxsUmVtb3ZlKG9sZFRyZWVbaV0pO1xuICAgICAgICBvbGRUcmVlW2ldLmRvbS5wYXJlbnROb2RlICYmIG5ld1BhcmVudFZub2RlLmRvbS5yZW1vdmVDaGlsZChvbGRUcmVlW2ldLmRvbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV3UGFyZW50Vm5vZGUuY2hpbGRyZW4gPSBuZXdUcmVlO1xuICB9XG5cbiAgbGV0IG1haW5Wbm9kZTogVm5vZGUgfCBudWxsID0gbnVsbDtcbiAgbGV0IG9sZE1haW5Wbm9kZTogVm5vZGUgfCBudWxsID0gbnVsbDtcblxuICB2LnVuTW91bnQgPSAoKSA9PiB7XG4gICAgbW91bnRlZENvbXBvbmVudCA9IGVtcHR5Q29tcG9uZW50O1xuICAgIGxldCByZXN1bHQgPSB2LnVwZGF0ZSgpO1xuICAgIHYuaXNNb3VudGVkID0gZmFsc2U7XG4gICAgbWFpbkNvbnRhaW5lciA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2LnVwZGF0ZSA9IChwcm9wcywgLi4uY2hpbGRyZW4pID0+IHtcbiAgICBpZiAobWFpblZub2RlKSB7XG4gICAgICBjbGVhbnVwVm5vZGVzKCk7XG4gICAgICBvbGRNYWluVm5vZGUgPSBtYWluVm5vZGU7XG4gICAgICBtYWluVm5vZGUgPSBuZXcgVm5vZGUobWFpblZub2RlLm5hbWUsIG1haW5Wbm9kZS5wcm9wcywgW3YobW91bnRlZENvbXBvbmVudCwgcHJvcHMsIC4uLmNoaWxkcmVuKV0pO1xuICAgICAgbWFpblZub2RlLmRvbSA9IG9sZE1haW5Wbm9kZS5kb207XG4gICAgICBtYWluVm5vZGUuaXNTVkcgPSBvbGRNYWluVm5vZGUuaXNTVkc7XG4gICAgICBwYXRjaChtYWluVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogTm9kZSB9LCBvbGRNYWluVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogTm9kZSB9KTtcbiAgICAgIHYuaXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIGlmICh2LmlzTm9kZSkge1xuICAgICAgICByZXR1cm4gKG1haW5Wbm9kZS5kb20gYXMgSFRNTEVsZW1lbnQpLmlubmVySFRNTDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdi5tb3VudCA9IChjb250YWluZXIsIGNvbXBvbmVudCwgcHJvcHMsIC4uLmNoaWxkcmVuKSA9PiB7XG4gICAgaWYgKHYuaXNNb3VudGVkKSB7XG4gICAgICB2LnVuTW91bnQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBtYWluQ29udGFpbmVyID0gdHlwZW9mIGNvbnRhaW5lciA9PT0gXCJzdHJpbmdcIiA/IGNyZWF0ZUVsZW1lbnQoY29udGFpbmVyLCBjb250YWluZXIgPT09IFwic3ZnXCIpIDogY29udGFpbmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYWluQ29udGFpbmVyID0gdHlwZW9mIGNvbnRhaW5lciA9PT0gXCJzdHJpbmdcIiA/IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGNvbnRhaW5lcilbMF0gYXMgRG9tRWxlbWVudCkgOiBjb250YWluZXI7XG4gICAgfVxuXG4gICAgaWYgKG1haW5Db250YWluZXIgIT09IG51bGwpIHtcbiAgICAgIG1haW5Wbm9kZSA9IGRvbVRvVm5vZGUobWFpbkNvbnRhaW5lcik7XG4gICAgICBtYWluVm5vZGUuaXNTVkcgPSBtYWluVm5vZGUubmFtZSA9PT0gXCJzdmdcIjtcbiAgICAgIG9sZE1haW5Wbm9kZSA9IG1haW5Wbm9kZTtcbiAgICAgIG1vdW50ZWRDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHYudXBkYXRlKHByb3BzLCAuLi5jaGlsZHJlbik7XG4gIH07XG5cbiAgbGV0IGRpcmVjdGl2ZXM6IFJlY29yZDxzdHJpbmcsIERpcmVjdGl2ZT4gPSB7fTtcblxuICB2LmRpcmVjdGl2ZSA9IChuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZTogRGlyZWN0aXZlKSA9PiB7XG4gICAgbGV0IGZ1bGxOYW1lID0gYHYtJHtuYW1lfWA7XG4gICAgaWYgKHJlc2VydmVkV29yZHMuaW5kZXhPZihmdWxsTmFtZSkgPT09IC0xKSB7XG4gICAgICByZXNlcnZlZFdvcmRzLnB1c2goZnVsbE5hbWUpO1xuICAgICAgZGlyZWN0aXZlc1tmdWxsTmFtZV0gPSBkaXJlY3RpdmU7XG4gICAgfVxuICB9O1xuXG4gIGxldCBoaWRlRGlyZWN0aXZlID0gKHRlc3Q6IGJvb2xlYW4pID0+IChib29sOiBib29sZWFuLCB2bm9kZTogVm5vZGUsIG9sZG5vZGU/OiBWbm9kZSB8IFRleHRWbm9kZSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IHRlc3QgPyBib29sIDogIWJvb2w7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBsZXQgbmV3ZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XG4gICAgICBpZiAob2xkbm9kZSAmJiBvbGRub2RlLmRvbSAmJiBvbGRub2RlLmRvbS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG9sZG5vZGUgaW5zdGFuY2VvZiBWbm9kZSAmJiBjYWxsUmVtb3ZlKG9sZG5vZGUpO1xuICAgICAgICBvbGRub2RlLmRvbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdkb20sIG9sZG5vZGUuZG9tKTtcbiAgICAgIH1cbiAgICAgIHZub2RlLm5hbWUgPSBcIiN0ZXh0XCI7XG4gICAgICB2bm9kZS5jaGlsZHJlbiA9IFtdO1xuICAgICAgdm5vZGUucHJvcHMgPSB7fTtcbiAgICAgIHZub2RlLmRvbSA9IG5ld2RvbSBhcyB1bmtub3duIGFzIERvbUVsZW1lbnQ7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIHYuZGlyZWN0aXZlKFwiaWZcIiwgaGlkZURpcmVjdGl2ZShmYWxzZSkpO1xuICB2LmRpcmVjdGl2ZShcInVubGVzc1wiLCBoaWRlRGlyZWN0aXZlKHRydWUpKTtcbiAgdi5kaXJlY3RpdmUoXCJmb3JcIiwgKHNldDogdW5rbm93bltdLCB2bm9kZTogVm5vZGUpID0+IHtcbiAgICB2bm9kZS5jaGlsZHJlbiA9IHNldC5tYXAodm5vZGUuY2hpbGRyZW5bMF0gYXMgKHZhbHVlOiB1bmtub3duKSA9PiBGdW5jdGlvbik7XG4gIH0pO1xuICB2LmRpcmVjdGl2ZShcInNob3dcIiwgKGJvb2w6IGJvb2xlYW4sIHZub2RlOiBWbm9kZSkgPT4ge1xuICAgICh2bm9kZS5kb20gYXMgeyBzdHlsZTogeyBkaXNwbGF5OiBzdHJpbmcgfSB9KS5zdHlsZS5kaXNwbGF5ID0gYm9vbCA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgfSk7XG4gIHYuZGlyZWN0aXZlKFwiY2xhc3NcIiwgKGNsYXNzZXM6IHsgW3g6IHN0cmluZ106IGJvb2xlYW4gfSwgdm5vZGU6IFZub2RlKSA9PiB7XG4gICAgZm9yIChsZXQgbmFtZSBpbiBjbGFzc2VzKSB7XG4gICAgICAodm5vZGUuZG9tIGFzIERvbUVsZW1lbnQpLmNsYXNzTGlzdC50b2dnbGUobmFtZSwgY2xhc3Nlc1tuYW1lXSk7XG4gICAgfVxuICB9KTtcbiAgdi5kaXJlY3RpdmUoXCJodG1sXCIsIChodG1sOiBzdHJpbmcsIHZub2RlOiBWbm9kZSkgPT4ge1xuICAgIHZub2RlLmNoaWxkcmVuID0gW3RydXN0KGh0bWwpXTtcbiAgfSk7XG5cbiAgdi5uZXdJbnN0YW5jZSA9IHZhbHlyaWFuO1xuXG4gIHJldHVybiB2O1xufVxuXG4oKGlzTm9kZSA/IGdsb2JhbCA6IHdpbmRvdykgYXMgdW5rbm93biBhcyB7IHY6IFZhbHlyaWFuIH0pLnYgPSB2YWx5cmlhbigpO1xuIl19 \ No newline at end of file diff --git a/package.json b/package.json index 7c152e3..7563f9f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "valyrian.js", - "version": "5.0.14", + "version": "5.0.15", "description": "Lightweight steel to forge PWAs. (Minimal Frontend Framework with server side rendering and other capabilities)", "source": "lib/index.ts", "main": "dist/valyrian.min.js",