@jsenv/cli 0.3.1 → 0.3.4
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/package.json +3 -3
- package/template-node-package/package.json +4 -4
- package/template-web/.jsenv/craft/@fs/Users/dmail/Documents/dev/core/dist/js/new_stylesheet.js +1 -1
- package/template-web/.jsenv/craft/@fs/Users/dmail/Documents/dev/core/packages/internal/js-module-fallback/dist/js/s.js +2 -2
- package/template-web/.jsenv/shape/index.html +1 -1
- package/template-web/.jsenv/shape/main.js +1 -1
- package/template-web/.jsenv/shape/main.nomodule7js_module_fallback=.js +1 -1
- package/template-web/dist/index.html +1 -1
- package/template-web/dist/js/main.nomodule.js +1 -1
- package/template-web/package.json +5 -5
- package/template-web-components/.jsenv/craft/@fs/Users/dmail/Documents/dev/core/dist/js/new_stylesheet.js +1 -1
- package/template-web-components/.jsenv/craft/@fs/Users/dmail/Documents/dev/core/packages/internal/js-module-fallback/dist/js/s.js +2 -2
- package/template-web-components/.jsenv/shape/index.html +1 -1
- package/template-web-components/.jsenv/shape/main.js +1 -1
- package/template-web-components/.jsenv/shape/main.nomodule7js_module_fallback=.js +1 -1
- package/template-web-components/dist/index.html +1 -1
- package/template-web-components/dist/js/main.nomodule.js +1 -1
- package/template-web-components/package.json +5 -5
- package/template-web-preact/.jsenv/craft/@fs/Users/dmail/Documents/dev/core/dist/js/new_stylesheet.js +1 -1
- package/template-web-preact/.jsenv/craft/@fs/Users/dmail/Documents/dev/core/packages/internal/js-module-fallback/dist/js/s.js +2 -2
- package/template-web-preact/.jsenv/shape/index.html +1 -1
- package/template-web-preact/.jsenv/shape/main.jsx +1 -1
- package/template-web-preact/.jsenv/shape/main.nomodule7js_module_fallback=.jsx +1 -1
- package/template-web-preact/dist/index.html +1 -1
- package/template-web-preact/dist/js/main.nomodule.js +1 -1
- package/template-web-preact/package.json +6 -6
- package/template-web-react/.jsenv/craft/@fs/Users/dmail/Documents/dev/core/dist/js/new_stylesheet.js +1 -1
- package/template-web-react/.jsenv/craft/@fs/Users/dmail/Documents/dev/core/node_modules/react/react/jsx-runtime7cjs_as_js_module=.jsx +3 -3
- package/template-web-react/.jsenv/craft/@fs/Users/dmail/Documents/dev/core/node_modules/react/react7cjs_as_js_module=.jsx +14 -211
- package/template-web-react/.jsenv/craft/@fs/Users/dmail/Documents/dev/core/node_modules/react-dom/react-dom/client7cjs_as_js_module=.jsx +91 -288
- package/template-web-react/.jsenv/craft/@fs/Users/dmail/Documents/dev/core/packages/internal/js-module-fallback/dist/js/s.js +2 -2
- package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/dmail/Documents/dev/core/node_modules/react/index.production.js +18 -225
- package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/dmail/Documents/dev/core/node_modules/react/index.production.js__compile_info__.json +3 -3
- package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/dmail/Documents/dev/core/node_modules/react/index.production.map +1 -1
- package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/dmail/Documents/dev/core/node_modules/react/jsx-runtime.production.js +3 -3
- package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/dmail/Documents/dev/core/node_modules/react/jsx-runtime.production.js__compile_info__.json +3 -3
- package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/dmail/Documents/dev/core/node_modules/react/jsx-runtime.production.map +1 -1
- package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/dmail/Documents/dev/core/node_modules/react-dom/client.production.js +104 -311
- package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/dmail/Documents/dev/core/node_modules/react-dom/client.production.js__compile_info__.json +3 -3
- package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/dmail/Documents/dev/core/node_modules/react-dom/client.production.map +1 -1
- package/template-web-react/.jsenv/craft/cjs_to_esm/__compile_context__.json +1 -1
- package/template-web-react/.jsenv/shape/@fs/Users/dmail/Documents/dev/core/packages/related/cli/template-web-react/dist/vendors.js +1 -0
- package/template-web-react/.jsenv/shape/@fs/Users/dmail/Documents/dev/core/packages/related/cli/template-web-react/dist/vendors.nomodule7js_module_fallback=.js +1 -0
- package/template-web-react/.jsenv/shape/index.html +2 -2
- package/template-web-react/.jsenv/shape/main.jsx +1 -1
- package/template-web-react/.jsenv/shape/main.nomodule7js_module_fallback=.jsx +1 -1
- package/template-web-react/dist/index.html +2 -2
- package/template-web-react/dist/js/main.nomodule.js +1 -1
- package/template-web-react/dist/js/vendors.nomodule.js +1 -1
- package/template-web-react/package.json +6 -6
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/computeKey.js +0 -38
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/computeKey.js.map +0 -11
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/constants.js +0 -13
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/index.js +0 -210
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/index.js.map +0 -11
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/runtime/catchError.js +0 -17
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/runtime/catchError.js.map +0 -11
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/runtime/debounceRendering.js +0 -21
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/runtime/debounceRendering.js.map +0 -11
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/runtime/signaturesForType.js +0 -2
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/runtime/unmount.js +0 -20
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/runtime/unmount.js.map +0 -11
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/runtime/vnode.js +0 -68
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/runtime/vnode.js.map +0 -11
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/core/src/runtime/vnodesForComponent.js +0 -3
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/@prefresh/utils/src/index.js +0 -43
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/preact/debug/dist/debug.module.js +0 -2
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/preact/debug/dist/debug.module.js.map +0 -181
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/preact/devtools/dist/devtools.module.js +0 -2
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/preact/devtools/dist/devtools.module.js.map +0 -29
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/preact/dist/preact.module.js +0 -2
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/preact/dist/preact.module.js.map +0 -270
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/preact/hooks/dist/hooks.module.js +0 -195
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/preact/hooks/dist/hooks.module.js.map +0 -168
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js +0 -2
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js.map +0 -77
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/packages/internal/ast/src/html/html_src_set.js +0 -18
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/packages/internal/plugin-supervisor/src/client/supervisor.js +0 -1360
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/packages/related/plugin-preact/src/client/preact_refresh.js +0 -36
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/packages/related/plugin-preact/src/client/preact_refresh.js.map +0 -11
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/src/plugins/autoreload/client/autoreload.js +0 -382
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/src/plugins/autoreload/client/autoreload.js.map +0 -11
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/src/plugins/import_meta_hot/client/import_meta_hot.js +0 -81
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/src/plugins/ribbon/client/ribbon.js +0 -93
- package/template-web-preact/.jsenv/chrome@131.00/@fs/Users/dmail/Documents/dev/core/src/plugins/server_events/client/server_events_client.js +0 -461
- package/template-web-preact/.jsenv/chrome@131.00/app/app.css +0 -43
- package/template-web-preact/.jsenv/chrome@131.00/app/app.jsx +0 -95
- package/template-web-preact/.jsenv/chrome@131.00/app/app.jsx.map +0 -44
- package/template-web-preact/.jsenv/chrome@131.00/app/counter.jsx +0 -45
- package/template-web-preact/.jsenv/chrome@131.00/app/counter.jsx.map +0 -33
- package/template-web-preact/.jsenv/chrome@131.00/index.html +0 -68
- package/template-web-preact/.jsenv/chrome@131.00/index.html@L11C7-L15C16.js +0 -5
- package/template-web-preact/.jsenv/chrome@131.00/index.html@L7C5-L21C13.css +0 -10
- package/template-web-preact/.jsenv/chrome@131.00/main.jsx +0 -10
- package/template-web-preact/.jsenv/chrome@131.00/main.jsx.map +0 -24
- package/template-web-preact/.jsenv/chrome@131.00/preact_logo.svg +0 -6
- package/template-web-react/.jsenv/shape/vendors.js +0 -1
- package/template-web-react/.jsenv/shape/vendors.nomodule7js_module_fallback=.js +0 -1
- /package/template-web-components/.jsenv/craft/@fs/Users/dmail/Documents/dev/core/packages/independent/frontend/custom-elements-redefine/src/{main.js → @jsenv_custom-elements-redefine_main.js} +0 -0
- /package/template-web-preact/.jsenv/shape/{vendors.js → @fs/Users/dmail/Documents/dev/core/packages/related/cli/template-web-preact/dist/vendors.js} +0 -0
- /package/template-web-preact/.jsenv/shape/{vendors.nomodule7js_module_fallback=.js → @fs/Users/dmail/Documents/dev/core/packages/related/cli/template-web-preact/dist/vendors.nomodule7js_module_fallback=.js} +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var n,l,u,t,i,o,r,f,e,c,s,a,h={},v=[],p=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,y=Array.isArray;function d(n,l){for(var u in l)n[u]=l[u];return n}function w(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function _(l,u,t){var i,o,r,f={};for(r in u)"key"==r?i=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return g(l,f,i,o,null)}function g(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u:r,__i:-1,__u:0};return null==r&&null!=l.vnode&&l.vnode(f),f}function m(){return{current:null}}function b(n){return n.children}function k(n,l){this.props=n,this.context=l}function x(n,l){if(null==l)return n.__?x(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return"function"==typeof n.type?x(n):null}function C(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C(n)}}function S(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!M.__r++||o!==l.debounceRendering)&&((o=l.debounceRendering)||r)(M)}function M(){var n,u,t,o,r,e,c,s;for(i.sort(f);n=i.shift();)n.__d&&(u=i.length,o=void 0,e=(r=(t=n).__v).__e,c=[],s=[],t.__P&&((o=d({},r)).__v=r.__v+1,l.vnode&&l.vnode(o),O(t.__P,o,r,t.__n,t.__P.namespaceURI,32&r.__u?[e]:null,c,null==e?x(r):e,!!(32&r.__u),s),o.__v=r.__v,o.__.__k[o.__i]=o,j(c,o,s),o.__e!=e&&C(o)),i.length>u&&i.sort(f));M.__r=0}function P(n,l,u,t,i,o,r,f,e,c,s){var a,p,y,d,w,_=t&&t.__k||v,g=l.length;for(u.__d=e,$(u,l,_),e=u.__d,a=0;a<g;a++)null!=(y=u.__k[a])&&(p=-1===y.__i?h:_[y.__i]||h,y.__i=a,O(n,y,p,i,o,r,f,e,c,s),d=y.__e,y.ref&&p.ref!=y.ref&&(p.ref&&E(p.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),65536&y.__u||p.__k===y.__k?e=I(y,e,n):"function"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=w}function $(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)null!=(i=l[t])&&"boolean"!=typeof i&&"function"!=typeof i?(r=t+a,(i=n.__k[t]="string"==typeof i||"number"==typeof i||"bigint"==typeof i||i.constructor==String?g(null,i,null,null,null):y(i)?g(b,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?g(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i).__=n,i.__b=n.__b+1,o=null,-1!==(f=i.__i=L(i,u,r,s))&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,"function"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f==r-1?a--:f==r+1?a++:(f>r?a--:a++,i.__u|=65536))):i=n.__k[t]=null;if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=x(o)),N(o,o))}function I(n,l,u){var t,i;if("function"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=I(t[i],l,u));return l}n.__e!=l&&(l&&n.type&&!u.contains(l)&&(l=x(n)),u.insertBefore(n.__e,l||null),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8===l.nodeType);return l}function H(n,l){return l=l||[],null==n||"boolean"==typeof n||(y(n)?n.some(function(n){H(n,l)}):l.push(n)),l}function L(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type&&0==(131072&e.__u))return u;if(("function"!=typeof o||o===b||i)&&t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++}}return-1}function T(n,l,u){"-"===l[0]?n.setProperty(l,null==u?"":u):n[l]=null==u?"":"number"!=typeof u||p.test(l)?u:u+"px"}function A(n,l,u,t,i){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else{if("string"==typeof t&&(n.style.cssText=t=""),t)for(l in t)u&&l in u||T(n.style,l,"");if(u)for(l in u)t&&u[l]===t[l]||T(n.style,l,u[l])}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/i,"$1")),l=l.toLowerCase()in n||"onFocusOut"===l||"onFocusIn"===l?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=e,n.addEventListener(l,o?s:c,o)):n.removeEventListener(l,o?s:c,o);else{if("http://www.w3.org/2000/svg"==i)l=l.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!=l&&"height"!=l&&"href"!=l&&"list"!=l&&"form"!=l&&"tabIndex"!=l&&"download"!=l&&"rowSpan"!=l&&"colSpan"!=l&&"role"!=l&&"popover"!=l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&"-"!==l[4]?n.removeAttribute(l):n.setAttribute(l,"popover"==l&&1==u?"":u))}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=e++;else if(u.t<t.u)return;return l.event&&(u=l.event(u)),"handleEvent"in t?t.handleEvent(u):t(u)}}}function O(n,u,t,i,o,r,f,e,c,s){var a,h,v,p,w,_,g,m,x,C,S,M,$,I,H,L,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l.__b)&&a(u);n:if("function"==typeof T)try{if(m=u.props,x="prototype"in T&&T.prototype.render,C=(a=T.contextType)&&i[a.__c],S=a?C?C.props.value:a.__:i,t.__c?g=(h=u.__c=t.__c).__=h.__E:(x?u.__c=h=new T(m,S):(u.__c=h=new k(m,S),h.constructor=T,h.render=V),C&&C.sub(h),h.props=m,h.state||(h.state={}),h.context=S,h.__n=i,v=h.__d=!0,h.__h=[],h._sb=[]),x&&null==h.__s&&(h.__s=h.state),x&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=d({},h.__s)),d(h.__s,T.getDerivedStateFromProps(m,h.__s))),p=h.props,w=h.state,h.__v=u,v)x&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),x&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(x&&null==T.getDerivedStateFromProps&&m!==p&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(m,S),!h.__e&&(null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(m,h.__s,S)||u.__v===t.__v)){for(u.__v!==t.__v&&(h.props=m,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),M=0;M<h._sb.length;M++)h.__h.push(h._sb[M]);h._sb=[],h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(m,h.__s,S),x&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(p,w,_)})}if(h.context=S,h.props=m,h.__P=n,h.__e=!1,$=l.__r,I=0,x){for(h.state=h.__s,h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[]}else do{h.__d=!1,$&&$(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++I<25);h.state=h.__s,null!=h.getChildContext&&(i=d(d({},i),h.getChildContext())),x&&!v&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(p,w)),P(n,y(L=null!=a&&a.type===b&&null==a.key?a.props.children:a)?L:[L],u,t,i,o,r,f,e,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&f.push(h),g&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=r){for(u.__u|=c?160:128;e&&8===e.nodeType&&e.nextSibling;)e=e.nextSibling;r[r.indexOf(e)]=null,u.__e=e}else u.__e=t.__e,u.__k=t.__k;l.__e(n,u,t)}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=z(t.__e,u,t,i,o,r,f,c,s);(a=l.diffed)&&a(u)}function j(n,u,t){u.__d=void 0;for(var i=0;i<t.length;i++)E(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function z(u,t,i,o,r,f,e,c,s){var a,v,p,d,_,g,m,b=i.props,k=t.props,C=t.type;if("svg"===C?r="http://www.w3.org/2000/svg":"math"===C?r="http://www.w3.org/1998/Math/MathML":r||(r="http://www.w3.org/1999/xhtml"),null!=f)for(a=0;a<f.length;a++)if((_=f[a])&&"setAttribute"in _==!!C&&(C?_.localName===C:3===_.nodeType)){u=_,f[a]=null;break}if(null==u){if(null===C)return document.createTextNode(k);u=document.createElementNS(r,C,k.is&&k),c&&(l.__m&&l.__m(t,f),c=!1),f=null}if(null===C)b===k||c&&u.data===k||(u.data=k);else{if(f=f&&n.call(u.childNodes),b=i.props||h,!c&&null!=f)for(b={},a=0;a<u.attributes.length;a++)b[(_=u.attributes[a]).name]=_.value;for(a in b)if(_=b[a],"children"==a);else if("dangerouslySetInnerHTML"==a)p=_;else if(!(a in k)){if("value"==a&&"defaultValue"in k||"checked"==a&&"defaultChecked"in k)continue;A(u,a,null,_,r)}for(a in k)_=k[a],"children"==a?d=_:"dangerouslySetInnerHTML"==a?v=_:"value"==a?g=_:"checked"==a?m=_:c&&"function"!=typeof _||b[a]===_||A(u,a,_,b[a],r);if(v)c||p&&(v.__html===p.__html||v.__html===u.innerHTML)||(u.innerHTML=v.__html),t.__k=[];else if(p&&(u.innerHTML=""),P(u,y(d)?d:[d],t,i,o,"foreignObject"===C?"http://www.w3.org/1999/xhtml":r,f,e,f?f[0]:i.__k&&x(i,0),c,s),null!=f)for(a=f.length;a--;)w(f[a]);c||(a="value","progress"===C&&null==g?u.removeAttribute("value"):void 0!==g&&(g!==u[a]||"progress"===C&&!g||"option"===C&&g!==b[a])&&A(u,a,g,b[a],r),a="checked",void 0!==m&&m!==u[a]&&A(u,a,m,b[a],r))}return u}function E(n,u,t){try{if("function"==typeof n){var i="function"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function N(n,u,t){var i,o;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||E(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&N(i[o],u,t||"function"!=typeof n.type);t||w(n.__e),n.__c=n.__=n.__e=n.__d=void 0}function V(n,l,u){return this.constructor(n,u)}function q(u,t,i){var o,r,f,e;l.__&&l.__(u,t),r=(o="function"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],O(t,u=(!o&&i||t).__k=_(b,null,[u]),r||h,h,t.namespaceURI,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),j(f,u,e)}function B(n,l){q(n,l,B)}function D(l,u,t){var i,o,r,f,e=d({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)"key"==r?i=u[r]:"ref"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),g(l.type,e,i||l.key,o||l.ref,null)}function G(n,l){var u={__c:l="__cC"+a++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.forEach(function(n){n.__e=!0,S(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=v.slice,l={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&null==n.constructor},k.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=d({},this.state),"function"==typeof n&&(n=n(d({},u),this.props)),n&&d(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),S(this))},k.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),S(this))},k.prototype.render=b,i=[],r="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f=function(n,l){return n.__v.__b-l.__v.__b},M.__r=0,e=0,c=F(!1),s=F(!0),a=0;export{k as Component,b as Fragment,D as cloneElement,G as createContext,_ as createElement,m as createRef,_ as h,B as hydrate,t as isValidElement,l as options,q as render,H as toChildArray};
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlYWN0Lm1vZHVsZS5qcyIsInNvdXJjZXMiOlsiZmlsZTovLy9Vc2Vycy9kbWFpbC9Eb2N1bWVudHMvZGV2L2NvcmUvbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY29uc3RhbnRzLmpzIiwiZmlsZTovLy9Vc2Vycy9kbWFpbC9Eb2N1bWVudHMvZGV2L2NvcmUvbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvdXRpbC5qcyIsImZpbGU6Ly8vVXNlcnMvZG1haWwvRG9jdW1lbnRzL2Rldi9jb3JlL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL29wdGlvbnMuanMiLCJmaWxlOi8vL1VzZXJzL2RtYWlsL0RvY3VtZW50cy9kZXYvY29yZS9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jcmVhdGUtZWxlbWVudC5qcyIsImZpbGU6Ly8vVXNlcnMvZG1haWwvRG9jdW1lbnRzL2Rldi9jb3JlL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2NvbXBvbmVudC5qcyIsImZpbGU6Ly8vVXNlcnMvZG1haWwvRG9jdW1lbnRzL2Rldi9jb3JlL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2RpZmYvcHJvcHMuanMiLCJmaWxlOi8vL1VzZXJzL2RtYWlsL0RvY3VtZW50cy9kZXYvY29yZS9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jcmVhdGUtY29udGV4dC5qcyIsImZpbGU6Ly8vVXNlcnMvZG1haWwvRG9jdW1lbnRzL2Rldi9jb3JlL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2RpZmYvY2hpbGRyZW4uanMiLCJmaWxlOi8vL1VzZXJzL2RtYWlsL0RvY3VtZW50cy9kZXYvY29yZS9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9kaWZmL2luZGV4LmpzIiwiZmlsZTovLy9Vc2Vycy9kbWFpbC9Eb2N1bWVudHMvZGV2L2NvcmUvbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvcmVuZGVyLmpzIiwiZmlsZTovLy9Vc2Vycy9kbWFpbC9Eb2N1bWVudHMvZGV2L2NvcmUvbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY2xvbmUtZWxlbWVudC5qcyIsImZpbGU6Ly8vVXNlcnMvZG1haWwvRG9jdW1lbnRzL2Rldi9jb3JlL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2RpZmYvY2F0Y2gtZXJyb3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIE5vcm1hbCBoeWRyYXRpb24gdGhhdCBhdHRhY2hlcyB0byBhIERPTSB0cmVlIGJ1dCBkb2VzIG5vdCBkaWZmIGl0LiAqL1xuZXhwb3J0IGNvbnN0IE1PREVfSFlEUkFURSA9IDEgPDwgNTtcbi8qKiBTaWduaWZpZXMgdGhpcyBWTm9kZSBzdXNwZW5kZWQgb24gdGhlIHByZXZpb3VzIHJlbmRlciAqL1xuZXhwb3J0IGNvbnN0IE1PREVfU1VTUEVOREVEID0gMSA8PCA3O1xuLyoqIEluZGljYXRlcyB0aGF0IHRoaXMgbm9kZSBuZWVkcyB0byBiZSBpbnNlcnRlZCB3aGlsZSBwYXRjaGluZyBjaGlsZHJlbiAqL1xuZXhwb3J0IGNvbnN0IElOU0VSVF9WTk9ERSA9IDEgPDwgMTY7XG4vKiogSW5kaWNhdGVzIGEgVk5vZGUgaGFzIGJlZW4gbWF0Y2hlZCB3aXRoIGFub3RoZXIgVk5vZGUgaW4gdGhlIGRpZmYgKi9cbmV4cG9ydCBjb25zdCBNQVRDSEVEID0gMSA8PCAxNztcblxuLyoqIFJlc2V0IGFsbCBtb2RlIGZsYWdzICovXG5leHBvcnQgY29uc3QgUkVTRVRfTU9ERSA9IH4oTU9ERV9IWURSQVRFIHwgTU9ERV9TVVNQRU5ERUQpO1xuXG5leHBvcnQgY29uc3QgVU5ERUZJTkVEID0gdW5kZWZpbmVkO1xuZXhwb3J0IGNvbnN0IEVNUFRZX09CSiA9IC8qKiBAdHlwZSB7YW55fSAqLyAoe30pO1xuZXhwb3J0IGNvbnN0IEVNUFRZX0FSUiA9IFtdO1xuZXhwb3J0IGNvbnN0IElTX05PTl9ESU1FTlNJT05BTCA9XG5cdC9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2k7XG4iLCJpbXBvcnQgeyBFTVBUWV9BUlIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuLyoqXG4gKiBBc3NpZ24gcHJvcGVydGllcyBmcm9tIGBwcm9wc2AgdG8gYG9iamBcbiAqIEB0ZW1wbGF0ZSBPLCBQIFRoZSBvYmogYW5kIHByb3BzIHR5cGVzXG4gKiBAcGFyYW0ge099IG9iaiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0b1xuICogQHBhcmFtIHtQfSBwcm9wcyBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcmV0dXJucyB7TyAmIFB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24ob2JqLCBwcm9wcykge1xuXHQvLyBAdHMtZXhwZWN0LWVycm9yIFdlIGNoYW5nZSB0aGUgdHlwZSBvZiBgb2JqYCB0byBiZSBgTyAmIFBgXG5cdGZvciAobGV0IGkgaW4gcHJvcHMpIG9ialtpXSA9IHByb3BzW2ldO1xuXHRyZXR1cm4gLyoqIEB0eXBlIHtPICYgUH0gKi8gKG9iaik7XG59XG5cbi8qKlxuICogUmVtb3ZlIGEgY2hpbGQgbm9kZSBmcm9tIGl0cyBwYXJlbnQgaWYgYXR0YWNoZWQuIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvclxuICogSUUxMSB3aGljaCBkb2Vzbid0IHN1cHBvcnQgYEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSgpYC4gVXNpbmcgdGhpcyBmdW5jdGlvblxuICogaXMgc21hbGxlciB0aGFuIGluY2x1ZGluZyBhIGRlZGljYXRlZCBwb2x5ZmlsbC5cbiAqIEBwYXJhbSB7cHJlYWN0LkNvbnRhaW5lck5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gcmVtb3ZlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUpIHtcblx0aWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG59XG5cbmV4cG9ydCBjb25zdCBzbGljZSA9IEVNUFRZX0FSUi5zbGljZTtcbiIsImltcG9ydCB7IF9jYXRjaEVycm9yIH0gZnJvbSAnLi9kaWZmL2NhdGNoLWVycm9yJztcblxuLyoqXG4gKiBUaGUgYG9wdGlvbmAgb2JqZWN0IGNhbiBwb3RlbnRpYWxseSBjb250YWluIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICogdGhhdCBhcmUgY2FsbGVkIGR1cmluZyB2YXJpb3VzIHN0YWdlcyBvZiBvdXIgcmVuZGVyZXIuIFRoaXMgaXMgdGhlXG4gKiBmb3VuZGF0aW9uIG9uIHdoaWNoIGFsbCBvdXIgYWRkb25zIGxpa2UgYHByZWFjdC9kZWJ1Z2AsIGBwcmVhY3QvY29tcGF0YCxcbiAqIGFuZCBgcHJlYWN0L2hvb2tzYCBhcmUgYmFzZWQgb24uIFNlZSB0aGUgYE9wdGlvbnNgIHR5cGUgaW4gYGludGVybmFsLmQudHNgXG4gKiBmb3IgYSBmdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbiBob29rcyAobW9zdCBlZGl0b3JzL0lERXMgYWxsb3cgeW91IHRvXG4gKiBjdHJsK2NsaWNrIG9yIGNtZCtjbGljayBvbiBtYWMgdGhlIHR5cGUgZGVmaW5pdGlvbiBiZWxvdykuXG4gKiBAdHlwZSB7T3B0aW9uc31cbiAqL1xuY29uc3Qgb3B0aW9ucyA9IHtcblx0X2NhdGNoRXJyb3Jcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9wdGlvbnM7XG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgb3B0aW9ucyBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgVU5ERUZJTkVEIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5sZXQgdm5vZGVJZCA9IDA7XG5cbi8qKlxuICogQ3JlYXRlIGFuIHZpcnR1YWwgbm9kZSAodXNlZCBmb3IgSlNYKVxuICogQHBhcmFtIHtWTm9kZVtcInR5cGVcIl19IHR5cGUgVGhlIG5vZGUgbmFtZSBvciBDb21wb25lbnQgY29uc3RydWN0b3IgZm9yIHRoaXNcbiAqIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkfSBbcHJvcHNdIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7QXJyYXk8aW1wb3J0KCcuJykuQ29tcG9uZW50Q2hpbGRyZW4+fSBbY2hpbGRyZW5dIFRoZSBjaGlsZHJlbiBvZiB0aGVcbiAqIHZpcnR1YWwgbm9kZVxuICogQHJldHVybnMge1ZOb2RlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcblx0bGV0IG5vcm1hbGl6ZWRQcm9wcyA9IHt9LFxuXHRcdGtleSxcblx0XHRyZWYsXG5cdFx0aTtcblx0Zm9yIChpIGluIHByb3BzKSB7XG5cdFx0aWYgKGkgPT0gJ2tleScpIGtleSA9IHByb3BzW2ldO1xuXHRcdGVsc2UgaWYgKGkgPT0gJ3JlZicpIHJlZiA9IHByb3BzW2ldO1xuXHRcdGVsc2Ugbm9ybWFsaXplZFByb3BzW2ldID0gcHJvcHNbaV07XG5cdH1cblxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2hpbGRyZW4gPVxuXHRcdFx0YXJndW1lbnRzLmxlbmd0aCA+IDMgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBjaGlsZHJlbjtcblx0fVxuXG5cdC8vIElmIGEgQ29tcG9uZW50IFZOb2RlLCBjaGVjayBmb3IgYW5kIGFwcGx5IGRlZmF1bHRQcm9wc1xuXHQvLyBOb3RlOiB0eXBlIG1heSBiZSB1bmRlZmluZWQgaW4gZGV2ZWxvcG1lbnQsIG11c3QgbmV2ZXIgZXJyb3IgaGVyZS5cblx0aWYgKHR5cGVvZiB0eXBlID09ICdmdW5jdGlvbicgJiYgdHlwZS5kZWZhdWx0UHJvcHMgIT0gbnVsbCkge1xuXHRcdGZvciAoaSBpbiB0eXBlLmRlZmF1bHRQcm9wcykge1xuXHRcdFx0aWYgKG5vcm1hbGl6ZWRQcm9wc1tpXSA9PT0gVU5ERUZJTkVEKSB7XG5cdFx0XHRcdG5vcm1hbGl6ZWRQcm9wc1tpXSA9IHR5cGUuZGVmYXVsdFByb3BzW2ldO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjcmVhdGVWTm9kZSh0eXBlLCBub3JtYWxpemVkUHJvcHMsIGtleSwgcmVmLCBudWxsKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBWTm9kZSAodXNlZCBpbnRlcm5hbGx5IGJ5IFByZWFjdClcbiAqIEBwYXJhbSB7Vk5vZGVbXCJ0eXBlXCJdfSB0eXBlIFRoZSBub2RlIG5hbWUgb3IgQ29tcG9uZW50XG4gKiBDb25zdHJ1Y3RvciBmb3IgdGhpcyB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgb2YgdGhpcyB2aXJ0dWFsIG5vZGUuXG4gKiBJZiB0aGlzIHZpcnR1YWwgbm9kZSByZXByZXNlbnRzIGEgdGV4dCBub2RlLCB0aGlzIGlzIHRoZSB0ZXh0IG9mIHRoZSBub2RlIChzdHJpbmcgb3IgbnVtYmVyKS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgbnVsbH0ga2V5IFRoZSBrZXkgZm9yIHRoaXMgdmlydHVhbCBub2RlLCB1c2VkIHdoZW5cbiAqIGRpZmZpbmcgaXQgYWdhaW5zdCBpdHMgY2hpbGRyZW5cbiAqIEBwYXJhbSB7Vk5vZGVbXCJyZWZcIl19IHJlZiBUaGUgcmVmIHByb3BlcnR5IHRoYXQgd2lsbFxuICogcmVjZWl2ZSBhIHJlZmVyZW5jZSB0byBpdHMgY3JlYXRlZCBjaGlsZFxuICogQHJldHVybnMge1ZOb2RlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVk5vZGUodHlwZSwgcHJvcHMsIGtleSwgcmVmLCBvcmlnaW5hbCkge1xuXHQvLyBWOCBzZWVtcyB0byBiZSBiZXR0ZXIgYXQgZGV0ZWN0aW5nIHR5cGUgc2hhcGVzIGlmIHRoZSBvYmplY3QgaXMgYWxsb2NhdGVkIGZyb20gdGhlIHNhbWUgY2FsbCBzaXRlXG5cdC8vIERvIG5vdCBpbmxpbmUgaW50byBjcmVhdGVFbGVtZW50IGFuZCBjb2VyY2VUb1ZOb2RlIVxuXHQvKiogQHR5cGUge1ZOb2RlfSAqL1xuXHRjb25zdCB2bm9kZSA9IHtcblx0XHR0eXBlLFxuXHRcdHByb3BzLFxuXHRcdGtleSxcblx0XHRyZWYsXG5cdFx0X2NoaWxkcmVuOiBudWxsLFxuXHRcdF9wYXJlbnQ6IG51bGwsXG5cdFx0X2RlcHRoOiAwLFxuXHRcdF9kb206IG51bGwsXG5cdFx0Ly8gX25leHREb20gbXVzdCBiZSBpbml0aWFsaXplZCB0byB1bmRlZmluZWQgYi9jIGl0IHdpbGwgZXZlbnR1YWxseVxuXHRcdC8vIGJlIHNldCB0byBkb20ubmV4dFNpYmxpbmcgd2hpY2ggY2FuIHJldHVybiBgbnVsbGAgYW5kIGl0IGlzIGltcG9ydGFudFxuXHRcdC8vIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiB1bmluaXRpYWxpemVkIF9uZXh0RG9tIGFuZFxuXHRcdC8vIGEgX25leHREb20gdGhhdCBoYXMgYmVlbiBzZXQgdG8gYG51bGxgXG5cdFx0X25leHREb206IFVOREVGSU5FRCxcblx0XHRfY29tcG9uZW50OiBudWxsLFxuXHRcdGNvbnN0cnVjdG9yOiBVTkRFRklORUQsXG5cdFx0X29yaWdpbmFsOiBvcmlnaW5hbCA9PSBudWxsID8gKyt2bm9kZUlkIDogb3JpZ2luYWwsXG5cdFx0X2luZGV4OiAtMSxcblx0XHRfZmxhZ3M6IDBcblx0fTtcblxuXHQvLyBPbmx5IGludm9rZSB0aGUgdm5vZGUgaG9vayBpZiB0aGlzIHdhcyAqbm90KiBhIGRpcmVjdCBjb3B5OlxuXHRpZiAob3JpZ2luYWwgPT0gbnVsbCAmJiBvcHRpb25zLnZub2RlICE9IG51bGwpIG9wdGlvbnMudm5vZGUodm5vZGUpO1xuXG5cdHJldHVybiB2bm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZigpIHtcblx0cmV0dXJuIHsgY3VycmVudDogbnVsbCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRnJhZ21lbnQocHJvcHMpIHtcblx0cmV0dXJuIHByb3BzLmNoaWxkcmVuO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgdGhlIGFyZ3VtZW50IGlzIGEgdmFsaWQgUHJlYWN0IFZOb2RlLlxuICogQHBhcmFtIHsqfSB2bm9kZVxuICogQHJldHVybnMge3Zub2RlIGlzIFZOb2RlfVxuICovXG5leHBvcnQgY29uc3QgaXNWYWxpZEVsZW1lbnQgPSB2bm9kZSA9PlxuXHR2bm9kZSAhPSBudWxsICYmIHZub2RlLmNvbnN0cnVjdG9yID09IFVOREVGSU5FRDtcbiIsImltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBkaWZmLCBjb21taXRSb290IH0gZnJvbSAnLi9kaWZmL2luZGV4JztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJy4vY3JlYXRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgTU9ERV9IWURSQVRFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEJhc2UgQ29tcG9uZW50IGNsYXNzLiBQcm92aWRlcyBgc2V0U3RhdGUoKWAgYW5kIGBmb3JjZVVwZGF0ZSgpYCwgd2hpY2hcbiAqIHRyaWdnZXIgcmVuZGVyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgVGhlIGluaXRpYWwgY29tcG9uZW50IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdH0gY29udGV4dCBUaGUgaW5pdGlhbCBjb250ZXh0IGZyb20gcGFyZW50IGNvbXBvbmVudHMnXG4gKiBnZXRDaGlsZENvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJhc2VDb21wb25lbnQocHJvcHMsIGNvbnRleHQpIHtcblx0dGhpcy5wcm9wcyA9IHByb3BzO1xuXHR0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBjb21wb25lbnQgc3RhdGUgYW5kIHNjaGVkdWxlIGEgcmUtcmVuZGVyLlxuICogQHRoaXMge0NvbXBvbmVudH1cbiAqIEBwYXJhbSB7b2JqZWN0IHwgKChzOiBvYmplY3QsIHA6IG9iamVjdCkgPT4gb2JqZWN0KX0gdXBkYXRlIEEgaGFzaCBvZiBzdGF0ZVxuICogcHJvcGVydGllcyB0byB1cGRhdGUgd2l0aCBuZXcgdmFsdWVzIG9yIGEgZnVuY3Rpb24gdGhhdCBnaXZlbiB0aGUgY3VycmVudFxuICogc3RhdGUgYW5kIHByb3BzIHJldHVybnMgYSBuZXcgcGFydGlhbCBzdGF0ZVxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbY2FsbGJhY2tdIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uY2UgY29tcG9uZW50IHN0YXRlIGlzXG4gKiB1cGRhdGVkXG4gKi9cbkJhc2VDb21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHVwZGF0ZSwgY2FsbGJhY2spIHtcblx0Ly8gb25seSBjbG9uZSBzdGF0ZSB3aGVuIGNvcHlpbmcgdG8gbmV4dFN0YXRlIHRoZSBmaXJzdCB0aW1lLlxuXHRsZXQgcztcblx0aWYgKHRoaXMuX25leHRTdGF0ZSAhPSBudWxsICYmIHRoaXMuX25leHRTdGF0ZSAhPT0gdGhpcy5zdGF0ZSkge1xuXHRcdHMgPSB0aGlzLl9uZXh0U3RhdGU7XG5cdH0gZWxzZSB7XG5cdFx0cyA9IHRoaXMuX25leHRTdGF0ZSA9IGFzc2lnbih7fSwgdGhpcy5zdGF0ZSk7XG5cdH1cblxuXHRpZiAodHlwZW9mIHVwZGF0ZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0Ly8gU29tZSBsaWJyYXJpZXMgbGlrZSBgaW1tZXJgIG1hcmsgdGhlIGN1cnJlbnQgc3RhdGUgYXMgcmVhZG9ubHksXG5cdFx0Ly8gcHJldmVudGluZyB1cyBmcm9tIG11dGF0aW5nIGl0LCBzbyB3ZSBuZWVkIHRvIGNsb25lIGl0LiBTZWUgIzI3MTZcblx0XHR1cGRhdGUgPSB1cGRhdGUoYXNzaWduKHt9LCBzKSwgdGhpcy5wcm9wcyk7XG5cdH1cblxuXHRpZiAodXBkYXRlKSB7XG5cdFx0YXNzaWduKHMsIHVwZGF0ZSk7XG5cdH1cblxuXHQvLyBTa2lwIHVwZGF0ZSBpZiB1cGRhdGVyIGZ1bmN0aW9uIHJldHVybmVkIG51bGxcblx0aWYgKHVwZGF0ZSA9PSBudWxsKSByZXR1cm47XG5cblx0aWYgKHRoaXMuX3Zub2RlKSB7XG5cdFx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0XHR0aGlzLl9zdGF0ZUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcblx0XHR9XG5cdFx0ZW5xdWV1ZVJlbmRlcih0aGlzKTtcblx0fVxufTtcblxuLyoqXG4gKiBJbW1lZGlhdGVseSBwZXJmb3JtIGEgc3luY2hyb25vdXMgcmUtcmVuZGVyIG9mIHRoZSBjb21wb25lbnRcbiAqIEB0aGlzIHtDb21wb25lbnR9XG4gKiBAcGFyYW0geygpID0+IHZvaWR9IFtjYWxsYmFja10gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzXG4gKiByZS1yZW5kZXJlZFxuICovXG5CYXNlQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuXHRpZiAodGhpcy5fdm5vZGUpIHtcblx0XHQvLyBTZXQgcmVuZGVyIG1vZGUgc28gdGhhdCB3ZSBjYW4gZGlmZmVyZW50aWF0ZSB3aGVyZSB0aGUgcmVuZGVyIHJlcXVlc3Rcblx0XHQvLyBpcyBjb21pbmcgZnJvbS4gV2UgbmVlZCB0aGlzIGJlY2F1c2UgZm9yY2VVcGRhdGUgc2hvdWxkIG5ldmVyIGNhbGxcblx0XHQvLyBzaG91bGRDb21wb25lbnRVcGRhdGVcblx0XHR0aGlzLl9mb3JjZSA9IHRydWU7XG5cdFx0aWYgKGNhbGxiYWNrKSB0aGlzLl9yZW5kZXJDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG5cdFx0ZW5xdWV1ZVJlbmRlcih0aGlzKTtcblx0fVxufTtcblxuLyoqXG4gKiBBY2NlcHRzIGBwcm9wc2AgYW5kIGBzdGF0ZWAsIGFuZCByZXR1cm5zIGEgbmV3IFZpcnR1YWwgRE9NIHRyZWUgdG8gYnVpbGQuXG4gKiBWaXJ0dWFsIERPTSBpcyBnZW5lcmFsbHkgY29uc3RydWN0ZWQgdmlhIFtKU1hdKGh0dHA6Ly9qYXNvbmZvcm1hdC5jb20vd3RmLWlzLWpzeCkuXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgUHJvcHMgKGVnOiBKU1ggYXR0cmlidXRlcykgcmVjZWl2ZWQgZnJvbSBwYXJlbnRcbiAqIGVsZW1lbnQvY29tcG9uZW50XG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgVGhlIGNvbXBvbmVudCdzIGN1cnJlbnQgc3RhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0IENvbnRleHQgb2JqZWN0LCBhcyByZXR1cm5lZCBieSB0aGUgbmVhcmVzdFxuICogYW5jZXN0b3IncyBgZ2V0Q2hpbGRDb250ZXh0KClgXG4gKiBAcmV0dXJucyB7Q29tcG9uZW50Q2hpbGRyZW4gfCB2b2lkfVxuICovXG5CYXNlQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPSBGcmFnbWVudDtcblxuLyoqXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZVxuICogQHBhcmFtIHtudW1iZXIgfCBudWxsfSBbY2hpbGRJbmRleF1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERvbVNpYmxpbmcodm5vZGUsIGNoaWxkSW5kZXgpIHtcblx0aWYgKGNoaWxkSW5kZXggPT0gbnVsbCkge1xuXHRcdC8vIFVzZSBjaGlsZEluZGV4PT1udWxsIGFzIGEgc2lnbmFsIHRvIHJlc3VtZSB0aGUgc2VhcmNoIGZyb20gdGhlIHZub2RlJ3Mgc2libGluZ1xuXHRcdHJldHVybiB2bm9kZS5fcGFyZW50XG5cdFx0XHQ/IGdldERvbVNpYmxpbmcodm5vZGUuX3BhcmVudCwgdm5vZGUuX2luZGV4ICsgMSlcblx0XHRcdDogbnVsbDtcblx0fVxuXG5cdGxldCBzaWJsaW5nO1xuXHRmb3IgKDsgY2hpbGRJbmRleCA8IHZub2RlLl9jaGlsZHJlbi5sZW5ndGg7IGNoaWxkSW5kZXgrKykge1xuXHRcdHNpYmxpbmcgPSB2bm9kZS5fY2hpbGRyZW5bY2hpbGRJbmRleF07XG5cblx0XHRpZiAoc2libGluZyAhPSBudWxsICYmIHNpYmxpbmcuX2RvbSAhPSBudWxsKSB7XG5cdFx0XHQvLyBTaW5jZSB1cGRhdGVQYXJlbnREb21Qb2ludGVycyBrZWVwcyBfZG9tIHBvaW50ZXIgY29ycmVjdCxcblx0XHRcdC8vIHdlIGNhbiByZWx5IG9uIF9kb20gdG8gdGVsbCB1cyBpZiB0aGlzIHN1YnRyZWUgY29udGFpbnMgYVxuXHRcdFx0Ly8gcmVuZGVyZWQgRE9NIG5vZGUsIGFuZCB3aGF0IHRoZSBmaXJzdCByZW5kZXJlZCBET00gbm9kZSBpc1xuXHRcdFx0cmV0dXJuIHNpYmxpbmcuX2RvbTtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBub3QgZm91bmQgYSBET00gbm9kZSBpbiB0aGlzIHZub2RlJ3MgY2hpbGRyZW4uXG5cdC8vIFdlIG11c3QgcmVzdW1lIGZyb20gdGhpcyB2bm9kZSdzIHNpYmxpbmcgKGluIGl0J3MgcGFyZW50IF9jaGlsZHJlbiBhcnJheSlcblx0Ly8gT25seSBjbGltYiB1cCBhbmQgc2VhcmNoIHRoZSBwYXJlbnQgaWYgd2UgYXJlbid0IHNlYXJjaGluZyB0aHJvdWdoIGEgRE9NXG5cdC8vIFZOb2RlIChtZWFuaW5nIHdlIHJlYWNoZWQgdGhlIERPTSBwYXJlbnQgb2YgdGhlIG9yaWdpbmFsIHZub2RlIHRoYXQgYmVnYW5cblx0Ly8gdGhlIHNlYXJjaClcblx0cmV0dXJuIHR5cGVvZiB2bm9kZS50eXBlID09ICdmdW5jdGlvbicgPyBnZXREb21TaWJsaW5nKHZub2RlKSA6IG51bGw7XG59XG5cbi8qKlxuICogVHJpZ2dlciBpbi1wbGFjZSByZS1yZW5kZXJpbmcgb2YgYSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge0NvbXBvbmVudH0gY29tcG9uZW50IFRoZSBjb21wb25lbnQgdG8gcmVyZW5kZXJcbiAqL1xuZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50KGNvbXBvbmVudCkge1xuXHRsZXQgb2xkVk5vZGUgPSBjb21wb25lbnQuX3Zub2RlLFxuXHRcdG9sZERvbSA9IG9sZFZOb2RlLl9kb20sXG5cdFx0Y29tbWl0UXVldWUgPSBbXSxcblx0XHRyZWZRdWV1ZSA9IFtdO1xuXG5cdGlmIChjb21wb25lbnQuX3BhcmVudERvbSkge1xuXHRcdGNvbnN0IG5ld1ZOb2RlID0gYXNzaWduKHt9LCBvbGRWTm9kZSk7XG5cdFx0bmV3Vk5vZGUuX29yaWdpbmFsID0gb2xkVk5vZGUuX29yaWdpbmFsICsgMTtcblx0XHRpZiAob3B0aW9ucy52bm9kZSkgb3B0aW9ucy52bm9kZShuZXdWTm9kZSk7XG5cblx0XHRkaWZmKFxuXHRcdFx0Y29tcG9uZW50Ll9wYXJlbnREb20sXG5cdFx0XHRuZXdWTm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Y29tcG9uZW50Ll9nbG9iYWxDb250ZXh0LFxuXHRcdFx0Y29tcG9uZW50Ll9wYXJlbnREb20ubmFtZXNwYWNlVVJJLFxuXHRcdFx0b2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9IWURSQVRFID8gW29sZERvbV0gOiBudWxsLFxuXHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRvbGREb20gPT0gbnVsbCA/IGdldERvbVNpYmxpbmcob2xkVk5vZGUpIDogb2xkRG9tLFxuXHRcdFx0ISEob2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9IWURSQVRFKSxcblx0XHRcdHJlZlF1ZXVlXG5cdFx0KTtcblxuXHRcdG5ld1ZOb2RlLl9vcmlnaW5hbCA9IG9sZFZOb2RlLl9vcmlnaW5hbDtcblx0XHRuZXdWTm9kZS5fcGFyZW50Ll9jaGlsZHJlbltuZXdWTm9kZS5faW5kZXhdID0gbmV3Vk5vZGU7XG5cdFx0Y29tbWl0Um9vdChjb21taXRRdWV1ZSwgbmV3Vk5vZGUsIHJlZlF1ZXVlKTtcblxuXHRcdGlmIChuZXdWTm9kZS5fZG9tICE9IG9sZERvbSkge1xuXHRcdFx0dXBkYXRlUGFyZW50RG9tUG9pbnRlcnMobmV3Vk5vZGUpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IHZub2RlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVBhcmVudERvbVBvaW50ZXJzKHZub2RlKSB7XG5cdGlmICgodm5vZGUgPSB2bm9kZS5fcGFyZW50KSAhPSBudWxsICYmIHZub2RlLl9jb21wb25lbnQgIT0gbnVsbCkge1xuXHRcdHZub2RlLl9kb20gPSB2bm9kZS5fY29tcG9uZW50LmJhc2UgPSBudWxsO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdm5vZGUuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRsZXQgY2hpbGQgPSB2bm9kZS5fY2hpbGRyZW5baV07XG5cdFx0XHRpZiAoY2hpbGQgIT0gbnVsbCAmJiBjaGlsZC5fZG9tICE9IG51bGwpIHtcblx0XHRcdFx0dm5vZGUuX2RvbSA9IHZub2RlLl9jb21wb25lbnQuYmFzZSA9IGNoaWxkLl9kb207XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB1cGRhdGVQYXJlbnREb21Qb2ludGVycyh2bm9kZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGUgcmVuZGVyIHF1ZXVlXG4gKiBAdHlwZSB7QXJyYXk8Q29tcG9uZW50Pn1cbiAqL1xubGV0IHJlcmVuZGVyUXVldWUgPSBbXTtcblxuLypcbiAqIFRoZSB2YWx1ZSBvZiBgQ29tcG9uZW50LmRlYm91bmNlYCBtdXN0IGFzeW5jaHJvbm91c2x5IGludm9rZSB0aGUgcGFzc2VkIGluIGNhbGxiYWNrLiBJdCBpc1xuICogaW1wb3J0YW50IHRoYXQgY29udHJpYnV0b3JzIHRvIFByZWFjdCBjYW4gY29uc2lzdGVudGx5IHJlYXNvbiBhYm91dCB3aGF0IGNhbGxzIHRvIGBzZXRTdGF0ZWAsIGV0Yy5cbiAqIGRvLCBhbmQgd2hlbiB0aGVpciBlZmZlY3RzIHdpbGwgYmUgYXBwbGllZC4gU2VlIHRoZSBsaW5rcyBiZWxvdyBmb3Igc29tZSBmdXJ0aGVyIHJlYWRpbmcgb24gZGVzaWduaW5nXG4gKiBhc3luY2hyb25vdXMgQVBJcy5cbiAqICogW0Rlc2lnbmluZyBBUElzIGZvciBBc3luY2hyb255XShodHRwczovL2Jsb2cuaXpzLm1lLzIwMTMvMDgvZGVzaWduaW5nLWFwaXMtZm9yLWFzeW5jaHJvbnkpXG4gKiAqIFtDYWxsYmFja3Mgc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91c10oaHR0cHM6Ly9ibG9nLm9tZXRlci5jb20vMjAxMS8wNy8yNC9jYWxsYmFja3Mtc3luY2hyb25vdXMtYW5kLWFzeW5jaHJvbm91cy8pXG4gKi9cblxubGV0IHByZXZEZWJvdW5jZTtcblxuY29uc3QgZGVmZXIgPVxuXHR0eXBlb2YgUHJvbWlzZSA9PSAnZnVuY3Rpb24nXG5cdFx0PyBQcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpXG5cdFx0OiBzZXRUaW1lb3V0O1xuXG4vKipcbiAqIEVucXVldWUgYSByZXJlbmRlciBvZiBhIGNvbXBvbmVudFxuICogQHBhcmFtIHtDb21wb25lbnR9IGMgVGhlIGNvbXBvbmVudCB0byByZXJlbmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5xdWV1ZVJlbmRlcihjKSB7XG5cdGlmIChcblx0XHQoIWMuX2RpcnR5ICYmXG5cdFx0XHQoYy5fZGlydHkgPSB0cnVlKSAmJlxuXHRcdFx0cmVyZW5kZXJRdWV1ZS5wdXNoKGMpICYmXG5cdFx0XHQhcHJvY2Vzcy5fcmVyZW5kZXJDb3VudCsrKSB8fFxuXHRcdHByZXZEZWJvdW5jZSAhPT0gb3B0aW9ucy5kZWJvdW5jZVJlbmRlcmluZ1xuXHQpIHtcblx0XHRwcmV2RGVib3VuY2UgPSBvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nO1xuXHRcdChwcmV2RGVib3VuY2UgfHwgZGVmZXIpKHByb2Nlc3MpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtDb21wb25lbnR9IGFcbiAqIEBwYXJhbSB7Q29tcG9uZW50fSBiXG4gKi9cbmNvbnN0IGRlcHRoU29ydCA9IChhLCBiKSA9PiBhLl92bm9kZS5fZGVwdGggLSBiLl92bm9kZS5fZGVwdGg7XG5cbi8qKiBGbHVzaCB0aGUgcmVuZGVyIHF1ZXVlIGJ5IHJlcmVuZGVyaW5nIGFsbCBxdWV1ZWQgY29tcG9uZW50cyAqL1xuZnVuY3Rpb24gcHJvY2VzcygpIHtcblx0bGV0IGM7XG5cdHJlcmVuZGVyUXVldWUuc29ydChkZXB0aFNvcnQpO1xuXHQvLyBEb24ndCB1cGRhdGUgYHJlbmRlckNvdW50YCB5ZXQuIEtlZXAgaXRzIHZhbHVlIG5vbi16ZXJvIHRvIHByZXZlbnQgdW5uZWNlc3Nhcnlcblx0Ly8gcHJvY2VzcygpIGNhbGxzIGZyb20gZ2V0dGluZyBzY2hlZHVsZWQgd2hpbGUgYHF1ZXVlYCBpcyBzdGlsbCBiZWluZyBjb25zdW1lZC5cblx0d2hpbGUgKChjID0gcmVyZW5kZXJRdWV1ZS5zaGlmdCgpKSkge1xuXHRcdGlmIChjLl9kaXJ0eSkge1xuXHRcdFx0bGV0IHJlbmRlclF1ZXVlTGVuZ3RoID0gcmVyZW5kZXJRdWV1ZS5sZW5ndGg7XG5cdFx0XHRyZW5kZXJDb21wb25lbnQoYyk7XG5cdFx0XHRpZiAocmVyZW5kZXJRdWV1ZS5sZW5ndGggPiByZW5kZXJRdWV1ZUxlbmd0aCkge1xuXHRcdFx0XHQvLyBXaGVuIGkuZS4gcmVyZW5kZXJpbmcgYSBwcm92aWRlciBhZGRpdGlvbmFsIG5ldyBpdGVtcyBjYW4gYmUgaW5qZWN0ZWQsIHdlIHdhbnQgdG9cblx0XHRcdFx0Ly8ga2VlcCB0aGUgb3JkZXIgZnJvbSB0b3AgdG8gYm90dG9tIHdpdGggdGhvc2UgbmV3IGl0ZW1zIHNvIHdlIGNhbiBoYW5kbGUgdGhlbSBpbiBhXG5cdFx0XHRcdC8vIHNpbmdsZSBwYXNzXG5cdFx0XHRcdHJlcmVuZGVyUXVldWUuc29ydChkZXB0aFNvcnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRwcm9jZXNzLl9yZXJlbmRlckNvdW50ID0gMDtcbn1cblxucHJvY2Vzcy5fcmVyZW5kZXJDb3VudCA9IDA7XG4iLCJpbXBvcnQgeyBJU19OT05fRElNRU5TSU9OQUwgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IG9wdGlvbnMgZnJvbSAnLi4vb3B0aW9ucyc7XG5cbmZ1bmN0aW9uIHNldFN0eWxlKHN0eWxlLCBrZXksIHZhbHVlKSB7XG5cdGlmIChrZXlbMF0gPT09ICctJykge1xuXHRcdHN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xuXHR9IGVsc2UgaWYgKHZhbHVlID09IG51bGwpIHtcblx0XHRzdHlsZVtrZXldID0gJyc7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9ICdudW1iZXInIHx8IElTX05PTl9ESU1FTlNJT05BTC50ZXN0KGtleSkpIHtcblx0XHRzdHlsZVtrZXldID0gdmFsdWU7XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGVba2V5XSA9IHZhbHVlICsgJ3B4Jztcblx0fVxufVxuXG4vLyBBIGxvZ2ljYWwgY2xvY2sgdG8gc29sdmUgaXNzdWVzIGxpa2UgaHR0cHM6Ly9naXRodWIuY29tL3ByZWFjdGpzL3ByZWFjdC9pc3N1ZXMvMzkyNy5cbi8vIFdoZW4gdGhlIERPTSBwZXJmb3JtcyBhbiBldmVudCBpdCBsZWF2ZXMgbWljcm8tdGlja3MgaW4gYmV0d2VlbiBidWJibGluZyB1cCB3aGljaCBtZWFucyB0aGF0XG4vLyBhbiBldmVudCBjYW4gdHJpZ2dlciBvbiBhIG5ld2x5IHJlYXRlZCBET00tbm9kZSB3aGlsZSB0aGUgZXZlbnQgYnViYmxlcyB1cC5cbi8vXG4vLyBPcmlnaW5hbGx5IGluc3BpcmVkIGJ5IFZ1ZVxuLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy9jb3JlL2Jsb2IvY2FlYjhhNjg4MTFhMWIwZjc5L3BhY2thZ2VzL3J1bnRpbWUtZG9tL3NyYy9tb2R1bGVzL2V2ZW50cy50cyNMOTAtTDEwMSksXG4vLyBidXQgbW9kaWZpZWQgdG8gdXNlIGEgbG9naWNhbCBjbG9jayBpbnN0ZWFkIG9mIERhdGUubm93KCkgaW4gY2FzZSBldmVudCBoYW5kbGVycyBnZXQgYXR0YWNoZWRcbi8vIGFuZCBldmVudHMgZ2V0IGRpc3BhdGNoZWQgZHVyaW5nIHRoZSBzYW1lIG1pbGxpc2Vjb25kLlxuLy9cbi8vIFRoZSBjbG9jayBpcyBpbmNyZW1lbnRlZCBhZnRlciBlYWNoIG5ldyBldmVudCBkaXNwYXRjaC4gVGhpcyBhbGxvd3MgMSAwMDAgMDAwIG5ldyBldmVudHNcbi8vIHBlciBzZWNvbmQgZm9yIG92ZXIgMjgwIHllYXJzIGJlZm9yZSB0aGUgdmFsdWUgcmVhY2hlcyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAoMioqNTMgLSAxKS5cbmxldCBldmVudENsb2NrID0gMDtcblxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSB2YWx1ZSBvbiBhIERPTSBub2RlXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IGRvbSBUaGUgRE9NIG5vZGUgdG8gbW9kaWZ5XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0XG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHByb3BlcnR5IHRvXG4gKiBAcGFyYW0geyp9IG9sZFZhbHVlIFRoZSBvbGQgdmFsdWUgdGhlIHByb3BlcnR5IGhhZFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVzcGFjZSBXaGV0aGVyIG9yIG5vdCB0aGlzIERPTSBub2RlIGlzIGFuIFNWRyBub2RlIG9yIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoZG9tLCBuYW1lLCB2YWx1ZSwgb2xkVmFsdWUsIG5hbWVzcGFjZSkge1xuXHRsZXQgdXNlQ2FwdHVyZTtcblxuXHRvOiBpZiAobmFtZSA9PT0gJ3N0eWxlJykge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcblx0XHRcdGRvbS5zdHlsZS5jc3NUZXh0ID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlb2Ygb2xkVmFsdWUgPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0ZG9tLnN0eWxlLmNzc1RleHQgPSBvbGRWYWx1ZSA9ICcnO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob2xkVmFsdWUpIHtcblx0XHRcdFx0Zm9yIChuYW1lIGluIG9sZFZhbHVlKSB7XG5cdFx0XHRcdFx0aWYgKCEodmFsdWUgJiYgbmFtZSBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHNldFN0eWxlKGRvbS5zdHlsZSwgbmFtZSwgJycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0Zm9yIChuYW1lIGluIHZhbHVlKSB7XG5cdFx0XHRcdFx0aWYgKCFvbGRWYWx1ZSB8fCB2YWx1ZVtuYW1lXSAhPT0gb2xkVmFsdWVbbmFtZV0pIHtcblx0XHRcdFx0XHRcdHNldFN0eWxlKGRvbS5zdHlsZSwgbmFtZSwgdmFsdWVbbmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyBCZW5jaG1hcmsgZm9yIGNvbXBhcmlzb246IGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNTc0Yzk1NGJkYjk2NWI5YTAwOTY1YWM2XG5cdGVsc2UgaWYgKG5hbWVbMF0gPT09ICdvJyAmJiBuYW1lWzFdID09PSAnbicpIHtcblx0XHR1c2VDYXB0dXJlID1cblx0XHRcdG5hbWUgIT09IChuYW1lID0gbmFtZS5yZXBsYWNlKC8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLCAnJDEnKSk7XG5cblx0XHQvLyBJbmZlciBjb3JyZWN0IGNhc2luZyBmb3IgRE9NIGJ1aWx0LWluIGV2ZW50czpcblx0XHRpZiAoXG5cdFx0XHRuYW1lLnRvTG93ZXJDYXNlKCkgaW4gZG9tIHx8XG5cdFx0XHRuYW1lID09PSAnb25Gb2N1c091dCcgfHxcblx0XHRcdG5hbWUgPT09ICdvbkZvY3VzSW4nXG5cdFx0KVxuXHRcdFx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgyKTtcblx0XHRlbHNlIG5hbWUgPSBuYW1lLnNsaWNlKDIpO1xuXG5cdFx0aWYgKCFkb20uX2xpc3RlbmVycykgZG9tLl9saXN0ZW5lcnMgPSB7fTtcblx0XHRkb20uX2xpc3RlbmVyc1tuYW1lICsgdXNlQ2FwdHVyZV0gPSB2YWx1ZTtcblxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0aWYgKCFvbGRWYWx1ZSkge1xuXHRcdFx0XHR2YWx1ZS5fYXR0YWNoZWQgPSBldmVudENsb2NrO1xuXHRcdFx0XHRkb20uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdHVzZUNhcHR1cmUgPyBldmVudFByb3h5Q2FwdHVyZSA6IGV2ZW50UHJveHksXG5cdFx0XHRcdFx0dXNlQ2FwdHVyZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsdWUuX2F0dGFjaGVkID0gb2xkVmFsdWUuX2F0dGFjaGVkO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dXNlQ2FwdHVyZSA/IGV2ZW50UHJveHlDYXB0dXJlIDogZXZlbnRQcm94eSxcblx0XHRcdFx0dXNlQ2FwdHVyZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKG5hbWVzcGFjZSA9PSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnKSB7XG5cdFx0XHQvLyBOb3JtYWxpemUgaW5jb3JyZWN0IHByb3AgdXNhZ2UgZm9yIFNWRzpcblx0XHRcdC8vIC0geGxpbms6aHJlZiAvIHhsaW5rSHJlZiAtLT4gaHJlZiAoeGxpbms6aHJlZiB3YXMgcmVtb3ZlZCBmcm9tIFNWRyBhbmQgaXNuJ3QgbmVlZGVkKVxuXHRcdFx0Ly8gLSBjbGFzc05hbWUgLS0+IGNsYXNzXG5cdFx0XHRuYW1lID0gbmFtZS5yZXBsYWNlKC94bGluayhIfDpoKS8sICdoJykucmVwbGFjZSgvc05hbWUkLywgJ3MnKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0bmFtZSAhPSAnd2lkdGgnICYmXG5cdFx0XHRuYW1lICE9ICdoZWlnaHQnICYmXG5cdFx0XHRuYW1lICE9ICdocmVmJyAmJlxuXHRcdFx0bmFtZSAhPSAnbGlzdCcgJiZcblx0XHRcdG5hbWUgIT0gJ2Zvcm0nICYmXG5cdFx0XHQvLyBEZWZhdWx0IHZhbHVlIGluIGJyb3dzZXJzIGlzIGAtMWAgYW5kIGFuIGVtcHR5IHN0cmluZyBpc1xuXHRcdFx0Ly8gY2FzdCB0byBgMGAgaW5zdGVhZFxuXHRcdFx0bmFtZSAhPSAndGFiSW5kZXgnICYmXG5cdFx0XHRuYW1lICE9ICdkb3dubG9hZCcgJiZcblx0XHRcdG5hbWUgIT0gJ3Jvd1NwYW4nICYmXG5cdFx0XHRuYW1lICE9ICdjb2xTcGFuJyAmJlxuXHRcdFx0bmFtZSAhPSAncm9sZScgJiZcblx0XHRcdG5hbWUgIT0gJ3BvcG92ZXInICYmXG5cdFx0XHRuYW1lIGluIGRvbVxuXHRcdCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZG9tW25hbWVdID0gdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWU7XG5cdFx0XHRcdC8vIGxhYmVsbGVkIGJyZWFrIGlzIDFiIHNtYWxsZXIgaGVyZSB0aGFuIGEgcmV0dXJuIHN0YXRlbWVudCAoc29ycnkpXG5cdFx0XHRcdGJyZWFrIG87XG5cdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdH1cblxuXHRcdC8vIGFyaWEtIGFuZCBkYXRhLSBhdHRyaWJ1dGVzIGhhdmUgbm8gYm9vbGVhbiByZXByZXNlbnRhdGlvbi5cblx0XHQvLyBBIGBmYWxzZWAgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIGF0dHJpYnV0ZSBub3QgYmVpbmdcblx0XHQvLyBwcmVzZW50LCBzbyB3ZSBjYW4ndCByZW1vdmUgaXQuIEZvciBub24tYm9vbGVhbiBhcmlhXG5cdFx0Ly8gYXR0cmlidXRlcyB3ZSBjb3VsZCB0cmVhdCBmYWxzZSBhcyBhIHJlbW92YWwsIGJ1dCB0aGVcblx0XHQvLyBhbW91bnQgb2YgZXhjZXB0aW9ucyB3b3VsZCBjb3N0IHRvbyBtYW55IGJ5dGVzLiBPbiB0b3Agb2Zcblx0XHQvLyB0aGF0IG90aGVyIGZyYW1ld29ya3MgZ2VuZXJhbGx5IHN0cmluZ2lmeSBgZmFsc2VgLlxuXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvLyBuZXZlciBzZXJpYWxpemUgZnVuY3Rpb25zIGFzIGF0dHJpYnV0ZSB2YWx1ZXNcblx0XHR9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwgJiYgKHZhbHVlICE9PSBmYWxzZSB8fCBuYW1lWzRdID09PSAnLScpKSB7XG5cdFx0XHRkb20uc2V0QXR0cmlidXRlKG5hbWUsIG5hbWUgPT0gJ3BvcG92ZXInICYmIHZhbHVlID09IHRydWUgPyAnJyA6IHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZG9tLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXZlbnQgcHJveHkgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVzZUNhcHR1cmUgSXMgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBjYXB0dXJlIHBoYXNlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXZlbnRQcm94eSh1c2VDYXB0dXJlKSB7XG5cdC8qKlxuXHQgKiBQcm94eSBhbiBldmVudCB0byBob29rZWQgZXZlbnQgaGFuZGxlcnNcblx0ICogQHBhcmFtIHtQcmVhY3RFdmVudH0gZSBUaGUgZXZlbnQgb2JqZWN0IGZyb20gdGhlIGJyb3dzZXJcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHJldHVybiBmdW5jdGlvbiAoZSkge1xuXHRcdGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcblx0XHRcdGNvbnN0IGV2ZW50SGFuZGxlciA9IHRoaXMuX2xpc3RlbmVyc1tlLnR5cGUgKyB1c2VDYXB0dXJlXTtcblx0XHRcdGlmIChlLl9kaXNwYXRjaGVkID09IG51bGwpIHtcblx0XHRcdFx0ZS5fZGlzcGF0Y2hlZCA9IGV2ZW50Q2xvY2srKztcblxuXHRcdFx0XHQvLyBXaGVuIGBlLl9kaXNwYXRjaGVkYCBpcyBzbWFsbGVyIHRoYW4gdGhlIHRpbWUgd2hlbiB0aGUgdGFyZ2V0ZWQgZXZlbnRcblx0XHRcdFx0Ly8gaGFuZGxlciB3YXMgYXR0YWNoZWQgd2Uga25vdyB3ZSBoYXZlIGJ1YmJsZWQgdXAgdG8gYW4gZWxlbWVudCB0aGF0IHdhcyBhZGRlZFxuXHRcdFx0XHQvLyBkdXJpbmcgcGF0Y2hpbmcgdGhlIERPTS5cblx0XHRcdH0gZWxzZSBpZiAoZS5fZGlzcGF0Y2hlZCA8IGV2ZW50SGFuZGxlci5fYXR0YWNoZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9wdGlvbnMuZXZlbnQpIGUgPSBvcHRpb25zLmV2ZW50KGUpO1xuXHRcdFx0cmV0dXJuIFwiaGFuZGxlRXZlbnRcIiBpbiBldmVudEhhbmRsZXIgPyBldmVudEhhbmRsZXIuaGFuZGxlRXZlbnQoZSkgOiBldmVudEhhbmRsZXIoZSk7XG5cdFx0fVxuXHR9O1xufVxuXG5jb25zdCBldmVudFByb3h5ID0gY3JlYXRlRXZlbnRQcm94eShmYWxzZSk7XG5jb25zdCBldmVudFByb3h5Q2FwdHVyZSA9IGNyZWF0ZUV2ZW50UHJveHkodHJ1ZSk7XG4iLCJpbXBvcnQgeyBlbnF1ZXVlUmVuZGVyIH0gZnJvbSAnLi9jb21wb25lbnQnO1xuXG5leHBvcnQgbGV0IGkgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29udGV4dChkZWZhdWx0VmFsdWUsIGNvbnRleHRJZCkge1xuXHRjb250ZXh0SWQgPSAnX19jQycgKyBpKys7XG5cblx0Y29uc3QgY29udGV4dCA9IHtcblx0XHRfaWQ6IGNvbnRleHRJZCxcblx0XHRfZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG5cdFx0LyoqIEB0eXBlIHtGdW5jdGlvbkNvbXBvbmVudH0gKi9cblx0XHRDb25zdW1lcihwcm9wcywgY29udGV4dFZhbHVlKSB7XG5cdFx0XHQvLyByZXR1cm4gcHJvcHMuY2hpbGRyZW4oXG5cdFx0XHQvLyBcdGNvbnRleHRbY29udGV4dElkXSA/IGNvbnRleHRbY29udGV4dElkXS5wcm9wcy52YWx1ZSA6IGRlZmF1bHRWYWx1ZVxuXHRcdFx0Ly8gKTtcblx0XHRcdHJldHVybiBwcm9wcy5jaGlsZHJlbihjb250ZXh0VmFsdWUpO1xuXHRcdH0sXG5cdFx0LyoqIEB0eXBlIHtGdW5jdGlvbkNvbXBvbmVudH0gKi9cblx0XHRQcm92aWRlcihwcm9wcykge1xuXHRcdFx0aWYgKCF0aGlzLmdldENoaWxkQ29udGV4dCkge1xuXHRcdFx0XHQvKiogQHR5cGUge1NldDxDb21wb25lbnQ+IHwgbnVsbH0gKi9cblx0XHRcdFx0bGV0IHN1YnMgPSBuZXcgU2V0KCk7XG5cdFx0XHRcdGxldCBjdHggPSB7fTtcblx0XHRcdFx0Y3R4W2NvbnRleHRJZF0gPSB0aGlzO1xuXG5cdFx0XHRcdHRoaXMuZ2V0Q2hpbGRDb250ZXh0ID0gKCkgPT4gY3R4O1xuXG5cdFx0XHRcdHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0c3VicyA9IG51bGw7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmdW5jdGlvbiAoX3Byb3BzKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMucHJvcHMudmFsdWUgIT09IF9wcm9wcy52YWx1ZSkge1xuXHRcdFx0XHRcdFx0c3Vicy5mb3JFYWNoKGMgPT4ge1xuXHRcdFx0XHRcdFx0XHRjLl9mb3JjZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGVucXVldWVSZW5kZXIoYyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dGhpcy5zdWIgPSBjID0+IHtcblx0XHRcdFx0XHRzdWJzLmFkZChjKTtcblx0XHRcdFx0XHRsZXQgb2xkID0gYy5jb21wb25lbnRXaWxsVW5tb3VudDtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHN1YnMpIHtcblx0XHRcdFx0XHRcdFx0c3Vicy5kZWxldGUoYyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAob2xkKSBvbGQuY2FsbChjKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG5cdFx0fVxuXHR9O1xuXG5cdC8vIERldnRvb2xzIG5lZWRzIGFjY2VzcyB0byB0aGUgY29udGV4dCBvYmplY3Qgd2hlbiBpdFxuXHQvLyBlbmNvdW50ZXJzIGEgUHJvdmlkZXIuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnRcblx0Ly8gc2V0dGluZyBgZGlzcGxheU5hbWVgIG9uIHRoZSBjb250ZXh0IG9iamVjdCBpbnN0ZWFkXG5cdC8vIG9mIG9uIHRoZSBjb21wb25lbnQgaXRzZWxmLiBTZWU6XG5cdC8vIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9jb250ZXh0Lmh0bWwjY29udGV4dGRpc3BsYXluYW1lXG5cblx0cmV0dXJuIChjb250ZXh0LlByb3ZpZGVyLl9jb250ZXh0UmVmID0gY29udGV4dC5Db25zdW1lci5jb250ZXh0VHlwZSA9XG5cdFx0Y29udGV4dCk7XG59XG4iLCJpbXBvcnQgeyBkaWZmLCB1bm1vdW50LCBhcHBseVJlZiB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgY3JlYXRlVk5vZGUsIEZyYWdtZW50IH0gZnJvbSAnLi4vY3JlYXRlLWVsZW1lbnQnO1xuaW1wb3J0IHtcblx0RU1QVFlfT0JKLFxuXHRFTVBUWV9BUlIsXG5cdElOU0VSVF9WTk9ERSxcblx0TUFUQ0hFRCxcblx0VU5ERUZJTkVEXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBnZXREb21TaWJsaW5nIH0gZnJvbSAnLi4vY29tcG9uZW50JztcblxuLyoqXG4gKiBEaWZmIHRoZSBjaGlsZHJlbiBvZiBhIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHdob3NlIGNoaWxkcmVuIGFyZSBiZWluZ1xuICogZGlmZmVkXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVuW119IHJlbmRlclJlc3VsdFxuICogQHBhcmFtIHtWTm9kZX0gbmV3UGFyZW50Vk5vZGUgVGhlIG5ldyB2aXJ0dWFsIG5vZGUgd2hvc2UgY2hpbGRyZW4gc2hvdWxkIGJlXG4gKiBkaWZmJ2VkIGFnYWluc3Qgb2xkUGFyZW50Vk5vZGVcbiAqIEBwYXJhbSB7Vk5vZGV9IG9sZFBhcmVudFZOb2RlIFRoZSBvbGQgdmlydHVhbCBub2RlIHdob3NlIGNoaWxkcmVuIHNob3VsZCBiZVxuICogZGlmZidlZCBhZ2FpbnN0IG5ld1BhcmVudFZOb2RlXG4gKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsQ29udGV4dCBUaGUgY3VycmVudCBjb250ZXh0IG9iamVjdCAtIG1vZGlmaWVkIGJ5XG4gKiBnZXRDaGlsZENvbnRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc3BhY2UgQ3VycmVudCBuYW1lc3BhY2Ugb2YgdGhlIERPTSBub2RlIChIVE1MLCBTVkcsIG9yIE1hdGhNTClcbiAqIEBwYXJhbSB7QXJyYXk8UHJlYWN0RWxlbWVudD59IGV4Y2Vzc0RvbUNoaWxkcmVuXG4gKiBAcGFyYW0ge0FycmF5PENvbXBvbmVudD59IGNvbW1pdFF1ZXVlIExpc3Qgb2YgY29tcG9uZW50cyB3aGljaCBoYXZlIGNhbGxiYWNrc1xuICogdG8gaW52b2tlIGluIGNvbW1pdFJvb3RcbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gb2xkRG9tIFRoZSBjdXJyZW50IGF0dGFjaGVkIERPTSBlbGVtZW50IGFueSBuZXcgZG9tXG4gKiBlbGVtZW50cyBzaG91bGQgYmUgcGxhY2VkIGFyb3VuZC4gTGlrZWx5IGBudWxsYCBvbiBmaXJzdCByZW5kZXIgKGV4Y2VwdCB3aGVuXG4gKiBoeWRyYXRpbmcpLiBDYW4gYmUgYSBzaWJsaW5nIERPTSBlbGVtZW50IHdoZW4gZGlmZmluZyBGcmFnbWVudHMgdGhhdCBoYXZlXG4gKiBzaWJsaW5ncy4gSW4gbW9zdCBjYXNlcywgaXQgc3RhcnRzIG91dCBhcyBgb2xkQ2hpbGRyZW5bMF0uX2RvbWAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSHlkcmF0aW5nIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBpbiBoeWRyYXRpb25cbiAqIEBwYXJhbSB7YW55W119IHJlZlF1ZXVlIGFuIGFycmF5IG9mIGVsZW1lbnRzIG5lZWRlZCB0byBpbnZva2UgcmVmc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZkNoaWxkcmVuKFxuXHRwYXJlbnREb20sXG5cdHJlbmRlclJlc3VsdCxcblx0bmV3UGFyZW50Vk5vZGUsXG5cdG9sZFBhcmVudFZOb2RlLFxuXHRnbG9iYWxDb250ZXh0LFxuXHRuYW1lc3BhY2UsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0b2xkRG9tLFxuXHRpc0h5ZHJhdGluZyxcblx0cmVmUXVldWVcbikge1xuXHRsZXQgaSxcblx0XHQvKiogQHR5cGUge1ZOb2RlfSAqL1xuXHRcdG9sZFZOb2RlLFxuXHRcdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdFx0Y2hpbGRWTm9kZSxcblx0XHQvKiogQHR5cGUge1ByZWFjdEVsZW1lbnR9ICovXG5cdFx0bmV3RG9tLFxuXHRcdC8qKiBAdHlwZSB7UHJlYWN0RWxlbWVudH0gKi9cblx0XHRmaXJzdENoaWxkRG9tO1xuXG5cdC8vIFRoaXMgaXMgYSBjb21wcmVzc2lvbiBvZiBvbGRQYXJlbnRWTm9kZSE9bnVsbCAmJiBvbGRQYXJlbnRWTm9kZSAhPSBFTVBUWV9PQkogJiYgb2xkUGFyZW50Vk5vZGUuX2NoaWxkcmVuIHx8IEVNUFRZX0FSUlxuXHQvLyBhcyBFTVBUWV9PQkouX2NoaWxkcmVuIHNob3VsZCBiZSBgdW5kZWZpbmVkYC5cblx0LyoqIEB0eXBlIHtWTm9kZVtdfSAqL1xuXHRsZXQgb2xkQ2hpbGRyZW4gPSAob2xkUGFyZW50Vk5vZGUgJiYgb2xkUGFyZW50Vk5vZGUuX2NoaWxkcmVuKSB8fCBFTVBUWV9BUlI7XG5cblx0bGV0IG5ld0NoaWxkcmVuTGVuZ3RoID0gcmVuZGVyUmVzdWx0Lmxlbmd0aDtcblxuXHRuZXdQYXJlbnRWTm9kZS5fbmV4dERvbSA9IG9sZERvbTtcblx0Y29uc3RydWN0TmV3Q2hpbGRyZW5BcnJheShuZXdQYXJlbnRWTm9kZSwgcmVuZGVyUmVzdWx0LCBvbGRDaGlsZHJlbik7XG5cdG9sZERvbSA9IG5ld1BhcmVudFZOb2RlLl9uZXh0RG9tO1xuXG5cdGZvciAoaSA9IDA7IGkgPCBuZXdDaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG5cdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXTtcblx0XHRpZiAoY2hpbGRWTm9kZSA9PSBudWxsKSBjb250aW51ZTtcblxuXHRcdC8vIEF0IHRoaXMgcG9pbnQsIGNvbnN0cnVjdE5ld0NoaWxkcmVuQXJyYXkgaGFzIGFzc2lnbmVkIF9pbmRleCB0byBiZSB0aGVcblx0XHQvLyBtYXRjaGluZ0luZGV4IGZvciB0aGlzIFZOb2RlJ3Mgb2xkVk5vZGUgKG9yIC0xIGlmIHRoZXJlIGlzIG5vIG9sZFZOb2RlKS5cblx0XHRpZiAoY2hpbGRWTm9kZS5faW5kZXggPT09IC0xKSB7XG5cdFx0XHRvbGRWTm9kZSA9IEVNUFRZX09CSjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlbltjaGlsZFZOb2RlLl9pbmRleF0gfHwgRU1QVFlfT0JKO1xuXHRcdH1cblxuXHRcdC8vIFVwZGF0ZSBjaGlsZFZOb2RlLl9pbmRleCB0byBpdHMgZmluYWwgaW5kZXhcblx0XHRjaGlsZFZOb2RlLl9pbmRleCA9IGk7XG5cblx0XHQvLyBNb3JwaCB0aGUgb2xkIGVsZW1lbnQgaW50byB0aGUgbmV3IG9uZSwgYnV0IGRvbid0IGFwcGVuZCBpdCB0byB0aGUgZG9tIHlldFxuXHRcdGRpZmYoXG5cdFx0XHRwYXJlbnREb20sXG5cdFx0XHRjaGlsZFZOb2RlLFxuXHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdG9sZERvbSxcblx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0cmVmUXVldWVcblx0XHQpO1xuXG5cdFx0Ly8gQWRqdXN0IERPTSBub2Rlc1xuXHRcdG5ld0RvbSA9IGNoaWxkVk5vZGUuX2RvbTtcblx0XHRpZiAoY2hpbGRWTm9kZS5yZWYgJiYgb2xkVk5vZGUucmVmICE9IGNoaWxkVk5vZGUucmVmKSB7XG5cdFx0XHRpZiAob2xkVk5vZGUucmVmKSB7XG5cdFx0XHRcdGFwcGx5UmVmKG9sZFZOb2RlLnJlZiwgbnVsbCwgY2hpbGRWTm9kZSk7XG5cdFx0XHR9XG5cdFx0XHRyZWZRdWV1ZS5wdXNoKFxuXHRcdFx0XHRjaGlsZFZOb2RlLnJlZixcblx0XHRcdFx0Y2hpbGRWTm9kZS5fY29tcG9uZW50IHx8IG5ld0RvbSxcblx0XHRcdFx0Y2hpbGRWTm9kZVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoZmlyc3RDaGlsZERvbSA9PSBudWxsICYmIG5ld0RvbSAhPSBudWxsKSB7XG5cdFx0XHRmaXJzdENoaWxkRG9tID0gbmV3RG9tO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdGNoaWxkVk5vZGUuX2ZsYWdzICYgSU5TRVJUX1ZOT0RFIHx8XG5cdFx0XHRvbGRWTm9kZS5fY2hpbGRyZW4gPT09IGNoaWxkVk5vZGUuX2NoaWxkcmVuXG5cdFx0KSB7XG5cdFx0XHRvbGREb20gPSBpbnNlcnQoY2hpbGRWTm9kZSwgb2xkRG9tLCBwYXJlbnREb20pO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZS50eXBlID09ICdmdW5jdGlvbicgJiZcblx0XHRcdGNoaWxkVk5vZGUuX25leHREb20gIT09IFVOREVGSU5FRFxuXHRcdCkge1xuXHRcdFx0Ly8gU2luY2UgRnJhZ21lbnRzIG9yIGNvbXBvbmVudHMgdGhhdCByZXR1cm4gRnJhZ21lbnQgbGlrZSBWTm9kZXMgY2FuXG5cdFx0XHQvLyBjb250YWluIG11bHRpcGxlIERPTSBub2RlcyBhcyB0aGUgc2FtZSBsZXZlbCwgY29udGludWUgdGhlIGRpZmYgZnJvbVxuXHRcdFx0Ly8gdGhlIHNpYmxpbmcgb2YgbGFzdCBET00gY2hpbGQgb2YgdGhpcyBjaGlsZCBWTm9kZVxuXHRcdFx0b2xkRG9tID0gY2hpbGRWTm9kZS5fbmV4dERvbTtcblx0XHR9IGVsc2UgaWYgKG5ld0RvbSkge1xuXHRcdFx0b2xkRG9tID0gbmV3RG9tLm5leHRTaWJsaW5nO1xuXHRcdH1cblxuXHRcdC8vIEVhZ2VybHkgY2xlYW51cCBfbmV4dERvbS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJzaXN0IHRoZSB2YWx1ZSBiZWNhdXNlIGl0XG5cdFx0Ly8gaXMgb25seSB1c2VkIGJ5IGBkaWZmQ2hpbGRyZW5gIHRvIGRldGVybWluZSB3aGVyZSB0byByZXN1bWUgdGhlIGRpZmZcblx0XHQvLyBhZnRlciBkaWZmaW5nIENvbXBvbmVudHMgYW5kIEZyYWdtZW50cy4gT25jZSB3ZSBzdG9yZSBpdCB0aGUgbmV4dERPTVxuXHRcdC8vIGxvY2FsIHZhciwgd2UgY2FuIGNsZWFuIHVwIHRoZSBwcm9wZXJ0eS4gQWxzbyBwcmV2ZW50cyB1cyBoYW5naW5nIG9uIHRvXG5cdFx0Ly8gRE9NIG5vZGVzIHRoYXQgbWF5IGhhdmUgYmVlbiB1bm1vdW50ZWQuXG5cdFx0Y2hpbGRWTm9kZS5fbmV4dERvbSA9IFVOREVGSU5FRDtcblxuXHRcdC8vIFVuc2V0IGRpZmZpbmcgZmxhZ3Ncblx0XHRjaGlsZFZOb2RlLl9mbGFncyAmPSB+KElOU0VSVF9WTk9ERSB8IE1BVENIRUQpO1xuXHR9XG5cblx0Ly8gVE9ETzogV2l0aCBuZXcgY2hpbGQgZGlmZmluZyBhbGdvLCBjb25zaWRlciBhbHQgd2F5cyB0byBkaWZmIEZyYWdtZW50cy5cblx0Ly8gU3VjaCBhcyBkcm9wcGluZyBvbGREb20gYW5kIG1vdmluZyBmcmFnbWVudHMgaW4gcGxhY2Vcblx0Ly9cblx0Ly8gQmVjYXVzZSB0aGUgbmV3UGFyZW50Vk5vZGUgaXMgRnJhZ21lbnQtbGlrZSwgd2UgbmVlZCB0byBzZXQgaXQnc1xuXHQvLyBfbmV4dERvbSBwcm9wZXJ0eSB0byB0aGUgbmV4dFNpYmxpbmcgb2YgaXRzIGxhc3QgY2hpbGQgRE9NIG5vZGUuXG5cdC8vXG5cdC8vIGBvbGREb21gIGNvbnRhaW5zIHRoZSBjb3JyZWN0IHZhbHVlIGhlcmUgYmVjYXVzZSBpZiB0aGUgbGFzdCBjaGlsZFxuXHQvLyBpcyBhIEZyYWdtZW50LWxpa2UsIHRoZW4gb2xkRG9tIGhhcyBhbHJlYWR5IGJlZW4gc2V0IHRvIHRoYXQgY2hpbGQncyBfbmV4dERvbS5cblx0Ly8gSWYgdGhlIGxhc3QgY2hpbGQgaXMgYSBET00gVk5vZGUsIHRoZW4gb2xkRG9tIHdpbGwgYmUgc2V0IHRvIHRoYXQgRE9NXG5cdC8vIG5vZGUncyBuZXh0U2libGluZy5cblx0bmV3UGFyZW50Vk5vZGUuX25leHREb20gPSBvbGREb207XG5cdG5ld1BhcmVudFZOb2RlLl9kb20gPSBmaXJzdENoaWxkRG9tO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Vk5vZGV9IG5ld1BhcmVudFZOb2RlXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVuW119IHJlbmRlclJlc3VsdFxuICogQHBhcmFtIHtWTm9kZVtdfSBvbGRDaGlsZHJlblxuICovXG5mdW5jdGlvbiBjb25zdHJ1Y3ROZXdDaGlsZHJlbkFycmF5KG5ld1BhcmVudFZOb2RlLCByZW5kZXJSZXN1bHQsIG9sZENoaWxkcmVuKSB7XG5cdC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuXHRsZXQgaTtcblx0LyoqIEB0eXBlIHtWTm9kZX0gKi9cblx0bGV0IGNoaWxkVk5vZGU7XG5cdC8qKiBAdHlwZSB7Vk5vZGV9ICovXG5cdGxldCBvbGRWTm9kZTtcblxuXHRjb25zdCBuZXdDaGlsZHJlbkxlbmd0aCA9IHJlbmRlclJlc3VsdC5sZW5ndGg7XG5cdGxldCBvbGRDaGlsZHJlbkxlbmd0aCA9IG9sZENoaWxkcmVuLmxlbmd0aCxcblx0XHRyZW1haW5pbmdPbGRDaGlsZHJlbiA9IG9sZENoaWxkcmVuTGVuZ3RoO1xuXG5cdGxldCBza2V3ID0gMDtcblxuXHRuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW4gPSBbXTtcblx0Zm9yIChpID0gMDsgaSA8IG5ld0NoaWxkcmVuTGVuZ3RoOyBpKyspIHtcblx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFdlIGFyZSByZXVzaW5nIHRoZSBjaGlsZFZOb2RlIHZhcmlhYmxlIHRvIGhvbGQgYm90aCB0aGVcblx0XHQvLyBwcmUgYW5kIHBvc3Qgbm9ybWFsaXplZCBjaGlsZFZOb2RlXG5cdFx0Y2hpbGRWTm9kZSA9IHJlbmRlclJlc3VsdFtpXTtcblxuXHRcdGlmIChcblx0XHRcdGNoaWxkVk5vZGUgPT0gbnVsbCB8fFxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ2Jvb2xlYW4nIHx8XG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnZnVuY3Rpb24nXG5cdFx0KSB7XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gbnVsbDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHQvLyBJZiB0aGlzIG5ld1ZOb2RlIGlzIGJlaW5nIHJldXNlZCAoZS5nLiA8ZGl2PntyZXVzZX17cmV1c2V9PC9kaXY+KSBpbiB0aGUgc2FtZSBkaWZmLFxuXHRcdC8vIG9yIHdlIGFyZSByZW5kZXJpbmcgYSBjb21wb25lbnQgKGUuZy4gc2V0U3RhdGUpIGNvcHkgdGhlIG9sZFZOb2RlcyBzbyBpdCBjYW4gaGF2ZVxuXHRcdC8vIGl0J3Mgb3duIERPTSAmIGV0Yy4gcG9pbnRlcnNcblx0XHRlbHNlIGlmIChcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdzdHJpbmcnIHx8XG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnbnVtYmVyJyB8fFxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhbGlkLXR5cGVvZlxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ2JpZ2ludCcgfHxcblx0XHRcdGNoaWxkVk5vZGUuY29uc3RydWN0b3IgPT0gU3RyaW5nXG5cdFx0KSB7XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gY3JlYXRlVk5vZGUoXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdGNoaWxkVk5vZGUsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChpc0FycmF5KGNoaWxkVk5vZGUpKSB7XG5cdFx0XHRjaGlsZFZOb2RlID0gbmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuW2ldID0gY3JlYXRlVk5vZGUoXG5cdFx0XHRcdEZyYWdtZW50LFxuXHRcdFx0XHR7IGNoaWxkcmVuOiBjaGlsZFZOb2RlIH0sXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdG51bGxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChjaGlsZFZOb2RlLmNvbnN0cnVjdG9yID09PSBVTkRFRklORUQgJiYgY2hpbGRWTm9kZS5fZGVwdGggPiAwKSB7XG5cdFx0XHQvLyBWTm9kZSBpcyBhbHJlYWR5IGluIHVzZSwgY2xvbmUgaXQuIFRoaXMgY2FuIGhhcHBlbiBpbiB0aGUgZm9sbG93aW5nXG5cdFx0XHQvLyBzY2VuYXJpbzpcblx0XHRcdC8vICAgY29uc3QgcmV1c2UgPSA8ZGl2IC8+XG5cdFx0XHQvLyAgIDxkaXY+e3JldXNlfTxzcGFuIC8+e3JldXNlfTwvZGl2PlxuXHRcdFx0Y2hpbGRWTm9kZSA9IG5ld1BhcmVudFZOb2RlLl9jaGlsZHJlbltpXSA9IGNyZWF0ZVZOb2RlKFxuXHRcdFx0XHRjaGlsZFZOb2RlLnR5cGUsXG5cdFx0XHRcdGNoaWxkVk5vZGUucHJvcHMsXG5cdFx0XHRcdGNoaWxkVk5vZGUua2V5LFxuXHRcdFx0XHRjaGlsZFZOb2RlLnJlZiA/IGNoaWxkVk5vZGUucmVmIDogbnVsbCxcblx0XHRcdFx0Y2hpbGRWTm9kZS5fb3JpZ2luYWxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjaGlsZFZOb2RlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNrZXdlZEluZGV4ID0gaSArIHNrZXc7XG5cdFx0Y2hpbGRWTm9kZS5fcGFyZW50ID0gbmV3UGFyZW50Vk5vZGU7XG5cdFx0Y2hpbGRWTm9kZS5fZGVwdGggPSBuZXdQYXJlbnRWTm9kZS5fZGVwdGggKyAxO1xuXG5cdFx0Ly8gVGVtcG9yYXJpbHkgc3RvcmUgdGhlIG1hdGNoaW5nSW5kZXggb24gdGhlIF9pbmRleCBwcm9wZXJ0eSBzbyB3ZSBjYW4gcHVsbFxuXHRcdC8vIG91dCB0aGUgb2xkVk5vZGUgaW4gZGlmZkNoaWxkcmVuLiBXZSdsbCBvdmVycmlkZSB0aGlzIHRvIHRoZSBWTm9kZSdzXG5cdFx0Ly8gZmluYWwgaW5kZXggYWZ0ZXIgdXNpbmcgdGhpcyBwcm9wZXJ0eSB0byBnZXQgdGhlIG9sZFZOb2RlXG5cdFx0Y29uc3QgbWF0Y2hpbmdJbmRleCA9IChjaGlsZFZOb2RlLl9pbmRleCA9IGZpbmRNYXRjaGluZ0luZGV4KFxuXHRcdFx0Y2hpbGRWTm9kZSxcblx0XHRcdG9sZENoaWxkcmVuLFxuXHRcdFx0c2tld2VkSW5kZXgsXG5cdFx0XHRyZW1haW5pbmdPbGRDaGlsZHJlblxuXHRcdCkpO1xuXG5cdFx0b2xkVk5vZGUgPSBudWxsO1xuXHRcdGlmIChtYXRjaGluZ0luZGV4ICE9PSAtMSkge1xuXHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlblttYXRjaGluZ0luZGV4XTtcblx0XHRcdHJlbWFpbmluZ09sZENoaWxkcmVuLS07XG5cdFx0XHRpZiAob2xkVk5vZGUpIHtcblx0XHRcdFx0b2xkVk5vZGUuX2ZsYWdzIHw9IE1BVENIRUQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSGVyZSwgd2UgZGVmaW5lIGlzTW91bnRpbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgc2tldyBkaWZmaW5nXG5cdFx0Ly8gYWxnb3JpdGhtLiBOb2RlcyB0aGF0IGFyZSB1bnN1c3BlbmRpbmcgYXJlIGNvbnNpZGVyZWQgbW91bnRpbmcgYW5kIHdlIGRldGVjdFxuXHRcdC8vIHRoaXMgYnkgY2hlY2tpbmcgaWYgb2xkVk5vZGUuX29yaWdpbmFsID09PSBudWxsXG5cdFx0Y29uc3QgaXNNb3VudGluZyA9IG9sZFZOb2RlID09IG51bGwgfHwgb2xkVk5vZGUuX29yaWdpbmFsID09PSBudWxsO1xuXG5cdFx0aWYgKGlzTW91bnRpbmcpIHtcblx0XHRcdGlmIChtYXRjaGluZ0luZGV4ID09IC0xKSB7XG5cdFx0XHRcdHNrZXctLTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgd2UgYXJlIG1vdW50aW5nIGEgRE9NIFZOb2RlLCBtYXJrIGl0IGZvciBpbnNlcnRpb25cblx0XHRcdGlmICh0eXBlb2YgY2hpbGRWTm9kZS50eXBlICE9ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0Y2hpbGRWTm9kZS5fZmxhZ3MgfD0gSU5TRVJUX1ZOT0RFO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobWF0Y2hpbmdJbmRleCAhPT0gc2tld2VkSW5kZXgpIHtcblx0XHRcdC8vIFdoZW4gd2UgbW92ZSBlbGVtZW50cyBhcm91bmQgaS5lLiBbMCwgMSwgMl0gLS0+IFsxLCAwLCAyXVxuXHRcdFx0Ly8gLS0+IHdlIGRpZmYgMSwgd2UgZmluZCBpdCBhdCBwb3NpdGlvbiAxIHdoaWxlIG91ciBza2V3ZWQgaW5kZXggaXMgMCBhbmQgb3VyIHNrZXcgaXMgMFxuXHRcdFx0Ly8gICAgIHdlIHNldCB0aGUgc2tldyB0byAxIGFzIHdlIGZvdW5kIGFuIG9mZnNldC5cblx0XHRcdC8vIC0tPiB3ZSBkaWZmIDAsIHdlIGZpbmQgaXQgYXQgcG9zaXRpb24gMCB3aGlsZSBvdXIgc2tld2VkIGluZGV4IGlzIGF0IDIgYW5kIG91ciBza2V3IGlzIDFcblx0XHRcdC8vICAgICB0aGlzIG1ha2VzIHVzIGluY3JlYXNlIHRoZSBza2V3IGFnYWluLlxuXHRcdFx0Ly8gLS0+IHdlIGRpZmYgMiwgd2UgZmluZCBpdCBhdCBwb3NpdGlvbiAyIHdoaWxlIG91ciBza2V3ZWQgaW5kZXggaXMgYXQgNCBhbmQgb3VyIHNrZXcgaXMgMlxuXHRcdFx0Ly9cblx0XHRcdC8vIHRoaXMgYmVjb21lcyBhbiBvcHRpbWl6YXRpb24gcXVlc3Rpb24gd2hlcmUgY3VycmVudGx5IHdlIHNlZSBhIDEgZWxlbWVudCBvZmZzZXQgYXMgYW4gaW5zZXJ0aW9uXG5cdFx0XHQvLyBvciBkZWxldGlvbiBpLmUuIHdlIG9wdGltaXplIGZvciBbMCwgMSwgMl0gLS0+IFs5LCAwLCAxLCAyXVxuXHRcdFx0Ly8gd2hpbGUgYSBtb3JlIHRoYW4gMSBvZmZzZXQgd2Ugc2VlIGFzIGEgc3dhcC5cblx0XHRcdC8vIFdlIGNvdWxkIHByb2JhYmx5IGJ1aWxkIGhldXJpc3RpY3MgZm9yIGhhdmluZyBhbiBvcHRpbWl6ZWQgY291cnNlIG9mIGFjdGlvbiBoZXJlIGFzIHdlbGwsIGJ1dFxuXHRcdFx0Ly8gbWlnaHQgZ28gYXQgdGhlIGNvc3Qgb2Ygc29tZSBieXRlcy5cblx0XHRcdC8vXG5cdFx0XHQvLyBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgZm9yIGkuZS4gb25seSBzd2FwcyB3ZSdkIGp1c3QgZG8gdGhlIGxhc3QgdHdvIGNvZGUtYnJhbmNoZXMgYW5kIGhhdmVcblx0XHRcdC8vIG9ubHkgdGhlIGZpcnN0IGl0ZW0gYmUgYSByZS1zY291dGluZyBhbmQgYWxsIHRoZSBvdGhlcnMgZmFsbCBpbiB0aGVpciBza2V3ZWQgY291bnRlci1wYXJ0LlxuXHRcdFx0Ly8gV2UgY291bGQgYWxzbyBmdXJ0aGVyIG9wdGltaXplIGZvciBzd2Fwc1xuXHRcdFx0aWYgKG1hdGNoaW5nSW5kZXggPT0gc2tld2VkSW5kZXggLSAxKSB7XG5cdFx0XHRcdHNrZXctLTtcblx0XHRcdH0gZWxzZSBpZiAobWF0Y2hpbmdJbmRleCA9PSBza2V3ZWRJbmRleCArIDEpIHtcblx0XHRcdFx0c2tldysrO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG1hdGNoaW5nSW5kZXggPiBza2V3ZWRJbmRleCkge1xuXHRcdFx0XHRcdHNrZXctLTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRza2V3Kys7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIHRoaXMgVk5vZGUncyBET00gaWYgdGhlIG9yaWdpbmFsIGluZGV4IChtYXRjaGluZ0luZGV4KSBkb2Vzbid0XG5cdFx0XHRcdC8vIG1hdGNoIHRoZSBuZXcgc2tldyBpbmRleCAoaSArIG5ldyBza2V3KVxuXHRcdFx0XHQvLyBJbiB0aGUgZm9ybWVyIHR3byBicmFuY2hlcyB3ZSBrbm93IHRoYXQgaXQgbWF0Y2hlcyBhZnRlciBza2V3aW5nXG5cdFx0XHRcdGNoaWxkVk5vZGUuX2ZsYWdzIHw9IElOU0VSVF9WTk9ERTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgcmVtYWluaW5nIG9sZENoaWxkcmVuIGlmIHRoZXJlIGFyZSBhbnkuIExvb3AgZm9yd2FyZHMgc28gdGhhdCBhcyB3ZVxuXHQvLyB1bm1vdW50IERPTSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG9sZENoaWxkcmVuLCB3ZSBjYW4gYWRqdXN0IG9sZERvbSB0b1xuXHQvLyBwb2ludCB0byB0aGUgbmV4dCBjaGlsZCwgd2hpY2ggbmVlZHMgdG8gYmUgdGhlIGZpcnN0IERPTSBub2RlIHRoYXQgd29uJ3QgYmVcblx0Ly8gdW5tb3VudGVkLlxuXHRpZiAocmVtYWluaW5nT2xkQ2hpbGRyZW4pIHtcblx0XHRmb3IgKGkgPSAwOyBpIDwgb2xkQ2hpbGRyZW5MZW5ndGg7IGkrKykge1xuXHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlbltpXTtcblx0XHRcdGlmIChvbGRWTm9kZSAhPSBudWxsICYmIChvbGRWTm9kZS5fZmxhZ3MgJiBNQVRDSEVEKSA9PT0gMCkge1xuXHRcdFx0XHRpZiAob2xkVk5vZGUuX2RvbSA9PSBuZXdQYXJlbnRWTm9kZS5fbmV4dERvbSkge1xuXHRcdFx0XHRcdG5ld1BhcmVudFZOb2RlLl9uZXh0RG9tID0gZ2V0RG9tU2libGluZyhvbGRWTm9kZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR1bm1vdW50KG9sZFZOb2RlLCBvbGRWTm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtWTm9kZX0gcGFyZW50Vk5vZGVcbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudH0gb2xkRG9tXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IHBhcmVudERvbVxuICogQHJldHVybnMge1ByZWFjdEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGluc2VydChwYXJlbnRWTm9kZSwgb2xkRG9tLCBwYXJlbnREb20pIHtcblx0Ly8gTm90ZTogVk5vZGVzIGluIG5lc3RlZCBzdXNwZW5kZWQgdHJlZXMgbWF5IGJlIG1pc3NpbmcgX2NoaWxkcmVuLlxuXG5cdGlmICh0eXBlb2YgcGFyZW50Vk5vZGUudHlwZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0bGV0IGNoaWxkcmVuID0gcGFyZW50Vk5vZGUuX2NoaWxkcmVuO1xuXHRcdGZvciAobGV0IGkgPSAwOyBjaGlsZHJlbiAmJiBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChjaGlsZHJlbltpXSkge1xuXHRcdFx0XHQvLyBJZiB3ZSBlbnRlciB0aGlzIGNvZGUgcGF0aCBvbiBzQ1UgYmFpbG91dCwgd2hlcmUgd2UgY29weVxuXHRcdFx0XHQvLyBvbGRWTm9kZS5fY2hpbGRyZW4gdG8gbmV3Vk5vZGUuX2NoaWxkcmVuLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb2xkXG5cdFx0XHRcdC8vIGNoaWxkcmVuJ3MgX3BhcmVudCBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSBuZXdWTm9kZSAocGFyZW50Vk5vZGVcblx0XHRcdFx0Ly8gaGVyZSkuXG5cdFx0XHRcdGNoaWxkcmVuW2ldLl9wYXJlbnQgPSBwYXJlbnRWTm9kZTtcblx0XHRcdFx0b2xkRG9tID0gaW5zZXJ0KGNoaWxkcmVuW2ldLCBvbGREb20sIHBhcmVudERvbSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9sZERvbTtcblx0fSBlbHNlIGlmIChwYXJlbnRWTm9kZS5fZG9tICE9IG9sZERvbSkge1xuXHRcdGlmIChvbGREb20gJiYgcGFyZW50Vk5vZGUudHlwZSAmJiAhcGFyZW50RG9tLmNvbnRhaW5zKG9sZERvbSkpIHtcblx0XHRcdG9sZERvbSA9IGdldERvbVNpYmxpbmcocGFyZW50Vk5vZGUpO1xuXHRcdH1cblx0XHRwYXJlbnREb20uaW5zZXJ0QmVmb3JlKHBhcmVudFZOb2RlLl9kb20sIG9sZERvbSB8fCBudWxsKTtcblx0XHRvbGREb20gPSBwYXJlbnRWTm9kZS5fZG9tO1xuXHR9XG5cblx0ZG8ge1xuXHRcdG9sZERvbSA9IG9sZERvbSAmJiBvbGREb20ubmV4dFNpYmxpbmc7XG5cdH0gd2hpbGUgKG9sZERvbSAhPSBudWxsICYmIG9sZERvbS5ub2RlVHlwZSA9PT0gOCk7XG5cblx0cmV0dXJuIG9sZERvbTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGFuZCBsb29wIHRocm91Z2ggdGhlIGNoaWxkcmVuIG9mIGEgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge0NvbXBvbmVudENoaWxkcmVufSBjaGlsZHJlbiBUaGUgdW5mbGF0dGVuZWQgY2hpbGRyZW4gb2YgYSB2aXJ0dWFsXG4gKiBub2RlXG4gKiBAcmV0dXJucyB7Vk5vZGVbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2hpbGRBcnJheShjaGlsZHJlbiwgb3V0KSB7XG5cdG91dCA9IG91dCB8fCBbXTtcblx0aWYgKGNoaWxkcmVuID09IG51bGwgfHwgdHlwZW9mIGNoaWxkcmVuID09ICdib29sZWFuJykge1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG5cdFx0Y2hpbGRyZW4uc29tZShjaGlsZCA9PiB7XG5cdFx0XHR0b0NoaWxkQXJyYXkoY2hpbGQsIG91dCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0LnB1c2goY2hpbGRyZW4pO1xuXHR9XG5cdHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtWTm9kZX0gY2hpbGRWTm9kZVxuICogQHBhcmFtIHtWTm9kZVtdfSBvbGRDaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IHNrZXdlZEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gcmVtYWluaW5nT2xkQ2hpbGRyZW5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGZpbmRNYXRjaGluZ0luZGV4KFxuXHRjaGlsZFZOb2RlLFxuXHRvbGRDaGlsZHJlbixcblx0c2tld2VkSW5kZXgsXG5cdHJlbWFpbmluZ09sZENoaWxkcmVuXG4pIHtcblx0Y29uc3Qga2V5ID0gY2hpbGRWTm9kZS5rZXk7XG5cdGNvbnN0IHR5cGUgPSBjaGlsZFZOb2RlLnR5cGU7XG5cdGxldCB4ID0gc2tld2VkSW5kZXggLSAxO1xuXHRsZXQgeSA9IHNrZXdlZEluZGV4ICsgMTtcblx0bGV0IG9sZFZOb2RlID0gb2xkQ2hpbGRyZW5bc2tld2VkSW5kZXhdO1xuXG5cdC8vIFdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGEgc2VhcmNoIGlmIHRoZXJlIGFyZSBtb3JlIGNoaWxkcmVuXG5cdC8vIChyZW1haW5pbmdPbGRDaGlsZHJlbikgdG8gc2VhcmNoLiBIb3dldmVyLCBpZiB0aGUgb2xkVk5vZGUgd2UganVzdCBsb29rZWRcblx0Ly8gYXQgc2tld2VkSW5kZXggd2FzIG5vdCBhbHJlYWR5IHVzZWQgaW4gdGhpcyBkaWZmLCB0aGVuIHRoZXJlIG11c3QgYmUgYXRcblx0Ly8gbGVhc3QgMSBvdGhlciAoc28gZ3JlYXRlciB0aGFuIDEpIHJlbWFpbmluZ09sZENoaWxkcmVuIHRvIGF0dGVtcHQgdG8gbWF0Y2hcblx0Ly8gYWdhaW5zdC4gU28gdGhlIGZvbGxvd2luZyBjb25kaXRpb24gY2hlY2tzIHRoYXQgZW5zdXJpbmdcblx0Ly8gcmVtYWluaW5nT2xkQ2hpbGRyZW4gPiAxIGlmIHRoZSBvbGRWTm9kZSBpcyBub3QgYWxyZWFkeSB1c2VkL21hdGNoZWQuIEVsc2Vcblx0Ly8gaWYgdGhlIG9sZFZOb2RlIHdhcyBudWxsIG9yIG1hdGNoZWQsIHRoZW4gdGhlcmUgY291bGQgbmVlZHMgdG8gYmUgYXQgbGVhc3Rcblx0Ly8gMSAoYWthIGByZW1haW5pbmdPbGRDaGlsZHJlbiA+IDBgKSBjaGlsZHJlbiB0byBmaW5kIGFuZCBjb21wYXJlIGFnYWluc3QuXG5cdC8vXG5cdC8vIElmIHRoZXJlIGlzIGFuIHVua2V5ZWQgZnVuY3Rpb25hbCBWTm9kZSwgdGhhdCBpc24ndCBhIGJ1aWx0LWluIGxpa2Ugb3VyIEZyYWdtZW50LFxuXHQvLyB3ZSBzaG91bGQgbm90IHNlYXJjaCBhcyB3ZSByaXNrIHJlLXVzaW5nIHN0YXRlIG9mIGFuIHVucmVsYXRlZCBWTm9kZS5cblx0bGV0IHNob3VsZFNlYXJjaCA9XG5cdFx0KHR5cGVvZiB0eXBlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGUgPT09IEZyYWdtZW50IHx8IGtleSkgJiZcblx0XHRyZW1haW5pbmdPbGRDaGlsZHJlbiA+XG5cdFx0XHQob2xkVk5vZGUgIT0gbnVsbCAmJiAob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDAgPyAxIDogMCk7XG5cblx0aWYgKFxuXHRcdG9sZFZOb2RlID09PSBudWxsIHx8XG5cdFx0KG9sZFZOb2RlICYmXG5cdFx0XHRrZXkgPT0gb2xkVk5vZGUua2V5ICYmXG5cdFx0XHR0eXBlID09PSBvbGRWTm9kZS50eXBlICYmXG5cdFx0XHQob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDApXG5cdCkge1xuXHRcdHJldHVybiBza2V3ZWRJbmRleDtcblx0fSBlbHNlIGlmIChzaG91bGRTZWFyY2gpIHtcblx0XHR3aGlsZSAoeCA+PSAwIHx8IHkgPCBvbGRDaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdGlmICh4ID49IDApIHtcblx0XHRcdFx0b2xkVk5vZGUgPSBvbGRDaGlsZHJlblt4XTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9sZFZOb2RlICYmXG5cdFx0XHRcdFx0KG9sZFZOb2RlLl9mbGFncyAmIE1BVENIRUQpID09PSAwICYmXG5cdFx0XHRcdFx0a2V5ID09IG9sZFZOb2RlLmtleSAmJlxuXHRcdFx0XHRcdHR5cGUgPT09IG9sZFZOb2RlLnR5cGVcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHg7XG5cdFx0XHRcdH1cblx0XHRcdFx0eC0tO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoeSA8IG9sZENoaWxkcmVuLmxlbmd0aCkge1xuXHRcdFx0XHRvbGRWTm9kZSA9IG9sZENoaWxkcmVuW3ldO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b2xkVk5vZGUgJiZcblx0XHRcdFx0XHQob2xkVk5vZGUuX2ZsYWdzICYgTUFUQ0hFRCkgPT09IDAgJiZcblx0XHRcdFx0XHRrZXkgPT0gb2xkVk5vZGUua2V5ICYmXG5cdFx0XHRcdFx0dHlwZSA9PT0gb2xkVk5vZGUudHlwZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4geTtcblx0XHRcdFx0fVxuXHRcdFx0XHR5Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIC0xO1xufVxuIiwiaW1wb3J0IHtcblx0RU1QVFlfT0JKLFxuXHRNT0RFX0hZRFJBVEUsXG5cdE1PREVfU1VTUEVOREVELFxuXHRSRVNFVF9NT0RFLFxuXHRVTkRFRklORURcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIGdldERvbVNpYmxpbmcgfSBmcm9tICcuLi9jb21wb25lbnQnO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICcuLi9jcmVhdGUtZWxlbWVudCc7XG5pbXBvcnQgeyBkaWZmQ2hpbGRyZW4gfSBmcm9tICcuL2NoaWxkcmVuJztcbmltcG9ydCB7IHNldFByb3BlcnR5IH0gZnJvbSAnLi9wcm9wcyc7XG5pbXBvcnQgeyBhc3NpZ24sIGlzQXJyYXksIHJlbW92ZU5vZGUsIHNsaWNlIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgb3B0aW9ucyBmcm9tICcuLi9vcHRpb25zJztcblxuLyoqXG4gKiBEaWZmIHR3byB2aXJ0dWFsIG5vZGVzIGFuZCBhcHBseSBwcm9wZXIgY2hhbmdlcyB0byB0aGUgRE9NXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IHBhcmVudERvbSBUaGUgcGFyZW50IG9mIHRoZSBET00gZWxlbWVudFxuICogQHBhcmFtIHtWTm9kZX0gbmV3Vk5vZGUgVGhlIG5ldyB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7Vk5vZGV9IG9sZFZOb2RlIFRoZSBvbGQgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsQ29udGV4dCBUaGUgY3VycmVudCBjb250ZXh0IG9iamVjdC4gTW9kaWZpZWQgYnlcbiAqIGdldENoaWxkQ29udGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVzcGFjZSBDdXJyZW50IG5hbWVzcGFjZSBvZiB0aGUgRE9NIG5vZGUgKEhUTUwsIFNWRywgb3IgTWF0aE1MKVxuICogQHBhcmFtIHtBcnJheTxQcmVhY3RFbGVtZW50Pn0gZXhjZXNzRG9tQ2hpbGRyZW5cbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzIHdoaWNoIGhhdmUgY2FsbGJhY2tzXG4gKiB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBvbGREb20gVGhlIGN1cnJlbnQgYXR0YWNoZWQgRE9NIGVsZW1lbnQgYW55IG5ldyBkb21cbiAqIGVsZW1lbnRzIHNob3VsZCBiZSBwbGFjZWQgYXJvdW5kLiBMaWtlbHkgYG51bGxgIG9uIGZpcnN0IHJlbmRlciAoZXhjZXB0IHdoZW5cbiAqIGh5ZHJhdGluZykuIENhbiBiZSBhIHNpYmxpbmcgRE9NIGVsZW1lbnQgd2hlbiBkaWZmaW5nIEZyYWdtZW50cyB0aGF0IGhhdmVcbiAqIHNpYmxpbmdzLiBJbiBtb3N0IGNhc2VzLCBpdCBzdGFydHMgb3V0IGFzIGBvbGRDaGlsZHJlblswXS5fZG9tYC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIeWRyYXRpbmcgV2hldGhlciBvciBub3Qgd2UgYXJlIGluIGh5ZHJhdGlvblxuICogQHBhcmFtIHthbnlbXX0gcmVmUXVldWUgYW4gYXJyYXkgb2YgZWxlbWVudHMgbmVlZGVkIHRvIGludm9rZSByZWZzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmKFxuXHRwYXJlbnREb20sXG5cdG5ld1ZOb2RlLFxuXHRvbGRWTm9kZSxcblx0Z2xvYmFsQ29udGV4dCxcblx0bmFtZXNwYWNlLFxuXHRleGNlc3NEb21DaGlsZHJlbixcblx0Y29tbWl0UXVldWUsXG5cdG9sZERvbSxcblx0aXNIeWRyYXRpbmcsXG5cdHJlZlF1ZXVlXG4pIHtcblx0LyoqIEB0eXBlIHthbnl9ICovXG5cdGxldCB0bXAsXG5cdFx0bmV3VHlwZSA9IG5ld1ZOb2RlLnR5cGU7XG5cblx0Ly8gV2hlbiBwYXNzaW5nIHRocm91Z2ggY3JlYXRlRWxlbWVudCBpdCBhc3NpZ25zIHRoZSBvYmplY3Rcblx0Ly8gY29uc3RydWN0b3IgYXMgdW5kZWZpbmVkLiBUaGlzIHRvIHByZXZlbnQgSlNPTi1pbmplY3Rpb24uXG5cdGlmIChuZXdWTm9kZS5jb25zdHJ1Y3RvciAhPT0gVU5ERUZJTkVEKSByZXR1cm4gbnVsbDtcblxuXHQvLyBJZiB0aGUgcHJldmlvdXMgZGlmZiBiYWlsZWQgb3V0LCByZXN1bWUgY3JlYXRpbmcvaHlkcmF0aW5nLlxuXHRpZiAob2xkVk5vZGUuX2ZsYWdzICYgTU9ERV9TVVNQRU5ERUQpIHtcblx0XHRpc0h5ZHJhdGluZyA9ICEhKG9sZFZOb2RlLl9mbGFncyAmIE1PREVfSFlEUkFURSk7XG5cdFx0b2xkRG9tID0gbmV3Vk5vZGUuX2RvbSA9IG9sZFZOb2RlLl9kb207XG5cdFx0ZXhjZXNzRG9tQ2hpbGRyZW4gPSBbb2xkRG9tXTtcblx0fVxuXG5cdGlmICgodG1wID0gb3B0aW9ucy5fZGlmZikpIHRtcChuZXdWTm9kZSk7XG5cblx0b3V0ZXI6IGlmICh0eXBlb2YgbmV3VHlwZSA9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGxldCBjLCBpc05ldywgb2xkUHJvcHMsIG9sZFN0YXRlLCBzbmFwc2hvdCwgY2xlYXJQcm9jZXNzaW5nRXhjZXB0aW9uO1xuXHRcdFx0bGV0IG5ld1Byb3BzID0gbmV3Vk5vZGUucHJvcHM7XG5cdFx0XHRjb25zdCBpc0NsYXNzQ29tcG9uZW50ID1cblx0XHRcdFx0J3Byb3RvdHlwZScgaW4gbmV3VHlwZSAmJiBuZXdUeXBlLnByb3RvdHlwZS5yZW5kZXI7XG5cblx0XHRcdC8vIE5lY2Vzc2FyeSBmb3IgY3JlYXRlQ29udGV4dCBhcGkuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSB3aWxsIHBhc3Ncblx0XHRcdC8vIHRoZSBjb250ZXh0IHZhbHVlIGFzIGB0aGlzLmNvbnRleHRgIGp1c3QgZm9yIHRoaXMgY29tcG9uZW50LlxuXHRcdFx0dG1wID0gbmV3VHlwZS5jb250ZXh0VHlwZTtcblx0XHRcdGxldCBwcm92aWRlciA9IHRtcCAmJiBnbG9iYWxDb250ZXh0W3RtcC5faWRdO1xuXHRcdFx0bGV0IGNvbXBvbmVudENvbnRleHQgPSB0bXBcblx0XHRcdFx0PyBwcm92aWRlclxuXHRcdFx0XHRcdD8gcHJvdmlkZXIucHJvcHMudmFsdWVcblx0XHRcdFx0XHQ6IHRtcC5fZGVmYXVsdFZhbHVlXG5cdFx0XHRcdDogZ2xvYmFsQ29udGV4dDtcblxuXHRcdFx0Ly8gR2V0IGNvbXBvbmVudCBhbmQgc2V0IGl0IHRvIGBjYFxuXHRcdFx0aWYgKG9sZFZOb2RlLl9jb21wb25lbnQpIHtcblx0XHRcdFx0YyA9IG5ld1ZOb2RlLl9jb21wb25lbnQgPSBvbGRWTm9kZS5fY29tcG9uZW50O1xuXHRcdFx0XHRjbGVhclByb2Nlc3NpbmdFeGNlcHRpb24gPSBjLl9wcm9jZXNzaW5nRXhjZXB0aW9uID0gYy5fcGVuZGluZ0Vycm9yO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSW5zdGFudGlhdGUgdGhlIG5ldyBjb21wb25lbnRcblx0XHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQpIHtcblx0XHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRoZSBjaGVjayBhYm92ZSB2ZXJpZmllcyB0aGF0IG5ld1R5cGUgaXMgc3VwcG9zZSB0byBiZSBjb25zdHJ1Y3RlZFxuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jb21wb25lbnQgPSBjID0gbmV3IG5ld1R5cGUobmV3UHJvcHMsIGNvbXBvbmVudENvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRydXN0IG1lLCBDb21wb25lbnQgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlIHdlIHdhbnRcblx0XHRcdFx0XHRuZXdWTm9kZS5fY29tcG9uZW50ID0gYyA9IG5ldyBCYXNlQ29tcG9uZW50KFxuXHRcdFx0XHRcdFx0bmV3UHJvcHMsXG5cdFx0XHRcdFx0XHRjb21wb25lbnRDb250ZXh0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjLmNvbnN0cnVjdG9yID0gbmV3VHlwZTtcblx0XHRcdFx0XHRjLnJlbmRlciA9IGRvUmVuZGVyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcm92aWRlcikgcHJvdmlkZXIuc3ViKGMpO1xuXG5cdFx0XHRcdGMucHJvcHMgPSBuZXdQcm9wcztcblx0XHRcdFx0aWYgKCFjLnN0YXRlKSBjLnN0YXRlID0ge307XG5cdFx0XHRcdGMuY29udGV4dCA9IGNvbXBvbmVudENvbnRleHQ7XG5cdFx0XHRcdGMuX2dsb2JhbENvbnRleHQgPSBnbG9iYWxDb250ZXh0O1xuXHRcdFx0XHRpc05ldyA9IGMuX2RpcnR5ID0gdHJ1ZTtcblx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzID0gW107XG5cdFx0XHRcdGMuX3N0YXRlQ2FsbGJhY2tzID0gW107XG5cdFx0XHR9XG5cblx0XHRcdC8vIEludm9rZSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcblx0XHRcdGlmIChpc0NsYXNzQ29tcG9uZW50ICYmIGMuX25leHRTdGF0ZSA9PSBudWxsKSB7XG5cdFx0XHRcdGMuX25leHRTdGF0ZSA9IGMuc3RhdGU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0NsYXNzQ29tcG9uZW50ICYmIG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9IG51bGwpIHtcblx0XHRcdFx0aWYgKGMuX25leHRTdGF0ZSA9PSBjLnN0YXRlKSB7XG5cdFx0XHRcdFx0Yy5fbmV4dFN0YXRlID0gYXNzaWduKHt9LCBjLl9uZXh0U3RhdGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXNzaWduKFxuXHRcdFx0XHRcdGMuX25leHRTdGF0ZSxcblx0XHRcdFx0XHRuZXdUeXBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXdQcm9wcywgYy5fbmV4dFN0YXRlKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRvbGRQcm9wcyA9IGMucHJvcHM7XG5cdFx0XHRvbGRTdGF0ZSA9IGMuc3RhdGU7XG5cdFx0XHRjLl92bm9kZSA9IG5ld1ZOb2RlO1xuXG5cdFx0XHQvLyBJbnZva2UgcHJlLXJlbmRlciBsaWZlY3ljbGUgbWV0aG9kc1xuXHRcdFx0aWYgKGlzTmV3KSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRpc0NsYXNzQ29tcG9uZW50ICYmXG5cdFx0XHRcdFx0bmV3VHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT0gbnVsbCAmJlxuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbE1vdW50ICE9IG51bGxcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsTW91bnQoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc0NsYXNzQ29tcG9uZW50ICYmIGMuY29tcG9uZW50RGlkTW91bnQgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKGMuY29tcG9uZW50RGlkTW91bnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0aXNDbGFzc0NvbXBvbmVudCAmJlxuXHRcdFx0XHRcdG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09IG51bGwgJiZcblx0XHRcdFx0XHRuZXdQcm9wcyAhPT0gb2xkUHJvcHMgJiZcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgIT0gbnVsbFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIGNvbXBvbmVudENvbnRleHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFjLl9mb3JjZSAmJlxuXHRcdFx0XHRcdCgoYy5zaG91bGRDb21wb25lbnRVcGRhdGUgIT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0Yy5zaG91bGRDb21wb25lbnRVcGRhdGUoXG5cdFx0XHRcdFx0XHRcdG5ld1Byb3BzLFxuXHRcdFx0XHRcdFx0XHRjLl9uZXh0U3RhdGUsXG5cdFx0XHRcdFx0XHRcdGNvbXBvbmVudENvbnRleHRcblx0XHRcdFx0XHRcdCkgPT09IGZhbHNlKSB8fFxuXHRcdFx0XHRcdFx0bmV3Vk5vZGUuX29yaWdpbmFsID09PSBvbGRWTm9kZS5fb3JpZ2luYWwpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIE1vcmUgaW5mbyBhYm91dCB0aGlzIGhlcmU6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0pvdmlEZUNyb29jay9iZWM1ZjJjZTkzNTQ0ZDJlNjA3MGVmOGUwMDM2ZTRlOFxuXHRcdFx0XHRcdGlmIChuZXdWTm9kZS5fb3JpZ2luYWwgIT09IG9sZFZOb2RlLl9vcmlnaW5hbCkge1xuXHRcdFx0XHRcdFx0Ly8gV2hlbiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgYmFpbCBiZWNhdXNlIG9mIHNDVSB3ZSBoYXZlIHRvIHVwZGF0ZVxuXHRcdFx0XHRcdFx0Ly8gdGhlIHByb3BzLCBzdGF0ZSBhbmQgZGlydHktc3RhdGUuXG5cdFx0XHRcdFx0XHQvLyB3aGVuIHdlIGFyZSBkZWFsaW5nIHdpdGggc3RyaWN0LWVxdWFsaXR5IHdlIGRvbid0IGFzIHRoZSBjaGlsZCBjb3VsZCBzdGlsbFxuXHRcdFx0XHRcdFx0Ly8gYmUgZGlydGllZCBzZWUgIzM4ODNcblx0XHRcdFx0XHRcdGMucHJvcHMgPSBuZXdQcm9wcztcblx0XHRcdFx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cdFx0XHRcdFx0XHRjLl9kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG5ld1ZOb2RlLl9kb20gPSBvbGRWTm9kZS5fZG9tO1xuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRcdFx0XHRuZXdWTm9kZS5fY2hpbGRyZW4uc29tZSh2bm9kZSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodm5vZGUpIHZub2RlLl9wYXJlbnQgPSBuZXdWTm9kZTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYy5fc3RhdGVDYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKGMuX3N0YXRlQ2FsbGJhY2tzW2ldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Yy5fc3RhdGVDYWxsYmFja3MgPSBbXTtcblxuXHRcdFx0XHRcdGlmIChjLl9yZW5kZXJDYWxsYmFja3MubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRjb21taXRRdWV1ZS5wdXNoKGMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrIG91dGVyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGMuY29tcG9uZW50V2lsbFVwZGF0ZSAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsVXBkYXRlKG5ld1Byb3BzLCBjLl9uZXh0U3RhdGUsIGNvbXBvbmVudENvbnRleHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQgJiYgYy5jb21wb25lbnREaWRVcGRhdGUgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcblx0XHRcdFx0XHRcdGMuY29tcG9uZW50RGlkVXBkYXRlKG9sZFByb3BzLCBvbGRTdGF0ZSwgc25hcHNob3QpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGMuY29udGV4dCA9IGNvbXBvbmVudENvbnRleHQ7XG5cdFx0XHRjLnByb3BzID0gbmV3UHJvcHM7XG5cdFx0XHRjLl9wYXJlbnREb20gPSBwYXJlbnREb207XG5cdFx0XHRjLl9mb3JjZSA9IGZhbHNlO1xuXG5cdFx0XHRsZXQgcmVuZGVySG9vayA9IG9wdGlvbnMuX3JlbmRlcixcblx0XHRcdFx0Y291bnQgPSAwO1xuXHRcdFx0aWYgKGlzQ2xhc3NDb21wb25lbnQpIHtcblx0XHRcdFx0Yy5zdGF0ZSA9IGMuX25leHRTdGF0ZTtcblx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblxuXHRcdFx0XHRpZiAocmVuZGVySG9vaykgcmVuZGVySG9vayhuZXdWTm9kZSk7XG5cblx0XHRcdFx0dG1wID0gYy5yZW5kZXIoYy5wcm9wcywgYy5zdGF0ZSwgYy5jb250ZXh0KTtcblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGMuX3N0YXRlQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goYy5fc3RhdGVDYWxsYmFja3NbaV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGMuX3N0YXRlQ2FsbGJhY2tzID0gW107XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAocmVuZGVySG9vaykgcmVuZGVySG9vayhuZXdWTm9kZSk7XG5cblx0XHRcdFx0XHR0bXAgPSBjLnJlbmRlcihjLnByb3BzLCBjLnN0YXRlLCBjLmNvbnRleHQpO1xuXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIHNldFN0YXRlIGNhbGxlZCBpbiByZW5kZXIsIHNlZSAjMjU1M1xuXHRcdFx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cdFx0XHRcdH0gd2hpbGUgKGMuX2RpcnR5ICYmICsrY291bnQgPCAyNSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhhbmRsZSBzZXRTdGF0ZSBjYWxsZWQgaW4gcmVuZGVyLCBzZWUgIzI1NTNcblx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cblx0XHRcdGlmIChjLmdldENoaWxkQ29udGV4dCAhPSBudWxsKSB7XG5cdFx0XHRcdGdsb2JhbENvbnRleHQgPSBhc3NpZ24oYXNzaWduKHt9LCBnbG9iYWxDb250ZXh0KSwgYy5nZXRDaGlsZENvbnRleHQoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0NsYXNzQ29tcG9uZW50ICYmICFpc05ldyAmJiBjLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICE9IG51bGwpIHtcblx0XHRcdFx0c25hcHNob3QgPSBjLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKG9sZFByb3BzLCBvbGRTdGF0ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBpc1RvcExldmVsRnJhZ21lbnQgPVxuXHRcdFx0XHR0bXAgIT0gbnVsbCAmJiB0bXAudHlwZSA9PT0gRnJhZ21lbnQgJiYgdG1wLmtleSA9PSBudWxsO1xuXHRcdFx0bGV0IHJlbmRlclJlc3VsdCA9IGlzVG9wTGV2ZWxGcmFnbWVudCA/IHRtcC5wcm9wcy5jaGlsZHJlbiA6IHRtcDtcblxuXHRcdFx0ZGlmZkNoaWxkcmVuKFxuXHRcdFx0XHRwYXJlbnREb20sXG5cdFx0XHRcdGlzQXJyYXkocmVuZGVyUmVzdWx0KSA/IHJlbmRlclJlc3VsdCA6IFtyZW5kZXJSZXN1bHRdLFxuXHRcdFx0XHRuZXdWTm9kZSxcblx0XHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRcdGdsb2JhbENvbnRleHQsXG5cdFx0XHRcdG5hbWVzcGFjZSxcblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRcdGNvbW1pdFF1ZXVlLFxuXHRcdFx0XHRvbGREb20sXG5cdFx0XHRcdGlzSHlkcmF0aW5nLFxuXHRcdFx0XHRyZWZRdWV1ZVxuXHRcdFx0KTtcblxuXHRcdFx0Yy5iYXNlID0gbmV3Vk5vZGUuX2RvbTtcblxuXHRcdFx0Ly8gV2Ugc3VjY2Vzc2Z1bGx5IHJlbmRlcmVkIHRoaXMgVk5vZGUsIHVuc2V0IGFueSBzdG9yZWQgaHlkcmF0aW9uL2JhaWxvdXQgc3RhdGU6XG5cdFx0XHRuZXdWTm9kZS5fZmxhZ3MgJj0gUkVTRVRfTU9ERTtcblxuXHRcdFx0aWYgKGMuX3JlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdFx0Y29tbWl0UXVldWUucHVzaChjKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNsZWFyUHJvY2Vzc2luZ0V4Y2VwdGlvbikge1xuXHRcdFx0XHRjLl9wZW5kaW5nRXJyb3IgPSBjLl9wcm9jZXNzaW5nRXhjZXB0aW9uID0gbnVsbDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRuZXdWTm9kZS5fb3JpZ2luYWwgPSBudWxsO1xuXHRcdFx0Ly8gaWYgaHlkcmF0aW5nIG9yIGNyZWF0aW5nIGluaXRpYWwgdHJlZSwgYmFpbG91dCBwcmVzZXJ2ZXMgRE9NOlxuXHRcdFx0aWYgKGlzSHlkcmF0aW5nIHx8IGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRcdFx0bmV3Vk5vZGUuX2ZsYWdzIHw9IGlzSHlkcmF0aW5nXG5cdFx0XHRcdFx0PyBNT0RFX0hZRFJBVEUgfCBNT0RFX1NVU1BFTkRFRFxuXHRcdFx0XHRcdDogTU9ERV9TVVNQRU5ERUQ7XG5cblx0XHRcdFx0d2hpbGUgKG9sZERvbSAmJiBvbGREb20ubm9kZVR5cGUgPT09IDggJiYgb2xkRG9tLm5leHRTaWJsaW5nKSB7XG5cdFx0XHRcdFx0b2xkRG9tID0gb2xkRG9tLm5leHRTaWJsaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuW2V4Y2Vzc0RvbUNoaWxkcmVuLmluZGV4T2Yob2xkRG9tKV0gPSBudWxsO1xuXHRcdFx0XHRuZXdWTm9kZS5fZG9tID0gb2xkRG9tO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3Vk5vZGUuX2RvbSA9IG9sZFZOb2RlLl9kb207XG5cdFx0XHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRcdH1cblx0XHRcdG9wdGlvbnMuX2NhdGNoRXJyb3IoZSwgbmV3Vk5vZGUsIG9sZFZOb2RlKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0ZXhjZXNzRG9tQ2hpbGRyZW4gPT0gbnVsbCAmJlxuXHRcdG5ld1ZOb2RlLl9vcmlnaW5hbCA9PT0gb2xkVk5vZGUuX29yaWdpbmFsXG5cdCkge1xuXHRcdG5ld1ZOb2RlLl9jaGlsZHJlbiA9IG9sZFZOb2RlLl9jaGlsZHJlbjtcblx0XHRuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0fSBlbHNlIHtcblx0XHRuZXdWTm9kZS5fZG9tID0gZGlmZkVsZW1lbnROb2Rlcyhcblx0XHRcdG9sZFZOb2RlLl9kb20sXG5cdFx0XHRuZXdWTm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Z2xvYmFsQ29udGV4dCxcblx0XHRcdG5hbWVzcGFjZSxcblx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRpc0h5ZHJhdGluZyxcblx0XHRcdHJlZlF1ZXVlXG5cdFx0KTtcblx0fVxuXG5cdGlmICgodG1wID0gb3B0aW9ucy5kaWZmZWQpKSB0bXAobmV3Vk5vZGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzXG4gKiB3aGljaCBoYXZlIGNhbGxiYWNrcyB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtWTm9kZX0gcm9vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWl0Um9vdChjb21taXRRdWV1ZSwgcm9vdCwgcmVmUXVldWUpIHtcblx0cm9vdC5fbmV4dERvbSA9IFVOREVGSU5FRDtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHJlZlF1ZXVlLmxlbmd0aDsgaSsrKSB7XG5cdFx0YXBwbHlSZWYocmVmUXVldWVbaV0sIHJlZlF1ZXVlWysraV0sIHJlZlF1ZXVlWysraV0pO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMuX2NvbW1pdCkgb3B0aW9ucy5fY29tbWl0KHJvb3QsIGNvbW1pdFF1ZXVlKTtcblxuXHRjb21taXRRdWV1ZS5zb21lKGMgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFJldXNlIHRoZSBjb21taXRRdWV1ZSB2YXJpYWJsZSBoZXJlIHNvIHRoZSB0eXBlIGNoYW5nZXNcblx0XHRcdGNvbW1pdFF1ZXVlID0gYy5fcmVuZGVyQ2FsbGJhY2tzO1xuXHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzID0gW107XG5cdFx0XHRjb21taXRRdWV1ZS5zb21lKGNiID0+IHtcblx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBTZWUgYWJvdmUgY29tbWVudCBvbiBjb21taXRRdWV1ZVxuXHRcdFx0XHRjYi5jYWxsKGMpO1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBjLl92bm9kZSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBEaWZmIHR3byB2aXJ0dWFsIG5vZGVzIHJlcHJlc2VudGluZyBET00gZWxlbWVudFxuICogQHBhcmFtIHtQcmVhY3RFbGVtZW50fSBkb20gVGhlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgdmlydHVhbCBub2Rlc1xuICogYmVpbmcgZGlmZmVkXG4gKiBAcGFyYW0ge1ZOb2RlfSBuZXdWTm9kZSBUaGUgbmV3IHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtWTm9kZX0gb2xkVk5vZGUgVGhlIG9sZCB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBnbG9iYWxDb250ZXh0IFRoZSBjdXJyZW50IGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNwYWNlIEN1cnJlbnQgbmFtZXNwYWNlIG9mIHRoZSBET00gbm9kZSAoSFRNTCwgU1ZHLCBvciBNYXRoTUwpXG4gKiBAcGFyYW0ge0FycmF5PFByZWFjdEVsZW1lbnQ+fSBleGNlc3NEb21DaGlsZHJlblxuICogQHBhcmFtIHtBcnJheTxDb21wb25lbnQ+fSBjb21taXRRdWV1ZSBMaXN0IG9mIGNvbXBvbmVudHMgd2hpY2ggaGF2ZSBjYWxsYmFja3NcbiAqIHRvIGludm9rZSBpbiBjb21taXRSb290XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSHlkcmF0aW5nIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBpbiBoeWRyYXRpb25cbiAqIEBwYXJhbSB7YW55W119IHJlZlF1ZXVlIGFuIGFycmF5IG9mIGVsZW1lbnRzIG5lZWRlZCB0byBpbnZva2UgcmVmc1xuICogQHJldHVybnMge1ByZWFjdEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGRpZmZFbGVtZW50Tm9kZXMoXG5cdGRvbSxcblx0bmV3Vk5vZGUsXG5cdG9sZFZOb2RlLFxuXHRnbG9iYWxDb250ZXh0LFxuXHRuYW1lc3BhY2UsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0aXNIeWRyYXRpbmcsXG5cdHJlZlF1ZXVlXG4pIHtcblx0bGV0IG9sZFByb3BzID0gb2xkVk5vZGUucHJvcHM7XG5cdGxldCBuZXdQcm9wcyA9IG5ld1ZOb2RlLnByb3BzO1xuXHRsZXQgbm9kZVR5cGUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5ld1ZOb2RlLnR5cGUpO1xuXHQvKiogQHR5cGUge2FueX0gKi9cblx0bGV0IGk7XG5cdC8qKiBAdHlwZSB7eyBfX2h0bWw/OiBzdHJpbmcgfX0gKi9cblx0bGV0IG5ld0h0bWw7XG5cdC8qKiBAdHlwZSB7eyBfX2h0bWw/OiBzdHJpbmcgfX0gKi9cblx0bGV0IG9sZEh0bWw7XG5cdC8qKiBAdHlwZSB7Q29tcG9uZW50Q2hpbGRyZW59ICovXG5cdGxldCBuZXdDaGlsZHJlbjtcblx0bGV0IHZhbHVlO1xuXHRsZXQgaW5wdXRWYWx1ZTtcblx0bGV0IGNoZWNrZWQ7XG5cblx0Ly8gVHJhY2tzIGVudGVyaW5nIGFuZCBleGl0aW5nIG5hbWVzcGFjZXMgd2hlbiBkZXNjZW5kaW5nIHRocm91Z2ggdGhlIHRyZWUuXG5cdGlmIChub2RlVHlwZSA9PT0gJ3N2ZycpIG5hbWVzcGFjZSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cdGVsc2UgaWYgKG5vZGVUeXBlID09PSAnbWF0aCcpXG5cdFx0bmFtZXNwYWNlID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xuXHRlbHNlIGlmICghbmFtZXNwYWNlKSBuYW1lc3BhY2UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG5cblx0aWYgKGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRmb3IgKGkgPSAwOyBpIDwgZXhjZXNzRG9tQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhbHVlID0gZXhjZXNzRG9tQ2hpbGRyZW5baV07XG5cblx0XHRcdC8vIGlmIG5ld1ZOb2RlIG1hdGNoZXMgYW4gZWxlbWVudCBpbiBleGNlc3NEb21DaGlsZHJlbiBvciB0aGUgYGRvbWBcblx0XHRcdC8vIGFyZ3VtZW50IG1hdGNoZXMgYW4gZWxlbWVudCBpbiBleGNlc3NEb21DaGlsZHJlbiwgcmVtb3ZlIGl0IGZyb21cblx0XHRcdC8vIGV4Y2Vzc0RvbUNoaWxkcmVuIHNvIGl0IGlzbid0IGxhdGVyIHJlbW92ZWQgaW4gZGlmZkNoaWxkcmVuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHZhbHVlICYmXG5cdFx0XHRcdCdzZXRBdHRyaWJ1dGUnIGluIHZhbHVlID09PSAhIW5vZGVUeXBlICYmXG5cdFx0XHRcdChub2RlVHlwZSA/IHZhbHVlLmxvY2FsTmFtZSA9PT0gbm9kZVR5cGUgOiB2YWx1ZS5ub2RlVHlwZSA9PT0gMylcblx0XHRcdCkge1xuXHRcdFx0XHRkb20gPSB2YWx1ZTtcblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW5baV0gPSBudWxsO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoZG9tID09IG51bGwpIHtcblx0XHRpZiAobm9kZVR5cGUgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdQcm9wcyk7XG5cdFx0fVxuXG5cdFx0ZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuXHRcdFx0bmFtZXNwYWNlLFxuXHRcdFx0bm9kZVR5cGUsXG5cdFx0XHRuZXdQcm9wcy5pcyAmJiBuZXdQcm9wc1xuXHRcdCk7XG5cblx0XHQvLyB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgbm9kZSwgc28gd2UgY2FuIGFzc3VtZSB0aGlzIGlzIGEgbmV3IHN1YnRyZWUgKGluXG5cdFx0Ly8gY2FzZSB3ZSBhcmUgaHlkcmF0aW5nKSwgdGhpcyBkZW9wdHMgdGhlIGh5ZHJhdGVcblx0XHRpZiAoaXNIeWRyYXRpbmcpIHtcblx0XHRcdGlmIChvcHRpb25zLl9oeWRyYXRpb25NaXNtYXRjaClcblx0XHRcdFx0b3B0aW9ucy5faHlkcmF0aW9uTWlzbWF0Y2gobmV3Vk5vZGUsIGV4Y2Vzc0RvbUNoaWxkcmVuKTtcblx0XHRcdGlzSHlkcmF0aW5nID0gZmFsc2U7XG5cdFx0fVxuXHRcdC8vIHdlIGNyZWF0ZWQgYSBuZXcgcGFyZW50LCBzbyBub25lIG9mIHRoZSBwcmV2aW91c2x5IGF0dGFjaGVkIGNoaWxkcmVuIGNhbiBiZSByZXVzZWQ6XG5cdFx0ZXhjZXNzRG9tQ2hpbGRyZW4gPSBudWxsO1xuXHR9XG5cblx0aWYgKG5vZGVUeXBlID09PSBudWxsKSB7XG5cdFx0Ly8gRHVyaW5nIGh5ZHJhdGlvbiwgd2Ugc3RpbGwgaGF2ZSB0byBzcGxpdCBtZXJnZWQgdGV4dCBmcm9tIFNTUidkIEhUTUwuXG5cdFx0aWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyAmJiAoIWlzSHlkcmF0aW5nIHx8IGRvbS5kYXRhICE9PSBuZXdQcm9wcykpIHtcblx0XHRcdGRvbS5kYXRhID0gbmV3UHJvcHM7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIElmIGV4Y2Vzc0RvbUNoaWxkcmVuIHdhcyBub3QgbnVsbCwgcmVwb3B1bGF0ZSBpdCB3aXRoIHRoZSBjdXJyZW50IGVsZW1lbnQncyBjaGlsZHJlbjpcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IGV4Y2Vzc0RvbUNoaWxkcmVuICYmIHNsaWNlLmNhbGwoZG9tLmNoaWxkTm9kZXMpO1xuXG5cdFx0b2xkUHJvcHMgPSBvbGRWTm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7XG5cblx0XHQvLyBJZiB3ZSBhcmUgaW4gYSBzaXR1YXRpb24gd2hlcmUgd2UgYXJlIG5vdCBoeWRyYXRpbmcgYnV0IGFyZSB1c2luZ1xuXHRcdC8vIGV4aXN0aW5nIERPTSAoZS5nLiByZXBsYWNlTm9kZSkgd2Ugc2hvdWxkIHJlYWQgdGhlIGV4aXN0aW5nIERPTVxuXHRcdC8vIGF0dHJpYnV0ZXMgdG8gZGlmZiB0aGVtXG5cdFx0aWYgKCFpc0h5ZHJhdGluZyAmJiBleGNlc3NEb21DaGlsZHJlbiAhPSBudWxsKSB7XG5cdFx0XHRvbGRQcm9wcyA9IHt9O1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IGRvbS5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhbHVlID0gZG9tLmF0dHJpYnV0ZXNbaV07XG5cdFx0XHRcdG9sZFByb3BzW3ZhbHVlLm5hbWVdID0gdmFsdWUudmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpIGluIG9sZFByb3BzKSB7XG5cdFx0XHR2YWx1ZSA9IG9sZFByb3BzW2ldO1xuXHRcdFx0aWYgKGkgPT0gJ2NoaWxkcmVuJykge1xuXHRcdFx0fSBlbHNlIGlmIChpID09ICdkYW5nZXJvdXNseVNldElubmVySFRNTCcpIHtcblx0XHRcdFx0b2xkSHRtbCA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmICghKGkgaW4gbmV3UHJvcHMpKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoaSA9PSAndmFsdWUnICYmICdkZWZhdWx0VmFsdWUnIGluIG5ld1Byb3BzKSB8fFxuXHRcdFx0XHRcdChpID09ICdjaGVja2VkJyAmJiAnZGVmYXVsdENoZWNrZWQnIGluIG5ld1Byb3BzKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIG51bGwsIHZhbHVlLCBuYW1lc3BhY2UpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIER1cmluZyBoeWRyYXRpb24sIHByb3BzIGFyZSBub3QgZGlmZmVkIGF0IGFsbCAoaW5jbHVkaW5nIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKVxuXHRcdC8vIEBUT0RPIHdlIHNob3VsZCB3YXJuIGluIGRlYnVnIG1vZGUgd2hlbiBwcm9wcyBkb24ndCBtYXRjaCBoZXJlLlxuXHRcdGZvciAoaSBpbiBuZXdQcm9wcykge1xuXHRcdFx0dmFsdWUgPSBuZXdQcm9wc1tpXTtcblx0XHRcdGlmIChpID09ICdjaGlsZHJlbicpIHtcblx0XHRcdFx0bmV3Q2hpbGRyZW4gPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoaSA9PSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnKSB7XG5cdFx0XHRcdG5ld0h0bWwgPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoaSA9PSAndmFsdWUnKSB7XG5cdFx0XHRcdGlucHV0VmFsdWUgPSB2YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoaSA9PSAnY2hlY2tlZCcpIHtcblx0XHRcdFx0Y2hlY2tlZCA9IHZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KCFpc0h5ZHJhdGluZyB8fCB0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykgJiZcblx0XHRcdFx0b2xkUHJvcHNbaV0gIT09IHZhbHVlXG5cdFx0XHQpIHtcblx0XHRcdFx0c2V0UHJvcGVydHkoZG9tLCBpLCB2YWx1ZSwgb2xkUHJvcHNbaV0sIG5hbWVzcGFjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIG5ldyB2bm9kZSBkaWRuJ3QgaGF2ZSBkYW5nZXJvdXNseVNldElubmVySFRNTCwgZGlmZiBpdHMgY2hpbGRyZW5cblx0XHRpZiAobmV3SHRtbCkge1xuXHRcdFx0Ly8gQXZvaWQgcmUtYXBwbHlpbmcgdGhlIHNhbWUgJ19faHRtbCcgaWYgaXQgZGlkIG5vdCBjaGFuZ2VkIGJldHdlZW4gcmUtcmVuZGVyXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFpc0h5ZHJhdGluZyAmJlxuXHRcdFx0XHQoIW9sZEh0bWwgfHxcblx0XHRcdFx0XHQobmV3SHRtbC5fX2h0bWwgIT09IG9sZEh0bWwuX19odG1sICYmXG5cdFx0XHRcdFx0XHRuZXdIdG1sLl9faHRtbCAhPT0gZG9tLmlubmVySFRNTCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0ZG9tLmlubmVySFRNTCA9IG5ld0h0bWwuX19odG1sO1xuXHRcdFx0fVxuXG5cdFx0XHRuZXdWTm9kZS5fY2hpbGRyZW4gPSBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG9sZEh0bWwpIGRvbS5pbm5lckhUTUwgPSAnJztcblxuXHRcdFx0ZGlmZkNoaWxkcmVuKFxuXHRcdFx0XHRkb20sXG5cdFx0XHRcdGlzQXJyYXkobmV3Q2hpbGRyZW4pID8gbmV3Q2hpbGRyZW4gOiBbbmV3Q2hpbGRyZW5dLFxuXHRcdFx0XHRuZXdWTm9kZSxcblx0XHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRcdGdsb2JhbENvbnRleHQsXG5cdFx0XHRcdG5vZGVUeXBlID09PSAnZm9yZWlnbk9iamVjdCdcblx0XHRcdFx0XHQ/ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJ1xuXHRcdFx0XHRcdDogbmFtZXNwYWNlLFxuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbixcblx0XHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuXG5cdFx0XHRcdFx0PyBleGNlc3NEb21DaGlsZHJlblswXVxuXHRcdFx0XHRcdDogb2xkVk5vZGUuX2NoaWxkcmVuICYmIGdldERvbVNpYmxpbmcob2xkVk5vZGUsIDApLFxuXHRcdFx0XHRpc0h5ZHJhdGluZyxcblx0XHRcdFx0cmVmUXVldWVcblx0XHRcdCk7XG5cblx0XHRcdC8vIFJlbW92ZSBjaGlsZHJlbiB0aGF0IGFyZSBub3QgcGFydCBvZiBhbnkgdm5vZGUuXG5cdFx0XHRpZiAoZXhjZXNzRG9tQ2hpbGRyZW4gIT0gbnVsbCkge1xuXHRcdFx0XHRmb3IgKGkgPSBleGNlc3NEb21DaGlsZHJlbi5sZW5ndGg7IGktLTsgKSB7XG5cdFx0XHRcdFx0cmVtb3ZlTm9kZShleGNlc3NEb21DaGlsZHJlbltpXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBcyBhYm92ZSwgZG9uJ3QgZGlmZiBwcm9wcyBkdXJpbmcgaHlkcmF0aW9uXG5cdFx0aWYgKCFpc0h5ZHJhdGluZykge1xuXHRcdFx0aSA9ICd2YWx1ZSc7XG5cdFx0XHRpZiAobm9kZVR5cGUgPT09ICdwcm9ncmVzcycgJiYgaW5wdXRWYWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRcdGRvbS5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRpbnB1dFZhbHVlICE9PSBVTkRFRklORUQgJiZcblx0XHRcdFx0Ly8gIzI3NTYgRm9yIHRoZSA8cHJvZ3Jlc3M+LWVsZW1lbnQgdGhlIGluaXRpYWwgdmFsdWUgaXMgMCxcblx0XHRcdFx0Ly8gZGVzcGl0ZSB0aGUgYXR0cmlidXRlIG5vdCBiZWluZyBwcmVzZW50LiBXaGVuIHRoZSBhdHRyaWJ1dGVcblx0XHRcdFx0Ly8gaXMgbWlzc2luZyB0aGUgcHJvZ3Jlc3MgYmFyIGlzIHRyZWF0ZWQgYXMgaW5kZXRlcm1pbmF0ZS5cblx0XHRcdFx0Ly8gVG8gZml4IHRoYXQgd2UnbGwgYWx3YXlzIHVwZGF0ZSBpdCB3aGVuIGl0IGlzIDAgZm9yIHByb2dyZXNzIGVsZW1lbnRzXG5cdFx0XHRcdChpbnB1dFZhbHVlICE9PSBkb21baV0gfHxcblx0XHRcdFx0XHQobm9kZVR5cGUgPT09ICdwcm9ncmVzcycgJiYgIWlucHV0VmFsdWUpIHx8XG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBvbmx5IGZvciBJRSAxMSB0byBmaXggPHNlbGVjdD4gdmFsdWUgbm90IGJlaW5nIHVwZGF0ZWQuXG5cdFx0XHRcdFx0Ly8gVG8gYXZvaWQgYSBzdGFsZSBzZWxlY3QgdmFsdWUgd2UgbmVlZCB0byBzZXQgdGhlIG9wdGlvbi52YWx1ZVxuXHRcdFx0XHRcdC8vIGFnYWluLCB3aGljaCB0cmlnZ2VycyBJRTExIHRvIHJlLWV2YWx1YXRlIHRoZSBzZWxlY3QgdmFsdWVcblx0XHRcdFx0XHQobm9kZVR5cGUgPT09ICdvcHRpb24nICYmIGlucHV0VmFsdWUgIT09IG9sZFByb3BzW2ldKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIGlucHV0VmFsdWUsIG9sZFByb3BzW2ldLCBuYW1lc3BhY2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0gJ2NoZWNrZWQnO1xuXHRcdFx0aWYgKGNoZWNrZWQgIT09IFVOREVGSU5FRCAmJiBjaGVja2VkICE9PSBkb21baV0pIHtcblx0XHRcdFx0c2V0UHJvcGVydHkoZG9tLCBpLCBjaGVja2VkLCBvbGRQcm9wc1tpXSwgbmFtZXNwYWNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZG9tO1xufVxuXG4vKipcbiAqIEludm9rZSBvciB1cGRhdGUgYSByZWYsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGlzIGEgZnVuY3Rpb24gb3Igb2JqZWN0IHJlZi5cbiAqIEBwYXJhbSB7UmVmPGFueT4gJiB7IF91bm1vdW50PzogdW5rbm93biB9fSByZWZcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UmVmKHJlZiwgdmFsdWUsIHZub2RlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKHR5cGVvZiByZWYgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGV0IGhhc1JlZlVubW91bnQgPSB0eXBlb2YgcmVmLl91bm1vdW50ID09ICdmdW5jdGlvbic7XG5cdFx0XHRpZiAoaGFzUmVmVW5tb3VudCkge1xuXHRcdFx0XHQvLyBAdHMtaWdub3JlIFRTIGRvZXNuJ3QgbGlrZSBtb3ZpbmcgbmFycm93aW5nIGNoZWNrcyBpbnRvIHZhcmlhYmxlc1xuXHRcdFx0XHRyZWYuX3VubW91bnQoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFoYXNSZWZVbm1vdW50IHx8IHZhbHVlICE9IG51bGwpIHtcblx0XHRcdFx0Ly8gU3RvcmUgdGhlIGNsZWFudXAgZnVuY3Rpb24gb24gdGhlIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGluc3RhbmNlIG9iamVjdCBpdHNlbGYgdG8gYXZvaWQgc2hhcGVcblx0XHRcdFx0Ly8gdHJhbnNpdGlvbmluZyB2bm9kZVxuXHRcdFx0XHRyZWYuX3VubW91bnQgPSByZWYodmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSByZWYuY3VycmVudCA9IHZhbHVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCB2bm9kZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBVbm1vdW50IGEgdmlydHVhbCBub2RlIGZyb20gdGhlIHRyZWUgYW5kIGFwcGx5IERPTSBjaGFuZ2VzXG4gKiBAcGFyYW0ge1ZOb2RlfSB2bm9kZSBUaGUgdmlydHVhbCBub2RlIHRvIHVubW91bnRcbiAqIEBwYXJhbSB7Vk5vZGV9IHBhcmVudFZOb2RlIFRoZSBwYXJlbnQgb2YgdGhlIFZOb2RlIHRoYXQgaW5pdGlhdGVkIHRoZSB1bm1vdW50XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwUmVtb3ZlXSBGbGFnIHRoYXQgaW5kaWNhdGVzIHRoYXQgYSBwYXJlbnQgbm9kZSBvZiB0aGVcbiAqIGN1cnJlbnQgZWxlbWVudCBpcyBhbHJlYWR5IGRldGFjaGVkIGZyb20gdGhlIERPTS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVubW91bnQodm5vZGUsIHBhcmVudFZOb2RlLCBza2lwUmVtb3ZlKSB7XG5cdGxldCByO1xuXHRpZiAob3B0aW9ucy51bm1vdW50KSBvcHRpb25zLnVubW91bnQodm5vZGUpO1xuXG5cdGlmICgociA9IHZub2RlLnJlZikpIHtcblx0XHRpZiAoIXIuY3VycmVudCB8fCByLmN1cnJlbnQgPT09IHZub2RlLl9kb20pIHtcblx0XHRcdGFwcGx5UmVmKHIsIG51bGwsIHBhcmVudFZOb2RlKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoKHIgPSB2bm9kZS5fY29tcG9uZW50KSAhPSBudWxsKSB7XG5cdFx0aWYgKHIuY29tcG9uZW50V2lsbFVubW91bnQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBwYXJlbnRWTm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ci5iYXNlID0gci5fcGFyZW50RG9tID0gbnVsbDtcblx0fVxuXG5cdGlmICgociA9IHZub2RlLl9jaGlsZHJlbikpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChyW2ldKSB7XG5cdFx0XHRcdHVubW91bnQoXG5cdFx0XHRcdFx0cltpXSxcblx0XHRcdFx0XHRwYXJlbnRWTm9kZSxcblx0XHRcdFx0XHRza2lwUmVtb3ZlIHx8IHR5cGVvZiB2bm9kZS50eXBlICE9ICdmdW5jdGlvbidcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIXNraXBSZW1vdmUpIHtcblx0XHRyZW1vdmVOb2RlKHZub2RlLl9kb20pO1xuXHR9XG5cblx0Ly8gTXVzdCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAgdG8gcHJvcGVybHkgY2xlYW4gdXAgYF9uZXh0RG9tYFxuXHQvLyBmb3Igd2hpY2ggYG51bGxgIGlzIGEgdmFsaWQgdmFsdWUuIFNlZSBjb21tZW50IGluIGBjcmVhdGUtZWxlbWVudC5qc2Bcblx0dm5vZGUuX2NvbXBvbmVudCA9IHZub2RlLl9wYXJlbnQgPSB2bm9kZS5fZG9tID0gdm5vZGUuX25leHREb20gPSBVTkRFRklORUQ7XG59XG5cbi8qKiBUaGUgYC5yZW5kZXIoKWAgbWV0aG9kIGZvciBhIFBGQyBiYWNraW5nIGluc3RhbmNlLiAqL1xuZnVuY3Rpb24gZG9SZW5kZXIocHJvcHMsIHN0YXRlLCBjb250ZXh0KSB7XG5cdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KTtcbn1cbiIsImltcG9ydCB7IEVNUFRZX09CSiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNvbW1pdFJvb3QsIGRpZmYgfSBmcm9tICcuL2RpZmYvaW5kZXgnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgRnJhZ21lbnQgfSBmcm9tICcuL2NyZWF0ZS1lbGVtZW50JztcbmltcG9ydCBvcHRpb25zIGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBzbGljZSB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogUmVuZGVyIGEgUHJlYWN0IHZpcnR1YWwgbm9kZSBpbnRvIGEgRE9NIGVsZW1lbnRcbiAqIEBwYXJhbSB7Q29tcG9uZW50Q2hpbGR9IHZub2RlIFRoZSB2aXJ0dWFsIG5vZGUgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IHBhcmVudERvbSBUaGUgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIGludG9cbiAqIEBwYXJhbSB7UHJlYWN0RWxlbWVudCB8IG9iamVjdH0gW3JlcGxhY2VOb2RlXSBPcHRpb25hbDogQXR0ZW1wdCB0byByZS11c2UgYW5cbiAqIGV4aXN0aW5nIERPTSB0cmVlIHJvb3RlZCBhdCBgcmVwbGFjZU5vZGVgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIodm5vZGUsIHBhcmVudERvbSwgcmVwbGFjZU5vZGUpIHtcblx0aWYgKG9wdGlvbnMuX3Jvb3QpIG9wdGlvbnMuX3Jvb3Qodm5vZGUsIHBhcmVudERvbSk7XG5cblx0Ly8gV2UgYWJ1c2UgdGhlIGByZXBsYWNlTm9kZWAgcGFyYW1ldGVyIGluIGBoeWRyYXRlKClgIHRvIHNpZ25hbCBpZiB3ZSBhcmUgaW5cblx0Ly8gaHlkcmF0aW9uIG1vZGUgb3Igbm90IGJ5IHBhc3NpbmcgdGhlIGBoeWRyYXRlYCBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEgRE9NXG5cdC8vIGVsZW1lbnQuLlxuXHRsZXQgaXNIeWRyYXRpbmcgPSB0eXBlb2YgcmVwbGFjZU5vZGUgPT0gJ2Z1bmN0aW9uJztcblxuXHQvLyBUbyBiZSBhYmxlIHRvIHN1cHBvcnQgY2FsbGluZyBgcmVuZGVyKClgIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lXG5cdC8vIERPTSBub2RlLCB3ZSBuZWVkIHRvIG9idGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgcHJldmlvdXMgdHJlZS4gV2UgZG9cblx0Ly8gdGhpcyBieSBhc3NpZ25pbmcgYSBuZXcgYF9jaGlsZHJlbmAgcHJvcGVydHkgdG8gRE9NIG5vZGVzIHdoaWNoIHBvaW50c1xuXHQvLyB0byB0aGUgbGFzdCByZW5kZXJlZCB0cmVlLiBCeSBkZWZhdWx0IHRoaXMgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIHdoaWNoXG5cdC8vIG1lYW5zIHRoYXQgd2UgYXJlIG1vdW50aW5nIGEgbmV3IHRyZWUgZm9yIHRoZSBmaXJzdCB0aW1lLlxuXHRsZXQgb2xkVk5vZGUgPSBpc0h5ZHJhdGluZ1xuXHRcdD8gbnVsbFxuXHRcdDogKHJlcGxhY2VOb2RlICYmIHJlcGxhY2VOb2RlLl9jaGlsZHJlbikgfHwgcGFyZW50RG9tLl9jaGlsZHJlbjtcblxuXHR2bm9kZSA9ICgoIWlzSHlkcmF0aW5nICYmIHJlcGxhY2VOb2RlKSB8fCBwYXJlbnREb20pLl9jaGlsZHJlbiA9XG5cdFx0Y3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgW3Zub2RlXSk7XG5cblx0Ly8gTGlzdCBvZiBlZmZlY3RzIHRoYXQgbmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgZGlmZmluZy5cblx0bGV0IGNvbW1pdFF1ZXVlID0gW10sXG5cdFx0cmVmUXVldWUgPSBbXTtcblx0ZGlmZihcblx0XHRwYXJlbnREb20sXG5cdFx0Ly8gRGV0ZXJtaW5lIHRoZSBuZXcgdm5vZGUgdHJlZSBhbmQgc3RvcmUgaXQgb24gdGhlIERPTSBlbGVtZW50IG9uXG5cdFx0Ly8gb3VyIGN1c3RvbSBgX2NoaWxkcmVuYCBwcm9wZXJ0eS5cblx0XHR2bm9kZSxcblx0XHRvbGRWTm9kZSB8fCBFTVBUWV9PQkosXG5cdFx0RU1QVFlfT0JKLFxuXHRcdHBhcmVudERvbS5uYW1lc3BhY2VVUkksXG5cdFx0IWlzSHlkcmF0aW5nICYmIHJlcGxhY2VOb2RlXG5cdFx0XHQ/IFtyZXBsYWNlTm9kZV1cblx0XHRcdDogb2xkVk5vZGVcblx0XHRcdFx0PyBudWxsXG5cdFx0XHRcdDogcGFyZW50RG9tLmZpcnN0Q2hpbGRcblx0XHRcdFx0XHQ/IHNsaWNlLmNhbGwocGFyZW50RG9tLmNoaWxkTm9kZXMpXG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdGNvbW1pdFF1ZXVlLFxuXHRcdCFpc0h5ZHJhdGluZyAmJiByZXBsYWNlTm9kZVxuXHRcdFx0PyByZXBsYWNlTm9kZVxuXHRcdFx0OiBvbGRWTm9kZVxuXHRcdFx0XHQ/IG9sZFZOb2RlLl9kb21cblx0XHRcdFx0OiBwYXJlbnREb20uZmlyc3RDaGlsZCxcblx0XHRpc0h5ZHJhdGluZyxcblx0XHRyZWZRdWV1ZVxuXHQpO1xuXG5cdC8vIEZsdXNoIGFsbCBxdWV1ZWQgZWZmZWN0c1xuXHRjb21taXRSb290KGNvbW1pdFF1ZXVlLCB2bm9kZSwgcmVmUXVldWUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBET00gZWxlbWVudCB3aXRoIGRhdGEgZnJvbSBhIFByZWFjdCB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7Q29tcG9uZW50Q2hpbGR9IHZub2RlIFRoZSB2aXJ0dWFsIG5vZGUgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge1ByZWFjdEVsZW1lbnR9IHBhcmVudERvbSBUaGUgRE9NIGVsZW1lbnQgdG8gdXBkYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlKHZub2RlLCBwYXJlbnREb20pIHtcblx0cmVuZGVyKHZub2RlLCBwYXJlbnREb20sIGh5ZHJhdGUpO1xufVxuIiwiaW1wb3J0IHsgYXNzaWduLCBzbGljZSB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBjcmVhdGVWTm9kZSB9IGZyb20gJy4vY3JlYXRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgVU5ERUZJTkVEIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIENsb25lcyB0aGUgZ2l2ZW4gVk5vZGUsIG9wdGlvbmFsbHkgYWRkaW5nIGF0dHJpYnV0ZXMvcHJvcHMgYW5kIHJlcGxhY2luZyBpdHNcbiAqIGNoaWxkcmVuLlxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGUgVGhlIHZpcnR1YWwgRE9NIGVsZW1lbnQgdG8gY2xvbmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBBdHRyaWJ1dGVzL3Byb3BzIHRvIGFkZCB3aGVuIGNsb25pbmdcbiAqIEBwYXJhbSB7QXJyYXk8Q29tcG9uZW50Q2hpbGRyZW4+fSByZXN0IEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWRcbiAqIGFzIHJlcGxhY2VtZW50IGNoaWxkcmVuLlxuICogQHJldHVybnMge1ZOb2RlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVFbGVtZW50KHZub2RlLCBwcm9wcywgY2hpbGRyZW4pIHtcblx0bGV0IG5vcm1hbGl6ZWRQcm9wcyA9IGFzc2lnbih7fSwgdm5vZGUucHJvcHMpLFxuXHRcdGtleSxcblx0XHRyZWYsXG5cdFx0aTtcblxuXHRsZXQgZGVmYXVsdFByb3BzO1xuXG5cdGlmICh2bm9kZS50eXBlICYmIHZub2RlLnR5cGUuZGVmYXVsdFByb3BzKSB7XG5cdFx0ZGVmYXVsdFByb3BzID0gdm5vZGUudHlwZS5kZWZhdWx0UHJvcHM7XG5cdH1cblxuXHRmb3IgKGkgaW4gcHJvcHMpIHtcblx0XHRpZiAoaSA9PSAna2V5Jykga2V5ID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAoaSA9PSAncmVmJykgcmVmID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAocHJvcHNbaV0gPT09IFVOREVGSU5FRCAmJiBkZWZhdWx0UHJvcHMgIT09IFVOREVGSU5FRCkge1xuXHRcdFx0bm9ybWFsaXplZFByb3BzW2ldID0gZGVmYXVsdFByb3BzW2ldO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRub3JtYWxpemVkUHJvcHNbaV0gPSBwcm9wc1tpXTtcblx0XHR9XG5cdH1cblxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2hpbGRyZW4gPVxuXHRcdFx0YXJndW1lbnRzLmxlbmd0aCA+IDMgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBjaGlsZHJlbjtcblx0fVxuXG5cdHJldHVybiBjcmVhdGVWTm9kZShcblx0XHR2bm9kZS50eXBlLFxuXHRcdG5vcm1hbGl6ZWRQcm9wcyxcblx0XHRrZXkgfHwgdm5vZGUua2V5LFxuXHRcdHJlZiB8fCB2bm9kZS5yZWYsXG5cdFx0bnVsbFxuXHQpO1xufVxuIiwiLyoqXG4gKiBGaW5kIHRoZSBjbG9zZXN0IGVycm9yIGJvdW5kYXJ5IHRvIGEgdGhyb3duIGVycm9yIGFuZCBjYWxsIGl0XG4gKiBAcGFyYW0ge29iamVjdH0gZXJyb3IgVGhlIHRocm93biB2YWx1ZVxuICogQHBhcmFtIHtWTm9kZX0gdm5vZGUgVGhlIHZub2RlIHRoYXQgdGhyZXcgdGhlIGVycm9yIHRoYXQgd2FzIGNhdWdodCAoZXhjZXB0XG4gKiBmb3IgdW5tb3VudGluZyB3aGVuIHRoaXMgcGFyYW1ldGVyIGlzIHRoZSBoaWdoZXN0IHBhcmVudCB0aGF0IHdhcyBiZWluZ1xuICogdW5tb3VudGVkKVxuICogQHBhcmFtIHtWTm9kZX0gW29sZFZOb2RlXVxuICogQHBhcmFtIHtFcnJvckluZm99IFtlcnJvckluZm9dXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfY2F0Y2hFcnJvcihlcnJvciwgdm5vZGUsIG9sZFZOb2RlLCBlcnJvckluZm8pIHtcblx0LyoqIEB0eXBlIHtDb21wb25lbnR9ICovXG5cdGxldCBjb21wb25lbnQsXG5cdFx0LyoqIEB0eXBlIHtDb21wb25lbnRUeXBlfSAqL1xuXHRcdGN0b3IsXG5cdFx0LyoqIEB0eXBlIHtib29sZWFufSAqL1xuXHRcdGhhbmRsZWQ7XG5cblx0Zm9yICg7ICh2bm9kZSA9IHZub2RlLl9wYXJlbnQpOyApIHtcblx0XHRpZiAoKGNvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQpICYmICFjb21wb25lbnQuX3Byb2Nlc3NpbmdFeGNlcHRpb24pIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGN0b3IgPSBjb21wb25lbnQuY29uc3RydWN0b3I7XG5cblx0XHRcdFx0aWYgKGN0b3IgJiYgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGNvbXBvbmVudC5zZXRTdGF0ZShjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcikpO1xuXHRcdFx0XHRcdGhhbmRsZWQgPSBjb21wb25lbnQuX2RpcnR5O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNvbXBvbmVudC5jb21wb25lbnREaWRDYXRjaCAhPSBudWxsKSB7XG5cdFx0XHRcdFx0Y29tcG9uZW50LmNvbXBvbmVudERpZENhdGNoKGVycm9yLCBlcnJvckluZm8gfHwge30pO1xuXHRcdFx0XHRcdGhhbmRsZWQgPSBjb21wb25lbnQuX2RpcnR5O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVGhpcyBpcyBhbiBlcnJvciBib3VuZGFyeS4gTWFyayBpdCBhcyBoYXZpbmcgYmFpbGVkIG91dCwgYW5kIHdoZXRoZXIgaXQgd2FzIG1pZC1oeWRyYXRpb24uXG5cdFx0XHRcdGlmIChoYW5kbGVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChjb21wb25lbnQuX3BlbmRpbmdFcnJvciA9IGNvbXBvbmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZXJyb3IgPSBlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRocm93IGVycm9yO1xufVxuIl0sIm5hbWVzIjpbInNsaWNlIiwib3B0aW9ucyIsInZub2RlSWQiLCJpc1ZhbGlkRWxlbWVudCIsInJlcmVuZGVyUXVldWUiLCJwcmV2RGVib3VuY2UiLCJkZWZlciIsImRlcHRoU29ydCIsImV2ZW50Q2xvY2siLCJldmVudFByb3h5IiwiZXZlbnRQcm94eUNhcHR1cmUiLCJpIiwiRU1QVFlfT0JKIiwiRU1QVFlfQVJSIiwiSVNfTk9OX0RJTUVOU0lPTkFMIiwiaXNBcnJheSIsIkFycmF5IiwiYXNzaWduIiwib2JqIiwicHJvcHMiLCJyZW1vdmVOb2RlIiwibm9kZSIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsImNyZWF0ZUVsZW1lbnQiLCJ0eXBlIiwiY2hpbGRyZW4iLCJrZXkiLCJyZWYiLCJub3JtYWxpemVkUHJvcHMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJjYWxsIiwiZGVmYXVsdFByb3BzIiwidW5kZWZpbmVkIiwiY3JlYXRlVk5vZGUiLCJvcmlnaW5hbCIsInZub2RlIiwiX19rIiwiX18iLCJfX2IiLCJfX2UiLCJfX2QiLCJfX2MiLCJjb25zdHJ1Y3RvciIsIl9fdiIsIl9faSIsIl9fdSIsImNyZWF0ZVJlZiIsImN1cnJlbnQiLCJGcmFnbWVudCIsIkJhc2VDb21wb25lbnQiLCJjb250ZXh0IiwidGhpcyIsImdldERvbVNpYmxpbmciLCJjaGlsZEluZGV4Iiwic2libGluZyIsInVwZGF0ZVBhcmVudERvbVBvaW50ZXJzIiwiY2hpbGQiLCJiYXNlIiwiZW5xdWV1ZVJlbmRlciIsImMiLCJwdXNoIiwicHJvY2VzcyIsIl9fciIsImRlYm91bmNlUmVuZGVyaW5nIiwicmVuZGVyUXVldWVMZW5ndGgiLCJjb21wb25lbnQiLCJuZXdWTm9kZSIsIm9sZFZOb2RlIiwib2xkRG9tIiwiY29tbWl0UXVldWUiLCJyZWZRdWV1ZSIsInNvcnQiLCJzaGlmdCIsIl9fUCIsImRpZmYiLCJfX24iLCJuYW1lc3BhY2VVUkkiLCJjb21taXRSb290IiwiZGlmZkNoaWxkcmVuIiwicGFyZW50RG9tIiwicmVuZGVyUmVzdWx0IiwibmV3UGFyZW50Vk5vZGUiLCJvbGRQYXJlbnRWTm9kZSIsImdsb2JhbENvbnRleHQiLCJuYW1lc3BhY2UiLCJleGNlc3NEb21DaGlsZHJlbiIsImlzSHlkcmF0aW5nIiwiY2hpbGRWTm9kZSIsIm5ld0RvbSIsImZpcnN0Q2hpbGREb20iLCJvbGRDaGlsZHJlbiIsIm5ld0NoaWxkcmVuTGVuZ3RoIiwiY29uc3RydWN0TmV3Q2hpbGRyZW5BcnJheSIsImFwcGx5UmVmIiwiaW5zZXJ0IiwibmV4dFNpYmxpbmciLCJza2V3ZWRJbmRleCIsIm1hdGNoaW5nSW5kZXgiLCJvbGRDaGlsZHJlbkxlbmd0aCIsInJlbWFpbmluZ09sZENoaWxkcmVuIiwic2tldyIsIlN0cmluZyIsImZpbmRNYXRjaGluZ0luZGV4IiwidW5tb3VudCIsInBhcmVudFZOb2RlIiwiY29udGFpbnMiLCJpbnNlcnRCZWZvcmUiLCJub2RlVHlwZSIsInRvQ2hpbGRBcnJheSIsIm91dCIsInNvbWUiLCJ4IiwieSIsInNldFN0eWxlIiwic3R5bGUiLCJ2YWx1ZSIsInNldFByb3BlcnR5IiwidGVzdCIsImRvbSIsIm5hbWUiLCJvbGRWYWx1ZSIsInVzZUNhcHR1cmUiLCJvIiwiY3NzVGV4dCIsInJlcGxhY2UiLCJ0b0xvd2VyQ2FzZSIsImwiLCJfYXR0YWNoZWQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJjcmVhdGVFdmVudFByb3h5IiwiZXZlbnRIYW5kbGVyIiwiX2Rpc3BhdGNoZWQiLCJldmVudCIsImhhbmRsZUV2ZW50IiwidG1wIiwiaXNOZXciLCJvbGRQcm9wcyIsIm9sZFN0YXRlIiwic25hcHNob3QiLCJjbGVhclByb2Nlc3NpbmdFeGNlcHRpb24iLCJuZXdQcm9wcyIsImlzQ2xhc3NDb21wb25lbnQiLCJwcm92aWRlciIsImNvbXBvbmVudENvbnRleHQiLCJyZW5kZXJIb29rIiwiY291bnQiLCJuZXdUeXBlIiwib3V0ZXIiLCJwcm90b3R5cGUiLCJyZW5kZXIiLCJjb250ZXh0VHlwZSIsIl9fRSIsImRvUmVuZGVyIiwic3ViIiwic3RhdGUiLCJfX2giLCJfc2IiLCJfX3MiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnREaWRNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJjb21wb25lbnRXaWxsVXBkYXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiZ2V0Q2hpbGRDb250ZXh0IiwiZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUiLCJNT0RFX0hZRFJBVEUiLCJpbmRleE9mIiwiZGlmZkVsZW1lbnROb2RlcyIsImRpZmZlZCIsInJvb3QiLCJjYiIsIm5ld0h0bWwiLCJvbGRIdG1sIiwibmV3Q2hpbGRyZW4iLCJpbnB1dFZhbHVlIiwiY2hlY2tlZCIsImxvY2FsTmFtZSIsImRvY3VtZW50IiwiY3JlYXRlVGV4dE5vZGUiLCJjcmVhdGVFbGVtZW50TlMiLCJpcyIsIl9fbSIsImRhdGEiLCJjaGlsZE5vZGVzIiwiYXR0cmlidXRlcyIsIl9faHRtbCIsImlubmVySFRNTCIsImhhc1JlZlVubW91bnQiLCJza2lwUmVtb3ZlIiwiciIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVwbGFjZU5vZGUiLCJmaXJzdENoaWxkIiwiaHlkcmF0ZSIsImNsb25lRWxlbWVudCIsImNyZWF0ZUNvbnRleHQiLCJkZWZhdWx0VmFsdWUiLCJjb250ZXh0SWQiLCJDb25zdW1lciIsImNvbnRleHRWYWx1ZSIsIlByb3ZpZGVyIiwic3VicyIsImN0eCIsIlNldCIsIl9wcm9wcyIsImZvckVhY2giLCJhZGQiLCJvbGQiLCJkZWxldGUiLCJlcnJvciIsImVycm9ySW5mbyIsImN0b3IiLCJoYW5kbGVkIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwic2V0U3RhdGUiLCJjb21wb25lbnREaWRDYXRjaCIsInVwZGF0ZSIsImNhbGxiYWNrIiwicyIsImZvcmNlVXBkYXRlIiwiUHJvbWlzZSIsInRoZW4iLCJiaW5kIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJhIiwiYiJdLCJtYXBwaW5ncyI6IkFBQ2EsSUMwQkFBLEVDaEJQQyxFQ1BGQyxFQWdHU0MsRUM4RVRDLEVBV0FDLEVBRUVDLEVBMEJBQyxFQy9MRkMsRUFvSkVDLEVBQ0FDLEVDN0tLQyxFTldFQyxFQUFnQyxDQUFHLEVBQ25DQyxFQUFZLEdBQ1pDLEVBQ1osb0VDZFlDLEVBQVVDLE1BQU1ELFFBU3RCLFNBQVNFLEVBQU9DLEVBQUtDLEdBRTNCLElBQUssSUFBSVIsS0FBS1EsRUFBT0QsRUFBSVAsR0FBS1EsRUFBTVIsR0FDcEMsT0FBNkJPLENBQzlCLENBUWdCLFNBQUFFLEVBQVdDLEdBQ3RCQSxHQUFRQSxFQUFLQyxZQUFZRCxFQUFLQyxXQUFXQyxZQUFZRixFQUMxRCxDRVZnQixTQUFBRyxFQUFjQyxFQUFNTixFQUFPTyxHQUMxQyxJQUNDQyxFQUNBQyxFQUNBakIsRUFIR2tCLEVBQWtCLENBQUEsRUFJdEIsSUFBS2xCLEtBQUtRLEVBQ0EsT0FBTFIsRUFBWWdCLEVBQU1SLEVBQU1SLEdBQ2QsT0FBTEEsRUFBWWlCLEVBQU1ULEVBQU1SLEdBQzVCa0IsRUFBZ0JsQixHQUFLUSxFQUFNUixHQVVqQyxHQVBJbUIsVUFBVUMsT0FBUyxJQUN0QkYsRUFBZ0JILFNBQ2ZJLFVBQVVDLE9BQVMsRUFBSS9CLEVBQU1nQyxLQUFLRixVQUFXLEdBQUtKLEdBS2pDLG1CQUFSRCxHQUEyQyxNQUFyQkEsRUFBS1EsYUFDckMsSUFBS3RCLEtBQUtjLEVBQUtRLGtCSHRCUUMsSUd1QmxCTCxFQUFnQmxCLEtBQ25Ca0IsRUFBZ0JsQixHQUFLYyxFQUFLUSxhQUFhdEIsSUFLMUMsT0FBT3dCLEVBQVlWLEVBQU1JLEVBQWlCRixFQUFLQyxFQUFLLEtBQ3JELENBY2dCLFNBQUFPLEVBQVlWLEVBQU1OLEVBQU9RLEVBQUtDLEVBQUtRLEdBSWxELElB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
|