valyrian.js 7.2.12 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/dist/flux-store/index.d.ts +32 -0
- package/dist/flux-store/index.d.ts.map +1 -0
- package/dist/flux-store/index.js +267 -0
- package/dist/flux-store/index.js.map +7 -0
- package/dist/flux-store/index.min.js +1 -0
- package/dist/flux-store/index.min.js.map +1 -0
- package/dist/flux-store/index.mjs +246 -0
- package/dist/flux-store/index.mjs.map +7 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +35 -51
- package/dist/hooks/index.js.map +3 -3
- package/dist/hooks/index.min.js +1 -0
- package/dist/hooks/index.min.js.map +1 -0
- package/dist/hooks/index.mjs +36 -52
- package/dist/hooks/index.mjs.map +3 -3
- package/dist/index.d.ts +18 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +107 -88
- package/dist/index.js.map +3 -3
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.mjs +107 -88
- package/dist/index.mjs.map +3 -3
- package/dist/native-store/index.d.ts +14 -0
- package/dist/native-store/index.d.ts.map +1 -0
- package/dist/native-store/index.js +103 -0
- package/dist/native-store/index.js.map +7 -0
- package/dist/native-store/index.min.js +1 -0
- package/dist/native-store/index.min.js.map +1 -0
- package/dist/native-store/index.mjs +82 -0
- package/dist/native-store/index.mjs.map +7 -0
- package/dist/node/index.d.ts +1 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +125 -10
- package/dist/node/index.js.map +4 -4
- package/dist/node/index.mjs +125 -10
- package/dist/node/index.mjs.map +4 -4
- package/dist/node/node.sw.js +152 -0
- package/dist/node/utils/icons.d.ts +4 -5
- package/dist/node/utils/icons.d.ts.map +1 -1
- package/dist/node/utils/inline.d.ts +1 -1
- package/dist/node/utils/inline.d.ts.map +1 -1
- package/dist/node/utils/node.sw.js +152 -0
- package/dist/node/utils/session-storage.d.ts +22 -0
- package/dist/node/utils/session-storage.d.ts.map +1 -0
- package/dist/node/utils/sw.d.ts.map +1 -1
- package/dist/node/utils/tree-adapter.d.ts +5 -1
- package/dist/node/utils/tree-adapter.d.ts.map +1 -1
- package/dist/pulse-store/index.d.ts +16 -0
- package/dist/pulse-store/index.d.ts.map +1 -0
- package/dist/pulse-store/index.js +143 -0
- package/dist/pulse-store/index.js.map +7 -0
- package/dist/pulse-store/index.min.js +1 -0
- package/dist/pulse-store/index.min.js.map +1 -0
- package/dist/pulse-store/index.mjs +122 -0
- package/dist/pulse-store/index.mjs.map +7 -0
- package/dist/request/index.d.ts +11 -11
- package/dist/request/index.d.ts.map +1 -1
- package/dist/request/index.js +63 -84
- package/dist/request/index.js.map +2 -2
- package/dist/request/index.min.js +1 -0
- package/dist/request/index.min.js.map +1 -0
- package/dist/request/index.mjs +63 -84
- package/dist/request/index.mjs.map +2 -2
- package/dist/router/index.d.ts +36 -33
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +247 -96
- package/dist/router/index.js.map +3 -3
- package/dist/router/index.min.js +1 -0
- package/dist/router/index.min.js.map +1 -0
- package/dist/router/index.mjs +247 -96
- package/dist/router/index.mjs.map +3 -3
- package/dist/signals/index.d.ts +6 -0
- package/dist/signals/index.d.ts.map +1 -0
- package/dist/signals/index.js +92 -0
- package/dist/signals/index.js.map +7 -0
- package/dist/signals/index.min.js +1 -0
- package/dist/signals/index.min.js.map +1 -0
- package/dist/signals/index.mjs +71 -0
- package/dist/signals/index.mjs.map +7 -0
- package/dist/suspense/index.d.ts +6 -0
- package/dist/suspense/index.d.ts.map +1 -0
- package/dist/suspense/index.js +67 -0
- package/dist/suspense/index.js.map +7 -0
- package/dist/suspense/index.min.js +1 -0
- package/dist/suspense/index.min.js.map +1 -0
- package/dist/suspense/index.mjs +46 -0
- package/dist/suspense/index.mjs.map +7 -0
- package/dist/sw/index.min.js +1 -0
- package/dist/sw/index.min.js.map +1 -0
- package/dist/translate/index.d.ts +19 -0
- package/dist/translate/index.d.ts.map +1 -0
- package/dist/translate/index.js +150 -0
- package/dist/translate/index.js.map +7 -0
- package/dist/translate/index.min.js +1 -0
- package/dist/translate/index.min.js.map +1 -0
- package/dist/translate/index.mjs +129 -0
- package/dist/translate/index.mjs.map +7 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/deep-freeze.d.ts +3 -0
- package/dist/utils/deep-freeze.d.ts.map +1 -0
- package/dist/utils/getter-setter.d.ts +3 -0
- package/dist/utils/getter-setter.d.ts.map +1 -0
- package/dist/utils/has-changed.d.ts +2 -0
- package/dist/utils/has-changed.d.ts.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +138 -0
- package/dist/utils/index.js.map +7 -0
- package/dist/utils/index.min.js +1 -0
- package/dist/utils/index.min.js.map +1 -0
- package/dist/utils/index.mjs +115 -0
- package/dist/utils/index.mjs.map +7 -0
- package/lib/flux-store/index.ts +312 -0
- package/lib/hooks/index.ts +39 -57
- package/lib/index.ts +135 -118
- package/lib/native-store/index.ts +106 -0
- package/lib/node/index.ts +3 -1
- package/lib/node/utils/icons.ts +4 -4
- package/lib/node/utils/inline.ts +2 -0
- package/lib/node/utils/node.sw.js +152 -0
- package/lib/node/utils/session-storage.ts +117 -0
- package/lib/node/utils/sw.ts +34 -10
- package/lib/node/utils/tree-adapter.ts +19 -1
- package/lib/pulse-store/index.ts +188 -0
- package/lib/request/index.ts +92 -122
- package/lib/router/index.ts +353 -164
- package/lib/signals/index.ts +98 -0
- package/lib/suspense/index.ts +57 -0
- package/lib/translate/index.ts +156 -0
- package/lib/utils/deep-freeze.ts +54 -0
- package/lib/utils/getter-setter.ts +40 -0
- package/lib/utils/has-changed.ts +43 -0
- package/lib/utils/index.ts +3 -0
- package/package.json +40 -57
- package/tsconfig.json +5 -4
- package/dist/dataset/index.d.ts +0 -24
- package/dist/dataset/index.d.ts.map +0 -1
- package/dist/dataset/index.js +0 -178
- package/dist/dataset/index.js.map +0 -7
- package/dist/dataset/index.mjs +0 -157
- package/dist/dataset/index.mjs.map +0 -7
- package/dist/node/node.sw.tpl +0 -133
- package/dist/node/utils/node.sw.tpl +0 -133
- package/dist/proxy-signal/index.d.ts +0 -23
- package/dist/proxy-signal/index.d.ts.map +0 -1
- package/dist/proxy-signal/index.js +0 -138
- package/dist/proxy-signal/index.js.map +0 -7
- package/dist/proxy-signal/index.mjs +0 -117
- package/dist/proxy-signal/index.mjs.map +0 -7
- package/dist/signal/index.d.ts +0 -9
- package/dist/signal/index.d.ts.map +0 -1
- package/dist/signal/index.js +0 -76
- package/dist/signal/index.js.map +0 -7
- package/dist/signal/index.mjs +0 -55
- package/dist/signal/index.mjs.map +0 -7
- package/dist/store/index.d.ts +0 -16
- package/dist/store/index.d.ts.map +0 -1
- package/dist/store/index.js +0 -93
- package/dist/store/index.js.map +0 -7
- package/dist/store/index.mjs +0 -72
- package/dist/store/index.mjs.map +0 -7
- package/lib/dataset/index.ts +0 -193
- package/lib/node/utils/node.sw.tpl +0 -133
- package/lib/proxy-signal/index.ts +0 -187
- package/lib/signal/index.ts +0 -86
- package/lib/store/index.ts +0 -101
package/dist/index.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var e=Boolean("undefined"!=typeof process&&process.versions&&process.versions.node),
|
|
1
|
+
(()=>{var e=Boolean("undefined"!=typeof process&&process.versions&&process.versions.node),o=class{constructor(e,o,t,n,s){this.tag=e,this.props=o,this.children=t,this.dom=n,this.isSVG=s}},t=e=>Boolean(e&&"object"==typeof e&&"view"in e),n=e=>Boolean("function"==typeof e||t(e)),s=e=>e instanceof o,r=e=>s(e)&&n(e.tag);function i(e,t,...n){return new o(e,t,n)}function p(e){if(3===e.nodeType)return e.nodeValue;if(1===e.nodeType){const t=e.nodeName.toLowerCase(),n={},s=[];for(let o=0,t=e.childNodes.length;o<t;o++){const t=e.childNodes[o];if(3===t.nodeType)s.push(t.nodeValue);else if(1===t.nodeType){const e=p(t);s.push(e)}}const r=e.attributes;for(let e=0,o=r.length;e<o;e++){const o=r[e];n[o.nodeName]=o.nodeValue}const i=new o(t,n,s);return i.dom=e,i.isSVG="svg"===t,i}}function l(e){const o=document.createElement("div");return o.innerHTML=e.trim(),Array.from(o.childNodes).map(p)}i.fragment=(e,...o)=>o;var c=null,d=null,a=!1,u={vnode:null,component:null,event:null},f=new Set(["key","state","v-keep","v-text","v-if","v-for","v-show","v-class","v-html","v-model","v-create","v-update","v-cleanup"]),m=new Set,v=new Set,h=new Set,g=new Set,y=e=>m.add(e),x=e=>{for(const o of e)o();e.clear()},N={"v-if":(e,o)=>{if(!Boolean(e)){const e=o.dom?.parentNode;return e&&e.replaceChild(document.createTextNode(""),o.dom),!1}},"v-show":(e,o)=>{const t=Boolean(e);o.dom.style.display=t?"":"none"},"v-html":(e,o)=>{o.children=l(e)},"v-model":(e,o)=>{if("name"in o.props==!1)return;let t;const n=o.props.name;let s="oninput",r=o=>e[n]=o.target.value;if("input"===o.tag)switch(o.props.type){case"checkbox":Array.isArray(e[n])?(r=o=>{const t=o.target.value,s=e[n].indexOf(t);-1===s?e[n].push(t):e[n].splice(s,1)},t=-1!==e[n].indexOf(o.dom.value)):"value"in o.props?(r=()=>{e[n]===o.props.value?e[n]=null:e[n]=o.props.value},t=e[n]===o.props.value):(r=()=>e[n]=!e[n],t=e[n]),V("checked",t,o);break;case"radio":V("checked",e[n]===o.dom.value,o);break;default:V("value",e[n],o)}else"select"===o.tag?(s="onclick",o.props.multiple?(r=o=>{const t=o.target.value;if(o.ctrlKey){const o=e[n].indexOf(t);-1===o?e[n].push(t):e[n].splice(o,1)}else e[n].splice(0,e[n].length),e[n].push(t)},o.children.forEach(o=>{if("option"===o.tag){const t="value"in o.props?o.props.value:o.children.join("").trim();o.props.selected=-1!==e[n].indexOf(t)}})):o.children.forEach(o=>{if("option"===o.tag){const t="value"in o.props?o.props.value:o.children.join("").trim();o.props.selected=t===e[n]}})):"textarea"===o.tag&&(o.children=[e[n]]);const i=o.props[s];V(s,e=>{r(e),i&&i(e)},o)},"v-create":(e,o,t)=>{if(!t){const t=e(o);"function"==typeof t&&y(t)}},"v-update":(e,o,t)=>{if(t){const n=e(o,t);"function"==typeof n&&y(n)}},"v-cleanup":(e,o)=>{y(()=>e(o))},"v-class":(e,o)=>{if("string"==typeof e)o.dom.className=e;else if(Array.isArray(e))o.dom.className=e.join(" ");else if("object"==typeof e){const t=o.dom.classList;for(const o in e){const n="function"==typeof e[o]?e[o]():e[o];t.toggle(o,n)}}},class(e,o){o.dom.className!==e&&(o.dom.className=e)},className(e,o){N.class(e,o,null)},id:(e,o)=>{o.dom.id=e},style:(e,o)=>{if("string"==typeof e)o.dom.style=e;else if("object"==typeof e){o.dom.style="";const t=o.dom.style;for(const o in e)t[o]=e[o]}}};var C,k=new Set;function w(e){u.event=e;let o=e.target;const t=`on${e.type}`;for(;o;){const n=o.props;if(n&&n[t])return n[t](e,o),void(e.defaultPrevented||G());o=o.parentNode}u.event=null}function V(e,o,t){const n=t.dom;"function"!=typeof o?e in n?n[e]=o:!1===o?n.removeAttribute(e):n.setAttribute(e,o):k.has(e)||(d.dom.addEventListener(e.slice(2),w),k.add(e))}function b(e,o){const t=e.dom,n=e.props;if(o)for(const e in o)e in n!=!1||k.has(e)||f.has(e)||(e in t?t[e]=null:t.removeAttribute(e));for(const t in n)if(N[t]){if(!1===N[t](n[t],e,o))break}else f.has(t)||V(t,n[t],e)}function A(e,o){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function S(e){if(u.vnode=e,"v-for"in e.props){const t=[],n=e.props["v-for"],s=n.length,r=e.children[0];for(let i=0;i<s;i++){const s=r(n[i],i);s instanceof o&&(s.props=s.props||{},s.isSVG=e.isSVG||"svg"===s.tag),t[i]=s}return t}let n=0;const s=e.children;let r=s;for(;n<r.length;){const i=r[n];if(null!=i)if(Array.isArray(i))r===s&&(r=[...s]),r.splice(n,1,...i);else if(i instanceof o&&(i.props=i.props||{},i.isSVG=e.isSVG||"svg"===i.tag,"string"!=typeof i.tag)){r===s&&(r=[...s]);const e=u.component=i.tag;r[n]=(t(e)?e.view:e).bind(e)(i.props,i.children)}else n++;else r===s&&(r=[...s]),r.splice(n,1)}return r}function T(e,t,n){const s=A(e.tag,e.isSVG);if(n?t.dom.replaceChild(s,n):t.dom.appendChild(s),e.dom=s,b(e,null),e.dom.props=e.props,"v-text"in e.props)return void(e.dom.textContent=e.props["v-text"]);const r=S(e);if(0!==r.length)for(let t=0,n=r.length;t<n;t++)r[t]instanceof o!=!1?T(r[t],e,null):e.dom.appendChild(document.createTextNode(r[t]));else e.dom.textContent=""}function E(e){const t=S(e),n=e.dom;if(0===t.length)return void(n.childNodes.length&&(n.textContent=""));const s=n.childNodes,r=s.length;if(r>0){const n=s[0].props,r=t[0];if(n&&r instanceof o&&"key"in r.props&&"key"in n)return void function(e,t){const n=[...Array.from(e.dom.childNodes)],s=e.dom.childNodes,r={},i={};for(let e=0,s=n.length;e<s;e++){const s=n[e].props;s&&(r[s.key]=e),e<t.length&&t[e]instanceof o&&(i[t[e].props.key]=e)}for(let o=0,i=t.length;o<i;o++){const i=t[o],p=n[r[i.props.key]];if(!p){T(i,e,s[o]);continue}i.dom=p;const l=s[o];if(l?l!==p&&e.dom.replaceChild(p,l):e.dom.appendChild(p),"v-keep"in i.props==0||p.props["v-keep"]!==i.props["v-keep"]){if(b(i,p.props),p.props=i.props,"v-text"in i.props){p.textContent!=i.props["v-text"]&&(p.textContent=i.props["v-text"]);continue}E(i)}}for(let e=t.length,o=s.length;e<o;e++)s[e]?.remove()}(e,t)}const i=t.length;if(0!==r){for(let n=0;n<i;n++){const r=t[n],i=r instanceof o==!1,p=s[n];if(p)if(i){if(3!==p.nodeType){e.dom.replaceChild(document.createTextNode(r),p);continue}p.nodeValue!=r&&(p.nodeValue=r)}else{if("v-keep"in r.props){if(p.props&&p.props["v-keep"]===r.props["v-keep"])continue;const e=s[n+1];if(e&&e.props&&e.props["v-keep"]===r.props["v-keep"]){p.remove();continue}}r.tag===p.nodeName.toLowerCase()?(r.dom=p,b(r,p.props||null),p.props=r.props,"v-text"in r.props?r.dom.textContent!=r.props["v-text"]&&(r.dom.textContent=r.props["v-text"]):E(r)):T(r,e,p)}else{if(i){e.dom.appendChild(document.createTextNode(r));continue}T(r,e,null)}}for(let e=i,o=s.length;e<o;e++)s[e]?.remove()}else for(let s=0;s<i;s++)t[s]instanceof o!=!1?T(t[s],e,null):n.appendChild(document.createTextNode(t[s]))}function L(e){x(m),e.props=e.props||{},E(e),x(a?h:v),a=!0,u.vnode=null,u.component=null}function G(){return d&&(d.children=[c],L(d),e)?d.dom.innerHTML:""}var j=e?clearTimeout:cancelAnimationFrame,O=e?()=>setTimeout(G,5):()=>requestAnimationFrame(G);var B={Vnode:o,createElement:A,current:u,debouncedUpdate:function(){j(C),C=O()},directive:function(e,o){const t=`v-${e}`;N[t]=o,f.add(t)},directives:N,hidrateDomToVnode:p,isComponent:n,isNodeJs:e,isPOJOComponent:t,isVnode:s,isVnodeComponent:r,mount:function(o,t){const s="string"==typeof o?e?A(o,"svg"===o):document.querySelector(o):o;return c=n(t)?i(t,{},[]):r(t)?t:i(()=>t,{},[]),d=p(s),G()},onCleanup:y,onMount:e=>!a&&v.add(e),onUnmount:e=>!a&&g.add(e),onUpdate:e=>h.add(e),reservedProps:f,setAttribute:function(e,o,t){f.has(e)||(t.props[e]=o,V(e,o,t))},setPropNameReserved:function(e){f.add(e)},trust:l,unmount:function(){if(d){c=i(()=>null,{});const e=G();x(g);for(const e in k)d.dom.removeEventListener(e.slice(2).toLowerCase(),w),Reflect.deleteProperty(k,e);return c=null,d=null,a=!1,u.vnode=null,u.component=null,u.event=null,e}return""},update:G,updateAttributes:b,updateVnode:L,v:i};"undefined"!=typeof module?module.exports=B:self.Valyrian=B})();//# sourceMappingURL=index.min.js.map
|
package/dist/index.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc05vZGVKcyIsIkJvb2xlYW4iLCJwcm9jZXNzIiwidmVyc2lvbnMiLCJub2RlIiwiVm5vZGUiLCJjb25zdHJ1Y3RvciIsInRhZyIsInByb3BzIiwiY2hpbGRyZW4iLCJkb20iLCJpc1NWRyIsInRoaXMiLCJpc0NvbXBvbmVudCIsImNvbXBvbmVudCIsImlzVm5vZGUiLCJvYmplY3QiLCJpc1Zub2RlQ29tcG9uZW50IiwidiIsInRhZ09yQ29tcG9uZW50IiwiZG9tVG9Wbm9kZSIsIm5vZGVUeXBlIiwibm9kZVZhbHVlIiwibm9kZU5hbWUiLCJ0b0xvd2VyQ2FzZSIsImkiLCJsIiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkRG9tIiwicHVzaCIsImNoaWxkVm5vZGUiLCJhdHRyaWJ1dGVzIiwiYXR0ciIsInRydXN0IiwiaHRtbFN0cmluZyIsImRpdiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInRyaW0iLCJBcnJheSIsImZyb20iLCJtYXAiLCJmcmFnbWVudCIsIl8iLCJtYWluQ29tcG9uZW50IiwibWFpblZub2RlIiwiaXNNb3VudGVkIiwiY3VycmVudCIsInZub2RlIiwiZXZlbnQiLCJyZXNlcnZlZFByb3BzIiwiU2V0Iiwib25DbGVhbnVwU2V0Iiwib25Nb3VudFNldCIsIm9uVXBkYXRlU2V0Iiwib25Vbm1vdW50U2V0Iiwib25DbGVhbnVwIiwiY2FsbGJhY2siLCJhZGQiLCJjYWxsU2V0Iiwic2V0IiwiY2xlYXIiLCJoYW5kbGVWSWYiLCJzaG91bGRSZW5kZXIiLCJ2YWx1ZSIsInBhcmVudE5vZGUiLCJuZXdkb20iLCJjcmVhdGVUZXh0Tm9kZSIsInJlcGxhY2VDaGlsZCIsImRpcmVjdGl2ZXMiLCJib29sIiwic3R5bGUiLCJkaXNwbGF5IiwidmFsIiwibW9kZWwiLCJwcm9wZXJ0eSIsImhhbmRsZXIiLCJlIiwidGFyZ2V0IiwidHlwZSIsImlzQXJyYXkiLCJpZHgiLCJpbmRleE9mIiwic3BsaWNlIiwic2hhcmVkU2V0QXR0cmlidXRlIiwibXVsdGlwbGUiLCJjdHJsS2V5IiwiZm9yRWFjaCIsImNoaWxkIiwiam9pbiIsInNlbGVjdGVkIiwicHJldkhhbmRsZXIiLCJvbGRQcm9wcyIsImNsZWFudXAiLCJjbGFzc05hbWUiLCJjbGFzc0xpc3QiLCJuYW1lIiwidG9nZ2xlIiwiY2xhc3MiLCJpZCIsImRvbVN0eWxlIiwiZXZlbnRMaXN0ZW5lck5hbWVzIiwiZXZlbnRMaXN0ZW5lciIsImRlZmF1bHRQcmV2ZW50ZWQiLCJ1cGRhdGUiLCJuZXdWbm9kZSIsIm5ld1Zub2RlRG9tIiwicmVtb3ZlQXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiaGFzIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNsaWNlIiwiYWRkUHJvcGVydGllcyIsInZub2RlUHJvcHMiLCJ1cGRhdGVBdHRyaWJ1dGVzIiwidm5vZGVEb20iLCJyZW1vdmVBdHRyaWJ1dGVzIiwiY3JlYXRlRWxlbWVudE5TIiwiZmxhdFRyZWUiLCJuZXdDaGlsZCIsInZpZXciLCJiaW5kIiwiaGFuZGxlVkZvciIsImNyZWF0ZU5ld0VsZW1lbnQiLCJvbGRDaGlsZCIsImFwcGVuZENoaWxkIiwidGV4dENvbnRlbnQiLCJwYXRjaCIsIm9sZERvbUNoaWxkcmVuIiwib2xkQ2hpbGRyZW5MZW5ndGgiLCJmaXJzdE9sZFByb3BzIiwiZmlyc3RWbm9kZSIsIm9sZFRyZWUiLCJvbGRLZXllZExpc3QiLCJuZXdLZXllZExpc3QiLCJrZXkiLCJjdXJyZW50Q2hpbGQiLCJyZW1vdmUiLCJwYXRjaEtleWVkIiwiY2hpbGRyZW5MZW5ndGgiLCJuZXh0T2xkQ2hpbGQiLCJ1cGRhdGVWbm9kZSIsImRpcmVjdGl2ZSIsImRpcmVjdGl2ZU5hbWUiLCJjb250YWluZXIiLCJxdWVyeVNlbGVjdG9yIiwicmVzdWx0IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIlJlZmxlY3QiLCJkZWxldGVQcm9wZXJ0eSJdLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBzb25hcmpzL2NvZ25pdGl2ZS1jb21wbGV4aXR5ICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2YXJzLW9uLXRvcCwgbm8tdmFyLCBuby11bnVzZWQtdmFyc1xuICB2YXIgZG9jdW1lbnQ6IERvY3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgbmFtZXNwYWNlIEpTWCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIGludGVyZmFjZSBJbnRyaW5zaWNFbGVtZW50cyBleHRlbmRzIERlZmF1bHRSZWNvcmQge31cbiAgfVxufVxuXG5pbnRlcmZhY2UgRGVmYXVsdFJlY29yZCBleHRlbmRzIFJlY29yZDxzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wsIGFueT4ge31cblxuZXhwb3J0IGludGVyZmFjZSBWbm9kZVByb3BlcnRpZXMgZXh0ZW5kcyBEZWZhdWx0UmVjb3JkIHtcbiAga2V5Pzogc3RyaW5nIHwgbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvbUVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50LCBEZWZhdWx0UmVjb3JkIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50IGV4dGVuZHMgRGVmYXVsdFJlY29yZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgKHByb3BzOiBWbm9kZVByb3BlcnRpZXMsIGNoaWxkcmVuOiBhbnlbXSk6IFZub2RlIHwgYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBPSk9Db21wb25lbnQgZXh0ZW5kcyBEZWZhdWx0UmVjb3JkIHtcbiAgdmlldzogQ29tcG9uZW50O1xufVxuXG5leHBvcnQgdHlwZSBWYWx5cmlhbkNvbXBvbmVudCA9IENvbXBvbmVudCB8IFBPSk9Db21wb25lbnQ7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuZXhwb3J0IGludGVyZmFjZSBWbm9kZUNvbXBvbmVudEludGVyZmFjZSBleHRlbmRzIFZub2RlIHtcbiAgdGFnOiBWYWx5cmlhbkNvbXBvbmVudDtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG5leHBvcnQgaW50ZXJmYWNlIENoaWxkcmVuIGV4dGVuZHMgQXJyYXk8Vm5vZGUgfCBWbm9kZUNvbXBvbmVudEludGVyZmFjZSB8IFZhbHlyaWFuQ29tcG9uZW50IHwgYW55PiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdGl2ZSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgKHZhbHVlOiBhbnksIHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFByb3BzOiBWbm9kZVByb3BlcnRpZXMgfCBudWxsKTogdm9pZCB8IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBpc05vZGVKcyA9IEJvb2xlYW4odHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpO1xuXG5leHBvcnQgY2xhc3MgVm5vZGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgdGFnOiBzdHJpbmcgfCBDb21wb25lbnQgfCBQT0pPQ29tcG9uZW50LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBwcm9wczogbnVsbCB8IFZub2RlUHJvcGVydGllcyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgY2hpbGRyZW46IENoaWxkcmVuLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBkb20/OiBEb21FbGVtZW50LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBpc1NWRz86IGJvb2xlYW5cbiAgKSB7fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZub2RlV2l0aERvbSBleHRlbmRzIFZub2RlIHtcbiAgdGFnOiBzdHJpbmc7XG4gIGRvbTogRG9tRWxlbWVudDtcbiAgcHJvcHM6IFZub2RlUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGNvbnN0IGlzQ29tcG9uZW50ID0gKGNvbXBvbmVudDogdW5rbm93bik6IGNvbXBvbmVudCBpcyBDb21wb25lbnQgPT5cbiAgQm9vbGVhbih0eXBlb2YgY29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIgfHwgKGNvbXBvbmVudCAmJiB0eXBlb2YgY29tcG9uZW50ID09PSBcIm9iamVjdFwiICYmIFwidmlld1wiIGluIGNvbXBvbmVudCkpO1xuZXhwb3J0IGNvbnN0IGlzVm5vZGUgPSAob2JqZWN0PzogdW5rbm93bik6IG9iamVjdCBpcyBWbm9kZSA9PiBvYmplY3QgaW5zdGFuY2VvZiBWbm9kZTtcblxuZXhwb3J0IGNvbnN0IGlzVm5vZGVDb21wb25lbnQgPSAob2JqZWN0PzogdW5rbm93bik6IG9iamVjdCBpcyBWbm9kZUNvbXBvbmVudEludGVyZmFjZSA9PiB7XG4gIHJldHVybiBpc1Zub2RlKG9iamVjdCkgJiYgaXNDb21wb25lbnQob2JqZWN0LnRhZyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdih0YWdPckNvbXBvbmVudDogc3RyaW5nIHwgQ29tcG9uZW50LCBwcm9wczogVm5vZGVQcm9wZXJ0aWVzLCAuLi5jaGlsZHJlbjogQ2hpbGRyZW4pIHtcbiAgcmV0dXJuIG5ldyBWbm9kZSh0YWdPckNvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKTtcbn1cblxudi5mcmFnbWVudCA9IChfOiBWbm9kZVByb3BlcnRpZXMsIC4uLmNoaWxkcmVuOiBDaGlsZHJlbikgPT4gY2hpbGRyZW47XG5cbmV4cG9ydCBmdW5jdGlvbiBkb21Ub1Zub2RlKGRvbTogYW55KTogVm5vZGVXaXRoRG9tIHwgdm9pZCB7XG4gIGlmIChkb20ubm9kZVR5cGUgPT09IDMpIHtcbiAgICByZXR1cm4gZG9tLm5vZGVWYWx1ZTtcbiAgfVxuXG4gIGlmIChkb20ubm9kZVR5cGUgPT09IDEpIHtcbiAgICBjb25zdCB0YWcgPSBkb20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBwcm9wcyA9IHt9IGFzIFZub2RlUHJvcGVydGllcztcbiAgICBjb25zdCBjaGlsZHJlbiA9IFtdIGFzIENoaWxkcmVuO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkb20uY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkRG9tID0gZG9tLmNoaWxkTm9kZXNbaV07XG4gICAgICBpZiAoY2hpbGREb20ubm9kZVR5cGUgPT09IDMpIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZERvbS5ub2RlVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZERvbS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICBjb25zdCBjaGlsZFZub2RlID0gZG9tVG9Wbm9kZShjaGlsZERvbSk7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGRWbm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IGRvbS5hdHRyaWJ1dGVzO1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gYXR0cmlidXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0dHIgPSBhdHRyaWJ1dGVzW2ldO1xuICAgICAgcHJvcHNbYXR0ci5ub2RlTmFtZV0gPSBhdHRyLm5vZGVWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFZub2RlKHRhZywgcHJvcHMsIGNoaWxkcmVuLCBkb20sIHRhZyA9PT0gXCJzdmdcIikgYXMgVm5vZGVXaXRoRG9tO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnVzdChodG1sU3RyaW5nOiBzdHJpbmcpIHtcbiAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZGl2LmlubmVySFRNTCA9IGh0bWxTdHJpbmcudHJpbSgpO1xuICByZXR1cm4gQXJyYXkuZnJvbShkaXYuY2hpbGROb2RlcykubWFwKGRvbVRvVm5vZGUpO1xufVxuXG5sZXQgbWFpbkNvbXBvbmVudDogVm5vZGVDb21wb25lbnRJbnRlcmZhY2UgfCBudWxsID0gbnVsbDtcbmxldCBtYWluVm5vZGU6IFZub2RlV2l0aERvbSB8IG51bGwgPSBudWxsO1xubGV0IGlzTW91bnRlZCA9IGZhbHNlO1xuXG5leHBvcnQgY29uc3QgY3VycmVudCA9IHtcbiAgdm5vZGU6IG51bGwgYXMgVm5vZGUgfCBudWxsLFxuICBjb21wb25lbnQ6IG51bGwgYXMgVmFseXJpYW5Db21wb25lbnQgfCBudWxsLFxuICBldmVudDogbnVsbCBhcyBFdmVudCB8IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCByZXNlcnZlZFByb3BzID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgXCJrZXlcIixcbiAgXCJzdGF0ZVwiLFxuICBcInYta2VlcFwiLFxuICBcInYtdGV4dFwiLFxuICBcInYtaWZcIixcbiAgXCJ2LWZvclwiLFxuICBcInYtc2hvd1wiLFxuICBcInYtY2xhc3NcIixcbiAgXCJ2LWh0bWxcIixcbiAgXCJ2LW1vZGVsXCIsXG4gIFwidi1jcmVhdGVcIixcbiAgXCJ2LXVwZGF0ZVwiLFxuICBcInYtY2xlYW51cFwiXG5dKTtcblxuY29uc3Qgb25DbGVhbnVwU2V0ID0gbmV3IFNldDxGdW5jdGlvbj4oKTtcbmNvbnN0IG9uTW91bnRTZXQgPSBuZXcgU2V0PEZ1bmN0aW9uPigpO1xuY29uc3Qgb25VcGRhdGVTZXQgPSBuZXcgU2V0PEZ1bmN0aW9uPigpO1xuY29uc3Qgb25Vbm1vdW50U2V0ID0gbmV3IFNldDxGdW5jdGlvbj4oKTtcbmV4cG9ydCBjb25zdCBvbk1vdW50ID0gKGNhbGxiYWNrOiBGdW5jdGlvbikgPT4gIWlzTW91bnRlZCAmJiBvbk1vdW50U2V0LmFkZChjYWxsYmFjayk7XG5leHBvcnQgY29uc3Qgb25VcGRhdGUgPSAoY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiBvblVwZGF0ZVNldC5hZGQoY2FsbGJhY2spO1xuZXhwb3J0IGNvbnN0IG9uQ2xlYW51cCA9IChjYWxsYmFjazogRnVuY3Rpb24pID0+IG9uQ2xlYW51cFNldC5hZGQoY2FsbGJhY2spO1xuZXhwb3J0IGNvbnN0IG9uVW5tb3VudCA9IChjYWxsYmFjazogRnVuY3Rpb24pID0+ICFpc01vdW50ZWQgJiYgb25Vbm1vdW50U2V0LmFkZChjYWxsYmFjayk7XG5jb25zdCBjYWxsU2V0ID0gKHNldDogU2V0PEZ1bmN0aW9uPikgPT4ge1xuICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHNldCkge1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cbiAgc2V0LmNsZWFyKCk7XG59O1xuXG5jb25zdCBoYW5kbGVWSWYgPSAoc2hvdWxkUmVuZGVyOiBib29sZWFuKTogRGlyZWN0aXZlID0+IHtcbiAgcmV0dXJuICh2YWx1ZSwgdm5vZGUpID0+IHtcbiAgICBjb25zdCBib29sID0gc2hvdWxkUmVuZGVyICE9PSBCb29sZWFuKHZhbHVlKTtcbiAgICBpZiAoYm9vbCkge1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHZub2RlLmRvbT8ucGFyZW50Tm9kZTtcbiAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgIGNvbnN0IG5ld2RvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xuICAgICAgICBwYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdkb20sIHZub2RlLmRvbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZGlyZWN0aXZlczogUmVjb3JkPHN0cmluZywgRGlyZWN0aXZlPiA9IHtcbiAgXCJ2LWlmXCI6IGhhbmRsZVZJZih0cnVlKSxcbiAgXCJ2LXVubGVzc1wiOiBoYW5kbGVWSWYoZmFsc2UpLFxuXG4gIFwidi1zaG93XCI6ICh2YWx1ZSwgdm5vZGUpID0+IHtcbiAgICBjb25zdCBib29sID0gQm9vbGVhbih2YWx1ZSk7XG4gICAgKFxuICAgICAgdm5vZGUuZG9tIGFzIHVua25vd24gYXMge1xuICAgICAgICBzdHlsZTogeyBkaXNwbGF5OiBzdHJpbmcgfTtcbiAgICAgIH1cbiAgICApLnN0eWxlLmRpc3BsYXkgPSBib29sID8gXCJcIiA6IFwibm9uZVwiO1xuICB9LFxuXG4gIFwidi1odG1sXCI6ICh2YWx1ZSwgdm5vZGUpID0+IHtcbiAgICB2bm9kZS5jaGlsZHJlbiA9IFt0cnVzdCh2YWx1ZSBhcyBzdHJpbmcpXTtcbiAgfSxcblxuICAvLyBUaGUgXCJ2LW1vZGVsXCIgZGlyZWN0aXZlIGJpbmRzIHRoZSB2YWx1ZSBvZiBhbiBpbnB1dCBlbGVtZW50IHRvIGEgbW9kZWwgcHJvcGVydHlcbiAgXCJ2LW1vZGVsXCI6ICh2YWwsIHZub2RlKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCBbbW9kZWwsIHByb3BlcnR5LCBldmVudF06IGFueVtdID0gdmFsIGFzIGFueVtdO1xuICAgIGxldCB2YWx1ZTtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIG1vZGVsIHByb3BlcnR5IHdoZW4gdGhlIGlucHV0IGVsZW1lbnQncyB2YWx1ZSBjaGFuZ2VzXG4gICAgbGV0IGhhbmRsZXIgPSAoZTogRXZlbnQpID0+IChtb2RlbFtwcm9wZXJ0eV0gPSAoZS50YXJnZXQgYXMgRG9tRWxlbWVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pLnZhbHVlKTtcbiAgICBpZiAodm5vZGUudGFnID09PSBcImlucHV0XCIpIHtcbiAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGFuIGlucHV0LCB1c2UgdGhlIFwiaW5wdXRcIiBldmVudCBieSBkZWZhdWx0XG4gICAgICBldmVudCA9IGV2ZW50IHx8IFwib25pbnB1dFwiO1xuICAgICAgLy8gRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGlucHV0IGVsZW1lbnQsIHVzZSBhIGRpZmZlcmVudCBoYW5kbGVyIGZ1bmN0aW9uXG4gICAgICBzd2l0Y2ggKHZub2RlLnByb3BzLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNoZWNrYm94XCI6IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbFtwcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgbW9kZWwgcHJvcGVydHkgaXMgYW4gYXJyYXksIGFkZCBvciByZW1vdmUgdGhlIHZhbHVlIGZyb20gdGhlIGFycmF5IHdoZW4gdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQgb3IgdW5jaGVja2VkXG4gICAgICAgICAgICBoYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IGlkeCA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZhbCk7XG4gICAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgaW4gdGhlIGFycmF5LCBzZXQgdGhlIGNoZWNrYm94IHRvIGJlIGNoZWNrZWRcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2Yodm5vZGUuZG9tLnZhbHVlKSAhPT0gLTE7XG4gICAgICAgICAgfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gdm5vZGUucHJvcHMpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dCBlbGVtZW50IGhhcyBhIFwidmFsdWVcIiBhdHRyaWJ1dGUsIHVzZSBpdCB0byBkZXRlcm1pbmUgdGhlIGNoZWNrZWQgc3RhdGVcbiAgICAgICAgICAgIGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLnByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldID0gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0gPSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldID09PSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gXCJ2YWx1ZVwiIGF0dHJpYnV0ZSwgdXNlIGEgYm9vbGVhbiB2YWx1ZSBmb3IgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgICAgICBoYW5kbGVyID0gKCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9ICFtb2RlbFtwcm9wZXJ0eV0pO1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNldCB0aGUgXCJjaGVja2VkXCIgYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBlbGVtZW50XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCB2YWx1ZSwgdm5vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJyYWRpb1wiOiB7XG4gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSByYWRpbyBidXR0b24sIHNldCB0aGUgXCJjaGVja2VkXCIgYXR0cmlidXRlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZWwgcHJvcGVydHlcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICBzaGFyZWRTZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIG1vZGVsW3Byb3BlcnR5XSA9PT0gdm5vZGUuZG9tLnZhbHVlLCB2bm9kZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIC8vIEZvciBhbGwgb3RoZXIgaW5wdXQgdHlwZXMsIHNldCB0aGUgXCJ2YWx1ZVwiIGF0dHJpYnV0ZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKFwidmFsdWVcIiwgbW9kZWxbcHJvcGVydHldLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSBzZWxlY3QgZWxlbWVudCwgdXNlIHRoZSBcImNsaWNrXCIgZXZlbnQgYnkgZGVmYXVsdFxuICAgICAgZXZlbnQgPSBldmVudCB8fCBcIm9uY2xpY2tcIjtcbiAgICAgIGlmICh2bm9kZS5wcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICAvLyBJZiB0aGUgc2VsZWN0IGVsZW1lbnQgYWxsb3dzIG11bHRpcGxlIHNlbGVjdGlvbnMsIHVwZGF0ZSB0aGUgbW9kZWwgcHJvcGVydHkgd2l0aCBhbiBhcnJheSBvZiBzZWxlY3RlZCB2YWx1ZXNcbiAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSAoZS50YXJnZXQgYXMgRG9tRWxlbWVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pLnZhbHVlO1xuICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBDdHJsIGtleSBpcyBwcmVzc2VkLCBhZGQgb3IgcmVtb3ZlIHRoZSB2YWx1ZSBmcm9tIHRoZSBhcnJheVxuICAgICAgICAgICAgY29uc3QgaWR4ID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBDdHJsIGtleSBpcyBub3QgcHJlc3NlZCwgc2V0IHRoZSBtb2RlbCBwcm9wZXJ0eSB0byBhbiBhcnJheSB3aXRoIHRoZSBzZWxlY3RlZCB2YWx1ZVxuICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnNwbGljZSgwLCBtb2RlbFtwcm9wZXJ0eV0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBTZXQgdGhlIFwic2VsZWN0ZWRcIiBhdHRyaWJ1dGUgb24gdGhlIG9wdGlvbnMgYmFzZWQgb24gd2hldGhlciB0aGV5IGFyZSBpbiB0aGUgbW9kZWwgcHJvcGVydHkgYXJyYXlcbiAgICAgICAgdm5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09IFwib3B0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gXCJ2YWx1ZVwiIGluIGNoaWxkLnByb3BzID8gY2hpbGQucHJvcHMudmFsdWUgOiBjaGlsZC5jaGlsZHJlbi5qb2luKFwiXCIpLnRyaW0oKTtcbiAgICAgICAgICAgIGNoaWxkLnByb3BzLnNlbGVjdGVkID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsdWUpICE9PSAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdCBlbGVtZW50IGRvZXMgbm90IGFsbG93IG11bHRpcGxlIHNlbGVjdGlvbnMsIHNldCB0aGUgXCJzZWxlY3RlZFwiIGF0dHJpYnV0ZSBvbiB0aGUgb3B0aW9ucyBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgIHZub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IFwidmFsdWVcIiBpbiBjaGlsZC5wcm9wcyA/IGNoaWxkLnByb3BzLnZhbHVlIDogY2hpbGQuY2hpbGRyZW4uam9pbihcIlwiKS50cmltKCk7XG4gICAgICAgICAgICBjaGlsZC5wcm9wcy5zZWxlY3RlZCA9IHZhbHVlID09PSBtb2RlbFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gXCJ0ZXh0YXJlYVwiKSB7XG4gICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBhIHRleHRhcmVhLCB1c2UgdGhlIFwiaW5wdXRcIiBldmVudCBieSBkZWZhdWx0XG4gICAgICBldmVudCA9IGV2ZW50IHx8IFwib25pbnB1dFwiO1xuICAgICAgLy8gU2V0IHRoZSB0ZXh0YXJlYSdzIGNvbnRlbnQgdG8gdGhlIHZhbHVlIG9mIHRoZSBtb2RlbCBwcm9wZXJ0eVxuICAgICAgdm5vZGUuY2hpbGRyZW4gPSBbbW9kZWxbcHJvcGVydHldXTtcbiAgICB9XG5cbiAgICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgcHJldiBoYW5kbGVyIGlmIGFueSB3aWxsIG5vdCBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyIGFjcm9zcyBwYXRjaHNcbiAgICBjb25zdCBwcmV2SGFuZGxlciA9IHZub2RlLnByb3BzW2V2ZW50XTtcblxuICAgIC8vIFNldCB0aGUgZXZlbnQgaGFuZGxlciBvbiB0aGUgZWxlbWVudFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIHNoYXJlZFNldEF0dHJpYnV0ZShcbiAgICAgIGV2ZW50LFxuICAgICAgKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGhhbmRsZXIoZSk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIGhhbmRsZXIgaXMgZGVmaW5lZCwgY2FsbCBpdCBhZnRlciB0aGUgbW9kZWwgaGFzIGJlZW4gdXBkYXRlZFxuICAgICAgICBpZiAocHJldkhhbmRsZXIpIHtcbiAgICAgICAgICBwcmV2SGFuZGxlcihlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHZub2RlXG4gICAgKTtcbiAgfSxcblxuICBcInYtY3JlYXRlXCI6IChjYWxsYmFjaywgdm5vZGUsIG9sZFByb3BzKSA9PiB7XG4gICAgaWYgKCFvbGRQcm9wcykge1xuICAgICAgY29uc3QgY2xlYW51cCA9IGNhbGxiYWNrKHZub2RlKTtcblxuICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25DbGVhbnVwKGNsZWFudXApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBcInYtdXBkYXRlXCI6IChjYWxsYmFjaywgdm5vZGUsIG9sZFByb3BzKSA9PiB7XG4gICAgaWYgKG9sZFByb3BzKSB7XG4gICAgICBjb25zdCBjbGVhbnVwID0gY2FsbGJhY2sodm5vZGUsIG9sZFByb3BzKTtcblxuICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25DbGVhbnVwKGNsZWFudXApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBcInYtY2xlYW51cFwiOiAoY2FsbGJhY2ssIHZub2RlKSA9PiB7XG4gICAgb25DbGVhbnVwKCgpID0+IGNhbGxiYWNrKHZub2RlKSk7XG4gIH0sXG5cbiAgXCJ2LWNsYXNzXCI6ICh2YWx1ZSwgdm5vZGUpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB2bm9kZS5kb20uY2xhc3NOYW1lID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdm5vZGUuZG9tLmNsYXNzTmFtZSA9IHZhbHVlLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjb25zdCBjbGFzc0xpc3QgPSB2bm9kZS5kb20uY2xhc3NMaXN0O1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHR5cGVvZiB2YWx1ZVtuYW1lXSA9PT0gXCJmdW5jdGlvblwiID8gKHZhbHVlW25hbWVdIGFzIEZ1bmN0aW9uKSgpIDogdmFsdWVbbmFtZV07XG4gICAgICAgIGNsYXNzTGlzdC50b2dnbGUobmFtZSwgdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLy8gRnJlcXVlbnQgdXNlZCBwcm9wZXJ0aWVzXG4gIGNsYXNzKHZhbHVlLCB2bm9kZSkge1xuICAgIGlmICh2bm9kZS5kb20uY2xhc3NOYW1lICE9PSB2YWx1ZSkge1xuICAgICAgdm5vZGUuZG9tLmNsYXNzTmFtZSA9IHZhbHVlO1xuICAgIH1cbiAgfSxcblxuICBjbGFzc05hbWUodmFsdWUsIHZub2RlKSB7XG4gICAgZGlyZWN0aXZlcy5jbGFzcyh2YWx1ZSwgdm5vZGUsIG51bGwpO1xuICB9LFxuXG4gIGlkOiAodmFsdWUsIHZub2RlKSA9PiB7XG4gICAgdm5vZGUuZG9tLmlkID0gdmFsdWU7XG4gIH0sXG5cbiAgc3R5bGU6ICh2YWx1ZSwgdm5vZGUpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB2bm9kZS5kb20uc3R5bGUgPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdm5vZGUuZG9tLnN0eWxlID0gXCJcIjtcbiAgICAgIGNvbnN0IGRvbVN0eWxlID0gdm5vZGUuZG9tLnN0eWxlO1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIHZhbHVlKSB7XG4gICAgICAgIGRvbVN0eWxlW25hbWVdID0gdmFsdWVbbmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlyZWN0aXZlKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlOiBEaXJlY3RpdmUpIHtcbiAgY29uc3QgZGlyZWN0aXZlTmFtZSA9IGB2LSR7bmFtZX1gO1xuICBkaXJlY3RpdmVzW2RpcmVjdGl2ZU5hbWVdID0gZGlyZWN0aXZlO1xuICByZXNlcnZlZFByb3BzLmFkZChkaXJlY3RpdmVOYW1lKTtcbn1cblxuY29uc3QgZXZlbnRMaXN0ZW5lck5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmZ1bmN0aW9uIGV2ZW50TGlzdGVuZXIoZTogRXZlbnQpIHtcbiAgY3VycmVudC5ldmVudCA9IGU7XG4gIGxldCBkb20gPSBlLnRhcmdldCBhcyBEb21FbGVtZW50O1xuICBjb25zdCBuYW1lID0gYG9uJHtlLnR5cGV9YDtcblxuICB3aGlsZSAoZG9tKSB7XG4gICAgY29uc3Qgb2xkUHJvcHMgPSBkb20ucHJvcHM7XG4gICAgaWYgKG9sZFByb3BzICYmIG9sZFByb3BzW25hbWVdKSB7XG4gICAgICBvbGRQcm9wc1tuYW1lXShlLCBkb20pO1xuXG4gICAgICBpZiAoIWUuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgdXBkYXRlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRvbSA9IGRvbS5wYXJlbnROb2RlIGFzIERvbUVsZW1lbnQ7XG4gIH1cblxuICBjdXJyZW50LmV2ZW50ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2hhcmVkU2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgbmV3Vm5vZGU6IFZub2RlV2l0aERvbSk6IHZvaWQgfCBib29sZWFuIHtcbiAgY29uc3QgbmV3Vm5vZGVEb20gPSBuZXdWbm9kZS5kb207XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGlmICghZXZlbnRMaXN0ZW5lck5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgKG1haW5Wbm9kZSBhcyBWbm9kZVdpdGhEb20pLmRvbS5hZGRFdmVudExpc3RlbmVyKG5hbWUuc2xpY2UoMiksIGV2ZW50TGlzdGVuZXIpO1xuICAgICAgZXZlbnRMaXN0ZW5lck5hbWVzLmFkZChuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5hbWUgaW4gbmV3Vm5vZGVEb20pIHtcbiAgICBuZXdWbm9kZURvbVtuYW1lXSA9IHZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICBuZXdWbm9kZURvbS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgbmV3Vm5vZGVEb20uc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgbmV3Vm5vZGU6IFZub2RlV2l0aERvbSk6IHZvaWQge1xuICBpZiAoIXJlc2VydmVkUHJvcHMuaGFzKG5hbWUpKSB7XG4gICAgbmV3Vm5vZGUucHJvcHNbbmFtZV0gPSB2YWx1ZTtcbiAgICBzaGFyZWRTZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIG5ld1Zub2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGVzKHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFByb3BzOiBWbm9kZVByb3BlcnRpZXMgfCBudWxsKTogdm9pZCB7XG4gIGlmICghb2xkUHJvcHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB2bm9kZURvbSA9IHZub2RlLmRvbTtcbiAgY29uc3Qgdm5vZGVQcm9wcyA9IHZub2RlLnByb3BzO1xuXG4gIGZvciAoY29uc3QgbmFtZSBpbiBvbGRQcm9wcykge1xuICAgIGlmIChuYW1lIGluIHZub2RlUHJvcHMgPT09IGZhbHNlICYmICFldmVudExpc3RlbmVyTmFtZXMuaGFzKG5hbWUpICYmICFyZXNlcnZlZFByb3BzLmhhcyhuYW1lKSkge1xuICAgICAgaWYgKG5hbWUgaW4gdm5vZGVEb20pIHtcbiAgICAgICAgdm5vZGVEb21bbmFtZV0gPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm5vZGVEb20ucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRQcm9wZXJ0aWVzKHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFByb3BzOiBWbm9kZVByb3BlcnRpZXMgfCBudWxsKSB7XG4gIGNvbnN0IHZub2RlUHJvcHMgPSB2bm9kZS5wcm9wcztcbiAgZm9yIChjb25zdCBuYW1lIGluIHZub2RlUHJvcHMpIHtcbiAgICBpZiAoZGlyZWN0aXZlc1tuYW1lXSkge1xuICAgICAgaWYgKGRpcmVjdGl2ZXNbbmFtZV0odm5vZGVQcm9wc1tuYW1lXSwgdm5vZGUsIG9sZFByb3BzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocmVzZXJ2ZWRQcm9wcy5oYXMobmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHNoYXJlZFNldEF0dHJpYnV0ZShuYW1lLCB2bm9kZVByb3BzW25hbWVdLCB2bm9kZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZXMobmV3Vm5vZGU6IFZub2RlV2l0aERvbSwgb2xkUHJvcHM6IFZub2RlUHJvcGVydGllcyB8IG51bGwpOiB2b2lkIHtcbiAgcmVtb3ZlQXR0cmlidXRlcyhuZXdWbm9kZSwgb2xkUHJvcHMpO1xuICBhZGRQcm9wZXJ0aWVzKG5ld1Zub2RlLCBvbGRQcm9wcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZzogc3RyaW5nLCBpc1NWRzogYm9vbGVhbik6IERvbUVsZW1lbnQge1xuICByZXR1cm4gaXNTVkdcbiAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHRhZylcbiAgICA6IChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZykgYXMgRG9tRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGZsYXRUcmVlKG5ld1Zub2RlOiBWbm9kZVdpdGhEb20sIGNoaWxkcmVuOiBDaGlsZHJlbikge1xuICBjdXJyZW50LnZub2RlID0gbmV3Vm5vZGU7XG4gIGxldCBpID0gMDtcblxuICB3aGlsZSAoaSA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgIGNvbnN0IG5ld0NoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICBpZiAobmV3Q2hpbGQgPT0gbnVsbCkge1xuICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmV3Q2hpbGQpKSB7XG4gICAgICBjaGlsZHJlbi5zcGxpY2UoaSwgMSwgLi4ubmV3Q2hpbGQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgIGlmIChuZXdDaGlsZC5wcm9wcyA9PT0gbnVsbCkge1xuICAgICAgICBuZXdDaGlsZC5wcm9wcyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkLnRhZyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBuZXdDaGlsZC50YWc7XG5cbiAgICAgICAgY3VycmVudC5jb21wb25lbnQgPSBuZXdDaGlsZC50YWc7XG4gICAgICAgIGNoaWxkcmVuW2ldID0gKFwidmlld1wiIGluIGNvbXBvbmVudCA/IGNvbXBvbmVudC52aWV3IDogY29tcG9uZW50KS5iaW5kKGNvbXBvbmVudCkoXG4gICAgICAgICAgbmV3Q2hpbGQucHJvcHMsXG4gICAgICAgICAgbmV3Q2hpbGQuY2hpbGRyZW5cbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdDaGlsZC5pc1NWRyA9IG5ld1Zub2RlLmlzU1ZHIHx8IG5ld0NoaWxkLnRhZyA9PT0gXCJzdmdcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVZGb3IobmV3Vm5vZGU6IFZub2RlV2l0aERvbSkge1xuICBpZiAoXCJ2LWZvclwiIGluIG5ld1Zub2RlLnByb3BzKSB7XG4gICAgY29uc3Qgc2V0ID0gbmV3Vm5vZGUucHJvcHNbXCJ2LWZvclwiXTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuICAgIGNvbnN0IGNhbGxiYWNrID0gbmV3Vm5vZGUuY2hpbGRyZW5bMF07XG4gICAgY2hpbGRyZW4ubGVuZ3RoID0gc2V0Lmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gc2V0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY2hpbGRyZW5baV0gPSBjYWxsYmFjayhzZXRbaV0sIGkpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuICByZXR1cm4gWy4uLm5ld1Zub2RlLmNoaWxkcmVuXTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmV3RWxlbWVudChuZXdDaGlsZDogVm5vZGVXaXRoRG9tLCBuZXdWbm9kZTogVm5vZGVXaXRoRG9tLCBvbGRDaGlsZDogRG9tRWxlbWVudCB8IG51bGwpIHtcbiAgY29uc3QgZG9tID0gY3JlYXRlRWxlbWVudChuZXdDaGlsZC50YWcsIG5ld0NoaWxkLmlzU1ZHIGFzIGJvb2xlYW4pO1xuICBpZiAob2xkQ2hpbGQpIHtcbiAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKGRvbSwgb2xkQ2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChkb20pO1xuICB9XG4gIG5ld0NoaWxkLmRvbSA9IGRvbTtcbiAgYWRkUHJvcGVydGllcyhuZXdDaGlsZCwgbnVsbCk7XG4gIG5ld0NoaWxkLmRvbS5wcm9wcyA9IG5ld0NoaWxkLnByb3BzO1xuICBpZiAoXCJ2LXRleHRcIiBpbiBuZXdDaGlsZC5wcm9wcykge1xuICAgIG5ld0NoaWxkLmRvbS50ZXh0Q29udGVudCA9IG5ld0NoaWxkLnByb3BzW1widi10ZXh0XCJdO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNoaWxkcmVuID0gZmxhdFRyZWUobmV3Q2hpbGQsIGhhbmRsZVZGb3IobmV3Q2hpbGQpKTtcbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgIG5ld0NoaWxkLmRvbS50ZXh0Q29udGVudCA9IFwiXCI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoY2hpbGRyZW5baV0gaW5zdGFuY2VvZiBWbm9kZSA9PT0gZmFsc2UpIHtcbiAgICAgIG5ld0NoaWxkLmRvbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZHJlbltpXSkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNyZWF0ZU5ld0VsZW1lbnQoY2hpbGRyZW5baV0sIG5ld0NoaWxkLCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXRjaEtleWVkKG5ld1Zub2RlOiBWbm9kZVdpdGhEb20sIGNoaWxkcmVuOiBDaGlsZHJlbikge1xuICBjb25zdCBvbGRUcmVlID0gWy4uLkFycmF5LmZyb20obmV3Vm5vZGUuZG9tLmNoaWxkTm9kZXMpXSBhcyB1bmtub3duIGFzIERvbUVsZW1lbnRbXTtcbiAgY29uc3QgY2hpbGROb2RlcyA9IG5ld1Zub2RlLmRvbS5jaGlsZE5vZGVzO1xuICBjb25zdCBvbGRLZXllZExpc3Q6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgY29uc3QgbmV3S2V5ZWRMaXN0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBvbGRUcmVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IG9sZFByb3BzID0gb2xkVHJlZVtpXS5wcm9wcztcbiAgICBpZiAob2xkUHJvcHMpIHtcbiAgICAgIG9sZEtleWVkTGlzdFtvbGRQcm9wcy5rZXkgYXMgc3RyaW5nXSA9IGk7XG4gICAgfVxuXG4gICAgaWYgKGkgPCBjaGlsZHJlbi5sZW5ndGggJiYgY2hpbGRyZW5baV0gaW5zdGFuY2VvZiBWbm9kZSkge1xuICAgICAgbmV3S2V5ZWRMaXN0W2NoaWxkcmVuW2ldLnByb3BzLmtleSBhcyBzdHJpbmddID0gaTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IG5ld0NoaWxkID0gY2hpbGRyZW5baV07XG4gICAgY29uc3Qgb2xkQ2hpbGQgPSBvbGRUcmVlW29sZEtleWVkTGlzdFtuZXdDaGlsZC5wcm9wcy5rZXkgYXMgc3RyaW5nXV07XG5cbiAgICBpZiAoIW9sZENoaWxkKSB7XG4gICAgICBjcmVhdGVOZXdFbGVtZW50KG5ld0NoaWxkLCBuZXdWbm9kZSwgY2hpbGROb2Rlc1tpXSBhcyBEb21FbGVtZW50IHwgbnVsbCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBuZXdDaGlsZC5kb20gPSBvbGRDaGlsZDtcbiAgICBjb25zdCBjdXJyZW50Q2hpbGQgPSBjaGlsZE5vZGVzW2ldO1xuICAgIGlmICghY3VycmVudENoaWxkKSB7XG4gICAgICBuZXdWbm9kZS5kb20uYXBwZW5kQ2hpbGQob2xkQ2hpbGQpO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudENoaWxkICE9PSBvbGRDaGlsZCkge1xuICAgICAgbmV3Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgY3VycmVudENoaWxkKTtcbiAgICB9XG5cbiAgICBpZiAoXCJ2LWtlZXBcIiBpbiBuZXdDaGlsZC5wcm9wcyA9PT0gZmFsc2UgfHwgb2xkQ2hpbGQucHJvcHNbXCJ2LWtlZXBcIl0gIT09IG5ld0NoaWxkLnByb3BzW1widi1rZWVwXCJdKSB7XG4gICAgICB1cGRhdGVBdHRyaWJ1dGVzKG5ld0NoaWxkIGFzIFZub2RlV2l0aERvbSwgb2xkQ2hpbGQucHJvcHMpO1xuICAgICAgb2xkQ2hpbGQucHJvcHMgPSBuZXdDaGlsZC5wcm9wcztcblxuICAgICAgaWYgKFwidi10ZXh0XCIgaW4gbmV3Q2hpbGQucHJvcHMpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICBpZiAob2xkQ2hpbGQudGV4dENvbnRlbnQgIT0gbmV3Q2hpbGQucHJvcHNbXCJ2LXRleHRcIl0pIHtcbiAgICAgICAgICBvbGRDaGlsZC50ZXh0Q29udGVudCA9IG5ld0NoaWxkLnByb3BzW1widi10ZXh0XCJdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICBwYXRjaChuZXdDaGlsZCBhcyBWbm9kZVdpdGhEb20pO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSBjaGlsZHJlbi5sZW5ndGgsIGwgPSBjaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNoaWxkTm9kZXNbaV0/LnJlbW92ZSgpO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gcGF0Y2gobmV3Vm5vZGU6IFZub2RlV2l0aERvbSk6IHZvaWQge1xuICBjb25zdCBjaGlsZHJlbiA9IGZsYXRUcmVlKG5ld1Zub2RlLCBoYW5kbGVWRm9yKG5ld1Zub2RlKSk7XG5cbiAgY29uc3QgZG9tID0gbmV3Vm5vZGUuZG9tO1xuXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoZG9tLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICBkb20udGV4dENvbnRlbnQgPSBcIlwiO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvbGREb21DaGlsZHJlbiA9IGRvbS5jaGlsZE5vZGVzIGFzIHVua25vd24gYXMgRG9tRWxlbWVudFtdO1xuICBjb25zdCBvbGRDaGlsZHJlbkxlbmd0aCA9IG9sZERvbUNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKG9sZENoaWxkcmVuTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0T2xkUHJvcHMgPSBvbGREb21DaGlsZHJlblswXS5wcm9wcztcbiAgICBjb25zdCBmaXJzdFZub2RlID0gY2hpbGRyZW5bMF0gYXMgVm5vZGVXaXRoRG9tO1xuICAgIGlmIChmaXJzdE9sZFByb3BzICYmIGZpcnN0Vm5vZGUgaW5zdGFuY2VvZiBWbm9kZSAmJiBcImtleVwiIGluIGZpcnN0Vm5vZGUucHJvcHMgJiYgXCJrZXlcIiBpbiBmaXJzdE9sZFByb3BzKSB7XG4gICAgICBwYXRjaEtleWVkKG5ld1Zub2RlLCBjaGlsZHJlbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hpbGRyZW5MZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChvbGRDaGlsZHJlbkxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNoaWxkcmVuW2ldIGluc3RhbmNlb2YgVm5vZGUgPT09IGZhbHNlKSB7XG4gICAgICAgIGRvbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZHJlbltpXSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNyZWF0ZU5ld0VsZW1lbnQoY2hpbGRyZW5baV0sIG5ld1Zub2RlLCBudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgb2xkQ2hpbGQgPSBvbGREb21DaGlsZHJlbltpXTtcbiAgICBjb25zdCBuZXdDaGlsZCA9IGNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKCFvbGRDaGlsZCkge1xuICAgICAgY3JlYXRlTmV3RWxlbWVudChuZXdDaGlsZCwgbmV3Vm5vZGUsIG51bGwpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVm5vZGUgPT09IGZhbHNlKSB7XG4gICAgICBpZiAob2xkQ2hpbGQubm9kZVR5cGUgIT09IDMpIHtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdDaGlsZCksIG9sZENoaWxkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgIGlmIChvbGRDaGlsZC5ub2RlVmFsdWUgIT0gbmV3Q2hpbGQpIHtcbiAgICAgICAgb2xkQ2hpbGQubm9kZVZhbHVlID0gbmV3Q2hpbGQ7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoXCJ2LWtlZXBcIiBpbiBuZXdDaGlsZC5wcm9wcykge1xuICAgICAgaWYgKG9sZENoaWxkLnByb3BzICYmIG9sZENoaWxkLnByb3BzW1widi1rZWVwXCJdID09PSBuZXdDaGlsZC5wcm9wc1tcInYta2VlcFwiXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE9sZENoaWxkID0gb2xkRG9tQ2hpbGRyZW5baSArIDFdO1xuICAgICAgaWYgKG5leHRPbGRDaGlsZCAmJiBuZXh0T2xkQ2hpbGQucHJvcHMgJiYgbmV4dE9sZENoaWxkLnByb3BzW1widi1rZWVwXCJdID09PSBuZXdDaGlsZC5wcm9wc1tcInYta2VlcFwiXSkge1xuICAgICAgICBvbGRDaGlsZC5yZW1vdmUoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld0NoaWxkLnRhZyAhPT0gb2xkQ2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgY3JlYXRlTmV3RWxlbWVudChuZXdDaGlsZCwgbmV3Vm5vZGUsIG9sZENoaWxkKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG5ld0NoaWxkLmRvbSA9IG9sZENoaWxkO1xuICAgIHVwZGF0ZUF0dHJpYnV0ZXMobmV3Q2hpbGQgYXMgVm5vZGVXaXRoRG9tLCBvbGRDaGlsZC5wcm9wcyB8fCBudWxsKTtcbiAgICBvbGRDaGlsZC5wcm9wcyA9IG5ld0NoaWxkLnByb3BzO1xuICAgIGlmIChcInYtdGV4dFwiIGluIG5ld0NoaWxkLnByb3BzKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICBpZiAobmV3Q2hpbGQuZG9tLnRleHRDb250ZW50ICE9IG5ld0NoaWxkLnByb3BzW1widi10ZXh0XCJdKSB7XG4gICAgICAgIG5ld0NoaWxkLmRvbS50ZXh0Q29udGVudCA9IG5ld0NoaWxkLnByb3BzW1widi10ZXh0XCJdO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHBhdGNoKG5ld0NoaWxkKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBjaGlsZHJlbkxlbmd0aCwgbCA9IG9sZERvbUNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9sZERvbUNoaWxkcmVuW2ldPy5yZW1vdmUoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVm5vZGUodm5vZGU6IFZub2RlV2l0aERvbSk6IHN0cmluZyB8IHZvaWQge1xuICBjYWxsU2V0KG9uQ2xlYW51cFNldCk7XG4gIHZub2RlLnByb3BzID0gdm5vZGUucHJvcHMgfHwge307XG4gIHBhdGNoKHZub2RlKTtcbiAgY2FsbFNldChpc01vdW50ZWQgPyBvblVwZGF0ZVNldCA6IG9uTW91bnRTZXQpO1xuICBpc01vdW50ZWQgPSB0cnVlO1xuICBjdXJyZW50LnZub2RlID0gbnVsbDtcbiAgY3VycmVudC5jb21wb25lbnQgPSBudWxsO1xuICBpZiAoaXNOb2RlSnMpIHtcbiAgICByZXR1cm4gdm5vZGUuZG9tLmlubmVySFRNTDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlKCk6IHZvaWQgfCBzdHJpbmcge1xuICBpZiAobWFpblZub2RlKSB7XG4gICAgbWFpblZub2RlLmNoaWxkcmVuID0gW21haW5Db21wb25lbnRdO1xuICAgIHJldHVybiB1cGRhdGVWbm9kZShtYWluVm5vZGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bm1vdW50KCkge1xuICBpZiAobWFpblZub2RlKSB7XG4gICAgbWFpbkNvbXBvbmVudCA9IHYoKCkgPT4gbnVsbCwge30pIGFzIFZub2RlQ29tcG9uZW50SW50ZXJmYWNlO1xuICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZSgpO1xuICAgIGNhbGxTZXQob25Vbm1vdW50U2V0KTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZXZlbnRMaXN0ZW5lck5hbWVzKSB7XG4gICAgICBtYWluVm5vZGUuZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZS5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLCBldmVudExpc3RlbmVyKTtcbiAgICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkoZXZlbnRMaXN0ZW5lck5hbWVzLCBuYW1lKTtcbiAgICB9XG5cbiAgICBtYWluQ29tcG9uZW50ID0gbnVsbDtcbiAgICBtYWluVm5vZGUgPSBudWxsO1xuICAgIGlzTW91bnRlZCA9IGZhbHNlO1xuICAgIGN1cnJlbnQudm5vZGUgPSBudWxsO1xuICAgIGN1cnJlbnQuY29tcG9uZW50ID0gbnVsbDtcbiAgICBjdXJyZW50LmV2ZW50ID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3VudChkb206IHN0cmluZyB8IERvbUVsZW1lbnQsIGNvbXBvbmVudDogYW55KSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9XG4gICAgdHlwZW9mIGRvbSA9PT0gXCJzdHJpbmdcIiA/IChpc05vZGVKcyA/IGNyZWF0ZUVsZW1lbnQoZG9tLCBkb20gPT09IFwic3ZnXCIpIDogZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihkb20pKSA6IGRvbTtcblxuICBpZiAoaXNDb21wb25lbnQoY29tcG9uZW50KSkge1xuICAgIG1haW5Db21wb25lbnQgPSBuZXcgVm5vZGUoY29tcG9uZW50LCB7fSwgW10pIGFzIFZub2RlQ29tcG9uZW50SW50ZXJmYWNlO1xuICB9IGVsc2UgaWYgKGlzVm5vZGVDb21wb25lbnQoY29tcG9uZW50KSkge1xuICAgIG1haW5Db21wb25lbnQgPSBjb21wb25lbnQ7XG4gIH0gZWxzZSB7XG4gICAgbWFpbkNvbXBvbmVudCA9IG5ldyBWbm9kZSgoKSA9PiBjb21wb25lbnQsIHt9LCBbXSkgYXMgVm5vZGVDb21wb25lbnRJbnRlcmZhY2U7XG4gIH1cblxuICBtYWluVm5vZGUgPSBkb21Ub1Zub2RlKGNvbnRhaW5lcikgYXMgVm5vZGVXaXRoRG9tO1xuICByZXR1cm4gdXBkYXRlKCk7XG59XG4iXSwibWFwcGluZ3MiOiJNQTJDTyxJQUFNQSxFQUFXQyxRQUEyQixvQkFBWkMsU0FBMkJBLFFBQVFDLFVBQVlELFFBQVFDLFNBQVNDLE1BRTFGQyxFQUFOLE1BQ0wsV0FBQUMsQ0FFU0MsRUFFQUMsRUFFQUMsRUFFQUMsRUFFQUMsR0FSQUMsS0FBQUwsTUFFQUssS0FBQUosUUFFQUksS0FBQUgsV0FFQUcsS0FBQUYsTUFFQUUsS0FBQUQsT0FDTixHQVNRRSxFQUFlQyxHQUMxQmIsUUFBNkIsbUJBQWRhLEdBQTZCQSxHQUFrQyxpQkFBZEEsR0FBMEIsU0FBVUEsR0FDekZDLEVBQVdDLEdBQXNDQSxhQUFrQlgsRUFFbkVZLEVBQW9CRCxHQUN4QkQsRUFBUUMsSUFBV0gsRUFBWUcsRUFBT1QsS0FHeEMsU0FBU1csRUFBRUMsRUFBb0NYLEtBQTJCQyxHQUMvRSxPQUFPLElBQUlKLEVBQU1jLEVBQWdCWCxFQUFPQyxFQUMxQyxDQUlPLFNBQVNXLEVBQVdWLEdBQ3pCLEdBQXFCLElBQWpCQSxFQUFJVyxTQUNOLE9BQU9YLEVBQUlZLFVBR2IsR0FBcUIsSUFBakJaLEVBQUlXLFNBQWdCLENBQ3RCLE1BQU1kLEVBQU1HLEVBQUlhLFNBQVNDLGNBQ25CaEIsRUFBUSxDQUFDLEVBQ1RDLEVBQVcsR0FFakIsUUFBU2dCLEVBQUksRUFBR0MsRUFBSWhCLEVBQUlpQixXQUFXQyxPQUFRSCxFQUFJQyxFQUFHRCxJQUFLLENBQ3JELE1BQU1JLEVBQVduQixFQUFJaUIsV0FBV0YsR0FDaEMsR0FBMEIsSUFBdEJJLEVBQVNSLFNBQ1haLEVBQVNxQixLQUFLRCxFQUFTUCxnQkFDekIsR0FBaUMsSUFBdEJPLEVBQVNSLFNBQWdCLENBQ2xDLE1BQU1VLEVBQWFY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
|
|
1
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc05vZGVKcyIsIkJvb2xlYW4iLCJwcm9jZXNzIiwidmVyc2lvbnMiLCJub2RlIiwiVm5vZGUiLCJjb25zdHJ1Y3RvciIsInRhZyIsInByb3BzIiwiY2hpbGRyZW4iLCJkb20iLCJpc1NWRyIsInRoaXMiLCJpc1BPSk9Db21wb25lbnQiLCJjb21wb25lbnQiLCJpc0NvbXBvbmVudCIsImlzVm5vZGUiLCJvYmplY3QiLCJpc1Zub2RlQ29tcG9uZW50IiwidiIsInRhZ09yQ29tcG9uZW50IiwiaGlkcmF0ZURvbVRvVm5vZGUiLCJub2RlVHlwZSIsIm5vZGVWYWx1ZSIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJpIiwibCIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJjaGlsZERvbSIsInB1c2giLCJjaGlsZFZub2RlIiwiYXR0cmlidXRlcyIsImF0dHIiLCJ2bm9kZSIsInRydXN0IiwiaHRtbFN0cmluZyIsImRpdiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInRyaW0iLCJBcnJheSIsImZyb20iLCJtYXAiLCJmcmFnbWVudCIsIl8iLCJtYWluQ29tcG9uZW50IiwibWFpblZub2RlIiwiaXNNb3VudGVkIiwiY3VycmVudCIsImV2ZW50IiwicmVzZXJ2ZWRQcm9wcyIsIlNldCIsIm9uQ2xlYW51cFNldCIsIm9uTW91bnRTZXQiLCJvblVwZGF0ZVNldCIsIm9uVW5tb3VudFNldCIsIm9uQ2xlYW51cCIsImNhbGxiYWNrIiwiYWRkIiwiY2FsbFNldCIsInNldCIsImNsZWFyIiwiZGlyZWN0aXZlcyIsInZhbHVlIiwicGFyZW50Tm9kZSIsInJlcGxhY2VDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwiYm9vbCIsInN0eWxlIiwiZGlzcGxheSIsIm1vZGVsIiwicHJvcGVydHkiLCJuYW1lIiwiaGFuZGxlciIsImUiLCJ0YXJnZXQiLCJ0eXBlIiwiaXNBcnJheSIsInZhbCIsImlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJzaGFyZWRTZXRBdHRyaWJ1dGUiLCJtdWx0aXBsZSIsImN0cmxLZXkiLCJmb3JFYWNoIiwiY2hpbGQiLCJqb2luIiwic2VsZWN0ZWQiLCJwcmV2SGFuZGxlciIsIm9sZFByb3BzIiwiY2xlYW51cCIsImNsYXNzTmFtZSIsImNsYXNzTGlzdCIsInRvZ2dsZSIsImNsYXNzIiwiaWQiLCJkb21TdHlsZSIsImRlYm91bmNlZFVwZGF0ZVRpbWVvdXQiLCJldmVudExpc3RlbmVyTmFtZXMiLCJldmVudExpc3RlbmVyIiwiZGVmYXVsdFByZXZlbnRlZCIsInVwZGF0ZSIsIm5ld1Zub2RlIiwibmV3Vm5vZGVEb20iLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJoYXMiLCJhZGRFdmVudExpc3RlbmVyIiwic2xpY2UiLCJ1cGRhdGVBdHRyaWJ1dGVzIiwidm5vZGVEb20iLCJ2bm9kZVByb3BzIiwiY3JlYXRlRWxlbWVudE5TIiwiZmxhdFRyZWUiLCJuZXdDaGlsZCIsIm9yaWdpbmFsQ2hpbGRyZW4iLCJ2aWV3IiwiYmluZCIsImNyZWF0ZU5ld0VsZW1lbnQiLCJvbGRDaGlsZCIsImFwcGVuZENoaWxkIiwidGV4dENvbnRlbnQiLCJwYXRjaCIsIm9sZERvbUNoaWxkcmVuIiwib2xkQ2hpbGRyZW5MZW5ndGgiLCJmaXJzdE9sZFByb3BzIiwiZmlyc3RWbm9kZSIsIm9sZFRyZWUiLCJvbGRLZXllZExpc3QiLCJuZXdLZXllZExpc3QiLCJrZXkiLCJjdXJyZW50Q2hpbGQiLCJyZW1vdmUiLCJwYXRjaEtleWVkIiwiY2hpbGRyZW5MZW5ndGgiLCJpc1RleHQiLCJuZXh0T2xkQ2hpbGQiLCJ1cGRhdGVWbm9kZSIsImNsZWFyRGVib3VuY2VkVXBkYXRlTWV0aG9kIiwiY2xlYXJUaW1lb3V0IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJzZXREZWJvdW5jZWRVcGRhdGVNZXRob2QiLCJzZXRUaW1lb3V0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZGlyZWN0aXZlIiwiZGlyZWN0aXZlTmFtZSIsImNvbnRhaW5lciIsInF1ZXJ5U2VsZWN0b3IiLCJyZXN1bHQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiUmVmbGVjdCIsImRlbGV0ZVByb3BlcnR5Il0sInNvdXJjZXMiOlsiLi4vbGliL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIHZhciBkb2N1bWVudDogRG9jdW1lbnQ7XG4gIG5hbWVzcGFjZSBKU1gge1xuICAgIGludGVyZmFjZSBJbnRyaW5zaWNFbGVtZW50cyBleHRlbmRzIERlZmF1bHRSZWNvcmQge31cbiAgICB0eXBlIEVsZW1lbnQgPSBSZXR1cm5UeXBlPFxuICAgICAgdHlwZW9mIHYgfCAoKC4uLmFyZ3M6IGFueSkgPT4gc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCB8IGJvb2xlYW4gfCBQcm9taXNlPGFueT4pXG4gICAgPjtcbiAgICB0eXBlIENvbXBvbmVudFJldHVyblR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkIHwgYm9vbGVhbiB8IEVsZW1lbnQgfCBFbGVtZW50W107XG4gIH1cbn1cblxuaW50ZXJmYWNlIERlZmF1bHRSZWNvcmQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBhbnk+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydGllcyBleHRlbmRzIERlZmF1bHRSZWNvcmQge1xuICBrZXk/OiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9tRWxlbWVudCBleHRlbmRzIEVsZW1lbnQsIERlZmF1bHRSZWNvcmQge31cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnQgZXh0ZW5kcyBEZWZhdWx0UmVjb3JkIHtcbiAgKHByb3BzOiBQcm9wZXJ0aWVzLCBjaGlsZHJlbjogYW55W10pOiBWbm9kZSB8IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQT0pPQ29tcG9uZW50IGV4dGVuZHMgRGVmYXVsdFJlY29yZCB7XG4gIHZpZXc6IENvbXBvbmVudDtcbn1cblxuZXhwb3J0IHR5cGUgVmFseXJpYW5Db21wb25lbnQgPSBDb21wb25lbnQgfCBQT0pPQ29tcG9uZW50O1xuXG5leHBvcnQgaW50ZXJmYWNlIFZub2RlQ29tcG9uZW50SW50ZXJmYWNlIGV4dGVuZHMgVm5vZGUge1xuICB0YWc6IFZhbHlyaWFuQ29tcG9uZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoaWxkcmVuIGV4dGVuZHMgQXJyYXk8Vm5vZGUgfCBWbm9kZUNvbXBvbmVudEludGVyZmFjZSB8IFZhbHlyaWFuQ29tcG9uZW50IHwgYW55PiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdGl2ZSB7XG4gICh2YWx1ZTogYW55LCB2bm9kZTogVm5vZGVXaXRoRG9tLCBvbGRQcm9wczogUHJvcGVydGllcyB8IG51bGwpOiBmYWxzZSB8IHZvaWQgfCBhbnk7XG59XG5cbmV4cG9ydCBjb25zdCBpc05vZGVKcyA9IEJvb2xlYW4odHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpO1xuXG5leHBvcnQgY2xhc3MgVm5vZGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdGFnOiBzdHJpbmcgfCBDb21wb25lbnQgfCBQT0pPQ29tcG9uZW50LFxuICAgIHB1YmxpYyBwcm9wczogbnVsbCB8IFByb3BlcnRpZXMsXG4gICAgcHVibGljIGNoaWxkcmVuOiBDaGlsZHJlbixcbiAgICBwdWJsaWMgZG9tPzogRG9tRWxlbWVudCxcbiAgICBwdWJsaWMgaXNTVkc/OiBib29sZWFuXG4gICkge31cbn1cblxuZXhwb3J0IGludGVyZmFjZSBWbm9kZVdpdGhEb20gZXh0ZW5kcyBWbm9kZSB7XG4gIHRhZzogc3RyaW5nO1xuICBkb206IERvbUVsZW1lbnQ7XG4gIHByb3BzOiBQcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgY29uc3QgaXNQT0pPQ29tcG9uZW50ID0gKGNvbXBvbmVudDogdW5rbm93bik6IGNvbXBvbmVudCBpcyBQT0pPQ29tcG9uZW50ID0+XG4gIEJvb2xlYW4oY29tcG9uZW50ICYmIHR5cGVvZiBjb21wb25lbnQgPT09IFwib2JqZWN0XCIgJiYgXCJ2aWV3XCIgaW4gY29tcG9uZW50KTtcblxuZXhwb3J0IGNvbnN0IGlzQ29tcG9uZW50ID0gKGNvbXBvbmVudDogdW5rbm93bik6IGNvbXBvbmVudCBpcyBDb21wb25lbnQgPT5cbiAgQm9vbGVhbih0eXBlb2YgY29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIgfHwgaXNQT0pPQ29tcG9uZW50KGNvbXBvbmVudCkpO1xuZXhwb3J0IGNvbnN0IGlzVm5vZGUgPSAob2JqZWN0PzogdW5rbm93bik6IG9iamVjdCBpcyBWbm9kZSA9PiBvYmplY3QgaW5zdGFuY2VvZiBWbm9kZTtcblxuZXhwb3J0IGNvbnN0IGlzVm5vZGVDb21wb25lbnQgPSAob2JqZWN0PzogdW5rbm93bik6IG9iamVjdCBpcyBWbm9kZUNvbXBvbmVudEludGVyZmFjZSA9PiB7XG4gIHJldHVybiBpc1Zub2RlKG9iamVjdCkgJiYgaXNDb21wb25lbnQob2JqZWN0LnRhZyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdih0YWdPckNvbXBvbmVudDogc3RyaW5nIHwgVmFseXJpYW5Db21wb25lbnQsIHByb3BzOiBQcm9wZXJ0aWVzIHwgbnVsbCwgLi4uY2hpbGRyZW46IENoaWxkcmVuKSB7XG4gIHJldHVybiBuZXcgVm5vZGUodGFnT3JDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbik7XG59XG5cbnYuZnJhZ21lbnQgPSAoXzogUHJvcGVydGllcywgLi4uY2hpbGRyZW46IENoaWxkcmVuKSA9PiBjaGlsZHJlbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGhpZHJhdGVEb21Ub1Zub2RlKGRvbTogYW55KTogVm5vZGVXaXRoRG9tIHwgdm9pZCB7XG4gIGlmIChkb20ubm9kZVR5cGUgPT09IDMpIHtcbiAgICByZXR1cm4gZG9tLm5vZGVWYWx1ZTtcbiAgfVxuXG4gIGlmIChkb20ubm9kZVR5cGUgPT09IDEpIHtcbiAgICBjb25zdCB0YWcgPSBkb20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBwcm9wcyA9IHt9IGFzIFByb3BlcnRpZXM7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXSBhcyBDaGlsZHJlbjtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gZG9tLmNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZERvbSA9IGRvbS5jaGlsZE5vZGVzW2ldO1xuICAgICAgaWYgKGNoaWxkRG9tLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGREb20ubm9kZVZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGREb20ubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgY29uc3QgY2hpbGRWbm9kZSA9IGhpZHJhdGVEb21Ub1Zub2RlKGNoaWxkRG9tKTtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZFZub2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gZG9tLmF0dHJpYnV0ZXM7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgYXR0ciA9IGF0dHJpYnV0ZXNbaV07XG4gICAgICBwcm9wc1thdHRyLm5vZGVOYW1lXSA9IGF0dHIubm9kZVZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZub2RlID0gbmV3IFZub2RlKHRhZywgcHJvcHMsIGNoaWxkcmVuKTtcbiAgICB2bm9kZS5kb20gPSBkb207XG4gICAgdm5vZGUuaXNTVkcgPSB0YWcgPT09IFwic3ZnXCI7XG4gICAgcmV0dXJuIHZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ1c3QoaHRtbFN0cmluZzogc3RyaW5nKSB7XG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGRpdi5pbm5lckhUTUwgPSBodG1sU3RyaW5nLnRyaW0oKTtcbiAgcmV0dXJuIEFycmF5LmZyb20oZGl2LmNoaWxkTm9kZXMpLm1hcChoaWRyYXRlRG9tVG9Wbm9kZSk7XG59XG5cbmxldCBtYWluQ29tcG9uZW50OiBWbm9kZUNvbXBvbmVudEludGVyZmFjZSB8IG51bGwgPSBudWxsO1xubGV0IG1haW5Wbm9kZTogVm5vZGVXaXRoRG9tIHwgbnVsbCA9IG51bGw7XG5sZXQgaXNNb3VudGVkID0gZmFsc2U7XG5cbmV4cG9ydCBjb25zdCBjdXJyZW50ID0ge1xuICB2bm9kZTogbnVsbCBhcyBWbm9kZSB8IG51bGwsXG4gIGNvbXBvbmVudDogbnVsbCBhcyBWYWx5cmlhbkNvbXBvbmVudCB8IG51bGwsXG4gIGV2ZW50OiBudWxsIGFzIEV2ZW50IHwgbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IHJlc2VydmVkUHJvcHMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICBcImtleVwiLFxuICBcInN0YXRlXCIsXG4gIFwidi1rZWVwXCIsXG4gIFwidi10ZXh0XCIsXG4gIFwidi1pZlwiLFxuICBcInYtZm9yXCIsXG4gIFwidi1zaG93XCIsXG4gIFwidi1jbGFzc1wiLFxuICBcInYtaHRtbFwiLFxuICBcInYtbW9kZWxcIixcbiAgXCJ2LWNyZWF0ZVwiLFxuICBcInYtdXBkYXRlXCIsXG4gIFwidi1jbGVhbnVwXCJcbl0pO1xuXG5jb25zdCBvbkNsZWFudXBTZXQgPSBuZXcgU2V0PEZ1bmN0aW9uPigpO1xuY29uc3Qgb25Nb3VudFNldCA9IG5ldyBTZXQ8RnVuY3Rpb24+KCk7XG5jb25zdCBvblVwZGF0ZVNldCA9IG5ldyBTZXQ8RnVuY3Rpb24+KCk7XG5jb25zdCBvblVubW91bnRTZXQgPSBuZXcgU2V0PEZ1bmN0aW9uPigpO1xuZXhwb3J0IGNvbnN0IG9uTW91bnQgPSAoY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiAhaXNNb3VudGVkICYmIG9uTW91bnRTZXQuYWRkKGNhbGxiYWNrKTtcbmV4cG9ydCBjb25zdCBvblVwZGF0ZSA9IChjYWxsYmFjazogRnVuY3Rpb24pID0+IG9uVXBkYXRlU2V0LmFkZChjYWxsYmFjayk7XG5leHBvcnQgY29uc3Qgb25DbGVhbnVwID0gKGNhbGxiYWNrOiBGdW5jdGlvbikgPT4gb25DbGVhbnVwU2V0LmFkZChjYWxsYmFjayk7XG5leHBvcnQgY29uc3Qgb25Vbm1vdW50ID0gKGNhbGxiYWNrOiBGdW5jdGlvbikgPT4gIWlzTW91bnRlZCAmJiBvblVubW91bnRTZXQuYWRkKGNhbGxiYWNrKTtcbmNvbnN0IGNhbGxTZXQgPSAoc2V0OiBTZXQ8RnVuY3Rpb24+KSA9PiB7XG4gIGZvciAoY29uc3QgY2FsbGJhY2sgb2Ygc2V0KSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxuICBzZXQuY2xlYXIoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXJlY3RpdmVzOiBSZWNvcmQ8c3RyaW5nLCBEaXJlY3RpdmU+ID0ge1xuICBcInYtaWZcIjogKHZhbHVlLCB2bm9kZSkgPT4ge1xuICAgIGlmICghQm9vbGVhbih2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB2bm9kZS5kb20/LnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICBwYXJlbnROb2RlLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSwgdm5vZGUuZG9tKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcblxuICBcInYtc2hvd1wiOiAodmFsdWUsIHZub2RlKSA9PiB7XG4gICAgY29uc3QgYm9vbCA9IEJvb2xlYW4odmFsdWUpO1xuICAgIChcbiAgICAgIHZub2RlLmRvbSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgc3R5bGU6IHsgZGlzcGxheTogc3RyaW5nIH07XG4gICAgICB9XG4gICAgKS5zdHlsZS5kaXNwbGF5ID0gYm9vbCA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgfSxcblxuICBcInYtaHRtbFwiOiAodmFsdWUsIHZub2RlKSA9PiB7XG4gICAgdm5vZGUuY2hpbGRyZW4gPSB0cnVzdCh2YWx1ZSBhcyBzdHJpbmcpO1xuICB9LFxuXG4gIC8vIFRoZSBcInYtbW9kZWxcIiBkaXJlY3RpdmUgYmluZHMgdGhlIHZhbHVlIG9mIGFuIGlucHV0IGVsZW1lbnQgdG8gYSBtb2RlbCBwcm9wZXJ0eVxuICBcInYtbW9kZWxcIjogKG1vZGVsLCB2bm9kZSkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBpZiAoXCJuYW1lXCIgaW4gdm5vZGUucHJvcHMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gdm5vZGUucHJvcHMubmFtZTtcbiAgICBsZXQgZXZlbnQgPSBcIm9uaW5wdXRcIjtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgbW9kZWwgcHJvcGVydHkgd2hlbiB0aGUgaW5wdXQgZWxlbWVudCdzIHZhbHVlIGNoYW5nZXNcbiAgICBsZXQgaGFuZGxlciA9IChlOiBFdmVudCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWUpO1xuICAgIGlmICh2bm9kZS50YWcgPT09IFwiaW5wdXRcIikge1xuICAgICAgLy8gRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGlucHV0IGVsZW1lbnQsIHVzZSBhIGRpZmZlcmVudCBoYW5kbGVyIGZ1bmN0aW9uXG4gICAgICBzd2l0Y2ggKHZub2RlLnByb3BzLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNoZWNrYm94XCI6IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbFtwcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgbW9kZWwgcHJvcGVydHkgaXMgYW4gYXJyYXksIGFkZCBvciByZW1vdmUgdGhlIHZhbHVlIGZyb20gdGhlIGFycmF5IHdoZW4gdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQgb3IgdW5jaGVja2VkXG4gICAgICAgICAgICBoYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IGlkeCA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZhbCk7XG4gICAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgaW4gdGhlIGFycmF5LCBzZXQgdGhlIGNoZWNrYm94IHRvIGJlIGNoZWNrZWRcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2Yodm5vZGUuZG9tLnZhbHVlKSAhPT0gLTE7XG4gICAgICAgICAgfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gdm5vZGUucHJvcHMpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dCBlbGVtZW50IGhhcyBhIFwidmFsdWVcIiBhdHRyaWJ1dGUsIHVzZSBpdCB0byBkZXRlcm1pbmUgdGhlIGNoZWNrZWQgc3RhdGVcbiAgICAgICAgICAgIGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLnByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldID0gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0gPSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldID09PSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gXCJ2YWx1ZVwiIGF0dHJpYnV0ZSwgdXNlIGEgYm9vbGVhbiB2YWx1ZSBmb3IgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgICAgICBoYW5kbGVyID0gKCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9ICFtb2RlbFtwcm9wZXJ0eV0pO1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNldCB0aGUgXCJjaGVja2VkXCIgYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBlbGVtZW50XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCB2YWx1ZSwgdm5vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJyYWRpb1wiOiB7XG4gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSByYWRpbyBidXR0b24sIHNldCB0aGUgXCJjaGVja2VkXCIgYXR0cmlidXRlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZWwgcHJvcGVydHlcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICBzaGFyZWRTZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIG1vZGVsW3Byb3BlcnR5XSA9PT0gdm5vZGUuZG9tLnZhbHVlLCB2bm9kZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIC8vIEZvciBhbGwgb3RoZXIgaW5wdXQgdHlwZXMsIHNldCB0aGUgXCJ2YWx1ZVwiIGF0dHJpYnV0ZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKFwidmFsdWVcIiwgbW9kZWxbcHJvcGVydHldLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSBzZWxlY3QgZWxlbWVudCwgdXNlIHRoZSBcImNsaWNrXCIgZXZlbnQgYnkgZGVmYXVsdFxuICAgICAgZXZlbnQgPSBcIm9uY2xpY2tcIjtcbiAgICAgIGlmICh2bm9kZS5wcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICAvLyBJZiB0aGUgc2VsZWN0IGVsZW1lbnQgYWxsb3dzIG11bHRpcGxlIHNlbGVjdGlvbnMsIHVwZGF0ZSB0aGUgbW9kZWwgcHJvcGVydHkgd2l0aCBhbiBhcnJheSBvZiBzZWxlY3RlZCB2YWx1ZXNcbiAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSAoZS50YXJnZXQgYXMgRG9tRWxlbWVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pLnZhbHVlO1xuICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBDdHJsIGtleSBpcyBwcmVzc2VkLCBhZGQgb3IgcmVtb3ZlIHRoZSB2YWx1ZSBmcm9tIHRoZSBhcnJheVxuICAgICAgICAgICAgY29uc3QgaWR4ID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBDdHJsIGtleSBpcyBub3QgcHJlc3NlZCwgc2V0IHRoZSBtb2RlbCBwcm9wZXJ0eSB0byBhbiBhcnJheSB3aXRoIHRoZSBzZWxlY3RlZCB2YWx1ZVxuICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnNwbGljZSgwLCBtb2RlbFtwcm9wZXJ0eV0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBTZXQgdGhlIFwic2VsZWN0ZWRcIiBhdHRyaWJ1dGUgb24gdGhlIG9wdGlvbnMgYmFzZWQgb24gd2hldGhlciB0aGV5IGFyZSBpbiB0aGUgbW9kZWwgcHJvcGVydHkgYXJyYXlcbiAgICAgICAgdm5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09IFwib3B0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gXCJ2YWx1ZVwiIGluIGNoaWxkLnByb3BzID8gY2hpbGQucHJvcHMudmFsdWUgOiBjaGlsZC5jaGlsZHJlbi5qb2luKFwiXCIpLnRyaW0oKTtcbiAgICAgICAgICAgIGNoaWxkLnByb3BzLnNlbGVjdGVkID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsdWUpICE9PSAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdCBlbGVtZW50IGRvZXMgbm90IGFsbG93IG11bHRpcGxlIHNlbGVjdGlvbnMsIHNldCB0aGUgXCJzZWxlY3RlZFwiIGF0dHJpYnV0ZSBvbiB0aGUgb3B0aW9ucyBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgIHZub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IFwidmFsdWVcIiBpbiBjaGlsZC5wcm9wcyA/IGNoaWxkLnByb3BzLnZhbHVlIDogY2hpbGQuY2hpbGRyZW4uam9pbihcIlwiKS50cmltKCk7XG4gICAgICAgICAgICBjaGlsZC5wcm9wcy5zZWxlY3RlZCA9IHZhbHVlID09PSBtb2RlbFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gXCJ0ZXh0YXJlYVwiKSB7XG4gICAgICAvLyBTZXQgdGhlIHRleHRhcmVhJ3MgY29udGVudCB0byB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICB2bm9kZS5jaGlsZHJlbiA9IFttb2RlbFtwcm9wZXJ0eV1dO1xuICAgIH1cblxuICAgIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBwcmV2IGhhbmRsZXIgaWYgYW55IHdpbGwgbm90IGJlIGNoYW5nZWQgYnkgdGhlIHVzZXIgYWNyb3NzIHBhdGNoc1xuICAgIGNvbnN0IHByZXZIYW5kbGVyID0gdm5vZGUucHJvcHNbZXZlbnRdO1xuXG4gICAgLy8gU2V0IHRoZSBldmVudCBoYW5kbGVyIG9uIHRoZSBlbGVtZW50XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgc2hhcmVkU2V0QXR0cmlidXRlKFxuICAgICAgZXZlbnQsXG4gICAgICAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgaGFuZGxlcihlKTtcblxuICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgaGFuZGxlciBpcyBkZWZpbmVkLCBjYWxsIGl0IGFmdGVyIHRoZSBtb2RlbCBoYXMgYmVlbiB1cGRhdGVkXG4gICAgICAgIGlmIChwcmV2SGFuZGxlcikge1xuICAgICAgICAgIHByZXZIYW5kbGVyKGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdm5vZGVcbiAgICApO1xuICB9LFxuXG4gIFwidi1jcmVhdGVcIjogKGNhbGxiYWNrLCB2bm9kZSwgb2xkUHJvcHMpID0+IHtcbiAgICBpZiAoIW9sZFByb3BzKSB7XG4gICAgICBjb25zdCBjbGVhbnVwID0gY2FsbGJhY2sodm5vZGUpO1xuXG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsZWFudXAoY2xlYW51cCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIFwidi11cGRhdGVcIjogKGNhbGxiYWNrLCB2bm9kZSwgb2xkUHJvcHMpID0+IHtcbiAgICBpZiAob2xkUHJvcHMpIHtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSBjYWxsYmFjayh2bm9kZSwgb2xkUHJvcHMpO1xuXG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsZWFudXAoY2xlYW51cCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIFwidi1jbGVhbnVwXCI6IChjYWxsYmFjaywgdm5vZGUpID0+IHtcbiAgICBvbkNsZWFudXAoKCkgPT4gY2FsbGJhY2sodm5vZGUpKTtcbiAgfSxcblxuICBcInYtY2xhc3NcIjogKHZhbHVlLCB2bm9kZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZub2RlLmRvbS5jbGFzc05hbWUgPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2bm9kZS5kb20uY2xhc3NOYW1lID0gdmFsdWUuam9pbihcIiBcIik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZub2RlLmRvbS5jbGFzc0xpc3Q7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdmFsdWUpIHtcbiAgICAgICAgY29uc3QgdmFsID0gdHlwZW9mIHZhbHVlW25hbWVdID09PSBcImZ1bmN0aW9uXCIgPyAodmFsdWVbbmFtZV0gYXMgRnVuY3Rpb24pKCkgOiB2YWx1ZVtuYW1lXTtcbiAgICAgICAgY2xhc3NMaXN0LnRvZ2dsZShuYW1lLCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvLyBGcmVxdWVudCB1c2VkIHByb3BlcnRpZXNcbiAgY2xhc3ModmFsdWUsIHZub2RlKSB7XG4gICAgaWYgKHZub2RlLmRvbS5jbGFzc05hbWUgIT09IHZhbHVlKSB7XG4gICAgICB2bm9kZS5kb20uY2xhc3NOYW1lID0gdmFsdWU7XG4gICAgfVxuICB9LFxuXG4gIGNsYXNzTmFtZSh2YWx1ZSwgdm5vZGUpIHtcbiAgICBkaXJlY3RpdmVzLmNsYXNzKHZhbHVlLCB2bm9kZSwgbnVsbCk7XG4gIH0sXG5cbiAgaWQ6ICh2YWx1ZSwgdm5vZGUpID0+IHtcbiAgICB2bm9kZS5kb20uaWQgPSB2YWx1ZTtcbiAgfSxcblxuICBzdHlsZTogKHZhbHVlLCB2bm9kZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZub2RlLmRvbS5zdHlsZSA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB2bm9kZS5kb20uc3R5bGUgPSBcIlwiO1xuICAgICAgY29uc3QgZG9tU3R5bGUgPSB2bm9kZS5kb20uc3R5bGU7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdmFsdWUpIHtcbiAgICAgICAgZG9tU3R5bGVbbmFtZV0gPSB2YWx1ZVtuYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmU6IERpcmVjdGl2ZSkge1xuICBjb25zdCBkaXJlY3RpdmVOYW1lID0gYHYtJHtuYW1lfWA7XG4gIGRpcmVjdGl2ZXNbZGlyZWN0aXZlTmFtZV0gPSBkaXJlY3RpdmU7XG4gIHJlc2VydmVkUHJvcHMuYWRkKGRpcmVjdGl2ZU5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcE5hbWVSZXNlcnZlZChuYW1lOiBzdHJpbmcpIHtcbiAgcmVzZXJ2ZWRQcm9wcy5hZGQobmFtZSk7XG59XG5cbmNvbnN0IGV2ZW50TGlzdGVuZXJOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5mdW5jdGlvbiBldmVudExpc3RlbmVyKGU6IEV2ZW50KSB7XG4gIGN1cnJlbnQuZXZlbnQgPSBlO1xuICBsZXQgZG9tID0gZS50YXJnZXQgYXMgRG9tRWxlbWVudDtcbiAgY29uc3QgbmFtZSA9IGBvbiR7ZS50eXBlfWA7XG5cbiAgd2hpbGUgKGRvbSkge1xuICAgIGNvbnN0IG9sZFByb3BzID0gZG9tLnByb3BzO1xuICAgIGlmIChvbGRQcm9wcyAmJiBvbGRQcm9wc1tuYW1lXSkge1xuICAgICAgb2xkUHJvcHNbbmFtZV0oZSwgZG9tKTtcblxuICAgICAgaWYgKCFlLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIHVwZGF0ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkb20gPSBkb20ucGFyZW50Tm9kZSBhcyBEb21FbGVtZW50O1xuICB9XG5cbiAgY3VycmVudC5ldmVudCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHNoYXJlZFNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG5ld1Zub2RlOiBWbm9kZVdpdGhEb20pOiB2b2lkIHwgYm9vbGVhbiB7XG4gIGNvbnN0IG5ld1Zub2RlRG9tID0gbmV3Vm5vZGUuZG9tO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpZiAoIWV2ZW50TGlzdGVuZXJOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIC8vIFdlIGF0dGFjaCB0aGUgZGVsZWdhdGVkIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBtYWluIHZub2RlIGRvbSBlbGVtZW50LCB3aGljaCBpcyB0aGUgcm9vdCBvZiB0aGUgY29tcG9uZW50XG4gICAgICAobWFpblZub2RlIGFzIFZub2RlV2l0aERvbSkuZG9tLmFkZEV2ZW50TGlzdGVuZXIobmFtZS5zbGljZSgyKSwgZXZlbnRMaXN0ZW5lcik7XG4gICAgICBldmVudExpc3RlbmVyTmFtZXMuYWRkKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmFtZSBpbiBuZXdWbm9kZURvbSkge1xuICAgIG5ld1Zub2RlRG9tW25hbWVdID0gdmFsdWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgIG5ld1Zub2RlRG9tLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdWbm9kZURvbS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBuZXdWbm9kZTogVm5vZGVXaXRoRG9tKTogdm9pZCB7XG4gIGlmICghcmVzZXJ2ZWRQcm9wcy5oYXMobmFtZSkpIHtcbiAgICBuZXdWbm9kZS5wcm9wc1tuYW1lXSA9IHZhbHVlO1xuICAgIHNoYXJlZFNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgbmV3Vm5vZGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGVzKG5ld1Zub2RlOiBWbm9kZVdpdGhEb20sIG9sZFByb3BzOiBQcm9wZXJ0aWVzIHwgbnVsbCk6IHZvaWQge1xuICBjb25zdCB2bm9kZURvbSA9IG5ld1Zub2RlLmRvbTtcbiAgY29uc3Qgdm5vZGVQcm9wcyA9IG5ld1Zub2RlLnByb3BzO1xuXG4gIGlmIChvbGRQcm9wcykge1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiBvbGRQcm9wcykge1xuICAgICAgaWYgKG5hbWUgaW4gdm5vZGVQcm9wcyA9PT0gZmFsc2UgJiYgIWV2ZW50TGlzdGVuZXJOYW1lcy5oYXMobmFtZSkgJiYgIXJlc2VydmVkUHJvcHMuaGFzKG5hbWUpKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHZub2RlRG9tKSB7XG4gICAgICAgICAgdm5vZGVEb21bbmFtZV0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZub2RlRG9tLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgbmFtZSBpbiB2bm9kZVByb3BzKSB7XG4gICAgaWYgKGRpcmVjdGl2ZXNbbmFtZV0pIHtcbiAgICAgIGlmIChkaXJlY3RpdmVzW25hbWVdKHZub2RlUHJvcHNbbmFtZV0sIG5ld1Zub2RlLCBvbGRQcm9wcykgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNlcnZlZFByb3BzLmhhcyhuYW1lKSkge1xuICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKG5hbWUsIHZub2RlUHJvcHNbbmFtZV0sIG5ld1Zub2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnOiBzdHJpbmcsIGlzU1ZHOiBib29sZWFuKTogRG9tRWxlbWVudCB7XG4gIHJldHVybiBpc1NWR1xuICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdGFnKVxuICAgIDogKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKSBhcyBEb21FbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZmxhdFRyZWUobmV3Vm5vZGU6IFZub2RlV2l0aERvbSkge1xuICBjdXJyZW50LnZub2RlID0gbmV3Vm5vZGU7XG5cbiAgaWYgKFwidi1mb3JcIiBpbiBuZXdWbm9kZS5wcm9wcykge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgY29uc3Qgc2V0ID0gbmV3Vm5vZGUucHJvcHNbXCJ2LWZvclwiXTtcbiAgICBjb25zdCBsID0gc2V0Lmxlbmd0aDtcbiAgICBjb25zdCBjYWxsYmFjayA9IG5ld1Zub2RlLmNoaWxkcmVuWzBdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IG5ld0NoaWxkID0gY2FsbGJhY2soc2V0W2ldLCBpKTtcbiAgICAgIGlmIChuZXdDaGlsZCBpbnN0YW5jZW9mIFZub2RlKSB7XG4gICAgICAgIG5ld0NoaWxkLnByb3BzID0gbmV3Q2hpbGQucHJvcHMgfHwge307XG4gICAgICAgIG5ld0NoaWxkLmlzU1ZHID0gbmV3Vm5vZGUuaXNTVkcgfHwgbmV3Q2hpbGQudGFnID09PSBcInN2Z1wiO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW5baV0gPSBuZXdDaGlsZDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICBsZXQgaSA9IDA7XG4gIGNvbnN0IG9yaWdpbmFsQ2hpbGRyZW4gPSBuZXdWbm9kZS5jaGlsZHJlbjtcbiAgbGV0IGNoaWxkcmVuID0gb3JpZ2luYWxDaGlsZHJlbjtcblxuICB3aGlsZSAoaSA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgIGNvbnN0IG5ld0NoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICBpZiAobmV3Q2hpbGQgPT0gbnVsbCkge1xuICAgICAgaWYgKGNoaWxkcmVuID09PSBvcmlnaW5hbENoaWxkcmVuKSB7XG4gICAgICAgIGNoaWxkcmVuID0gWy4uLm9yaWdpbmFsQ2hpbGRyZW5dO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmV3Q2hpbGQpKSB7XG4gICAgICBpZiAoY2hpbGRyZW4gPT09IG9yaWdpbmFsQ2hpbGRyZW4pIHtcbiAgICAgICAgY2hpbGRyZW4gPSBbLi4ub3JpZ2luYWxDaGlsZHJlbl07XG4gICAgICB9XG4gICAgICBjaGlsZHJlbi5zcGxpY2UoaSwgMSwgLi4ubmV3Q2hpbGQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgIG5ld0NoaWxkLnByb3BzID0gbmV3Q2hpbGQucHJvcHMgfHwge307XG4gICAgICBuZXdDaGlsZC5pc1NWRyA9IG5ld1Zub2RlLmlzU1ZHIHx8IG5ld0NoaWxkLnRhZyA9PT0gXCJzdmdcIjtcblxuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZC50YWcgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKGNoaWxkcmVuID09PSBvcmlnaW5hbENoaWxkcmVuKSB7XG4gICAgICAgICAgY2hpbGRyZW4gPSBbLi4ub3JpZ2luYWxDaGlsZHJlbl07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb21wb25lbnQgPSAoY3VycmVudC5jb21wb25lbnQgPSBuZXdDaGlsZC50YWcpO1xuXG4gICAgICAgIGNoaWxkcmVuW2ldID0gKGlzUE9KT0NvbXBvbmVudChjb21wb25lbnQpID8gY29tcG9uZW50LnZpZXcgOiBjb21wb25lbnQpLmJpbmQoY29tcG9uZW50KShcbiAgICAgICAgICBuZXdDaGlsZC5wcm9wcyxcbiAgICAgICAgICBuZXdDaGlsZC5jaGlsZHJlblxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmV3RWxlbWVudChuZXdDaGlsZDogVm5vZGVXaXRoRG9tLCBuZXdWbm9kZTogVm5vZGVXaXRoRG9tLCBvbGRDaGlsZDogRG9tRWxlbWVudCB8IG51bGwpIHtcbiAgY29uc3QgZG9tID0gY3JlYXRlRWxlbWVudChuZXdDaGlsZC50YWcsIG5ld0NoaWxkLmlzU1ZHIGFzIGJvb2xlYW4pO1xuICBpZiAob2xkQ2hpbGQpIHtcbiAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKGRvbSwgb2xkQ2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChkb20pO1xuICB9XG4gIG5ld0NoaWxkLmRvbSA9IGRvbTtcbiAgdXBkYXRlQXR0cmlidXRlcyhuZXdDaGlsZCwgbnVsbCk7XG4gIG5ld0NoaWxkLmRvbS5wcm9wcyA9IG5ld0NoaWxkLnByb3BzO1xuICBpZiAoXCJ2LXRleHRcIiBpbiBuZXdDaGlsZC5wcm9wcykge1xuICAgIG5ld0NoaWxkLmRvbS50ZXh0Q29udGVudCA9IG5ld0NoaWxkLnByb3BzW1widi10ZXh0XCJdO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNoaWxkcmVuID0gZmxhdFRyZWUobmV3Q2hpbGQpO1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgbmV3Q2hpbGQuZG9tLnRleHRDb250ZW50ID0gXCJcIjtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChjaGlsZHJlbltpXSBpbnN0YW5jZW9mIFZub2RlID09PSBmYWxzZSkge1xuICAgICAgbmV3Q2hpbGQuZG9tLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNoaWxkcmVuW2ldKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY3JlYXRlTmV3RWxlbWVudChjaGlsZHJlbltpXSwgbmV3Q2hpbGQsIG51bGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhdGNoS2V5ZWQobmV3Vm5vZGU6IFZub2RlV2l0aERvbSwgY2hpbGRyZW46IENoaWxkcmVuKSB7XG4gIGNvbnN0IG9sZFRyZWUgPSBbLi4uQXJyYXkuZnJvbShuZXdWbm9kZS5kb20uY2hpbGROb2RlcyldIGFzIHVua25vd24gYXMgRG9tRWxlbWVudFtdO1xuICBjb25zdCBjaGlsZE5vZGVzID0gbmV3Vm5vZGUuZG9tLmNoaWxkTm9kZXM7XG4gIGNvbnN0IG9sZEtleWVkTGlzdDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICBjb25zdCBuZXdLZXllZExpc3Q6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IG9sZFRyZWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3Qgb2xkUHJvcHMgPSBvbGRUcmVlW2ldLnByb3BzO1xuICAgIGlmIChvbGRQcm9wcykge1xuICAgICAgb2xkS2V5ZWRMaXN0W29sZFByb3BzLmtleSBhcyBzdHJpbmddID0gaTtcbiAgICB9XG5cbiAgICBpZiAoaSA8IGNoaWxkcmVuLmxlbmd0aCAmJiBjaGlsZHJlbltpXSBpbnN0YW5jZW9mIFZub2RlKSB7XG4gICAgICBuZXdLZXllZExpc3RbY2hpbGRyZW5baV0ucHJvcHMua2V5IGFzIHN0cmluZ10gPSBpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3QgbmV3Q2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICBjb25zdCBvbGRDaGlsZCA9IG9sZFRyZWVbb2xkS2V5ZWRMaXN0W25ld0NoaWxkLnByb3BzLmtleSBhcyBzdHJpbmddXTtcblxuICAgIGlmICghb2xkQ2hpbGQpIHtcbiAgICAgIGNyZWF0ZU5ld0VsZW1lbnQobmV3Q2hpbGQsIG5ld1Zub2RlLCBjaGlsZE5vZGVzW2ldIGFzIERvbUVsZW1lbnQgfCBudWxsKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG5ld0NoaWxkLmRvbSA9IG9sZENoaWxkO1xuICAgIGNvbnN0IGN1cnJlbnRDaGlsZCA9IGNoaWxkTm9kZXNbaV07XG4gICAgaWYgKCFjdXJyZW50Q2hpbGQpIHtcbiAgICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChvbGRDaGlsZCk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50Q2hpbGQgIT09IG9sZENoaWxkKSB7XG4gICAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKG9sZENoaWxkLCBjdXJyZW50Q2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChcInYta2VlcFwiIGluIG5ld0NoaWxkLnByb3BzID09PSBmYWxzZSB8fCBvbGRDaGlsZC5wcm9wc1tcInYta2VlcFwiXSAhPT0gbmV3Q2hpbGQucHJvcHNbXCJ2LWtlZXBcIl0pIHtcbiAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMobmV3Q2hpbGQgYXMgVm5vZGVXaXRoRG9tLCBvbGRDaGlsZC5wcm9wcyk7XG4gICAgICBvbGRDaGlsZC5wcm9wcyA9IG5ld0NoaWxkLnByb3BzO1xuXG4gICAgICBpZiAoXCJ2LXRleHRcIiBpbiBuZXdDaGlsZC5wcm9wcykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgIGlmIChvbGRDaGlsZC50ZXh0Q29udGVudCAhPSBuZXdDaGlsZC5wcm9wc1tcInYtdGV4dFwiXSkge1xuICAgICAgICAgIG9sZENoaWxkLnRleHRDb250ZW50ID0gbmV3Q2hpbGQucHJvcHNbXCJ2LXRleHRcIl07XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIHBhdGNoKG5ld0NoaWxkIGFzIFZub2RlV2l0aERvbSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IGNoaWxkcmVuLmxlbmd0aCwgbCA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY2hpbGROb2Rlc1tpXT8ucmVtb3ZlKCk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHBhdGNoKG5ld1Zub2RlOiBWbm9kZVdpdGhEb20pOiB2b2lkIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBmbGF0VHJlZShuZXdWbm9kZSk7XG5cbiAgY29uc3QgZG9tID0gbmV3Vm5vZGUuZG9tO1xuXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoZG9tLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICBkb20udGV4dENvbnRlbnQgPSBcIlwiO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvbGREb21DaGlsZHJlbiA9IGRvbS5jaGlsZE5vZGVzIGFzIHVua25vd24gYXMgRG9tRWxlbWVudFtdO1xuICBjb25zdCBvbGRDaGlsZHJlbkxlbmd0aCA9IG9sZERvbUNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKG9sZENoaWxkcmVuTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0T2xkUHJvcHMgPSBvbGREb21DaGlsZHJlblswXS5wcm9wcztcbiAgICBjb25zdCBmaXJzdFZub2RlID0gY2hpbGRyZW5bMF0gYXMgVm5vZGVXaXRoRG9tO1xuICAgIGlmIChmaXJzdE9sZFByb3BzICYmIGZpcnN0Vm5vZGUgaW5zdGFuY2VvZiBWbm9kZSAmJiBcImtleVwiIGluIGZpcnN0Vm5vZGUucHJvcHMgJiYgXCJrZXlcIiBpbiBmaXJzdE9sZFByb3BzKSB7XG4gICAgICBwYXRjaEtleWVkKG5ld1Zub2RlLCBjaGlsZHJlbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hpbGRyZW5MZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChvbGRDaGlsZHJlbkxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNoaWxkcmVuW2ldIGluc3RhbmNlb2YgVm5vZGUgPT09IGZhbHNlKSB7XG4gICAgICAgIGRvbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZHJlbltpXSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNyZWF0ZU5ld0VsZW1lbnQoY2hpbGRyZW5baV0sIG5ld1Zub2RlLCBudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbmV3Q2hpbGQgPSBjaGlsZHJlbltpXSBhcyBWbm9kZVdpdGhEb207XG4gICAgY29uc3QgaXNUZXh0ID0gbmV3Q2hpbGQgaW5zdGFuY2VvZiBWbm9kZSA9PT0gZmFsc2U7XG4gICAgY29uc3Qgb2xkQ2hpbGQgPSBvbGREb21DaGlsZHJlbltpXTtcblxuICAgIGlmICghb2xkQ2hpbGQpIHtcbiAgICAgIGlmIChpc1RleHQpIHtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld0NoaWxkIGFzIHVua25vd24gYXMgc3RyaW5nKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjcmVhdGVOZXdFbGVtZW50KG5ld0NoaWxkIGFzIFZub2RlV2l0aERvbSwgbmV3Vm5vZGUsIG51bGwpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGlzVGV4dCkge1xuICAgICAgaWYgKG9sZENoaWxkLm5vZGVUeXBlICE9PSAzKSB7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3Q2hpbGQgYXMgdW5rbm93biBhcyBzdHJpbmcpLCBvbGRDaGlsZCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICBpZiAob2xkQ2hpbGQubm9kZVZhbHVlICE9IChuZXdDaGlsZCBhcyB1bmtub3duIGFzIHN0cmluZykpIHtcbiAgICAgICAgb2xkQ2hpbGQubm9kZVZhbHVlID0gbmV3Q2hpbGQgYXMgdW5rbm93biBhcyBzdHJpbmc7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoXCJ2LWtlZXBcIiBpbiBuZXdDaGlsZC5wcm9wcykge1xuICAgICAgaWYgKG9sZENoaWxkLnByb3BzICYmIG9sZENoaWxkLnByb3BzW1widi1rZWVwXCJdID09PSBuZXdDaGlsZC5wcm9wc1tcInYta2VlcFwiXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE9sZENoaWxkID0gb2xkRG9tQ2hpbGRyZW5baSArIDFdO1xuICAgICAgaWYgKG5leHRPbGRDaGlsZCAmJiBuZXh0T2xkQ2hpbGQucHJvcHMgJiYgbmV4dE9sZENoaWxkLnByb3BzW1widi1rZWVwXCJdID09PSBuZXdDaGlsZC5wcm9wc1tcInYta2VlcFwiXSkge1xuICAgICAgICBvbGRDaGlsZC5yZW1vdmUoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld0NoaWxkLnRhZyAhPT0gb2xkQ2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgY3JlYXRlTmV3RWxlbWVudChuZXdDaGlsZCwgbmV3Vm5vZGUsIG9sZENoaWxkKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG5ld0NoaWxkLmRvbSA9IG9sZENoaWxkO1xuICAgIHVwZGF0ZUF0dHJpYnV0ZXMobmV3Q2hpbGQsIG9sZENoaWxkLnByb3BzIHx8IG51bGwpO1xuICAgIG9sZENoaWxkLnByb3BzID0gbmV3Q2hpbGQucHJvcHM7XG4gICAgaWYgKFwidi10ZXh0XCIgaW4gbmV3Q2hpbGQucHJvcHMpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgIGlmIChuZXdDaGlsZC5kb20udGV4dENvbnRlbnQgIT0gbmV3Q2hpbGQucHJvcHNbXCJ2LXRleHRcIl0pIHtcbiAgICAgICAgbmV3Q2hpbGQuZG9tLnRleHRDb250ZW50ID0gbmV3Q2hpbGQucHJvcHNbXCJ2LXRleHRcIl07XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcGF0Y2gobmV3Q2hpbGQpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IGNoaWxkcmVuTGVuZ3RoLCBsID0gb2xkRG9tQ2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgb2xkRG9tQ2hpbGRyZW5baV0/LnJlbW92ZSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWbm9kZSh2bm9kZTogVm5vZGVXaXRoRG9tKTogc3RyaW5nIHwgdm9pZCB7XG4gIGNhbGxTZXQob25DbGVhbnVwU2V0KTtcbiAgdm5vZGUucHJvcHMgPSB2bm9kZS5wcm9wcyB8fCB7fTtcbiAgcGF0Y2godm5vZGUpO1xuICBjYWxsU2V0KGlzTW91bnRlZCA/IG9uVXBkYXRlU2V0IDogb25Nb3VudFNldCk7XG4gIGlzTW91bnRlZCA9IHRydWU7XG4gIGN1cnJlbnQudm5vZGUgPSBudWxsO1xuICBjdXJyZW50LmNvbXBvbmVudCA9IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGUoKTogc3RyaW5nIHtcbiAgaWYgKG1haW5Wbm9kZSkge1xuICAgIG1haW5Wbm9kZS5jaGlsZHJlbiA9IFttYWluQ29tcG9uZW50XTtcbiAgICB1cGRhdGVWbm9kZShtYWluVm5vZGUgYXMgVm5vZGVXaXRoRG9tKTtcbiAgICBpZiAoaXNOb2RlSnMpIHtcbiAgICAgIHJldHVybiBtYWluVm5vZGUuZG9tLmlubmVySFRNTDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59XG5cbmxldCBkZWJvdW5jZWRVcGRhdGVUaW1lb3V0OiBhbnk7XG5cbmNvbnN0IGNsZWFyRGVib3VuY2VkVXBkYXRlTWV0aG9kID0gaXNOb2RlSnMgPyBjbGVhclRpbWVvdXQgOiBjYW5jZWxBbmltYXRpb25GcmFtZTtcbmNvbnN0IHNldERlYm91bmNlZFVwZGF0ZU1ldGhvZCA9IGlzTm9kZUpzID8gKCkgPT4gc2V0VGltZW91dCh1cGRhdGUsIDUpIDogKCkgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZWRVcGRhdGUoKSB7XG4gIGNsZWFyRGVib3VuY2VkVXBkYXRlTWV0aG9kKGRlYm91bmNlZFVwZGF0ZVRpbWVvdXQpO1xuICBkZWJvdW5jZWRVcGRhdGVUaW1lb3V0ID0gc2V0RGVib3VuY2VkVXBkYXRlTWV0aG9kKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bm1vdW50KCkge1xuICBpZiAobWFpblZub2RlKSB7XG4gICAgbWFpbkNvbXBvbmVudCA9IHYoKCkgPT4gbnVsbCwge30pIGFzIFZub2RlQ29tcG9uZW50SW50ZXJmYWNlO1xuICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZSgpO1xuICAgIGNhbGxTZXQob25Vbm1vdW50U2V0KTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZXZlbnRMaXN0ZW5lck5hbWVzKSB7XG4gICAgICBtYWluVm5vZGUuZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZS5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLCBldmVudExpc3RlbmVyKTtcbiAgICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkoZXZlbnRMaXN0ZW5lck5hbWVzLCBuYW1lKTtcbiAgICB9XG5cbiAgICBtYWluQ29tcG9uZW50ID0gbnVsbDtcbiAgICBtYWluVm5vZGUgPSBudWxsO1xuICAgIGlzTW91bnRlZCA9IGZhbHNlO1xuICAgIGN1cnJlbnQudm5vZGUgPSBudWxsO1xuICAgIGN1cnJlbnQuY29tcG9uZW50ID0gbnVsbDtcbiAgICBjdXJyZW50LmV2ZW50ID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3VudChkb206IHN0cmluZyB8IERvbUVsZW1lbnQsIGNvbXBvbmVudDogVmFseXJpYW5Db21wb25lbnQgfCBWbm9kZUNvbXBvbmVudEludGVyZmFjZSB8IGFueSkge1xuICBjb25zdCBjb250YWluZXIgPVxuICAgIHR5cGVvZiBkb20gPT09IFwic3RyaW5nXCIgPyAoaXNOb2RlSnMgPyBjcmVhdGVFbGVtZW50KGRvbSwgZG9tID09PSBcInN2Z1wiKSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZG9tKSkgOiBkb207XG5cbiAgaWYgKGlzQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcbiAgICBtYWluQ29tcG9uZW50ID0gdihjb21wb25lbnQsIHt9LCBbXSkgYXMgVm5vZGVDb21wb25lbnRJbnRlcmZhY2U7XG4gIH0gZWxzZSBpZiAoaXNWbm9kZUNvbXBvbmVudChjb21wb25lbnQpKSB7XG4gICAgbWFpbkNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgfSBlbHNlIHtcbiAgICBtYWluQ29tcG9uZW50ID0gdigoKSA9PiBjb21wb25lbnQsIHt9LCBbXSkgYXMgVm5vZGVDb21wb25lbnRJbnRlcmZhY2U7XG4gIH1cblxuICBtYWluVm5vZGUgPSBoaWRyYXRlRG9tVG9Wbm9kZShjb250YWluZXIpIGFzIFZub2RlV2l0aERvbTtcbiAgcmV0dXJuIHVwZGF0ZSgpO1xufVxuIl0sIm1hcHBpbmdzIjoiTUF3Q08sSUFBTUEsRUFBV0MsUUFBMkIsb0JBQVpDLFNBQTJCQSxRQUFRQyxVQUFZRCxRQUFRQyxTQUFTQyxNQUUxRkMsRUFBTixNQUNMLFdBQUFDLENBQ1NDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEdBSkFDLEtBQUFMLE1BQ0FLLEtBQUFKLFFBQ0FJLEtBQUFILFdBQ0FHLEtBQUFGLE1BQ0FFLEtBQUFELE9BQ04sR0FTUUUsRUFBbUJDLEdBQzlCYixRQUFRYSxHQUFrQyxpQkFBZEEsR0FBMEIsU0FBVUEsR0FFckRDLEVBQWVELEdBQzFCYixRQUE2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
|