diff --git a/dist/bundle.js b/dist/bundle.js index c85699e..f19a2b8 100644 --- a/dist/bundle.js +++ b/dist/bundle.js @@ -1 +1,2 @@ -(()=>{var e={806:e=>{window,e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=8)}([function(e,t,n){"use strict";n.r(t),n.d(t,"render",(function(){return R})),n.d(t,"hydrate",(function(){return F})),n.d(t,"createElement",(function(){return h})),n.d(t,"h",(function(){return h})),n.d(t,"Fragment",(function(){return m})),n.d(t,"createRef",(function(){return y})),n.d(t,"isValidElement",(function(){return o})),n.d(t,"Component",(function(){return g})),n.d(t,"cloneElement",(function(){return U})),n.d(t,"createContext",(function(){return B})),n.d(t,"toChildArray",(function(){return O})),n.d(t,"__u",(function(){return L})),n.d(t,"options",(function(){return r}));var r,o,i,u,a,l,c,s={},f=[],d=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function _(e,t){for(var n in t)e[n]=t[n];return e}function p(e){var t=e.parentNode;t&&t.removeChild(e)}function h(e,t,n){var r,o,i,u=arguments,a={};for(i in t)"key"==i?r=t[i]:"ref"==i?o=t[i]:a[i]=t[i];if(arguments.length>3)for(n=[n],i=3;i1&&k(o,t,n),t=A(n,o,o,e.__k,null,o.__e,t),"function"==typeof e.type&&(e.__d=t)))}function I(e,t,n,o,i,u,a,l,c){var s,f,d,p,h,v,y,b,x,w,E,O=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(c=n.__h,l=t.__e=n.__e,t.__h=null,u=[l]),(s=r.__b)&&s(t);try{e:if("function"==typeof O){if(b=t.props,x=(s=O.contextType)&&o[s.__c],w=s?x?x.props.value:s.__:o,n.__c?y=(f=t.__c=n.__c).__=f.__E:("prototype"in O&&O.prototype.render?t.__c=f=new O(b,w):(t.__c=f=new g(b,w),f.constructor=O,f.render=N),x&&x.sub(f),f.props=b,f.state||(f.state={}),f.context=w,f.__n=o,d=f.__d=!0,f.__h=[]),null==f.__s&&(f.__s=f.state),null!=O.getDerivedStateFromProps&&(f.__s==f.state&&(f.__s=_({},f.__s)),_(f.__s,O.getDerivedStateFromProps(b,f.__s))),p=f.props,h=f.state,d)null==O.getDerivedStateFromProps&&null!=f.componentWillMount&&f.componentWillMount(),null!=f.componentDidMount&&f.__h.push(f.componentDidMount);else{if(null==O.getDerivedStateFromProps&&b!==p&&null!=f.componentWillReceiveProps&&f.componentWillReceiveProps(b,w),!f.__e&&null!=f.shouldComponentUpdate&&!1===f.shouldComponentUpdate(b,f.__s,w)||t.__v===n.__v){f.props=b,f.state=f.__s,t.__v!==n.__v&&(f.__d=!1),f.__v=t,t.__e=n.__e,t.__k=n.__k,f.__h.length&&a.push(f),k(t,l,e);break e}null!=f.componentWillUpdate&&f.componentWillUpdate(b,f.__s,w),null!=f.componentDidUpdate&&f.__h.push((function(){f.componentDidUpdate(p,h,v)}))}f.context=w,f.props=b,f.state=f.__s,(s=r.__r)&&s(t),f.__d=!1,f.__v=t,f.__P=e,s=f.render(f.props,f.state,f.context),f.state=f.__s,null!=f.getChildContext&&(o=_(_({},o),f.getChildContext())),d||null==f.getSnapshotBeforeUpdate||(v=f.getSnapshotBeforeUpdate(p,h)),E=null!=s&&s.type==m&&null==s.key?s.props.children:s,T(e,Array.isArray(E)?E:[E],t,n,o,i,u,a,l,c),f.base=t.__e,t.__h=null,f.__h.length&&a.push(f),y&&(f.__E=f.__=null),f.__e=!1}else null==u&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=H(n.__e,t,n,o,i,u,a,c);(s=r.diffed)&&s(t)}catch(e){t.__v=null,(c||null!=u)&&(t.__e=l,t.__h=!!c,u[u.indexOf(l)]=null),r.__e(e,t,n)}return t.__e}function D(e,t){r.__c&&r.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){r.__e(e,t.__v)}}))}function H(e,t,n,r,o,i,u,a){var l,c,d,_,p,h=n.props,v=t.props;if(o="svg"===t.type||o,null!=i)for(l=0;l3)for(n=[n],i=3;i=n.__.length&&n.__.push({}),n.__[e]}function h(e){return a=1,v(k,e)}function v(e,t,n){var i=p(r++,2);return i.t=e,i.__c||(i.__=[n?n(t):k(void 0,t),function(e){var t=i.t(i.__[0],e);i.__[0]!==t&&(i.__=[t,i.__[1]],i.__c.setState({}))}],i.__c=o),i.__}function y(e,t){var n=p(r++,3);!u.options.__s&&M(n.__H,t)&&(n.__=e,n.__H=t,o.__H.__h.push(n))}function m(e,t){var n=p(r++,4);!u.options.__s&&M(n.__H,t)&&(n.__=e,n.__H=t,o.__h.push(n))}function g(e){return a=5,x((function(){return{current:e}}),[])}function b(e,t,n){a=6,m((function(){"function"==typeof e?e(t()):e&&(e.current=t())}),null==n?n:n.concat(e))}function x(e,t){var n=p(r++,7);return M(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function w(e,t){return a=8,x((function(){return e}),t)}function E(e){var t=o.context[e.__c],n=p(r++,9);return n.__c=e,t?(null==n.__&&(n.__=!0,t.sub(o)),t.props.value):e.__}function T(e,t){u.options.useDebugValue&&u.options.useDebugValue(t?t(e):e)}function O(e){var t=p(r++,10),n=h();return t.__=e,o.componentDidCatch||(o.componentDidCatch=function(e){t.__&&t.__(e),n[1](e)}),[n[0],function(){n[1](void 0)}]}function A(){l.forEach((function(e){if(e.__P)try{e.__H.__h.forEach(P),e.__H.__h.forEach(C),e.__H.__h=[]}catch(t){e.__H.__h=[],u.options.__e(t,e.__v)}})),l=[]}u.options.__b=function(e){o=null,c&&c(e)},u.options.__r=function(e){s&&s(e),r=0;var t=(o=e.__c).__H;t&&(t.__h.forEach(P),t.__h.forEach(C),t.__h=[])},u.options.diffed=function(e){f&&f(e);var t=e.__c;t&&t.__H&&t.__H.__h.length&&(1!==l.push(t)&&i===u.options.requestAnimationFrame||((i=u.options.requestAnimationFrame)||function(e){var t,n=function(){clearTimeout(r),S&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,100);S&&(t=requestAnimationFrame(n))})(A)),o=void 0},u.options.__c=function(e,t){t.some((function(e){try{e.__h.forEach(P),e.__h=e.__h.filter((function(e){return!e.__||C(e)}))}catch(n){t.some((function(e){e.__h&&(e.__h=[])})),t=[],u.options.__e(n,e.__v)}})),d&&d(e,t)},u.options.unmount=function(e){_&&_(e);var t=e.__c;if(t&&t.__H)try{t.__H.__.forEach(P)}catch(e){u.options.__e(e,t.__v)}};var S="function"==typeof requestAnimationFrame;function P(e){var t=o;"function"==typeof e.__c&&e.__c(),o=t}function C(e){var t=o;e.__c=e.__(),o=t}function M(e,t){return!e||e.length!==t.length||t.some((function(t,n){return t!==e[n]}))}function k(e,t){return"function"==typeof t?t(e):t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(5),o=["x","y","width","height"],i=function(e,t){var n=t.getBoundingClientRect();return e?{equal:!o.some((function(t){return e[t]!==n[t]})),rect:n}:{equal:!1,rect:n}};t.default=function(e,t,n){var o={from:null,to:null},u=setInterval((function(){var u=r.default(e.node),a=r.default(t.node);if(u&&a){var l=function(e,t,n){var r=i(e.from,t),o=i(e.to,n);return r.equal&&o.equal?null:{from:r.rect,to:o.rect}}(o,u,a);l&&(o=l,n())}}),150);return{clear:function(){return clearInterval(u)}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(12),o=n(2),i=n(22);t.default=function(e,t,n){var u=o.prepareHeadNode(n),a=r.produceContainer(e,t,u),l=i.pathListBezier(a,u),c=o.createHead(u,l);return{pathCommands:i.convertPathToSVG(l),size:function(e,t){var n=i.pathReducer(e,(function(e,t){return{x:Math.max(e.x,t.x),y:Math.max(e.y,t.y)}}));return{width:n.x+2*t.width,height:n.y+2*t.height}}(l,u),offset:function(e,t,n){var r=function(t){return Math.min(e[0][t]-n.width,e[3][t]-n.height)};return{x:t.position.x-r("x")-n.width,y:t.position.y-r("y")-n.height}}(l,a,u),head:c}}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{"use strict";n.d(t,{Z:()=>i});var r=n(645),o=n.n(r)()((function(e){return e[1]}));o.push([e.id,'body{background:#252525}#main-wrapper{display:flex;justify-content:center}#machine-container{width:420px;border:14px solid #795548;padding:20px}.enigma-logo{position:relative;float:right;top:5px}.enigma-logo img{width:120px}#enigma-output{display:none;display:flex;justify-content:flex-end;margin-right:5px}#enigma-output-text{background:#fff;padding:5px;margin-bottom:10px;margin-left:10px;min-width:10px;font-family:"Courier New",monospace;overflow-x:auto;text-overflow:unset}#rotors{margin-left:15px;margin-bottom:20px}.rotor{display:inline-block;margin-right:15px}.rotor-window{display:inline-block;background:gray;color:#fff;border:2px silver solid;padding:8px;width:11px;height:20px;text-align:center;box-shadow:inset 0px 18px 6px -12px #191919,inset 0px -18px 6px -12px #191919}.rotor-knob{display:inline-block;position:relative;top:11px}.rotor-knob-button{height:21px}.lampboard-letter{border-radius:20px;padding:3px;width:30px;height:30px;margin:6px;background:#000;color:#fff;border-color:#fff;border-width:0px;border-image:none;border-style:solid;color:gray}.lampboard-letter.active{color:#fc0;text-shadow:#fc0 2px 0px 3px}.lampboard-letter:focus{outline:none}#lampboard-row-1{margin-left:10px}#lampboard-row-2{margin-left:26px}#lampboard{margin-bottom:20px}.keyboard-button:active{top:3px;left:2px;position:relative}.keyboard-button:focus{outline:none}.keyboard-button{border-radius:20px;padding:3px;width:32px;height:32px;margin:5px;background:#000;color:#fff;border-color:#fff;border-width:2px;box-shadow:4px -2px 1px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19) !important;border-image:none;border-style:solid}.keyboard-row{border-top:2px solid #000;padding-top:5px;padding-bottom:5px}#keyboard-row-1{padding-left:10px}#keyboard-row-2{padding-left:26px}',""]);const i=o},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var o={};if(r)for(var i=0;i{"use strict";var r,o=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),i=[];function u(e){for(var t=-1,n=0;n{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";function e(e){return e.toUpperCase().charCodeAt()-65}function t(e){return String.fromCharCode(e+65)}n(806);class r{constructor(t,n){this.wiring=t,this.turnoverIndex=e(n),this.currentIndex=0}rotate(){let e=this.currentIndex==this.turnoverIndex;return this.turnUp(),e}turnUp(){this.currentIndex=this.moduloAlphabet(this.currentIndex+1)}turnDown(){this.currentIndex=this.moduloAlphabet(this.currentIndex-1)}getCurrentLetter(){return t(this.currentIndex)}encode(n){var r=e(n),o=e(this.wiring[this.moduloAlphabet(r+this.currentIndex)]);return t(this.moduloAlphabet(o-this.currentIndex))}decode(n){var r=e(n),o=this.wiring.indexOf(t(this.moduloAlphabet(r+this.currentIndex)));return t(this.moduloAlphabet(o-this.currentIndex))}moduloAlphabet(e){return(e+26)%26}}class o{constructor(e){this.rotors=e}encode(e){return this.rotors.forEach((t=>{e=t.encode(e)})),e}decode(e){return this.rotors.slice().reverse().forEach((t=>{e=t.decode(e)})),e}rotate(){let e=!0;for(let t=0;tt.includes(e)));return t?t.replace(e,"")[0]:e}}class a{static buildDefault(){let e=new r("BDFHJLCPRTXVZNYEIWGAKMUSQO","V"),t=new r("AJDKSIRUXBLHWTMCQGZNPYFVOE","E"),n=new r("EKMFLGDQVZNTOWYHXUSPAIBRCJ","Q"),l=new o([e,t,n]),c=new u(["AB"]),s=new i("YRUHQSLDPXNGOKMIEBFZCWVJAT");return new a(l,c,s)}constructor(e,t,n){this.rotorSet=e,this.plugboard=t,this.reflector=n}write(e){return this.rotorSet.rotate(),this.encode(e)}encode(e){return e=this.plugboard.map(e),e=this.rotorSet.encode(e),e=this.reflector.reflect(e),e=this.rotorSet.decode(e),this.plugboard.map(e)}}var l=n(379),c=n.n(l),s=n(769);c()(s.Z,{insert:"head",singleton:!1}),s.Z.locals;const f=a.buildDefault();function d(){const e=document.querySelector(".lampboard-letter.active");e&&e.classList.remove("active")}function _(e){document.getElementById("enigma-output-text").innerHTML+=e}function p(){const e=f.rotorSet.rotors,t=Array.from(document.querySelectorAll(".rotor-window")).reverse();for(let n=0;nt.innerText===e)).classList.add("active")}(t),_(t),p()}document.querySelectorAll(".keyboard-button").forEach((e=>{e.addEventListener("mousedown",(e=>{h(e.target.innerText),e.target.blur()}))})),document.addEventListener("mouseup",(e=>{d()})),document.addEventListener("keydown",(e=>{if(e.repeat)return;if("Space"===e.code)return void _(" ");const t=e.key.toUpperCase();1===t.length&&t.charCodeAt()>=65&&t.charCodeAt()<=90&&h(t)})),document.addEventListener("keyup",(e=>{d()})),document.querySelectorAll(".rotor-knob-up").forEach((e=>{e.addEventListener("click",(e=>{!function(e){const t=Array.from(document.querySelectorAll(".rotor-knob-up")).reverse().indexOf(e);f.rotorSet.rotors[t].turnUp(),p()}(e.target),e.target.blur()}))})),document.querySelectorAll(".rotor-knob-down").forEach((e=>{e.addEventListener("click",(e=>{!function(e){const t=Array.from(document.querySelectorAll(".rotor-knob-down")).reverse().indexOf(e);f.rotorSet.rotors[t].turnDown(),p()}(e.target),e.target.blur()}))}))})()})(); \ No newline at end of file +(()=>{"use strict";var n={769:(n,e,t)=>{t.d(e,{Z:()=>a});var r=t(15),o=t.n(r),i=t(645),A=t.n(i)()(o());A.push([n.id,'body{background:#252525}#main-wrapper{display:flex;justify-content:center}#machine-container{width:420px;border:14px solid #795548;padding:20px}.enigma-logo{position:relative;float:right;top:5px}.enigma-logo img{width:120px}#enigma-output{display:none;display:flex;justify-content:flex-end;margin-right:5px}#enigma-output-text{background:#fff;padding:5px;margin-bottom:10px;margin-left:10px;min-width:10px;font-family:"Courier New",monospace;overflow-x:auto;text-overflow:unset}#rotors{margin-left:15px;margin-bottom:20px}.rotor{display:inline-block;margin-right:15px}.rotor-window{display:inline-block;background:gray;color:#fff;border:2px silver solid;padding:8px;width:11px;height:20px;text-align:center;box-shadow:inset 0px 18px 6px -12px #191919,inset 0px -18px 6px -12px #191919}.rotor-knob{display:inline-block;position:relative;top:11px}.rotor-knob-button{height:21px}.lampboard-letter{border-radius:20px;padding:3px;width:30px;height:30px;margin:6px;background:#000;color:#fff;border-color:#fff;border-width:0px;border-image:none;border-style:solid;color:gray}.lampboard-letter.active{color:#fc0;text-shadow:#fc0 2px 0px 3px}.lampboard-letter:focus{outline:none}#lampboard-row-1{margin-left:10px}#lampboard-row-2{margin-left:26px}#lampboard{margin-bottom:20px}.keyboard-button:active{top:3px;left:2px;position:relative}.keyboard-button:focus{outline:none}.keyboard-button{border-radius:20px;padding:3px;width:32px;height:32px;margin:5px;background:#000;color:#fff;border-color:#fff;border-width:2px;box-shadow:4px -2px 1px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19) !important;border-image:none;border-style:solid}.keyboard-row{border-top:2px solid #000;padding-top:5px;padding-bottom:5px}#keyboard-row-1{padding-left:10px}#keyboard-row-2{padding-left:26px}',"",{version:3,sources:["webpack://./src/enigma.scss"],names:[],mappings:"AAAA,KACE,kBAAA,CAGF,cACE,YAAA,CACA,sBAAA,CAGF,mBACE,WAAA,CACA,yBAAA,CACA,YAAA,CAGF,aACE,iBAAA,CACA,WAAA,CACA,OAAA,CAEA,iBACE,WAAA,CAIJ,eACE,YAAA,CACA,YAAA,CACA,wBAAA,CACA,gBAAA,CAGF,oBACE,eAAA,CACA,WAAA,CACA,kBAAA,CACA,gBAAA,CACA,cAAA,CACA,mCAAA,CACA,eAAA,CACA,mBAAA,CAGF,QACE,gBAAA,CACA,kBAAA,CAGF,OACE,oBAAA,CACA,iBAAA,CAGF,cACE,oBAAA,CACA,eAAA,CACA,UAAA,CACA,uBAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,6EAAA,CAGF,YACE,oBAAA,CACA,iBAAA,CACA,QAAA,CAGF,mBACE,WAAA,CAGF,kBACE,kBAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,eAAA,CACA,UAAA,CACA,iBAAA,CACA,gBAAA,CACA,iBAAA,CACA,kBAAA,CACA,UAAA,CAGF,yBACE,UAAA,CACA,4BAAA,CAGF,wBACE,YAAA,CAGF,iBACE,gBAAA,CAGF,iBACE,gBAAA,CAGF,WACE,kBAAA,CAGF,wBACE,OAAA,CACA,QAAA,CACA,iBAAA,CAGF,uBACE,YAAA,CAGF,iBACE,kBAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,eAAA,CACA,UAAA,CACA,iBAAA,CACA,gBAAA,CACA,gFAAA,CACA,iBAAA,CACA,kBAAA,CAGF,cACE,yBAAA,CACA,eAAA,CACA,kBAAA,CAGF,gBACE,iBAAA,CAGF,gBACE,iBAAA",sourcesContent:['body {\n background: rgb(37 37 37);\n}\n\n#main-wrapper {\n display: flex;\n justify-content: center;\n}\n\n#machine-container {\n width: 420px;\n border: 14px solid #795548;\n padding: 20px;\n}\n\n.enigma-logo {\n position: relative;\n float: right;\n top: 5px;\n\n img {\n width: 120px;\n }\n}\n\n#enigma-output {\n display: none;\n display: flex;\n justify-content: flex-end;\n margin-right: 5px;\n}\n\n#enigma-output-text {\n background: white;\n padding: 5px;\n margin-bottom: 10px;\n margin-left: 10px;\n min-width: 10px;\n font-family: "Courier New", monospace;\n overflow-x: auto;\n text-overflow: unset;\n}\n\n#rotors {\n margin-left: 15px;\n margin-bottom: 20px;\n}\n\n.rotor {\n display: inline-block;\n margin-right: 15px;\n}\n\n.rotor-window {\n display: inline-block;\n background: #808080;\n color: white;\n border: 2px silver solid;\n padding: 8px;\n width: 11px;\n height: 20px;\n text-align: center;\n box-shadow: inset 0px 18px 6px -12px #191919, inset 0px -18px 6px -12px #191919;\n}\n\n.rotor-knob {\n display: inline-block;\n position: relative;\n top: 11px;\n}\n\n.rotor-knob-button {\n height: 21px;\n}\n\n.lampboard-letter {\n border-radius: 20px;\n padding: 3px;\n width: 30px;\n height: 30px;\n margin: 6px;\n background: black;\n color: white;\n border-color: white;\n border-width: 0px;\n border-image: none;\n border-style: solid;\n color: gray;\n}\n\n.lampboard-letter.active {\n color: #FC0;\n text-shadow: #FC0 2px 0px 3px;\n}\n\n.lampboard-letter:focus {\n outline: none;\n}\n\n#lampboard-row-1 {\n margin-left: 10px;\n}\n\n#lampboard-row-2 {\n margin-left: 26px;\n}\n\n#lampboard {\n margin-bottom: 20px;\n}\n\n.keyboard-button:active {\n top: 3px;\n left: 2px;\n position: relative;\n}\n\n.keyboard-button:focus {\n outline: none;\n}\n\n.keyboard-button {\n border-radius: 20px;\n padding: 3px;\n width: 32px;\n height: 32px;\n margin: 5px;\n background: black;\n color: white;\n border-color: white;\n border-width: 2px;\n box-shadow: 4px -2px 1px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19) !important;\n border-image: none;\n border-style: solid;\n}\n\n.keyboard-row {\n border-top: 2px solid black;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n#keyboard-row-1 {\n padding-left: 10px;\n}\n\n#keyboard-row-2 {\n padding-left: 26px;\n}\n'],sourceRoot:""}]);const a=A},645:n=>{n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var t=n(e);return e[2]?"@media ".concat(e[2]," {").concat(t,"}"):t})).join("")},e.i=function(n,t,r){"string"==typeof n&&(n=[[null,n,""]]);var o={};if(r)for(var i=0;i{function e(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,r=new Array(e);t{var r,o=function(){var n={};return function(e){if(void 0===n[e]){var t=document.querySelector(e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(n){t=null}n[e]=t}return n[e]}}(),i=[];function A(n){for(var e=-1,t=0;t{var e=n&&n.__esModule?()=>n.default:()=>n;return t.d(e,{a:e}),e},t.d=(n,e)=>{for(var r in e)t.o(e,r)&&!t.o(n,r)&&Object.defineProperty(n,r,{enumerable:!0,get:e[r]})},t.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),(()=>{function n(n){return n.toUpperCase().charCodeAt()-65}function e(n){return String.fromCharCode(n+65)}class r{constructor(e,t){this.wiring=e,this.turnoverIndex=n(t),this.currentIndex=0}rotate(){let n=this.currentIndex==this.turnoverIndex;return this.turnUp(),n}turnUp(){this.currentIndex=this.moduloAlphabet(this.currentIndex+1)}turnDown(){this.currentIndex=this.moduloAlphabet(this.currentIndex-1)}getCurrentLetter(){return e(this.currentIndex)}encode(t){var r=n(t),o=n(this.wiring[this.moduloAlphabet(r+this.currentIndex)]);return e(this.moduloAlphabet(o-this.currentIndex))}decode(t){var r=n(t),o=this.wiring.indexOf(e(this.moduloAlphabet(r+this.currentIndex)));return e(this.moduloAlphabet(o-this.currentIndex))}moduloAlphabet(n){return(n+26)%26}}class o{constructor(n){this.rotors=n}encode(n){return this.rotors.forEach((e=>{n=e.encode(n)})),n}decode(n){return this.rotors.slice().reverse().forEach((e=>{n=e.decode(n)})),n}rotate(){let n=!0;for(let e=0;ee.includes(n)));return e?e.replace(n,"")[0]:n}}class a{static buildDefault(){let n=new r("BDFHJLCPRTXVZNYEIWGAKMUSQO","V"),e=new r("AJDKSIRUXBLHWTMCQGZNPYFVOE","E"),t=new r("EKMFLGDQVZNTOWYHXUSPAIBRCJ","Q"),d=new o([n,e,t]),c=new A(["AB"]),l=new i("YRUHQSLDPXNGOKMIEBFZCWVJAT");return new a(d,c,l)}constructor(n,e,t){this.rotorSet=n,this.plugboard=e,this.reflector=t}write(n){return this.rotorSet.rotate(),this.encode(n)}encode(n){return n=this.plugboard.map(n),n=this.rotorSet.encode(n),n=this.reflector.reflect(n),n=this.rotorSet.decode(n),this.plugboard.map(n)}}var d=t(379),c=t.n(d),l=t(769);c()(l.Z,{insert:"head",singleton:!1}),l.Z.locals;const s=a.buildDefault();function p(){const n=document.querySelector(".lampboard-letter.active");n&&n.classList.remove("active")}function u(n){document.getElementById("enigma-output-text").innerHTML+=n}function f(){const n=s.rotorSet.rotors,e=Array.from(document.querySelectorAll(".rotor-window")).reverse();for(let t=0;te.innerText===n)).classList.add("active")}(e),u(e),f()}document.querySelectorAll(".keyboard-button").forEach((n=>{n.addEventListener("mousedown",(n=>{C(n.target.innerText),n.target.blur()}))})),document.addEventListener("mouseup",(n=>{p()})),document.addEventListener("keydown",(n=>{if(n.repeat)return;if("Space"===n.code)return void u(" ");const e=n.key.toUpperCase();1===e.length&&e.charCodeAt()>=65&&e.charCodeAt()<=90&&C(e)})),document.addEventListener("keyup",(n=>{p()})),document.querySelectorAll(".rotor-knob-up").forEach((n=>{n.addEventListener("click",(n=>{!function(n){const e=Array.from(document.querySelectorAll(".rotor-knob-up")).reverse().indexOf(n);s.rotorSet.rotors[e].turnUp(),f()}(n.target),n.target.blur()}))})),document.querySelectorAll(".rotor-knob-down").forEach((n=>{n.addEventListener("click",(n=>{!function(n){const e=Array.from(document.querySelectorAll(".rotor-knob-down")).reverse().indexOf(n);s.rotorSet.rotors[e].turnDown(),f()}(n.target),n.target.blur()}))}))})()})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lbmlnbWEvLi9zcmMvZW5pZ21hLnNjc3MiLCJ3ZWJwYWNrOi8vZW5pZ21hLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9lbmlnbWEvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly9lbmlnbWEvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vZW5pZ21hL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VuaWdtYS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9lbmlnbWEvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2VuaWdtYS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2VuaWdtYS8uL3NyYy9lbmlnbWEuanMiLCJ3ZWJwYWNrOi8vZW5pZ21hLy4vc3JjL2VuaWdtYS5zY3NzPzBiODkiLCJ3ZWJwYWNrOi8vZW5pZ21hLy4vc3JjL2luZGV4LmpzIl0sIm5hbWVzIjpbIl9fX0NTU19MT0FERVJfRVhQT1JUX19fIiwicHVzaCIsIm1vZHVsZSIsImlkIiwiZXhwb3J0cyIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJsaXN0IiwidG9TdHJpbmciLCJ0aGlzIiwibWFwIiwiaXRlbSIsImNvbnRlbnQiLCJjb25jYXQiLCJqb2luIiwiaSIsIm1vZHVsZXMiLCJtZWRpYVF1ZXJ5IiwiZGVkdXBlIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsImxlbmd0aCIsIl9pIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJhcnIiLCJsZW4iLCJhcnIyIiwiQXJyYXkiLCJfaXRlbSIsImlzQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJTeW1ib2wiLCJpdGVyYXRvciIsIk9iamVjdCIsIl9hcnIiLCJfbiIsIl9kIiwiX2UiLCJ1bmRlZmluZWQiLCJfcyIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJlcnIiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJvIiwibWluTGVuIiwibiIsInByb3RvdHlwZSIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiVHlwZUVycm9yIiwiX25vbkl0ZXJhYmxlUmVzdCIsImNzc01hcHBpbmciLCJidG9hIiwiYmFzZTY0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGF0YSIsInNvdXJjZU1hcHBpbmciLCJzb3VyY2VVUkxzIiwic291cmNlcyIsInNvdXJjZSIsInNvdXJjZVJvb3QiLCJtZW1vIiwiZ2V0VGFyZ2V0IiwidGFyZ2V0Iiwic3R5bGVUYXJnZXQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJ3aW5kb3ciLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJlIiwic3R5bGVzSW5Eb20iLCJnZXRJbmRleEJ5SWRlbnRpZmllciIsImlkZW50aWZpZXIiLCJyZXN1bHQiLCJtb2R1bGVzVG9Eb20iLCJvcHRpb25zIiwiaWRDb3VudE1hcCIsImlkZW50aWZpZXJzIiwiYmFzZSIsImNvdW50IiwiaW5kZXgiLCJvYmoiLCJjc3MiLCJtZWRpYSIsInNvdXJjZU1hcCIsInJlZmVyZW5jZXMiLCJ1cGRhdGVyIiwiYWRkU3R5bGUiLCJpbnNlcnRTdHlsZUVsZW1lbnQiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJhdHRyaWJ1dGVzIiwibm9uY2UiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInNldEF0dHJpYnV0ZSIsImluc2VydCIsIkVycm9yIiwiYXBwZW5kQ2hpbGQiLCJ0ZXh0U3RvcmUiLCJyZXBsYWNlVGV4dCIsInJlcGxhY2VtZW50IiwiZmlsdGVyIiwiQm9vbGVhbiIsImFwcGx5VG9TaW5nbGV0b25UYWciLCJyZW1vdmUiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNzc05vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsImNoaWxkTm9kZXMiLCJyZW1vdmVDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGx5VG9UYWciLCJyZW1vdmVBdHRyaWJ1dGUiLCJmaXJzdENoaWxkIiwic2luZ2xldG9uIiwic2luZ2xldG9uQ291bnRlciIsInVwZGF0ZSIsInN0eWxlSW5kZXgiLCJiaW5kIiwicGFyZW50Tm9kZSIsInJlbW92ZVN0eWxlRWxlbWVudCIsIm5ld09iaiIsImFsbCIsImF0b2IiLCJsYXN0SWRlbnRpZmllcnMiLCJuZXdMaXN0IiwibmV3TGFzdElkZW50aWZpZXJzIiwiX2luZGV4Iiwic3BsaWNlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiYSIsImRlZmluaXRpb24iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJwcm9wIiwiaGFzT3duUHJvcGVydHkiLCJsZXR0ZXJUb0luZGV4IiwibGV0dGVyIiwidG9VcHBlckNhc2UiLCJjaGFyQ29kZUF0IiwiaW5kZXhUb0xldHRlciIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIlJvdG9yIiwid2lyaW5nIiwidHVybm92ZXJMZXR0ZXIiLCJ0dXJub3ZlckluZGV4IiwiY3VycmVudEluZGV4IiwidHVybm92ZXIiLCJ0dXJuVXAiLCJtb2R1bG9BbHBoYWJldCIsInJpZ2h0SW5kZXgiLCJhZnRlcldpcmluZyIsImxlZnRJbmRleCIsImluZGV4T2YiLCJSb3RvclNldCIsInJvdG9ycyIsInIiLCJlbmNvZGUiLCJyZXZlcnNlIiwiZGVjb2RlIiwic2hvdWxkUm90YXRlIiwicm90YXRlIiwiUmVmbGVjdG9yIiwiUGx1Z2JvYXJkIiwicGFpcnMiLCJTZXQiLCJzaXplIiwicGFpciIsImZpbmQiLCJwIiwiaW5jbHVkZXMiLCJyZXBsYWNlIiwiRW5pZ21hIiwicm90b3JJSUkiLCJyb3RvcklJIiwicm90b3JJIiwicm90b3JTZXQiLCJwbHVnYm9hcmQiLCJyZWZsZWN0b3IiLCJyZWZsZWN0IiwiYnVpbGREZWZhdWx0IiwibGFtcE9mZiIsImFjdGl2ZUxhbXAiLCJjbGFzc0xpc3QiLCJhZGRUb091dHB1dCIsIm91dHB1dExldHRlciIsImdldEVsZW1lbnRCeUlkIiwiaW5uZXJIVE1MIiwicmVmcmVzaFJvdG9yVmFsdWVzIiwiaHRtbFJvdG9ycyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpbm5lclRleHQiLCJnZXRDdXJyZW50TGV0dGVyIiwid3JpdGVMZXR0ZXIiLCJ3cml0ZSIsImVsIiwiYWRkIiwibGFtcE9uIiwiYiIsImFkZEV2ZW50TGlzdGVuZXIiLCJibHVyIiwicmVwZWF0IiwiY29kZSIsImJ1dHRvbiIsInJvdG9ySW5kZXgiLCJvblJvdG9yVXAiLCJ0dXJuRG93biIsIm9uUm90b3JEb3duIl0sIm1hcHBpbmdzIjoidUZBR0lBLEUsTUFBMEIsR0FBNEIsS0FFMURBLEVBQXdCQyxLQUFLLENBQUNDLEVBQU9DLEdBQUksNHVEQUErdUQsR0FBRyxDQUFDLFFBQVUsRUFBRSxRQUFVLENBQUMsK0JBQStCLE1BQVEsR0FBRyxTQUFXLDQ3QkFBNDdCLGVBQWlCLENBQUMsZzBFQUFrMEUsV0FBYSxNQUVyb0ssVyxRQ0NBRCxFQUFPRSxRQUFVLFNBQVVDLEdBQ3pCLElBQUlDLEVBQU8sR0F1RFgsT0FyREFBLEVBQUtDLFNBQVcsV0FDZCxPQUFPQyxLQUFLQyxLQUFJLFNBQVVDLEdBQ3hCLElBQUlDLEVBQVVOLEVBQXVCSyxHQUVyQyxPQUFJQSxFQUFLLEdBQ0EsVUFBVUUsT0FBT0YsRUFBSyxHQUFJLE1BQU1FLE9BQU9ELEVBQVMsS0FHbERBLEtBQ05FLEtBQUss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LGFBSWJwSixTQUFTMEksaUJBQWlCLG9CQUFvQjNHLFNBQVFtSCxJQUNwREEsRUFBRUMsaUJBQWlCLFNBQVU3SSxLQXBEL0IsU0FBcUJpSixHQUNuQixNQUFNQyxFQUFheE0sTUFBTTBCLEtBQUtzQixTQUFTMEksaUJBQWlCLHFCQUFxQmhDLFVBQVVMLFFBQVFrRCxHQUMvRixFQUFPM0IsU0FBU3JCLE9BQU9pRCxHQUFZRSxXQUNuQ2xCLElBa0RFbUIsQ0FBWXJKLEVBQUVSLFFBQ2RRLEVBQUVSLE9BQU9zSixjIiwiZmlsZSI6ImJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiYm9keXtiYWNrZ3JvdW5kOiMyNTI1MjV9I21haW4td3JhcHBlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0jbWFjaGluZS1jb250YWluZXJ7d2lkdGg6NDIwcHg7Ym9yZGVyOjE0cHggc29saWQgIzc5NTU0ODtwYWRkaW5nOjIwcHh9LmVuaWdtYS1sb2dve3Bvc2l0aW9uOnJlbGF0aXZlO2Zsb2F0OnJpZ2h0O3RvcDo1cHh9LmVuaWdtYS1sb2dvIGltZ3t3aWR0aDoxMjBweH0jZW5pZ21hLW91dHB1dHtkaXNwbGF5Om5vbmU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW4tcmlnaHQ6NXB4fSNlbmlnbWEtb3V0cHV0LXRleHR7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6NXB4O21hcmdpbi1ib3R0b206MTBweDttYXJnaW4tbGVmdDoxMHB4O21pbi13aWR0aDoxMHB4O2ZvbnQtZmFtaWx5OlxcXCJDb3VyaWVyIE5ld1xcXCIsbW9ub3NwYWNlO292ZXJmbG93LXg6YXV0bzt0ZXh0LW92ZXJmbG93OnVuc2V0fSNyb3RvcnN7bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tYm90dG9tOjIwcHh9LnJvdG9ye2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxNXB4fS5yb3Rvci13aW5kb3d7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDpncmF5O2NvbG9yOiNmZmY7Ym9yZGVyOjJweCBzaWx2ZXIgc29saWQ7cGFkZGluZzo4cHg7d2lkdGg6MTFweDtoZWlnaHQ6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtib3gtc2hhZG93Omluc2V0IDBweCAxOHB4IDZweCAtMTJweCAjMTkxOTE5LGluc2V0IDBweCAtMThweCA2cHggLTEycHggIzE5MTkxOX0ucm90b3Ita25vYntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MTFweH0ucm90b3Ita25vYi1idXR0b257aGVpZ2h0OjIxcHh9LmxhbXBib2FyZC1sZXR0ZXJ7Ym9yZGVyLXJhZGl1czoyMHB4O3BhZGRpbmc6M3B4O3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7bWFyZ2luOjZweDtiYWNrZ3JvdW5kOiMwMDA7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2ZmZjtib3JkZXItd2lkdGg6MHB4O2JvcmRlci1pbWFnZTpub25lO2JvcmRlci1zdHlsZTpzb2xpZDtjb2xvcjpncmF5fS5sYW1wYm9hcmQtbGV0dGVyLmFjdGl2ZXtjb2xvcjojZmMwO3RleHQtc2hhZG93OiNmYzAgMnB4IDBweCAzcHh9LmxhbXBib2FyZC1sZXR0ZXI6Zm9jdXN7b3V0bGluZTpub25lfSNsYW1wYm9hcmQtcm93LTF7bWFyZ2luLWxlZnQ6MTBweH0jbGFtcGJvYXJkLXJvdy0ye21hcmdpbi1sZWZ0OjI2cHh9I2xhbXBib2FyZHttYXJnaW4tYm90dG9tOjIwcHh9LmtleWJvYXJkLWJ1dHRvbjphY3RpdmV7dG9wOjNweDtsZWZ0OjJweDtwb3NpdGlvbjpyZWxhdGl2ZX0ua2V5Ym9hcmQtYnV0dG9uOmZvY3Vze291dGxpbmU6bm9uZX0ua2V5Ym9hcmQtYnV0dG9ue2JvcmRlci1yYWRpdXM6MjBweDtwYWRkaW5nOjNweDt3aWR0aDozMnB4O2hlaWdodDozMnB4O21hcmdpbjo1cHg7YmFja2dyb3VuZDojMDAwO2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNmZmY7Ym9yZGVyLXdpZHRoOjJweDtib3gtc2hhZG93OjRweCAtMnB4IDFweCAwIHJnYmEoMCwwLDAsLjIpLDAgNnB4IDIwcHggMCByZ2JhKDAsMCwwLC4xOSkgIWltcG9ydGFudDtib3JkZXItaW1hZ2U6bm9uZTtib3JkZXItc3R5bGU6c29saWR9LmtleWJvYXJkLXJvd3tib3JkZXItdG9wOjJweCBzb2xpZCAjMDAwO3BhZGRpbmctdG9wOjVweDtwYWRkaW5nLWJvdHRvbTo1cHh9I2tleWJvYXJkLXJvdy0xe3BhZGRpbmctbGVmdDoxMHB4fSNrZXlib2FyZC1yb3ctMntwYWRkaW5nLWxlZnQ6MjZweH1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvZW5pZ21hLnNjc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUEsS0FDRSxrQkFBQSxDQUdGLGNBQ0UsWUFBQSxDQUNBLHNCQUFBLENBR0YsbUJBQ0UsV0FBQSxDQUNBLHlCQUFBLENBQ0EsWUFBQSxDQUdGLGFBQ0UsaUJBQUEsQ0FDQSxXQUFBLENBQ0EsT0FBQSxDQUVBLGlCQUNFLFdBQUEsQ0FJSixlQUNFLFlBQUEsQ0FDQSxZQUFBLENBQ0Esd0JBQUEsQ0FDQSxnQkFBQSxDQUdGLG9CQUNFLGVBQUEsQ0FDQSxXQUFBLENBQ0Esa0JBQUEsQ0FDQSxnQkFBQSxDQUNBLGNBQUEsQ0FDQSxtQ0FBQSxDQUNBLGVBQUEsQ0FDQSxtQkFBQSxDQUdGLFFBQ0UsZ0JBQUEsQ0FDQSxrQkFBQSxDQUdGLE9BQ0Usb0JBQUEsQ0FDQSxpQkFBQSxDQUdGLGNBQ0Usb0JBQUEsQ0FDQSxlQUFBLENBQ0EsVUFBQSxDQUNBLHVCQUFBLENBQ0EsV0FBQSxDQUNBLFVBQUEsQ0FDQSxXQUFBLENBQ0EsaUJBQUEsQ0FDQSw2RUFBQSxDQUdGLFlBQ0Usb0JBQUEsQ0FDQSxpQkFBQSxDQUNBLFFBQUEsQ0FHRixtQkFDRSxXQUFBLENBR0Ysa0JBQ0Usa0JBQUEsQ0FDQSxXQUFBLENBQ0EsVUFBQSxDQUNBLFdBQUEsQ0FDQSxVQUFBLENBQ0EsZUFBQSxDQUNBLFVBQUEsQ0FDQSxpQkFBQSxDQUNBLGdCQUFBLENBQ0EsaUJBQUEsQ0FDQSxrQkFBQSxDQUNBLFVBQUEsQ0FHRix5QkFDRSxVQUFBLENBQ0EsNEJBQUEsQ0FHRix3QkFDRSxZQUFBLENBR0YsaUJBQ0UsZ0JBQUEsQ0FHRixpQkFDRSxnQkFBQSxDQUdGLFdBQ0Usa0JBQUEsQ0FHRix3QkFDRSxPQUFBLENBQ0EsUUFBQSxDQUNBLGlCQUFBLENBR0YsdUJBQ0UsWUFBQSxDQUdGLGlCQUNFLGtCQUFBLENBQ0EsV0FBQSxDQUNBLFVBQUEsQ0FDQSxXQUFBLENBQ0EsVUFBQSxDQUNBLGVBQUEsQ0FDQSxVQUFBLENBQ0EsaUJBQUEsQ0FDQSxnQkFBQSxDQUNBLGdGQUFBLENBQ0EsaUJBQUEsQ0FDQSxrQkFBQSxDQUdGLGNBQ0UseUJBQUEsQ0FDQSxlQUFBLENBQ0Esa0JBQUEsQ0FHRixnQkFDRSxpQkFBQSxDQUdGLGdCQUNFLGlCQUFBXCIsXCJzb3VyY2VzQ29udGVudFwiOltcImJvZHkge1xcbiAgYmFja2dyb3VuZDogcmdiKDM3IDM3IDM3KTtcXG59XFxuXFxuI21haW4td3JhcHBlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcblxcbiNtYWNoaW5lLWNvbnRhaW5lciB7XFxuICB3aWR0aDogNDIwcHg7XFxuICBib3JkZXI6IDE0cHggc29saWQgIzc5NTU0ODtcXG4gIHBhZGRpbmc6IDIwcHg7XFxufVxcblxcbi5lbmlnbWEtbG9nbyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBmbG9hdDogcmlnaHQ7XFxuICB0b3A6IDVweDtcXG5cXG4gIGltZyB7XFxuICAgIHdpZHRoOiAxMjBweDtcXG4gIH1cXG59XFxuXFxuI2VuaWdtYS1vdXRwdXQge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XFxufVxcblxcbiNlbmlnbWEtb3V0cHV0LXRleHQge1xcbiAgYmFja2dyb3VuZDogd2hpdGU7XFxuICBwYWRkaW5nOiA1cHg7XFxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XFxuICBtaW4td2lkdGg6IDEwcHg7XFxuICBmb250LWZhbWlseTogXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlO1xcbiAgb3ZlcmZsb3cteDogYXV0bztcXG4gIHRleHQtb3ZlcmZsb3c6IHVuc2V0O1xcbn1cXG5cXG4jcm90b3JzIHtcXG4gIG1hcmdpbi1sZWZ0OiAxNXB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcXG59XFxuXFxuLnJvdG9yIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1yaWdodDogMTVweDtcXG59XFxuXFxuLnJvdG9yLXdpbmRvdyB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBiYWNrZ3JvdW5kOiAjODA4MDgwO1xcbiAgY29sb3I6IHdoaXRlO1xcbiAgYm9yZGVyOiAycHggc2lsdmVyIHNvbGlkO1xcbiAgcGFkZGluZzogOHB4O1xcbiAgd2lkdGg6IDExcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBib3gtc2hhZG93OiBpbnNldCAwcHggMThweCA2cHggLTEycHggIzE5MTkxOSwgaW5zZXQgMHB4IC0xOHB4IDZweCAtMTJweCAjMTkxOTE5O1xcbn1cXG5cXG4ucm90b3Ita25vYiB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0b3A6IDExcHg7XFxufVxcblxcbi5yb3Rvci1rbm9iLWJ1dHRvbiB7XFxuICBoZWlnaHQ6IDIxcHg7XFxufVxcblxcbi5sYW1wYm9hcmQtbGV0dGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XFxuICBwYWRkaW5nOiAzcHg7XFxuICB3aWR0aDogMzBweDtcXG4gIGhlaWdodDogMzBweDtcXG4gIG1hcmdpbjogNnB4O1xcbiAgYmFja2dyb3VuZDogYmxhY2s7XFxuICBjb2xvcjogd2hpdGU7XFxuICBib3JkZXItY29sb3I6IHdoaXRlO1xcbiAgYm9yZGVyLXdpZHRoOiAwcHg7XFxuICBib3JkZXItaW1hZ2U6IG5vbmU7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgY29sb3I6IGdyYXk7XFxufVxcblxcbi5sYW1wYm9hcmQtbGV0dGVyLmFjdGl2ZSB7XFxuICBjb2xvcjogI0ZDMDtcXG4gIHRleHQtc2hhZG93OiAjRkMwIDJweCAwcHggM3B4O1xcbn1cXG5cXG4ubGFtcGJvYXJkLWxldHRlcjpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4jbGFtcGJvYXJkLXJvdy0xIHtcXG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xcbn1cXG5cXG4jbGFtcGJvYXJkLXJvdy0yIHtcXG4gIG1hcmdpbi1sZWZ0OiAyNnB4O1xcbn1cXG5cXG4jbGFtcGJvYXJkIHtcXG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XFxufVxcblxcbi5rZXlib2FyZC1idXR0b246YWN0aXZlIHtcXG4gIHRvcDogM3B4O1xcbiAgbGVmdDogMnB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ua2V5Ym9hcmQtYnV0dG9uOmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbi5rZXlib2FyZC1idXR0b24ge1xcbiAgYm9yZGVyLXJhZGl1czogMjBweDtcXG4gIHBhZGRpbmc6IDNweDtcXG4gIHdpZHRoOiAzMnB4O1xcbiAgaGVpZ2h0OiAzMnB4O1xcbiAgbWFyZ2luOiA1cHg7XFxuICBiYWNrZ3JvdW5kOiBibGFjaztcXG4gIGNvbG9yOiB3aGl0ZTtcXG4gIGJvcmRlci1jb2xvcjogd2hpdGU7XFxuICBib3JkZXItd2lkdGg6IDJweDtcXG4gIGJveC1zaGFkb3c6IDRweCAtMnB4IDFweCAwIHJnYmEoMCwwLDAsMC4yKSwwIDZweCAyMHB4IDAgcmdiYSgwLDAsMCwwLjE5KSAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLWltYWdlOiBub25lO1xcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcXG59XFxuXFxuLmtleWJvYXJkLXJvdyB7XFxuICBib3JkZXItdG9wOiAycHggc29saWQgYmxhY2s7XFxuICBwYWRkaW5nLXRvcDogNXB4O1xcbiAgcGFkZGluZy1ib3R0b206IDVweDtcXG59XFxuXFxuI2tleWJvYXJkLXJvdy0xIHtcXG4gIHBhZGRpbmctbGVmdDogMTBweDtcXG59XFxuXFxuI2tleWJvYXJkLXJvdy0yIHtcXG4gIHBhZGRpbmctbGVmdDogMjZweDtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIHJldHVybiBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoY29udGVudCwgXCJ9XCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKCcnKTtcbiAgfTsgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblxuXG4gIGxpc3QuaSA9IGZ1bmN0aW9uIChtb2R1bGVzLCBtZWRpYVF1ZXJ5LCBkZWR1cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsICcnXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb2R1bGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfaV0pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRpbnVlXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWFRdWVyeSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzJdID0gXCJcIi5jb25jYXQobWVkaWFRdWVyeSwgXCIgYW5kIFwiKS5jb25jYXQoaXRlbVsyXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKSB7XG4gIHZhciBfaXRlbSA9IF9zbGljZWRUb0FycmF5KGl0ZW0sIDQpLFxuICAgICAgY29udGVudCA9IF9pdGVtWzFdLFxuICAgICAgY3NzTWFwcGluZyA9IF9pdGVtWzNdO1xuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCAnJykuY29uY2F0KHNvdXJjZSwgXCIgKi9cIik7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbignXFxuJyk7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oJ1xcbicpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGlzT2xkSUUgPSBmdW5jdGlvbiBpc09sZElFKCkge1xuICB2YXIgbWVtbztcbiAgcmV0dXJuIGZ1bmN0aW9uIG1lbW9yaXplKCkge1xuICAgIGlmICh0eXBlb2YgbWVtbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFRlc3QgZm9yIElFIDw9IDkgYXMgcHJvcG9zZWQgYnkgQnJvd3NlcmhhY2tzXG4gICAgICAvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG4gICAgICAvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG4gICAgICAvLyB0byBvcGVyYXRlIGNvcnJlY3RseSBpbnRvIG5vbi1zdGFuZGFyZCBlbnZpcm9ubWVudHNcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuICAgICAgbWVtbyA9IEJvb2xlYW4od2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2IpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufSgpO1xuXG52YXIgZ2V0VGFyZ2V0ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0KCkge1xuICB2YXIgbWVtbyA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUodGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBtZW1vW3RhcmdldF07XG4gIH07XG59KCk7XG5cbnZhciBzdHlsZXNJbkRvbSA9IFtdO1xuXG5mdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHZhciByZXN1bHQgPSAtMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRG9tLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRG9tW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucykge1xuICB2YXIgaWRDb3VudE1hcCA9IHt9O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM11cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlc0luRG9tLnB1c2goe1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiBhZGRTdHlsZShvYmosIG9wdGlvbnMpLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB2YXIgYXR0cmlidXRlcyA9IG9wdGlvbnMuYXR0cmlidXRlcyB8fCB7fTtcblxuICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMubm9uY2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJyA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICAgIGlmIChub25jZSkge1xuICAgICAgYXR0cmlidXRlcy5ub25jZSA9IG5vbmNlO1xuICAgIH1cbiAgfVxuXG4gIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHN0eWxlLnNldEF0dHJpYnV0ZShrZXksIGF0dHJpYnV0ZXNba2V5XSk7XG4gIH0pO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbnNlcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zLmluc2VydChzdHlsZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhcmdldCA9IGdldFRhcmdldChvcHRpb25zLmluc2VydCB8fCAnaGVhZCcpO1xuXG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxudmFyIHJlcGxhY2VUZXh0ID0gZnVuY3Rpb24gcmVwbGFjZVRleHQoKSB7XG4gIHZhciB0ZXh0U3RvcmUgPSBbXTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlcGxhY2UoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuICAgIHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuICB9O1xufSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcbiAgdmFyIGNzcyA9IHJlbW92ZSA/ICcnIDogb2JqLm1lZGlhID8gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKS5jb25jYXQob2JqLmNzcywgXCJ9XCIpIDogb2JqLmNzczsgLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cbiAgICBpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHtcbiAgICAgIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnKHN0eWxlLCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3M7XG4gIHZhciBtZWRpYSA9IG9iai5tZWRpYTtcbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKCdtZWRpYScsIG1lZGlhKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ21lZGlhJyk7XG4gIH1cblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9IC8vIEZvciBvbGQgSUVcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG5cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGUuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXIgc2luZ2xldG9uQ291bnRlciA9IDA7XG5cbmZ1bmN0aW9uIGFkZFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgc3R5bGU7XG4gIHZhciB1cGRhdGU7XG4gIHZhciByZW1vdmU7XG5cbiAgaWYgKG9wdGlvbnMuc2luZ2xldG9uKSB7XG4gICAgdmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XG4gICAgc3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSk7XG4gICAgdXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG4gICAgcmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZSA9IGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXG4gICAgcmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlKG9iaik7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZShuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsgLy8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG4gIC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2VcblxuICBpZiAoIW9wdGlvbnMuc2luZ2xldG9uICYmIHR5cGVvZiBvcHRpb25zLnNpbmdsZXRvbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG4gIH1cblxuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0xpc3QpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRvbVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRG9tW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRvbVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRvbS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gbW9kdWxlWydkZWZhdWx0J10gOlxuXHRcdCgpID0+IG1vZHVsZTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiLy8gT3JpZ2luYWwgcm90YXRvciBjb25maWdzIGZyb20gMTkzMCBFbmlnbWEgSVxuY29uc3QgUkkgPSBcIkVLTUZMR0RRVlpOVE9XWUhYVVNQQUlCUkNKXCI7XG5jb25zdCBUVVJOT1ZFUl9JID0gICdRJztcblxuY29uc3QgUklJID0gXCJBSkRLU0lSVVhCTEhXVE1DUUdaTlBZRlZPRVwiO1xuY29uc3QgVFVSTk9WRVJfSUkgPSAnRSc7XG5cbmNvbnN0IFJJSUkgPSBcIkJERkhKTENQUlRYVlpOWUVJV0dBS01VU1FPXCI7XG5jb25zdCBUVVJOT1ZFUl9JSUkgPSAnVic7XG5cbi8vIE9yaWdpbmFsIHJlZmxlY3RvciBCIGNvbmZpZyBmcm9tIDE5MzAgRW5pZ21hIElcbmNvbnN0IFJFRkxFQ1RPUiA9IFwiWVJVSFFTTERQWE5HT0tNSUVCRlpDV1ZKQVRcIjtcblxuZnVuY3Rpb24gbGV0dGVyVG9JbmRleChsZXR0ZXIpIHtcbiAgcmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoKSAtIDY1O1xufVxuXG5mdW5jdGlvbiBpbmRleFRvTGV0dGVyKGluZGV4KSB7XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGluZGV4ICsgNjUpO1xufVxuXG5jbGFzcyBSb3RvciB7XG4gIGNvbnN0cnVjdG9yKHdpcmluZywgdHVybm92ZXJMZXR0ZXIpIHtcbiAgICB0aGlzLndpcmluZyA9IHdpcmluZztcbiAgICB0aGlzLnR1cm5vdmVySW5kZXggPSBsZXR0ZXJUb0luZGV4KHR1cm5vdmVyTGV0dGVyKTtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gIH1cblxuICAvLyByZXR1cm5zIHRydWUgaWYgdHVybm92ZXIgd2FzIHJlYWNoZWQgYmVmb3JlIHJvdGF0aW9uXG4gIHJvdGF0ZSgpIHtcbiAgICBsZXQgdHVybm92ZXIgPSB0aGlzLmN1cnJlbnRJbmRleCA9PSB0aGlzLnR1cm5vdmVySW5kZXg7XG4gICAgdGhpcy50dXJuVXAoKTtcblxuICAgIHJldHVybiB0dXJub3ZlcjtcbiAgfVxuXG4gIHR1cm5VcCgpIHtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRoaXMubW9kdWxvQWxwaGFiZXQodGhpcy5jdXJyZW50SW5kZXggKyAxKTtcbiAgfVxuXG4gIHR1cm5Eb3duKCkge1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gdGhpcy5tb2R1bG9BbHBoYWJldCh0aGlzLmN1cnJlbnRJbmRleCAtIDEpO1xuICB9XG5cbiAgZ2V0Q3VycmVudExldHRlcigpIHtcbiAgICByZXR1cm4gaW5kZXhUb0xldHRlcih0aGlzLmN1cnJlbnRJbmRleCk7XG4gIH1cblxuICAvLyByaWdodCB0byBsZWZ0XG4gIGVuY29kZShsZXR0ZXIpIHtcbiAgICB2YXIgcmlnaHRJbmRleCA9IGxldHRlclRvSW5kZXgobGV0dGVyKTtcbiAgICB2YXIgYWZ0ZXJXaXJpbmcgPSBsZXR0ZXJUb0luZGV4KHRoaXMud2lyaW5nW3RoaXMubW9kdWxvQWxwaGFiZXQocmlnaHRJbmRleCArIHRoaXMuY3VycmVudEluZGV4KV0pO1xuICAgIHZhciBsZWZ0SW5kZXggPSB0aGlzLm1vZHVsb0FscGhhYmV0KGFmdGVyV2lyaW5nIC0gdGhpcy5jdXJyZW50SW5kZXgpO1xuXG4gICAgcmV0dXJuIGluZGV4VG9MZXR0ZXIobGVmdEluZGV4KTtcbiAgfVxuXG4gIC8vIGxlZnQgdG8gcmlnaHRcbiAgZGVjb2RlKGxldHRlcikge1xuICAgIHZhciBsZWZ0SW5kZXggPSBsZXR0ZXJUb0luZGV4KGxldHRlcik7XG4gICAgdmFyIGFmdGVyV2lyaW5nID0gdGhpcy53aXJpbmcuaW5kZXhPZihcbiAgICAgIGluZGV4VG9MZXR0ZXIodGhpcy5tb2R1bG9BbHBoYWJldChsZWZ0SW5kZXggKyB0aGlzLmN1cnJlbnRJbmRleCkpXG4gICAgKTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IHRoaXMubW9kdWxvQWxwaGFiZXQoYWZ0ZXJXaXJpbmcgLSB0aGlzLmN1cnJlbnRJbmRleCk7XG5cbiAgICByZXR1cm4gaW5kZXhUb0xldHRlcihyaWdodEluZGV4KTtcbiAgfVxuXG4gIG1vZHVsb0FscGhhYmV0KGluZGV4KSB7XG4gICAgcmV0dXJuIChpbmRleCArIDI2KSAlIDI2O1xuICB9XG59XG5cbmNsYXNzIFJvdG9yU2V0IHtcbiAgLy8gcm90b3JzIEFycmF5PFJvdG9yPiAtIHJvdG9ycywgc3RhcnRpbmcgZnJvbSByaWdodG1vc3QgKHBoeXNpY2FsbHkpXG4gIGNvbnN0cnVjdG9yKHJvdG9ycykge1xuICAgIHRoaXMucm90b3JzID0gcm90b3JzO1xuICB9XG5cbiAgLy8gcmlnaHQgdG8gbGVmdFxuICBlbmNvZGUobGV0dGVyKSB7XG4gICAgdGhpcy5yb3RvcnMuZm9yRWFjaChyID0+IHsgbGV0dGVyID0gci5lbmNvZGUobGV0dGVyKSB9KTtcbiAgICByZXR1cm4gbGV0dGVyO1xuICB9XG5cbiAgLy8gbGVmdCB0byByaWdodFxuICBkZWNvZGUobGV0dGVyKSB7XG4gICAgdGhpcy5yb3RvcnMuc2xpY2UoKS5yZXZlcnNlKCkuZm9yRWFjaChyID0+IHsgbGV0dGVyID0gci5kZWNvZGUobGV0dGVyKSB9KTtcbiAgICByZXR1cm4gbGV0dGVyO1xuICB9XG5cbiAgcm90YXRlKCkge1xuICAgIGxldCBzaG91bGRSb3RhdGUgPSB0cnVlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHNob3VsZFJvdGF0ZSkge1xuICAgICAgICBzaG91bGRSb3RhdGUgPSB0aGlzLnJvdG9yc1tpXS5yb3RhdGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBSZWZsZWN0b3Ige1xuICBjb25zdHJ1Y3Rvcih3aXJpbmcpIHtcbiAgICB0aGlzLndpcmluZyA9IHdpcmluZztcbiAgfVxuXG4gIHJlZmxlY3QobGV0dGVyKSB7XG4gICAgcmV0dXJuIHRoaXMud2lyaW5nW2xldHRlclRvSW5kZXgobGV0dGVyKV07XG4gIH1cbn1cblxuY2xhc3MgUGx1Z2JvYXJkIHtcbiAgLy8gQSBsaXN0IG9mIGxldHRlciBwYWlycyAobWF4IDEzKS4gTGV0dGVycyBjYW5ub3QgYmUgbWFwcGVkIHRvIHRoZW1zZWx2ZXMuXG4gIC8vIExldHRlcnMgY2Fubm90IHJlcGVhdCBpbiBkaWZmZXJlbnQgcGFpcnMuXG4gIC8vIEV4YW1wbGU6IFsnQUInLCAnQ0UnXVxuICBjb25zdHJ1Y3RvcihwYWlycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwYWlycykpIHsgdGhyb3cgJ1BsZWFzZSBwYXNzIGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gcGx1Z2JvYXJkJzsgfVxuICAgIGlmIChuZXcgU2V0KHBhaXJzLmpvaW4oKSkuc2l6ZSAhPT0gcGFpcnMuam9pbigpLmxlbmd0aCkgeyB0aHJvdyAnUGx1Z2JvYXJkIHNvY2tldCB1c2VkIHR3aWNlJzsgfVxuXG4gICAgdGhpcy5wYWlycyA9IHBhaXJzO1xuICB9XG5cbiAgbWFwKGxldHRlcikge1xuICAgIGNvbnN0IHBhaXIgPSB0aGlzLnBhaXJzLmZpbmQocCA9PiBwLmluY2x1ZGVzKGxldHRlcikpO1xuICAgIGlmICghcGFpcikgeyByZXR1cm4gbGV0dGVyOyB9XG5cbiAgICByZXR1cm4gcGFpci5yZXBsYWNlKGxldHRlciwgJycpWzBdO1xuICB9XG59XG5cbmNsYXNzIEVuaWdtYSB7XG4gIHN0YXRpYyBidWlsZERlZmF1bHQoKSB7XG4gICAgbGV0IHJvdG9ySUlJID0gbmV3IFJvdG9yKFJJSUksIFRVUk5PVkVSX0lJSSk7XG4gICAgbGV0IHJvdG9ySUkgPSBuZXcgUm90b3IoUklJLCBUVVJOT1ZFUl9JSSk7XG4gICAgbGV0IHJvdG9ySSA9IG5ldyBSb3RvcihSSSwgVFVSTk9WRVJfSSk7XG4gICAgbGV0IHJvdG9yU2V0ID0gbmV3IFJvdG9yU2V0KFtyb3RvcklJSSwgcm90b3JJSSwgcm90b3JJXSk7XG4gICAgbGV0IHBsdWdib2FyZCA9IG5ldyBQbHVnYm9hcmQoWydBQiddKTtcbiAgICBsZXQgcmVmbGVjdG9yID0gbmV3IFJlZmxlY3RvcihSRUZMRUNUT1IpO1xuXG4gICAgcmV0dXJuIG5ldyBFbmlnbWEocm90b3JTZXQsIHBsdWdib2FyZCwgcmVmbGVjdG9yKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHJvdG9yU2V0LCBwbHVnYm9hcmQsIHJlZmxlY3Rvcikge1xuICAgIHRoaXMucm90b3JTZXQgPSByb3RvclNldDtcbiAgICB0aGlzLnBsdWdib2FyZCA9IHBsdWdib2FyZDtcbiAgICB0aGlzLnJlZmxlY3RvciA9IHJlZmxlY3RvcjtcbiAgfVxuXG4gIHdyaXRlKGxldHRlcikge1xuICAgIHRoaXMucm90b3JTZXQucm90YXRlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5lbmNvZGUobGV0dGVyKTtcbiAgfVxuXG4gIGVuY29kZShsZXR0ZXIpIHtcbiAgICBsZXR0ZXIgPSB0aGlzLnBsdWdib2FyZC5tYXAobGV0dGVyKTtcbiAgICBsZXR0ZXIgPSB0aGlzLnJvdG9yU2V0LmVuY29kZShsZXR0ZXIpO1xuICAgIGxldHRlciA9IHRoaXMucmVmbGVjdG9yLnJlZmxlY3QobGV0dGVyKTtcbiAgICBsZXR0ZXIgPSB0aGlzLnJvdG9yU2V0LmRlY29kZShsZXR0ZXIpO1xuXG4gICAgcmV0dXJuIHRoaXMucGx1Z2JvYXJkLm1hcChsZXR0ZXIpO1xuICB9XG59XG5cbmV4cG9ydCB7IEVuaWdtYSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9lbmlnbWEuc2Nzc1wiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImltcG9ydCBFbmlnbWEgZnJvbSAnLi9lbmlnbWEnO1xuaW1wb3J0ICcuL2VuaWdtYS5zY3NzJztcblxuY29uc3QgZW5pZ21hID0gRW5pZ21hLmJ1aWxkRGVmYXVsdCgpO1xuXG5mdW5jdGlvbiBsYW1wT24ob3V0cHV0TGV0dGVyKSB7XG4gIGNvbnN0IGxhbXAgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sYW1wYm9hcmQtbGV0dGVyJykpXG4gICAgLmZpbmQoZWwgPT4gZWwuaW5uZXJUZXh0ID09PSBvdXRwdXRMZXR0ZXIpO1xuICBsYW1wLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG59XG5cbmZ1bmN0aW9uIGxhbXBPZmYoKSB7XG4gIGNvbnN0IGFjdGl2ZUxhbXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGFtcGJvYXJkLWxldHRlci5hY3RpdmUnKTtcbiAgaWYgKCFhY3RpdmVMYW1wKSB7IHJldHVybjsgfVxuICBhY3RpdmVMYW1wLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG59XG5cbmZ1bmN0aW9uIGFkZFRvT3V0cHV0KG91dHB1dExldHRlcikge1xuICBjb25zdCB0ZXh0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbmlnbWEtb3V0cHV0LXRleHRcIik7XG4gIHRleHREaXYuaW5uZXJIVE1MICs9IG91dHB1dExldHRlcjtcbn1cblxuZnVuY3Rpb24gcmVmcmVzaFJvdG9yVmFsdWVzKCkge1xuICBjb25zdCByb3RvcnMgPSBlbmlnbWEucm90b3JTZXQucm90b3JzO1xuICBjb25zdCBodG1sUm90b3JzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucm90b3Itd2luZG93JykpLnJldmVyc2UoKTtcblxuICAvLyBVcGRhdGUgcm90b3JzIGZyb20gcmlnaHQgdG8gbGVmdFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdG9ycy5sZW5ndGg7IGkrKykge1xuICAgIGh0bWxSb3RvcnNbaV0uaW5uZXJUZXh0ID0gcm90b3JzW2ldLmdldEN1cnJlbnRMZXR0ZXIoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvblJvdG9yVXAoYnV0dG9uKSB7XG4gIGNvbnN0IHJvdG9ySW5kZXggPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5yb3Rvci1rbm9iLXVwJykpLnJldmVyc2UoKS5pbmRleE9mKGJ1dHRvbik7XG4gIGVuaWdtYS5yb3RvclNldC5yb3RvcnNbcm90b3JJbmRleF0udHVyblVwKCk7XG4gIHJlZnJlc2hSb3RvclZhbHVlcygpO1xufVxuXG5mdW5jdGlvbiBvblJvdG9yRG93bihidXR0b24pIHtcbiAgY29uc3Qgcm90b3JJbmRleCA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJvdG9yLWtub2ItZG93bicpKS5yZXZlcnNlKCkuaW5kZXhPZihidXR0b24pO1xuICBlbmlnbWEucm90b3JTZXQucm90b3JzW3JvdG9ySW5kZXhdLnR1cm5Eb3duKCk7XG4gIHJlZnJlc2hSb3RvclZhbHVlcygpO1xufVxuXG5mdW5jdGlvbiB3cml0ZUxldHRlcihsZXR0ZXIpIHtcbiAgY29uc3Qgb3V0cHV0TGV0dGVyID0gZW5pZ21hLndyaXRlKGxldHRlcik7XG4gIGxhbXBPbihvdXRwdXRMZXR0ZXIpO1xuICBhZGRUb091dHB1dChvdXRwdXRMZXR0ZXIpO1xuICByZWZyZXNoUm90b3JWYWx1ZXMoKTtcbn1cblxuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5rZXlib2FyZC1idXR0b25cIikuZm9yRWFjaChiID0+IHtcbiAgYi5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIChlKSA9PiB7XG4gICAgd3JpdGVMZXR0ZXIoZS50YXJnZXQuaW5uZXJUZXh0KTtcbiAgICBlLnRhcmdldC5ibHVyKCk7XG4gIH0pO1xufSk7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIChlKSA9PiB7XG4gIGxhbXBPZmYoKTtcbn0pO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xuICBpZiAoZS5yZXBlYXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZS5jb2RlID09PSBcIlNwYWNlXCIpIHtcbiAgICBhZGRUb091dHB1dChcIiZuYnNwO1wiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBsZXR0ZXIgPSBlLmtleS50b1VwcGVyQ2FzZSgpO1xuICBpZiAobGV0dGVyLmxlbmd0aCA9PT0gMSAmJiBsZXR0ZXIuY2hhckNvZGVBdCgpID49IDY1ICYmIGxldHRlci5jaGFyQ29kZUF0KCkgPD0gOTApIHtcbiAgICB3cml0ZUxldHRlcihsZXR0ZXIpO1xuICB9XG59KTtcblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIChlKSA9PiB7XG4gIGxhbXBPZmYoKTtcbn0pO1xuXG5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnJvdG9yLWtub2ItdXBcIikuZm9yRWFjaChiID0+IHtcbiAgYi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICBvblJvdG9yVXAoZS50YXJnZXQpO1xuICAgIGUudGFyZ2V0LmJsdXIoKTtcbiAgfSk7XG59KTtcblxuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5yb3Rvci1rbm9iLWRvd25cIikuZm9yRWFjaChiID0+IHtcbiAgYi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICBvblJvdG9yRG93bihlLnRhcmdldCk7XG4gICAgZS50YXJnZXQuYmx1cigpO1xuICB9KTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/package.json b/package.json index 475e540..71d5a73 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "author": "Jan Bajena ", "license": "MIT", "scripts": { - "build": "npx webpack" + "build": "npx webpack", + "watch": "webpack --watch" }, "devDependencies": { "clean-webpack-plugin": "^3.0.0", diff --git a/webpack.config.js b/webpack.config.js index f2229e3..45a01fa 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -5,6 +5,7 @@ const MiniCssExtractPlugin = require("mini-css-extract-plugin"); module.exports = { entry: './src/index.js', mode: 'production', + devtool: 'inline-source-map', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'),