@touchtech/baselayer-ui 8.0.0 → 8.1.0
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/dist/components/Table/Table.d.ts +28 -0
- package/dist/components/Table/TableHeader.d.ts +9 -0
- package/dist/components/Table/TableRow.d.ts +12 -0
- package/dist/components/Table/TableRowCell.d.ts +9 -0
- package/dist/components/Table/__tests__/Table.test.d.ts +1 -0
- package/dist/components/Table/index.d.ts +1 -0
- package/dist/components/TextInput/TextInput.d.ts +3 -2
- package/dist/constants/Table.d.ts +5 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -4
- package/dist/styles.css +98 -1
- package/dist/types/index.d.ts +1 -0
- package/package.json +9 -3
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!function(e,t){for(var n in t)e[n]=t[n]}(exports,function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=13)}([function(e,t){e.exports=require("react")},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return a}));var r=Array.isArray;function a(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,o=0;o<e.length;o++)""!==(n=a(e[o]))&&(t+=(t&&" ")+n);else for(var o in e)e.hasOwnProperty(o)&&e[o]&&(t+=(t&&" ")+o);return t}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var a=n(39);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var a=n(14);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var a=n(23);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var a=n(19);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var a=n(28);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var a=n(33);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var a=r(n(0)),o=n(3),i=n(2),u=r(n(41)),l=r(n(42));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return a.default.createElement(o.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},a.default.createElement("div",{className:u.default.container},t,a.default.createElement(i.Icon,{alt:"Dropdown",src:l.default})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var a=n(43);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(a).default}});var o=n(10);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(o).default}});var i=n(46);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var u=n(48);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(u).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PlacementContext=void 0;var u=o(n(0)),l=i(n(1)),d=i(n(44));t.PlacementContext=u.default.createContext(void 0),t.default=(0,u.forwardRef)((function(e,n){var r=e.children,a=e.button,o=e.className,i=e.placement,c=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return u.default.createElement("div",{ref:n,className:(0,l.default)([d.default.container,o])},a,u.default.createElement(t.PlacementContext.Provider,{value:(0,u.useMemo)((function(){return c}),[c])},u.default.createElement("div",{className:(0,l.default)([d.default.menuContainer,d.default[c.horizontal],d.default[c.vertical]])},r)))}))},function(e,t,n){"use strict";n.r(t),t.default={listViewItem:"VKYoNtWTZui2AO1IlyJMTw=="}},function(e,t,n){"use strict";e.exports=n(38)},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),a(n(3),t),a(n(16),t),a(n(5),t),a(n(21),t),a(n(26),t),a(n(6),t),a(n(31),t),a(n(36),t),a(n(50),t),a(n(53),t),a(n(2),t),a(n(56),t),a(n(59),t),a(n(62),t),a(n(4),t),a(n(65),t),a(n(9),t),a(n(7),t),a(n(70),t),a(n(73),t),a(n(76),t),a(n(81),t),a(n(84),t)},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(15));t.default=function(e){var t,n=e.children,r=e.className,u=e.onClick,l=e.onPointerDown,d=e.containerRef,c=e.disabled,s=void 0!==c&&c,f=e.inverted,v=void 0!==f&&f,p=e.rounded,m=void 0!==p&&p,h=e.noShadow,y=void 0!==h&&h,b=e.noPadding,g=void 0!==b&&b,_=e.noBorder,O=void 0!==_&&_,w=e.transparent,P=void 0!==w&&w,j=e.stretchHorizontally,M=void 0!==j&&j,E=e.stretchVertically,k=void 0!==E&&E,C=e.autoFocus,S=void 0!==C&&C,x=e.offsetSides,D=void 0===x?[]:x,N=e.align,L=void 0===N?"center":N,A=e.size,B=void 0===A?"medium":A,I=e.type;return a.default.createElement("button",{ref:d,className:(0,o.default)([i.default.container,i.default[B],i.default[L],(t={},t[i.default.inverted]=v,t[i.default.rounded]=m,t[i.default.noShadow]=y,t[i.default.noPadding]=g,t[i.default.noBorder]=O,t[i.default.transparent]=P,t[i.default.stretchHorizontally]=M,t[i.default.stretchVertically]=k,t[i.default.leftOffset]=m&&D.includes("left"),t[i.default.rightOffset]=m&&D.includes("right"),t),r]),disabled:s,autoFocus:S,type:I,role:"button",onClick:u,onPointerDown:l},"string"!=typeof n&&Array.isArray(n)&&n.length?a.default.createElement("div",{className:i.default.content},n):n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"xynuMu8XZSsonDuksl6AQg==",left:"Pkp0HhNHttoWIb2dwpGntw==",small:"wDOeeJGCZm0k2ZpNzFbeHg==",large:"_5QjBWtl7YXy4em4X3GPbRA==",xlarge:"kN0Lga4fBOgcigDqtODRdg==",inverted:"+5nsTnLlNOX8KFQiUhT1kQ==",rounded:"BjP-JNWJjoBfNMMztnyWOQ==",rightOffset:"lGJwNcol8CAknqxY+8Dfqg==",leftOffset:"EV+g6hUA1qv8LQ9RqgrQRQ==",noShadow:"Z3uPLrryqINfRjZppwU6NQ==",noBorder:"eEghG6GXB9IzyD3jrNZfAA==",transparent:"ss7DhVgF5JGspCASdZUYBg==",stretchHorizontally:"i8QPSr4cHYhJ7Aiue+cx0g==",stretchVertically:"WSximUM9kxYGc5VRc0iZlA==",noPadding:"SgXchjz4dJr+tc8ykLnE1A==",content:"xn8yfjN6mexRXIgyNhmkiw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var a=n(17);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(18));t.default=function(e){var t,n=e.children,r=e.inverted,u=void 0!==r&&r,l=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.buttonBadge,(t={},t[i.default.inverted]=u,t),l])},n)}},function(e,t,n){"use strict";n.r(t),t.default={buttonBadge:"RSjbRiXFWAfBzcCoaMpXeA==",inverted:"X4o4OKsS1T4miIs0Cq5x-g=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=o(n(20));t.default=function(e){var t,n=e.as,o=e.children,d=e.className,c=e.size,s=e.containerRef,f=e.inverted,v=void 0!==f&&f,p=e.rounded,m=void 0!==p&&p,h=e.transparent,y=void 0!==h&&h,b=e.noShadow,g=void 0!==b&&b,_=e.noPadding,O=void 0!==_&&_,w=e.noBorder,P=void 0!==w&&w,j=e.stretchHorizontally,M=void 0!==j&&j,E=e.stretchVertically,k=void 0!==E&&E,C=e.disabled,S=void 0!==C&&C,x=e.offsetSides,D=void 0===x?[]:x,N=e.align,L=void 0===N?"center":N,A=a(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:s,"data-testid":"button-link",className:(0,u.default)([l.default.container,l.default[c],l.default[L],(t={},t[l.default.inverted]=v,t[l.default.rounded]=m,t[l.default.noShadow]=g,t[l.default.noPadding]=O,t[l.default.noBorder]=P,t[l.default.disabled]=S,t[l.default.transparent]=y,t[l.default.stretchHorizontally]=M,t[l.default.stretchVertically]=k,t[l.default.leftOffset]=m&&D.includes("left"),t[l.default.rightOffset]=m&&D.includes("right"),t),d])},A),"string"!=typeof o&&Array.isArray(o)&&o.length?i.default.createElement("div",{className:l.default.content},o):o)}},function(e,t,n){"use strict";n.r(t),t.default={container:"ZIr9w--fSivqWVGoSp14tA==",left:"rRyu9AVGwX+-xjTOMTSE1w==",small:"_0DBhGJvcbjEMlSqEofF-rw==",medium:"a6+zcUY6XKy94zAqUYaE6w==",large:"W+v4vFebQkxw1cdiKY-Kvg==",xlarge:"dY91DQRYUaWT4EzOJJ+GBg==",inverted:"yplCpylL4Ides+cOrqSimQ==",rounded:"MREY09+d69vV84hZnJuLYw==",rightOffset:"Hsao7mFW3lYTrNhfWvfxWw==",leftOffset:"MXlL3O8KUYeVAYcSsnNs9w==",noShadow:"Hqz4CqQcO4s0MTawrDr0oA==",transparent:"h1hNwc2UlM0C5F-xdga5dw==",stretchHorizontally:"Tmyq4+uHU+JJeYNdBH8L2Q==",stretchVertically:"JzzGnTt4aM3+9rVlNQWi0A==",noPadding:"UvI8Unjc9X0zN2l5W+tmrQ==",noBorder:"Qp5uBnQgJFoZHgYShzAPcw==",disabled:"ZXljkYpPWjDJLC4BEGMprw==",content:"_0n2MnOfJPm2wxs4M2nbGHA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var a=n(22);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(4),c=i(n(25));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,a=e.checked,o=e.disabled,i=e.name,s=e.className,f=e.indeterminate,v=e.size,p=void 0===v?"medium":v,m=e.autoFocus,h=void 0!==m&&m,y=(0,u.useCallback)((function(e){return n(e.target.checked)}),[n]);return u.default.createElement(d.Label,{value:t},u.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:a,disabled:o,className:(0,l.default)([c.default.checkbox,s,c.default[p]]),onChange:y,placeholder:r,name:i,type:"checkbox",autoFocus:h}))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(24));t.default=function(e){var t=e.className,n=e.children,r=e.value,u=e.containerRef;return a.default.createElement("label",{ref:u,className:(0,o.default)([i.default.container,t])},r,n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"bR7PO8yRFtUlN1vsP7ecRQ=="}},function(e,t,n){"use strict";n.r(t),t.default={checkbox:"CBQZ4Pp1clb+5R8IlCO4gQ==",small:"_5jbjut7Ggt7gxenjyf9LbQ==",medium:"iPAOw2ZsNJA0nWDXqWC37g==",large:"LEykXs9mEESdwo6iZoMdUw==",xlarge:"uqpACEJ1obA4bRlaeAT27g=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var a=n(27);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(6),u=r(n(30));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,l=e.selectedColor,d=e.direction,c=void 0===d?"vertical":d,s=e.canToggle,f=void 0!==s&&s;return a.default.createElement("div",{ref:n,className:(0,o.default)([u.default.colorPicker,u.default[c]])},t.map((function(e){return a.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==l?void 0:l.key),onClick:function(){f&&e.key===(null==l?void 0:l.key)?r(null):r(e)}})})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(29));t.default=function(e){var t,n=e.color,r=e.containerRef,u=e.isSelected,l=void 0!==u&&u,d=e.size,c=void 0===d?"medium":d,s=e.onClick;return a.default.createElement("button",{ref:r,className:(0,o.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=l,t)]),"data-testid":"color-swatch",onClick:s,style:{backgroundColor:n.hexCode}},n.label&&a.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},function(e,t,n){"use strict";n.r(t),t.default={colorSwatch:"uTf7mYfXeNT7Gn0znnR8DQ==",small:"aAbezjOmw2NyT9RU7PuyOA==",large:"Qc6SCvqbnnhJ3ztgzPZOFA==",xlarge:"_6oBBZDkRkzf7tF4bhyDtAA==",selected:"nicZfgMk+uQFPypJIkQubw==",srOnly:"GHpHEB1QXDyjeR9VnEd1Tg=="}},function(e,t,n){"use strict";n.r(t),t.default={colorPicker:"DKtP55bOfUTB1kDa-iUHqQ==",horizontal:"_34Lj8-b-13C8L09RsMineg==",vertical:"_1yugGQs4Ek0t3T8tgoKxVQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var a=n(32);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(7),u=r(n(35));function l(e){var t,n=e.className,r=e.children,l=e.containerRef,d=e.header,c=e.isOpen,s=e.buttonsLeft,f=void 0===s?[]:s,v=e.buttonsRight,p=void 0===v?[]:v,m=e.onClose,h=void 0===m?function(){}:m,y=e.noPadding,b=void 0!==y&&y,g=e.noOverlay,_=void 0!==g&&g,O=e.noShadow,w=void 0!==O&&O,P=e.baseZIndex,j=void 0===P?1019:P;return a.default.createElement(i.Modal,{containerRef:l,isOpen:c,onClose:h,noOverlay:_,noShadow:w,baseZIndex:j},a.default.createElement("div",{className:(0,o.default)([u.default.container,n])},!!d&&a.default.createElement("h1",{className:u.default.modalHeader},d),a.default.createElement("div",{className:(0,o.default)([u.default.modalContent,(t={},t[u.default.noPadding]=b,t)])},r),a.default.createElement("div",{className:u.default.modalButtonsContainer},a.default.createElement("div",{className:u.default.modalButtons},f),a.default.createElement("div",{className:u.default.modalButtons},p))))}l.displayName="ConfirmationModal",t.default=l},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=n(89),d=i(n(1)),c=i(n(34));t.default=function(e){var t,n,r=e.children,a=e.containerRef,o=e.isOpen,i=e.button,s=e.transparent,f=void 0!==s&&s,v=e.noShadow,p=void 0!==v&&v,m=e.noOverlay,h=void 0!==m&&m,y=e.onClose,b=void 0===y?function(){}:y,g=e.baseZIndex,_=void 0===g?1009:g;(0,l.useHotkeys)("Escape",b);var O=(0,u.useCallback)((function(){b()}),[b]);return o&&u.default.createElement("div",{ref:a},u.default.createElement("div",{style:{zIndex:_},className:(0,d.default)([c.default.overlay,(t={},t[c.default.noOverlay]=h,t)]),"data-testid":"modal-overlay",onClick:O}),u.default.createElement("div",{style:{zIndex:_+1},className:(0,d.default)([c.default.modal,(n={},n[c.default.transparent]=f,n[c.default.noShadow]=p,n)]),"data-testid":"modal"},r),i&&u.default.createElement("div",{style:{zIndex:_+2},className:c.default.modalButton},i))}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"pU6IB2r0LpCFPXgTvOr2gA==",noOverlay:"_5SUR9Fh-fHTy4Xr6mQC+pA==",modal:"LCAT83muXsAGrPUHQ1y+hQ==",transparent:"WHU8Qbpz+AvT-YpuQeUK-Q==",noShadow:"Gi1VTmg3GPNxnX91-m0-5g==",modalButton:"lfnfHu+xyeEjcQbAQwjITg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"jvKSi-fKufcpK9eBWWFCLg==",modalHeader:"cx1RoQdgAbenvVXU8B7fSw==",modalContent:"ZD4v3HE-AYZXV0ITWDF7Gg==",noPadding:"_1zFF8xqyo77UxG2v549BeA==",modalButtonsContainer:"_4hQhCe5U7YByhnhO+-Gqiw==",modalButtons:"JoILbW5FnZixaJ7ETvo8+w=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(37);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var a=n(8);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return a.Clickable}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=o(n(0)),u=n(88),l=n(8),d=n(9);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,a=e.display,o=e.renderClickable,c=e.selectedItem,s=e.placement,f=void 0===s?{vertical:"bottom",horizontal:"left"}:s,v=(0,i.useState)(!1),p=v[0],m=v[1],h=(0,u.useOutsideClick)((function(){return m(!1)})),y=!n||0===n.length,b=function(){return m(!p)};return i.default.createElement(d.MenuContainer,{button:"function"==typeof o?o({display:a,isDisabled:y,selectedItem:c,toggleIsOpen:b}):i.default.createElement(l.Clickable,{display:a,isDisabled:y,onClick:b}),placement:f,ref:h},i.default.createElement(d.Menu,{isOpen:p},n&&n.map((function(e){return i.default.createElement(d.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),m(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}},function(e,t,n){"use strict";
|
|
1
|
+
!function(e,t){for(var n in t)e[n]=t[n]}(exports,function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=13)}([function(e,t){e.exports=require("react")},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return o}));var r=Array.isArray;function o(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,a=0;a<e.length;a++)""!==(n=o(e[a]))&&(t+=(t&&" ")+n);else for(var a in e)e.hasOwnProperty(a)&&e[a]&&(t+=(t&&" ")+a);return t}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var o=n(39);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var o=n(14);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var o=n(23);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var o=n(19);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var o=n(28);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var o=n(33);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var o=r(n(0)),a=n(3),i=n(2),l=r(n(41)),u=r(n(42));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return o.default.createElement(a.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},o.default.createElement("div",{className:l.default.container},t,o.default.createElement(i.Icon,{alt:"Dropdown",src:u.default})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var o=n(43);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(o).default}});var a=n(10);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(a).default}});var i=n(46);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var l=n(48);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(l).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PlacementContext=void 0;var l=a(n(0)),u=i(n(1)),s=i(n(44));t.PlacementContext=l.default.createContext(void 0),t.default=(0,l.forwardRef)((function(e,n){var r=e.children,o=e.button,a=e.className,i=e.placement,c=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([s.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return c}),[c])},l.default.createElement("div",{className:(0,u.default)([s.default.menuContainer,s.default[c.horizontal],s.default[c.vertical]])},r)))}))},function(e,t,n){"use strict";n.r(t),t.default={listViewItem:"VKYoNtWTZui2AO1IlyJMTw=="}},function(e,t,n){"use strict";e.exports=n(38)},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(3),t),o(n(16),t),o(n(5),t),o(n(21),t),o(n(26),t),o(n(6),t),o(n(31),t),o(n(36),t),o(n(50),t),o(n(53),t),o(n(2),t),o(n(56),t),o(n(59),t),o(n(62),t),o(n(4),t),o(n(65),t),o(n(9),t),o(n(7),t),o(n(70),t),o(n(73),t),o(n(85),t),o(n(88),t),o(n(93),t),o(n(96),t)},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(15));t.default=function(e){var t,n=e.children,r=e.className,l=e.onClick,u=e.onPointerDown,s=e.containerRef,c=e.disabled,d=void 0!==c&&c,f=e.inverted,v=void 0!==f&&f,h=e.rounded,p=void 0!==h&&h,m=e.noShadow,g=void 0!==m&&m,_=e.noPadding,y=void 0!==_&&_,b=e.noBorder,O=void 0!==b&&b,w=e.transparent,M=void 0!==w&&w,S=e.stretchHorizontally,I=void 0!==S&&S,P=e.stretchVertically,C=void 0!==P&&P,x=e.autoFocus,j=void 0!==x&&x,E=e.offsetSides,R=void 0===E?[]:E,k=e.align,D=void 0===k?"center":k,z=e.size,T=void 0===z?"medium":z,L=e.type;return o.default.createElement("button",{ref:s,className:(0,a.default)([i.default.container,i.default[T],i.default[D],(t={},t[i.default.inverted]=v,t[i.default.rounded]=p,t[i.default.noShadow]=g,t[i.default.noPadding]=y,t[i.default.noBorder]=O,t[i.default.transparent]=M,t[i.default.stretchHorizontally]=I,t[i.default.stretchVertically]=C,t[i.default.leftOffset]=p&&R.includes("left"),t[i.default.rightOffset]=p&&R.includes("right"),t),r]),disabled:d,autoFocus:j,type:L,role:"button",onClick:l,onPointerDown:u},"string"!=typeof n&&Array.isArray(n)&&n.length?o.default.createElement("div",{className:i.default.content},n):n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"xynuMu8XZSsonDuksl6AQg==",left:"Pkp0HhNHttoWIb2dwpGntw==",small:"wDOeeJGCZm0k2ZpNzFbeHg==",large:"_5QjBWtl7YXy4em4X3GPbRA==",xlarge:"kN0Lga4fBOgcigDqtODRdg==",inverted:"+5nsTnLlNOX8KFQiUhT1kQ==",rounded:"BjP-JNWJjoBfNMMztnyWOQ==",rightOffset:"lGJwNcol8CAknqxY+8Dfqg==",leftOffset:"EV+g6hUA1qv8LQ9RqgrQRQ==",noShadow:"Z3uPLrryqINfRjZppwU6NQ==",noBorder:"eEghG6GXB9IzyD3jrNZfAA==",transparent:"ss7DhVgF5JGspCASdZUYBg==",stretchHorizontally:"i8QPSr4cHYhJ7Aiue+cx0g==",stretchVertically:"WSximUM9kxYGc5VRc0iZlA==",noPadding:"SgXchjz4dJr+tc8ykLnE1A==",content:"xn8yfjN6mexRXIgyNhmkiw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var o=n(17);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(18));t.default=function(e){var t,n=e.children,r=e.inverted,l=void 0!==r&&r,u=e.className;return o.default.createElement("div",{className:(0,a.default)([i.default.buttonBadge,(t={},t[i.default.inverted]=l,t),u])},n)}},function(e,t,n){"use strict";n.r(t),t.default={buttonBadge:"RSjbRiXFWAfBzcCoaMpXeA==",inverted:"X4o4OKsS1T4miIs0Cq5x-g=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(0)),l=a(n(1)),u=a(n(20));t.default=function(e){var t,n=e.as,a=e.children,s=e.className,c=e.size,d=e.containerRef,f=e.inverted,v=void 0!==f&&f,h=e.rounded,p=void 0!==h&&h,m=e.transparent,g=void 0!==m&&m,_=e.noShadow,y=void 0!==_&&_,b=e.noPadding,O=void 0!==b&&b,w=e.noBorder,M=void 0!==w&&w,S=e.stretchHorizontally,I=void 0!==S&&S,P=e.stretchVertically,C=void 0!==P&&P,x=e.disabled,j=void 0!==x&&x,E=e.offsetSides,R=void 0===E?[]:E,k=e.align,D=void 0===k?"center":k,z=o(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:d,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[c],u.default[D],(t={},t[u.default.inverted]=v,t[u.default.rounded]=p,t[u.default.noShadow]=y,t[u.default.noPadding]=O,t[u.default.noBorder]=M,t[u.default.disabled]=j,t[u.default.transparent]=g,t[u.default.stretchHorizontally]=I,t[u.default.stretchVertically]=C,t[u.default.leftOffset]=p&&R.includes("left"),t[u.default.rightOffset]=p&&R.includes("right"),t),s])},z),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},function(e,t,n){"use strict";n.r(t),t.default={container:"ZIr9w--fSivqWVGoSp14tA==",left:"rRyu9AVGwX+-xjTOMTSE1w==",small:"_0DBhGJvcbjEMlSqEofF-rw==",medium:"a6+zcUY6XKy94zAqUYaE6w==",large:"W+v4vFebQkxw1cdiKY-Kvg==",xlarge:"dY91DQRYUaWT4EzOJJ+GBg==",inverted:"yplCpylL4Ides+cOrqSimQ==",rounded:"MREY09+d69vV84hZnJuLYw==",rightOffset:"Hsao7mFW3lYTrNhfWvfxWw==",leftOffset:"MXlL3O8KUYeVAYcSsnNs9w==",noShadow:"Hqz4CqQcO4s0MTawrDr0oA==",transparent:"h1hNwc2UlM0C5F-xdga5dw==",stretchHorizontally:"Tmyq4+uHU+JJeYNdBH8L2Q==",stretchVertically:"JzzGnTt4aM3+9rVlNQWi0A==",noPadding:"UvI8Unjc9X0zN2l5W+tmrQ==",noBorder:"Qp5uBnQgJFoZHgYShzAPcw==",disabled:"ZXljkYpPWjDJLC4BEGMprw==",content:"_0n2MnOfJPm2wxs4M2nbGHA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var o=n(22);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(0)),u=i(n(1)),s=n(4),c=i(n(25));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,o=e.checked,a=e.disabled,i=e.name,d=e.className,f=e.indeterminate,v=e.size,h=void 0===v?"medium":v,p=e.autoFocus,m=void 0!==p&&p,g=(0,l.useCallback)((function(e){return n(e.target.checked)}),[n]);return l.default.createElement(s.Label,{value:t},l.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:o,disabled:a,className:(0,u.default)([c.default.checkbox,d,c.default[h]]),onChange:g,placeholder:r,name:i,type:"checkbox",autoFocus:m}))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(24));t.default=function(e){var t=e.className,n=e.children,r=e.value,l=e.containerRef;return o.default.createElement("label",{ref:l,className:(0,a.default)([i.default.container,t])},r,n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"bR7PO8yRFtUlN1vsP7ecRQ=="}},function(e,t,n){"use strict";n.r(t),t.default={checkbox:"CBQZ4Pp1clb+5R8IlCO4gQ==",small:"_5jbjut7Ggt7gxenjyf9LbQ==",medium:"iPAOw2ZsNJA0nWDXqWC37g==",large:"LEykXs9mEESdwo6iZoMdUw==",xlarge:"uqpACEJ1obA4bRlaeAT27g=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var o=n(27);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=n(6),l=r(n(30));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,u=e.selectedColor,s=e.direction,c=void 0===s?"vertical":s,d=e.canToggle,f=void 0!==d&&d;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[c]])},t.map((function(e){return o.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==u?void 0:u.key),onClick:function(){f&&e.key===(null==u?void 0:u.key)?r(null):r(e)}})})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(29));t.default=function(e){var t,n=e.color,r=e.containerRef,l=e.isSelected,u=void 0!==l&&l,s=e.size,c=void 0===s?"medium":s,d=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:d,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},function(e,t,n){"use strict";n.r(t),t.default={colorSwatch:"uTf7mYfXeNT7Gn0znnR8DQ==",small:"aAbezjOmw2NyT9RU7PuyOA==",large:"Qc6SCvqbnnhJ3ztgzPZOFA==",xlarge:"_6oBBZDkRkzf7tF4bhyDtAA==",selected:"nicZfgMk+uQFPypJIkQubw==",srOnly:"GHpHEB1QXDyjeR9VnEd1Tg=="}},function(e,t,n){"use strict";n.r(t),t.default={colorPicker:"DKtP55bOfUTB1kDa-iUHqQ==",horizontal:"_34Lj8-b-13C8L09RsMineg==",vertical:"_1yugGQs4Ek0t3T8tgoKxVQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var o=n(32);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=n(7),l=r(n(35));function u(e){var t,n=e.className,r=e.children,u=e.containerRef,s=e.header,c=e.isOpen,d=e.buttonsLeft,f=void 0===d?[]:d,v=e.buttonsRight,h=void 0===v?[]:v,p=e.onClose,m=void 0===p?function(){}:p,g=e.noPadding,_=void 0!==g&&g,y=e.noOverlay,b=void 0!==y&&y,O=e.noShadow,w=void 0!==O&&O,M=e.baseZIndex,S=void 0===M?1019:M;return o.default.createElement(i.Modal,{containerRef:u,isOpen:c,onClose:m,noOverlay:b,noShadow:w,baseZIndex:S},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!s&&o.default.createElement("h1",{className:l.default.modalHeader},s),o.default.createElement("div",{className:(0,a.default)([l.default.modalContent,(t={},t[l.default.noPadding]=_,t)])},r),o.default.createElement("div",{className:l.default.modalButtonsContainer},o.default.createElement("div",{className:l.default.modalButtons},f),o.default.createElement("div",{className:l.default.modalButtons},h))))}u.displayName="ConfirmationModal",t.default=u},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(0)),u=n(102),s=i(n(1)),c=i(n(34));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,d=e.transparent,f=void 0!==d&&d,v=e.noShadow,h=void 0!==v&&v,p=e.noOverlay,m=void 0!==p&&p,g=e.onClose,_=void 0===g?function(){}:g,y=e.baseZIndex,b=void 0===y?1009:y;(0,u.useHotkeys)("Escape",_);var O=(0,l.useCallback)((function(){_()}),[_]);return a&&l.default.createElement("div",{ref:o},l.default.createElement("div",{style:{zIndex:b},className:(0,s.default)([c.default.overlay,(t={},t[c.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:b+1},className:(0,s.default)([c.default.modal,(n={},n[c.default.transparent]=f,n[c.default.noShadow]=h,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:b+2},className:c.default.modalButton},i))}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"pU6IB2r0LpCFPXgTvOr2gA==",noOverlay:"_5SUR9Fh-fHTy4Xr6mQC+pA==",modal:"LCAT83muXsAGrPUHQ1y+hQ==",transparent:"WHU8Qbpz+AvT-YpuQeUK-Q==",noShadow:"Gi1VTmg3GPNxnX91-m0-5g==",modalButton:"lfnfHu+xyeEjcQbAQwjITg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"jvKSi-fKufcpK9eBWWFCLg==",modalHeader:"cx1RoQdgAbenvVXU8B7fSw==",modalContent:"ZD4v3HE-AYZXV0ITWDF7Gg==",noPadding:"_1zFF8xqyo77UxG2v549BeA==",modalButtonsContainer:"_4hQhCe5U7YByhnhO+-Gqiw==",modalButtons:"JoILbW5FnZixaJ7ETvo8+w=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(37);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var o=n(8);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return o.Clickable}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=a(n(0)),l=n(100),u=n(8),s=n(9);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,c=e.selectedItem,d=e.placement,f=void 0===d?{vertical:"bottom",horizontal:"left"}:d,v=(0,i.useState)(!1),h=v[0],p=v[1],m=(0,l.useOutsideClick)((function(){return p(!1)})),g=!n||0===n.length,_=function(){return p(!h)};return i.default.createElement(s.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:g,selectedItem:c,toggleIsOpen:_}):i.default.createElement(u.Clickable,{display:o,isDisabled:g,onClick:_}),placement:f,ref:m},i.default.createElement(s.Menu,{isOpen:h},n&&n.map((function(e){return i.default.createElement(s.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),p(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}},function(e,t,n){"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* @license React
|
|
4
4
|
* use-sync-external-store-shim.production.min.js
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* This source code is licensed under the MIT license found in the
|
|
9
9
|
* LICENSE file in the root directory of this source tree.
|
|
10
|
-
*/var r=n(0);var a="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},o=r.useState,i=r.useEffect,u=r.useLayoutEffect,l=r.useDebugValue;function d(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!a(e,n)}catch(e){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=o({inst:{value:n,getSnapshot:t}}),a=r[0].inst,c=r[1];return u((function(){a.value=n,a.getSnapshot=t,d(a)&&c({inst:a})}),[e,n,t]),i((function(){return d(a)&&c({inst:a}),e((function(){d(a)&&c({inst:a})}))}),[e]),l(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(40));t.default=function(e){var t,n=e.src,r=e.alt,u=e.containerRef,l=e.size,d=void 0===l?"medium":l,c=e.inverted,s=void 0!==c&&c;return a.default.createElement("img",{ref:u,className:(0,o.default)([i.default.icon,i.default[d],(t={},t[i.default.inverted]=s,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},function(e,t,n){"use strict";n.r(t),t.default={icon:"YA2IHQD4oppOioZICHwzww==",small:"qdzs2EMmBdb0MzNS0iDhMA==",medium:"I6eEGIBK59OkdpwUouaauQ==",large:"_2bi6IEYhdMbPgPJfwoPjuA==",xlarge:"ckkr4ZFOVGuCN4EjPMqeGA==",inverted:"em5rL4nAH1Iwf3MHeIePmg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"w0CpasjYyLR-i2PNIn9Esg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(10),c=i(n(45));t.default=function(e){var t,n,r=e.children,a=e.containerRef,o=e.className,i=e.isOpen,s=void 0===i||i,f=e.header,v=e.footer,p=e.smartLayout,m=void 0===p||p,h=(0,u.useContext)(d.PlacementContext),y=(0,u.useRef)(null),b=a||y;if(!h)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,u.useLayoutEffect)((function(){if(m&&b.current){var e=b.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===h.vertical?t:window.innerHeight-n;if(r<0){var a=b.current.querySelector("ul"),o=a.querySelectorAll("li,a"),i=a.clientHeight+r,u=o.length?getComputedStyle(o[0]).minHeight:0;a.style.maxHeight="calc(".concat(i,"px - ").concat(u,")")}}}),[s,h,m]),s?u.default.createElement(u.default.Fragment,null,u.default.createElement("div",{ref:b,className:(0,l.default)([c.default.menu,(t={},t[c.default.open]=s,t),o])},u.default.createElement("div",null,f&&s&&u.default.createElement("h3",{className:c.default.header},f),u.default.createElement("ul",null,r)),v&&s&&u.default.createElement("div",{className:(0,l.default)([c.default.footer,(n={},n[c.default.noBorder]=!r,n)])},v))):null}},function(e,t,n){"use strict";n.r(t),t.default={container:"qcvDSfFt+w0ja2fqPc0S5w==",menuContainer:"Lwr1a3bP-95aezzmacoJfw==",top:"bBHbs+FWi6-zwWMZImF+NA==",right:"B8M42NwoZ8pUVm5R4JJv1g==",left:"pOG7tXfTFk8qqXtNC0E-Ow==",bottom:"ucvN0EFMns8bfVvsi9j9yQ=="}},function(e,t,n){"use strict";n.r(t),t.default={menu:"rSBfsFNjjooJsDH-X+YXbw==",open:"vX7vgA9ZlF7T9ER9VJodbQ==",entrance:"GpB2LsadhuGJZvKoNOdozA==",header:"oATlBFgepZ5gAZAr-CxnAA==",footer:"wKeE73zYfb-7cRN-F8OY1g==",noBorder:"LD6LDvs-ylMrPgslj4x3hg=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(47));t.default=function(e){var t,n,r=e.children,u=e.className,l=e.onClick,d=e.noPadding,c=void 0!==d&&d,s=e.isActive,f=void 0!==s&&s;return a.default.createElement("li",{className:(0,o.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=c,n),u]),onClick:l},r)}},function(e,t,n){"use strict";n.r(t),t.default={menuItem:"mJd7dRZNOwYe8I9CqFlzrg==",noPadding:"xckDOdnPPYKTkym2awtrjA==",active:"x+yrCq5Bu+jgX7SRUr9few=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=o(n(49));t.default=function(e){var t,n=e.as,o=e.children,d=e.className,c=e.noPadding,s=void 0!==c&&c,f=a(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,u.default)([l.default.menuLinkItem,d,(t={},t[l.default.noPadding]=s,t)])},f),o)}},function(e,t,n){"use strict";n.r(t),t.default={menuLinkItem:"oEr8ZJXLnZyDJBORZtIV4w==",noPadding:"_3TNIJAetASyzbI+KlLTHCw==",active:"ghauCTPTBEJAuAo632z5fQ==",menuItem:"n1xn4EYuxEqOc3fCEamz3Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var a=n(51);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(52));t.default=function(e){var t,n=e.children,r=e.accept,u=e.onChange,l=e.inputRef,d=e.multiple,c=void 0!==d&&d,s=e.disabled,f=void 0!==s&&s,v=e.inverted,p=void 0!==v&&v,m=e.noShadow,h=void 0!==m&&m,y=e.noBorder,b=void 0!==y&&y,g=e.noPadding,_=void 0!==g&&g,O=e.transparent,w=void 0!==O&&O,P=e.stretchHorizontally,j=void 0!==P&&P,M=e.stretchVertically,E=void 0!==M&&M,k=e.rounded,C=void 0!==k&&k,S=e.size,x=void 0===S?"medium":S;return a.default.createElement("label",{className:(0,o.default)([i.default.label,i.default[x],(t={},t[i.default.inverted]=p,t[i.default.rounded]=C,t[i.default.noShadow]=h,t[i.default.noBorder]=b,t[i.default.noPadding]=_,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=j,t[i.default.stretchVertically]=E,t)])},a.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:l,disabled:f,onChange:u}),n)}},function(e,t,n){"use strict";n.r(t),t.default={input:"eUqa35+Em2Lch26Nxjbu+Q==",label:"nxW21h8UI0MNtwo2kcAdIw==",small:"Nda1pAcGJcyDDES5EVJsow==",large:"zqLS3YHXtjlMBsFOzrvEZg==",xlarge:"VZl5WyAkv301-hCCze5MnQ==",inverted:"vlSaJQJhzt6INvWi8NtUwg==",rounded:"b-x5TrySNGCF9HY8J3HtAA==",noShadow:"_5wl14Jjf1yxHwALxmEw6MQ==",noBorder:"dlXWQOlNe+aFkVbPxDLm4A==",noPadding:"iPxUG-ON1XLOkfVPzt7NYQ==",transparent:"BPXI9u3hgAydAc5BzzkCNg==",stretchHorizontally:"JM3JVXt77nH9ur+aL+RYDg==",stretchVertically:"MXaskffWz2k-hqtHRt2vOQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var a=n(54);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(55));t.default=function(e){var t,n=e.className,r=e.children,u=e.containerRef,l=e.layout,d=void 0===l?"column":l,c=e.placement,s=void 0===c?{horizontal:"center",vertical:"bottom",parent:"viewport"}:c,f="center"===s.horizontal?"horizontalCenter":s.horizontal,v="center"===s.vertical?"verticalCenter":s.vertical;return a.default.createElement("div",{ref:u,"data-testid":"floating-panel",className:(0,o.default)([i.default.container,i.default[f],i.default[v],i.default[d],(t={},t[i.default.fixed]="container"!==s.parent,t),n])},r)}},function(e,t,n){"use strict";n.r(t),t.default={container:"kUTCq7sO5cQHrn20PJUCmw==",row:"tdnc1bDHDmGbgAc7SJr69Q==",column:"Mmt076N6AxyH4NRDpCO7WA==",fixed:"_92ebQvJ5xNKJS8zakK7S2A==",plain:"y+idDxZ+5Mpp7OI3GPLAEg==",transparent:"CDqoiK0gCTJpnJgVoYgJDQ==",top:"GPsHlNPDbD6KdNQEGj8zQQ==",topEdge:"xRg0oANrxsxXNByIpnNJvw==",topOnEdge:"QAyeFFGRonxXS9FgJ2d+Ww==",right:"I8EDCJzo0ZwTtgbVTMmzdg==",rightEdge:"W2Ahm3xua2veC3ICT2KQNA==",rightOnEdge:"yjBCQYEA8mWiI98CFX5Lsw==",bottom:"WJxzXQL-5NPvDgneVgkVwA==",bottomEdge:"GVJs--pLDjWvu9C-y34ycw==",bottomOnEdge:"DDVd-PplxnLpSLFlGtFhnw==",left:"oUTMvjL0HxGenU7kJdSxHA==",leftEdge:"BiNsAkMZui+5i-KzYxq0cQ==",leftOnEdge:"_1v8imH0MTj-rMZ0rC-ihQg==",horizontalCenter:"D4p5Aa063Tnm7m0uaGhLkw==",verticalCenter:"_2deG-Y2A3zw6kF+WBnEmjw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var a=n(57);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(2),u=r(n(58));t.default=function(e){var t,n=e.className,r=e.containerRef,l=e.children,d=e.src,c=e.alt,s=e.offsetSides,f=void 0===s?[]:s,v=e.onClick,p=void 0===v?function(){}:v,m=e.disabled,h=void 0!==m&&m,y=e.inverted,b=void 0!==y&&y,g=e.noShadow,_=void 0!==g&&g,O=e.noBorder,w=void 0!==O&&O,P=e.transparent,j=void 0!==P&&P,M=e.rounded,E=void 0!==M&&M,k=e.size,C=void 0===k?"medium":k,S=e.type,x=void 0===S?"button":S;return a.default.createElement("button",{ref:r,className:(0,o.default)([u.default.container,u.default[C],(t={},t[u.default.inverted]=b,t[u.default.rounded]=E,t[u.default.noShadow]=_,t[u.default.noBorder]=w,t[u.default.transparent]=j,t[u.default.topOffset]=E&&f.includes("top"),t[u.default.rightOffset]=E&&f.includes("right"),t[u.default.bottomOffset]=E&&f.includes("bottom"),t[u.default.leftOffset]=E&&f.includes("left"),t),n]),disabled:h,onClick:p,type:x,role:"button"},a.default.createElement(i.Icon,{src:d,alt:c,size:C,inverted:b}),l)}},function(e,t,n){"use strict";n.r(t),t.default={container:"BvQtsUAa-fQPmXbvVSVCNQ==",small:"_8Zf4LzceiIoer7PIVR8BYA==",medium:"_7PF2dnJgZxIE+tS33xK4KA==",large:"EbOYvGKXiAabohi4Oy1CMw==",xlarge:"uOfZ9LiGznaBGIux40pFGg==",rounded:"vAj0xmjXJTfDbWICVKBo2g==",topOffset:"_8YSs-khIDzIefRRh5zH3+Q==",rightOffset:"q4jIl2XFObvsDM-4Qxvtuw==",bottomOffset:"_82KbEcEZzcR5VqHlx862PQ==",leftOffset:"xnc1+ODFmBPiif5JoqTndA==",inverted:"bhVUTdkQltctmrZe0T72kw==",noShadow:"nsgh2c6cHtzxaRrLkv6Fzw==",noBorder:"Vzy6C4djtpfL2pV5oYcOPw==",transparent:"FvdPS-+1tlsTZ1ciElsvxQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var a=n(60);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=n(2),d=o(n(61));t.default=function(e){var t,n=e.as,o=e.containerRef,c=e.children,s=e.className,f=e.src,v=e.alt,p=e.inverted,m=void 0!==p&&p,h=e.noShadow,y=void 0!==h&&h,b=e.noBorder,g=void 0!==b&&b,_=e.transparent,O=void 0!==_&&_,w=e.rounded,P=void 0!==w&&w,j=e.offsetSides,M=void 0===j?[]:j,E=e.disabled,k=void 0!==E&&E,C=e.size,S=void 0===C?"medium":C,x=a(e,["as","containerRef","children","className","src","alt","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:o,"data-testid":"icon-button-link",className:(0,u.default)([d.default.container,d.default[S],(t={},t[d.default.inverted]=m,t[d.default.rounded]=P,t[d.default.noShadow]=y,t[d.default.noBorder]=g,t[d.default.disabled]=k,t[d.default.transparent]=O,t[d.default.topOffset]=P&&M.includes("top"),t[d.default.rightOffset]=P&&M.includes("right"),t[d.default.bottomOffset]=P&&M.includes("bottom"),t[d.default.leftOffset]=P&&M.includes("left"),t),s])},x),i.default.createElement(l.Icon,{src:f,alt:v,size:S,inverted:m}),c)}},function(e,t,n){"use strict";n.r(t),t.default={container:"mUhC7XBYehNl1f+N5hRO4A==",small:"sMS1FgM3wwLg+LguvcXDwg==",medium:"_1jU85mEP5iaWyncLLb8lSA==",large:"cIgggS2f5PaBCITfts0rAg==",xlarge:"T2zaomwLYHQx-YF-vDtwHw==",rounded:"FMAh6gsFRrUfF-C+hxFJSA==",topOffset:"yYvrImQZypKtJ0cb+hEdWQ==",rightOffset:"EiLQUe+BD8ubxdj+JQuHzw==",bottomOffset:"_0qHNIRsm+MR9ryXpJmENQQ==",leftOffset:"LmIMlxvqkRjiIgYLHxaZBg==",inverted:"Bc+Rh6B97+74jkeMdCtrzg==",noShadow:"iGGCGif2yScMISDk-2mkFQ==",noBorder:"dnjn1oFtNVFN2fRWmKkZ3A==",transparent:"ZwiF0u6KTJDgwRC4WSL3rA==",disabled:"mcZLJzT7Vs7blQ9Rxw7RUw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var a=n(63);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(64));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,u=e.srcHeight,l=e.children,d=e.containerRef,c=e.layout,s=void 0===c?"contain":c,f=e.decoding,v=void 0===f?"auto":f,p=e.loading,m=void 0===p?"eager":p,h=e.style,y=a.default.createElement("img",{className:(0,o.default)([i.default.image,i.default[s]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:u,decoding:v,loading:m,style:h});return l?a.default.createElement("div",{ref:d,className:(0,o.default)([i.default.container,i.default.hasOverlay])},y,l&&a.default.createElement("div",{className:i.default.overlay},l)):y}},function(e,t,n){"use strict";n.r(t),t.default={container:"_9gQSR-+gqo5rDvWPmQoAeQ==",hasOverlay:"ii3+6K+FW4YjeQFm-IN3sA==",overlay:"_00ExNc3Kw+HOfTCFa34GIw==",image:"rwD5rHcZFRNa4dHo6j3JyQ==",cover:"_6AaN1T6SY6Eej+FaQta42g==",contain:"EQDkP0F5zzJitF8uO6H+mA==",stretchHorizontally:"GBKPkc8rsyjUVuCp1OlBoQ==",stretchVertically:"_5SzwSJ+6Z4R-Ya11gwLrSQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var a=n(66);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(a).default}});var o=n(68);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(o).default}});var i=n(69);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(67));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,u=e.header,l=e.headerActions;return a.default.createElement("div",{ref:r,className:(0,o.default)([i.default.container,n])},(u||l)&&a.default.createElement("div",{className:i.default.header},u&&a.default.createElement("h3",{className:i.default.headerLabel,id:u.id},u.text),l),a.default.createElement("ul",{"aria-labelledby":null==u?void 0:u.id,className:i.default.list},t))}},function(e,t,n){"use strict";n.r(t),t.default={container:"lJzdP0mnfpglFSYtKKYzJw==",header:"_82vCQ7xr0NkY4UlySPkpkw==",headerLabel:"unWePdIKn4XawRuL7CPD0g==",list:"_5BX+ZZ-AaQutczbDS2e5-w=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(3),u=r(n(11));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,l=e.disabled,d=void 0!==l&&l,c=e.transparent,s=void 0!==c&&c,f=e.noPadding,v=void 0!==f&&f,p=e.size,m=void 0===p?"medium":p,h=e.align,y=void 0===h?"center":h,b=e.onClick,g=void 0===b?function(){}:b;return a.default.createElement("li",{className:(0,o.default)([u.default.listViewItem])},a.default.createElement(i.Button,{onClick:g,disabled:d,inverted:r,transparent:s,noPadding:v,align:y,size:m,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=n(5),d=o(n(11));t.default=function(e){var t=e.children,n=e.as,o=e.active,c=void 0!==o&&o,s=e.transparent,f=void 0!==s&&s,v=e.noPadding,p=void 0!==v&&v,m=e.align,h=void 0===m?"center":m,y=e.size,b=void 0===y?"medium":y,g=a(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,u.default)([d.default.listViewItem])},i.default.createElement(l.ButtonLink,r({as:n,inverted:c,transparent:f,noPadding:p,align:h,size:b,stretchHorizontally:!0,noShadow:!0,noBorder:!0},g),t))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var a=n(71);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(72));t.default=function(e){var t,n=e.children,r=e.containerRef,u=e.transparent,l=void 0!==u&&u,d=e.isFixed,c=void 0!==d&&d,s=e.onClick,f=void 0===s?function(){}:s;return a.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,o.default)([i.default.overlay,(t={},t[i.default.transparent]=l,t[i.default.fixed]=c,t)]),onClick:f},n)}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"EIB9-l58gC3ZvtW8vtUALA==",transparent:"CM1-n3sG8YNd73qJVXM22g==",fixed:"oO1iTNlPjda1fjrYeyLuUA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var a=n(74);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(4),c=i(n(75));t.default=function(e){var t,n=e.label,r=e.onChange,a=e.onBlur,o=e.onKeyDown,i=e.placeholder,s=e.value,f=e.name,v=e.pattern,p=e.inputRef,m=e.size,h=void 0===m?"medium":m,y=e.type,b=void 0===y?"text":y,g=e.autoFocus,_=void 0!==g&&g,O=e.noBorder,w=void 0!==O&&O,P=(0,u.useCallback)((function(e){r&&r(e.target.value)}),[r]),j=u.default.createElement("input",{"data-testid":"input",ref:p,className:(0,l.default)([c.default.textInput,c.default[h],(t={},t[c.default.noBorder]=w,t)]),onChange:P,onBlur:a,onKeyDown:o,pattern:v,placeholder:i,name:f,type:b,value:s,autoFocus:_});return n?u.default.createElement(d.Label,{value:n},j):u.default.createElement(u.default.Fragment,null,j)}},function(e,t,n){"use strict";n.r(t),t.default={textInput:"h6PYJAzytVOk9BeK5Z0+kg==",small:"UXn-BCVg81yMd8FoUfxKSA==",medium:"_4aiP6gxNHhrWbac4k1grUw==",large:"MlnPXYOUyQ7hgI7sw1o0xA==",xlarge:"HGBuKJa9XjxB8uVhKop03A==",noBorder:"sPnSCGUNZXroElSQR193GQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var a=n(77);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(a).default}});var o=n(79);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(78));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return a.default.createElement("div",{ref:n,className:o.default.toast,onClick:i,"data-testid":"toast"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toast:"vWa2-1mOFU+iV14jq7QPsQ==",entrance:"fTsWsKrAKlwT+GOE4wAySQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(80));t.default=function(e){var t=e.children,n=e.baseZIndex;return a.default.createElement("div",{className:(0,o.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toastContainer:"_2-Xu2sZMvN9tgDs+iyLc9Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var a=n(82);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(83));t.default=function(e){var t=e.src,n=e.type,r=e.children,u=e.containerRef,l=e.poster,d=e.muted,c=void 0===d||d,s=e.loop,f=void 0===s||s,v=e.autoPlay,p=void 0===v||v,m=e.layout,h=void 0===m?"contain":m;return r?a.default.createElement("div",{ref:u,className:(0,o.default)([i.default.container,i.default.hasOverlay])},a.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,o.default)([i.default.video,i.default[h]]),muted:c,loop:f,autoPlay:p,poster:l,playsInline:!0},a.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&a.default.createElement("div",{className:i.default.overlay},r)):a.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,o.default)([i.default.video,i.default[h]]),muted:c,loop:f,autoPlay:p,poster:l,playsInline:!0},a.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},function(e,t,n){"use strict";n.r(t),t.default={container:"ulWE-Epr85F0mUt7O1gUTQ==",hasOverlay:"zK7u1nkjc8x7YDAfYQCTpw==",video:"fR4D56LfduoBW-fimfbT0w==",cover:"VXQs4PUnWGyw56g60ZtfWg==",contain:"gxflUzO4rqCBAGuzsYEIew==",stretchHorizontally:"I-63Km4NY1W4QgMhfgU5Mg==",stretchVertically:"vNNhJlgITM+onf7zdzaufg==",overlay:"wxul7UUZlmarF86SGrd-tw=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var r=n(85);Object.defineProperty(t,"Numpad",{enumerable:!0,get:function(){return r.Numpad}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var a=r(n(0)),o=n(3),i=n(2),u=r(n(86)),l=r(n(87)),d=function(e,t){return 10*e+t},c=function(e){return Math.floor(e/10)},s=["0","1","2","3","4","5","6","7","8","9"];t.Numpad=a.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,f=e.disabled,v=void 0!==f&&f,p=function(e){return function(t){t.stopPropagation(),r(e)}},m=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return a.default.createElement(o.Button,{key:t,disabled:v,noBorder:!0,noShadow:!0,onPointerDown:p(d(n,r))},r)}));return a.default.createElement("div",{className:u.default.numpad,ref:t,tabIndex:-1,onKeyDown:function(e){if("Backspace"===e.key)e.stopPropagation(),r(c(n));else if(s.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(d(n,t))}},"data-testid":"numpad"},a.default.createElement("div",{className:u.default.numbers},m,a.default.createElement(o.Button,{disabled:v,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:p(c(n))},a.default.createElement(i.Icon,{alt:"Backspace",src:l.default}))))}))},function(e,t,n){"use strict";n.r(t),t.default={numpad:"PeO+2pBILmGhuXf+mQPJCg==",numbers:"_3+Y8DdO4vBJJtOOqRBhtqg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='69' height='27' viewBox='0 0 69 27' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.1333 26L13.7886 26.3622C13.8816 26.4507 14.005 26.5 14.1333 26.5V26ZM1 13.5L0.655287 13.1378C0.556127 13.2322 0.5 13.3631 0.5 13.5C0.5 13.6369 0.556127 13.7678 0.655287 13.8622L1 13.5ZM14.1333 1V0.5C14.005 0.5 13.8816 0.549345 13.7886 0.637822L14.1333 1ZM67.5 2V25H68.5V2H67.5ZM63.4667 25.5H14.1333V26.5H63.4667V25.5ZM14.478 25.6378L1.34471 13.1378L0.655287 13.8622L13.7886 26.3622L14.478 25.6378ZM1.34471 13.8622L14.478 1.36218L13.7886 0.637822L0.655287 13.1378L1.34471 13.8622ZM14.1333 1.5H63.4667V0.5H14.1333V1.5ZM67 25.5H63.4667V26.5H67V25.5ZM67 0.5H63.4667V1.5H67V0.5ZM67.5 25C67.5 25.2761 67.2761 25.5 67 25.5V26.5C67.8284 26.5 68.5 25.8284 68.5 25H67.5ZM68.5 2C68.5 1.17157 67.8284 0.5 67 0.5V1.5C67.2761 1.5 67.5 1.72386 67.5 2H68.5Z' fill='%23262626'/%3e %3cpath d='M32.6464 6.35355L46.6464 20.3536L47.3536 19.6464L33.3536 5.64645L32.6464 6.35355ZM46.6464 5.64645L32.6464 19.6464L33.3536 20.3536L47.3536 6.35355L46.6464 5.64645Z' fill='%23262626'/%3e %3c/svg%3e"},function(e,t,n){"use strict";n.r(t),n.d(t,"useOutsideClick",(function(){return i})),n.d(t,"usePromise",(function(){return c})),n.d(t,"useSWRHooksConfig",(function(){return ae})),n.d(t,"useToggle",(function(){return oe}));var r=n(0),a=n.n(r),o={capture:!0};function i(e){var t=Object(r.useRef)();return Object(r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n,o),document.addEventListener("touchend",n,o),function(){document.removeEventListener("mouseup",n,o),document.removeEventListener("touchend",n,o)}}),[e]),t}function u(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function u(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,u)}l((r=r.apply(e,t||[])).next())}))}function l(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,u])}}}Object.create;function d(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,o=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)i.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(a)throw a.error}}return i}Object.create;function c(){var e=this,t=d(Object(r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],a=t[1],o=Object(r.useRef)(!1);return Object(r.useEffect)((function(){return function(){o.current=!0}}),[]),[n,Object(r.useCallback)((function(t){return u(e,void 0,void 0,(function(){var e,n;return l(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),a({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===o.current&&a({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===o.current&&a({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))}))}),[o])]}var s=n(12);const f=new WeakMap,v={},p=()=>{},m=p(),h=Object,y=e=>e===m,b=e=>"function"==typeof e,g=(e,t)=>({...e,...t}),_="undefined"!=typeof window,O="undefined"!=typeof document,w=(e,t)=>{const n=f.get(e);return[()=>e.get(t)||v,r=>{const a=e.get(t);n[5](t,g(a,r),a||v)},n[6]]},P=new WeakMap;let j=0;const M=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let a,o;if(h(e)!==e||r||n==RegExp)a=r?e.toJSON():"symbol"==t?e.toString():"string"==t?JSON.stringify(e):""+e;else{if(a=P.get(e),a)return a;if(a=++j+"~",P.set(e,a),n==Array){for(a="@",o=0;o<e.length;o++)a+=M(e[o])+",";P.set(e,a)}if(n==h){a="#";const t=h.keys(e).sort();for(;!y(o=t.pop());)y(e[o])||(a+=o+":"+M(e[o])+",");P.set(e,a)}}return a};let E=!0;const[k,C]=_&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[p,p],S={isOnline:()=>E,isVisible:()=>{const e=O&&document.visibilityState;return y(e)||"hidden"!==e}},x={initFocus:e=>(O&&document.addEventListener("visibilitychange",e),k("focus",e),()=>{O&&document.removeEventListener("visibilitychange",e),C("focus",e)}),initReconnect:e=>{const t=()=>{E=!0,e()},n=()=>{E=!1};return k("online",t),k("offline",n),()=>{C("online",t),C("offline",n)}}},D=!a.a.useId,N=!_||"Deno"in window,L=e=>_&&void 0!==window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1),A=N?r.useEffect:r.useLayoutEffect,B="undefined"!=typeof navigator&&navigator.connection,I=!N&&B&&(["slow-2g","2g"].includes(B.effectiveType)||B.saveData),R=e=>{if(b(e))try{e=e()}catch(t){e=""}const t=e;return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?M(e):"",t]};let z=0;const Q=()=>++z;var V=0,T=1,H=2;async function F(...e){const[t,n,r,a]=e,o=g({populateCache:!0,throwOnError:!0},"boolean"==typeof a?{revalidate:a}:a||{});let i=o.populateCache;const u=o.rollbackOnError;let l=o.optimisticData;const d=!1!==o.revalidate,c=o.throwOnError;if(b(n)){const e=n,r=[],a=t.keys();for(let n=a.next();!n.done;n=a.next()){const a=n.value;!a.startsWith("$inf$")&&e(t.get(a)._k)&&r.push(a)}return Promise.all(r.map(s))}return s(n);async function s(n){const[a]=R(n);if(!a)return;const[o,s]=w(t,a),[v,p,h]=f.get(t),g=v[a],_=()=>d&&(delete h[a],g&&g[0])?g[0](2).then(()=>o().data):o().data;if(e.length<3)return _();let O,P=r;const j=Q();p[a]=[j,0];const M=!y(l),E=o(),k=E.data,C=E._c,S=y(C)?k:C;if(M&&(l=b(l)?l(S):l,s({data:l,_c:S})),b(P))try{P=P(S)}catch(e){O=e}if(P&&b(P.then)){if(P=await P.catch(e=>{O=e}),j!==p[a][0]){if(O)throw O;return P}O&&M&&(e=>"function"==typeof u?u(e):!1!==u)(O)&&(i=!0,P=S,s({data:P,_c:m}))}i&&(O||(b(i)&&(P=i(P,S)),s({data:P,_c:m}))),p[a][1]=Q();const x=await _();if(s({_c:m}),!O)return i?x:P;if(c)throw O}}const J=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},Z=(e,t)=>{if(!f.has(e)){const n=g(x,t),r={},a=F.bind(m,e);let o=p;const i={},u=(e,t)=>{const n=i[e]||[];return i[e]=n,n.push(t),()=>n.splice(n.indexOf(t),1)},l=(t,n,r)=>{e.set(t,n);const a=i[t];if(a)for(let e=a.length;e--;)a[e](r,n)},d=()=>{if(!f.has(e)&&(f.set(e,[r,{},{},{},a,l,u]),!N)){const t=n.initFocus(setTimeout.bind(m,J.bind(m,r,0))),a=n.initReconnect(setTimeout.bind(m,J.bind(m,r,1)));o=()=>{t&&t(),a&&a(),f.delete(e)}}};return d(),[e,a,d,o]}return[e,f.get(e)[4]]},[K,U]=Z(new Map),G=g({onLoadingSlow:p,onSuccess:p,onError:p,onErrorRetry:(e,t,n,r,a)=>{const o=n.errorRetryCount,i=a.retryCount,u=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!y(o)&&i>o||setTimeout(r,u,a)},onDiscarded:p,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:I?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:I?5e3:3e3,compare:(e,t)=>M(e)==M(t),isPaused:()=>!1,cache:K,mutate:U,fallback:{}},S),W=(e,t)=>{const n=g(e,t);if(t){const{use:r,fallback:a}=e,{use:o,fallback:i}=t;r&&o&&(n.use=r.concat(o)),a&&i&&(n.fallback=g(a,i))}return n},Y=Object(r.createContext)({}),X=_&&window.__SWR_DEVTOOLS_USE__,q=X?window.__SWR_DEVTOOLS_USE__:[],$=e=>b(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(null===e[1]?e[2]:e[1])||{}],ee=()=>g(G,Object(r.useContext)(Y)),te=q.concat(e=>(t,n,r)=>e(t,n&&((...e)=>{const r=R(t)[0],[,,,a]=f.get(K),o=a[r];return o?(delete a[r],o):n(...e)}),r));X&&(window.__SWR_DEVTOOLS_REACT__=a.a);const ne={dedupe:!0};h.defineProperty(e=>{const{value:t}=e,n=Object(r.useContext)(Y),a=b(t),o=Object(r.useMemo)(()=>a?t(n):t,[a,n,t]),i=Object(r.useMemo)(()=>a?o:W(n,o),[a,n,o]),u=o&&o.provider,[l]=Object(r.useState)(()=>u?Z(u(i.cache||K),o):m);return l&&(i.cache=l[0],i.mutate=l[1]),A(()=>{if(l)return l[2]&&l[2](),l[3]},[]),Object(r.createElement)(Y.Provider,g(e,{value:i}))},"defaultValue",{value:G});var re;re=(e,t,n)=>{const{cache:a,compare:o,suspense:i,fallbackData:u,revalidateOnMount:l,refreshInterval:d,refreshWhenHidden:c,refreshWhenOffline:v,keepPreviousData:p}=n,[h,_,O]=f.get(a),[P,j]=R(e),M=Object(r.useRef)(!1),E=Object(r.useRef)(!1),k=Object(r.useRef)(P),C=Object(r.useRef)(t),S=Object(r.useRef)(n),x=()=>S.current,B=()=>x().isVisible()&&x().isOnline(),[I,z,J]=w(a,P),Z=Object(r.useRef)({}).current,K=y(u)?n.fallback[P]:u,U=(e,t)=>{let n=!0;for(const r in Z){const a=r;o(t[a],e[a])||"data"===a&&y(e[a])&&o(t[a],te)||(n=!1)}return n},G=Object(r.useMemo)(()=>{const e=!!P&&!!t&&(y(l)?!x().isPaused()&&!i:l),n=()=>{const t=I(),n=g(t);return delete n._k,e?{isValidating:!0,isLoading:!0,...n}:n};let r=n();return()=>{const e=n();return U(e,r)?r:r=e}},[a,P]),W=Object(s.useSyncExternalStore)(Object(r.useCallback)(e=>J(P,(t,n)=>{U(t,n)||e()}),[a,P]),G,G),Y=!M.current,X=W.data,q=y(X)?K:X,$=W.error,ee=Object(r.useRef)(q),te=p?y(X)?ee.current:X:q,re=Y&&!y(l)?l:!x().isPaused()&&(i?!y(q)&&n.revalidateIfStale:y(q)||n.revalidateIfStale),ae=!!(P&&t&&Y&&re),oe=y(W.isValidating)?ae:W.isValidating,ie=y(W.isLoading)?ae:W.isLoading,ue=Object(r.useCallback)(async e=>{const t=C.current;if(!P||!t||E.current||x().isPaused())return!1;let r,a,i=!0;const u=e||{},l=!O[P]||!u.dedupe,d=()=>D?!E.current&&P===k.current&&M.current:P===k.current,c={isValidating:!1,isLoading:!1},s=()=>{z(c)},f=()=>{const e=O[P];e&&e[1]===a&&delete O[P]},v={isValidating:!0};y(I().data)&&(v.isLoading=!0);try{if(l&&(z(v),n.loadingTimeout&&y(I().data)&&setTimeout(()=>{i&&d()&&x().onLoadingSlow(P,n)},n.loadingTimeout),O[P]=[t(j),Q()]),[r,a]=O[P],r=await r,l&&setTimeout(f,n.dedupingInterval),!O[P]||O[P][1]!==a)return l&&d()&&x().onDiscarded(P),!1;c.error=m;const e=_[P];if(!y(e)&&(a<=e[0]||a<=e[1]||0===e[1]))return s(),l&&d()&&x().onDiscarded(P),!1;const u=I().data;c.data=o(u,r)?u:r,l&&d()&&x().onSuccess(r,P,n)}catch(e){f();const t=x(),{shouldRetryOnError:n}=t;t.isPaused()||(c.error=e,l&&d()&&(t.onError(e,P,t),(!0===n||b(n)&&n(e))&&B()&&t.onErrorRetry(e,P,t,ue,{retryCount:(u.retryCount||0)+1,dedupe:!0})))}return i=!1,s(),!0},[P,a]),le=Object(r.useCallback)((...e)=>F(a,k.current,...e),[]);if(A(()=>{C.current=t,S.current=n,y(X)||(ee.current=X)}),A(()=>{if(!P)return;const e=ue.bind(m,ne);let t=0;const n=((e,t,n)=>{const r=t[e]||(t[e]=[]);return r.push(n),()=>{const e=r.indexOf(n);e>=0&&(r[e]=r[r.length-1],r.pop())}})(P,h,n=>{if(n==V){const n=Date.now();x().revalidateOnFocus&&n>t&&B()&&(t=n+x().focusThrottleInterval,e())}else if(n==T)x().revalidateOnReconnect&&B()&&e();else if(n==H)return ue()});return E.current=!1,k.current=P,M.current=!0,z({_k:j}),re&&(y(q)||N?e():L(e)),()=>{E.current=!0,n()}},[P]),A(()=>{let e;function t(){const t=b(d)?d(q):d;t&&-1!==e&&(e=setTimeout(n,t))}function n(){I().error||!c&&!x().isVisible()||!v&&!x().isOnline()?t():ue(ne).then(t)}return t(),()=>{e&&(clearTimeout(e),e=-1)}},[d,c,v,P]),Object(r.useDebugValue)(te),i&&y(q)&&P){if(!D&&N)throw new Error("Fallback data is required when using suspense in SSR.");throw C.current=t,S.current=n,E.current=!1,y($)?ue(ne):$}return{mutate:le,get data(){return Z.data=!0,te},get error(){return Z.error=!0,$},get isValidating(){return Z.isValidating=!0,oe},get isLoading(){return Z.isLoading=!0,ie}}};function ae(){var e=ee();return Object(r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function oe(e){void 0===e&&(e=!1);var t=d(Object(r.useState)(e),2),n=t[0],a=t[1];return[n,Object(r.useCallback)((function(e){a("boolean"==typeof e?e:function(e){return!e})}),[])]}},function(e,t,n){"use strict";n.r(t),n.d(t,"isHotkeyPressed",(function(){return D})),n.d(t,"useHotkeys",(function(){return x})),n.d(t,"useIsHotkeyPressed",(function(){return C}));
|
|
10
|
+
*/var r=n(0);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,u=r.useDebugValue;function s(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,s(o)&&c({inst:o})}),[e,n,t]),i((function(){return s(o)&&c({inst:o}),e((function(){s(o)&&c({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(40));t.default=function(e){var t,n=e.src,r=e.alt,l=e.containerRef,u=e.size,s=void 0===u?"medium":u,c=e.inverted,d=void 0!==c&&c;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[s],(t={},t[i.default.inverted]=d,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},function(e,t,n){"use strict";n.r(t),t.default={icon:"YA2IHQD4oppOioZICHwzww==",small:"qdzs2EMmBdb0MzNS0iDhMA==",medium:"I6eEGIBK59OkdpwUouaauQ==",large:"_2bi6IEYhdMbPgPJfwoPjuA==",xlarge:"ckkr4ZFOVGuCN4EjPMqeGA==",inverted:"em5rL4nAH1Iwf3MHeIePmg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"w0CpasjYyLR-i2PNIn9Esg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(0)),u=i(n(1)),s=n(10),c=i(n(45));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,d=void 0===i||i,f=e.header,v=e.footer,h=e.smartLayout,p=void 0===h||h,m=(0,l.useContext)(s.PlacementContext),g=(0,l.useRef)(null),_=o||g;if(!m)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,l.useLayoutEffect)((function(){if(p&&_.current){var e=_.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===m.vertical?t:window.innerHeight-n;if(r<0){var o=_.current.querySelector("ul"),a=o.querySelectorAll("li,a"),i=o.clientHeight+r,l=a.length?getComputedStyle(a[0]).minHeight:0;o.style.maxHeight="calc(".concat(i,"px - ").concat(l,")")}}}),[d,m,p]),d?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:_,className:(0,u.default)([c.default.menu,(t={},t[c.default.open]=d,t),a])},l.default.createElement("div",null,f&&d&&l.default.createElement("h3",{className:c.default.header},f),l.default.createElement("ul",null,r)),v&&d&&l.default.createElement("div",{className:(0,u.default)([c.default.footer,(n={},n[c.default.noBorder]=!r,n)])},v))):null}},function(e,t,n){"use strict";n.r(t),t.default={container:"qcvDSfFt+w0ja2fqPc0S5w==",menuContainer:"Lwr1a3bP-95aezzmacoJfw==",top:"bBHbs+FWi6-zwWMZImF+NA==",right:"B8M42NwoZ8pUVm5R4JJv1g==",left:"pOG7tXfTFk8qqXtNC0E-Ow==",bottom:"ucvN0EFMns8bfVvsi9j9yQ=="}},function(e,t,n){"use strict";n.r(t),t.default={menu:"rSBfsFNjjooJsDH-X+YXbw==",open:"vX7vgA9ZlF7T9ER9VJodbQ==",entrance:"GpB2LsadhuGJZvKoNOdozA==",header:"oATlBFgepZ5gAZAr-CxnAA==",footer:"wKeE73zYfb-7cRN-F8OY1g==",noBorder:"LD6LDvs-ylMrPgslj4x3hg=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(47));t.default=function(e){var t,n,r=e.children,l=e.className,u=e.onClick,s=e.noPadding,c=void 0!==s&&s,d=e.isActive,f=void 0!==d&&d;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=c,n),l]),onClick:u},r)}},function(e,t,n){"use strict";n.r(t),t.default={menuItem:"mJd7dRZNOwYe8I9CqFlzrg==",noPadding:"xckDOdnPPYKTkym2awtrjA==",active:"x+yrCq5Bu+jgX7SRUr9few=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(0)),l=a(n(1)),u=a(n(49));t.default=function(e){var t,n=e.as,a=e.children,s=e.className,c=e.noPadding,d=void 0!==c&&c,f=o(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,l.default)([u.default.menuLinkItem,s,(t={},t[u.default.noPadding]=d,t)])},f),a)}},function(e,t,n){"use strict";n.r(t),t.default={menuLinkItem:"oEr8ZJXLnZyDJBORZtIV4w==",noPadding:"_3TNIJAetASyzbI+KlLTHCw==",active:"ghauCTPTBEJAuAo632z5fQ==",menuItem:"n1xn4EYuxEqOc3fCEamz3Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var o=n(51);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(52));t.default=function(e){var t,n=e.children,r=e.accept,l=e.onChange,u=e.inputRef,s=e.multiple,c=void 0!==s&&s,d=e.disabled,f=void 0!==d&&d,v=e.inverted,h=void 0!==v&&v,p=e.noShadow,m=void 0!==p&&p,g=e.noBorder,_=void 0!==g&&g,y=e.noPadding,b=void 0!==y&&y,O=e.transparent,w=void 0!==O&&O,M=e.stretchHorizontally,S=void 0!==M&&M,I=e.stretchVertically,P=void 0!==I&&I,C=e.rounded,x=void 0!==C&&C,j=e.size,E=void 0===j?"medium":j;return o.default.createElement("label",{className:(0,a.default)([i.default.label,i.default[E],(t={},t[i.default.inverted]=h,t[i.default.rounded]=x,t[i.default.noShadow]=m,t[i.default.noBorder]=_,t[i.default.noPadding]=b,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=P,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:u,disabled:f,onChange:l}),n)}},function(e,t,n){"use strict";n.r(t),t.default={input:"eUqa35+Em2Lch26Nxjbu+Q==",label:"nxW21h8UI0MNtwo2kcAdIw==",small:"Nda1pAcGJcyDDES5EVJsow==",large:"zqLS3YHXtjlMBsFOzrvEZg==",xlarge:"VZl5WyAkv301-hCCze5MnQ==",inverted:"vlSaJQJhzt6INvWi8NtUwg==",rounded:"b-x5TrySNGCF9HY8J3HtAA==",noShadow:"_5wl14Jjf1yxHwALxmEw6MQ==",noBorder:"dlXWQOlNe+aFkVbPxDLm4A==",noPadding:"iPxUG-ON1XLOkfVPzt7NYQ==",transparent:"BPXI9u3hgAydAc5BzzkCNg==",stretchHorizontally:"JM3JVXt77nH9ur+aL+RYDg==",stretchVertically:"MXaskffWz2k-hqtHRt2vOQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var o=n(54);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(55));t.default=function(e){var t,n=e.className,r=e.children,l=e.containerRef,u=e.layout,s=void 0===u?"column":u,c=e.placement,d=void 0===c?{horizontal:"center",vertical:"bottom",parent:"viewport"}:c,f="center"===d.horizontal?"horizontalCenter":d.horizontal,v="center"===d.vertical?"verticalCenter":d.vertical;return o.default.createElement("div",{ref:l,"data-testid":"floating-panel",className:(0,a.default)([i.default.container,i.default[f],i.default[v],i.default[s],(t={},t[i.default.fixed]="container"!==d.parent,t),n])},r)}},function(e,t,n){"use strict";n.r(t),t.default={container:"kUTCq7sO5cQHrn20PJUCmw==",row:"tdnc1bDHDmGbgAc7SJr69Q==",column:"Mmt076N6AxyH4NRDpCO7WA==",fixed:"_92ebQvJ5xNKJS8zakK7S2A==",plain:"y+idDxZ+5Mpp7OI3GPLAEg==",transparent:"CDqoiK0gCTJpnJgVoYgJDQ==",top:"GPsHlNPDbD6KdNQEGj8zQQ==",topEdge:"xRg0oANrxsxXNByIpnNJvw==",topOnEdge:"QAyeFFGRonxXS9FgJ2d+Ww==",right:"I8EDCJzo0ZwTtgbVTMmzdg==",rightEdge:"W2Ahm3xua2veC3ICT2KQNA==",rightOnEdge:"yjBCQYEA8mWiI98CFX5Lsw==",bottom:"WJxzXQL-5NPvDgneVgkVwA==",bottomEdge:"GVJs--pLDjWvu9C-y34ycw==",bottomOnEdge:"DDVd-PplxnLpSLFlGtFhnw==",left:"oUTMvjL0HxGenU7kJdSxHA==",leftEdge:"BiNsAkMZui+5i-KzYxq0cQ==",leftOnEdge:"_1v8imH0MTj-rMZ0rC-ihQg==",horizontalCenter:"D4p5Aa063Tnm7m0uaGhLkw==",verticalCenter:"_2deG-Y2A3zw6kF+WBnEmjw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var o=n(57);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=n(2),l=r(n(58));t.default=function(e){var t,n=e.className,r=e.containerRef,u=e.children,s=e.src,c=e.alt,d=e.offsetSides,f=void 0===d?[]:d,v=e.onClick,h=void 0===v?function(){}:v,p=e.disabled,m=void 0!==p&&p,g=e.inverted,_=void 0!==g&&g,y=e.noShadow,b=void 0!==y&&y,O=e.noBorder,w=void 0!==O&&O,M=e.transparent,S=void 0!==M&&M,I=e.rounded,P=void 0!==I&&I,C=e.size,x=void 0===C?"medium":C,j=e.type,E=void 0===j?"button":j;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[x],(t={},t[l.default.inverted]=_,t[l.default.rounded]=P,t[l.default.noShadow]=b,t[l.default.noBorder]=w,t[l.default.transparent]=S,t[l.default.topOffset]=P&&f.includes("top"),t[l.default.rightOffset]=P&&f.includes("right"),t[l.default.bottomOffset]=P&&f.includes("bottom"),t[l.default.leftOffset]=P&&f.includes("left"),t),n]),disabled:m,onClick:h,type:E,role:"button"},o.default.createElement(i.Icon,{src:s,alt:c,size:x,inverted:_}),u)}},function(e,t,n){"use strict";n.r(t),t.default={container:"BvQtsUAa-fQPmXbvVSVCNQ==",small:"_8Zf4LzceiIoer7PIVR8BYA==",medium:"_7PF2dnJgZxIE+tS33xK4KA==",large:"EbOYvGKXiAabohi4Oy1CMw==",xlarge:"uOfZ9LiGznaBGIux40pFGg==",rounded:"vAj0xmjXJTfDbWICVKBo2g==",topOffset:"_8YSs-khIDzIefRRh5zH3+Q==",rightOffset:"q4jIl2XFObvsDM-4Qxvtuw==",bottomOffset:"_82KbEcEZzcR5VqHlx862PQ==",leftOffset:"xnc1+ODFmBPiif5JoqTndA==",inverted:"bhVUTdkQltctmrZe0T72kw==",noShadow:"nsgh2c6cHtzxaRrLkv6Fzw==",noBorder:"Vzy6C4djtpfL2pV5oYcOPw==",transparent:"FvdPS-+1tlsTZ1ciElsvxQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var o=n(60);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(0)),l=a(n(1)),u=n(2),s=a(n(61));t.default=function(e){var t,n=e.as,a=e.containerRef,c=e.children,d=e.className,f=e.src,v=e.alt,h=e.inverted,p=void 0!==h&&h,m=e.noShadow,g=void 0!==m&&m,_=e.noBorder,y=void 0!==_&&_,b=e.transparent,O=void 0!==b&&b,w=e.rounded,M=void 0!==w&&w,S=e.offsetSides,I=void 0===S?[]:S,P=e.disabled,C=void 0!==P&&P,x=e.size,j=void 0===x?"medium":x,E=o(e,["as","containerRef","children","className","src","alt","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:a,"data-testid":"icon-button-link",className:(0,l.default)([s.default.container,s.default[j],(t={},t[s.default.inverted]=p,t[s.default.rounded]=M,t[s.default.noShadow]=g,t[s.default.noBorder]=y,t[s.default.disabled]=C,t[s.default.transparent]=O,t[s.default.topOffset]=M&&I.includes("top"),t[s.default.rightOffset]=M&&I.includes("right"),t[s.default.bottomOffset]=M&&I.includes("bottom"),t[s.default.leftOffset]=M&&I.includes("left"),t),d])},E),i.default.createElement(u.Icon,{src:f,alt:v,size:j,inverted:p}),c)}},function(e,t,n){"use strict";n.r(t),t.default={container:"mUhC7XBYehNl1f+N5hRO4A==",small:"sMS1FgM3wwLg+LguvcXDwg==",medium:"_1jU85mEP5iaWyncLLb8lSA==",large:"cIgggS2f5PaBCITfts0rAg==",xlarge:"T2zaomwLYHQx-YF-vDtwHw==",rounded:"FMAh6gsFRrUfF-C+hxFJSA==",topOffset:"yYvrImQZypKtJ0cb+hEdWQ==",rightOffset:"EiLQUe+BD8ubxdj+JQuHzw==",bottomOffset:"_0qHNIRsm+MR9ryXpJmENQQ==",leftOffset:"LmIMlxvqkRjiIgYLHxaZBg==",inverted:"Bc+Rh6B97+74jkeMdCtrzg==",noShadow:"iGGCGif2yScMISDk-2mkFQ==",noBorder:"dnjn1oFtNVFN2fRWmKkZ3A==",transparent:"ZwiF0u6KTJDgwRC4WSL3rA==",disabled:"mcZLJzT7Vs7blQ9Rxw7RUw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var o=n(63);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(64));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,l=e.srcHeight,u=e.children,s=e.containerRef,c=e.layout,d=void 0===c?"contain":c,f=e.decoding,v=void 0===f?"auto":f,h=e.loading,p=void 0===h?"eager":h,m=e.style,g=o.default.createElement("img",{className:(0,a.default)([i.default.image,i.default[d]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:l,decoding:v,loading:p,style:m});return u?o.default.createElement("div",{ref:s,className:(0,a.default)([i.default.container,i.default.hasOverlay])},g,u&&o.default.createElement("div",{className:i.default.overlay},u)):g}},function(e,t,n){"use strict";n.r(t),t.default={container:"_9gQSR-+gqo5rDvWPmQoAeQ==",hasOverlay:"ii3+6K+FW4YjeQFm-IN3sA==",overlay:"_00ExNc3Kw+HOfTCFa34GIw==",image:"rwD5rHcZFRNa4dHo6j3JyQ==",cover:"_6AaN1T6SY6Eej+FaQta42g==",contain:"EQDkP0F5zzJitF8uO6H+mA==",stretchHorizontally:"GBKPkc8rsyjUVuCp1OlBoQ==",stretchVertically:"_5SzwSJ+6Z4R-Ya11gwLrSQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var o=n(66);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(o).default}});var a=n(68);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(a).default}});var i=n(69);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(67));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,l=e.header,u=e.headerActions;return o.default.createElement("div",{ref:r,className:(0,a.default)([i.default.container,n])},(l||u)&&o.default.createElement("div",{className:i.default.header},l&&o.default.createElement("h3",{className:i.default.headerLabel,id:l.id},l.text),u),o.default.createElement("ul",{"aria-labelledby":null==l?void 0:l.id,className:i.default.list},t))}},function(e,t,n){"use strict";n.r(t),t.default={container:"lJzdP0mnfpglFSYtKKYzJw==",header:"_82vCQ7xr0NkY4UlySPkpkw==",headerLabel:"unWePdIKn4XawRuL7CPD0g==",list:"_5BX+ZZ-AaQutczbDS2e5-w=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=n(3),l=r(n(11));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,u=e.disabled,s=void 0!==u&&u,c=e.transparent,d=void 0!==c&&c,f=e.noPadding,v=void 0!==f&&f,h=e.size,p=void 0===h?"medium":h,m=e.align,g=void 0===m?"center":m,_=e.onClick,y=void 0===_?function(){}:_;return o.default.createElement("li",{className:(0,a.default)([l.default.listViewItem])},o.default.createElement(i.Button,{onClick:y,disabled:s,inverted:r,transparent:d,noPadding:v,align:g,size:p,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(0)),l=a(n(1)),u=n(5),s=a(n(11));t.default=function(e){var t=e.children,n=e.as,a=e.active,c=void 0!==a&&a,d=e.transparent,f=void 0!==d&&d,v=e.noPadding,h=void 0!==v&&v,p=e.align,m=void 0===p?"center":p,g=e.size,_=void 0===g?"medium":g,y=o(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,l.default)([s.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:c,transparent:f,noPadding:h,align:m,size:_,stretchHorizontally:!0,noShadow:!0,noBorder:!0},y),t))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var o=n(71);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(72));t.default=function(e){var t,n=e.children,r=e.containerRef,l=e.transparent,u=void 0!==l&&l,s=e.isFixed,c=void 0!==s&&s,d=e.onClick,f=void 0===d?function(){}:d;return o.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,a.default)([i.default.overlay,(t={},t[i.default.transparent]=u,t[i.default.fixed]=c,t)]),onClick:f},n)}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"EIB9-l58gC3ZvtW8vtUALA==",transparent:"CM1-n3sG8YNd73qJVXM22g==",fixed:"oO1iTNlPjda1fjrYeyLuUA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Table=void 0;var o=n(74);Object.defineProperty(t,"Table",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=i(n(0)),s=l(n(1)),c=n(101),d=l(n(75)),f=l(n(76)),v=l(n(78)),h=n(82),p=l(n(84));t.default=function(e){var t=e.columns,n=e.dataSource,o=e.onRowClick,a=e.hasArrow,i=e.onLoadMore,l=e.page,m=e.setPage,g=e.pageSize,_=void 0===g?h.TableConfig.PAGE_SIZE:g,y=e.tableHeight,b=e.placeholder,O=e.rowHeight,w=void 0===O?h.TableConfig.ROW_HEIGHT:O,M=e.disableLazyLoader,S=e.activeRows,I=e.itemsCount,P=e.isHeaderSticky,C=void 0!==P&&P,x=e.hasVirtualScroll,j=void 0===x||x,E=(0,u.useState)(0),R=E[0],k=E[1],D=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,s=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(v.default,{data:s,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==S?void 0:S[s.id])}))}),[t,S,a,w,o]),z=(0,u.useCallback)((function(e){var t=e.scrollOffset;k(t)}),[]),T=(0,u.useCallback)((function(){M||n.length!==I&&(n.length<_*l||m&&i&&(m(l+1),i(l+1)))}),[M,n.length,I,_,l,m,i]),L=(0,u.useCallback)((function(e){return!M&&e<n.length-h.TableConfig.ITEMS_LOADED}),[n.length,M]);return u.default.createElement(u.default.Fragment,null,j?u.default.createElement("div",{className:p.default.container},u.default.createElement("div",{className:p.default.table},u.default.createElement(f.default,{columns:t,scrollTop:R}),b&&!n.length?u.default.createElement("div",{className:p.default.placeholderContainer,style:{height:y}},b):u.default.createElement(d.default,{isItemLoaded:L,itemCount:n.length,loadMoreItems:T},(function(e){var t=e.onItemsRendered,r=e.ref;return u.default.createElement(c.FixedSizeList,{ref:r,height:y,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:z,onItemsRendered:t,className:p.default.scrollbarContainer},D)})))):u.default.createElement("div",{className:(0,s.default)([p.default.container,p.default.scrollbarContainer]),style:{height:y}},u.default.createElement(f.default,{columns:t,scrollTop:R,isHeaderSticky:C}),n.map((function(e,n){return u.default.createElement(v.default,{key:n,data:e,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==S?void 0:S[null==e?void 0:e.id])})}))))}},function(e,t,n){"use strict";n.r(t);var r=n(0);var o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},l=function(e){function t(){var e,n,r;o(this,t);for(var a=arguments.length,l=Array(a),u=0;u<a;u++)l[u]=arguments[u];return n=r=i(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(l))),r._lastRenderedStartIndex=-1,r._lastRenderedStopIndex=-1,r._memoizedUnloadedRanges=[],r._onItemsRendered=function(e){var t=e.visibleStartIndex,n=e.visibleStopIndex;r._lastRenderedStartIndex=t,r._lastRenderedStopIndex=n,r._ensureRowsLoaded(t,n)},r._setRef=function(e){r._listRef=e},i(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"resetloadMoreItemsCache",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this._memoizedUnloadedRanges=[],e&&this._ensureRowsLoaded(this._lastRenderedStartIndex,this._lastRenderedStopIndex)}},{key:"componentDidMount",value:function(){0}},{key:"render",value:function(){return(0,this.props.children)({onItemsRendered:this._onItemsRendered,ref:this._setRef})}},{key:"_ensureRowsLoaded",value:function(e,t){var n=this.props,r=n.isItemLoaded,o=n.itemCount,a=n.minimumBatchSize,i=void 0===a?10:a,l=n.threshold,u=void 0===l?15:l,s=function(e){for(var t=e.isItemLoaded,n=e.itemCount,r=e.minimumBatchSize,o=e.startIndex,a=e.stopIndex,i=[],l=null,u=null,s=o;s<=a;s++){t(s)?null!==u&&(i.push(l,u),l=u=null):(u=s,null===l&&(l=s))}if(null!==u){for(var c=Math.min(Math.max(u,l+r-1),n-1),d=u+1;d<=c&&!t(d);d++)u=d;i.push(l,u)}if(i.length)for(;i[1]-i[0]+1<r&&i[0]>0;){var f=i[0]-1;if(t(f))break;i[0]=f}return i}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==s.length||this._memoizedUnloadedRanges.some((function(e,t){return s[t]!==e})))&&(this._memoizedUnloadedRanges=s,this._loadUnloadedRanges(s))}},{key:"_loadUnloadedRanges",value:function(e){for(var t=this,n=this.props.loadMoreItems||this.props.loadMoreRows,r=function(r){var o=e[r],a=e[r+1],i=n(o,a);null!=i&&i.then((function(){if(function(e){var t=e.lastRenderedStartIndex,n=e.lastRenderedStopIndex,r=e.startIndex,o=e.stopIndex;return!(r>n||o<t)}({lastRenderedStartIndex:t._lastRenderedStartIndex,lastRenderedStopIndex:t._lastRenderedStopIndex,startIndex:o,stopIndex:a})){if(null==t._listRef)return;"function"==typeof t._listRef.resetAfterIndex?t._listRef.resetAfterIndex(o,!0):("function"==typeof t._listRef._getItemStyleCache&&t._listRef._getItemStyleCache(-1),t._listRef.forceUpdate())}}))},o=0;o<e.length;o+=2)r(o)}}]),t}(r.PureComponent);t.default=l},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(77));t.default=function(e){var t,n,r=e.columns,l=e.scrollTop,u=e.isHeaderSticky;return o.default.createElement("div",{className:(0,a.default)([i.default.container,(t={},t[i.default.borderBottom]=!!l,t),(n={},n[i.default.isHeaderSticky]=u,n)])},r.map((function(e,t){return o.default.createElement("div",{className:(0,a.default)([i.default.tableHeaderCell,e.className]),key:"table-head-cell-".concat(t)},e.title)})))}},function(e,t,n){"use strict";n.r(t),t.default={container:"pYnb2BryIYH54yMkBqg7pA==",isHeaderSticky:"_9u1lMc0QMRavJZzC64lo2g==",tableHeaderCell:"oUDYuc3BtXYAKs2tAcjXmQ==",borderBottom:"CtsVzY0JF+9YtHhr6pfdJg=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=n(0),i=r(n(1)),l=r(n(79)),u=r(n(81));t.default=function(e){var t,n=e.data,r=e.columns,s=e.onRowClick,c=e.hasArrow,d=e.rowHeight,f=e.isActive,v=(0,a.useCallback)((function(){s&&"string"!=typeof n&&s(n)}),[n,s]);return o.default.createElement("div",{className:(0,i.default)([u.default.container,(t={},t[u.default.hasArrow]=c,t[u.default.active]=f,t)]),onClick:v},r.map((function(e,t){return o.default.createElement(l.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:d})})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(80));t.default=function(e){var t=e.item,n=e.column,r=e.rowHeight,l="string"==typeof t?t:t[n.dataIndex];return o.default.createElement("div",{className:(0,a.default)([i.default.container,n.className]),style:{height:r}},n.render?n.render(l):l)}},function(e,t,n){"use strict";n.r(t),t.default={container:"_7LdyuwGvz9Z2kVPG7WsXsw=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"NsOfS7LEuQpUK5UQa2yMYQ==",tableRow:"nAq2JGeUDFZgle6OQKG0jQ==",active:"Y2tpJ5s5k8O7eAa4AXuQvw==",hasArrow:"CejvrEN-sMfvkzQdDBI2ow=="}},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(83),t)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TableConfig=void 0,function(e){e[e.ROW_HEIGHT=48]="ROW_HEIGHT",e[e.PAGE_SIZE=100]="PAGE_SIZE",e[e.ITEMS_LOADED=5]="ITEMS_LOADED"}(t.TableConfig||(t.TableConfig={}))},function(e,t,n){"use strict";n.r(t),t.default={container:"vBT8bbPblZzxs0lBTntUaA==",table:"UZoDc523xcUulAN0ecER2g==",placeholderContainer:"bW5+VSN43MJ0TdgqE74Lbw==",scrollbarContainer:"BdL-cxfhHx2ewwm6vMf9pQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var o=n(86);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(0)),u=i(n(1)),s=n(4),c=i(n(87));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,d=e.value,f=e.name,v=e.pattern,h=e.inputRef,p=e.size,m=void 0===p?"medium":p,g=e.type,_=void 0===g?"text":g,y=e.autoFocus,b=void 0!==y&&y,O=e.noBorder,w=void 0!==O&&O,M=e.inputMode,S=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),I=l.default.createElement("input",{"data-testid":"input",ref:h,className:(0,u.default)([c.default.textInput,c.default[m],(t={},t[c.default.noBorder]=w,t)]),onChange:S,onBlur:o,onKeyDown:a,pattern:v,placeholder:i,name:f,type:_,value:d,autoFocus:b,inputMode:M});return n?l.default.createElement(s.Label,{value:n},I):l.default.createElement(l.default.Fragment,null,I)}},function(e,t,n){"use strict";n.r(t),t.default={textInput:"h6PYJAzytVOk9BeK5Z0+kg==",small:"UXn-BCVg81yMd8FoUfxKSA==",medium:"_4aiP6gxNHhrWbac4k1grUw==",large:"MlnPXYOUyQ7hgI7sw1o0xA==",xlarge:"HGBuKJa9XjxB8uVhKop03A==",noBorder:"sPnSCGUNZXroElSQR193GQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var o=n(89);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(o).default}});var a=n(91);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(90));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return o.default.createElement("div",{ref:n,className:a.default.toast,onClick:i,"data-testid":"toast"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toast:"vWa2-1mOFU+iV14jq7QPsQ==",entrance:"fTsWsKrAKlwT+GOE4wAySQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(92));t.default=function(e){var t=e.children,n=e.baseZIndex;return o.default.createElement("div",{className:(0,a.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toastContainer:"_2-Xu2sZMvN9tgDs+iyLc9Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var o=n(94);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(95));t.default=function(e){var t=e.src,n=e.type,r=e.children,l=e.containerRef,u=e.poster,s=e.muted,c=void 0===s||s,d=e.loop,f=void 0===d||d,v=e.autoPlay,h=void 0===v||v,p=e.layout,m=void 0===p?"contain":p;return r?o.default.createElement("div",{ref:l,className:(0,a.default)([i.default.container,i.default.hasOverlay])},o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:c,loop:f,autoPlay:h,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&o.default.createElement("div",{className:i.default.overlay},r)):o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:c,loop:f,autoPlay:h,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},function(e,t,n){"use strict";n.r(t),t.default={container:"ulWE-Epr85F0mUt7O1gUTQ==",hasOverlay:"zK7u1nkjc8x7YDAfYQCTpw==",video:"fR4D56LfduoBW-fimfbT0w==",cover:"VXQs4PUnWGyw56g60ZtfWg==",contain:"gxflUzO4rqCBAGuzsYEIew==",stretchHorizontally:"I-63Km4NY1W4QgMhfgU5Mg==",stretchVertically:"vNNhJlgITM+onf7zdzaufg==",overlay:"wxul7UUZlmarF86SGrd-tw=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var r=n(97);Object.defineProperty(t,"Numpad",{enumerable:!0,get:function(){return r.Numpad}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var o=r(n(0)),a=n(3),i=n(2),l=r(n(98)),u=r(n(99)),s=function(e,t){return 10*e+t},c=function(e){return Math.floor(e/10)},d=["0","1","2","3","4","5","6","7","8","9"];t.Numpad=o.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,f=e.disabled,v=void 0!==f&&f,h=function(e){return function(t){t.stopPropagation(),r(e)}},p=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return o.default.createElement(a.Button,{key:t,disabled:v,noBorder:!0,noShadow:!0,onPointerDown:h(s(n,r))},r)}));return o.default.createElement("div",{className:l.default.numpad,ref:t,tabIndex:-1,onKeyDown:function(e){if("Backspace"===e.key)e.stopPropagation(),r(c(n));else if(d.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(s(n,t))}},"data-testid":"numpad"},o.default.createElement("div",{className:l.default.numbers},p,o.default.createElement(a.Button,{disabled:v,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:h(c(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},function(e,t,n){"use strict";n.r(t),t.default={numpad:"PeO+2pBILmGhuXf+mQPJCg==",numbers:"_3+Y8DdO4vBJJtOOqRBhtqg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='69' height='27' viewBox='0 0 69 27' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.1333 26L13.7886 26.3622C13.8816 26.4507 14.005 26.5 14.1333 26.5V26ZM1 13.5L0.655287 13.1378C0.556127 13.2322 0.5 13.3631 0.5 13.5C0.5 13.6369 0.556127 13.7678 0.655287 13.8622L1 13.5ZM14.1333 1V0.5C14.005 0.5 13.8816 0.549345 13.7886 0.637822L14.1333 1ZM67.5 2V25H68.5V2H67.5ZM63.4667 25.5H14.1333V26.5H63.4667V25.5ZM14.478 25.6378L1.34471 13.1378L0.655287 13.8622L13.7886 26.3622L14.478 25.6378ZM1.34471 13.8622L14.478 1.36218L13.7886 0.637822L0.655287 13.1378L1.34471 13.8622ZM14.1333 1.5H63.4667V0.5H14.1333V1.5ZM67 25.5H63.4667V26.5H67V25.5ZM67 0.5H63.4667V1.5H67V0.5ZM67.5 25C67.5 25.2761 67.2761 25.5 67 25.5V26.5C67.8284 26.5 68.5 25.8284 68.5 25H67.5ZM68.5 2C68.5 1.17157 67.8284 0.5 67 0.5V1.5C67.2761 1.5 67.5 1.72386 67.5 2H68.5Z' fill='%23262626'/%3e %3cpath d='M32.6464 6.35355L46.6464 20.3536L47.3536 19.6464L33.3536 5.64645L32.6464 6.35355ZM46.6464 5.64645L32.6464 19.6464L33.3536 20.3536L47.3536 6.35355L46.6464 5.64645Z' fill='%23262626'/%3e %3c/svg%3e"},function(e,t,n){"use strict";n.r(t),n.d(t,"useOutsideClick",(function(){return i})),n.d(t,"usePromise",(function(){return c})),n.d(t,"useSWRHooksConfig",(function(){return oe})),n.d(t,"useToggle",(function(){return ae}));var r=n(0),o=n.n(r),a={capture:!0};function i(e){var t=Object(r.useRef)();return Object(r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n,a),document.addEventListener("touchend",n,a),function(){document.removeEventListener("mouseup",n,a),document.removeEventListener("touchend",n,a)}}),[e]),t}function l(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{u(r.next(e))}catch(e){a(e)}}function l(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,l)}u((r=r.apply(e,t||[])).next())}))}function u(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(a){return function(l){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){i.label=a[1];break}if(6===a[0]&&i.label<o[1]){i.label=o[1],o=a;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(a);break}o[2]&&i.ops.pop(),i.trys.pop();continue}a=t.call(e,i)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,l])}}}Object.create;function s(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}Object.create;function c(){var e=this,t=s(Object(r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],o=t[1],a=Object(r.useRef)(!1);return Object(r.useEffect)((function(){return function(){a.current=!0}}),[]),[n,Object(r.useCallback)((function(t){return l(e,void 0,void 0,(function(){var e,n;return u(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),o({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===a.current&&o({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===a.current&&o({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))}))}),[a])]}var d=n(12);const f=new WeakMap,v={},h=()=>{},p=h(),m=Object,g=e=>e===p,_=e=>"function"==typeof e,y=(e,t)=>({...e,...t}),b="undefined"!=typeof window,O="undefined"!=typeof document,w=(e,t)=>{const n=f.get(e);return[()=>e.get(t)||v,r=>{const o=e.get(t);n[5](t,y(o,r),o||v)},n[6]]},M=new WeakMap;let S=0;const I=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let o,a;if(m(e)!==e||r||n==RegExp)o=r?e.toJSON():"symbol"==t?e.toString():"string"==t?JSON.stringify(e):""+e;else{if(o=M.get(e),o)return o;if(o=++S+"~",M.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=I(e[a])+",";M.set(e,o)}if(n==m){o="#";const t=m.keys(e).sort();for(;!g(a=t.pop());)g(e[a])||(o+=a+":"+I(e[a])+",");M.set(e,o)}}return o};let P=!0;const[C,x]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[h,h],j={isOnline:()=>P,isVisible:()=>{const e=O&&document.visibilityState;return g(e)||"hidden"!==e}},E={initFocus:e=>(O&&document.addEventListener("visibilitychange",e),C("focus",e),()=>{O&&document.removeEventListener("visibilitychange",e),x("focus",e)}),initReconnect:e=>{const t=()=>{P=!0,e()},n=()=>{P=!1};return C("online",t),C("offline",n),()=>{x("online",t),x("offline",n)}}},R=!o.a.useId,k=!b||"Deno"in window,D=e=>b&&void 0!==window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1),z=k?r.useEffect:r.useLayoutEffect,T="undefined"!=typeof navigator&&navigator.connection,L=!k&&T&&(["slow-2g","2g"].includes(T.effectiveType)||T.saveData),A=e=>{if(_(e))try{e=e()}catch(t){e=""}const t=e;return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?I(e):"",t]};let N=0;const B=()=>++N;var H=0,F=1,Q=2;async function W(...e){const[t,n,r,o]=e,a=y({populateCache:!0,throwOnError:!0},"boolean"==typeof o?{revalidate:o}:o||{});let i=a.populateCache;const l=a.rollbackOnError;let u=a.optimisticData;const s=!1!==a.revalidate,c=a.throwOnError;if(_(n)){const e=n,r=[],o=t.keys();for(let n=o.next();!n.done;n=o.next()){const o=n.value;!o.startsWith("$inf$")&&e(t.get(o)._k)&&r.push(o)}return Promise.all(r.map(d))}return d(n);async function d(n){const[o]=A(n);if(!o)return;const[a,d]=w(t,o),[v,h,m]=f.get(t),y=v[o],b=()=>s&&(delete m[o],y&&y[0])?y[0](2).then(()=>a().data):a().data;if(e.length<3)return b();let O,M=r;const S=B();h[o]=[S,0];const I=!g(u),P=a(),C=P.data,x=P._c,j=g(x)?C:x;if(I&&(u=_(u)?u(j):u,d({data:u,_c:j})),_(M))try{M=M(j)}catch(e){O=e}if(M&&_(M.then)){if(M=await M.catch(e=>{O=e}),S!==h[o][0]){if(O)throw O;return M}O&&I&&(e=>"function"==typeof l?l(e):!1!==l)(O)&&(i=!0,M=j,d({data:M,_c:p}))}i&&(O||(_(i)&&(M=i(M,j)),d({data:M,_c:p}))),h[o][1]=B();const E=await b();if(d({_c:p}),!O)return i?E:M;if(c)throw O}}const V=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},U=(e,t)=>{if(!f.has(e)){const n=y(E,t),r={},o=W.bind(p,e);let a=h;const i={},l=(e,t)=>{const n=i[e]||[];return i[e]=n,n.push(t),()=>n.splice(n.indexOf(t),1)},u=(t,n,r)=>{e.set(t,n);const o=i[t];if(o)for(let e=o.length;e--;)o[e](r,n)},s=()=>{if(!f.has(e)&&(f.set(e,[r,{},{},{},o,u,l]),!k)){const t=n.initFocus(setTimeout.bind(p,V.bind(p,r,0))),o=n.initReconnect(setTimeout.bind(p,V.bind(p,r,1)));a=()=>{t&&t(),o&&o(),f.delete(e)}}};return s(),[e,o,s,a]}return[e,f.get(e)[4]]},[Z,J]=U(new Map),K=y({onLoadingSlow:h,onSuccess:h,onError:h,onErrorRetry:(e,t,n,r,o)=>{const a=n.errorRetryCount,i=o.retryCount,l=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!g(a)&&i>a||setTimeout(r,l,o)},onDiscarded:h,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:L?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:L?5e3:3e3,compare:(e,t)=>I(e)==I(t),isPaused:()=>!1,cache:Z,mutate:J,fallback:{}},j),G=(e,t)=>{const n=y(e,t);if(t){const{use:r,fallback:o}=e,{use:a,fallback:i}=t;r&&a&&(n.use=r.concat(a)),o&&i&&(n.fallback=y(o,i))}return n},q=Object(r.createContext)({}),Y=b&&window.__SWR_DEVTOOLS_USE__,X=Y?window.__SWR_DEVTOOLS_USE__:[],$=e=>_(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(null===e[1]?e[2]:e[1])||{}],ee=()=>y(K,Object(r.useContext)(q)),te=X.concat(e=>(t,n,r)=>e(t,n&&((...e)=>{const r=A(t)[0],[,,,o]=f.get(Z),a=o[r];return a?(delete o[r],a):n(...e)}),r));Y&&(window.__SWR_DEVTOOLS_REACT__=o.a);const ne={dedupe:!0};m.defineProperty(e=>{const{value:t}=e,n=Object(r.useContext)(q),o=_(t),a=Object(r.useMemo)(()=>o?t(n):t,[o,n,t]),i=Object(r.useMemo)(()=>o?a:G(n,a),[o,n,a]),l=a&&a.provider,[u]=Object(r.useState)(()=>l?U(l(i.cache||Z),a):p);return u&&(i.cache=u[0],i.mutate=u[1]),z(()=>{if(u)return u[2]&&u[2](),u[3]},[]),Object(r.createElement)(q.Provider,y(e,{value:i}))},"defaultValue",{value:K});var re;re=(e,t,n)=>{const{cache:o,compare:a,suspense:i,fallbackData:l,revalidateOnMount:u,refreshInterval:s,refreshWhenHidden:c,refreshWhenOffline:v,keepPreviousData:h}=n,[m,b,O]=f.get(o),[M,S]=A(e),I=Object(r.useRef)(!1),P=Object(r.useRef)(!1),C=Object(r.useRef)(M),x=Object(r.useRef)(t),j=Object(r.useRef)(n),E=()=>j.current,T=()=>E().isVisible()&&E().isOnline(),[L,N,V]=w(o,M),U=Object(r.useRef)({}).current,Z=g(l)?n.fallback[M]:l,J=(e,t)=>{let n=!0;for(const r in U){const o=r;a(t[o],e[o])||"data"===o&&g(e[o])&&a(t[o],te)||(n=!1)}return n},K=Object(r.useMemo)(()=>{const e=!!M&&!!t&&(g(u)?!E().isPaused()&&!i:u),n=()=>{const t=L(),n=y(t);return delete n._k,e?{isValidating:!0,isLoading:!0,...n}:n};let r=n();return()=>{const e=n();return J(e,r)?r:r=e}},[o,M]),G=Object(d.useSyncExternalStore)(Object(r.useCallback)(e=>V(M,(t,n)=>{J(t,n)||e()}),[o,M]),K,K),q=!I.current,Y=G.data,X=g(Y)?Z:Y,$=G.error,ee=Object(r.useRef)(X),te=h?g(Y)?ee.current:Y:X,re=q&&!g(u)?u:!E().isPaused()&&(i?!g(X)&&n.revalidateIfStale:g(X)||n.revalidateIfStale),oe=!!(M&&t&&q&&re),ae=g(G.isValidating)?oe:G.isValidating,ie=g(G.isLoading)?oe:G.isLoading,le=Object(r.useCallback)(async e=>{const t=x.current;if(!M||!t||P.current||E().isPaused())return!1;let r,o,i=!0;const l=e||{},u=!O[M]||!l.dedupe,s=()=>R?!P.current&&M===C.current&&I.current:M===C.current,c={isValidating:!1,isLoading:!1},d=()=>{N(c)},f=()=>{const e=O[M];e&&e[1]===o&&delete O[M]},v={isValidating:!0};g(L().data)&&(v.isLoading=!0);try{if(u&&(N(v),n.loadingTimeout&&g(L().data)&&setTimeout(()=>{i&&s()&&E().onLoadingSlow(M,n)},n.loadingTimeout),O[M]=[t(S),B()]),[r,o]=O[M],r=await r,u&&setTimeout(f,n.dedupingInterval),!O[M]||O[M][1]!==o)return u&&s()&&E().onDiscarded(M),!1;c.error=p;const e=b[M];if(!g(e)&&(o<=e[0]||o<=e[1]||0===e[1]))return d(),u&&s()&&E().onDiscarded(M),!1;const l=L().data;c.data=a(l,r)?l:r,u&&s()&&E().onSuccess(r,M,n)}catch(e){f();const t=E(),{shouldRetryOnError:n}=t;t.isPaused()||(c.error=e,u&&s()&&(t.onError(e,M,t),(!0===n||_(n)&&n(e))&&T()&&t.onErrorRetry(e,M,t,le,{retryCount:(l.retryCount||0)+1,dedupe:!0})))}return i=!1,d(),!0},[M,o]),ue=Object(r.useCallback)((...e)=>W(o,C.current,...e),[]);if(z(()=>{x.current=t,j.current=n,g(Y)||(ee.current=Y)}),z(()=>{if(!M)return;const e=le.bind(p,ne);let t=0;const n=((e,t,n)=>{const r=t[e]||(t[e]=[]);return r.push(n),()=>{const e=r.indexOf(n);e>=0&&(r[e]=r[r.length-1],r.pop())}})(M,m,n=>{if(n==H){const n=Date.now();E().revalidateOnFocus&&n>t&&T()&&(t=n+E().focusThrottleInterval,e())}else if(n==F)E().revalidateOnReconnect&&T()&&e();else if(n==Q)return le()});return P.current=!1,C.current=M,I.current=!0,N({_k:S}),re&&(g(X)||k?e():D(e)),()=>{P.current=!0,n()}},[M]),z(()=>{let e;function t(){const t=_(s)?s(X):s;t&&-1!==e&&(e=setTimeout(n,t))}function n(){L().error||!c&&!E().isVisible()||!v&&!E().isOnline()?t():le(ne).then(t)}return t(),()=>{e&&(clearTimeout(e),e=-1)}},[s,c,v,M]),Object(r.useDebugValue)(te),i&&g(X)&&M){if(!R&&k)throw new Error("Fallback data is required when using suspense in SSR.");throw x.current=t,j.current=n,P.current=!1,g($)?le(ne):$}return{mutate:ue,get data(){return U.data=!0,te},get error(){return U.error=!0,$},get isValidating(){return U.isValidating=!0,ae},get isLoading(){return U.isLoading=!0,ie}}};function oe(){var e=ee();return Object(r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function ae(e){void 0===e&&(e=!1);var t=s(Object(r.useState)(e),2),n=t[0],o=t[1];return[n,Object(r.useCallback)((function(e){o("boolean"==typeof e?e:function(e){return!e})}),[])]}},function(e,t,n){"use strict";function r(){return(r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t){return(a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function i(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,a(e,t)}n.r(t),n.d(t,"FixedSizeGrid",(function(){return N})),n.d(t,"FixedSizeList",(function(){return B})),n.d(t,"VariableSizeGrid",(function(){return j})),n.d(t,"VariableSizeList",(function(){return A})),n.d(t,"areEqual",(function(){return W})),n.d(t,"shouldComponentUpdate",(function(){return V}));var l=Number.isNaN||function(e){return"number"==typeof e&&e!=e};function u(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(r=e[n],o=t[n],!(r===o||l(r)&&l(o)))return!1;var r,o;return!0}var s=function(e,t){var n;void 0===t&&(t=u);var r,o=[],a=!1;return function(){for(var i=[],l=0;l<arguments.length;l++)i[l]=arguments[l];return a&&n===this&&t(i,o)||(r=e.apply(this,i),a=!0,n=this,o=i),r}},c=n(0);function d(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}var f="object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()};function v(e){cancelAnimationFrame(e.id)}function h(e,t){var n=f();var r={id:requestAnimationFrame((function o(){f()-n>=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var p=-1;function m(e){if(void 0===e&&(e=!1),-1===p||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),p=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return p}var g=null;function _(e){if(void 0===e&&(e=!1),null===g||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?g="positive-descending":(t.scrollLeft=1,g=0===t.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(t),g}return g}var y=function(e){var t=e.columnIndex;e.data;return e.rowIndex+":"+t};function b(e){var t,n=e.getColumnOffset,a=e.getColumnStartIndexForOffset,l=e.getColumnStopIndexForStartIndex,u=e.getColumnWidth,d=e.getEstimatedTotalHeight,f=e.getEstimatedTotalWidth,p=e.getOffsetForColumnAndAlignment,g=e.getOffsetForRowAndAlignment,b=e.getRowHeight,w=e.getRowOffset,M=e.getRowStartIndexForOffset,S=e.getRowStopIndexForStartIndex,I=e.initInstanceProps,P=e.shouldResetStyleCacheOnItemSizeChange,C=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=I(r.props,o(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:o(r),isScrolling:!1,horizontalScrollDirection:"forward",scrollLeft:"number"==typeof r.props.initialScrollLeft?r.props.initialScrollLeft:0,scrollTop:"number"==typeof r.props.initialScrollTop?r.props.initialScrollTop:0,scrollUpdateWasRequested:!1,verticalScrollDirection:"forward"},r._callOnItemsRendered=void 0,r._callOnItemsRendered=s((function(e,t,n,o,a,i,l,u){return r.props.onItemsRendered({overscanColumnStartIndex:e,overscanColumnStopIndex:t,overscanRowStartIndex:n,overscanRowStopIndex:o,visibleColumnStartIndex:a,visibleColumnStopIndex:i,visibleRowStartIndex:l,visibleRowStopIndex:u})})),r._callOnScroll=void 0,r._callOnScroll=s((function(e,t,n,o,a){return r.props.onScroll({horizontalScrollDirection:n,scrollLeft:e,scrollTop:t,verticalScrollDirection:o,scrollUpdateWasRequested:a})})),r._getItemStyle=void 0,r._getItemStyle=function(e,t){var o,a=r.props,i=a.columnWidth,l=a.direction,s=a.rowHeight,c=r._getItemStyleCache(P&&i,P&&l,P&&s),d=e+":"+t;if(c.hasOwnProperty(d))o=c[d];else{var f=n(r.props,t,r._instanceProps),v="rtl"===l;c[d]=o={position:"absolute",left:v?void 0:f,right:v?f:void 0,top:w(r.props,e,r._instanceProps),height:b(r.props,e,r._instanceProps),width:u(r.props,t,r._instanceProps)}}return o},r._getItemStyleCache=void 0,r._getItemStyleCache=s((function(e,t,n){return{}})),r._onScroll=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.clientWidth,a=t.scrollLeft,i=t.scrollTop,l=t.scrollHeight,u=t.scrollWidth;r.setState((function(e){if(e.scrollLeft===a&&e.scrollTop===i)return null;var t=r.props.direction,s=a;if("rtl"===t)switch(_()){case"negative":s=-a;break;case"positive-descending":s=u-o-a}s=Math.max(0,Math.min(s,u-o));var c=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:s,scrollTop:c,verticalScrollDirection:e.scrollTop<i?"forward":"backward",scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&v(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=h(r._resetIsScrolling,150)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1)}))},r}i(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),C(e),null};var x=t.prototype;return x.scrollTo=function(e){var t=e.scrollLeft,n=e.scrollTop;void 0!==t&&(t=Math.max(0,t)),void 0!==n&&(n=Math.max(0,n)),this.setState((function(e){return void 0===t&&(t=e.scrollLeft),void 0===n&&(n=e.scrollTop),e.scrollLeft===t&&e.scrollTop===n?null:{horizontalScrollDirection:e.scrollLeft<t?"forward":"backward",scrollLeft:t,scrollTop:n,scrollUpdateWasRequested:!0,verticalScrollDirection:e.scrollTop<n?"forward":"backward"}}),this._resetIsScrollingDebounced)},x.scrollToItem=function(e){var t=e.align,n=void 0===t?"auto":t,r=e.columnIndex,o=e.rowIndex,a=this.props,i=a.columnCount,l=a.height,u=a.rowCount,s=a.width,c=this.state,v=c.scrollLeft,h=c.scrollTop,_=m();void 0!==r&&(r=Math.max(0,Math.min(r,i-1))),void 0!==o&&(o=Math.max(0,Math.min(o,u-1)));var y=d(this.props,this._instanceProps),b=f(this.props,this._instanceProps)>s?_:0,O=y>l?_:0;this.scrollTo({scrollLeft:void 0!==r?p(this.props,r,n,v,this._instanceProps,O):v,scrollTop:void 0!==o?g(this.props,o,n,h,this._instanceProps,b):h})},x.componentDidMount=function(){var e=this.props,t=e.initialScrollLeft,n=e.initialScrollTop;if(null!=this._outerRef){var r=this._outerRef;"number"==typeof t&&(r.scrollLeft=t),"number"==typeof n&&(r.scrollTop=n)}this._callPropsCallbacks()},x.componentDidUpdate=function(){var e=this.props.direction,t=this.state,n=t.scrollLeft,r=t.scrollTop;if(t.scrollUpdateWasRequested&&null!=this._outerRef){var o=this._outerRef;if("rtl"===e)switch(_()){case"negative":o.scrollLeft=-n;break;case"positive-ascending":o.scrollLeft=n;break;default:var a=o.clientWidth,i=o.scrollWidth;o.scrollLeft=i-a-n}else o.scrollLeft=Math.max(0,n);o.scrollTop=Math.max(0,r)}this._callPropsCallbacks()},x.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&v(this._resetIsScrollingTimeoutId)},x.render=function(){var e=this.props,t=e.children,n=e.className,o=e.columnCount,a=e.direction,i=e.height,l=e.innerRef,u=e.innerElementType,s=e.innerTagName,v=e.itemData,h=e.itemKey,p=void 0===h?y:h,m=e.outerElementType,g=e.outerTagName,_=e.rowCount,b=e.style,O=e.useIsScrolling,w=e.width,M=this.state.isScrolling,S=this._getHorizontalRangeToRender(),I=S[0],P=S[1],C=this._getVerticalRangeToRender(),x=C[0],j=C[1],E=[];if(o>0&&_)for(var R=x;R<=j;R++)for(var k=I;k<=P;k++)E.push(Object(c.createElement)(t,{columnIndex:k,data:v,isScrolling:O?M:void 0,key:p({columnIndex:k,data:v,rowIndex:R}),rowIndex:R,style:this._getItemStyle(R,k)}));var D=d(this.props,this._instanceProps),z=f(this.props,this._instanceProps);return Object(c.createElement)(m||g||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:r({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},b)},Object(c.createElement)(u||s||"div",{children:E,ref:l,style:{height:D,pointerEvents:M?"none":void 0,width:z}}))},x._callPropsCallbacks=function(){var e=this.props,t=e.columnCount,n=e.onItemsRendered,r=e.onScroll,o=e.rowCount;if("function"==typeof n&&t>0&&o>0){var a=this._getHorizontalRangeToRender(),i=a[0],l=a[1],u=a[2],s=a[3],c=this._getVerticalRangeToRender(),d=c[0],f=c[1],v=c[2],h=c[3];this._callOnItemsRendered(i,l,d,f,u,s,v,h)}if("function"==typeof r){var p=this.state,m=p.horizontalScrollDirection,g=p.scrollLeft,_=p.scrollTop,y=p.scrollUpdateWasRequested,b=p.verticalScrollDirection;this._callOnScroll(g,_,m,b,y)}},x._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,i=e.rowCount,u=this.state,s=u.horizontalScrollDirection,c=u.isScrolling,d=u.scrollLeft,f=n||r||o||1;if(0===t||0===i)return[0,0,0,0];var v=a(this.props,d,this._instanceProps),h=l(this.props,v,d,this._instanceProps),p=c&&"backward"!==s?1:Math.max(1,f),m=c&&"forward"!==s?1:Math.max(1,f);return[Math.max(0,v-p),Math.max(0,Math.min(t-1,h+m)),v,h]},x._getVerticalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanCount,r=e.overscanRowCount,o=e.overscanRowsCount,a=e.rowCount,i=this.state,l=i.isScrolling,u=i.verticalScrollDirection,s=i.scrollTop,c=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var d=M(this.props,s,this._instanceProps),f=S(this.props,d,s,this._instanceProps),v=l&&"backward"!==u?1:Math.max(1,c),h=l&&"forward"!==u?1:Math.max(1,c);return[Math.max(0,d-v),Math.max(0,Math.min(a-1,f+h)),d,f]},t}(c.PureComponent)).defaultProps={direction:"ltr",itemData:void 0,useIsScrolling:!1},t}var O=function(e,t){e.children,e.direction,e.height,e.innerTagName,e.outerTagName,e.overscanColumnsCount,e.overscanCount,e.overscanRowsCount,e.width,t.instance},w=function(e,t){var n=e.rowCount,r=t.rowMetadataMap,o=t.estimatedRowHeight,a=t.lastMeasuredRowIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},M=function(e,t){var n=e.columnCount,r=t.columnMetadataMap,o=t.estimatedColumnWidth,a=t.lastMeasuredColumnIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},S=function(e,t,n,r){var o,a,i;if("column"===e?(o=r.columnMetadataMap,a=t.columnWidth,i=r.lastMeasuredColumnIndex):(o=r.rowMetadataMap,a=t.rowHeight,i=r.lastMeasuredRowIndex),n>i){var l=0;if(i>=0){var u=o[i];l=u.offset+u.size}for(var s=i+1;s<=n;s++){var c=a(s);o[s]={offset:l,size:c},l+=c}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},I=function(e,t,n,r){var o,a;return"column"===e?(o=n.columnMetadataMap,a=n.lastMeasuredColumnIndex):(o=n.rowMetadataMap,a=n.lastMeasuredRowIndex),(a>0?o[a].offset:0)>=r?P(e,t,n,a,0,r):C(e,t,n,Math.max(0,a),r)},P=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=S(e,t,i,n).offset;if(l===a)return i;l<a?o=i+1:l>a&&(r=i-1)}return o>0?o-1:0},C=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&S(e,t,r,n).offset<o;)r+=i,i*=2;return P(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},x=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=S(e,t,n,a),s="column"===e?M(t,a):w(t,a),c=Math.max(0,Math.min(s-l,u.offset)),d=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=d-l&&o<=c+l?"auto":"center"),r){case"start":return c;case"end":return d;case"center":return Math.round(d+(c-d)/2);case"auto":default:return o>=d&&o<=c?o:d>c||o<d?d:c}},j=b({getColumnOffset:function(e,t,n){return S("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return I("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=S("column",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=S("column",e,s,r).size;return s},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:M,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return x("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return x("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return S("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return I("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=S("row",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=S("row",e,s,r).size;return s},initInstanceProps:function(e,t){var n=e,r={columnMetadataMap:{},estimatedColumnWidth:n.estimatedColumnWidth||50,estimatedRowHeight:n.estimatedRowHeight||50,lastMeasuredColumnIndex:-1,lastMeasuredRowIndex:-1,rowMetadataMap:{}};return t.resetAfterColumnIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({columnIndex:e,shouldForceUpdate:n})},t.resetAfterRowIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({rowIndex:e,shouldForceUpdate:n})},t.resetAfterIndices=function(e){var n=e.columnIndex,o=e.rowIndex,a=e.shouldForceUpdate,i=void 0===a||a;"number"==typeof n&&(r.lastMeasuredColumnIndex=Math.min(r.lastMeasuredColumnIndex,n-1)),"number"==typeof o&&(r.lastMeasuredRowIndex=Math.min(r.lastMeasuredRowIndex,o-1)),t._getItemStyleCache(-1),i&&t.forceUpdate()},r},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.columnWidth,e.rowHeight}}),E=function(e,t){return e};function R(e){var t,n=e.getItemOffset,a=e.getEstimatedTotalSize,l=e.getItemSize,u=e.getOffsetForIndexAndAlignment,d=e.getStartIndexForOffset,f=e.getStopIndexForStartIndex,p=e.initInstanceProps,g=e.shouldResetStyleCacheOnItemSizeChange,y=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=p(r.props,o(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:o(r),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"==typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=s((function(e,t,n,o){return r.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=s((function(e,t,n){return r.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(e){var t,o=r.props,a=o.direction,i=o.itemSize,u=o.layout,s=r._getItemStyleCache(g&&i,g&&u,g&&a);if(s.hasOwnProperty(e))t=s[e];else{var c=n(r.props,e,r._instanceProps),d=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,v="rtl"===a,h=f?c:0;s[e]=t={position:"absolute",left:v?void 0:h,right:v?h:void 0,top:f?0:c,height:f?"100%":d,width:f?d:"100%"}}return t},r._getItemStyleCache=void 0,r._getItemStyleCache=s((function(e,t,n){return{}})),r._onScrollHorizontal=function(e){var t=e.currentTarget,n=t.clientWidth,o=t.scrollLeft,a=t.scrollWidth;r.setState((function(e){if(e.scrollOffset===o)return null;var t=r.props.direction,i=o;if("rtl"===t)switch(_()){case"negative":i=-o;break;case"positive-descending":i=a-n-o}return i=Math.max(0,Math.min(i,a-n)),{isScrolling:!0,scrollDirection:e.scrollOffset<o?"forward":"backward",scrollOffset:i,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._onScrollVertical=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.scrollHeight,a=t.scrollTop;r.setState((function(e){if(e.scrollOffset===a)return null;var t=Math.max(0,Math.min(a,o-n));return{isScrolling:!0,scrollDirection:e.scrollOffset<t?"forward":"backward",scrollOffset:t,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&v(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=h(r._resetIsScrolling,150)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1,null)}))},r}i(t,e),t.getDerivedStateFromProps=function(e,t){return k(e,t),y(e),null};var b=t.prototype;return b.scrollTo=function(e){e=Math.max(0,e),this.setState((function(t){return t.scrollOffset===e?null:{scrollDirection:t.scrollOffset<e?"forward":"backward",scrollOffset:e,scrollUpdateWasRequested:!0}}),this._resetIsScrollingDebounced)},b.scrollToItem=function(e,t){void 0===t&&(t="auto");var n=this.props,r=n.itemCount,o=n.layout,a=this.state.scrollOffset;e=Math.max(0,Math.min(e,r-1));var i=0;if(this._outerRef){var l=this._outerRef;i="vertical"===o?l.scrollWidth>l.clientWidth?m():0:l.scrollHeight>l.clientHeight?m():0}this.scrollTo(u(this.props,e,t,a,this._instanceProps,i))},b.componentDidMount=function(){var e=this.props,t=e.direction,n=e.initialScrollOffset,r=e.layout;if("number"==typeof n&&null!=this._outerRef){var o=this._outerRef;"horizontal"===t||"horizontal"===r?o.scrollLeft=n:o.scrollTop=n}this._callPropsCallbacks()},b.componentDidUpdate=function(){var e=this.props,t=e.direction,n=e.layout,r=this.state,o=r.scrollOffset;if(r.scrollUpdateWasRequested&&null!=this._outerRef){var a=this._outerRef;if("horizontal"===t||"horizontal"===n)if("rtl"===t)switch(_()){case"negative":a.scrollLeft=-o;break;case"positive-ascending":a.scrollLeft=o;break;default:var i=a.clientWidth,l=a.scrollWidth;a.scrollLeft=l-i-o}else a.scrollLeft=o;else a.scrollTop=o}this._callPropsCallbacks()},b.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&v(this._resetIsScrollingTimeoutId)},b.render=function(){var e=this.props,t=e.children,n=e.className,o=e.direction,i=e.height,l=e.innerRef,u=e.innerElementType,s=e.innerTagName,d=e.itemCount,f=e.itemData,v=e.itemKey,h=void 0===v?E:v,p=e.layout,m=e.outerElementType,g=e.outerTagName,_=e.style,y=e.useIsScrolling,b=e.width,O=this.state.isScrolling,w="horizontal"===o||"horizontal"===p,M=w?this._onScrollHorizontal:this._onScrollVertical,S=this._getRangeToRender(),I=S[0],P=S[1],C=[];if(d>0)for(var x=I;x<=P;x++)C.push(Object(c.createElement)(t,{data:f,key:h(x,f),index:x,isScrolling:y?O:void 0,style:this._getItemStyle(x)}));var j=a(this.props,this._instanceProps);return Object(c.createElement)(m||g||"div",{className:n,onScroll:M,ref:this._outerRefSetter,style:r({position:"relative",height:i,width:b,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},_)},Object(c.createElement)(u||s||"div",{children:C,ref:l,style:{height:w?"100%":j,pointerEvents:O?"none":void 0,width:w?j:"100%"}}))},b._callPropsCallbacks=function(){if("function"==typeof this.props.onItemsRendered&&this.props.itemCount>0){var e=this._getRangeToRender(),t=e[0],n=e[1],r=e[2],o=e[3];this._callOnItemsRendered(t,n,r,o)}if("function"==typeof this.props.onScroll){var a=this.state,i=a.scrollDirection,l=a.scrollOffset,u=a.scrollUpdateWasRequested;this._callOnScroll(i,l,u)}},b._getRangeToRender=function(){var e=this.props,t=e.itemCount,n=e.overscanCount,r=this.state,o=r.isScrolling,a=r.scrollDirection,i=r.scrollOffset;if(0===t)return[0,0,0,0];var l=d(this.props,i,this._instanceProps),u=f(this.props,l,i,this._instanceProps),s=o&&"backward"!==a?1:Math.max(1,n),c=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-s),Math.max(0,Math.min(t-1,u+c)),l,u]},t}(c.PureComponent)).defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var k=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},D=function(e,t,n){var r=e.itemSize,o=n.itemMetadataMap,a=n.lastMeasuredIndex;if(t>a){var i=0;if(a>=0){var l=o[a];i=l.offset+l.size}for(var u=a+1;u<=t;u++){var s=r(u);o[u]={offset:i,size:s},i+=s}n.lastMeasuredIndex=t}return o[t]},z=function(e,t,n,r,o){for(;r<=n;){var a=r+Math.floor((n-r)/2),i=D(e,a,t).offset;if(i===o)return a;i<o?r=a+1:i>o&&(n=a-1)}return r>0?r-1:0},T=function(e,t,n,r){for(var o=e.itemCount,a=1;n<o&&D(e,n,t).offset<r;)n+=a,a*=2;return z(e,t,Math.min(n,o-1),Math.floor(n/2),r)},L=function(e,t){var n=e.itemCount,r=t.itemMetadataMap,o=t.estimatedItemSize,a=t.lastMeasuredIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},A=R({getItemOffset:function(e,t,n){return D(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:L,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,s=e.width,c="horizontal"===i||"horizontal"===u?s:l,d=D(e,t,o),f=L(e,o),v=Math.max(0,Math.min(f-c,d.offset)),h=Math.max(0,d.offset-c+d.size+a);switch("smart"===n&&(n=r>=h-c&&r<=v+c?"auto":"center"),n){case"start":return v;case"end":return h;case"center":return Math.round(h+(v-h)/2);case"auto":default:return r>=h&&r<=v?r:r<h?h:v}},getStartIndexForOffset:function(e,t,n){return function(e,t,n){var r=t.itemMetadataMap,o=t.lastMeasuredIndex;return(o>0?r[o].offset:0)>=n?z(e,t,o,0,n):T(e,t,Math.max(0,o),n)}(e,n,t)},getStopIndexForStartIndex:function(e,t,n,r){for(var o=e.direction,a=e.height,i=e.itemCount,l=e.layout,u=e.width,s="horizontal"===o||"horizontal"===l?u:a,c=D(e,t,r),d=n+s,f=c.offset+c.size,v=t;v<i-1&&f<d;)v++,f+=D(e,v,r).size;return v},initInstanceProps:function(e,t){var n={itemMetadataMap:{},estimatedItemSize:e.estimatedItemSize||50,lastMeasuredIndex:-1};return t.resetAfterIndex=function(e,r){void 0===r&&(r=!0),n.lastMeasuredIndex=Math.min(n.lastMeasuredIndex,e-1),t._getItemStyleCache(-1),r&&t.forceUpdate()},n},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.itemSize}}),N=b({getColumnOffset:function(e,t){return t*e.columnWidth},getColumnWidth:function(e,t){return e.columnWidth},getRowOffset:function(e,t){return t*e.rowHeight},getRowHeight:function(e,t){return e.rowHeight},getEstimatedTotalHeight:function(e){var t=e.rowCount;return e.rowHeight*t},getEstimatedTotalWidth:function(e){var t=e.columnCount;return e.columnWidth*t},getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){var i=e.columnCount,l=e.columnWidth,u=e.width,s=Math.max(0,i*l-u),c=Math.min(s,t*l),d=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=d-u&&r<=c+u?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(u/2)?0:f>s+Math.floor(u/2)?s:f;case"auto":default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,s=Math.max(0,u*i-l),c=Math.min(s,t*i),d=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=d-l&&r<=c+l?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(l/2)?0:f>s+Math.floor(l/2)?s:f;case"auto":default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getColumnStartIndexForOffset:function(e,t){var n=e.columnWidth,r=e.columnCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getColumnStopIndexForStartIndex:function(e,t,n){var r=e.columnWidth,o=e.columnCount,a=e.width,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},getRowStartIndexForOffset:function(e,t){var n=e.rowHeight,r=e.rowCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getRowStopIndexForStartIndex:function(e,t,n){var r=e.rowHeight,o=e.rowCount,a=e.height,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.columnWidth,e.rowHeight}}),B=R({getItemOffset:function(e,t){return t*e.itemSize},getItemSize:function(e,t){return e.itemSize},getEstimatedTotalSize:function(e){var t=e.itemCount;return e.itemSize*t},getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.itemCount,s=e.itemSize,c=e.layout,d=e.width,f="horizontal"===i||"horizontal"===c?d:l,v=Math.max(0,u*s-f),h=Math.min(v,t*s),p=Math.max(0,t*s-f+s+a);switch("smart"===n&&(n=r>=p-f&&r<=h+f?"auto":"center"),n){case"start":return h;case"end":return p;case"center":var m=Math.round(p+(h-p)/2);return m<Math.ceil(f/2)?0:m>v+Math.floor(f/2)?v:m;case"auto":default:return r>=p&&r<=h?r:r<p?p:h}},getStartIndexForOffset:function(e,t){var n=e.itemCount,r=e.itemSize;return Math.max(0,Math.min(n-1,Math.floor(t/r)))},getStopIndexForStartIndex:function(e,t,n){var r=e.direction,o=e.height,a=e.itemCount,i=e.itemSize,l=e.layout,u=e.width,s=t*i,c="horizontal"===r||"horizontal"===l?u:o,d=Math.ceil((c+n-s)/i);return Math.max(0,Math.min(a-1,t+d-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.itemSize}});function H(e,t){for(var n in e)if(!(n in t))return!0;for(var r in t)if(e[r]!==t[r])return!0;return!1}var F=["style"],Q=["style"];function W(e,t){var n=e.style,r=d(e,F),o=t.style,a=d(t,Q);return!H(n,o)&&!H(r,a)}function V(e,t){return!W(this.props,e)||H(this.state,t)}},function(e,t,n){"use strict";n.r(t),n.d(t,"isHotkeyPressed",(function(){return R})),n.d(t,"useHotkeys",(function(){return E})),n.d(t,"useIsHotkeyPressed",(function(){return x}));
|
|
11
11
|
/**!
|
|
12
12
|
* hotkeys-js v3.9.3
|
|
13
13
|
* A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
|
|
@@ -16,5 +16,5 @@
|
|
|
16
16
|
* http://jaywcjlove.github.io/hotkeys
|
|
17
17
|
* Licensed under the MIT license
|
|
18
18
|
*/
|
|
19
|
-
var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function
|
|
20
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/OWE0ZSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi5tb2R1bGUuY3NzP2NkNDYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3M/MzJhYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay5tb2R1bGUuY3NzPzA4NDEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC5tb2R1bGUuY3NzPzFmMTEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gubW9kdWxlLmNzcz80ZWViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gubW9kdWxlLmNzcz8yM2ViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ZTE4OCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLm1vZHVsZS5jc3M/MGVkZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzPzI3YjMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vRHJvcGRvd24udHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi5tb2R1bGUuY3NzPzliOTMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLm1vZHVsZS5jc3M/M2ViOSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIubW9kdWxlLmNzcz85NmQyIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS5tb2R1bGUuY3NzPzM3MDkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS5tb2R1bGUuY3NzPzUwNDkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUxpbmtJdGVtLm1vZHVsZS5jc3M/MDQyNyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC5tb2R1bGUuY3NzPzEyOTkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzPzdhYmYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL0ljb25CdXR0b24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi5tb2R1bGUuY3NzP2QyOGQiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3M/Y2MzNyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSW1hZ2UvSW1hZ2UubW9kdWxlLmNzcz85NWE3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy5tb2R1bGUuY3NzPzQ2NGUiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0xpbmtJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5Lm1vZHVsZS5jc3M/MjFjNSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC5tb2R1bGUuY3NzP2NkMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Lm1vZHVsZS5jc3M/Y2Y2MSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3RDb250YWluZXIubW9kdWxlLmNzcz85YTM2Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9WaWRlby9WaWRlby5tb2R1bGUuY3NzP2UyMjMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL051bXBhZC9OdW1wYWQudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL051bXBhZC9OdW1wYWQubW9kdWxlLmNzcz80N2YwIiwid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZU91dHNpZGVDbGljay91c2VPdXRzaWRlQ2xpY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VQcm9taXNlL3VzZVByb21pc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N3ci9faW50ZXJuYWwvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N3ci9jb3JlL2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVNXUkhvb2tzQ29uZmlnL3VzZVNXUkhvb2tzQ29uZmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVRvZ2dsZS91c2VUb2dnbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hvdGtleXMtanMvZGlzdC9ob3RrZXlzLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaG90a2V5cy1ob29rL2Rpc3QvcmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInJlcXVpcmUiLCJpc0FycmF5IiwiQXJyYXkiLCJjYyIsIm9iaiIsIm91dCIsInRtcCIsImsiLCJsZW5ndGgiLCJkZWZhdWx0IiwiZGlzcGxheSIsImlzRGlzYWJsZWQiLCJoYW5kbGVDbGljayIsIkJ1dHRvbiIsImFsaWduIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwic2l6ZSIsInN0cmV0Y2hIb3Jpem9udGFsbHkiLCJjbGFzc05hbWUiLCJjb250YWluZXIiLCJJY29uIiwiYWx0Iiwic3JjIiwiUGxhY2VtZW50Q29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJ1bmRlZmluZWQiLCJmb3J3YXJkUmVmIiwicmVmIiwiY2hpbGRyZW4iLCJidXR0b24iLCJwbGFjZW1lbnQiLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJQcm92aWRlciIsInVzZU1lbW8iLCJtZW51Q29udGFpbmVyIiwib25Qb2ludGVyRG93biIsImNvbnRhaW5lclJlZiIsImludmVydGVkIiwicm91bmRlZCIsIm5vU2hhZG93Iiwibm9QYWRkaW5nIiwibm9Cb3JkZXIiLCJ0cmFuc3BhcmVudCIsInN0cmV0Y2hWZXJ0aWNhbGx5IiwiYXV0b0ZvY3VzIiwib2Zmc2V0U2lkZXMiLCJ0eXBlIiwibGVmdE9mZnNldCIsImluY2x1ZGVzIiwicmlnaHRPZmZzZXQiLCJyb2xlIiwiY29udGVudCIsImJ1dHRvbkJhZGdlIiwiQ29tcG9uZW50IiwicHJvcHMiLCJsYWJlbCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsInVzZUNhbGxiYWNrIiwiZSIsInRhcmdldCIsIkxhYmVsIiwiaW5wdXRSZWYiLCJjaGVja2JveCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImRpcmVjdGlvbiIsImNhblRvZ2dsZSIsImNvbG9yUGlja2VyIiwibWFwIiwiY29sb3IiLCJDb2xvclN3YXRjaCIsImlzU2VsZWN0ZWQiLCJjb2xvclN3YXRjaCIsInNlbGVjdGVkIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwidXNlSG90a2V5cyIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm92ZXJsYXkiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiRHJvcGRvd24iLCJDbGlja2FibGUiLCJpdGVtQm9keVJlbmRlcmVyIiwiaXRlbXMiLCJoYW5kbGVTZWxlY3QiLCJyZW5kZXJDbGlja2FibGUiLCJzZWxlY3RlZEl0ZW0iLCJ1c2VTdGF0ZSIsInNldElzT3BlbiIsInVzZU91dHNpZGVDbGljayIsInRvZ2dsZUlzT3BlbiIsIk1lbnVDb250YWluZXIiLCJNZW51IiwiaXRlbSIsIk1lbnVJdGVtIiwiaXNBY3RpdmUiLCJpZCIsImlzIiwiYSIsImIiLCJ1c2VFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VEZWJ1Z1ZhbHVlIiwiZ2V0U25hcHNob3QiLCJmIiwidSIsIndpbmRvdyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImluc3QiLCJnIiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJpY29uIiwiY3Jvc3NPcmlnaW4iLCJmb290ZXIiLCJzbWFydExheW91dCIsIm1lbnVQbGFjZW1lbnQiLCJ1c2VDb250ZXh0IiwiaW5uZXJSZWYiLCJ1c2VSZWYiLCJFcnJvciIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJib3R0b20iLCJkaXN0YW5jZVRvRWRnZSIsImlubmVySGVpZ2h0IiwidWxFbCIsInF1ZXJ5U2VsZWN0b3IiLCJjaGlsZEVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsIm5ld0hlaWdodCIsImNsaWVudEhlaWdodCIsIm9mZnNldCIsImdldENvbXB1dGVkU3R5bGUiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJtZW51Iiwib3BlbiIsIm1lbnVJdGVtIiwiYWN0aXZlIiwibWVudUxpbmtJdGVtIiwiYWNjZXB0IiwibXVsdGlwbGUiLCJpbnB1dCIsImxheW91dCIsInBhcmVudCIsImhvcml6b250YWxQbGFjZW1lbnQiLCJ2ZXJ0aWNhbFBsYWNlbWVudCIsImZpeGVkIiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0Iiwic3JjV2lkdGgiLCJzcmNIZWlnaHQiLCJkZWNvZGluZyIsImxvYWRpbmciLCJpbWFnZUVsZW1lbnQiLCJpbWFnZSIsIndpZHRoIiwiaGVpZ2h0IiwiaGFzT3ZlcmxheSIsImhlYWRlckFjdGlvbnMiLCJoZWFkZXJMYWJlbCIsInRleHQiLCJsaXN0IiwibGlzdFZpZXdJdGVtIiwiQnV0dG9uTGluayIsImFzIiwiaXNGaXhlZCIsIm9uQmx1ciIsIm9uS2V5RG93biIsInBhdHRlcm4iLCJpbnB1dEVsZW1lbnQiLCJ0ZXh0SW5wdXQiLCJ0b2FzdCIsInRvYXN0Q29udGFpbmVyIiwicG9zdGVyIiwibXV0ZWQiLCJsb29wIiwiYXV0b1BsYXkiLCJ2aWRlbyIsInBsYXlzSW5saW5lIiwiTnVtcGFkIiwiYXBwZW5kRGlnaXQiLCJudW1iZXIiLCJkaWdpdCIsInBvcERpZ2l0IiwiTWF0aCIsImZsb29yIiwiZXZlbnREaWdpdEtleXMiLCJjcmVhdGVFbWl0TnVtYmVySGFuZGxlciIsIm5ld051bWJlciIsInN0b3BQcm9wYWdhdGlvbiIsIk51bXBhZEtleXMiLCJmaWxsIiwiXyIsImluZGV4IiwibnVtcGFkVmFsdWUiLCJudW1wYWQiLCJ0YWJJbmRleCIsInBhcnNlSW50IiwibnVtYmVycyIsIm9wdGlvbnMiLCJjYXB0dXJlIiwiY2FsbGJhY2siLCJldmVudCIsImNvbnRhaW5zIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiX19nZW5lcmF0b3IiLCJib2R5IiwieSIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsIml0ZXJhdG9yIiwidGhpcyIsInYiLCJvcCIsIlR5cGVFcnJvciIsInBvcCIsInB1c2giLCJfX3JlYWQiLCJhciIsImVycm9yIiwidXNlUHJvbWlzZSIsIl90aGlzIiwiX2EiLCJkYXRhIiwiaXNQZW5kaW5nIiwiaXNSZXNvbHZlZCIsImlzUmVqZWN0ZWQiLCJpc1NldHRsZWQiLCJzZXRSZXN1bHQiLCJoYXNVbm1vdW50ZWQiLCJwcm9taXNlIiwiZXJyb3JfMSIsIlNXUkdsb2JhbFN0YXRlIiwiV2Vha01hcCIsIkVNUFRZX0NBQ0hFIiwibm9vcCIsIlVOREVGSU5FRCIsIk9CSkVDVCIsImlzVW5kZWZpbmVkIiwiaXNGdW5jdGlvbiIsIm1lcmdlT2JqZWN0cyIsImlzV2luZG93RGVmaW5lZCIsImlzRG9jdW1lbnREZWZpbmVkIiwiY3JlYXRlQ2FjaGVIZWxwZXIiLCJjYWNoZSIsInN0YXRlIiwiaW5mbyIsInByZXYiLCJ0YWJsZSIsImNvdW50ZXIiLCJzdGFibGVIYXNoIiwiYXJnIiwiY29uc3RydWN0b3IiLCJpc0RhdGUiLCJEYXRlIiwiUmVnRXhwIiwidG9KU09OIiwidG9TdHJpbmciLCJKU09OIiwic3RyaW5naWZ5Iiwic2V0Iiwia2V5cyIsInNvcnQiLCJvbmxpbmUiLCJvbldpbmRvd0V2ZW50Iiwib2ZmV2luZG93RXZlbnQiLCJwcmVzZXQiLCJpc09ubGluZSIsImlzVmlzaWJsZSIsInZpc2liaWxpdHlTdGF0ZSIsImRlZmF1bHRDb25maWdPcHRpb25zIiwiaW5pdEZvY3VzIiwiaW5pdFJlY29ubmVjdCIsIm9uT25saW5lIiwib25PZmZsaW5lIiwiSVNfUkVBQ1RfTEVHQUNZIiwidXNlSWQiLCJJU19TRVJWRVIiLCJyQUYiLCJzZXRUaW1lb3V0IiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsIm5hdmlnYXRvckNvbm5lY3Rpb24iLCJuYXZpZ2F0b3IiLCJjb25uZWN0aW9uIiwic2xvd0Nvbm5lY3Rpb24iLCJlZmZlY3RpdmVUeXBlIiwic2F2ZURhdGEiLCJzZXJpYWxpemUiLCJlcnIiLCJhcmdzIiwiX190aW1lc3RhbXAiLCJnZXRUaW1lc3RhbXAiLCJjb25zdGFudHMiLCJhc3luYyIsImludGVybmFsTXV0YXRlIiwiX2tleSIsIl9kYXRhIiwiX29wdHMiLCJwb3B1bGF0ZUNhY2hlIiwidGhyb3dPbkVycm9yIiwicmV2YWxpZGF0ZSIsInJvbGxiYWNrT25FcnJvck9wdGlvbiIsInJvbGxiYWNrT25FcnJvciIsIm9wdGltaXN0aWNEYXRhIiwia2V5RmlsdGVyIiwibWF0Y2hlZEtleXMiLCJpdCIsImtleUl0Iiwic3RhcnRzV2l0aCIsIl9rIiwiYWxsIiwibXV0YXRlQnlLZXkiLCJFVkVOVF9SRVZBTElEQVRPUlMiLCJNVVRBVElPTiIsIkZFVENIIiwicmV2YWxpZGF0b3JzIiwic3RhcnRSZXZhbGlkYXRlIiwiYmVmb3JlTXV0YXRpb25UcyIsImhhc09wdGltaXN0aWNEYXRhIiwiZGlzcGxheWVkRGF0YSIsImN1cnJlbnREYXRhIiwiX2MiLCJjb21taXR0ZWREYXRhIiwiY2F0Y2giLCJyZXMiLCJyZXZhbGlkYXRlQWxsS2V5cyIsImluaXRDYWNoZSIsInByb3ZpZGVyIiwiaGFzIiwib3B0cyIsIm11dGF0ZSIsInVubW91bnQiLCJzdWJzY3JpcHRpb25zIiwic3Vic2NyaWJlIiwic3VicyIsInNwbGljZSIsImluZGV4T2YiLCJzZXR0ZXIiLCJpbml0UHJvdmlkZXIiLCJyZWxlYXNlRm9jdXMiLCJyZWxlYXNlUmVjb25uZWN0IiwiZGVsZXRlIiwiTWFwIiwiZGVmYXVsdENvbmZpZyIsIm9uTG9hZGluZ1Nsb3ciLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwib25FcnJvclJldHJ5IiwiX18iLCJjb25maWciLCJtYXhSZXRyeUNvdW50IiwiZXJyb3JSZXRyeUNvdW50IiwiY3VycmVudFJldHJ5Q291bnQiLCJyZXRyeUNvdW50IiwidGltZW91dCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIm1lcmdlQ29uZmlncyIsInVzZSIsInUxIiwiZjEiLCJ1MiIsImYyIiwiY29uY2F0IiwiU1dSQ29uZmlnQ29udGV4dCIsImVuYWJsZURldnRvb2xzIiwiX19TV1JfREVWVE9PTFNfVVNFX18iLCJub3JtYWxpemUiLCJ1c2VTV1JDb25maWciLCJCVUlMVF9JTl9NSURETEVXQVJFIiwidXNlU1dSTmV4dCIsImtleV8iLCJmZXRjaGVyXyIsIlBSRUxPQUQiLCJyZXEiLCJfX1NXUl9ERVZUT09MU19SRUFDVF9fIiwiV0lUSF9ERURVUEUiLCJkZWR1cGUiLCJwYXJlbnRDb25maWciLCJpc0Z1bmN0aW9uYWxDb25maWciLCJleHRlbmRlZENvbmZpZyIsImNhY2hlQ29udGV4dCIsImhvb2siLCJmZXRjaGVyIiwic3VzcGVuc2UiLCJmYWxsYmFja0RhdGEiLCJyZXZhbGlkYXRlT25Nb3VudCIsInJlZnJlc2hJbnRlcnZhbCIsInJlZnJlc2hXaGVuSGlkZGVuIiwicmVmcmVzaFdoZW5PZmZsaW5lIiwia2VlcFByZXZpb3VzRGF0YSIsImZuQXJnIiwiaW5pdGlhbE1vdW50ZWRSZWYiLCJ1bm1vdW50ZWRSZWYiLCJrZXlSZWYiLCJmZXRjaGVyUmVmIiwiY29uZmlnUmVmIiwiZ2V0Q29uZmlnIiwiZ2V0Q2FjaGUiLCJzZXRDYWNoZSIsInN1YnNjcmliZUNhY2hlIiwic3RhdGVEZXBlbmRlbmNpZXMiLCJpc0VxdWFsIiwiZXF1YWwiLCJyZXR1cm5lZERhdGEiLCJzaG91bGRTdGFydFJlcXVlc3QiLCJnZXRTZWxlY3RlZENhY2hlIiwic25hcHNob3QiLCJpc1ZhbGlkYXRpbmciLCJpc0xvYWRpbmciLCJtZW1vcml6ZWRTbmFwc2hvdCIsImNhY2hlZCIsImlzSW5pdGlhbE1vdW50IiwiY2FjaGVkRGF0YSIsImxhZ2d5RGF0YVJlZiIsInNob3VsZERvSW5pdGlhbFJldmFsaWRhdGlvbiIsImRlZmF1bHRWYWxpZGF0aW5nU3RhdGUiLCJyZXZhbGlkYXRlT3B0cyIsImN1cnJlbnRGZXRjaGVyIiwic3RhcnRBdCIsInNob3VsZFN0YXJ0TmV3UmVxdWVzdCIsImNhbGxiYWNrU2FmZWd1YXJkIiwiZmluYWxTdGF0ZSIsImZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSIsImNsZWFudXBTdGF0ZSIsInJlcXVlc3RJbmZvIiwiaW5pdGlhbFN0YXRlIiwibXV0YXRpb25JbmZvIiwiY2FjaGVEYXRhIiwiY3VycmVudENvbmZpZyIsImJvdW5kTXV0YXRlIiwic29mdFJldmFsaWRhdGUiLCJuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0IiwidW5zdWJFdmVudHMiLCJjYWxsYmFja3MiLCJrZXllZFJldmFsaWRhdG9ycyIsInN1YnNjcmliZUNhbGxiYWNrIiwibm93IiwidGltZXIiLCJpbnRlcnZhbCIsImV4ZWN1dGUiLCJjbGVhclRpbWVvdXQiLCJ1c2VTV1JIb29rc0NvbmZpZyIsInN3ckNvbmZpZyIsInVzZVRvZ2dsZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJpc2ZmIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJhZGRFdmVudCIsIm1ldGhvZCIsInVzZUNhcHR1cmUiLCJhdHRhY2hFdmVudCIsImdldE1vZHMiLCJtb2RpZmllciIsIm1vZHMiLCJzbGljZSIsImdldEtleXMiLCJyZXBsYWNlIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsIl9rZXlNYXAiLCJiYWNrc3BhY2UiLCJ0YWIiLCJjbGVhciIsImVudGVyIiwicmV0dXJuIiwiZXNjIiwiZXNjYXBlIiwic3BhY2UiLCJsZWZ0IiwidXAiLCJyaWdodCIsImRvd24iLCJkZWwiLCJpbnMiLCJpbnNlcnQiLCJob21lIiwiZW5kIiwicGFnZXVwIiwicGFnZWRvd24iLCJjYXBzbG9jayIsIm51bV8wIiwibnVtXzEiLCJudW1fMiIsIm51bV8zIiwibnVtXzQiLCJudW1fNSIsIm51bV82IiwibnVtXzciLCJudW1fOCIsIm51bV85IiwibnVtX211bHRpcGx5IiwibnVtX2FkZCIsIm51bV9lbnRlciIsIm51bV9zdWJ0cmFjdCIsIm51bV9kZWNpbWFsIiwibnVtX2RpdmlkZSIsIiciLCJfbW9kaWZpZXIiLCJzaGlmdCIsIm9wdGlvbiIsImN0cmwiLCJjb250cm9sIiwiY21kIiwiY29tbWFuZCIsIm1vZGlmaWVyTWFwIiwiMTYiLCIxOCIsIjE3IiwiOTEiLCJzaGlmdEtleSIsImN0cmxLZXkiLCJhbHRLZXkiLCJtZXRhS2V5IiwiX21vZHMiLCJfaGFuZGxlcnMiLCJfZG93bktleXMiLCJ3aW5MaXN0ZW5kRm9jdXMiLCJfc2NvcGUiLCJlbGVtZW50SGFzQmluZEV2ZW50IiwiY29kZSIsIngiLCJ0b1VwcGVyQ2FzZSIsImNoYXJDb2RlQXQiLCJzZXRTY29wZSIsInNjb3BlIiwiZ2V0U2NvcGUiLCJlYWNoVW5iaW5kIiwiX3JlZiIsIl9yZWYkc3BsaXRLZXkiLCJzcGxpdEtleSIsImZvckVhY2giLCJvcmlnaW5LZXkiLCJ1bmJpbmRLZXlzIiwibGVuIiwibGFzdEtleSIsImtleUNvZGUiLCJmaWx0ZXIiLCJyZWNvcmQiLCJhMSIsImEyIiwiYXJyMSIsImFycjIiLCJpc0luZGV4IiwiY29tcGFyZUFycmF5IiwiZXZlbnRIYW5kbGVyIiwiaGFuZGxlciIsImVsZW1lbnQiLCJtb2RpZmllcnNNYXRjaCIsInNob3J0Y3V0IiwicHJldmVudERlZmF1bHQiLCJyZXR1cm5WYWx1ZSIsImNhbmNlbEJ1YmJsZSIsImRpc3BhdGNoIiwiYXN0ZXJpc2siLCJ3aGljaCIsImNoYXJDb2RlIiwiaG90a2V5cyIsImtleU5hbWUiLCJrZXlOdW0iLCJnZXRNb2RpZmllclN0YXRlIiwia2V5ZG93biIsImtleXVwIiwiX2kiLCJrZXlTaG9ydGN1dCIsIl9kb3duS2V5c0N1cnJlbnQiLCJqb2luIiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInRyaWdnZXIiLCJhcmd1bWVudHMiLCJmaW5kIiwidW5iaW5kIiwia2V5c0luZm8iLCJfbGVuIiwia2V5TWFwIiwiX2hvdGtleXMiLCJub0NvbmZsaWN0IiwiZGVlcCIsInVzZUlzSG90a2V5UHJlc3NlZCIsInRhZ0ZpbHRlciIsImVuYWJsZU9uVGFncyIsInRhcmdldFRhZ05hbWUiLCJCb29sZWFuIiwiZGVwcyIsIl9yZWYyIiwiX3JlZjIkZmlsdGVyUHJldmVudERlIiwiZmlsdGVyUHJldmVudERlZmF1bHQiLCJfcmVmMiRlbmFibGVkIiwiZW5hYmxlZCIsIl9yZWYyJGVuYWJsZU9uQ29udGVudCIsImVuYWJsZU9uQ29udGVudEVkaXRhYmxlIiwibWVtb2lzZWRDYWxsYmFjayIsImtleWJvYXJkRXZlbnQiLCJob3RrZXlzRXZlbnQiLCJfa2V5Ym9hcmRFdmVudCR0YXJnZXQiLCJhY3RpdmVFbGVtZW50IiwiaXNIb3RrZXlQcmVzc2VkIl0sIm1hcHBpbmdzIjoiNkRBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBMERmLE9BckRBRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWViLEVBQVNpQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWVi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WSxFQUFRNlksU0FBVSxHQUdwQkosRUFBUXhULEVBQU1qRixHQUFXLEdBQUl1YixHQUN0QixXQUNMLE9BQU85QyxFQUFRMEIsT0FBT2xWLEVBQU1zVyxJQVg1QjlDLEVBQVEwQixPQUFPbFYsRUFBTXNXLEtBYXRCLENBQUNBLEVBQWtCdFcsRUFBTW1XLElBQ3JCMW5CLEVBR1QsSUFBSWtvQixFQUFrQm5ELEVBQVFpQiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJ2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2Mob2JqKSB7XG4gIHZhciBvdXQgPSBcIlwiXG5cbiAgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJudW1iZXJcIikgcmV0dXJuIG9iaiB8fCBcIlwiXG5cbiAgaWYgKGlzQXJyYXkob2JqKSlcbiAgICBmb3IgKHZhciBrID0gMCwgdG1wOyBrIDwgb2JqLmxlbmd0aDsgaysrKSB7XG4gICAgICBpZiAoKHRtcCA9IGNjKG9ialtrXSkpICE9PSBcIlwiKSB7XG4gICAgICAgIG91dCArPSAob3V0ICYmIFwiIFwiKSArIHRtcFxuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspICYmIG9ialtrXSkgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsga1xuICAgIH1cblxuICByZXR1cm4gb3V0XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb24gfSBmcm9tIFwiLi9JY29uXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL0J1dHRvblwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMYWJlbCB9IGZyb20gXCIuL0xhYmVsXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9CdXR0b25MaW5rXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yU3dhdGNoIH0gZnJvbSBcIi4vQ29sb3JTd2F0Y2hcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTW9kYWwgfSBmcm9tIFwiLi9Nb2RhbFwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCB7IEl0ZW0sIFJlbmRlckRpc3BsYXlQcm9wcyB9IGZyb20gXCIuL0Ryb3Bkb3duXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vQ2xpY2thYmxlLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGljb25NZW51IGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtZG93bi5zdmdcIjtcblxuZXhwb3J0IHR5cGUgQ2xpY2thYmxlUHJvcHM8VCBleHRlbmRzIEl0ZW0+ID0gT21pdDxcbiAgUmVuZGVyRGlzcGxheVByb3BzPFQ+LFxuICBcInNlbGVjdGVkSXRlbVwiIHwgXCJ0b2dnbGVJc09wZW5cIlxuPiAmIHtcbiAgb25DbGljazogUmVuZGVyRGlzcGxheVByb3BzPFQ+W1widG9nZ2xlSXNPcGVuXCJdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENsaWNrYWJsZTxUIGV4dGVuZHMgSXRlbT4oe1xuICBkaXNwbGF5LFxuICBpc0Rpc2FibGVkLFxuICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbn06IENsaWNrYWJsZVByb3BzPFQ+KSB7XG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgYWxpZ249XCJsZWZ0XCJcbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmNvbnRhaW5lcn0+XG4gICAgICAgIHtkaXNwbGF5fVxuICAgICAgICA8SWNvbiBhbHQ9XCJEcm9wZG93blwiIHNyYz17aWNvbk1lbnV9IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dHRvbj5cbiAgKTtcbn1cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudSB9IGZyb20gXCIuL01lbnVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUNvbnRhaW5lciwgTWVudVBsYWNlbWVudCB9IGZyb20gXCIuL01lbnVDb250YWluZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUl0ZW0gfSBmcm9tIFwiLi9NZW51SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51TGlua0l0ZW0gfSBmcm9tIFwiLi9NZW51TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwge1xuICBSZWFjdE5vZGUsXG4gIFJlYWN0RWxlbWVudCxcbiAgZm9yd2FyZFJlZixcbiAgRm9yd2FyZGVkUmVmLFxuICB1c2VNZW1vLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTWVudVBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDogXCJyaWdodFwiIHwgXCJsZWZ0XCI7XG4gIHZlcnRpY2FsOiBcInRvcFwiIHwgXCJib3R0b21cIjtcbn07XG5cbnR5cGUgTWVudUNvbnRhaW5lclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBidXR0b24/OiBSZWFjdEVsZW1lbnQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBQbGFjZW1lbnRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxcbiAgTWVudUNvbnRhaW5lclByb3BzW1wicGxhY2VtZW50XCJdIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmZ1bmN0aW9uIE1lbnVDb250YWluZXIoXG4gIHtcbiAgICBjaGlsZHJlbixcbiAgICBidXR0b24sXG4gICAgY2xhc3NOYW1lLFxuICAgIHBsYWNlbWVudCA9IHsgaG9yaXpvbnRhbDogXCJsZWZ0XCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiIH0sXG4gIH06IE1lbnVDb250YWluZXJQcm9wcyxcbiAgcmVmOiBGb3J3YXJkZWRSZWY8SFRNTERpdkVsZW1lbnQ+XG4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cmVmfSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICB7YnV0dG9ufVxuICAgICAgPFBsYWNlbWVudENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3VzZU1lbW8oKCkgPT4gcGxhY2VtZW50LCBbcGxhY2VtZW50XSl9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubWVudUNvbnRhaW5lcixcbiAgICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQuaG9yaXpvbnRhbF0sXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50LnZlcnRpY2FsXSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1BsYWNlbWVudENvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcndhcmRSZWYoTWVudUNvbnRhaW5lcik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImxpc3RWaWV3SXRlbVwiOlwiVktZb050V1RadWkyQU8xSWx5Sk1Udz09XCJ9OyIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uTGlua1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9DaGVja2JveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclBpY2tlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclN3YXRjaFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GaWxlSW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGlzdFZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTWVudVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9PdmVybGF5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RleHRJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub2FzdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9WaWRlb1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9OdW1wYWRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQnV0dG9uUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PikgPT4gdm9pZDtcbiAgb25Qb2ludGVyRG93bj86IChldmVudDogUmVhY3QuUG9pbnRlckV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJsZWZ0XCIgfCBcInJpZ2h0XCI+O1xufTtcblxuZnVuY3Rpb24gQnV0dG9uKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgb25Qb2ludGVyRG93bixcbiAgY29udGFpbmVyUmVmLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlLFxufTogQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIG9uUG9pbnRlckRvd249e29uUG9pbnRlckRvd259XG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInh5bnVNdThYWlNzb25EdWtzbDZBUWc9PVwiLFwibGVmdFwiOlwiUGtwMEhoTkh0dG9XSWIyZHdwR250dz09XCIsXCJzbWFsbFwiOlwid0RPZWVKR0NabTBrMlpwTnpGYmVIZz09XCIsXCJsYXJnZVwiOlwiXzVRakJXdGw3WVh5NGVtNFgzR1BiUkE9PVwiLFwieGxhcmdlXCI6XCJrTjBMZ2E0ZkJPZ2NpZ0RxdE9EUmRnPT1cIixcImludmVydGVkXCI6XCIrNW5zVG5MbE5PWDhLRlFpVWhUMWtRPT1cIixcInJvdW5kZWRcIjpcIkJqUC1KTldKam9CZk5NTXp0bnlXT1E9PVwiLFwicmlnaHRPZmZzZXRcIjpcImxHSndOY29sOENBa25xeFkrOERmcWc9PVwiLFwibGVmdE9mZnNldFwiOlwiRVYrZzZoVUExcXY4TFE5UnFnclFSUT09XCIsXCJub1NoYWRvd1wiOlwiWjN1UExycnlxSU5mUmpacHB3VTZOUT09XCIsXCJub0JvcmRlclwiOlwiZUVnaEc2R1hCOUl6eUQzanJOWmZBQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwic3M3RGhWZ0Y1SkdzcENBU2RaVVlCZz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJpOFFQU3I0Y0hZaEo3QWl1ZStjeDBnPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJXU3hpbVVNOWt4WUdjNVZSYzBpWmxBPT1cIixcIm5vUGFkZGluZ1wiOlwiU2dYY2hqejRkSnIrdGM4eWtMbkUxQT09XCIsXCJjb250ZW50XCI6XCJ4bjh5ZmpONm1leFJYSWd5Tmhta2l3PT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25CYWRnZSB9IGZyb20gXCIuL0J1dHRvbkJhZGdlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uQmFkZ2UubW9kdWxlLmNzc1wiO1xuXG50eXBlIEJ1dHRvbkJhZGdlUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gQnV0dG9uQmFkZ2UoeyBjaGlsZHJlbiwgaW52ZXJ0ZWQgPSBmYWxzZSwgY2xhc3NOYW1lIH06IEJ1dHRvbkJhZGdlUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5idXR0b25CYWRnZSwge1tzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZH0sIGNsYXNzTmFtZV0pfT57Y2hpbGRyZW59PC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhZGdlO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJidXR0b25CYWRnZVwiOlwiUlNqYlJpWEZXQWZCemNDb2FNcFhlQT09XCIsXCJpbnZlcnRlZFwiOlwiWDRvNE9Lc1MxVDRtaUlzMENxNXgtZz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG5cbnR5cGUgQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgICAgIHNpemU/OiBTaXplO1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcbiAgICAgIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzaXplLFxuICBjb250YWluZXJSZWYsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICAuLi5wcm9wc1xufTogQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24tbGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkxpbms7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiWklyOXctLWZTaXZxV1ZHb1NwMTR0QT09XCIsXCJsZWZ0XCI6XCJyUnl1OUFWR3dYKy14alRPTVRTRTF3PT1cIixcInNtYWxsXCI6XCJfMERCaEdKdmNiakVNbFNxRW9mRi1ydz09XCIsXCJtZWRpdW1cIjpcImE2K3pjVVk2WEt5OTR6QXFVWWFFNnc9PVwiLFwibGFyZ2VcIjpcIlcrdjR2RmViUWt4dzFjZGlLWS1Ldmc9PVwiLFwieGxhcmdlXCI6XCJkWTkxRFFSWVVhV1Q0RXpPSkorR0JnPT1cIixcImludmVydGVkXCI6XCJ5cGxDcHlsTDRJZGVzK2NPcnFTaW1RPT1cIixcInJvdW5kZWRcIjpcIk1SRVkwOStkNjl2Vjg0aFpuSnVMWXc9PVwiLFwicmlnaHRPZmZzZXRcIjpcIkhzYW83bUZXM2xZVHJOaGZXdmZ4V3c9PVwiLFwibGVmdE9mZnNldFwiOlwiTVhsTDNPOEtVWWVWQVljU3NuTnM5dz09XCIsXCJub1NoYWRvd1wiOlwiSHF6NENxUWNPNHMwTVRhd3JEcjBvQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiaDFoTndjMlVsTTBDNUYteGRnYTVkdz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJUbXlxNCt1SFUrSkplWU5kQkg4TDJRPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJKenpHblR0NGFNMys5clZsTlFXaTBBPT1cIixcIm5vUGFkZGluZ1wiOlwiVXZJOFVuamM5WDB6TjJsNVcrdG1yUT09XCIsXCJub0JvcmRlclwiOlwiUXA1dUJuUWdKRm9aSGdZU2h6QVBjdz09XCIsXCJkaXNhYmxlZFwiOlwiWlhsamtZcFBXakRKTEM0QkVHTXBydz09XCIsXCJjb250ZW50XCI6XCJfMG4yTW5PZkpQbTJ3eHM0TTJuYkdIQT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9DaGVja2JveFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuXG50eXBlIENoZWNrYm94UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgY2hlY2tlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgc2l6ZT86IFNpemU7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGluZGV0ZXJtaW5hdGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG5cbn07XG5cbmZ1bmN0aW9uIENoZWNrYm94KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgY2hlY2tlZCxcbiAgZGlzYWJsZWQsXG4gIG5hbWUsXG4gIGNsYXNzTmFtZSxcbiAgaW5kZXRlcm1pbmF0ZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxufTogQ2hlY2tib3hQcm9wcykge1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQpLFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxMYWJlbCB2YWx1ZT17bGFiZWx9ID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBkYXRhLXRlc3RpZD1cImNoZWNrYm94XCJcbiAgICAgICAgcmVmPXsoaW5wdXRSZWYpID0+IHtcbiAgICAgICAgICBpZiAoaW5wdXRSZWYpIHtcbiAgICAgICAgICAgIGlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY2hlY2tib3gsIGNsYXNzTmFtZSwgc3R5bGVzW3NpemVdXSl9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAvPlxuICAgIDwvTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGFiZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIExhYmVsSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxMYWJlbEVsZW1lbnQ+O1xuICB2YWx1ZTogUmVhY3ROb2RlO1xufTtcblxuZnVuY3Rpb24gTGFiZWwoeyBjbGFzc05hbWUsIGNoaWxkcmVuLCB2YWx1ZSwgY29udGFpbmVyUmVmIH06IExhYmVsSW5wdXRQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX1cbiAgICA+XG4gICAgICB7dmFsdWV9XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWw7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiYlI3UE84eVJGdFVsTjF2c1A3ZWNSUT09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY2hlY2tib3hcIjpcIkNCUVo0UHAxY2xiKzVSOElsQ080Z1E9PVwiLFwic21hbGxcIjpcIl81amJqdXQ3R2d0N2d4ZW5qeWY5TGJRPT1cIixcIm1lZGl1bVwiOlwiaVBBT3cyWnNOSkEwbldEWHFXQzM3Zz09XCIsXCJsYXJnZVwiOlwiTEV5a1hzOW1FRVNkd282aVpvTWRVdz09XCIsXCJ4bGFyZ2VcIjpcInVxcEFDRUoxb2JBNGJSbGFlQVQyN2c9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yUGlja2VyIH0gZnJvbSBcIi4vQ29sb3JQaWNrZXJcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi4vQ29sb3JTd2F0Y2hcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JQaWNrZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xuICBjb2xvcnM6IENvbG9yW107XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGRpcmVjdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuICBvblNlbGVjdDogKGNvbG9yOiBDb2xvcikgPT4gdm9pZDtcbiAgc2VsZWN0ZWRDb2xvcj86IENvbG9yO1xuICBjYW5Ub2dnbGU/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gQ29sb3JQaWNrZXIoe1xuICBjb2xvcnMsXG4gIGNvbnRhaW5lclJlZixcbiAgb25TZWxlY3QsXG4gIHNlbGVjdGVkQ29sb3IsXG4gIGRpcmVjdGlvbiA9IFwidmVydGljYWxcIixcbiAgY2FuVG9nZ2xlID0gZmFsc2UsXG59OiBDb2xvclBpY2tlclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29sb3JQaWNrZXIsIHN0eWxlc1tkaXJlY3Rpb25dXSl9XG4gICAgPlxuICAgICAge2NvbG9ycy5tYXAoKGNvbG9yOiBDb2xvcikgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVTZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGNhblRvZ2dsZSAmJiBjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleSkge1xuICAgICAgICAgICAgb25TZWxlY3QobnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KGNvbG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Q29sb3JTd2F0Y2hcbiAgICAgICAgICAgIGtleT17Y29sb3Iua2V5fVxuICAgICAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICAgICAgaXNTZWxlY3RlZD17Y29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclBpY2tlcjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclN3YXRjaC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDb2xvciwgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIENvbG9yU3dhdGNoUHJvcHMgPSB7XG4gIGNvbG9yOiBDb2xvcjtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIENvbG9yU3dhdGNoKHtcbiAgY29sb3IsXG4gIGNvbnRhaW5lclJlZixcbiAgaXNTZWxlY3RlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgb25DbGljayxcbn06IENvbG9yU3dhdGNoUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29sb3JTd2F0Y2gsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc2VsZWN0ZWRdOiBpc1NlbGVjdGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBkYXRhLXRlc3RpZD1cImNvbG9yLXN3YXRjaFwiXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvci5oZXhDb2RlIH19XG4gICAgPlxuICAgICAge2NvbG9yLmxhYmVsICYmIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNyT25seX0+e2BTZWxlY3QgJHtjb2xvci5sYWJlbH0gY29sb3JgfTwvc3Bhbj59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yU3dhdGNoO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb2xvclN3YXRjaFwiOlwidVRmN21ZZlhlTlQ3R24wem5uUjhEUT09XCIsXCJzbWFsbFwiOlwiYUFiZXpqT213Mk55VDlSVTdQdXlPQT09XCIsXCJsYXJnZVwiOlwiUWM2U0N2cWJubmhKM3p0Z3pQWk9GQT09XCIsXCJ4bGFyZ2VcIjpcIl82b0JCWkRrUmt6Zjd0RjRiaHlEdEFBPT1cIixcInNlbGVjdGVkXCI6XCJuaWNaZmdNayt1UUZQeXBKSWtRdWJ3PT1cIixcInNyT25seVwiOlwiR0hwSEVCMVFYRHlqZVI5Vm5FZDFUZz09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JQaWNrZXJcIjpcIkRLdFA1NWJPZlVUQjFrRGEtaVVIcVE9PVwiLFwiaG9yaXpvbnRhbFwiOlwiXzM0TGo4LWItMTNDOEwwOVJzTWluZWc9PVwiLFwidmVydGljYWxcIjpcIl8xeXVnR1FzNEVrMHQzVDh0Z29LeFZRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb25maXJtYXRpb25Nb2RhbCB9IGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuLi9Nb2RhbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ29uZmlybWF0aW9uTW9kYWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBidXR0b25zTGVmdD86IFJlYWN0RWxlbWVudFtdO1xuICBidXR0b25zUmlnaHQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgaXNPcGVuOiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gQ29uZmlybWF0aW9uTW9kYWwoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGhlYWRlcixcbiAgaXNPcGVuLFxuICBidXR0b25zTGVmdCA9IFtdLFxuICBidXR0b25zUmlnaHQgPSBbXSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIGJhc2VaSW5kZXggPSAxMDE5LFxufTogQ29uZmlybWF0aW9uTW9kYWxQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgY29udGFpbmVyUmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICBub092ZXJsYXk9e25vT3ZlcmxheX1cbiAgICAgIG5vU2hhZG93PXtub1NoYWRvd31cbiAgICAgIGJhc2VaSW5kZXg9e2Jhc2VaSW5kZXh9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICAgIHshIWhlYWRlciAmJiA8aDEgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxIZWFkZXJ9PntoZWFkZXJ9PC9oMT59XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbENvbnRlbnQsXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zTGVmdH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNSaWdodH08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L01vZGFsPlxuICApO1xufVxuXG5Db25maXJtYXRpb25Nb2RhbC5kaXNwbGF5TmFtZSA9IFwiQ29uZmlybWF0aW9uTW9kYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlybWF0aW9uTW9kYWw7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VIb3RrZXlzIH0gZnJvbSBcInJlYWN0LWhvdGtleXMtaG9va1wiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01vZGFsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNb2RhbFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBpc09wZW46IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBidXR0b24/OiBSZWFjdE5vZGU7XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gTW9kYWwoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBpc09wZW4sXG4gIGJ1dHRvbixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgYmFzZVpJbmRleCA9IDEwMDksXG59OiBNb2RhbFByb3BzKSB7XG4gIHVzZUhvdGtleXMoXCJFc2NhcGVcIiwgb25DbG9zZSk7XG5cbiAgY29uc3QgaGFuZGxlT3ZlcmxheUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uQ2xvc2UoKTtcbiAgfSwgW29uQ2xvc2VdKTtcblxuICByZXR1cm4gKFxuICAgIGlzT3BlbiAmJiAoXG4gICAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9PdmVybGF5XTogbm9PdmVybGF5IH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPdmVybGF5Q2xpY2t9XG4gICAgICAgIC8+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAxIH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtidXR0b24gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDIgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtidXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJwVTZJQjJyMExwQ0ZQWGdUdk9yMmdBPT1cIixcIm5vT3ZlcmxheVwiOlwiXzVTVVI5RmgtZkhUeTRYcjZtUUMrcEE9PVwiLFwibW9kYWxcIjpcIkxDQVQ4M211WHNBR3JQVUhRMXkraFE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIldIVThRYnB6K0F2VC1ZcHVRZVVLLVE9PVwiLFwibm9TaGFkb3dcIjpcIkdpMVZUbWczR1BOeG5YOTEtbTAtNWc9PVwiLFwibW9kYWxCdXR0b25cIjpcImxmbmZIdSt4eWVFamNRYkFRd2pJVGc9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwianZLU2ktZkt1ZmNwSzllQldXRkNMZz09XCIsXCJtb2RhbEhlYWRlclwiOlwiY3gxUm9RZGdBYmVudlZYVThCN2ZTdz09XCIsXCJtb2RhbENvbnRlbnRcIjpcIlpENHYzSEUtQVlaWFYwSVRXREY3R2c9PVwiLFwibm9QYWRkaW5nXCI6XCJfMXpGRjh4cXlvNzdVeEcydjU0OUJlQT09XCIsXCJtb2RhbEJ1dHRvbnNDb250YWluZXJcIjpcIl80aFFoQ2U1VTdZQnlobmhPKy1HcWl3PT1cIixcIm1vZGFsQnV0dG9uc1wiOlwiSm9JTGJXNUZuWml4YUo3RVR2bzgrdz09XCJ9OyIsImV4cG9ydCB7XG4gIERyb3Bkb3duLFxuICBEcm9wZG93blByb3BzLFxuICBJdGVtIGFzIERyb3Bkb3duSXRlbSxcbiAgSXRlbUJvZHlSZW5kZXJlckZuIGFzIERyb3Bkb3duSXRlbUJvZHlSZW5kZXJlckZuLFxuICBSZW5kZXJDbGlja2FibGVGbiBhcyBEcm9wZG93blJlbmRlckNsaWNrYWJsZUZuLFxuICBSZW5kZXJEaXNwbGF5UHJvcHMgYXMgRHJvcGRvd25SZW5kZXJEaXNwbGF5UHJvcHMsXG59IGZyb20gXCIuL0Ryb3Bkb3duXCI7XG5leHBvcnQge1xuICBDbGlja2FibGUgYXMgRHJvcGRvd25DbGlja2FibGUsXG4gIENsaWNrYWJsZVByb3BzIGFzIERyb3Bkb3duQ2xpY2thYmxlUHJvcHNcbn0gZnJvbSBcIi4vQ2xpY2thYmxlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RDaGlsZCwgUmVhY3RFbGVtZW50LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5cbmltcG9ydCB7IENsaWNrYWJsZSB9IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuaW1wb3J0IHsgTWVudSwgTWVudUNvbnRhaW5lciwgTWVudUl0ZW0sIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi4vTWVudVwiO1xuXG5leHBvcnQgdHlwZSBJdGVtID0geyBpZDogbnVtYmVyIHwgc3RyaW5nOyBuYW1lOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyRGlzcGxheVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IFBpY2s8XG4gIERyb3Bkb3duUHJvcHM8VD4sXG4gIFwiZGlzcGxheVwiIHwgXCJzZWxlY3RlZEl0ZW1cIlxuPiAmIHsgaXNEaXNhYmxlZDogYm9vbGVhbjsgdG9nZ2xlSXNPcGVuOiAoKSA9PiB2b2lkIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckNsaWNrYWJsZUZuPFQgZXh0ZW5kcyBJdGVtPiA9IChcbiAgcHJvcHM6IFJlbmRlckRpc3BsYXlQcm9wczxUPlxuKSA9PiBSZWFjdEVsZW1lbnQ7XG5cbmV4cG9ydCB0eXBlIEl0ZW1Cb2R5UmVuZGVyZXJGbjxUIGV4dGVuZHMgSXRlbT4gPSAoc3RhdGU6IHtcbiAgaXRlbTogVDtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbn0pID0+IFJlYWN0Q2hpbGQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25Qcm9wczxUIGV4dGVuZHMgSXRlbT4ge1xuICBpdGVtQm9keVJlbmRlcmVyPzogSXRlbUJvZHlSZW5kZXJlckZuPFQ+O1xuICBpdGVtczogVFtdO1xuICBvblNlbGVjdDogKGl0ZW06IFQpID0+IHZvaWQ7XG4gIGRpc3BsYXk6IFJlYWN0Q2hpbGQ7XG4gIHJlbmRlckNsaWNrYWJsZT86IFJlbmRlckNsaWNrYWJsZUZuPFQ+O1xuICBzZWxlY3RlZEl0ZW06IFQgfCBudWxsO1xuICBwbGFjZW1lbnQ/OiBNZW51UGxhY2VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd248VCBleHRlbmRzIEl0ZW0+KHtcbiAgaXRlbUJvZHlSZW5kZXJlcixcbiAgaXRlbXMsXG4gIG9uU2VsZWN0OiBoYW5kbGVTZWxlY3QsXG4gIGRpc3BsYXksXG4gIHJlbmRlckNsaWNrYWJsZSxcbiAgc2VsZWN0ZWRJdGVtLFxuICBwbGFjZW1lbnQgPSB7IHZlcnRpY2FsOiBcImJvdHRvbVwiLCBob3Jpem9udGFsOiBcImxlZnRcIiB9XG59OiBEcm9wZG93blByb3BzPFQ+KSB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiBzZXRJc09wZW4oZmFsc2UpKTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoaXRlbTogVCkgPT4ge1xuICAgIGhhbmRsZVNlbGVjdChpdGVtKTtcbiAgICBzZXRJc09wZW4oZmFsc2UpO1xuICB9O1xuICBjb25zdCBpc0Rpc2FibGVkID0gIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgdG9nZ2xlSXNPcGVuID0gKCkgPT4gc2V0SXNPcGVuKCFpc09wZW4pO1xuXG4gIHJldHVybiAoXG4gICAgPE1lbnVDb250YWluZXJcbiAgICAgIGJ1dHRvbj17XG4gICAgICAgIHR5cGVvZiByZW5kZXJDbGlja2FibGUgPT09IFwiZnVuY3Rpb25cIiA/IChcbiAgICAgICAgICByZW5kZXJDbGlja2FibGUoe1xuICAgICAgICAgICAgZGlzcGxheSxcbiAgICAgICAgICAgIGlzRGlzYWJsZWQsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW0sXG4gICAgICAgICAgICB0b2dnbGVJc09wZW4sXG4gICAgICAgICAgfSlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Q2xpY2thYmxlXG4gICAgICAgICAgICBkaXNwbGF5PXtkaXNwbGF5fVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZUlzT3Blbn1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG4gICAgICBwbGFjZW1lbnQ9e3BsYWNlbWVudH1cbiAgICAgIHJlZj17cmVmfVxuICAgID5cbiAgICAgIDxNZW51IGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAge2l0ZW1zICYmXG4gICAgICAgICAgaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgICA8TWVudUl0ZW1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9e2l0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWR9XG4gICAgICAgICAgICAgIGtleT17aXRlbS5pZH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ2xpY2soaXRlbSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtpdGVtQm9keVJlbmRlcmVyXG4gICAgICAgICAgICAgICAgPyBpdGVtQm9keVJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogaXRlbS5pZCA9PT0gc2VsZWN0ZWRJdGVtPy5pZCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBpdGVtLm5hbWV9XG4gICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICkpfVxuICAgICAgPC9NZW51PlxuICAgIDwvTWVudUNvbnRhaW5lcj5cbiAgKTtcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBlPXJlcXVpcmUoXCJyZWFjdFwiKTtmdW5jdGlvbiBoKGEsYil7cmV0dXJuIGE9PT1iJiYoMCE9PWF8fDEvYT09PTEvYil8fGEhPT1hJiZiIT09Yn12YXIgaz1cImZ1bmN0aW9uXCI9PT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpoLGw9ZS51c2VTdGF0ZSxtPWUudXNlRWZmZWN0LG49ZS51c2VMYXlvdXRFZmZlY3QscD1lLnVzZURlYnVnVmFsdWU7ZnVuY3Rpb24gcShhLGIpe3ZhciBkPWIoKSxmPWwoe2luc3Q6e3ZhbHVlOmQsZ2V0U25hcHNob3Q6Yn19KSxjPWZbMF0uaW5zdCxnPWZbMV07bihmdW5jdGlvbigpe2MudmFsdWU9ZDtjLmdldFNuYXBzaG90PWI7cihjKSYmZyh7aW5zdDpjfSl9LFthLGQsYl0pO20oZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KTtyZXR1cm4gYShmdW5jdGlvbigpe3IoYykmJmcoe2luc3Q6Y30pfSl9LFthXSk7cChkKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIHIoYSl7dmFyIGI9YS5nZXRTbmFwc2hvdDthPWEudmFsdWU7dHJ5e3ZhciBkPWIoKTtyZXR1cm4hayhhLGQpfWNhdGNoKGYpe3JldHVybiEwfX1mdW5jdGlvbiB0KGEsYil7cmV0dXJuIGIoKX12YXIgdT1cInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvd3x8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnR8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/dDpxO2V4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmU9dm9pZCAwIT09ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZT9lLnVzZVN5bmNFeHRlcm5hbFN0b3JlOnU7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb24ubW9kdWxlLmNzc1wiO1xuXG50eXBlIEljb25Qcm9wcyA9IHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEltYWdlRWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNpemU/OiBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiIHwgXCJ4bGFyZ2VcIjtcbn07XG5cbmZ1bmN0aW9uIEljb24oe1xuICBzcmMsXG4gIGFsdCxcbiAgY29udGFpbmVyUmVmLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbn06IEljb25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxpbWdcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5pY29uLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHsgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkIH0sXG4gICAgICBdKX1cbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaWNvblwiXG4gICAgICBhbHQ9e2FsdH1cbiAgICAgIHNyYz17c3JjfVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImljb25cIjpcIllBMklIUUQ0b3BwT2lvWklDSHd6d3c9PVwiLFwic21hbGxcIjpcInFkenMyRU1tQmRiME16TlMwaURoTUE9PVwiLFwibWVkaXVtXCI6XCJJNmVFR0lCSzU5T2tkcHdVb3VhYXVRPT1cIixcImxhcmdlXCI6XCJfMmJpNklFWWhkTWJQZ1BKZndvUGp1QT09XCIsXCJ4bGFyZ2VcIjpcImNra3I0WkZPVkd1Q040RWpQTXFlR0E9PVwiLFwiaW52ZXJ0ZWRcIjpcImVtNXJMNG5BSDFJd2YzTUhlSWVQbWc9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwidzBDcGFzall5TFItaTJQTkluOUVzZz09XCJ9OyIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNSAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNCA1TDcuNSAxMkwxIDUnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWZPYmplY3QsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlUmVmLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgUGxhY2VtZW50Q29udGV4dCB9IGZyb20gXCIuL01lbnVDb250YWluZXJcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlzT3Blbj86IGJvb2xlYW47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgZm9vdGVyPzogUmVhY3ROb2RlO1xuICBzbWFydExheW91dD86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBNZW51KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgY2xhc3NOYW1lLFxuICBpc09wZW4gPSB0cnVlLFxuICBoZWFkZXIsXG4gIGZvb3RlcixcbiAgc21hcnRMYXlvdXQgPSB0cnVlLFxufTogTWVudVByb3BzKSB7XG4gIGNvbnN0IG1lbnVQbGFjZW1lbnQgPSB1c2VDb250ZXh0KFBsYWNlbWVudENvbnRleHQpO1xuICBjb25zdCBpbm5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCByZWYgPSBjb250YWluZXJSZWYgfHwgaW5uZXJSZWY7XG5cbiAgaWYgKCFtZW51UGxhY2VtZW50KVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiTWVudSBjb21wb25lbnQgbXVzdCBiZSB3cmFwcGVkIGJ5IGEgTWVudUNvbnRhaW5lciBjb21wb25lbnQuXCJcbiAgICApO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNtYXJ0TGF5b3V0ICYmIHJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCB7IHRvcCwgYm90dG9tIH0gPSByZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9FZGdlID1cbiAgICAgICAgbWVudVBsYWNlbWVudC52ZXJ0aWNhbCA9PT0gXCJ0b3BcIiA/IHRvcCA6IHdpbmRvdy5pbm5lckhlaWdodCAtIGJvdHRvbTtcblxuICAgICAgaWYgKGRpc3RhbmNlVG9FZGdlIDwgMCkge1xuICAgICAgICBjb25zdCB1bEVsID0gcmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcihcInVsXCIpO1xuICAgICAgICBjb25zdCBjaGlsZEVsZW1lbnRzID0gdWxFbC5xdWVyeVNlbGVjdG9yQWxsKFwibGksYVwiKTtcbiAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gdWxFbC5jbGllbnRIZWlnaHQgKyBkaXN0YW5jZVRvRWRnZTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2hpbGRFbGVtZW50cy5sZW5ndGhcbiAgICAgICAgICA/IGdldENvbXB1dGVkU3R5bGUoY2hpbGRFbGVtZW50c1swXSkubWluSGVpZ2h0XG4gICAgICAgICAgOiAwO1xuICAgICAgICB1bEVsLnN0eWxlLm1heEhlaWdodCA9IGBjYWxjKCR7bmV3SGVpZ2h0fXB4IC0gJHtvZmZzZXR9KWA7XG4gICAgICB9XG4gICAgfVxuICB9LCBbaXNPcGVuLCBtZW51UGxhY2VtZW50LCBzbWFydExheW91dF0pO1xuXG4gIGlmICghaXNPcGVuKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMubWVudSxcbiAgICAgICAgICB7IFtzdHlsZXMub3Blbl06IGlzT3BlbiB9LFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgXSl9XG4gICAgICA+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAge2hlYWRlciAmJiBpc09wZW4gJiYgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+e2hlYWRlcn08L2gzPn1cbiAgICAgICAgICA8dWw+e2NoaWxkcmVufTwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7Zm9vdGVyICYmIGlzT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgIHN0eWxlcy5mb290ZXIsXG4gICAgICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06ICFjaGlsZHJlbiB9LFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Zvb3Rlcn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInFjdkRTZkZ0K3cwamEyZnFQYzBTNXc9PVwiLFwibWVudUNvbnRhaW5lclwiOlwiTHdyMWEzYlAtOTVhZXp6bWFjb0pmdz09XCIsXCJ0b3BcIjpcImJCSGJzK0ZXaTYtendXTVpJbUYrTkE9PVwiLFwicmlnaHRcIjpcIkI4TTQyTndvWjhwVVZtNVI0Skp2MWc9PVwiLFwibGVmdFwiOlwicE9HN3RYZlRGazhxcVh0TkMwRS1Pdz09XCIsXCJib3R0b21cIjpcInVjdk4wRUZNbnM4YmZWdnNpOWo5eVE9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVcIjpcInJTQmZzRk5qam9vSnNESC1YK1lYYnc9PVwiLFwib3BlblwiOlwidlg3dmdBOVpsRjdUOUVSOVZKb2RiUT09XCIsXCJlbnRyYW5jZVwiOlwiR3BCMkxzYWRodUdKWnZLb05PZG96QT09XCIsXCJoZWFkZXJcIjpcIm9BVGxCRmdlcFo1Z0FaQXItQ3huQUE9PVwiLFwiZm9vdGVyXCI6XCJ3S2VFNzN6WWZiLTdjUk4tRjhPWTFnPT1cIixcIm5vQm9yZGVyXCI6XCJMRDZMRHZzLXlsTXJQZ3NsajR4M2hnPT1cIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudUl0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MTElFbGVtZW50PikgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE1lbnVJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGlzQWN0aXZlID0gZmFsc2UsXG59OiBNZW51SXRlbVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxpXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVJdGVtLFxuICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUgfSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51SXRlbVwiOlwibUpkN2RSWk5Pd1llOEk5Q3FGbHpyZz09XCIsXCJub1BhZGRpbmdcIjpcInhja0RPZG5QUFlLVGt5bTJhd3RyakE9PVwiLFwiYWN0aXZlXCI6XCJ4K3lyQ3E1QnUramdYN1NSVXI5ZmV3PT1cIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51TGlua0l0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBhczogRWxlbWVudFR5cGU7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIE1lbnVMaW5rSXRlbSh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICAuLi5wcm9wc1xufTogTWVudUxpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgZGF0YS10ZXN0aWQ9XCJtZW51LWxpbmstaXRlbVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVMaW5rSXRlbSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVMaW5rSXRlbTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUxpbmtJdGVtXCI6XCJvRXI4WkpYTG5aeURKQk9SWnRJVjR3PT1cIixcIm5vUGFkZGluZ1wiOlwiXzNUTklKQWV0QVN5emJJK0tsTFRIQ3c9PVwiLFwiYWN0aXZlXCI6XCJnaGF1Q1RQVEJFSkF1QW82MzJ6NWZRPT1cIixcIm1lbnVJdGVtXCI6XCJuMXhuNEVZdXhFcU9jM2ZDRWFtejNRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWxlSW5wdXQgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcbmV4cG9ydCB7IEZpbGVJbnB1dFNpemUgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBDaGFuZ2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ZpbGVJbnB1dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEZpbGVJbnB1dFNpemUgPSBTaXplO1xuXG50eXBlIFByb3BzID0ge1xuICBvbkNoYW5nZTogKGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBhY2NlcHQ/OiBzdHJpbmc7XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IEZpbGVJbnB1dFNpemU7XG59O1xuXG5mdW5jdGlvbiBGaWxlSW5wdXQoe1xuICBjaGlsZHJlbixcbiAgYWNjZXB0LFxuICBvbkNoYW5nZSxcbiAgaW5wdXRSZWYsXG4gIG11bHRpcGxlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5sYWJlbCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuaW5wdXR9XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgaWQ9XCJmaWxlXCJcbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVJbnB1dDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaW5wdXRcIjpcImVVcWEzNStFbTJMY2gyNk54amJ1K1E9PVwiLFwibGFiZWxcIjpcIm54VzIxaDhVSTBNTnR3bzJrY0FkSXc9PVwiLFwic21hbGxcIjpcIk5kYTFwQWNHSmN5RERFUzVFVkpzb3c9PVwiLFwibGFyZ2VcIjpcInpxTFMzWUhYdGpsTUJzRk96cnZFWmc9PVwiLFwieGxhcmdlXCI6XCJWWmw1V3lBa3YzMDEtaENDemU1TW5RPT1cIixcImludmVydGVkXCI6XCJ2bFNhSlFKaHp0NklOdldpOE50VXdnPT1cIixcInJvdW5kZWRcIjpcImIteDVUcnlTTkdDRjlIWThKM0h0QUE9PVwiLFwibm9TaGFkb3dcIjpcIl81d2wxNEpqZjF5eEh3QUx4bUV3Nk1RPT1cIixcIm5vQm9yZGVyXCI6XCJkbFhXUU9sTmUrYUZrVmJQeERMbTRBPT1cIixcIm5vUGFkZGluZ1wiOlwiaVB4VUctT04xWExPa2ZWUHp0N05ZUT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiQlBYSTl1M2hnQXlkQWM1Qnp6a0NOZz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJKTTNKVlh0NzduSDl1cithTCtSWURnPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJNWGFza2ZmV3oyay1ocXRIUnQydk9RPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGbG9hdGluZ1BhbmVsIH0gZnJvbSBcIi4vRmxvYXRpbmdQYW5lbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUGxhY2VtZW50ID0ge1xuICBob3Jpem9udGFsOlxuICAgIHwgXCJyaWdodFwiXG4gICAgfCBcInJpZ2h0RWRnZVwiXG4gICAgfCBcInJpZ2h0T25FZGdlXCJcbiAgICB8IFwibGVmdFwiXG4gICAgfCBcImxlZnRFZGdlXCJcbiAgICB8IFwibGVmdE9uRWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJjZW50ZXJcIjtcbiAgdmVydGljYWw6XG4gICAgfCBcInRvcFwiXG4gICAgfCBcInRvcEVkZ2VcIlxuICAgIHwgXCJ0b3BPbkVkZ2VcIlxuICAgIHwgXCJib3R0b21cIlxuICAgIHwgXCJib3R0b21FZGdlXCJcbiAgICB8IFwiYm90dG9tT25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHBhcmVudDogXCJ2aWV3cG9ydFwiIHwgXCJjb250YWluZXJcIjtcbn07XG5cbnR5cGUgRmxvYXRpbmdQYW5lbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGxheW91dD86IFwiY29sdW1uXCIgfCBcInJvd1wiO1xuICBwbGFjZW1lbnQ/OiBQbGFjZW1lbnQ7XG59O1xuXG5mdW5jdGlvbiBGbG9hdGluZ1BhbmVsKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbHVtblwiLFxuICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiLCBwYXJlbnQ6IFwidmlld3BvcnRcIiB9LFxufTogRmxvYXRpbmdQYW5lbFByb3BzKSB7XG4gIGNvbnN0IGhvcml6b250YWxQbGFjZW1lbnQgPVxuICAgIHBsYWNlbWVudC5ob3Jpem9udGFsID09PSBcImNlbnRlclwiXG4gICAgICA/IFwiaG9yaXpvbnRhbENlbnRlclwiXG4gICAgICA6IHBsYWNlbWVudC5ob3Jpem9udGFsO1xuXG4gIGNvbnN0IHZlcnRpY2FsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQudmVydGljYWwgPT09IFwiY2VudGVyXCIgPyBcInZlcnRpY2FsQ2VudGVyXCIgOiBwbGFjZW1lbnQudmVydGljYWw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiZmxvYXRpbmctcGFuZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tob3Jpem9udGFsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW3ZlcnRpY2FsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW2xheW91dF0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogcGxhY2VtZW50LnBhcmVudCAhPT0gXCJjb250YWluZXJcIixcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGbG9hdGluZ1BhbmVsO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImtVVENxN3NPNWNRSHJuMjBQSlVDbXc9PVwiLFwicm93XCI6XCJ0ZG5jMWJESERtR2JnQWM3U0pyNjlRPT1cIixcImNvbHVtblwiOlwiTW10MDc2TjZBeHlINE5SRHBDTzdXQT09XCIsXCJmaXhlZFwiOlwiXzkyZWJRdko1eE5LSlM4emFrSzdTMkE9PVwiLFwicGxhaW5cIjpcInkraWREeForNU1wcDdPSTNHUExBRWc9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkNEcW9pSzBnQ1RKcG5KZ1ZvWWdKRFE9PVwiLFwidG9wXCI6XCJHUHNIbE5QRGJENktkTlFFR2o4elFRPT1cIixcInRvcEVkZ2VcIjpcInhSZzBvQU5yeHN4WE5CeUlwbk5Kdnc9PVwiLFwidG9wT25FZGdlXCI6XCJRQXllRkZHUm9ueFhTOUZnSjJkK1d3PT1cIixcInJpZ2h0XCI6XCJJOEVEQ0p6bzBad1R0Z2JWVE1temRnPT1cIixcInJpZ2h0RWRnZVwiOlwiVzJBaG0zeHVhMnZlQzNJQ1QyS1FOQT09XCIsXCJyaWdodE9uRWRnZVwiOlwieWpCQ1FZRUE4bVdpSTk4Q0ZYNUxzdz09XCIsXCJib3R0b21cIjpcIldKeHpYUUwtNU5QdkRnbmVWZ2tWd0E9PVwiLFwiYm90dG9tRWRnZVwiOlwiR1ZKcy0tcExEald2dTlDLXkzNHljdz09XCIsXCJib3R0b21PbkVkZ2VcIjpcIkREVmQtUHBseG5McFNMRmxHdEZobnc9PVwiLFwibGVmdFwiOlwib1VUTXZqTDBIeEdlblU3a0pkU3hIQT09XCIsXCJsZWZ0RWRnZVwiOlwiQmlOc0FrTVp1aSs1aS1Lell4cTBjUT09XCIsXCJsZWZ0T25FZGdlXCI6XCJfMXY4aW1IME1Uai1yTVowckMtaWhRZz09XCIsXCJob3Jpem9udGFsQ2VudGVyXCI6XCJENHA1QWEwNjNUbm03bTB1YUdoTGt3PT1cIixcInZlcnRpY2FsQ2VudGVyXCI6XCJfMmRlRy1ZMkEzenc2a0YrV0JuRW1qdz09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbiB9IGZyb20gXCIuL0ljb25CdXR0b25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBJY29uQnV0dG9uUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIHNyYzogc3RyaW5nO1xuICBhbHQ6IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB2b2lkO1xuICBzaXplPzogU2l6ZTtcbiAgdHlwZT86IFwic3VibWl0XCIgfCBcInJlc2V0XCIgfCBcImJ1dHRvblwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI+O1xufTtcblxuZnVuY3Rpb24gSWNvbkJ1dHRvbih7XG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgc3JjLFxuICBhbHQsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSA9IFwiYnV0dG9uXCIsXG59OiBJY29uQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJCdlF0c1VBYS1mUVBtWGJ2VlNWQ05RPT1cIixcInNtYWxsXCI6XCJfOFpmNEx6Y2VpSW9lcjdQSVZSOEJZQT09XCIsXCJtZWRpdW1cIjpcIl83UEYyZG5KZ1p4SUUrdFMzM3hLNEtBPT1cIixcImxhcmdlXCI6XCJFYk9ZdkdLWGlBYWJvaGk0T3kxQ013PT1cIixcInhsYXJnZVwiOlwidU9mWjlMaUd6bmFCR0l1eDQwcEZHZz09XCIsXCJyb3VuZGVkXCI6XCJ2QWoweG1qWEpUZkRiV0lDVktCbzJnPT1cIixcInRvcE9mZnNldFwiOlwiXzhZU3Mta2hJRHpJZWZSUmg1ekgzK1E9PVwiLFwicmlnaHRPZmZzZXRcIjpcInE0aklsMlhGT2J2c0RNLTRReHZ0dXc9PVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJfODJLYkVjRVp6Y1I1VnFIbHg4NjJQUT09XCIsXCJsZWZ0T2Zmc2V0XCI6XCJ4bmMxK09ERm1CUGlpZjVKb3FUbmRBPT1cIixcImludmVydGVkXCI6XCJiaFZVVGRrUWx0Y3RtclplMFQ3Mmt3PT1cIixcIm5vU2hhZG93XCI6XCJuc2doMmM2Y0h0enhhUnJMa3Y2Rnp3PT1cIixcIm5vQm9yZGVyXCI6XCJWenk2QzRkanRwZkwycFY1b1ljT1B3PT1cIixcInRyYW5zcGFyZW50XCI6XCJGdmRQUy0rMXRsc1RaMWNpRWxzdnhRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uQnV0dG9uTGluayB9IGZyb20gXCIuL0ljb25CdXR0b25MaW5rXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBCdXR0b25CYWRnZSB9IGZyb20gXCIuLi9CdXR0b25CYWRnZVwiO1xuXG50eXBlIE9mZnNldFNpZGUgPSBcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiO1xuXG50eXBlIEljb25CdXR0b25MaW5rUHJvcHMgPVxuICB8IHtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xuICAgICAgc3JjOiBzdHJpbmc7XG4gICAgICBhbHQ6IHN0cmluZztcbiAgICAgIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gSWNvbkJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjb250YWluZXJSZWYsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHNyYyxcbiAgYWx0LFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICAuLi5wcm9wc1xufTogSWNvbkJ1dHRvbkxpbmtQcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiaWNvbi1idXR0b24tbGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMudG9wT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInRvcFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICAgIFtzdHlsZXMuYm90dG9tT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImJvdHRvbVwiKSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b25MaW5rO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIm1VaEM3WEJZZWhObDFmK041aFJPNEE9PVwiLFwic21hbGxcIjpcInNNUzFGZ00zd3dMZytMZ3V2Y1hEd2c9PVwiLFwibWVkaXVtXCI6XCJfMWpVODVtRVA1aWFXeW5jTExiOGxTQT09XCIsXCJsYXJnZVwiOlwiY0lnZ2dTMmY1UGFCQ0lUZnRzMHJBZz09XCIsXCJ4bGFyZ2VcIjpcIlQyemFvbXdMWUhReC1ZRi12RHR3SHc9PVwiLFwicm91bmRlZFwiOlwiRk1BaDZnc0ZSclVmRi1DK2h4RkpTQT09XCIsXCJ0b3BPZmZzZXRcIjpcInlZdnJJbVFaeXBLdEowY2IraEVkV1E9PVwiLFwicmlnaHRPZmZzZXRcIjpcIkVpTFFVZStCRDh1YnhkaitKUXVIenc9PVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJfMHFITklSc20rTVI5cnlYcEptRU5RUT09XCIsXCJsZWZ0T2Zmc2V0XCI6XCJMbUlNbHh2cWtSamlJZ1lMSHhhWkJnPT1cIixcImludmVydGVkXCI6XCJCYytSaDZCOTcrNzRqa2VNZEN0cnpnPT1cIixcIm5vU2hhZG93XCI6XCJpR0dDR2lmMnlTY01JU0RrLTJta0ZRPT1cIixcIm5vQm9yZGVyXCI6XCJkbmpuMW9GdE5WRk4yZlJXbUtrWjNBPT1cIixcInRyYW5zcGFyZW50XCI6XCJad2lGMHU2S1RKRGd3UkM0V1NMM3JBPT1cIixcImRpc2FibGVkXCI6XCJtY1pMSnpUN1ZzN2JsUTlSeHc3UlV3PT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJbWFnZSwgSW1hZ2VQcm9wcyB9IGZyb20gXCIuL0ltYWdlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSW1hZ2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBJbWFnZVByb3BzID0ge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xuICBzcmM6IHN0cmluZztcbiAgc3JjV2lkdGg/OiBudW1iZXI7XG4gIHNyY0hlaWdodD86IG51bWJlcjtcbiAgZGVjb2Rpbmc/OiBcImFzeW5jXCIgfCBcInN5bmNcIiB8IFwiYXV0b1wiO1xuICBsb2FkaW5nPzogXCJlYWdlclwiIHwgXCJsYXp5XCI7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbn07XG5cbmZ1bmN0aW9uIEltYWdlQ29tcG9uZW50KHtcbiAgc3JjLFxuICBhbHQsXG4gIHNyY1dpZHRoLFxuICBzcmNIZWlnaHQsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxuICBkZWNvZGluZyA9IFwiYXV0b1wiLFxuICBsb2FkaW5nID0gXCJlYWdlclwiLFxuICBzdHlsZSxcbn06IEltYWdlUHJvcHMpIHtcbiAgY29uc3QgaW1hZ2VFbGVtZW50ID0gKFxuICAgIDxpbWdcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5pbWFnZSwgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2VcIlxuICAgICAgYWx0PXthbHR9XG4gICAgICBzcmM9e3NyY31cbiAgICAgIHdpZHRoPXtzcmNXaWR0aH1cbiAgICAgIGhlaWdodD17c3JjSGVpZ2h0fVxuICAgICAgZGVjb2Rpbmc9e2RlY29kaW5nfVxuICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAvPlxuICApO1xuXG4gIHJldHVybiBjaGlsZHJlbiA/IChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XG4gICAgPlxuICAgICAge2ltYWdlRWxlbWVudH1cbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XG4gICAgPC9kaXY+XG4gICkgOiAoXG4gICAgaW1hZ2VFbGVtZW50XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlQ29tcG9uZW50O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl85Z1FTUi0rZ3FvNXJEdldQbVFvQWVRPT1cIixcImhhc092ZXJsYXlcIjpcImlpMys2SytGVzRZamVRRm0tSU4zc0E9PVwiLFwib3ZlcmxheVwiOlwiXzAwRXhOYzNLdytIT2ZUQ0ZhMzRHSXc9PVwiLFwiaW1hZ2VcIjpcInJ3RDVySGNaRlJOYTRkSG82ajNKeVE9PVwiLFwiY292ZXJcIjpcIl82QWFOMVQ2U1k2RWVqK0ZhUXRhNDJnPT1cIixcImNvbnRhaW5cIjpcIkVRRGtQMEY1enpKaXRGOHVPNkgrbUE9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiR0JLUGtjOHJzeWpVVnVDcDFPbEJvUT09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiXzVTendTSis2WjRSLVlhMTFnd0xyU1E9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3IH0gZnJvbSBcIi4vTGlzdFZpZXdcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdJdGVtXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3TGlua0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0xpbmtJdGVtXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlldy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiB7IHRleHQ6IHN0cmluZzsgaWQ6IHN0cmluZyB9O1xuICBoZWFkZXJBY3Rpb25zPzogUmVhY3ROb2RlO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXcoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIGhlYWRlcixcbiAgaGVhZGVyQWN0aW9ucyxcbn06IExpc3RWaWV3UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICB7KGhlYWRlciB8fCBoZWFkZXJBY3Rpb25zKSAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT5cbiAgICAgICAgICB7aGVhZGVyICYmIChcbiAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJMYWJlbH0gaWQ9e2hlYWRlci5pZH0+XG4gICAgICAgICAgICAgIHtoZWFkZXIudGV4dH1cbiAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aGVhZGVyQWN0aW9uc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPHVsIGFyaWEtbGFiZWxsZWRieT17aGVhZGVyPy5pZH0gY2xhc3NOYW1lPXtzdHlsZXMubGlzdH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImxKemRQMG1uZnBnbEZTWXRLS1l6Snc9PVwiLFwiaGVhZGVyXCI6XCJfODJ2Q1E3eHIwTmtZNFVseVNQa3Brdz09XCIsXCJoZWFkZXJMYWJlbFwiOlwidW5XZVBkSUtuNFhhd1J1TDdDUEQwZz09XCIsXCJsaXN0XCI6XCJfNUJYK1paLUFhUXV0Y3piRFMyZTUtdz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3SXRlbVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBhY3RpdmUgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbn06IExpc3RWaWV3SXRlbVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3SXRlbTtcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi4vQnV0dG9uTGlua1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIExpc3RWaWV3TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudDogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZzogYm9vbGVhbjtcbiAgICAgIGFsaWduOiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gICAgICBzaXplOiBTaXplO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIExpc3RWaWV3TGlua0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYXM6IENvbXBvbmVudCxcbiAgYWN0aXZlID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICAuLi5wcm9wc1xufTogTGlzdFZpZXdMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvbkxpbmtcbiAgICAgICAgYXM9e0NvbXBvbmVudH1cbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CdXR0b25MaW5rPlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3TGlua0l0ZW07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE92ZXJsYXkgfSBmcm9tIFwiLi9PdmVybGF5XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3ZlcmxheS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgT3ZlcmxheVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIGlzRml4ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE92ZXJsYXkoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBpc0ZpeGVkID0gZmFsc2UsXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbn06IE92ZXJsYXlQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJvdmVybGF5XCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogaXNGaXhlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE92ZXJsYXk7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcIkVJQjktbDU4Z0MzWnZ0Vzh2dFVBTEE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkNNMS1uM3NHOFlOZDczcUpWWE0yMmc9PVwiLFwiZml4ZWRcIjpcIm9PMWlUTmxQamRhMWZqcllleUx1VUE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRleHRJbnB1dCB9IGZyb20gXCIuL1RleHRJbnB1dFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgVGV4dElucHV0UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkJsdXI/OiAoKSA9PiB2b2lkO1xuICBvbktleURvd24/OiAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xufTtcblxuZnVuY3Rpb24gVGV4dElucHV0KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBvbkJsdXIsXG4gIG9uS2V5RG93bixcbiAgcGxhY2Vob2xkZXIsXG4gIHZhbHVlLFxuICBuYW1lLFxuICBwYXR0ZXJuLFxuICBpbnB1dFJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcInRleHRcIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG59OiBUZXh0SW5wdXRQcm9wcykge1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSAoXG4gICAgPGlucHV0XG4gICAgICBkYXRhLXRlc3RpZD1cImlucHV0XCJcbiAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudGV4dElucHV0LCBzdHlsZXNbc2l6ZV0sIHtbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXJ9XSl9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgIHBhdHRlcm49e3BhdHRlcm59XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgIC8+XG4gICk7XG4gIGlmIChsYWJlbCkge1xuICAgIHJldHVybiA8TGFiZWwgdmFsdWU9e2xhYmVsfT57aW5wdXRFbGVtZW50fTwvTGFiZWw+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiA8PntpbnB1dEVsZW1lbnR9PC8+O1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBUZXh0SW5wdXQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRleHRJbnB1dFwiOlwiaDZQWUpBenl0Vk9rOUJlSzVaMCtrZz09XCIsXCJzbWFsbFwiOlwiVVhuLUJDVmc4MXlNZDhGb1VmeEtTQT09XCIsXCJtZWRpdW1cIjpcIl80YWlQNmd4TkhocldiYWM0azFnclV3PT1cIixcImxhcmdlXCI6XCJNbG5QWFlPVXlRN2hnSTdzdzFvMHhBPT1cIixcInhsYXJnZVwiOlwiSEdCdUtKYTlYanhCOHVWaEtvcDAzQT09XCIsXCJub0JvcmRlclwiOlwic1BuU0NHVU5aWHJvRWxTUVIxOTNHUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3QgfSBmcm9tIFwiLi9Ub2FzdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdENvbnRhaW5lciB9IGZyb20gXCIuL1RvYXN0Q29udGFpbmVyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9hc3RQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBUb2FzdCh7IGNoaWxkcmVuLCBjb250YWluZXJSZWYsIG9uQ2xpY2sgPSAoKSA9PiB7fSB9OiBUb2FzdFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy50b2FzdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0XCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvYXN0O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdFwiOlwidldhMi0xbU9GVStpVjE0anE3UVBzUT09XCIsXCJlbnRyYW5jZVwiOlwiZlRzV3NLckFLbHdUK0dPRTR3QXlTUT09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9hc3RDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuZnVuY3Rpb24gVG9hc3RDb250YWluZXIoeyBjaGlsZHJlbiwgYmFzZVpJbmRleCB9OiBUb2FzdENvbnRhaW5lclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnRvYXN0Q29udGFpbmVyXSl9XG4gICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3QtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvYXN0Q29udGFpbmVyO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdENvbnRhaW5lclwiOlwiXzItWHUyc1pNdk45dGdEcytpeUxjOVE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFZpZGVvLCBWaWRlb1Byb3BzIH0gZnJvbSBcIi4vVmlkZW9cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1ZpZGVvLm1vZHVsZS5jc3NcIjtcblxuLyoqXG4gKiBUaGVyZSBpcyBhIGtub3duIGlzc3VlIGluIFJlYWN0IGluIHJlZ2FyZHMgdG8gdGhlICdtdXRlZCcgcHJvcGVydHkgd2hpY2ggY2F1c2VzIHRoZSB3YXJuaW5nOlxuICogXCJXYXJuaW5nOiB1bnN0YWJsZV9mbHVzaERpc2NyZXRlVXBkYXRlczogQ2Fubm90IGZsdXNoIHVwZGF0ZXMgd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy5cIlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTAzODlcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjU0NFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Rlc3RpbmctbGlicmFyeS9yZWFjdC10ZXN0aW5nLWxpYnJhcnkvaXNzdWVzLzQ3MFxuICovXG5cbnR5cGUgTGF5b3V0ID0gXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcblxuZXhwb3J0IHR5cGUgVmlkZW9Qcm9wcyA9IHtcbiAgc3JjOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgbGF5b3V0PzogTGF5b3V0O1xuICBhdXRvUGxheT86IGJvb2xlYW47XG4gIGxvb3A/OiBib29sZWFuO1xuICBtdXRlZD86IGJvb2xlYW47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBwb3N0ZXI/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBWaWRlbyh7XG4gIHNyYyxcbiAgdHlwZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgcG9zdGVyLFxuICBtdXRlZCA9IHRydWUsXG4gIGxvb3AgPSB0cnVlLFxuICBhdXRvUGxheSA9IHRydWUsXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxufTogVmlkZW9Qcm9wcykge1xuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIDx2aWRlb1xuICAgICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcbiAgICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICAgIG11dGVkPXttdXRlZH1cbiAgICAgICAgbG9vcD17bG9vcH1cbiAgICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgICBwb3N0ZXI9e3Bvc3Rlcn1cbiAgICAgICAgcGxheXNJbmxpbmVcbiAgICAgID5cbiAgICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxuICAgICAgPC92aWRlbz5cbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XG4gICAgPC9kaXY+XG4gICkgOiAoXG4gICAgPHZpZGVvXG4gICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgIG11dGVkPXttdXRlZH1cbiAgICAgIGxvb3A9e2xvb3B9XG4gICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICBwb3N0ZXI9e3Bvc3Rlcn1cbiAgICAgIHBsYXlzSW5saW5lXG4gICAgPlxuICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxuICAgIDwvdmlkZW8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInVsV0UtRXByODVGMG1VdDdPMWdVVFE9PVwiLFwiaGFzT3ZlcmxheVwiOlwieks3dTFua2pjOHg3WURBZllRQ1Rwdz09XCIsXCJ2aWRlb1wiOlwiZlI0RDU2TGZkdW9CVy1maW1mYlQwdz09XCIsXCJjb3ZlclwiOlwiVlhRczRQVW5XR3l3NTZnNjBadGZXZz09XCIsXCJjb250YWluXCI6XCJneGZsVXpPNHJxQ0JBR3V6c1lFSWV3PT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkktNjNLbTROWTFXNFFnTWhmZ1U1TWc9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcInZOTmhKbGdJVE0rb25mN3pkemF1Zmc9PVwiLFwib3ZlcmxheVwiOlwid3h1bDdVVVpsbWFyRjg2U0dyZC10dz09XCJ9OyIsImV4cG9ydCB7IE51bXBhZCB9IGZyb20gXCIuL051bXBhZFwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcblxuaW1wb3J0IGNzcyBmcm9tIFwiLi9OdW1wYWQubW9kdWxlLmNzc1wiO1xuXG5pbXBvcnQgYmFja3NwYWNlSWNvbiBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2JhY2tzcGFjZS5zdmdcIjtcblxudHlwZSBEaWdpdCA9IDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwgOCB8IDk7XG5cbmNvbnN0IGFwcGVuZERpZ2l0ID0gKG51bWJlcjogbnVtYmVyLCBkaWdpdDogRGlnaXQpID0+IHtcbiAgcmV0dXJuIG51bWJlciAqIDEwICsgZGlnaXQ7XG59O1xuXG5jb25zdCBwb3BEaWdpdCA9IChudW1iZXI6IG51bWJlcikgPT4ge1xuICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIgLyAxMCk7XG59O1xuXG5jb25zdCBldmVudERpZ2l0S2V5cyA9IFtcIjBcIiwgXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtcGFkUHJvcHMge1xuICBudW1iZXI6IG51bWJlcjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBvbkNoYW5nZTogKG5ld051bWJlcjogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgTnVtcGFkID0gUmVhY3QuZm9yd2FyZFJlZjxIVE1MRGl2RWxlbWVudCwgTnVtcGFkUHJvcHM+KFxuICAoeyBudW1iZXIsIG9uQ2hhbmdlLCBkaXNhYmxlZCA9IGZhbHNlIH0sIHJlZikgPT4geyAgICBcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwiQmFja3NwYWNlXCIpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShwb3BEaWdpdChudW1iZXIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnREaWdpdEtleXMuaW5jbHVkZXMoZS5rZXkpKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZGlnaXQgPSBwYXJzZUludChlLmtleSwgMTApIGFzIERpZ2l0O1xuICAgICAgICBvbkNoYW5nZShhcHBlbmREaWdpdChudW1iZXIsIGRpZ2l0KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyID0gKG5ld051bWJlcjogbnVtYmVyKSA9PlxuICAgICAgKGU6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShuZXdOdW1iZXIpO1xuICAgICAgfTtcblxuICAgIGNvbnN0IE51bXBhZEtleXMgPSBBcnJheSgxMClcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBudW1wYWRWYWx1ZSA9ICgoaW5kZXggKyAxKSAlIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihhcHBlbmREaWdpdChudW1iZXIsIG51bXBhZFZhbHVlKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge251bXBhZFZhbHVlfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1wYWR9IHJlZj17cmVmfSB0YWJJbmRleD17LTF9IG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn0gZGF0YS10ZXN0aWQ9XCJudW1wYWRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1iZXJzfT5cbiAgICAgICAgICB7TnVtcGFkS2V5c31cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihwb3BEaWdpdChudW1iZXIpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBhbHQ9XCJCYWNrc3BhY2VcIiBzcmM9e2JhY2tzcGFjZUljb259IC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuKTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibnVtcGFkXCI6XCJQZU8rMnBCSUxtR2h1WGYrbVFQSkNnPT1cIixcIm51bWJlcnNcIjpcIl8zK1k4RGRPNHZCSkp0T09xUkJodHFnPT1cIn07IiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPSc2OScgaGVpZ2h0PScyNycgdmlld0JveD0nMCAwIDY5IDI3JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0LjEzMzMgMjZMMTMuNzg4NiAyNi4zNjIyQzEzLjg4MTYgMjYuNDUwNyAxNC4wMDUgMjYuNSAxNC4xMzMzIDI2LjVWMjZaTTEgMTMuNUwwLjY1NTI4NyAxMy4xMzc4QzAuNTU2MTI3IDEzLjIzMjIgMC41IDEzLjM2MzEgMC41IDEzLjVDMC41IDEzLjYzNjkgMC41NTYxMjcgMTMuNzY3OCAwLjY1NTI4NyAxMy44NjIyTDEgMTMuNVpNMTQuMTMzMyAxVjAuNUMxNC4wMDUgMC41IDEzLjg4MTYgMC41NDkzNDUgMTMuNzg4NiAwLjYzNzgyMkwxNC4xMzMzIDFaTTY3LjUgMlYyNUg2OC41VjJINjcuNVpNNjMuNDY2NyAyNS41SDE0LjEzMzNWMjYuNUg2My40NjY3VjI1LjVaTTE0LjQ3OCAyNS42Mzc4TDEuMzQ0NzEgMTMuMTM3OEwwLjY1NTI4NyAxMy44NjIyTDEzLjc4ODYgMjYuMzYyMkwxNC40NzggMjUuNjM3OFpNMS4zNDQ3MSAxMy44NjIyTDE0LjQ3OCAxLjM2MjE4TDEzLjc4ODYgMC42Mzc4MjJMMC42NTUyODcgMTMuMTM3OEwxLjM0NDcxIDEzLjg2MjJaTTE0LjEzMzMgMS41SDYzLjQ2NjdWMC41SDE0LjEzMzNWMS41Wk02NyAyNS41SDYzLjQ2NjdWMjYuNUg2N1YyNS41Wk02NyAwLjVINjMuNDY2N1YxLjVINjdWMC41Wk02Ny41IDI1QzY3LjUgMjUuMjc2MSA2Ny4yNzYxIDI1LjUgNjcgMjUuNVYyNi41QzY3LjgyODQgMjYuNSA2OC41IDI1LjgyODQgNjguNSAyNUg2Ny41Wk02OC41IDJDNjguNSAxLjE3MTU3IDY3LjgyODQgMC41IDY3IDAuNVYxLjVDNjcuMjc2MSAxLjUgNjcuNSAxLjcyMzg2IDY3LjUgMkg2OC41WicgZmlsbD0nJTIzMjYyNjI2Jy8lM2UgJTNjcGF0aCBkPSdNMzIuNjQ2NCA2LjM1MzU1TDQ2LjY0NjQgMjAuMzUzNkw0Ny4zNTM2IDE5LjY0NjRMMzMuMzUzNiA1LjY0NjQ1TDMyLjY0NjQgNi4zNTM1NVpNNDYuNjQ2NCA1LjY0NjQ1TDMyLjY0NjQgMTkuNjQ2NEwzMy4zNTM2IDIwLjM1MzZMNDcuMzUzNiA2LjM1MzU1TDQ2LjY0NjQgNS42NDY0NVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzYy9zdmclM2VcIiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG52YXIgb3B0aW9ucyA9IHtcbiAgICBjYXB0dXJlOiB0cnVlLFxufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU91dHNpZGVDbGljayhjYWxsYmFjaykge1xuICAgIHZhciByZWYgPSB1c2VSZWYoKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghcmVmLmN1cnJlbnQgfHwgcmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICB9LCBbY2FsbGJhY2tdKTtcbiAgICByZXR1cm4gcmVmO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlT3V0c2lkZUNsaWNrLmpzLm1hcCIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yLCBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVByb21pc2UoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoe1xuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICB9KSwgMiksIHJlc3VsdCA9IF9hWzBdLCBzZXRSZXN1bHQgPSBfYVsxXTtcbiAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgaWYgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB1bm1vdW50ZWRcbiAgICAvLyB3aGlsZSB0aGUgcHJvbWlzZSB3YXMgc3RpbGwgcGVuZGluZyB0byBhdm9pZCBzZXR0aW5nIHN0YXRlXG4gICAgLy8gb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cbiAgICB2YXIgaGFzVW5tb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaGFzVW5tb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocHJvbWlzZSkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSwgZXJyb3JfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDNdKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHByb21pc2VdO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBkYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH0sIFtoYXNVbm1vdW50ZWRdKTtcbiAgICByZXR1cm4gW3Jlc3VsdCwgZGlzcGF0Y2hdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlUHJvbWlzZS5qcy5tYXAiLCJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVN0YXRlLCBjcmVhdGVFbGVtZW50LCB1c2VSZWYsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuXG4vLyBHbG9iYWwgc3RhdGUgdXNlZCB0byBkZWR1cGxpY2F0ZSByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzXG5jb25zdCBTV1JHbG9iYWxTdGF0ZSA9IG5ldyBXZWFrTWFwKCk7XG5cbmNvbnN0IEVNUFRZX0NBQ0hFID0ge307XG5jb25zdCBub29wID0gKCk9Pnt9O1xuLy8gVXNpbmcgbm9vcCgpIGFzIHRoZSB1bmRlZmluZWQgdmFsdWUgYXMgdW5kZWZpbmVkIGNhbiBiZSByZXBsYWNlZFxuLy8gYnkgc29tZXRoaW5nIGVsc2UuIFByZXR0aWVyIGlnbm9yZSBhbmQgZXh0cmEgcGFyZW50aGVzZXMgYXJlIG5lY2Vzc2FyeSBoZXJlXG4vLyB0byBlbnN1cmUgdGhhdCB0c2MgZG9lc24ndCByZW1vdmUgdGhlIF9fTk9JTkxJTkVfXyBjb21tZW50LlxuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBVTkRFRklORUQgPSAvKiNfX05PSU5MSU5FX18qLyBub29wKCk7XG5jb25zdCBPQkpFQ1QgPSBPYmplY3Q7XG5jb25zdCBpc1VuZGVmaW5lZCA9ICh2KT0+diA9PT0gVU5ERUZJTkVEO1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2KT0+dHlwZW9mIHYgPT0gJ2Z1bmN0aW9uJztcbmNvbnN0IG1lcmdlT2JqZWN0cyA9IChhLCBiKT0+KHtcbiAgICAgICAgLi4uYSxcbiAgICAgICAgLi4uYlxuICAgIH0pO1xuY29uc3QgU1RSX1VOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuLy8gTk9URTogVXNlIHRoZSBmdW5jdGlvbiB0byBndWFyYW50ZWUgaXQncyByZS1ldmFsdWF0ZWQgYmV0d2VlbiBqc2RvbSBhbmQgbm9kZSBydW50aW1lIGZvciB0ZXN0cy5cbmNvbnN0IGlzV2luZG93RGVmaW5lZCA9IHR5cGVvZiB3aW5kb3cgIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGlzRG9jdW1lbnREZWZpbmVkID0gdHlwZW9mIGRvY3VtZW50ICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoKT0+aXNXaW5kb3dEZWZpbmVkICYmIHR5cGVvZiB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBjcmVhdGVDYWNoZUhlbHBlciA9IChjYWNoZSwga2V5KT0+e1xuICAgIGNvbnN0IHN0YXRlID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICByZXR1cm4gW1xuICAgICAgICAvLyBHZXR0ZXJcbiAgICAgICAgKCk9PmNhY2hlLmdldChrZXkpIHx8IEVNUFRZX0NBQ0hFLFxuICAgICAgICAvLyBTZXR0ZXJcbiAgICAgICAgKGluZm8pPT57XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgICAgICBzdGF0ZVs1XShrZXksIG1lcmdlT2JqZWN0cyhwcmV2LCBpbmZvKSwgcHJldiB8fCBFTVBUWV9DQUNIRSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFN1YnNjcmliZXJcbiAgICAgICAgc3RhdGVbNl1cbiAgICBdO1xufTtcblxuLy8gdXNlIFdlYWtNYXAgdG8gc3RvcmUgdGhlIG9iamVjdC0+a2V5IG1hcHBpbmdcbi8vIHNvIHRoZSBvYmplY3RzIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZC5cbi8vIFdlYWtNYXAgdXNlcyBhIGhhc2h0YWJsZSB1bmRlciB0aGUgaG9vZCwgc28gdGhlIGxvb2t1cFxuLy8gY29tcGxleGl0eSBpcyBhbG1vc3QgTygxKS5cbmNvbnN0IHRhYmxlID0gbmV3IFdlYWtNYXAoKTtcbi8vIGNvdW50ZXIgb2YgdGhlIGtleVxubGV0IGNvdW50ZXIgPSAwO1xuLy8gQSBzdGFibGUgaGFzaCBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzOlxuLy8gLSBGYXN0IGFuZCBlbnN1cmVzIHVuaXF1ZSBoYXNoIHByb3BlcnRpZXNcbi8vIC0gSGFuZGxlcyB1bnNlcmlhbGl6YWJsZSB2YWx1ZXNcbi8vIC0gSGFuZGxlcyBvYmplY3Qga2V5IG9yZGVyaW5nXG4vLyAtIEdlbmVyYXRlcyBzaG9ydCByZXN1bHRzXG4vL1xuLy8gVGhpcyBpcyBub3QgYSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgdGhlIHJlc3VsdCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZVxuLy8gcGFyc2FibGUuXG5jb25zdCBzdGFibGVIYXNoID0gKGFyZyk9PntcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIGFyZztcbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9IGFyZyAmJiBhcmcuY29uc3RydWN0b3I7XG4gICAgY29uc3QgaXNEYXRlID0gY29uc3RydWN0b3IgPT0gRGF0ZTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGxldCBpbmRleDtcbiAgICBpZiAoT0JKRUNUKGFyZykgPT09IGFyZyAmJiAhaXNEYXRlICYmIGNvbnN0cnVjdG9yICE9IFJlZ0V4cCkge1xuICAgICAgICAvLyBPYmplY3QvZnVuY3Rpb24sIG5vdCBudWxsL2RhdGUvcmVnZXhwLiBVc2UgV2Vha01hcCB0byBzdG9yZSB0aGUgaWQgZmlyc3QuXG4gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBoYXNoZWQsIGRpcmVjdGx5IHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgICByZXN1bHQgPSB0YWJsZS5nZXQoYXJnKTtcbiAgICAgICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGhhc2ggZmlyc3QgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3Rpb24gYmVmb3JlIGVudGVyaW5nIHRoZVxuICAgICAgICAvLyByZWN1cnNpdmUgYHN0YWJsZUhhc2hgIGNhbGxzLlxuICAgICAgICAvLyBGb3Igb3RoZXIgb2JqZWN0cyBsaWtlIHNldCBhbmQgbWFwLCB3ZSB1c2UgdGhpcyBpZCBkaXJlY3RseSBhcyB0aGUgaGFzaC5cbiAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyICsgJ34nO1xuICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gQXJyYXkpIHtcbiAgICAgICAgICAgIC8vIEFycmF5LlxuICAgICAgICAgICAgcmVzdWx0ID0gJ0AnO1xuICAgICAgICAgICAgZm9yKGluZGV4ID0gMDsgaW5kZXggPCBhcmcubGVuZ3RoOyBpbmRleCsrKXtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IE9CSkVDVCkge1xuICAgICAgICAgICAgLy8gT2JqZWN0LCBzb3J0IGtleXMuXG4gICAgICAgICAgICByZXN1bHQgPSAnIyc7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT0JKRUNULmtleXMoYXJnKS5zb3J0KCk7XG4gICAgICAgICAgICB3aGlsZSghaXNVbmRlZmluZWQoaW5kZXggPSBrZXlzLnBvcCgpKSl7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gaW5kZXggKyAnOicgKyBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBpc0RhdGUgPyBhcmcudG9KU09OKCkgOiB0eXBlID09ICdzeW1ib2wnID8gYXJnLnRvU3RyaW5nKCkgOiB0eXBlID09ICdzdHJpbmcnID8gSlNPTi5zdHJpbmdpZnkoYXJnKSA6ICcnICsgYXJnO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBEdWUgdG8gdGhlIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02NzgwNzUsXG4gKiBpdCdzIG5vdCByZWxpYWJsZSB0byBkZXRlY3QgaWYgdGhlIGJyb3dzZXIgaXMgY3VycmVudGx5IG9ubGluZSBvciBvZmZsaW5lXG4gKiBiYXNlZCBvbiBgbmF2aWdhdG9yLm9uTGluZWAuXG4gKiBBcyBhIHdvcmthcm91bmQsIHdlIGFsd2F5cyBhc3N1bWUgaXQncyBvbmxpbmUgb24gdGhlIGZpcnN0IGxvYWQsIGFuZCBjaGFuZ2VcbiAqIHRoZSBzdGF0dXMgdXBvbiBgb25saW5lYCBvciBgb2ZmbGluZWAgZXZlbnRzLlxuICovIGxldCBvbmxpbmUgPSB0cnVlO1xuY29uc3QgaXNPbmxpbmUgPSAoKT0+b25saW5lO1xuLy8gRm9yIG5vZGUgYW5kIFJlYWN0IE5hdGl2ZSwgYGFkZC9yZW1vdmVFdmVudExpc3RlbmVyYCBkb2Vzbid0IGV4aXN0IG9uIHdpbmRvdy5cbmNvbnN0IFtvbldpbmRvd0V2ZW50LCBvZmZXaW5kb3dFdmVudF0gPSBpc1dpbmRvd0RlZmluZWQgJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgPyBbXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpLFxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQod2luZG93KVxuXSA6IFtcbiAgICBub29wLFxuICAgIG5vb3Bcbl07XG5jb25zdCBpc1Zpc2libGUgPSAoKT0+e1xuICAgIGNvbnN0IHZpc2liaWxpdHlTdGF0ZSA9IGlzRG9jdW1lbnREZWZpbmVkICYmIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTtcbiAgICByZXR1cm4gaXNVbmRlZmluZWQodmlzaWJpbGl0eVN0YXRlKSB8fCB2aXNpYmlsaXR5U3RhdGUgIT09ICdoaWRkZW4nO1xufTtcbmNvbnN0IGluaXRGb2N1cyA9IChjYWxsYmFjayk9PntcbiAgICAvLyBmb2N1cyByZXZhbGlkYXRlXG4gICAgaWYgKGlzRG9jdW1lbnREZWZpbmVkKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIG9uV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBpZiAoaXNEb2N1bWVudERlZmluZWQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIH07XG59O1xuY29uc3QgaW5pdFJlY29ubmVjdCA9IChjYWxsYmFjayk9PntcbiAgICAvLyByZXZhbGlkYXRlIG9uIHJlY29ubmVjdGVkXG4gICAgY29uc3Qgb25PbmxpbmUgPSAoKT0+e1xuICAgICAgICBvbmxpbmUgPSB0cnVlO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gICAgLy8gbm90aGluZyB0byByZXZhbGlkYXRlLCBqdXN0IHVwZGF0ZSB0aGUgc3RhdHVzXG4gICAgY29uc3Qgb25PZmZsaW5lID0gKCk9PntcbiAgICAgICAgb25saW5lID0gZmFsc2U7XG4gICAgfTtcbiAgICBvbldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgb25XaW5kb3dFdmVudCgnb2ZmbGluZScsIG9uT2ZmbGluZSk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICB9O1xufTtcbmNvbnN0IHByZXNldCA9IHtcbiAgICBpc09ubGluZSxcbiAgICBpc1Zpc2libGVcbn07XG5jb25zdCBkZWZhdWx0Q29uZmlnT3B0aW9ucyA9IHtcbiAgICBpbml0Rm9jdXMsXG4gICAgaW5pdFJlY29ubmVjdFxufTtcblxuY29uc3QgSVNfUkVBQ1RfTEVHQUNZID0gIVJlYWN0LnVzZUlkO1xuY29uc3QgSVNfU0VSVkVSID0gIWlzV2luZG93RGVmaW5lZCB8fCAnRGVubycgaW4gd2luZG93O1xuLy8gUG9seWZpbGwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5jb25zdCByQUYgPSAoZik9Pmhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSgpID8gd2luZG93WydyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXShmKSA6IHNldFRpbWVvdXQoZiwgMSk7XG4vLyBSZWFjdCBjdXJyZW50bHkgdGhyb3dzIGEgd2FybmluZyB3aGVuIHVzaW5nIHVzZUxheW91dEVmZmVjdCBvbiB0aGUgc2VydmVyLlxuLy8gVG8gZ2V0IGFyb3VuZCBpdCwgd2UgY2FuIGNvbmRpdGlvbmFsbHkgdXNlRWZmZWN0IG9uIHRoZSBzZXJ2ZXIgKG5vLW9wKSBhbmRcbi8vIHVzZUxheW91dEVmZmVjdCBpbiB0aGUgYnJvd3Nlci5cbmNvbnN0IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSBJU19TRVJWRVIgPyB1c2VFZmZlY3QgOiB1c2VMYXlvdXRFZmZlY3Q7XG4vLyBUaGlzIGFzc2lnbm1lbnQgaXMgdG8gZXh0ZW5kIHRoZSBOYXZpZ2F0b3IgdHlwZSB0byB1c2UgZWZmZWN0aXZlVHlwZS5cbmNvbnN0IG5hdmlnYXRvckNvbm5lY3Rpb24gPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbi8vIEFkanVzdCB0aGUgY29uZmlnIGJhc2VkIG9uIHNsb3cgY29ubmVjdGlvbiBzdGF0dXMgKDw9IDcwS2JwcykuXG5jb25zdCBzbG93Q29ubmVjdGlvbiA9ICFJU19TRVJWRVIgJiYgbmF2aWdhdG9yQ29ubmVjdGlvbiAmJiAoW1xuICAgICdzbG93LTJnJyxcbiAgICAnMmcnXG5dLmluY2x1ZGVzKG5hdmlnYXRvckNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZSkgfHwgbmF2aWdhdG9yQ29ubmVjdGlvbi5zYXZlRGF0YSk7XG5cbmNvbnN0IHNlcmlhbGl6ZSA9IChrZXkpPT57XG4gICAgaWYgKGlzRnVuY3Rpb24oa2V5KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAga2V5ID0ga2V5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzIG5vdCByZWFkeVxuICAgICAgICAgICAga2V5ID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBrZXkgYXMgdGhlIGFyZ3VtZW50IG9mIGZldGNoZXIuIFRoaXMgY2FuIGJlIGEgc3RyaW5nIG9yIGFuXG4gICAgLy8gYXJyYXkgb2YgdmFsdWVzLlxuICAgIGNvbnN0IGFyZ3MgPSBrZXk7XG4gICAgLy8gSWYga2V5IGlzIG5vdCBmYWxzeSwgb3Igbm90IGFuIGVtcHR5IGFycmF5LCBoYXNoIGl0LlxuICAgIGtleSA9IHR5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyBrZXkgOiAoQXJyYXkuaXNBcnJheShrZXkpID8ga2V5Lmxlbmd0aCA6IGtleSkgPyBzdGFibGVIYXNoKGtleSkgOiAnJztcbiAgICByZXR1cm4gW1xuICAgICAgICBrZXksXG4gICAgICAgIGFyZ3NcbiAgICBdO1xufTtcblxuLy8gR2xvYmFsIHRpbWVzdGFtcC5cbmxldCBfX3RpbWVzdGFtcCA9IDA7XG5jb25zdCBnZXRUaW1lc3RhbXAgPSAoKT0+KytfX3RpbWVzdGFtcDtcblxuY29uc3QgRk9DVVNfRVZFTlQgPSAwO1xuY29uc3QgUkVDT05ORUNUX0VWRU5UID0gMTtcbmNvbnN0IE1VVEFURV9FVkVOVCA9IDI7XG5cbnZhciBjb25zdGFudHMgPSB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgRk9DVVNfRVZFTlQ6IEZPQ1VTX0VWRU5ULFxuICBSRUNPTk5FQ1RfRVZFTlQ6IFJFQ09OTkVDVF9FVkVOVCxcbiAgTVVUQVRFX0VWRU5UOiBNVVRBVEVfRVZFTlRcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGludGVybmFsTXV0YXRlKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbY2FjaGUsIF9rZXksIF9kYXRhLCBfb3B0c10gPSBhcmdzO1xuICAgIC8vIFdoZW4gcGFzc2luZyBhcyBhIGJvb2xlYW4sIGl0J3MgZXhwbGljaXRseSB1c2VkIHRvIGRpc2FibGUvZW5hYmxlXG4gICAgLy8gcmV2YWxpZGF0aW9uLlxuICAgIGNvbnN0IG9wdGlvbnMgPSBtZXJnZU9iamVjdHMoe1xuICAgICAgICBwb3B1bGF0ZUNhY2hlOiB0cnVlLFxuICAgICAgICB0aHJvd09uRXJyb3I6IHRydWVcbiAgICB9LCB0eXBlb2YgX29wdHMgPT09ICdib29sZWFuJyA/IHtcbiAgICAgICAgcmV2YWxpZGF0ZTogX29wdHNcbiAgICB9IDogX29wdHMgfHwge30pO1xuICAgIGxldCBwb3B1bGF0ZUNhY2hlID0gb3B0aW9ucy5wb3B1bGF0ZUNhY2hlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvck9wdGlvbiA9IG9wdGlvbnMucm9sbGJhY2tPbkVycm9yO1xuICAgIGxldCBvcHRpbWlzdGljRGF0YSA9IG9wdGlvbnMub3B0aW1pc3RpY0RhdGE7XG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IG9wdGlvbnMucmV2YWxpZGF0ZSAhPT0gZmFsc2U7XG4gICAgY29uc3Qgcm9sbGJhY2tPbkVycm9yID0gKGVycm9yKT0+e1xuICAgICAgICByZXR1cm4gdHlwZW9mIHJvbGxiYWNrT25FcnJvck9wdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHJvbGxiYWNrT25FcnJvck9wdGlvbihlcnJvcikgOiByb2xsYmFja09uRXJyb3JPcHRpb24gIT09IGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgdGhyb3dPbkVycm9yID0gb3B0aW9ucy50aHJvd09uRXJyb3I7XG4gICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGtleSBmaWx0ZXIsIHJldHVybiB0aGUgbXV0YXRpb24gcmVzdWx0cyBmb3IgYWxsXG4gICAgLy8gZmlsdGVyZWQga2V5cy5cbiAgICBpZiAoaXNGdW5jdGlvbihfa2V5KSkge1xuICAgICAgICBjb25zdCBrZXlGaWx0ZXIgPSBfa2V5O1xuICAgICAgICBjb25zdCBtYXRjaGVkS2V5cyA9IFtdO1xuICAgICAgICBjb25zdCBpdCA9IGNhY2hlLmtleXMoKTtcbiAgICAgICAgZm9yKGxldCBrZXlJdCA9IGl0Lm5leHQoKTsgIWtleUl0LmRvbmU7IGtleUl0ID0gaXQubmV4dCgpKXtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleUl0LnZhbHVlO1xuICAgICAgICAgICAgaWYgKC8vIFNraXAgdGhlIHNwZWNpYWwgdXNlU1dSSW5maW5pdGUga2V5cy5cbiAgICAgICAgICAgICFrZXkuc3RhcnRzV2l0aCgnJGluZiQnKSAmJiBrZXlGaWx0ZXIoY2FjaGUuZ2V0KGtleSkuX2spKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlZEtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChtYXRjaGVkS2V5cy5tYXAobXV0YXRlQnlLZXkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG11dGF0ZUJ5S2V5KF9rZXkpO1xuICAgIGFzeW5jIGZ1bmN0aW9uIG11dGF0ZUJ5S2V5KF9rKSB7XG4gICAgICAgIC8vIFNlcmlhbGl6ZSBrZXlcbiAgICAgICAgY29uc3QgW2tleV0gPSBzZXJpYWxpemUoX2spO1xuICAgICAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBbZ2V0LCBzZXRdID0gY3JlYXRlQ2FjaGVIZWxwZXIoY2FjaGUsIGtleSk7XG4gICAgICAgIGNvbnN0IFtFVkVOVF9SRVZBTElEQVRPUlMsIE1VVEFUSU9OLCBGRVRDSF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgICAgICBjb25zdCByZXZhbGlkYXRvcnMgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XTtcbiAgICAgICAgY29uc3Qgc3RhcnRSZXZhbGlkYXRlID0gKCk9PntcbiAgICAgICAgICAgIGlmIChyZXZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gSW52YWxpZGF0ZSB0aGUga2V5IGJ5IGRlbGV0aW5nIHRoZSBjb25jdXJyZW50IHJlcXVlc3QgbWFya2VycyBzbyBuZXdcbiAgICAgICAgICAgICAgICAvLyByZXF1ZXN0cyB3aWxsIG5vdCBiZSBkZWR1cGVkLlxuICAgICAgICAgICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChyZXZhbGlkYXRvcnMgJiYgcmV2YWxpZGF0b3JzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRvcnNbMF0oTVVUQVRFX0VWRU5UKS50aGVuKCgpPT5nZXQoKS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2V0KCkuZGF0YTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3IGRhdGEgcHJvdmlkZWQsIHJldmFsaWRhdGUgdGhlIGtleSB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgICAgIC8vIFJldmFsaWRhdGUgYW5kIGJyb2FkY2FzdCBzdGF0ZS5cbiAgICAgICAgICAgIHJldHVybiBzdGFydFJldmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGF0YSA9IF9kYXRhO1xuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIC8vIFVwZGF0ZSBnbG9iYWwgdGltZXN0YW1wcy5cbiAgICAgICAgY29uc3QgYmVmb3JlTXV0YXRpb25UcyA9IGdldFRpbWVzdGFtcCgpO1xuICAgICAgICBNVVRBVElPTltrZXldID0gW1xuICAgICAgICAgICAgYmVmb3JlTXV0YXRpb25UcyxcbiAgICAgICAgICAgIDBcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaGFzT3B0aW1pc3RpY0RhdGEgPSAhaXNVbmRlZmluZWQob3B0aW1pc3RpY0RhdGEpO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IGdldCgpO1xuICAgICAgICAvLyBgZGlzcGxheWVkRGF0YWAgaXMgdGhlIGN1cnJlbnQgdmFsdWUgb24gc2NyZWVuLiBJdCBjb3VsZCBiZSB0aGUgb3B0aW1pc3RpYyB2YWx1ZVxuICAgICAgICAvLyB0aGF0IGlzIGdvaW5nIHRvIGJlIG92ZXJyaWRkZW4gYnkgYSBgY29tbWl0dGVkRGF0YWAsIG9yIGdldCByZXZlcnRlZCBiYWNrLlxuICAgICAgICAvLyBgY29tbWl0dGVkRGF0YWAgaXMgdGhlIHZhbGlkYXRlZCB2YWx1ZSB0aGF0IGNvbWVzIGZyb20gYSBmZXRjaCBvciBtdXRhdGlvbi5cbiAgICAgICAgY29uc3QgZGlzcGxheWVkRGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gc3RhdGUuX2M7XG4gICAgICAgIGNvbnN0IGNvbW1pdHRlZERhdGEgPSBpc1VuZGVmaW5lZChjdXJyZW50RGF0YSkgPyBkaXNwbGF5ZWREYXRhIDogY3VycmVudERhdGE7XG4gICAgICAgIC8vIERvIG9wdGltaXN0aWMgZGF0YSB1cGRhdGUuXG4gICAgICAgIGlmIChoYXNPcHRpbWlzdGljRGF0YSkge1xuICAgICAgICAgICAgb3B0aW1pc3RpY0RhdGEgPSBpc0Z1bmN0aW9uKG9wdGltaXN0aWNEYXRhKSA/IG9wdGltaXN0aWNEYXRhKGNvbW1pdHRlZERhdGEpIDogb3B0aW1pc3RpY0RhdGE7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIHNldCBvcHRpbWlzdGljIGRhdGEsIGJhY2t1cCB0aGUgY3VycmVudCBjb21taXR0ZWREYXRhIGRhdGEgaW4gYF9jYC5cbiAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgZGF0YTogb3B0aW1pc3RpY0RhdGEsXG4gICAgICAgICAgICAgICAgX2M6IGNvbW1pdHRlZERhdGFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgICAvLyBgZGF0YWAgaXMgYSBmdW5jdGlvbiwgY2FsbCBpdCBwYXNzaW5nIGN1cnJlbnQgY2FjaGUgdmFsdWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhKGNvbW1pdHRlZERhdGEpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgaXQgdGhyb3dzIGFuIGVycm9yIHN5bmNocm9ub3VzbHksIHdlIHNob3VsZG4ndCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGBkYXRhYCBpcyBhIHByb21pc2UvdGhlbmFibGUsIHJlc29sdmUgdGhlIGZpbmFsIGRhdGEgZmlyc3QuXG4gICAgICAgIGlmIChkYXRhICYmIGlzRnVuY3Rpb24oZGF0YS50aGVuKSkge1xuICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBtdXRhdGlvbiBpcyBhc3luYywgd2UgbmVlZCB0byBjaGVjayB0aW1lc3RhbXBzIHRvXG4gICAgICAgICAgICAvLyBhdm9pZCByYWNlIGNvbmRpdGlvbnMuXG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgZGF0YS5jYXRjaCgoZXJyKT0+e1xuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBvdGhlciBtdXRhdGlvbnMgaGF2ZSBvY2N1cnJlZCBzaW5jZSB3ZSd2ZSBzdGFydGVkIHRoaXMgbXV0YXRpb24uXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgcmFjZSB3ZSBkb24ndCB1cGRhdGUgY2FjaGUgb3IgYnJvYWRjYXN0IHRoZSBjaGFuZ2UsXG4gICAgICAgICAgICAvLyBqdXN0IHJldHVybiB0aGUgZGF0YS5cbiAgICAgICAgICAgIGlmIChiZWZvcmVNdXRhdGlvblRzICE9PSBNVVRBVElPTltrZXldWzBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgJiYgaGFzT3B0aW1pc3RpY0RhdGEgJiYgcm9sbGJhY2tPbkVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIC8vIFJvbGxiYWNrLiBBbHdheXMgcG9wdWxhdGUgdGhlIGNhY2hlIGluIHRoaXMgY2FzZSBidXQgd2l0aG91dFxuICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybWluZyB0aGUgZGF0YS5cbiAgICAgICAgICAgICAgICBwb3B1bGF0ZUNhY2hlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkYXRhID0gY29tbWl0dGVkRGF0YTtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBkYXRhIHRvIGJlIHRoZSBsYXRlc3QgY29tbWl0dGVkIGRhdGEsIGFuZCBjbGVhciB0aGUgYF9jYCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgd2Ugc2hvdWxkIHdyaXRlIGJhY2sgdGhlIGNhY2hlIGFmdGVyIHJlcXVlc3QuXG4gICAgICAgIGlmIChwb3B1bGF0ZUNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSByZXN1bHQgaW50byBkYXRhLlxuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHBvcHVsYXRlQ2FjaGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwb3B1bGF0ZUNhY2hlKGRhdGEsIGNvbW1pdHRlZERhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBjYWNoZWQgZGF0YSBpZiB0aGVyZSdzIG5vIGVycm9yLiBEYXRhIGNhbiBiZSBgdW5kZWZpbmVkYCBoZXJlLlxuICAgICAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBSZXNldCB0aGUgdGltZXN0YW1wIHRvIG1hcmsgdGhlIG11dGF0aW9uIGhhcyBlbmRlZC5cbiAgICAgICAgTVVUQVRJT05ba2V5XVsxXSA9IGdldFRpbWVzdGFtcCgpO1xuICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgU1dSIEhvb2tzJyBpbnRlcm5hbCBzdGF0ZXM6XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHN0YXJ0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAvLyBUaGUgbXV0YXRpb24gYW5kIHJldmFsaWRhdGlvbiBhcmUgZW5kZWQsIHdlIGNhbiBjbGVhciBpdCBzaW5jZSB0aGUgZGF0YSBpc1xuICAgICAgICAvLyBub3QgYW4gb3B0aW1pc3RpYyB2YWx1ZSBhbnltb3JlLlxuICAgICAgICBzZXQoe1xuICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGhyb3cgZXJyb3Igb3IgcmV0dXJuIGRhdGFcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodGhyb3dPbkVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9wdWxhdGVDYWNoZSA/IHJlcyA6IGRhdGE7XG4gICAgfVxufVxuXG5jb25zdCByZXZhbGlkYXRlQWxsS2V5cyA9IChyZXZhbGlkYXRvcnMsIHR5cGUpPT57XG4gICAgZm9yKGNvbnN0IGtleSBpbiByZXZhbGlkYXRvcnMpe1xuICAgICAgICBpZiAocmV2YWxpZGF0b3JzW2tleV1bMF0pIHJldmFsaWRhdG9yc1trZXldWzBdKHR5cGUpO1xuICAgIH1cbn07XG5jb25zdCBpbml0Q2FjaGUgPSAocHJvdmlkZXIsIG9wdGlvbnMpPT57XG4gICAgLy8gVGhlIGdsb2JhbCBzdGF0ZSBmb3IgYSBzcGVjaWZpYyBwcm92aWRlciB3aWxsIGJlIHVzZWQgdG8gZGVkdXBsaWNhdGVcbiAgICAvLyByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzLiBBcyB3ZWxsIGFzIGEgbXV0YXRlIGZ1bmN0aW9uIHRoYXQgaXMgYm91bmQgdG9cbiAgICAvLyB0aGUgY2FjaGUuXG4gICAgLy8gVGhlIHByb3ZpZGVyJ3MgZ2xvYmFsIHN0YXRlIG1pZ2h0IGJlIGFscmVhZHkgaW5pdGlhbGl6ZWQuIExldCdzIHRyeSB0byBnZXQgdGhlXG4gICAgLy8gZ2xvYmFsIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdmlkZXIgZmlyc3QuXG4gICAgaWYgKCFTV1JHbG9iYWxTdGF0ZS5oYXMocHJvdmlkZXIpKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZ09wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGdsb2JhbCBzdGF0ZSBib3VuZCB0byB0aGUgcHJvdmlkZXIsIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGVcbiAgICAgICAgLy8gbmV3IG11dGF0ZSBmdW5jdGlvbi5cbiAgICAgICAgY29uc3QgRVZFTlRfUkVWQUxJREFUT1JTID0ge307XG4gICAgICAgIGNvbnN0IG11dGF0ZSA9IGludGVybmFsTXV0YXRlLmJpbmQoVU5ERUZJTkVELCBwcm92aWRlcik7XG4gICAgICAgIGxldCB1bm1vdW50ID0gbm9vcDtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IHt9O1xuICAgICAgICBjb25zdCBzdWJzY3JpYmUgPSAoa2V5LCBjYWxsYmFjayk9PntcbiAgICAgICAgICAgIGNvbnN0IHN1YnMgPSBzdWJzY3JpcHRpb25zW2tleV0gfHwgW107XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25zW2tleV0gPSBzdWJzO1xuICAgICAgICAgICAgc3Vicy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIHJldHVybiAoKT0+c3Vicy5zcGxpY2Uoc3Vicy5pbmRleE9mKGNhbGxiYWNrKSwgMSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNldHRlciA9IChrZXksIHZhbHVlLCBwcmV2KT0+e1xuICAgICAgICAgICAgcHJvdmlkZXIuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgc3VicyA9IHN1YnNjcmlwdGlvbnNba2V5XTtcbiAgICAgICAgICAgIGlmIChzdWJzKSB7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBpID0gc3Vicy5sZW5ndGg7IGktLTspe1xuICAgICAgICAgICAgICAgICAgICBzdWJzW2ldKHByZXYsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluaXRQcm92aWRlciA9ICgpPT57XG4gICAgICAgICAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YXRlIGlmIGl0J3MgbmV3LCBvciBpZiB0aGUgcHJvdmlkZXIgaGFzIGJlZW4gZXh0ZW5kZWQuXG4gICAgICAgICAgICAgICAgU1dSR2xvYmFsU3RhdGUuc2V0KHByb3ZpZGVyLCBbXG4gICAgICAgICAgICAgICAgICAgIEVWRU5UX1JFVkFMSURBVE9SUyxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzZXR0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZVxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIGlmICghSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gbGlzdGVuaW5nIHRvIHRoZSBuYXRpdmUgZXZlbnRzIGZvciBhdXRvIHJldmFsaWRhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGludGVudGlvbmFsbHkgcHV0IGEgZGVsYXkgKHNldFRpbWVvdXQpIGhlcmUgdG8gbWFrZSBzdXJlIHRoZXkgYXJlXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpcmVkIGFmdGVyIGltbWVkaWF0ZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbnMsIHdoaWNoIGNhbiBiZVxuICAgICAgICAgICAgICAgICAgICAvLyBSZWFjdCdzIHN0YXRlIHVwZGF0ZXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYXZvaWRzIHNvbWUgdW5uZWNlc3NhcnkgcmV2YWxpZGF0aW9ucyBzdWNoIGFzXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xNjgwLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWxlYXNlRm9jdXMgPSBvcHRzLmluaXRGb2N1cyhzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBGT0NVU19FVkVOVCkpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZVJlY29ubmVjdCA9IG9wdHMuaW5pdFJlY29ubmVjdChzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBSRUNPTk5FQ1RfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIHVubW91bnQgPSAoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZUZvY3VzICYmIHJlbGVhc2VGb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZVJlY29ubmVjdCAmJiByZWxlYXNlUmVjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHVuLW1vdW50aW5nLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgY2FjaGUgcHJvdmlkZXIgZnJvbSB0aGUgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UgdG9vIGJlY2F1c2UgaXQncyBhIHNpZGUtZWZmZWN0LiBPdGhlcndpc2UsIHdoZW4gcmUtbW91bnRpbmcgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgbm90IHJlLXJlZ2lzdGVyIHRob3NlIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLmRlbGV0ZShwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpbml0UHJvdmlkZXIoKTtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm92aWRlciwgd2UgbmVlZCB0byBpbml0aWFsaXplIGl0IGFuZCBzZXR1cCBET00gZXZlbnRzXG4gICAgICAgIC8vIGxpc3RlbmVycyBmb3IgYGZvY3VzYCBhbmQgYHJlY29ubmVjdGAgYWN0aW9ucy5cbiAgICAgICAgLy8gV2UgbWlnaHQgd2FudCB0byBpbmplY3QgYW4gZXh0cmEgbGF5ZXIgb24gdG9wIG9mIGBwcm92aWRlcmAgaW4gdGhlIGZ1dHVyZSxcbiAgICAgICAgLy8gc3VjaCBhcyBrZXkgc2VyaWFsaXphdGlvbiwgYXV0byBHQywgZXRjLlxuICAgICAgICAvLyBGb3Igbm93LCBpdCdzIGp1c3QgYSBgTWFwYCBpbnRlcmZhY2Ugd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9ucy5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgICAgaW5pdFByb3ZpZGVyLFxuICAgICAgICAgICAgdW5tb3VudFxuICAgICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgICBwcm92aWRlcixcbiAgICAgICAgU1dSR2xvYmFsU3RhdGUuZ2V0KHByb3ZpZGVyKVs0XVxuICAgIF07XG59O1xuXG4vLyBlcnJvciByZXRyeVxuY29uc3Qgb25FcnJvclJldHJ5ID0gKF8sIF9fLCBjb25maWcsIHJldmFsaWRhdGUsIG9wdHMpPT57XG4gICAgY29uc3QgbWF4UmV0cnlDb3VudCA9IGNvbmZpZy5lcnJvclJldHJ5Q291bnQ7XG4gICAgY29uc3QgY3VycmVudFJldHJ5Q291bnQgPSBvcHRzLnJldHJ5Q291bnQ7XG4gICAgLy8gRXhwb25lbnRpYWwgYmFja29mZlxuICAgIGNvbnN0IHRpbWVvdXQgPSB+figoTWF0aC5yYW5kb20oKSArIDAuNSkgKiAoMSA8PCAoY3VycmVudFJldHJ5Q291bnQgPCA4ID8gY3VycmVudFJldHJ5Q291bnQgOiA4KSkpICogY29uZmlnLmVycm9yUmV0cnlJbnRlcnZhbDtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1heFJldHJ5Q291bnQpICYmIGN1cnJlbnRSZXRyeUNvdW50ID4gbWF4UmV0cnlDb3VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQocmV2YWxpZGF0ZSwgdGltZW91dCwgb3B0cyk7XG59O1xuY29uc3QgY29tcGFyZSA9IChjdXJyZW50RGF0YSwgbmV3RGF0YSk9PnN0YWJsZUhhc2goY3VycmVudERhdGEpID09IHN0YWJsZUhhc2gobmV3RGF0YSk7XG4vLyBEZWZhdWx0IGNhY2hlIHByb3ZpZGVyXG5jb25zdCBbY2FjaGUsIG11dGF0ZV0gPSBpbml0Q2FjaGUobmV3IE1hcCgpKTtcbi8vIERlZmF1bHQgY29uZmlnXG5jb25zdCBkZWZhdWx0Q29uZmlnID0gbWVyZ2VPYmplY3RzKHtcbiAgICAvLyBldmVudHNcbiAgICBvbkxvYWRpbmdTbG93OiBub29wLFxuICAgIG9uU3VjY2Vzczogbm9vcCxcbiAgICBvbkVycm9yOiBub29wLFxuICAgIG9uRXJyb3JSZXRyeSxcbiAgICBvbkRpc2NhcmRlZDogbm9vcCxcbiAgICAvLyBzd2l0Y2hlc1xuICAgIHJldmFsaWRhdGVPbkZvY3VzOiB0cnVlLFxuICAgIHJldmFsaWRhdGVPblJlY29ubmVjdDogdHJ1ZSxcbiAgICByZXZhbGlkYXRlSWZTdGFsZTogdHJ1ZSxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IHRydWUsXG4gICAgLy8gdGltZW91dHNcbiAgICBlcnJvclJldHJ5SW50ZXJ2YWw6IHNsb3dDb25uZWN0aW9uID8gMTAwMDAgOiA1MDAwLFxuICAgIGZvY3VzVGhyb3R0bGVJbnRlcnZhbDogNSAqIDEwMDAsXG4gICAgZGVkdXBpbmdJbnRlcnZhbDogMiAqIDEwMDAsXG4gICAgbG9hZGluZ1RpbWVvdXQ6IHNsb3dDb25uZWN0aW9uID8gNTAwMCA6IDMwMDAsXG4gICAgLy8gcHJvdmlkZXJzXG4gICAgY29tcGFyZSxcbiAgICBpc1BhdXNlZDogKCk9PmZhbHNlLFxuICAgIGNhY2hlLFxuICAgIG11dGF0ZSxcbiAgICBmYWxsYmFjazoge31cbn0sIC8vIHVzZSB3ZWIgcHJlc2V0IGJ5IGRlZmF1bHRcbnByZXNldCk7XG5cbmNvbnN0IG1lcmdlQ29uZmlncyA9IChhLCBiKT0+e1xuICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IG9iamVjdCB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgaGVyZS5cbiAgICBjb25zdCB2ID0gbWVyZ2VPYmplY3RzKGEsIGIpO1xuICAgIC8vIElmIHR3byBjb25maWdzIGFyZSBwcm92aWRlZCwgbWVyZ2UgdGhlaXIgYHVzZWAgYW5kIGBmYWxsYmFja2Agb3B0aW9ucy5cbiAgICBpZiAoYikge1xuICAgICAgICBjb25zdCB7IHVzZTogdTEgLCBmYWxsYmFjazogZjEgIH0gPSBhO1xuICAgICAgICBjb25zdCB7IHVzZTogdTIgLCBmYWxsYmFjazogZjIgIH0gPSBiO1xuICAgICAgICBpZiAodTEgJiYgdTIpIHtcbiAgICAgICAgICAgIHYudXNlID0gdTEuY29uY2F0KHUyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZjEgJiYgZjIpIHtcbiAgICAgICAgICAgIHYuZmFsbGJhY2sgPSBtZXJnZU9iamVjdHMoZjEsIGYyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cbmNvbnN0IFNXUkNvbmZpZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcbmNvbnN0IFNXUkNvbmZpZyA9IChwcm9wcyk9PntcbiAgICBjb25zdCB7IHZhbHVlICB9ID0gcHJvcHM7XG4gICAgY29uc3QgcGFyZW50Q29uZmlnID0gdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KTtcbiAgICBjb25zdCBpc0Z1bmN0aW9uYWxDb25maWcgPSBpc0Z1bmN0aW9uKHZhbHVlKTtcbiAgICBjb25zdCBjb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyB2YWx1ZShwYXJlbnRDb25maWcpIDogdmFsdWUsIFtcbiAgICAgICAgaXNGdW5jdGlvbmFsQ29uZmlnLFxuICAgICAgICBwYXJlbnRDb25maWcsXG4gICAgICAgIHZhbHVlXG4gICAgXSk7XG4gICAgLy8gRXh0ZW5kIHBhcmVudCBjb250ZXh0IHZhbHVlcyBhbmQgbWlkZGxld2FyZS5cbiAgICBjb25zdCBleHRlbmRlZENvbmZpZyA9IHVzZU1lbW8oKCk9PmlzRnVuY3Rpb25hbENvbmZpZyA/IGNvbmZpZyA6IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyksIFtcbiAgICAgICAgaXNGdW5jdGlvbmFsQ29uZmlnLFxuICAgICAgICBwYXJlbnRDb25maWcsXG4gICAgICAgIGNvbmZpZ1xuICAgIF0pO1xuICAgIC8vIFNob3VsZCBub3QgdXNlIHRoZSBpbmhlcml0ZWQgcHJvdmlkZXIuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBjb25maWcgJiYgY29uZmlnLnByb3ZpZGVyO1xuICAgIC8vIFVzZSBhIGxhenkgaW5pdGlhbGl6ZWQgc3RhdGUgdG8gY3JlYXRlIHRoZSBjYWNoZSBvbiBmaXJzdCBhY2Nlc3MuXG4gICAgY29uc3QgW2NhY2hlQ29udGV4dF0gPSB1c2VTdGF0ZSgoKT0+cHJvdmlkZXIgPyBpbml0Q2FjaGUocHJvdmlkZXIoZXh0ZW5kZWRDb25maWcuY2FjaGUgfHwgY2FjaGUpLCBjb25maWcpIDogVU5ERUZJTkVEKTtcbiAgICAvLyBPdmVycmlkZSB0aGUgY2FjaGUgaWYgYSBuZXcgcHJvdmlkZXIgaXMgZ2l2ZW4uXG4gICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICBleHRlbmRlZENvbmZpZy5jYWNoZSA9IGNhY2hlQ29udGV4dFswXTtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcubXV0YXRlID0gY2FjaGVDb250ZXh0WzFdO1xuICAgIH1cbiAgICAvLyBVbnN1YnNjcmliZSBldmVudHMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoY2FjaGVDb250ZXh0KSB7XG4gICAgICAgICAgICBjYWNoZUNvbnRleHRbMl0gJiYgY2FjaGVDb250ZXh0WzJdKCk7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVDb250ZXh0WzNdO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFNXUkNvbmZpZ0NvbnRleHQuUHJvdmlkZXIsIG1lcmdlT2JqZWN0cyhwcm9wcywge1xuICAgICAgICB2YWx1ZTogZXh0ZW5kZWRDb25maWdcbiAgICB9KSk7XG59O1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yXG5jb25zdCBlbmFibGVEZXZ0b29scyA9IGlzV2luZG93RGVmaW5lZCAmJiB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX187XG5jb25zdCB1c2UgPSBlbmFibGVEZXZ0b29scyA/IHdpbmRvdy5fX1NXUl9ERVZUT09MU19VU0VfXyA6IFtdO1xuY29uc3Qgc2V0dXBEZXZUb29scyA9ICgpPT57XG4gICAgaWYgKGVuYWJsZURldnRvb2xzKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1JFQUNUX18gPSBSZWFjdDtcbiAgICB9XG59O1xuXG5jb25zdCBub3JtYWxpemUgPSAoYXJncyk9PntcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhcmdzWzFdKSA/IFtcbiAgICAgICAgYXJnc1swXSxcbiAgICAgICAgYXJnc1sxXSxcbiAgICAgICAgYXJnc1syXSB8fCB7fVxuICAgIF0gOiBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIChhcmdzWzFdID09PSBudWxsID8gYXJnc1syXSA6IGFyZ3NbMV0pIHx8IHt9XG4gICAgXTtcbn07XG5cbmNvbnN0IHVzZVNXUkNvbmZpZyA9ICgpPT57XG4gICAgcmV0dXJuIG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnLCB1c2VDb250ZXh0KFNXUkNvbmZpZ0NvbnRleHQpKTtcbn07XG5cbmNvbnN0IHByZWxvYWQgPSAoa2V5XywgZmV0Y2hlcik9PntcbiAgICBjb25zdCBrZXkgPSBzZXJpYWxpemUoa2V5XylbMF07XG4gICAgY29uc3QgWywgLCAsIFBSRUxPQURdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAvLyBQcmV2ZW50IHByZWxvYWQgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGJlZm9yZSB1c2VkLlxuICAgIGlmIChQUkVMT0FEW2tleV0pIHJldHVybiBQUkVMT0FEW2tleV07XG4gICAgY29uc3QgcmVxID0gZmV0Y2hlcihrZXlfKTtcbiAgICBQUkVMT0FEW2tleV0gPSByZXE7XG4gICAgcmV0dXJuIHJlcTtcbn07XG5jb25zdCBtaWRkbGV3YXJlID0gKHVzZVNXUk5leHQpPT4oa2V5XywgZmV0Y2hlcl8sIGNvbmZpZyk9PntcbiAgICAgICAgLy8gZmV0Y2hlciBtaWdodCBiZSBhIHN5bmMgZnVuY3Rpb24sIHNvIHRoaXMgc2hvdWxkIG5vdCBiZSBhbiBhc3luYyBmdW5jdGlvblxuICAgICAgICBjb25zdCBmZXRjaGVyID0gZmV0Y2hlcl8gJiYgKCguLi5hcmdzKT0+e1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgICAgICAgICAgY29uc3QgWywgLCAsIFBSRUxPQURdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgUFJFTE9BRFtrZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmV0Y2hlcl8oLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdXNlU1dSTmV4dChrZXlfLCBmZXRjaGVyLCBjb25maWcpO1xuICAgIH07XG5cbmNvbnN0IEJVSUxUX0lOX01JRERMRVdBUkUgPSB1c2UuY29uY2F0KG1pZGRsZXdhcmUpO1xuXG4vLyBJdCdzIHRyaWNreSB0byBwYXNzIGdlbmVyaWMgdHlwZXMgYXMgcGFyYW1ldGVycywgc28gd2UganVzdCBkaXJlY3RseSBvdmVycmlkZVxuLy8gdGhlIHR5cGVzIGhlcmUuXG5jb25zdCB3aXRoQXJncyA9IChob29rKT0+e1xuICAgIHJldHVybiBmdW5jdGlvbiB1c2VTV1JBcmdzKC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBkZWZhdWx0IGFuZCBpbmhlcml0ZWQgY29uZmlndXJhdGlvbi5cbiAgICAgICAgY29uc3QgZmFsbGJhY2tDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICAgICAgLy8gTm9ybWFsaXplIGFyZ3VtZW50cy5cbiAgICAgICAgY29uc3QgW2tleSwgZm4sIF9jb25maWddID0gbm9ybWFsaXplKGFyZ3MpO1xuICAgICAgICAvLyBNZXJnZSBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgY29uc3QgY29uZmlnID0gbWVyZ2VDb25maWdzKGZhbGxiYWNrQ29uZmlnLCBfY29uZmlnKTtcbiAgICAgICAgLy8gQXBwbHkgbWlkZGxld2FyZVxuICAgICAgICBsZXQgbmV4dCA9IGhvb2s7XG4gICAgICAgIGNvbnN0IHsgdXNlICB9ID0gY29uZmlnO1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlID0gKHVzZSB8fCBbXSkuY29uY2F0KEJVSUxUX0lOX01JRERMRVdBUkUpO1xuICAgICAgICBmb3IobGV0IGkgPSBtaWRkbGV3YXJlLmxlbmd0aDsgaS0tOyl7XG4gICAgICAgICAgICBuZXh0ID0gbWlkZGxld2FyZVtpXShuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dChrZXksIGZuIHx8IGNvbmZpZy5mZXRjaGVyIHx8IG51bGwsIGNvbmZpZyk7XG4gICAgfTtcbn07XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2Ygc3RhdGUgd2l0aCBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICovIGNvbnN0IHVzZVN0YXRlV2l0aERlcHMgPSAoc3RhdGUpPT57XG4gICAgY29uc3QgcmVyZW5kZXIgPSB1c2VTdGF0ZSh7fSlbMV07XG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzdGF0ZVJlZiA9IHVzZVJlZihzdGF0ZSk7XG4gICAgLy8gSWYgYSBzdGF0ZSBwcm9wZXJ0eSAoZGF0YSwgZXJyb3IsIG9yIGlzVmFsaWRhdGluZykgaXMgYWNjZXNzZWQgYnkgdGhlIHJlbmRlclxuICAgIC8vIGZ1bmN0aW9uLCB3ZSBtYXJrIHRoZSBwcm9wZXJ0eSBhcyBhIGRlcGVuZGVuY3kgc28gaWYgaXQgaXMgdXBkYXRlZCBhZ2FpblxuICAgIC8vIGluIHRoZSBmdXR1cmUsIHdlIHRyaWdnZXIgYSByZXJlbmRlci5cbiAgICAvLyBUaGlzIGlzIGFsc28ga25vd24gYXMgZGVwZW5kZW5jeS10cmFja2luZy5cbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llc1JlZiA9IHVzZVJlZih7XG4gICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICB9KTtcbiAgICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVG8gY2hhbmdlIHN0YXRlUmVmLCBwYXNzIHRoZSB2YWx1ZXMgZXhwbGljaXRseSB0byBzZXRTdGF0ZTpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogc2V0U3RhdGUoe1xuICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICogICBkYXRhOiBuZXdEYXRhIC8vIHNldCBkYXRhIHRvIG5ld0RhdGFcbiAgICogICBlcnJvcjogdW5kZWZpbmVkIC8vIHNldCBlcnJvciB0byB1bmRlZmluZWRcbiAgICogfSlcbiAgICpcbiAgICogc2V0U3RhdGUoe1xuICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICogICBkYXRhOiB1bmRlZmluZWQgLy8gc2V0IGRhdGEgdG8gdW5kZWZpbmVkXG4gICAqICAgZXJyb3I6IGVyciAvLyBzZXQgZXJyb3IgdG8gZXJyXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKi8gY29uc3Qgc2V0U3RhdGUgPSB1c2VDYWxsYmFjaygocGF5bG9hZCk9PntcbiAgICAgICAgbGV0IHNob3VsZFJlcmVuZGVyID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHN0YXRlUmVmLmN1cnJlbnQ7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHBheWxvYWQpe1xuICAgICAgICAgICAgY29uc3QgayA9IF87XG4gICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgc3RhdGUgYW5kIG1hcmsgcmVyZW5kZXIgYXNcbiAgICAgICAgICAgIC8vIG5lZWRlZC5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGVba10gIT09IHBheWxvYWRba10pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGVba10gPSBwYXlsb2FkW2tdO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCBieSB0aGUgY29tcG9uZW50LCBhIHJlcmVuZGVyIHNob3VsZCBiZVxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudFtrXSkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRSZXJlbmRlciAmJiAhdW5tb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGlmIChJU19SRUFDVF9MRUdBQ1kpIHtcbiAgICAgICAgICAgICAgICByZXJlbmRlcih7fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbigoKT0+cmVyZW5kZXIoe30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIC8vIGNvbmZpZy5zdXNwZW5zZSBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gW1xuICAgICAgICBzdGF0ZVJlZixcbiAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudCxcbiAgICAgICAgc2V0U3RhdGVcbiAgICBdO1xufTtcblxuLy8gQWRkIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBsaXN0IG9mIGtleWVkIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgcmV0dXJuXG4vLyB0aGUgdW5zdWJzY3JpYmUgZnVuY3Rpb24uXG5jb25zdCBzdWJzY3JpYmVDYWxsYmFjayA9IChrZXksIGNhbGxiYWNrcywgY2FsbGJhY2spPT57XG4gICAgY29uc3Qga2V5ZWRSZXZhbGlkYXRvcnMgPSBjYWxsYmFja3Nba2V5XSB8fCAoY2FsbGJhY2tzW2tleV0gPSBbXSk7XG4gICAga2V5ZWRSZXZhbGlkYXRvcnMucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGNvbnN0IGluZGV4ID0ga2V5ZWRSZXZhbGlkYXRvcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBPKDEpOiBmYXN0ZXIgdGhhbiBzcGxpY2VcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzW2luZGV4XSA9IGtleWVkUmV2YWxpZGF0b3JzW2tleWVkUmV2YWxpZGF0b3JzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuLy8gQ3JlYXRlIGEgY3VzdG9tIGhvb2sgd2l0aCBhIG1pZGRsZXdhcmVcbmNvbnN0IHdpdGhNaWRkbGV3YXJlID0gKHVzZVNXUiwgbWlkZGxld2FyZSk9PntcbiAgICByZXR1cm4gKC4uLmFyZ3MpPT57XG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBjb25maWddID0gbm9ybWFsaXplKGFyZ3MpO1xuICAgICAgICBjb25zdCB1c2VzID0gKGNvbmZpZy51c2UgfHwgW10pLmNvbmNhdChtaWRkbGV3YXJlKTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUihrZXksIGZuLCB7XG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICB1c2U6IHVzZXNcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG5cbnNldHVwRGV2VG9vbHMoKTtcblxuZXhwb3J0IHsgSVNfUkVBQ1RfTEVHQUNZLCBJU19TRVJWRVIsIE9CSkVDVCwgU1dSQ29uZmlnLCBTV1JHbG9iYWxTdGF0ZSwgVU5ERUZJTkVELCBjYWNoZSwgY29tcGFyZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGRlZmF1bHRDb25maWcsIGRlZmF1bHRDb25maWdPcHRpb25zLCBnZXRUaW1lc3RhbXAsIGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSwgaW5pdENhY2hlLCBpbnRlcm5hbE11dGF0ZSwgaXNEb2N1bWVudERlZmluZWQsIGlzRnVuY3Rpb24sIGlzVW5kZWZpbmVkLCBpc1dpbmRvd0RlZmluZWQsIG1lcmdlQ29uZmlncywgbWVyZ2VPYmplY3RzLCBtdXRhdGUsIG5vb3AsIG5vcm1hbGl6ZSwgcHJlbG9hZCwgcHJlc2V0LCByQUYsIGNvbnN0YW50cyBhcyByZXZhbGlkYXRlRXZlbnRzLCBzZXJpYWxpemUsIHNsb3dDb25uZWN0aW9uLCBzdGFibGVIYXNoLCBzdWJzY3JpYmVDYWxsYmFjaywgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgdXNlU1dSQ29uZmlnLCB1c2VTdGF0ZVdpdGhEZXBzLCB3aXRoQXJncywgd2l0aE1pZGRsZXdhcmUgfTtcbiIsImltcG9ydCB7IHVzZVJlZiwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMnO1xuaW1wb3J0IHsgT0JKRUNULCBTV1JDb25maWcgYXMgU1dSQ29uZmlnJDEsIGRlZmF1bHRDb25maWcsIHdpdGhBcmdzLCBTV1JHbG9iYWxTdGF0ZSwgc2VyaWFsaXplLCBjcmVhdGVDYWNoZUhlbHBlciwgaXNVbmRlZmluZWQsIGdldFRpbWVzdGFtcCwgVU5ERUZJTkVELCBpc0Z1bmN0aW9uLCBpbnRlcm5hbE11dGF0ZSwgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgc3Vic2NyaWJlQ2FsbGJhY2ssIElTX1NFUlZFUiwgckFGLCBJU19SRUFDVF9MRUdBQ1ksIG1lcmdlT2JqZWN0cywgcmV2YWxpZGF0ZUV2ZW50cyB9IGZyb20gJ3N3ci9faW50ZXJuYWwnO1xuZXhwb3J0IHsgbXV0YXRlLCBwcmVsb2FkLCB1c2VTV1JDb25maWcgfSBmcm9tICdzd3IvX2ludGVybmFsJztcblxuY29uc3QgV0lUSF9ERURVUEUgPSB7XG4gICAgZGVkdXBlOiB0cnVlXG59O1xuY29uc3QgdXNlU1dSSGFuZGxlciA9IChfa2V5LCBmZXRjaGVyLCBjb25maWcpPT57XG4gICAgY29uc3QgeyBjYWNoZSAsIGNvbXBhcmUgLCBzdXNwZW5zZSAsIGZhbGxiYWNrRGF0YSAsIHJldmFsaWRhdGVPbk1vdW50ICwgcmVmcmVzaEludGVydmFsICwgcmVmcmVzaFdoZW5IaWRkZW4gLCByZWZyZXNoV2hlbk9mZmxpbmUgLCBrZWVwUHJldmlvdXNEYXRhICB9ID0gY29uZmlnO1xuICAgIGNvbnN0IFtFVkVOVF9SRVZBTElEQVRPUlMsIE1VVEFUSU9OLCBGRVRDSF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIC8vIGBrZXlgIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBTV1IgYGRhdGFgIHN0YXRlLCBga2V5SW5mb2AgaG9sZHMgZXh0cmFcbiAgICAvLyBzdGF0ZXMgc3VjaCBhcyBgZXJyb3JgIGFuZCBgaXNWYWxpZGF0aW5nYCBpbnNpZGUsXG4gICAgLy8gYWxsIG9mIHRoZW0gYXJlIGRlcml2ZWQgZnJvbSBgX2tleWAuXG4gICAgLy8gYGZuQXJnYCBpcyB0aGUgYXJndW1lbnQvYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBrZXksIHdoaWNoIHdpbGwgYmUgcGFzc2VkXG4gICAgLy8gdG8gdGhlIGZldGNoZXIuXG4gICAgY29uc3QgW2tleSwgZm5BcmddID0gc2VyaWFsaXplKF9rZXkpO1xuICAgIC8vIElmIGl0J3MgdGhlIGluaXRpYWwgcmVuZGVyIG9mIHRoaXMgaG9vay5cbiAgICBjb25zdCBpbml0aWFsTW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgLy8gSWYgdGhlIGhvb2sgaXMgdW5tb3VudGVkIGFscmVhZHkuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByZXZlbnQgc29tZSBlZmZlY3RzXG4gICAgLy8gdG8gYmUgY2FsbGVkIGFmdGVyIHVubW91bnRpbmcuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBSZWZzIHRvIGtlZXAgdGhlIGtleSBhbmQgY29uZmlnLlxuICAgIGNvbnN0IGtleVJlZiA9IHVzZVJlZihrZXkpO1xuICAgIGNvbnN0IGZldGNoZXJSZWYgPSB1c2VSZWYoZmV0Y2hlcik7XG4gICAgY29uc3QgY29uZmlnUmVmID0gdXNlUmVmKGNvbmZpZyk7XG4gICAgY29uc3QgZ2V0Q29uZmlnID0gKCk9PmNvbmZpZ1JlZi5jdXJyZW50O1xuICAgIGNvbnN0IGlzQWN0aXZlID0gKCk9PmdldENvbmZpZygpLmlzVmlzaWJsZSgpICYmIGdldENvbmZpZygpLmlzT25saW5lKCk7XG4gICAgY29uc3QgW2dldENhY2hlLCBzZXRDYWNoZSwgc3Vic2NyaWJlQ2FjaGVdID0gY3JlYXRlQ2FjaGVIZWxwZXIoY2FjaGUsIGtleSk7XG4gICAgY29uc3Qgc3RhdGVEZXBlbmRlbmNpZXMgPSB1c2VSZWYoe30pLmN1cnJlbnQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIGNvbnN0IGZhbGxiYWNrID0gaXNVbmRlZmluZWQoZmFsbGJhY2tEYXRhKSA/IGNvbmZpZy5mYWxsYmFja1trZXldIDogZmFsbGJhY2tEYXRhO1xuICAgIGNvbnN0IGlzRXF1YWwgPSAocHJldiwgY3VycmVudCk9PntcbiAgICAgICAgbGV0IGVxdWFsID0gdHJ1ZTtcbiAgICAgICAgZm9yKGNvbnN0IF8gaW4gc3RhdGVEZXBlbmRlbmNpZXMpe1xuICAgICAgICAgICAgY29uc3QgdCA9IF87XG4gICAgICAgICAgICBpZiAoIWNvbXBhcmUoY3VycmVudFt0XSwgcHJldlt0XSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodCA9PT0gJ2RhdGEnICYmIGlzVW5kZWZpbmVkKHByZXZbdF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCByZXR1cm5lZERhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVxdWFsO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U25hcHNob3QgPSB1c2VNZW1vKCgpPT57XG4gICAgICAgIGNvbnN0IHNob3VsZFN0YXJ0UmVxdWVzdCA9ICgoKT0+e1xuICAgICAgICAgICAgaWYgKCFrZXkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghZmV0Y2hlcikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChyZXZhbGlkYXRlT25Nb3VudCkpIHJldHVybiByZXZhbGlkYXRlT25Nb3VudDtcbiAgICAgICAgICAgIC8vIElmIGl0J3MgcGF1c2VkLCB3ZSBza2lwIHJldmFsaWRhdGlvbi5cbiAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc3VzcGVuc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSgpO1xuICAgICAgICBjb25zdCBnZXRTZWxlY3RlZENhY2hlID0gKCk9PntcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gZ2V0Q2FjaGUoKTtcbiAgICAgICAgICAgIC8vIFdlIG9ubHkgc2VsZWN0IHRoZSBuZWVkZWQgZmllbGRzIGZyb20gdGhlIHN0YXRlLlxuICAgICAgICAgICAgY29uc3Qgc25hcHNob3QgPSBtZXJnZU9iamVjdHMoc3RhdGUpO1xuICAgICAgICAgICAgZGVsZXRlIHNuYXBzaG90Ll9rO1xuICAgICAgICAgICAgaWYgKCFzaG91bGRTdGFydFJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgLi4uc25hcHNob3RcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIGxldCBtZW1vcml6ZWRTbmFwc2hvdCA9IGdldFNlbGVjdGVkQ2FjaGUoKTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IGdldFNlbGVjdGVkQ2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybiBpc0VxdWFsKHNuYXBzaG90LCBtZW1vcml6ZWRTbmFwc2hvdCkgPyBtZW1vcml6ZWRTbmFwc2hvdCA6IG1lbW9yaXplZFNuYXBzaG90ID0gc25hcHNob3Q7XG4gICAgICAgIH07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFtcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIGtleVxuICAgIF0pO1xuICAgIC8vIEdldCB0aGUgY3VycmVudCBzdGF0ZSB0aGF0IFNXUiBzaG91bGQgcmV0dXJuLlxuICAgIGNvbnN0IGNhY2hlZCA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlKHVzZUNhbGxiYWNrKChjYWxsYmFjayk9PnN1YnNjcmliZUNhY2hlKGtleSwgKHByZXYsIGN1cnJlbnQpPT57XG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwocHJldiwgY3VycmVudCkpIGNhbGxiYWNrKCk7XG4gICAgICAgIH0pLCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW1xuICAgICAgICBjYWNoZSxcbiAgICAgICAga2V5XG4gICAgXSksIGdldFNuYXBzaG90LCBnZXRTbmFwc2hvdCk7XG4gICAgY29uc3QgaXNJbml0aWFsTW91bnQgPSAhaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudDtcbiAgICBjb25zdCBjYWNoZWREYXRhID0gY2FjaGVkLmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IGlzVW5kZWZpbmVkKGNhY2hlZERhdGEpID8gZmFsbGJhY2sgOiBjYWNoZWREYXRhO1xuICAgIGNvbnN0IGVycm9yID0gY2FjaGVkLmVycm9yO1xuICAgIC8vIFVzZSBhIHJlZiB0byBzdG9yZSBwcmV2aW91c2x5IHJldHVybmVkIGRhdGEuIFVzZSB0aGUgaW5pdGlhbCBkYXRhIGFzIGl0cyBpbml0aWFsIHZhbHVlLlxuICAgIGNvbnN0IGxhZ2d5RGF0YVJlZiA9IHVzZVJlZihkYXRhKTtcbiAgICBjb25zdCByZXR1cm5lZERhdGEgPSBrZWVwUHJldmlvdXNEYXRhID8gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBsYWdneURhdGFSZWYuY3VycmVudCA6IGNhY2hlZERhdGEgOiBkYXRhO1xuICAgIC8vIC0gU3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUncyBzdGFsZSBkYXRhIGZvciB0aGUgaW5pdGlhbCByZW5kZXIuXG4gICAgLy8gLSBOb3Qgc3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUgaXMgbm8gZmFsbGJhY2sgZGF0YSBhbmQgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkLlxuICAgIC8vIC0gYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkIGJ1dCBgZGF0YWAgaXMgbm90IGRlZmluZWQuXG4gICAgY29uc3Qgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uID0gKCgpPT57XG4gICAgICAgIC8vIElmIGByZXZhbGlkYXRlT25Nb3VudGAgaXMgc2V0LCB3ZSB0YWtlIHRoZSB2YWx1ZSBkaXJlY3RseS5cbiAgICAgICAgaWYgKGlzSW5pdGlhbE1vdW50ICYmICFpc1VuZGVmaW5lZChyZXZhbGlkYXRlT25Nb3VudCkpIHJldHVybiByZXZhbGlkYXRlT25Nb3VudDtcbiAgICAgICAgLy8gSWYgaXQncyBwYXVzZWQsIHdlIHNraXAgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBVbmRlciBzdXNwZW5zZSBtb2RlLCBpdCB3aWxsIGFsd2F5cyBmZXRjaCBvbiByZW5kZXIgaWYgdGhlcmUgaXMgbm9cbiAgICAgICAgLy8gc3RhbGUgZGF0YSBzbyBubyBuZWVkIHRvIHJldmFsaWRhdGUgaW1tZWRpYXRlbHkgbW91bnQgaXQgYWdhaW4uXG4gICAgICAgIC8vIElmIGRhdGEgZXhpc3RzLCBvbmx5IHJldmFsaWRhdGUgaWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyB0cnVlLlxuICAgICAgICBpZiAoc3VzcGVuc2UpIHJldHVybiBpc1VuZGVmaW5lZChkYXRhKSA/IGZhbHNlIDogY29uZmlnLnJldmFsaWRhdGVJZlN0YWxlO1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzdGFsZSBkYXRhLCB3ZSBuZWVkIHRvIHJldmFsaWRhdGUgd2hlbiBtb3VudDtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBzZXQgdG8gdHJ1ZSwgd2Ugd2lsbCBhbHdheXMgcmV2YWxpZGF0ZS5cbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpIHx8IGNvbmZpZy5yZXZhbGlkYXRlSWZTdGFsZTtcbiAgICB9KSgpO1xuICAgIC8vIFJlc29sdmUgdGhlIGRlZmF1bHQgdmFsaWRhdGluZyBzdGF0ZTpcbiAgICAvLyBJZiBpdCdzIGFibGUgdG8gdmFsaWRhdGUsIGFuZCBpdCBzaG91bGQgcmV2YWxpZGF0ZSB3aGVuIG1vdW50LCB0aGlzIHdpbGwgYmUgdHJ1ZS5cbiAgICBjb25zdCBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlID0gISEoa2V5ICYmIGZldGNoZXIgJiYgaXNJbml0aWFsTW91bnQgJiYgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKTtcbiAgICBjb25zdCBpc1ZhbGlkYXRpbmcgPSBpc1VuZGVmaW5lZChjYWNoZWQuaXNWYWxpZGF0aW5nKSA/IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgOiBjYWNoZWQuaXNWYWxpZGF0aW5nO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc0xvYWRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc0xvYWRpbmc7XG4gICAgLy8gVGhlIHJldmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBhIGNhcmVmdWxseSBjcmFmdGVkIHdyYXBwZXIgb2YgdGhlIG9yaWdpbmFsXG4gICAgLy8gYGZldGNoZXJgLCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBtYW55IGVkZ2UgY2FzZXMuXG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChyZXZhbGlkYXRlT3B0cyk9PntcbiAgICAgICAgY29uc3QgY3VycmVudEZldGNoZXIgPSBmZXRjaGVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICgha2V5IHx8ICFjdXJyZW50RmV0Y2hlciB8fCB1bm1vdW50ZWRSZWYuY3VycmVudCB8fCBnZXRDb25maWcoKS5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0RhdGE7XG4gICAgICAgIGxldCBzdGFydEF0O1xuICAgICAgICBsZXQgbG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IG9wdHMgPSByZXZhbGlkYXRlT3B0cyB8fCB7fTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gb25nb2luZyBjb25jdXJyZW50IHJlcXVlc3QsIG9yIGBkZWR1cGVgIGlzIG5vdCBzZXQsIGFcbiAgICAgICAgLy8gbmV3IHJlcXVlc3Qgc2hvdWxkIGJlIGluaXRpYXRlZC5cbiAgICAgICAgY29uc3Qgc2hvdWxkU3RhcnROZXdSZXF1ZXN0ID0gIUZFVENIW2tleV0gfHwgIW9wdHMuZGVkdXBlO1xuICAgICAgICAvKlxuICAgICAgICAgRm9yIFJlYWN0IDE3XG4gICAgICAgICBEbyB1bm1vdW50IGNoZWNrIGZvciBjYWxsczpcbiAgICAgICAgIElmIGtleSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIHJldmFsaWRhdGlvbiwgb3IgdGhlIGNvbXBvbmVudCBoYXMgYmVlblxuICAgICAgICAgdW5tb3VudGVkLCBvbGQgZGlzcGF0Y2ggYW5kIG9sZCBldmVudCBjYWxsYmFja3Mgc2hvdWxkIG5vdCB0YWtlIGFueVxuICAgICAgICAgZWZmZWN0XG5cbiAgICAgICAgRm9yIFJlYWN0IDE4XG4gICAgICAgIG9ubHkgY2hlY2sgaWYga2V5IGhhcyBjaGFuZ2VkXG4gICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdHdnL3JlYWN0LTE4L2Rpc2N1c3Npb25zLzgyXG4gICAgICAqLyBjb25zdCBjYWxsYmFja1NhZmVndWFyZCA9ICgpPT57XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF1bm1vdW50ZWRSZWYuY3VycmVudCAmJiBrZXkgPT09IGtleVJlZi5jdXJyZW50ICYmIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5ID09PSBrZXlSZWYuY3VycmVudDtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVGhlIGZpbmFsIHN0YXRlIG9iamVjdCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzLlxuICAgICAgICBjb25zdCBmaW5hbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlID0gKCk9PntcbiAgICAgICAgICAgIHNldENhY2hlKGZpbmFsU3RhdGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjbGVhbnVwU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBzdGlsbCB0aGUgc2FtZSByZXF1ZXN0IGJlZm9yZSBkZWxldGluZyBpdC5cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJbmZvID0gRkVUQ0hba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SW5mbyAmJiByZXF1ZXN0SW5mb1sxXSA9PT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBTdGFydCBmZXRjaGluZy4gQ2hhbmdlIHRoZSBgaXNWYWxpZGF0aW5nYCBzdGF0ZSwgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIC8vIEl0IGlzIGluIHRoZSBgaXNMb2FkaW5nYCBzdGF0ZSwgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgbm8gY2FjaGVkIGRhdGEuXG4gICAgICAgIC8vIFRoaXMgYnlwYXNzZXMgZmFsbGJhY2sgZGF0YSBhbmQgbGFnZ3kgZGF0YS5cbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGdldENhY2hlKCkuZGF0YSkpIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgc2V0Q2FjaGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAvLyBJZiBubyBjYWNoZSBpcyBiZWluZyByZW5kZXJlZCBjdXJyZW50bHkgKGl0IHNob3dzIGEgYmxhbmsgcGFnZSksXG4gICAgICAgICAgICAgICAgLy8gd2UgdHJpZ2dlciB0aGUgbG9hZGluZyBzbG93IGV2ZW50LlxuICAgICAgICAgICAgICAgIGlmIChjb25maWcubG9hZGluZ1RpbWVvdXQgJiYgaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZyAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25Mb2FkaW5nU2xvdyhrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSByZXF1ZXN0IGFuZCBzYXZlIHRoZSB0aW1lc3RhbXAuXG4gICAgICAgICAgICAgICAgLy8gS2V5IG11c3QgYmUgdHJ1dGh5IGlmIGVudGVyaW5nIGhlcmUuXG4gICAgICAgICAgICAgICAgRkVUQ0hba2V5XSA9IFtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZldGNoZXIoZm5BcmcpLFxuICAgICAgICAgICAgICAgICAgICBnZXRUaW1lc3RhbXAoKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbbmV3RGF0YSwgc3RhcnRBdF0gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgbmV3RGF0YSA9IGF3YWl0IG5ld0RhdGE7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXNuJ3QgaW50ZXJydXB0ZWQsIGNsZWFuIGl0IHVwIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIGRlZHVwbGljYXRpb24gaW50ZXJ2YWwuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChjbGVhbnVwU3RhdGUsIGNvbmZpZy5kZWR1cGluZ0ludGVydmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG9uZ29pbmcgcmVxdWVzdChzKSwgc3RhcnRlZCBhZnRlciB0aGUgY3VycmVudCBvbmUsXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgY3VycmVudCBvbmUgdG8gYXZvaWQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zOlxuICAgICAgICAgICAgLy8gICByZXExLS0tLS0tLS0tLS0tLS0tLS0tPnJlczEgICAgICAgIChjdXJyZW50IG9uZSlcbiAgICAgICAgICAgIC8vICAgICAgICByZXEyLS0tLS0tLS0tLS0tLS0tLT5yZXMyXG4gICAgICAgICAgICAvLyB0aGUgcmVxdWVzdCB0aGF0IGZpcmVkIGxhdGVyIHdpbGwgYWx3YXlzIGJlIGtlcHQuXG4gICAgICAgICAgICAvLyBUaGUgdGltZXN0YW1wIG1heWJlIGJlIGB1bmRlZmluZWRgIG9yIGEgbnVtYmVyXG4gICAgICAgICAgICBpZiAoIUZFVENIW2tleV0gfHwgRkVUQ0hba2V5XVsxXSAhPT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2xlYXIgZXJyb3IuXG4gICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gVU5ERUZJTkVEO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgbXV0YXRpb25zKHMpLCB0aGF0IG92ZXJsYXBwZWQgd2l0aCB0aGUgY3VycmVudCByZXZhbGlkYXRpb246XG4gICAgICAgICAgICAvLyBjYXNlIDE6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMjpcbiAgICAgICAgICAgIC8vICAgICAgICAgcmVxLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICBtdXRhdGUtLS0tLS0+ZW5kXG4gICAgICAgICAgICAvLyBjYXNlIDM6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLS0uLi4tLS0tLS0tLS0tPlxuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBpZ25vcmUgdGhlIHJldmFsaWRhdGlvbiByZXN1bHQgKHJlcykgYmVjYXVzZSBpdCdzIG5vIGxvbmdlciBmcmVzaC5cbiAgICAgICAgICAgIC8vIG1lYW53aGlsZSwgYSBuZXcgcmV2YWxpZGF0aW9uIHNob3VsZCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbXV0YXRpb24gZW5kcy5cbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uSW5mbyA9IE1VVEFUSU9OW2tleV07XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKG11dGF0aW9uSW5mbykgJiYgLy8gY2FzZSAxXG4gICAgICAgICAgICAoc3RhcnRBdCA8PSBtdXRhdGlvbkluZm9bMF0gfHwgLy8gY2FzZSAyXG4gICAgICAgICAgICBzdGFydEF0IDw9IG11dGF0aW9uSW5mb1sxXSB8fCAvLyBjYXNlIDNcbiAgICAgICAgICAgIG11dGF0aW9uSW5mb1sxXSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlZXAgY29tcGFyZSB3aXRoIHRoZSBsYXRlc3Qgc3RhdGUgdG8gYXZvaWQgZXh0cmEgcmUtcmVuZGVycy5cbiAgICAgICAgICAgIC8vIEZvciBsb2NhbCBzdGF0ZSwgY29tcGFyZSBhbmQgYXNzaWduLlxuICAgICAgICAgICAgY29uc3QgY2FjaGVEYXRhID0gZ2V0Q2FjaGUoKS5kYXRhO1xuICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbXBhcmUgZm4gY291bGQgYmUgY3VzdG9tIGZuXG4gICAgICAgICAgICAvLyBjYWNoZURhdGEgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gbmV3RGF0YSBldmVuIHdoZW4gY29tcGFyZSBmbiByZXR1cm5zIFRydWVcbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZGF0YSA9IGNvbXBhcmUoY2FjaGVEYXRhLCBuZXdEYXRhKSA/IGNhY2hlRGF0YSA6IG5ld0RhdGE7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIHRoZSBzdWNjZXNzZnVsIGNhbGxiYWNrIGlmIGl0J3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25TdWNjZXNzKG5ld0RhdGEsIGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY2xlYW51cFN0YXRlKCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICBjb25zdCB7IHNob3VsZFJldHJ5T25FcnJvciAgfSA9IGN1cnJlbnRDb25maWc7XG4gICAgICAgICAgICAvLyBOb3QgcGF1c2VkLCB3ZSBjb250aW51ZSBoYW5kbGluZyB0aGUgZXJyb3IuIE90aGVyd2lzZSwgZGlzY2FyZCBpdC5cbiAgICAgICAgICAgIGlmICghY3VycmVudENvbmZpZy5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGEgbmV3IGVycm9yLCBkb24ndCB1c2UgZGVlcCBjb21wYXJpc29uIGZvciBlcnJvcnMuXG4gICAgICAgICAgICAgICAgZmluYWxTdGF0ZS5lcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAvLyBFcnJvciBldmVudCBhbmQgcmV0cnkgbG9naWMuIE9ubHkgZm9yIHRoZSBhY3R1YWwgcmVxdWVzdCwgbm90XG4gICAgICAgICAgICAgICAgLy8gZGVkdXBlZCBvbmVzLlxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QgJiYgY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3IoZXJyLCBrZXksIGN1cnJlbnRDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmV0cnlPbkVycm9yID09PSB0cnVlIHx8IGlzRnVuY3Rpb24oc2hvdWxkUmV0cnlPbkVycm9yKSAmJiBzaG91bGRSZXRyeU9uRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGluYWN0aXZlLCBzdG9wLiBJdCB3aWxsIGF1dG8tcmV2YWxpZGF0ZSB3aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmb2N1c2luZyBvciByZWNvbm5lY3RpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXRyeWluZywgZGVkdXBsaWNhdGlvbiBpcyBhbHdheXMgZW5hYmxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3JSZXRyeShlcnIsIGtleSwgY3VycmVudENvbmZpZywgcmV2YWxpZGF0ZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50OiAob3B0cy5yZXRyeUNvdW50IHx8IDApICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkdXBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFyayBsb2FkaW5nIGFzIHN0b3BwZWQuXG4gICAgICAgIGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IGhvb2sncyBzdGF0ZS5cbiAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIC8vIGBzZXRTdGF0ZWAgaXMgaW1tdXRhYmxlLCBhbmQgYGV2ZW50c0NhbGxiYWNrYCwgYGZuQXJnYCwgYW5kXG4gICAgLy8gYGtleVZhbGlkYXRpbmdgIGFyZSBkZXBlbmRpbmcgb24gYGtleWAsIHNvIHdlIGNhbiBleGNsdWRlIHRoZW0gZnJvbVxuICAgIC8vIHRoZSBkZXBzIGFycmF5LlxuICAgIC8vXG4gICAgLy8gRklYTUU6XG4gICAgLy8gYGZuYCBhbmQgYGNvbmZpZ2AgbWlnaHQgYmUgY2hhbmdlZCBkdXJpbmcgdGhlIGxpZmVjeWNsZSxcbiAgICAvLyBidXQgdGhleSBtaWdodCBiZSBjaGFuZ2VkIGV2ZXJ5IHJlbmRlciBsaWtlIHRoaXMuXG4gICAgLy8gYHVzZVNXUigna2V5JywgKCkgPT4gZmV0Y2goJy9hcGkvJyksIHsgc3VzcGVuc2U6IHRydWUgfSlgXG4gICAgLy8gU28gd2Ugb21pdCB0aGUgdmFsdWVzIGZyb20gdGhlIGRlcHMgYXJyYXlcbiAgICAvLyBldmVuIHRob3VnaCBpdCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW1xuICAgICAgICBrZXksXG4gICAgICAgIGNhY2hlXG4gICAgXSk7XG4gICAgLy8gU2ltaWxhciB0byB0aGUgZ2xvYmFsIG11dGF0ZSBidXQgYm91bmQgdG8gdGhlIGN1cnJlbnQgY2FjaGUgYW5kIGtleS5cbiAgICAvLyBgY2FjaGVgIGlzbid0IGFsbG93ZWQgdG8gY2hhbmdlIGR1cmluZyB0aGUgbGlmZWN5Y2xlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBjb25zdCBib3VuZE11dGF0ZSA9IHVzZUNhbGxiYWNrKC8vIFVzZSBjYWxsYmFjayB0byBtYWtlIHN1cmUgYGtleVJlZi5jdXJyZW50YCByZXR1cm5zIGxhdGVzdCByZXN1bHQgZXZlcnkgdGltZVxuICAgICguLi5hcmdzKT0+e1xuICAgICAgICByZXR1cm4gaW50ZXJuYWxNdXRhdGUoY2FjaGUsIGtleVJlZi5jdXJyZW50LCAuLi5hcmdzKTtcbiAgICB9LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIC8vIFRoZSBsb2dpYyBmb3IgdXBkYXRpbmcgcmVmcy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGZldGNoZXJSZWYuY3VycmVudCA9IGZldGNoZXI7XG4gICAgICAgIGNvbmZpZ1JlZi5jdXJyZW50ID0gY29uZmlnO1xuICAgICAgICAvLyBIYW5kbGUgbGFnZ3kgZGF0YSB1cGRhdGVzLiBJZiB0aGVyZSdzIGNhY2hlZCBkYXRhIG9mIHRoZSBjdXJyZW50IGtleSxcbiAgICAgICAgLy8gaXQnbGwgYmUgdGhlIGNvcnJlY3QgcmVmZXJlbmNlLlxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGNhY2hlZERhdGEpKSB7XG4gICAgICAgICAgICBsYWdneURhdGFSZWYuY3VycmVudCA9IGNhY2hlZERhdGE7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBZnRlciBtb3VudGVkIG9yIGtleSBjaGFuZ2VkLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc29mdFJldmFsaWRhdGUgPSByZXZhbGlkYXRlLmJpbmQoVU5ERUZJTkVELCBXSVRIX0RFRFVQRSk7XG4gICAgICAgIC8vIEV4cG9zZSByZXZhbGlkYXRvcnMgdG8gZ2xvYmFsIGV2ZW50IGxpc3RlbmVycy4gU28gd2UgY2FuIHRyaWdnZXJcbiAgICAgICAgLy8gcmV2YWxpZGF0aW9uIGZyb20gdGhlIG91dHNpZGUuXG4gICAgICAgIGxldCBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ID0gMDtcbiAgICAgICAgY29uc3Qgb25SZXZhbGlkYXRlID0gKHR5cGUpPT57XG4gICAgICAgICAgICBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLkZPQ1VTX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uRm9jdXMgJiYgbm93ID4gbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSBub3cgKyBnZXRDb25maWcoKS5mb2N1c1Rocm90dGxlSW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuUkVDT05ORUNUX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPblJlY29ubmVjdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuTVVUQVRFX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdW5zdWJFdmVudHMgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIEVWRU5UX1JFVkFMSURBVE9SUywgb25SZXZhbGlkYXRlKTtcbiAgICAgICAgLy8gTWFyayB0aGUgY29tcG9uZW50IGFzIG1vdW50ZWQgYW5kIHVwZGF0ZSBjb3JyZXNwb25kaW5nIHJlZnMuXG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIGtleVJlZi5jdXJyZW50ID0ga2V5O1xuICAgICAgICBpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gS2VlcCB0aGUgb3JpZ2luYWwga2V5IGluIHRoZSBjYWNoZS5cbiAgICAgICAgc2V0Q2FjaGUoe1xuICAgICAgICAgICAgX2s6IGZuQXJnXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUcmlnZ2VyIGEgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEZWxheSB0aGUgcmV2YWxpZGF0ZSBpZiB3ZSBoYXZlIGRhdGEgdG8gcmV0dXJuIHNvIHdlIHdvbid0IGJsb2NrXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nLlxuICAgICAgICAgICAgICAgIHJBRihzb2Z0UmV2YWxpZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICAvLyBNYXJrIGl0IGFzIHVubW91bnRlZC5cbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHVuc3ViRXZlbnRzKCk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBQb2xsaW5nXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBsZXQgdGltZXI7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIHBhc3NlZCBpbnRlcnZhbFxuICAgICAgICAgICAgLy8gLi4ub3IgaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSB1cGRhdGVkIGRhdGEgdG8gZ2V0IHRoZSBpbnRlcnZhbFxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBpc0Z1bmN0aW9uKHJlZnJlc2hJbnRlcnZhbCkgPyByZWZyZXNoSW50ZXJ2YWwoZGF0YSkgOiByZWZyZXNoSW50ZXJ2YWw7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHN0YXJ0IHRoZSBuZXh0IGludGVydmFsIGlmIGByZWZyZXNoSW50ZXJ2YWxgIGlzIG5vdCAwLCBhbmQ6XG4gICAgICAgICAgICAvLyAtIGBmb3JjZWAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHBvbGxpbmdcbiAgICAgICAgICAgIC8vIC0gb3IgYHRpbWVyYCBpcyBub3QgMCwgd2hpY2ggbWVhbnMgdGhlIGVmZmVjdCB3YXNuJ3QgY2FuY2VsZWRcbiAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiB0aW1lciAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY3V0ZSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIE9LIHRvIGV4ZWN1dGU6XG4gICAgICAgICAgICAvLyBPbmx5IHJldmFsaWRhdGUgd2hlbiB0aGUgcGFnZSBpcyB2aXNpYmxlLCBvbmxpbmUsIGFuZCBub3QgZXJyb3JlZC5cbiAgICAgICAgICAgIGlmICghZ2V0Q2FjaGUoKS5lcnJvciAmJiAocmVmcmVzaFdoZW5IaWRkZW4gfHwgZ2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkpICYmIChyZWZyZXNoV2hlbk9mZmxpbmUgfHwgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXZhbGlkYXRlKFdJVEhfREVEVVBFKS50aGVuKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGUgbmV4dCBpbnRlcnZhbCB0byBjaGVjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmICh0aW1lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgdGltZXIgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbCxcbiAgICAgICAgcmVmcmVzaFdoZW5IaWRkZW4sXG4gICAgICAgIHJlZnJlc2hXaGVuT2ZmbGluZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gRGlzcGxheSBkZWJ1ZyBpbmZvIGluIFJlYWN0IERldlRvb2xzLlxuICAgIHVzZURlYnVnVmFsdWUocmV0dXJuZWREYXRhKTtcbiAgICAvLyBJbiBTdXNwZW5zZSBtb2RlLCB3ZSBjYW4ndCByZXR1cm4gdGhlIGVtcHR5IGBkYXRhYCBzdGF0ZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBgZXJyb3JgLCB0aGUgYGVycm9yYCBuZWVkcyB0byBiZSB0aHJvd24gdG8gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGBlcnJvcmAsIHRoZSBgcmV2YWxpZGF0aW9uYCBwcm9taXNlIG5lZWRzIHRvIGJlIHRocm93biB0b1xuICAgIC8vIHRoZSBzdXNwZW5zZSBib3VuZGFyeS5cbiAgICBpZiAoc3VzcGVuc2UgJiYgaXNVbmRlZmluZWQoZGF0YSkgJiYga2V5KSB7XG4gICAgICAgIC8vIFNXUiBzaG91bGQgdGhyb3cgd2hlbiB0cnlpbmcgdG8gdXNlIFN1c3BlbnNlIG9uIHRoZSBzZXJ2ZXIgd2l0aCBSZWFjdCAxOCxcbiAgICAgICAgLy8gd2l0aG91dCBwcm92aWRpbmcgYW55IGluaXRpYWwgZGF0YS4gU2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTgzMlxuICAgICAgICBpZiAoIUlTX1JFQUNUX0xFR0FDWSAmJiBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFsbGJhY2sgZGF0YSBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHN1c3BlbnNlIGluIFNTUi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbHdheXMgdXBkYXRlIGZldGNoZXIgYW5kIGNvbmZpZyByZWZzIGV2ZW4gd2l0aCB0aGUgU3VzcGVuc2UgbW9kZS5cbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHRocm93IGlzVW5kZWZpbmVkKGVycm9yKSA/IHJldmFsaWRhdGUoV0lUSF9ERURVUEUpIDogZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG11dGF0ZTogYm91bmRNdXRhdGUsXG4gICAgICAgIGdldCBkYXRhICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkRGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVycm9yICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzVmFsaWRhdGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc1ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRhdGluZztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzTG9hZGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGluZztcbiAgICAgICAgfVxuICAgIH07XG59O1xuY29uc3QgU1dSQ29uZmlnID0gT0JKRUNULmRlZmluZVByb3BlcnR5KFNXUkNvbmZpZyQxLCAnZGVmYXVsdFZhbHVlJywge1xuICAgIHZhbHVlOiBkZWZhdWx0Q29uZmlnXG59KTtcbmNvbnN0IHVuc3RhYmxlX3NlcmlhbGl6ZSA9IChrZXkpPT5zZXJpYWxpemUoa2V5KVswXTtcbi8qKlxuICogQSBob29rIHRvIGZldGNoIGRhdGEuXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9zd3IudmVyY2VsLmFwcFxuICogQGV4YW1wbGVcbiAqIGBgYGpzeFxuICogaW1wb3J0IHVzZVNXUiBmcm9tICdzd3InXG4gKiBmdW5jdGlvbiBQcm9maWxlKCkge1xuICogICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSB1c2VTV1IoJy9hcGkvdXNlcicsIGZldGNoZXIpXG4gKiAgIGlmIChlcnJvcikgcmV0dXJuIDxkaXY+ZmFpbGVkIHRvIGxvYWQ8L2Rpdj5cbiAqICAgaWYgKCFkYXRhKSByZXR1cm4gPGRpdj5sb2FkaW5nLi4uPC9kaXY+XG4gKiAgIHJldHVybiA8ZGl2PmhlbGxvIHtkYXRhLm5hbWV9ITwvZGl2PlxuICogfVxuICogYGBgXG4gKi8gdmFyIHVzZVNXUiA9IHdpdGhBcmdzKHVzZVNXUkhhbmRsZXIpO1xuXG4vLyB1c2VTV1JcblxuZXhwb3J0IHsgU1dSQ29uZmlnLCB1c2VTV1IgYXMgZGVmYXVsdCwgdW5zdGFibGVfc2VyaWFsaXplIH07XG4iLCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTV1JDb25maWcgfSBmcm9tIFwic3dyXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTV1JIb29rc0NvbmZpZygpIHtcbiAgICB2YXIgc3dyQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgdmFyIHZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBtdXRhdGU6IHN3ckNvbmZpZy5tdXRhdGUsIGNhY2hlOiBzd3JDb25maWcuY2FjaGUgfSk7IH0sIFtzd3JDb25maWcubXV0YXRlLCBzd3JDb25maWcuY2FjaGVdKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VTV1JIb29rc0NvbmZpZy5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG9nZ2xlKGluaXRpYWxWYWx1ZSkge1xuICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgeyBpbml0aWFsVmFsdWUgPSBmYWxzZTsgfVxuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZShpbml0aWFsVmFsdWUpLCAyKSwgdmFsdWUgPSBfYVswXSwgc2V0VmFsdWUgPSBfYVsxXTtcbiAgICB2YXIgdG9nZ2xlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShmdW5jdGlvbiAocHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlVG9nZ2xlLmpzLm1hcCIsIi8qKiEgXG4gKiBob3RrZXlzLWpzIHYzLjkuMyBcbiAqIEEgc2ltcGxlIG1pY3JvLWxpYnJhcnkgZm9yIGRlZmluaW5nIGFuZCBkaXNwYXRjaGluZyBrZXlib2FyZCBzaG9ydGN1dHMuIEl0IGhhcyBubyBkZXBlbmRlbmNpZXMuIFxuICogXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjIga2Vubnkgd29uZyA8d293b2hvb0BxcS5jb20+IFxuICogaHR0cDovL2pheXdjamxvdmUuZ2l0aHViLmlvL2hvdGtleXMgXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgXG4gKi9cblxudmFyIGlzZmYgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyA/IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgPiAwIDogZmFsc2U7IC8vIOe7keWumuS6i+S7tlxuXG5mdW5jdGlvbiBhZGRFdmVudChvYmplY3QsIGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpIHtcbiAgaWYgKG9iamVjdC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG1ldGhvZCwgdXNlQ2FwdHVyZSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0LmF0dGFjaEV2ZW50KSB7XG4gICAgb2JqZWN0LmF0dGFjaEV2ZW50KFwib25cIi5jb25jYXQoZXZlbnQpLCBmdW5jdGlvbiAoKSB7XG4gICAgICBtZXRob2Qod2luZG93LmV2ZW50KTtcbiAgICB9KTtcbiAgfVxufSAvLyDkv67ppbDplK7ovazmjaLmiJDlr7nlupTnmoTplK7noIFcblxuXG5mdW5jdGlvbiBnZXRNb2RzKG1vZGlmaWVyLCBrZXkpIHtcbiAgdmFyIG1vZHMgPSBrZXkuc2xpY2UoMCwga2V5Lmxlbmd0aCAtIDEpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kcy5sZW5ndGg7IGkrKykge1xuICAgIG1vZHNbaV0gPSBtb2RpZmllclttb2RzW2ldLnRvTG93ZXJDYXNlKCldO1xuICB9XG5cbiAgcmV0dXJuIG1vZHM7XG59IC8vIOWkhOeQhuS8oOeahGtleeWtl+espuS4sui9rOaNouaIkOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGdldEtleXMoa2V5KSB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykga2V5ID0gJyc7XG4gIGtleSA9IGtleS5yZXBsYWNlKC9cXHMvZywgJycpOyAvLyDljLnphY3ku7vkvZXnqbrnmb3lrZfnrKYs5YyF5ous56m65qC844CB5Yi26KGo56ym44CB5o2i6aG156ym562J562JXG5cbiAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJywnKTsgLy8g5ZCM5pe26K6+572u5aSa5Liq5b+r5o236ZSu77yM5LulJywn5YiG5YmyXG5cbiAgdmFyIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7IC8vIOW/q+aNt+mUruWPr+iDveWMheWQqycsJ++8jOmcgOeJueauiuWkhOeQhlxuXG4gIGZvciAoOyBpbmRleCA+PSAwOykge1xuICAgIGtleXNbaW5kZXggLSAxXSArPSAnLCc7XG4gICAga2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn0gLy8g5q+U6L6D5L+u6aWw6ZSu55qE5pWw57uEXG5cblxuZnVuY3Rpb24gY29tcGFyZUFycmF5KGExLCBhMikge1xuICB2YXIgYXJyMSA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMSA6IGEyO1xuICB2YXIgYXJyMiA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMiA6IGExO1xuICB2YXIgaXNJbmRleCA9IHRydWU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycjIuaW5kZXhPZihhcnIxW2ldKSA9PT0gLTEpIGlzSW5kZXggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc0luZGV4O1xufVxuXG52YXIgX2tleU1hcCA9IHtcbiAgYmFja3NwYWNlOiA4LFxuICB0YWI6IDksXG4gIGNsZWFyOiAxMixcbiAgZW50ZXI6IDEzLFxuICByZXR1cm46IDEzLFxuICBlc2M6IDI3LFxuICBlc2NhcGU6IDI3LFxuICBzcGFjZTogMzIsXG4gIGxlZnQ6IDM3LFxuICB1cDogMzgsXG4gIHJpZ2h0OiAzOSxcbiAgZG93bjogNDAsXG4gIGRlbDogNDYsXG4gIGRlbGV0ZTogNDYsXG4gIGluczogNDUsXG4gIGluc2VydDogNDUsXG4gIGhvbWU6IDM2LFxuICBlbmQ6IDM1LFxuICBwYWdldXA6IDMzLFxuICBwYWdlZG93bjogMzQsXG4gIGNhcHNsb2NrOiAyMCxcbiAgbnVtXzA6IDk2LFxuICBudW1fMTogOTcsXG4gIG51bV8yOiA5OCxcbiAgbnVtXzM6IDk5LFxuICBudW1fNDogMTAwLFxuICBudW1fNTogMTAxLFxuICBudW1fNjogMTAyLFxuICBudW1fNzogMTAzLFxuICBudW1fODogMTA0LFxuICBudW1fOTogMTA1LFxuICBudW1fbXVsdGlwbHk6IDEwNixcbiAgbnVtX2FkZDogMTA3LFxuICBudW1fZW50ZXI6IDEwOCxcbiAgbnVtX3N1YnRyYWN0OiAxMDksXG4gIG51bV9kZWNpbWFsOiAxMTAsXG4gIG51bV9kaXZpZGU6IDExMSxcbiAgJ+KHqic6IDIwLFxuICAnLCc6IDE4OCxcbiAgJy4nOiAxOTAsXG4gICcvJzogMTkxLFxuICAnYCc6IDE5MixcbiAgJy0nOiBpc2ZmID8gMTczIDogMTg5LFxuICAnPSc6IGlzZmYgPyA2MSA6IDE4NyxcbiAgJzsnOiBpc2ZmID8gNTkgOiAxODYsXG4gICdcXCcnOiAyMjIsXG4gICdbJzogMjE5LFxuICAnXSc6IDIyMSxcbiAgJ1xcXFwnOiAyMjBcbn07IC8vIE1vZGlmaWVyIEtleXNcblxudmFyIF9tb2RpZmllciA9IHtcbiAgLy8gc2hpZnRLZXlcbiAgJ+KHpyc6IDE2LFxuICBzaGlmdDogMTYsXG4gIC8vIGFsdEtleVxuICAn4oylJzogMTgsXG4gIGFsdDogMTgsXG4gIG9wdGlvbjogMTgsXG4gIC8vIGN0cmxLZXlcbiAgJ+KMgyc6IDE3LFxuICBjdHJsOiAxNyxcbiAgY29udHJvbDogMTcsXG4gIC8vIG1ldGFLZXlcbiAgJ+KMmCc6IDkxLFxuICBjbWQ6IDkxLFxuICBjb21tYW5kOiA5MVxufTtcbnZhciBtb2RpZmllck1hcCA9IHtcbiAgMTY6ICdzaGlmdEtleScsXG4gIDE4OiAnYWx0S2V5JyxcbiAgMTc6ICdjdHJsS2V5JyxcbiAgOTE6ICdtZXRhS2V5JyxcbiAgc2hpZnRLZXk6IDE2LFxuICBjdHJsS2V5OiAxNyxcbiAgYWx0S2V5OiAxOCxcbiAgbWV0YUtleTogOTFcbn07XG52YXIgX21vZHMgPSB7XG4gIDE2OiBmYWxzZSxcbiAgMTg6IGZhbHNlLFxuICAxNzogZmFsc2UsXG4gIDkxOiBmYWxzZVxufTtcbnZhciBfaGFuZGxlcnMgPSB7fTsgLy8gRjF+RjEyIHNwZWNpYWwga2V5XG5cbmZvciAodmFyIGsgPSAxOyBrIDwgMjA7IGsrKykge1xuICBfa2V5TWFwW1wiZlwiLmNvbmNhdChrKV0gPSAxMTEgKyBrO1xufVxuXG52YXIgX2Rvd25LZXlzID0gW107IC8vIOiusOW9leaRgeS4i+eahOe7keWumumUrlxuXG52YXIgd2luTGlzdGVuZEZvY3VzID0gZmFsc2U7IC8vIHdpbmRvd+aYr+WQpuW3sue7j+ebkeWQrOS6hmZvY3Vz5LqL5Lu2XG5cbnZhciBfc2NvcGUgPSAnYWxsJzsgLy8g6buY6K6k54Ot6ZSu6IyD5Zu0XG5cbnZhciBlbGVtZW50SGFzQmluZEV2ZW50ID0gW107IC8vIOW3sue7keWumuS6i+S7tueahOiKgueCueiusOW9lVxuLy8g6L+U5Zue6ZSu56CBXG5cbnZhciBjb2RlID0gZnVuY3Rpb24gY29kZSh4KSB7XG4gIHJldHVybiBfa2V5TWFwW3gudG9Mb3dlckNhc2UoKV0gfHwgX21vZGlmaWVyW3gudG9Mb3dlckNhc2UoKV0gfHwgeC50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCk7XG59OyAvLyDorr7nva7ojrflj5blvZPliY3ojIPlm7TvvIjpu5jorqTkuLon5omA5pyJJ++8iVxuXG5cbmZ1bmN0aW9uIHNldFNjb3BlKHNjb3BlKSB7XG4gIF9zY29wZSA9IHNjb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5blvZPliY3ojIPlm7RcblxuXG5mdW5jdGlvbiBnZXRTY29wZSgpIHtcbiAgcmV0dXJuIF9zY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5pGB5LiL57uR5a6a6ZSu55qE6ZSu5YC8XG5cblxuZnVuY3Rpb24gZ2V0UHJlc3NlZEtleUNvZGVzKCkge1xuICByZXR1cm4gX2Rvd25LZXlzLnNsaWNlKDApO1xufSAvLyDooajljZXmjqfku7bmjqfku7bliKTmlq0g6L+U5ZueIEJvb2xlYW5cbi8vIGhvdGtleSBpcyBlZmZlY3RpdmUgb25seSB3aGVuIGZpbHRlciByZXR1cm4gdHJ1ZVxuXG5cbmZ1bmN0aW9uIGZpbHRlcihldmVudCkge1xuICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gIHZhciB0YWdOYW1lID0gdGFyZ2V0LnRhZ05hbWU7XG4gIHZhciBmbGFnID0gdHJ1ZTsgLy8gaWdub3JlOiBpc0NvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnLCA8aW5wdXQ+IGFuZCA8dGV4dGFyZWE+IHdoZW4gcmVhZE9ubHkgc3RhdGUgaXMgZmFsc2UsIDxzZWxlY3Q+XG5cbiAgaWYgKHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSB8fCAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8IHRhZ05hbWUgPT09ICdTRUxFQ1QnKSAmJiAhdGFyZ2V0LnJlYWRPbmx5KSB7XG4gICAgZmxhZyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZsYWc7XG59IC8vIOWIpOaWreaRgeS4i+eahOmUruaYr+WQpuS4uuafkOS4qumUru+8jOi/lOWbnnRydWXmiJbogIVmYWxzZVxuXG5cbmZ1bmN0aW9uIGlzUHJlc3NlZChrZXlDb2RlKSB7XG4gIGlmICh0eXBlb2Yga2V5Q29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICBrZXlDb2RlID0gY29kZShrZXlDb2RlKTsgLy8g6L2s5o2i5oiQ6ZSu56CBXG4gIH1cblxuICByZXR1cm4gX2Rvd25LZXlzLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xO1xufSAvLyDlvqrnjq/liKDpmaRoYW5kbGVyc+S4reeahOaJgOaciSBzY29wZSjojIPlm7QpXG5cblxuZnVuY3Rpb24gZGVsZXRlU2NvcGUoc2NvcGUsIG5ld1Njb3BlKSB7XG4gIHZhciBoYW5kbGVycztcbiAgdmFyIGk7IC8vIOayoeacieaMh+WumnNjb3Bl77yM6I635Y+Wc2NvcGVcblxuICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG5cbiAgZm9yICh2YXIga2V5IGluIF9oYW5kbGVycykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2hhbmRsZXJzLCBrZXkpKSB7XG4gICAgICBoYW5kbGVycyA9IF9oYW5kbGVyc1trZXldO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOykge1xuICAgICAgICBpZiAoaGFuZGxlcnNbaV0uc2NvcGUgPT09IHNjb3BlKSBoYW5kbGVycy5zcGxpY2UoaSwgMSk7ZWxzZSBpKys7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIOWmguaenHNjb3Bl6KKr5Yig6Zmk77yM5bCGc2NvcGXph43nva7kuLphbGxcblxuXG4gIGlmIChnZXRTY29wZSgpID09PSBzY29wZSkgc2V0U2NvcGUobmV3U2NvcGUgfHwgJ2FsbCcpO1xufSAvLyDmuIXpmaTkv67ppbDplK5cblxuXG5mdW5jdGlvbiBjbGVhck1vZGlmaWVyKGV2ZW50KSB7XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlO1xuXG4gIHZhciBpID0gX2Rvd25LZXlzLmluZGV4T2Yoa2V5KTsgLy8g5LuO5YiX6KGo5Lit5riF6Zmk5oyJ5Y6L6L+H55qE6ZSuXG5cblxuICBpZiAoaSA+PSAwKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZShpLCAxKTtcbiAgfSAvLyDnibnmrorlpITnkIYgY21tYW5kIOmUru+8jOWcqCBjbW1hbmQg57uE5ZCI5b+r5o236ZSuIGtleXVwIOWPquaJp+ihjOS4gOasoeeahOmXrumimFxuXG5cbiAgaWYgKGV2ZW50LmtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ21ldGEnKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZSgwLCBfZG93bktleXMubGVuZ3RoKTtcbiAgfSAvLyDkv67ppbDplK4gc2hpZnRLZXkgYWx0S2V5IGN0cmxLZXkgKGNvbW1hbmR8fG1ldGFLZXkpIOa4hemZpFxuXG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gZmFsc2U7IC8vIOWwhuS/rumlsOmUrumHjee9ruS4umZhbHNlXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVuYmluZChrZXlzSW5mbykge1xuICAvLyB1bmJpbmQoKSwgdW5iaW5kIGFsbCBrZXlzXG4gIGlmICgha2V5c0luZm8pIHtcbiAgICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGRlbGV0ZSBfaGFuZGxlcnNba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXNJbmZvKSkge1xuICAgIC8vIHN1cHBvcnQgbGlrZSA6IHVuYmluZChbe2tleTogJ2N0cmwrYScsIHNjb3BlOiAnczEnfSwge2tleTogJ2N0cmwtYScsIHNjb3BlOiAnczInLCBzcGxpdEtleTogJy0nfV0pXG4gICAga2V5c0luZm8uZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuICAgICAgaWYgKGluZm8ua2V5KSBlYWNoVW5iaW5kKGluZm8pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgdW5iaW5kKHtrZXk6ICdjdHJsK2EsIGN0cmwrYicsIHNjb3BlOidhYmMnfSlcbiAgICBpZiAoa2V5c0luZm8ua2V5KSBlYWNoVW5iaW5kKGtleXNJbmZvKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBvbGQgbWV0aG9kXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBzY29wZSA9IGFyZ3NbMF0sXG4gICAgICAgIG1ldGhvZCA9IGFyZ3NbMV07XG5cbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtZXRob2QgPSBzY29wZTtcbiAgICAgIHNjb3BlID0gJyc7XG4gICAgfVxuXG4gICAgZWFjaFVuYmluZCh7XG4gICAgICBrZXk6IGtleXNJbmZvLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBzcGxpdEtleTogJysnXG4gICAgfSk7XG4gIH1cbn0gLy8g6Kej6Zmk57uR5a6a5p+Q5Liq6IyD5Zu055qE5b+r5o236ZSuXG5cblxudmFyIGVhY2hVbmJpbmQgPSBmdW5jdGlvbiBlYWNoVW5iaW5kKF9yZWYpIHtcbiAgdmFyIGtleSA9IF9yZWYua2V5LFxuICAgICAgc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgbWV0aG9kID0gX3JlZi5tZXRob2QsXG4gICAgICBfcmVmJHNwbGl0S2V5ID0gX3JlZi5zcGxpdEtleSxcbiAgICAgIHNwbGl0S2V5ID0gX3JlZiRzcGxpdEtleSA9PT0gdm9pZCAwID8gJysnIDogX3JlZiRzcGxpdEtleTtcbiAgdmFyIG11bHRpcGxlS2V5cyA9IGdldEtleXMoa2V5KTtcbiAgbXVsdGlwbGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKG9yaWdpbktleSkge1xuICAgIHZhciB1bmJpbmRLZXlzID0gb3JpZ2luS2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICB2YXIgbGVuID0gdW5iaW5kS2V5cy5sZW5ndGg7XG4gICAgdmFyIGxhc3RLZXkgPSB1bmJpbmRLZXlzW2xlbiAtIDFdO1xuICAgIHZhciBrZXlDb2RlID0gbGFzdEtleSA9PT0gJyonID8gJyonIDogY29kZShsYXN0S2V5KTtcbiAgICBpZiAoIV9oYW5kbGVyc1trZXlDb2RlXSkgcmV0dXJuOyAvLyDliKTmlq3mmK/lkKbkvKDlhaXojIPlm7TvvIzmsqHmnInlsLHojrflj5bojIPlm7RcblxuICAgIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICB2YXIgbW9kcyA9IGxlbiA+IDEgPyBnZXRNb2RzKF9tb2RpZmllciwgdW5iaW5kS2V5cykgOiBbXTtcbiAgICBfaGFuZGxlcnNba2V5Q29kZV0gPSBfaGFuZGxlcnNba2V5Q29kZV0uZmlsdGVyKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgIC8vIOmAmui/h+WHveaVsOWIpOaWre+8jOaYr+WQpuino+mZpOe7keWumu+8jOWHveaVsOebuOetieebtOaOpei/lOWbnlxuICAgICAgdmFyIGlzTWF0Y2hpbmdNZXRob2QgPSBtZXRob2QgPyByZWNvcmQubWV0aG9kID09PSBtZXRob2QgOiB0cnVlO1xuICAgICAgcmV0dXJuICEoaXNNYXRjaGluZ01ldGhvZCAmJiByZWNvcmQuc2NvcGUgPT09IHNjb3BlICYmIGNvbXBhcmVBcnJheShyZWNvcmQubW9kcywgbW9kcykpO1xuICAgIH0pO1xuICB9KTtcbn07IC8vIOWvueebkeWQrOWvueW6lOW/q+aNt+mUrueahOWbnuiwg+WHveaVsOi/m+ihjOWkhOeQhlxuXG5cbmZ1bmN0aW9uIGV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlciwgc2NvcGUsIGVsZW1lbnQpIHtcbiAgaWYgKGhhbmRsZXIuZWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtb2RpZmllcnNNYXRjaDsgLy8g55yL5a6D5piv5ZCm5Zyo5b2T5YmN6IyD5Zu0XG5cbiAgaWYgKGhhbmRsZXIuc2NvcGUgPT09IHNjb3BlIHx8IGhhbmRsZXIuc2NvcGUgPT09ICdhbGwnKSB7XG4gICAgLy8g5qOA5p+l5piv5ZCm5Yy56YWN5L+u6aWw56ym77yI5aaC5p6c5pyJ6L+U5ZuedHJ1Ze+8iVxuICAgIG1vZGlmaWVyc01hdGNoID0gaGFuZGxlci5tb2RzLmxlbmd0aCA+IDA7XG5cbiAgICBmb3IgKHZhciB5IGluIF9tb2RzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCB5KSkge1xuICAgICAgICBpZiAoIV9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA+IC0xIHx8IF9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA9PT0gLTEpIHtcbiAgICAgICAgICBtb2RpZmllcnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyDosIPnlKjlpITnkIbnqIvluo/vvIzlpoLmnpzmmK/kv67ppbDplK7kuI3lgZrlpITnkIZcblxuXG4gICAgaWYgKGhhbmRsZXIubW9kcy5sZW5ndGggPT09IDAgJiYgIV9tb2RzWzE2XSAmJiAhX21vZHNbMThdICYmICFfbW9kc1sxN10gJiYgIV9tb2RzWzkxXSB8fCBtb2RpZmllcnNNYXRjaCB8fCBoYW5kbGVyLnNob3J0Y3V0ID09PSAnKicpIHtcbiAgICAgIGlmIChoYW5kbGVyLm1ldGhvZChldmVudCwgaGFuZGxlcikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNlIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDlpITnkIZrZXlkb3du5LqL5Lu2XG5cblxuZnVuY3Rpb24gZGlzcGF0Y2goZXZlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIGFzdGVyaXNrID0gX2hhbmRsZXJzWycqJ107XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlOyAvLyDooajljZXmjqfku7bov4fmu6Qg6buY6K6k6KGo5Y2V5o6n5Lu25LiN6Kem5Y+R5b+r5o236ZSuXG5cbiAgaWYgKCFob3RrZXlzLmZpbHRlci5jYWxsKHRoaXMsIGV2ZW50KSkgcmV0dXJuOyAvLyBHZWNrbyhGaXJlZm94KeeahGNvbW1hbmTplK7lgLwyMjTvvIzlnKhXZWJraXQoQ2hyb21lKeS4reS/neaMgeS4gOiHtFxuICAvLyBXZWJraXTlt6blj7MgY29tbWFuZCDplK7lgLzkuI3kuIDmoLdcblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG4gIC8qKlxuICAgKiBDb2xsZWN0IGJvdW5kIGtleXNcbiAgICogSWYgYW4gSW5wdXQgTWV0aG9kIEVkaXRvciBpcyBwcm9jZXNzaW5nIGtleSBpbnB1dCBhbmQgdGhlIGV2ZW50IGlzIGtleWRvd24sIHJldHVybiAyMjkuXG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI1MDQzOTM0L2lzLWl0LW9rLXRvLWlnbm9yZS1rZXlkb3duLWV2ZW50cy13aXRoLWtleWNvZGUtMjI5XG4gICAqIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1kb20vMjAxMEp1bFNlcC9hdHQtMDE4Mi9rZXlDb2RlLXNwZWMuaHRtbFxuICAgKi9cblxuICBpZiAoX2Rvd25LZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiYga2V5ICE9PSAyMjkpIF9kb3duS2V5cy5wdXNoKGtleSk7XG4gIC8qKlxuICAgKiBKZXN0IHRlc3QgY2FzZXMgYXJlIHJlcXVpcmVkLlxuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqL1xuXG4gIFsnY3RybEtleScsICdhbHRLZXknLCAnc2hpZnRLZXknLCAnbWV0YUtleSddLmZvckVhY2goZnVuY3Rpb24gKGtleU5hbWUpIHtcbiAgICB2YXIga2V5TnVtID0gbW9kaWZpZXJNYXBba2V5TmFtZV07XG5cbiAgICBpZiAoZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKGtleU51bSk7XG4gICAgfSBlbHNlIGlmICghZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA+IC0xKSB7XG4gICAgICBfZG93bktleXMuc3BsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSksIDEpO1xuICAgIH0gZWxzZSBpZiAoa2V5TmFtZSA9PT0gJ21ldGFLZXknICYmIGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRml4IGlmIENvbW1hbmQgaXMgcHJlc3NlZDpcbiAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAqL1xuICAgICAgaWYgKCEoZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IF9kb3duS2V5cy5zbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IHRydWU7IC8vIOWwhueJueauiuWtl+espueahGtleeazqOWGjOWIsCBob3RrZXlzIOS4ilxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFhc3RlcmlzaykgcmV0dXJuO1xuICB9IC8vIOWwhiBtb2RpZmllck1hcCDph4zpnaLnmoTkv67ppbDplK7nu5HlrprliLAgZXZlbnQg5LitXG5cblxuICBmb3IgKHZhciBlIGluIF9tb2RzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgZSkpIHtcbiAgICAgIF9tb2RzW2VdID0gZXZlbnRbbW9kaWZpZXJNYXBbZV1dO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pheXdjamxvdmUvaG90a2V5cy9wdWxsLzEyOVxuICAgKiBUaGlzIHNvbHZlcyB0aGUgaXNzdWUgaW4gRmlyZWZveCBvbiBXaW5kb3dzIHdoZXJlIGhvdGtleXMgY29ycmVzcG9uZGluZyB0byBzcGVjaWFsIGNoYXJhY3RlcnMgd291bGQgbm90IHRyaWdnZXIuXG4gICAqIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBjdHJsK2FsdCttIG9uIGEgU3dlZGlzaCBrZXlib2FyZCB3aGljaCBpcyB1c2VkIHRvIHR5cGUgzrwuXG4gICAqIEJyb3dzZXIgc3VwcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1rZXlib2FyZGV2ZW50LWdldG1vZGlmaWVyc3RhdGVcbiAgICovXG5cblxuICBpZiAoZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSAmJiAhKGV2ZW50LmFsdEtleSAmJiAhZXZlbnQuY3RybEtleSkgJiYgZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSgnQWx0R3JhcGgnKSkge1xuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxNykgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxNyk7XG4gICAgfVxuXG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE4KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE4KTtcbiAgICB9XG5cbiAgICBfbW9kc1sxN10gPSB0cnVlO1xuICAgIF9tb2RzWzE4XSA9IHRydWU7XG4gIH0gLy8g6I635Y+W6IyD5Zu0IOm7mOiupOS4uiBgYWxsYFxuXG5cbiAgdmFyIHNjb3BlID0gZ2V0U2NvcGUoKTsgLy8g5a+55Lu75L2V5b+r5o236ZSu6YO96ZyA6KaB5YGa55qE5aSE55CGXG5cbiAgaWYgKGFzdGVyaXNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3Rlcmlzay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzdGVyaXNrW2ldLnNjb3BlID09PSBzY29wZSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIGFzdGVyaXNrW2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBhc3Rlcmlza1tpXS5rZXl1cCkpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCBhc3Rlcmlza1tpXSwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBrZXkg5LiN5ZyoIF9oYW5kbGVycyDkuK3ov5Tlm55cblxuXG4gIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSByZXR1cm47XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9oYW5kbGVyc1trZXldLmxlbmd0aDsgX2krKykge1xuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5dXApIHtcbiAgICAgIGlmIChfaGFuZGxlcnNba2V5XVtfaV0ua2V5KSB7XG4gICAgICAgIHZhciByZWNvcmQgPSBfaGFuZGxlcnNba2V5XVtfaV07XG4gICAgICAgIHZhciBzcGxpdEtleSA9IHJlY29yZC5zcGxpdEtleTtcbiAgICAgICAgdmFyIGtleVNob3J0Y3V0ID0gcmVjb3JkLmtleS5zcGxpdChzcGxpdEtleSk7XG4gICAgICAgIHZhciBfZG93bktleXNDdXJyZW50ID0gW107IC8vIOiusOW9leW9k+WJjeaMiemUrumUruWAvFxuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwga2V5U2hvcnRjdXQubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICBfZG93bktleXNDdXJyZW50LnB1c2goY29kZShrZXlTaG9ydGN1dFthXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9kb3duS2V5c0N1cnJlbnQuc29ydCgpLmpvaW4oJycpID09PSBfZG93bktleXMuc29ydCgpLmpvaW4oJycpKSB7XG4gICAgICAgICAgLy8g5om+5Yiw5aSE55CG5YaF5a65XG4gICAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCByZWNvcmQsIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDliKTmlq0gZWxlbWVudCDmmK/lkKblt7Lnu4/nu5Hlrprkuovku7ZcblxuXG5mdW5jdGlvbiBpc0VsZW1lbnRCaW5kKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnRIYXNCaW5kRXZlbnQuaW5kZXhPZihlbGVtZW50KSA+IC0xO1xufVxuXG5mdW5jdGlvbiBob3RrZXlzKGtleSwgb3B0aW9uLCBtZXRob2QpIHtcbiAgX2Rvd25LZXlzID0gW107XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhrZXkpOyAvLyDpnIDopoHlpITnkIbnmoTlv6vmjbfplK7liJfooahcblxuICB2YXIgbW9kcyA9IFtdO1xuICB2YXIgc2NvcGUgPSAnYWxsJzsgLy8gc2NvcGXpu5jorqTkuLphbGzvvIzmiYDmnInojIPlm7Tpg73mnInmlYhcblxuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50OyAvLyDlv6vmjbfplK7kuovku7bnu5HlrproioLngrlcblxuICB2YXIgaSA9IDA7XG4gIHZhciBrZXl1cCA9IGZhbHNlO1xuICB2YXIga2V5ZG93biA9IHRydWU7XG4gIHZhciBzcGxpdEtleSA9ICcrJztcbiAgdmFyIGNhcHR1cmUgPSBmYWxzZTsgLy8g5a+55Li66K6+5a6a6IyD5Zu055qE5Yik5patXG5cbiAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBtZXRob2QgPSBvcHRpb247XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgaWYgKG9wdGlvbi5zY29wZSkgc2NvcGUgPSBvcHRpb24uc2NvcGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uZWxlbWVudCkgZWxlbWVudCA9IG9wdGlvbi5lbGVtZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleXVwKSBrZXl1cCA9IG9wdGlvbi5rZXl1cDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXlkb3duICE9PSB1bmRlZmluZWQpIGtleWRvd24gPSBvcHRpb24ua2V5ZG93bjsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5jYXB0dXJlICE9PSB1bmRlZmluZWQpIGNhcHR1cmUgPSBvcHRpb24uY2FwdHVyZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb24uc3BsaXRLZXkgPT09ICdzdHJpbmcnKSBzcGxpdEtleSA9IG9wdGlvbi5zcGxpdEtleTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSBzY29wZSA9IG9wdGlvbjsgLy8g5a+55LqO5q+P5Liq5b+r5o236ZSu6L+b6KGM5aSE55CGXG5cbiAgZm9yICg7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXS5zcGxpdChzcGxpdEtleSk7IC8vIOaMiemUruWIl+ihqFxuXG4gICAgbW9kcyA9IFtdOyAvLyDlpoLmnpzmmK/nu4TlkIjlv6vmjbfplK7lj5blvpfnu4TlkIjlv6vmjbfplK5cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMSkgbW9kcyA9IGdldE1vZHMoX21vZGlmaWVyLCBrZXkpOyAvLyDlsIbpnZ7kv67ppbDplK7ovazljJbkuLrplK7noIFcblxuICAgIGtleSA9IGtleVtrZXkubGVuZ3RoIC0gMV07XG4gICAga2V5ID0ga2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGtleSk7IC8vICrooajnpLrljLnphY3miYDmnInlv6vmjbfplK5cbiAgICAvLyDliKTmlq1rZXnmmK/lkKblnKhfaGFuZGxlcnPkuK3vvIzkuI3lnKjlsLHotYvkuIDkuKrnqbrmlbDnu4RcblxuICAgIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSBfaGFuZGxlcnNba2V5XSA9IFtdO1xuXG4gICAgX2hhbmRsZXJzW2tleV0ucHVzaCh7XG4gICAgICBrZXl1cDoga2V5dXAsXG4gICAgICBrZXlkb3duOiBrZXlkb3duLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbW9kczogbW9kcyxcbiAgICAgIHNob3J0Y3V0OiBrZXlzW2ldLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBrZXk6IGtleXNbaV0sXG4gICAgICBzcGxpdEtleTogc3BsaXRLZXksXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH0gLy8g5Zyo5YWo5bGAZG9jdW1lbnTkuIrorr7nva7lv6vmjbfplK5cblxuXG4gIGlmICh0eXBlb2YgZWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRWxlbWVudEJpbmQoZWxlbWVudCkgJiYgd2luZG93KSB7XG4gICAgZWxlbWVudEhhc0JpbmRFdmVudC5wdXNoKGVsZW1lbnQpO1xuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgIH0sIGNhcHR1cmUpO1xuXG4gICAgaWYgKCF3aW5MaXN0ZW5kRm9jdXMpIHtcbiAgICAgIHdpbkxpc3RlbmRGb2N1cyA9IHRydWU7XG4gICAgICBhZGRFdmVudCh3aW5kb3csICdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gW107XG4gICAgICB9LCBjYXB0dXJlKTtcbiAgICB9XG5cbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5dXAnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgICBjbGVhck1vZGlmaWVyKGUpO1xuICAgIH0sIGNhcHR1cmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIoc2hvcnRjdXQpIHtcbiAgdmFyIHNjb3BlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnYWxsJztcbiAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZGF0YSA9IF9oYW5kbGVyc1trZXldLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnNjb3BlID09PSBzY29wZSAmJiBpdGVtLnNob3J0Y3V0ID09PSBzaG9ydGN1dDtcbiAgICB9KTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEubWV0aG9kKSB7XG4gICAgICBkYXRhLm1ldGhvZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBfYXBpID0ge1xuICBzZXRTY29wZTogc2V0U2NvcGUsXG4gIGdldFNjb3BlOiBnZXRTY29wZSxcbiAgZGVsZXRlU2NvcGU6IGRlbGV0ZVNjb3BlLFxuICBnZXRQcmVzc2VkS2V5Q29kZXM6IGdldFByZXNzZWRLZXlDb2RlcyxcbiAgaXNQcmVzc2VkOiBpc1ByZXNzZWQsXG4gIGZpbHRlcjogZmlsdGVyLFxuICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICB1bmJpbmQ6IHVuYmluZCxcbiAga2V5TWFwOiBfa2V5TWFwLFxuICBtb2RpZmllcjogX21vZGlmaWVyLFxuICBtb2RpZmllck1hcDogbW9kaWZpZXJNYXBcbn07XG5cbmZvciAodmFyIGEgaW4gX2FwaSkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9hcGksIGEpKSB7XG4gICAgaG90a2V5c1thXSA9IF9hcGlbYV07XG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBfaG90a2V5cyA9IHdpbmRvdy5ob3RrZXlzO1xuXG4gIGhvdGtleXMubm9Db25mbGljdCA9IGZ1bmN0aW9uIChkZWVwKSB7XG4gICAgaWYgKGRlZXAgJiYgd2luZG93LmhvdGtleXMgPT09IGhvdGtleXMpIHtcbiAgICAgIHdpbmRvdy5ob3RrZXlzID0gX2hvdGtleXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdGtleXM7XG4gIH07XG5cbiAgd2luZG93LmhvdGtleXMgPSBob3RrZXlzO1xufVxuXG5leHBvcnQgeyBob3RrZXlzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBob3RrZXlzIGZyb20gJ2hvdGtleXMtanMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIGlzSG90a2V5UHJlc3NlZCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgdmVyc2lvbiA0LlxyXG4gKi9cblxuZnVuY3Rpb24gdXNlSXNIb3RrZXlQcmVzc2VkKCkge1xuICByZXR1cm4gaG90a2V5cy5pc1ByZXNzZWQ7XG59XG5cbmhvdGtleXMuZmlsdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciB0YWdGaWx0ZXIgPSBmdW5jdGlvbiB0YWdGaWx0ZXIoX3JlZiwgZW5hYmxlT25UYWdzKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldDtcbiAgdmFyIHRhcmdldFRhZ05hbWUgPSB0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWU7XG4gIHJldHVybiBCb29sZWFuKHRhcmdldFRhZ05hbWUgJiYgZW5hYmxlT25UYWdzICYmIGVuYWJsZU9uVGFncy5pbmNsdWRlcyh0YXJnZXRUYWdOYW1lKSk7XG59O1xuXG52YXIgaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCA9IGZ1bmN0aW9uIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoZXYpIHtcbiAgcmV0dXJuIHRhZ0ZpbHRlcihldiwgWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnXSk7XG59O1xuXG5mdW5jdGlvbiB1c2VIb3RrZXlzKGtleXMsIGNhbGxiYWNrLCBvcHRpb25zLCBkZXBzKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBkZXBzID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIF9yZWYyID0gb3B0aW9ucyB8fCB7fSxcbiAgICAgIGVuYWJsZU9uVGFncyA9IF9yZWYyLmVuYWJsZU9uVGFncyxcbiAgICAgIGZpbHRlciA9IF9yZWYyLmZpbHRlcixcbiAgICAgIGtleXVwID0gX3JlZjIua2V5dXAsXG4gICAgICBrZXlkb3duID0gX3JlZjIua2V5ZG93bixcbiAgICAgIF9yZWYyJGZpbHRlclByZXZlbnREZSA9IF9yZWYyLmZpbHRlclByZXZlbnREZWZhdWx0LFxuICAgICAgZmlsdGVyUHJldmVudERlZmF1bHQgPSBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUsXG4gICAgICBfcmVmMiRlbmFibGVkID0gX3JlZjIuZW5hYmxlZCxcbiAgICAgIGVuYWJsZWQgPSBfcmVmMiRlbmFibGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZW5hYmxlZCxcbiAgICAgIF9yZWYyJGVuYWJsZU9uQ29udGVudCA9IF9yZWYyLmVuYWJsZU9uQ29udGVudEVkaXRhYmxlLFxuICAgICAgZW5hYmxlT25Db250ZW50RWRpdGFibGUgPSBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkZW5hYmxlT25Db250ZW50O1xuXG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7IC8vIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIGlmIHRoZSBicm93c2VycyBkZWZhdWx0IGJlaGF2aW9yIGlzIHByZXZlbnRlZC5cblxuICB2YXIgbWVtb2lzZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpIHtcbiAgICB2YXIgX2tleWJvYXJkRXZlbnQkdGFyZ2V0O1xuXG4gICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKGtleWJvYXJkRXZlbnQpKSB7XG4gICAgICByZXR1cm4gIWZpbHRlclByZXZlbnREZWZhdWx0O1xuICAgIH0gLy8gQ2hlY2sgd2hldGhlciB0aGUgaG90a2V5cyB3YXMgdHJpZ2dlcmVkIGluc2lkZSBhbiBpbnB1dCBhbmQgdGhhdCBpbnB1dCBpcyBlbmFibGVkIG9yIGlmIGl0IHdhcyB0cmlnZ2VyZWQgYnkgYSBjb250ZW50IGVkaXRhYmxlIHRhZyBhbmQgaXQgaXMgZW5hYmxlZC5cblxuXG4gICAgaWYgKGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoa2V5Ym9hcmRFdmVudCkgJiYgIXRhZ0ZpbHRlcihrZXlib2FyZEV2ZW50LCBlbmFibGVPblRhZ3MpIHx8IChfa2V5Ym9hcmRFdmVudCR0YXJnZXQgPSBrZXlib2FyZEV2ZW50LnRhcmdldCkgIT0gbnVsbCAmJiBfa2V5Ym9hcmRFdmVudCR0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgJiYgIWVuYWJsZU9uQ29udGVudEVkaXRhYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVmLmN1cnJlbnQgPT09IG51bGwgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcmVmLmN1cnJlbnQpIHtcbiAgICAgIGNhbGxiYWNrKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIGRlcHMgPyBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0uY29uY2F0KGRlcHMpIDogW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSW4gdGhpcyBjYXNlIGtleWRvd24gaXMgbGlrZWx5IHVuZGVmaW5lZCwgc28gd2Ugc2V0IGl0IHRvIGZhbHNlLCBzaW5jZSBob3RrZXlzIG5lZWRzIHRoZSBga2V5ZG93bmAga2V5IHRvIGhhdmUgYSB2YWx1ZS5cblxuXG4gICAgaWYgKGtleXVwICYmIGtleWRvd24gIT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMua2V5ZG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhvdGtleXMoa2V5cywgb3B0aW9ucyB8fCB7fSwgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICB9O1xuICB9LCBbbWVtb2lzZWRDYWxsYmFjaywga2V5cywgZW5hYmxlZF0pO1xuICByZXR1cm4gcmVmO1xufVxuXG52YXIgaXNIb3RrZXlQcmVzc2VkID0gaG90a2V5cy5pc1ByZXNzZWQ7XG5cbmV4cG9ydCB7IGlzSG90a2V5UHJlc3NlZCwgdXNlSG90a2V5cywgdXNlSXNIb3RrZXlQcmVzc2VkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzLm1hcFxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
19
|
+
var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function o(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function a(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function i(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var l={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},u={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},s={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},c={16:!1,18:!1,17:!1,91:!1},d={},f=1;f<20;f++)l["f".concat(f)]=111+f;var v=[],h=!1,p="all",m=[],g=function(e){return l[e.toLowerCase()]||u[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function _(e){p=e||"all"}function y(){return p||"all"}var b=function(e){var t=e.key,n=e.scope,r=e.method,o=e.splitKey,l=void 0===o?"+":o;i(t).forEach((function(e){var t=e.split(l),o=t.length,i=t[o-1],s="*"===i?"*":g(i);if(d[s]){n||(n=y());var c=o>1?a(u,t):[];d[s]=d[s].filter((function(e){return!((!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,o=!0,a=0;a<n.length;a++)-1===r.indexOf(n[a])&&(o=!1);return o}(e.mods,c))}))}}))};function O(e,t,n,r){var o;if(t.element===r&&(t.scope===n||"all"===t.scope)){for(var a in o=t.mods.length>0,c)Object.prototype.hasOwnProperty.call(c,a)&&(!c[a]&&t.mods.indexOf(+a)>-1||c[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||c[16]||c[18]||c[17]||c[91])&&!o&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function w(e,t){var n=d["*"],r=e.keyCode||e.which||e.charCode;if(M.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===v.indexOf(r)&&229!==r&&v.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=s[t];e[t]&&-1===v.indexOf(n)?v.push(n):!e[t]&&v.indexOf(n)>-1?v.splice(v.indexOf(n),1):"metaKey"===t&&e[t]&&3===v.length&&(e.ctrlKey||e.shiftKey||e.altKey||(v=v.slice(v.indexOf(n))))})),r in c){for(var o in c[r]=!0,u)u[o]===r&&(M[o]=!0);if(!n)return}for(var a in c)Object.prototype.hasOwnProperty.call(c,a)&&(c[a]=e[s[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===v.indexOf(17)&&v.push(17),-1===v.indexOf(18)&&v.push(18),c[17]=!0,c[18]=!0);var i=y();if(n)for(var l=0;l<n.length;l++)n[l].scope===i&&("keydown"===e.type&&n[l].keydown||"keyup"===e.type&&n[l].keyup)&&O(e,n[l],i,t);if(r in d)for(var f=0;f<d[r].length;f++)if(("keydown"===e.type&&d[r][f].keydown||"keyup"===e.type&&d[r][f].keyup)&&d[r][f].key){for(var h=d[r][f],p=h.splitKey,m=h.key.split(p),_=[],b=0;b<m.length;b++)_.push(g(m[b]));_.sort().join("")===v.sort().join("")&&O(e,h,i,t)}}}function M(e,t,n){v=[];var r=i(e),l=[],s="all",f=document,p=0,_=!1,y=!0,b="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(s=t.scope),t.element&&(f=t.element),t.keyup&&(_=t.keyup),void 0!==t.keydown&&(y=t.keydown),void 0!==t.capture&&(O=t.capture),"string"==typeof t.splitKey&&(b=t.splitKey)),"string"==typeof t&&(s=t);p<r.length;p++)l=[],(e=r[p].split(b)).length>1&&(l=a(u,e)),(e="*"===(e=e[e.length-1])?"*":g(e))in d||(d[e]=[]),d[e].push({keyup:_,keydown:y,scope:s,mods:l,shortcut:r[p],method:n,key:r[p],splitKey:b,element:f});void 0!==f&&!function(e){return m.indexOf(e)>-1}(f)&&window&&(m.push(f),o(f,"keydown",(function(e){w(e,f)}),O),h||(h=!0,o(window,"focus",(function(){v=[]}),O)),o(f,"keyup",(function(e){w(e,f),function(e){var t=e.keyCode||e.which||e.charCode,n=v.indexOf(t);if(n>=0&&v.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&v.splice(0,v.length),93!==t&&224!==t||(t=91),t in c)for(var r in c[t]=!1,u)u[r]===t&&(M[r]=!1)}(e)}),O))}var S={setScope:_,getScope:y,deleteScope:function(e,t){var n,r;for(var o in e||(e=y()),d)if(Object.prototype.hasOwnProperty.call(d,o))for(n=d[o],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;y()===e&&_(t||"all")},getPressedKeyCodes:function(){return v.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=g(e)),-1!==v.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},trigger:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(d).forEach((function(n){var r=d[n].find((function(n){return n.scope===t&&n.shortcut===e}));r&&r.method&&r.method()}))},unbind:function(e){if(e){if(Array.isArray(e))e.forEach((function(e){e.key&&b(e)}));else if("object"==typeof e)e.key&&b(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=n[0],a=n[1];"function"==typeof o&&(a=o,o=""),b({key:e,scope:o,method:a,splitKey:"+"})}}else Object.keys(d).forEach((function(e){return delete d[e]}))},keyMap:l,modifier:u,modifierMap:s};for(var I in S)Object.prototype.hasOwnProperty.call(S,I)&&(M[I]=S[I]);if("undefined"!=typeof window){var P=window.hotkeys;M.noConflict=function(e){return e&&window.hotkeys===M&&(window.hotkeys=P),M},window.hotkeys=M}var C=n(0);function x(){return M.isPressed}M.filter=function(){return!0};var j=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))};function E(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var o=n||{},a=o.enableOnTags,i=o.filter,l=o.keyup,u=o.keydown,s=o.filterPreventDefault,c=void 0===s||s,d=o.enabled,f=void 0===d||d,v=o.enableOnContentEditable,h=void 0!==v&&v,p=Object(C.useRef)(null),m=Object(C.useCallback)((function(e,n){var r;return i&&!i(e)?!c:!!(j(e,["INPUT","TEXTAREA","SELECT"])&&!j(e,a)||null!=(r=e.target)&&r.isContentEditable&&!h)||(null===p.current||document.activeElement===p.current)&&(t(e,n),!0)}),r?[p,a,i].concat(r):[p,a,i]);return Object(C.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),M(e,n||{},m),function(){return M.unbind(e,m)};M.unbind(e,m)}),[m,e,f]),p}var R=M.isPressed}]));
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/OWE0ZSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi5tb2R1bGUuY3NzP2NkNDYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3M/MzJhYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay5tb2R1bGUuY3NzPzA4NDEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC5tb2R1bGUuY3NzPzFmMTEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gubW9kdWxlLmNzcz80ZWViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gubW9kdWxlLmNzcz8yM2ViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ZTE4OCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLm1vZHVsZS5jc3M/MGVkZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzPzI3YjMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vRHJvcGRvd24udHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi5tb2R1bGUuY3NzPzliOTMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLm1vZHVsZS5jc3M/M2ViOSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIubW9kdWxlLmNzcz85NmQyIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS5tb2R1bGUuY3NzPzM3MDkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS5tb2R1bGUuY3NzPzUwNDkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUxpbmtJdGVtLm1vZHVsZS5jc3M/MDQyNyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC5tb2R1bGUuY3NzPzEyOTkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzPzdhYmYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL0ljb25CdXR0b24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi5tb2R1bGUuY3NzP2QyOGQiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3M/Y2MzNyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSW1hZ2UvSW1hZ2UubW9kdWxlLmNzcz85NWE3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy5tb2R1bGUuY3NzPzQ2NGUiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0xpbmtJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5Lm1vZHVsZS5jc3M/MjFjNSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UYWJsZS9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZS50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy1pbmZpbml0ZS1sb2FkZXIvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXIudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyLm1vZHVsZS5jc3M/ZTY2YiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvdy50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3dDZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvd0NlbGwubW9kdWxlLmNzcz82YWViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Lm1vZHVsZS5jc3M/MGJlNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29uc3RhbnRzL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb25zdGFudHMvVGFibGUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGUubW9kdWxlLmNzcz8zNWJlIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/Y2QzNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz9jZjYxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzPzlhMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZTIyMyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC5tb2R1bGUuY3NzPzQ3ZjAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tzcGFjZS5zdmciLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlT3V0c2lkZUNsaWNrL3VzZU91dHNpZGVDbGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3dyL19pbnRlcm5hbC9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3dyL2NvcmUvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlU1dSSG9va3NDb25maWcvdXNlU1dSSG9va3NDb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlVG9nZ2xlL3VzZVRvZ2dsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbWVtb2l6ZS1vbmUvZGlzdC9tZW1vaXplLW9uZS5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaG90a2V5cy1qcy9kaXN0L2hvdGtleXMuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1ob3RrZXlzLWhvb2svZGlzdC9yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsImlzQXJyYXkiLCJBcnJheSIsImNjIiwib2JqIiwib3V0IiwidG1wIiwiayIsImxlbmd0aCIsImRlZmF1bHQiLCJkaXNwbGF5IiwiaXNEaXNhYmxlZCIsImhhbmRsZUNsaWNrIiwiQnV0dG9uIiwiYWxpZ24iLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJzaXplIiwic3RyZXRjaEhvcml6b250YWxseSIsImNsYXNzTmFtZSIsImNvbnRhaW5lciIsIkljb24iLCJhbHQiLCJzcmMiLCJQbGFjZW1lbnRDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsInVuZGVmaW5lZCIsImZvcndhcmRSZWYiLCJyZWYiLCJjaGlsZHJlbiIsImJ1dHRvbiIsInBsYWNlbWVudCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIlByb3ZpZGVyIiwidXNlTWVtbyIsIm1lbnVDb250YWluZXIiLCJvblBvaW50ZXJEb3duIiwiY29udGFpbmVyUmVmIiwiaW52ZXJ0ZWQiLCJyb3VuZGVkIiwibm9TaGFkb3ciLCJub1BhZGRpbmciLCJub0JvcmRlciIsInRyYW5zcGFyZW50Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsInR5cGUiLCJsZWZ0T2Zmc2V0IiwiaW5jbHVkZXMiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiYnV0dG9uQmFkZ2UiLCJDb21wb25lbnQiLCJwcm9wcyIsImxhYmVsIiwib25DaGFuZ2UiLCJwbGFjZWhvbGRlciIsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiaGFuZGxlQ2hhbmdlIiwidXNlQ2FsbGJhY2siLCJlIiwidGFyZ2V0IiwiTGFiZWwiLCJpbnB1dFJlZiIsImNoZWNrYm94IiwiY29sb3JzIiwib25TZWxlY3QiLCJzZWxlY3RlZENvbG9yIiwiZGlyZWN0aW9uIiwiY2FuVG9nZ2xlIiwiY29sb3JQaWNrZXIiLCJtYXAiLCJjb2xvciIsIkNvbG9yU3dhdGNoIiwiaXNTZWxlY3RlZCIsImNvbG9yU3dhdGNoIiwic2VsZWN0ZWQiLCJzdHlsZSIsImJhY2tncm91bmRDb2xvciIsImhleENvZGUiLCJzck9ubHkiLCJDb25maXJtYXRpb25Nb2RhbCIsImhlYWRlciIsImlzT3BlbiIsImJ1dHRvbnNMZWZ0IiwiYnV0dG9uc1JpZ2h0Iiwib25DbG9zZSIsIm5vT3ZlcmxheSIsImJhc2VaSW5kZXgiLCJNb2RhbCIsIm1vZGFsSGVhZGVyIiwibW9kYWxDb250ZW50IiwibW9kYWxCdXR0b25zQ29udGFpbmVyIiwibW9kYWxCdXR0b25zIiwiZGlzcGxheU5hbWUiLCJ1c2VIb3RrZXlzIiwiaGFuZGxlT3ZlcmxheUNsaWNrIiwiekluZGV4Iiwib3ZlcmxheSIsIm1vZGFsIiwibW9kYWxCdXR0b24iLCJEcm9wZG93biIsIkNsaWNrYWJsZSIsIml0ZW1Cb2R5UmVuZGVyZXIiLCJpdGVtcyIsImhhbmRsZVNlbGVjdCIsInJlbmRlckNsaWNrYWJsZSIsInNlbGVjdGVkSXRlbSIsInVzZVN0YXRlIiwic2V0SXNPcGVuIiwidXNlT3V0c2lkZUNsaWNrIiwidG9nZ2xlSXNPcGVuIiwiTWVudUNvbnRhaW5lciIsIk1lbnUiLCJpdGVtIiwiTWVudUl0ZW0iLCJpc0FjdGl2ZSIsImlkIiwiaXMiLCJhIiwiYiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZURlYnVnVmFsdWUiLCJnZXRTbmFwc2hvdCIsImYiLCJ1Iiwid2luZG93IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaW5zdCIsImciLCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsImljb24iLCJjcm9zc09yaWdpbiIsImZvb3RlciIsInNtYXJ0TGF5b3V0IiwibWVudVBsYWNlbWVudCIsInVzZUNvbnRleHQiLCJpbm5lclJlZiIsInVzZVJlZiIsIkVycm9yIiwiY3VycmVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImJvdHRvbSIsImRpc3RhbmNlVG9FZGdlIiwiaW5uZXJIZWlnaHQiLCJ1bEVsIiwicXVlcnlTZWxlY3RvciIsImNoaWxkRWxlbWVudHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibmV3SGVpZ2h0IiwiY2xpZW50SGVpZ2h0Iiwib2Zmc2V0IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIm1pbkhlaWdodCIsIm1heEhlaWdodCIsIm1lbnUiLCJvcGVuIiwibWVudUl0ZW0iLCJhY3RpdmUiLCJtZW51TGlua0l0ZW0iLCJhY2NlcHQiLCJtdWx0aXBsZSIsImlucHV0IiwibGF5b3V0IiwicGFyZW50IiwiaG9yaXpvbnRhbFBsYWNlbWVudCIsInZlcnRpY2FsUGxhY2VtZW50IiwiZml4ZWQiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJzcmNXaWR0aCIsInNyY0hlaWdodCIsImRlY29kaW5nIiwibG9hZGluZyIsImltYWdlRWxlbWVudCIsImltYWdlIiwid2lkdGgiLCJoZWlnaHQiLCJoYXNPdmVybGF5IiwiaGVhZGVyQWN0aW9ucyIsImhlYWRlckxhYmVsIiwidGV4dCIsImxpc3QiLCJsaXN0Vmlld0l0ZW0iLCJCdXR0b25MaW5rIiwiYXMiLCJpc0ZpeGVkIiwiY29sdW1ucyIsImRhdGFTb3VyY2UiLCJvblJvd0NsaWNrIiwiaGFzQXJyb3ciLCJvbkxvYWRNb3JlIiwicGFnZSIsInNldFBhZ2UiLCJwYWdlU2l6ZSIsIlRhYmxlQ29uZmlnIiwiUEFHRV9TSVpFIiwidGFibGVIZWlnaHQiLCJyb3dIZWlnaHQiLCJST1dfSEVJR0hUIiwiZGlzYWJsZUxhenlMb2FkZXIiLCJhY3RpdmVSb3dzIiwiaXRlbXNDb3VudCIsImlzSGVhZGVyU3RpY2t5IiwiaGFzVmlydHVhbFNjcm9sbCIsInNjcm9sbFRvcCIsInNldFNjcm9sbFRvcCIsInJlbmRlclJvdyIsImRhdGEiLCJpbmRleCIsInJvdyIsInRvcCIsImhhbmRsZUxpc3RTY3JvbGwiLCJzY3JvbGxPZmZzZXQiLCJsb2FkTW9yZSIsImlzSXRlbUxvYWRlZCIsIklURU1TX0xPQURFRCIsInRhYmxlIiwicGxhY2Vob2xkZXJDb250YWluZXIiLCJpdGVtQ291bnQiLCJsb2FkTW9yZUl0ZW1zIiwib25JdGVtc1JlbmRlcmVkIiwiRml4ZWRTaXplTGlzdCIsIml0ZW1TaXplIiwiaXRlbURhdGEiLCJvblNjcm9sbCIsInNjcm9sbGJhckNvbnRhaW5lciIsImNsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsImNyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJJbmZpbml0ZUxvYWRlciIsIl9QdXJlQ29tcG9uZW50IiwiX3JlZiIsIl90ZW1wIiwiX3RoaXMiLCJ0aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwiX19wcm90b19fIiwiZ2V0UHJvdG90eXBlT2YiLCJhcHBseSIsImNvbmNhdCIsIl9sYXN0UmVuZGVyZWRTdGFydEluZGV4IiwiX2xhc3RSZW5kZXJlZFN0b3BJbmRleCIsIl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzIiwiX29uSXRlbXNSZW5kZXJlZCIsIl9yZWYyIiwidmlzaWJsZVN0YXJ0SW5kZXgiLCJ2aXNpYmxlU3RvcEluZGV4IiwiX2Vuc3VyZVJvd3NMb2FkZWQiLCJfc2V0UmVmIiwibGlzdFJlZiIsIl9saXN0UmVmIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY29uc3RydWN0b3IiLCJzZXRQcm90b3R5cGVPZiIsImluaGVyaXRzIiwiYXV0b1JlbG9hZCIsInN0YXJ0SW5kZXgiLCJzdG9wSW5kZXgiLCJfcHJvcHMiLCJfcHJvcHMkbWluaW11bUJhdGNoU2kiLCJtaW5pbXVtQmF0Y2hTaXplIiwiX3Byb3BzJHRocmVzaG9sZCIsInRocmVzaG9sZCIsInVubG9hZGVkUmFuZ2VzIiwicmFuZ2VTdGFydEluZGV4IiwicmFuZ2VTdG9wSW5kZXgiLCJfaW5kZXgiLCJwdXNoIiwicG90ZW50aWFsU3RvcEluZGV4IiwiTWF0aCIsIm1pbiIsIm1heCIsIl9pbmRleDIiLCJfaW5kZXgzIiwic2NhbkZvclVubG9hZGVkUmFuZ2VzIiwic29tZSIsInN0YXJ0T3JTdG9wIiwiX2xvYWRVbmxvYWRlZFJhbmdlcyIsIl90aGlzMiIsImxvYWRNb3JlUm93cyIsIl9sb29wIiwicHJvbWlzZSIsInRoZW4iLCJsYXN0UmVuZGVyZWRTdGFydEluZGV4IiwibGFzdFJlbmRlcmVkU3RvcEluZGV4IiwiaXNSYW5nZVZpc2libGUiLCJyZXNldEFmdGVySW5kZXgiLCJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCJmb3JjZVVwZGF0ZSIsImJvcmRlckJvdHRvbSIsImNvbHVtbiIsImNvbHVtbkluZGV4IiwidGFibGVIZWFkZXJDZWxsIiwidGl0bGUiLCJoYW5kbGVSb3dDbGljayIsImRhdGFJbmRleCIsInJlbmRlciIsIm9uQmx1ciIsIm9uS2V5RG93biIsInBhdHRlcm4iLCJpbnB1dE1vZGUiLCJpbnB1dEVsZW1lbnQiLCJ0ZXh0SW5wdXQiLCJ0b2FzdCIsInRvYXN0Q29udGFpbmVyIiwicG9zdGVyIiwibXV0ZWQiLCJsb29wIiwiYXV0b1BsYXkiLCJ2aWRlbyIsInBsYXlzSW5saW5lIiwiTnVtcGFkIiwiYXBwZW5kRGlnaXQiLCJudW1iZXIiLCJkaWdpdCIsInBvcERpZ2l0IiwiZmxvb3IiLCJldmVudERpZ2l0S2V5cyIsImNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyIiwibmV3TnVtYmVyIiwic3RvcFByb3BhZ2F0aW9uIiwiTnVtcGFkS2V5cyIsImZpbGwiLCJfIiwibnVtcGFkVmFsdWUiLCJudW1wYWQiLCJ0YWJJbmRleCIsInBhcnNlSW50IiwibnVtYmVycyIsIm9wdGlvbnMiLCJjYXB0dXJlIiwiY2FsbGJhY2siLCJldmVudCIsImNvbnRhaW5zIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwiX19nZW5lcmF0b3IiLCJib2R5IiwieSIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsIml0ZXJhdG9yIiwidiIsIm9wIiwicG9wIiwiX19yZWFkIiwiYXIiLCJlcnJvciIsInVzZVByb21pc2UiLCJfYSIsImlzUGVuZGluZyIsImlzUmVzb2x2ZWQiLCJpc1JlamVjdGVkIiwiaXNTZXR0bGVkIiwic2V0UmVzdWx0IiwiaGFzVW5tb3VudGVkIiwiZXJyb3JfMSIsIlNXUkdsb2JhbFN0YXRlIiwiV2Vha01hcCIsIkVNUFRZX0NBQ0hFIiwibm9vcCIsIlVOREVGSU5FRCIsIk9CSkVDVCIsImlzVW5kZWZpbmVkIiwiaXNGdW5jdGlvbiIsIm1lcmdlT2JqZWN0cyIsImlzV2luZG93RGVmaW5lZCIsImlzRG9jdW1lbnREZWZpbmVkIiwiY3JlYXRlQ2FjaGVIZWxwZXIiLCJjYWNoZSIsInN0YXRlIiwiaW5mbyIsInByZXYiLCJjb3VudGVyIiwic3RhYmxlSGFzaCIsImFyZyIsImlzRGF0ZSIsIkRhdGUiLCJSZWdFeHAiLCJ0b0pTT04iLCJ0b1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZXQiLCJrZXlzIiwic29ydCIsIm9ubGluZSIsIm9uV2luZG93RXZlbnQiLCJvZmZXaW5kb3dFdmVudCIsInByZXNldCIsImlzT25saW5lIiwiaXNWaXNpYmxlIiwidmlzaWJpbGl0eVN0YXRlIiwiZGVmYXVsdENvbmZpZ09wdGlvbnMiLCJpbml0Rm9jdXMiLCJpbml0UmVjb25uZWN0Iiwib25PbmxpbmUiLCJvbk9mZmxpbmUiLCJJU19SRUFDVF9MRUdBQ1kiLCJ1c2VJZCIsIklTX1NFUlZFUiIsInJBRiIsInNldFRpbWVvdXQiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwibmF2aWdhdG9yQ29ubmVjdGlvbiIsIm5hdmlnYXRvciIsImNvbm5lY3Rpb24iLCJzbG93Q29ubmVjdGlvbiIsImVmZmVjdGl2ZVR5cGUiLCJzYXZlRGF0YSIsInNlcmlhbGl6ZSIsImVyciIsIl9fdGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wIiwiY29uc3RhbnRzIiwiYXN5bmMiLCJpbnRlcm5hbE11dGF0ZSIsIl9kYXRhIiwiX29wdHMiLCJwb3B1bGF0ZUNhY2hlIiwidGhyb3dPbkVycm9yIiwicmV2YWxpZGF0ZSIsInJvbGxiYWNrT25FcnJvck9wdGlvbiIsInJvbGxiYWNrT25FcnJvciIsIm9wdGltaXN0aWNEYXRhIiwia2V5RmlsdGVyIiwibWF0Y2hlZEtleXMiLCJpdCIsImtleUl0Iiwic3RhcnRzV2l0aCIsIl9rIiwiYWxsIiwibXV0YXRlQnlLZXkiLCJFVkVOVF9SRVZBTElEQVRPUlMiLCJNVVRBVElPTiIsIkZFVENIIiwicmV2YWxpZGF0b3JzIiwic3RhcnRSZXZhbGlkYXRlIiwiYmVmb3JlTXV0YXRpb25UcyIsImhhc09wdGltaXN0aWNEYXRhIiwiZGlzcGxheWVkRGF0YSIsImN1cnJlbnREYXRhIiwiX2MiLCJjb21taXR0ZWREYXRhIiwiY2F0Y2giLCJyZXMiLCJyZXZhbGlkYXRlQWxsS2V5cyIsImluaXRDYWNoZSIsInByb3ZpZGVyIiwiaGFzIiwib3B0cyIsIm11dGF0ZSIsInVubW91bnQiLCJzdWJzY3JpcHRpb25zIiwic3Vic2NyaWJlIiwic3VicyIsInNwbGljZSIsImluZGV4T2YiLCJzZXR0ZXIiLCJpbml0UHJvdmlkZXIiLCJyZWxlYXNlRm9jdXMiLCJyZWxlYXNlUmVjb25uZWN0IiwiZGVsZXRlIiwiTWFwIiwiZGVmYXVsdENvbmZpZyIsIm9uTG9hZGluZ1Nsb3ciLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwib25FcnJvclJldHJ5IiwiX18iLCJjb25maWciLCJtYXhSZXRyeUNvdW50IiwiZXJyb3JSZXRyeUNvdW50IiwiY3VycmVudFJldHJ5Q291bnQiLCJyZXRyeUNvdW50IiwidGltZW91dCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIm1lcmdlQ29uZmlncyIsInVzZSIsInUxIiwiZjEiLCJ1MiIsImYyIiwiU1dSQ29uZmlnQ29udGV4dCIsImVuYWJsZURldnRvb2xzIiwiX19TV1JfREVWVE9PTFNfVVNFX18iLCJub3JtYWxpemUiLCJ1c2VTV1JDb25maWciLCJCVUlMVF9JTl9NSURETEVXQVJFIiwidXNlU1dSTmV4dCIsImtleV8iLCJmZXRjaGVyXyIsIlBSRUxPQUQiLCJyZXEiLCJfX1NXUl9ERVZUT09MU19SRUFDVF9fIiwiV0lUSF9ERURVUEUiLCJkZWR1cGUiLCJwYXJlbnRDb25maWciLCJpc0Z1bmN0aW9uYWxDb25maWciLCJleHRlbmRlZENvbmZpZyIsImNhY2hlQ29udGV4dCIsImhvb2siLCJmZXRjaGVyIiwic3VzcGVuc2UiLCJmYWxsYmFja0RhdGEiLCJyZXZhbGlkYXRlT25Nb3VudCIsInJlZnJlc2hJbnRlcnZhbCIsInJlZnJlc2hXaGVuSGlkZGVuIiwicmVmcmVzaFdoZW5PZmZsaW5lIiwia2VlcFByZXZpb3VzRGF0YSIsImZuQXJnIiwiaW5pdGlhbE1vdW50ZWRSZWYiLCJ1bm1vdW50ZWRSZWYiLCJrZXlSZWYiLCJmZXRjaGVyUmVmIiwiY29uZmlnUmVmIiwiZ2V0Q29uZmlnIiwiZ2V0Q2FjaGUiLCJzZXRDYWNoZSIsInN1YnNjcmliZUNhY2hlIiwic3RhdGVEZXBlbmRlbmNpZXMiLCJpc0VxdWFsIiwiZXF1YWwiLCJyZXR1cm5lZERhdGEiLCJzaG91bGRTdGFydFJlcXVlc3QiLCJnZXRTZWxlY3RlZENhY2hlIiwic25hcHNob3QiLCJpc1ZhbGlkYXRpbmciLCJpc0xvYWRpbmciLCJtZW1vcml6ZWRTbmFwc2hvdCIsImNhY2hlZCIsImlzSW5pdGlhbE1vdW50IiwiY2FjaGVkRGF0YSIsImxhZ2d5RGF0YVJlZiIsInNob3VsZERvSW5pdGlhbFJldmFsaWRhdGlvbiIsImRlZmF1bHRWYWxpZGF0aW5nU3RhdGUiLCJyZXZhbGlkYXRlT3B0cyIsImN1cnJlbnRGZXRjaGVyIiwic3RhcnRBdCIsInNob3VsZFN0YXJ0TmV3UmVxdWVzdCIsImNhbGxiYWNrU2FmZWd1YXJkIiwiZmluYWxTdGF0ZSIsImZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSIsImNsZWFudXBTdGF0ZSIsInJlcXVlc3RJbmZvIiwiaW5pdGlhbFN0YXRlIiwibXV0YXRpb25JbmZvIiwiY2FjaGVEYXRhIiwiY3VycmVudENvbmZpZyIsImJvdW5kTXV0YXRlIiwic29mdFJldmFsaWRhdGUiLCJuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0IiwidW5zdWJFdmVudHMiLCJjYWxsYmFja3MiLCJrZXllZFJldmFsaWRhdG9ycyIsInN1YnNjcmliZUNhbGxiYWNrIiwibm93IiwidGltZXIiLCJpbnRlcnZhbCIsImV4ZWN1dGUiLCJjbGVhclRpbWVvdXQiLCJ1c2VTV1JIb29rc0NvbmZpZyIsInN3ckNvbmZpZyIsInVzZVRvZ2dsZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJfZXh0ZW5kcyIsImFzc2lnbiIsInNvdXJjZSIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfc2V0UHJvdG90eXBlT2YiLCJfaW5oZXJpdHNMb29zZSIsInNhZmVJc05hTiIsIk51bWJlciIsImlzTmFOIiwiYXJlSW5wdXRzRXF1YWwiLCJuZXdJbnB1dHMiLCJsYXN0SW5wdXRzIiwiZmlyc3QiLCJzZWNvbmQiLCJyZXN1bHRGbiIsImxhc3RUaGlzIiwibGFzdFJlc3VsdCIsImxhc3RBcmdzIiwiY2FsbGVkT25jZSIsIm5ld0FyZ3MiLCJfaSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiZXhjbHVkZWQiLCJzb3VyY2VLZXlzIiwicGVyZm9ybWFuY2UiLCJjYW5jZWxUaW1lb3V0IiwidGltZW91dElEIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJyZXF1ZXN0VGltZW91dCIsImRlbGF5Iiwic3RhcnQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0aWNrIiwiZ2V0U2Nyb2xsYmFyU2l6ZSIsInJlY2FsY3VsYXRlIiwiZGl2Iiwib3ZlcmZsb3ciLCJhcHBlbmRDaGlsZCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJyZW1vdmVDaGlsZCIsImNhY2hlZFJUTFJlc3VsdCIsImdldFJUTE9mZnNldFR5cGUiLCJvdXRlckRpdiIsIm91dGVyU3R5bGUiLCJpbm5lckRpdiIsImlubmVyU3R5bGUiLCJzY3JvbGxMZWZ0IiwiZGVmYXVsdEl0ZW1LZXkiLCJyb3dJbmRleCIsImNyZWF0ZUdyaWRDb21wb25lbnQiLCJfY2xhc3MiLCJnZXRDb2x1bW5PZmZzZXQiLCJnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0IiwiZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsImdldENvbHVtbldpZHRoIiwiZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQiLCJnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoIiwiZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50IiwiZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50IiwiZ2V0Um93SGVpZ2h0IiwiZ2V0Um93T2Zmc2V0IiwiZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCIsImdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJpbml0SW5zdGFuY2VQcm9wcyIsInNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UiLCJ2YWxpZGF0ZVByb3BzIiwiR3JpZCIsIl9pbnN0YW5jZVByb3BzIiwiX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQiLCJfb3V0ZXJSZWYiLCJpc1Njcm9sbGluZyIsImhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24iLCJpbml0aWFsU2Nyb2xsTGVmdCIsImluaXRpYWxTY3JvbGxUb3AiLCJzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQiLCJ2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiIsIl9jYWxsT25JdGVtc1JlbmRlcmVkIiwib3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4Iiwib3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgiLCJvdmVyc2NhblJvd1N0YXJ0SW5kZXgiLCJvdmVyc2NhblJvd1N0b3BJbmRleCIsInZpc2libGVDb2x1bW5TdGFydEluZGV4IiwidmlzaWJsZUNvbHVtblN0b3BJbmRleCIsInZpc2libGVSb3dTdGFydEluZGV4IiwidmlzaWJsZVJvd1N0b3BJbmRleCIsIl9jYWxsT25TY3JvbGwiLCJfZ2V0SXRlbVN0eWxlIiwiX3RoaXMkcHJvcHMiLCJjb2x1bW5XaWR0aCIsIml0ZW1TdHlsZUNhY2hlIiwiX29mZnNldCIsImlzUnRsIiwicG9zaXRpb24iLCJsZWZ0IiwicmlnaHQiLCJfX18iLCJfb25TY3JvbGwiLCJfZXZlbnQkY3VycmVudFRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxXaWR0aCIsInNldFN0YXRlIiwicHJldlN0YXRlIiwiY2FsY3VsYXRlZFNjcm9sbExlZnQiLCJjYWxjdWxhdGVkU2Nyb2xsVG9wIiwiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCJfb3V0ZXJSZWZTZXR0ZXIiLCJvdXRlclJlZiIsIl9yZXNldElzU2Nyb2xsaW5nIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibmV4dFByb3BzIiwidmFsaWRhdGVTaGFyZWRQcm9wcyIsIl9wcm90byIsInNjcm9sbFRvIiwiX3JlZjMiLCJzY3JvbGxUb0l0ZW0iLCJfcmVmNCIsIl9yZWY0JGFsaWduIiwiX3RoaXMkcHJvcHMyIiwiY29sdW1uQ291bnQiLCJyb3dDb3VudCIsIl90aGlzJHN0YXRlIiwic2Nyb2xsYmFyU2l6ZSIsImVzdGltYXRlZFRvdGFsSGVpZ2h0IiwiaG9yaXpvbnRhbFNjcm9sbGJhclNpemUiLCJ2ZXJ0aWNhbFNjcm9sbGJhclNpemUiLCJjb21wb25lbnREaWRNb3VudCIsIl90aGlzJHByb3BzMyIsIl9jYWxsUHJvcHNDYWxsYmFja3MiLCJjb21wb25lbnREaWRVcGRhdGUiLCJfdGhpcyRzdGF0ZTIiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsIl90aGlzJHByb3BzNCIsImlubmVyRWxlbWVudFR5cGUiLCJpbm5lclRhZ05hbWUiLCJfdGhpcyRwcm9wczQkaXRlbUtleSIsIml0ZW1LZXkiLCJvdXRlckVsZW1lbnRUeXBlIiwib3V0ZXJUYWdOYW1lIiwidXNlSXNTY3JvbGxpbmciLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIiLCJfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIiLCJjb2x1bW5TdGFydEluZGV4IiwiY29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuIiwiX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlciIsInJvd1N0YXJ0SW5kZXgiLCJyb3dTdG9wSW5kZXgiLCJfcm93SW5kZXgiLCJfY29sdW1uSW5kZXgiLCJlc3RpbWF0ZWRUb3RhbFdpZHRoIiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJ3aWxsQ2hhbmdlIiwicG9pbnRlckV2ZW50cyIsIl90aGlzJHByb3BzNSIsIl90aGlzJF9nZXRIb3Jpem9udGFsUjIiLCJfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4IiwiX292ZXJzY2FuQ29sdW1uU3RvcEluZGV4IiwiX3Zpc2libGVDb2x1bW5TdGFydEluZGV4IiwiX3Zpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJfdGhpcyRfZ2V0VmVydGljYWxSYW4yIiwiX292ZXJzY2FuUm93U3RhcnRJbmRleCIsIl9vdmVyc2NhblJvd1N0b3BJbmRleCIsIl92aXNpYmxlUm93U3RhcnRJbmRleCIsIl92aXNpYmxlUm93U3RvcEluZGV4IiwiX3RoaXMkc3RhdGUzIiwiX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsTGVmdCIsIl9zY3JvbGxUb3AiLCJfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwiX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uIiwiX3RoaXMkcHJvcHM2Iiwib3ZlcnNjYW5Db2x1bW5Db3VudCIsIm92ZXJzY2FuQ29sdW1uc0NvdW50Iiwib3ZlcnNjYW5Db3VudCIsIl90aGlzJHN0YXRlNCIsIm92ZXJzY2FuQ291bnRSZXNvbHZlZCIsIm92ZXJzY2FuQmFja3dhcmQiLCJvdmVyc2NhbkZvcndhcmQiLCJfdGhpcyRwcm9wczciLCJvdmVyc2NhblJvd0NvdW50Iiwib3ZlcnNjYW5Sb3dzQ291bnQiLCJfdGhpcyRzdGF0ZTUiLCJkZWZhdWx0UHJvcHMiLCJfcmVmNSIsIl9yZWY2Iiwicm93TWV0YWRhdGFNYXAiLCJlc3RpbWF0ZWRSb3dIZWlnaHQiLCJsYXN0TWVhc3VyZWRSb3dJbmRleCIsInRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzIiwiaXRlbU1ldGFkYXRhIiwiY29sdW1uTWV0YWRhdGFNYXAiLCJlc3RpbWF0ZWRDb2x1bW5XaWR0aCIsImxhc3RNZWFzdXJlZENvbHVtbkluZGV4IiwiZ2V0SXRlbU1ldGFkYXRhIiwiaXRlbVR5cGUiLCJpbnN0YW5jZVByb3BzIiwiaXRlbU1ldGFkYXRhTWFwIiwibGFzdE1lYXN1cmVkSW5kZXgiLCJmaW5kTmVhcmVzdEl0ZW0iLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2giLCJmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCIsImhpZ2giLCJsb3ciLCJtaWRkbGUiLCJjdXJyZW50T2Zmc2V0IiwiZXN0aW1hdGVkVG90YWxTaXplIiwibWF4T2Zmc2V0IiwibWluT2Zmc2V0Iiwicm91bmQiLCJWYXJpYWJsZVNpemVHcmlkIiwicmVzZXRBZnRlckNvbHVtbkluZGV4Iiwic2hvdWxkRm9yY2VVcGRhdGUiLCJyZXNldEFmdGVySW5kaWNlcyIsInJlc2V0QWZ0ZXJSb3dJbmRleCIsIl9yZWY2JHNob3VsZEZvcmNlVXBkYSIsIl9yZWY3IiwiZGVmYXVsdEl0ZW1LZXkkMSIsImNyZWF0ZUxpc3RDb21wb25lbnQiLCJnZXRJdGVtT2Zmc2V0IiwiZ2V0RXN0aW1hdGVkVG90YWxTaXplIiwiZ2V0SXRlbVNpemUiLCJnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCIsImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiTGlzdCIsInNjcm9sbERpcmVjdGlvbiIsImluaXRpYWxTY3JvbGxPZmZzZXQiLCJvdmVyc2NhblN0YXJ0SW5kZXgiLCJvdmVyc2NhblN0b3BJbmRleCIsImlzSG9yaXpvbnRhbCIsIm9mZnNldEhvcml6b250YWwiLCJfb25TY3JvbGxIb3Jpem9udGFsIiwiX29uU2Nyb2xsVmVydGljYWwiLCJfZXZlbnQkY3VycmVudFRhcmdldDIiLCJ2YWxpZGF0ZVNoYXJlZFByb3BzJDEiLCJfdGhpcyRwcm9wczUkaXRlbUtleSIsIl90aGlzJF9nZXRSYW5nZVRvUmVuZCIsIl9nZXRSYW5nZVRvUmVuZGVyIiwiX3RoaXMkX2dldFJhbmdlVG9SZW5kMiIsIl9vdmVyc2NhblN0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5TdG9wSW5kZXgiLCJfdmlzaWJsZVN0YXJ0SW5kZXgiLCJfdmlzaWJsZVN0b3BJbmRleCIsIl9zY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsT2Zmc2V0IiwiZ2V0SXRlbU1ldGFkYXRhJDEiLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMSIsImZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEiLCJlc3RpbWF0ZWRJdGVtU2l6ZSIsInRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyIsIlZhcmlhYmxlU2l6ZUxpc3QiLCJmaW5kTmVhcmVzdEl0ZW0kMSIsIkZpeGVkU2l6ZUdyaWQiLCJsYXN0Q29sdW1uT2Zmc2V0IiwibWlkZGxlT2Zmc2V0IiwiY2VpbCIsIl9yZWY4IiwibGFzdFJvd09mZnNldCIsIl9yZWY5IiwiX3JlZjEwIiwibnVtVmlzaWJsZUNvbHVtbnMiLCJfcmVmMTEiLCJfcmVmMTIiLCJudW1WaXNpYmxlUm93cyIsIl9yZWYxMyIsImxhc3RJdGVtT2Zmc2V0IiwibnVtVmlzaWJsZUl0ZW1zIiwic2hhbGxvd0RpZmZlcnMiLCJhdHRyaWJ1dGUiLCJfYXR0cmlidXRlIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsImFyZUVxdWFsIiwicHJldlByb3BzIiwicHJldlN0eWxlIiwicHJldlJlc3QiLCJuZXh0U3R5bGUiLCJuZXh0UmVzdCIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsIm5leHRTdGF0ZSIsImlzZmYiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsImFkZEV2ZW50IiwibWV0aG9kIiwidXNlQ2FwdHVyZSIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsInNsaWNlIiwiZ2V0S2V5cyIsInJlcGxhY2UiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsInVwIiwiZG93biIsImRlbCIsImlucyIsImluc2VydCIsImhvbWUiLCJlbmQiLCJwYWdldXAiLCJwYWdlZG93biIsImNhcHNsb2NrIiwibnVtXzAiLCJudW1fMSIsIm51bV8yIiwibnVtXzMiLCJudW1fNCIsIm51bV81IiwibnVtXzYiLCJudW1fNyIsIm51bV84IiwibnVtXzkiLCJudW1fbXVsdGlwbHkiLCJudW1fYWRkIiwibnVtX2VudGVyIiwibnVtX3N1YnRyYWN0IiwibnVtX2RlY2ltYWwiLCJudW1fZGl2aWRlIiwiJyIsIl9tb2RpZmllciIsInNoaWZ0Iiwib3B0aW9uIiwiY3RybCIsImNvbnRyb2wiLCJjbWQiLCJjb21tYW5kIiwibW9kaWZpZXJNYXAiLCIxNiIsIjE4IiwiMTciLCI5MSIsInNoaWZ0S2V5IiwiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCJfbW9kcyIsIl9oYW5kbGVycyIsIl9kb3duS2V5cyIsIndpbkxpc3RlbmRGb2N1cyIsIl9zY29wZSIsImVsZW1lbnRIYXNCaW5kRXZlbnQiLCJjb2RlIiwieCIsInRvVXBwZXJDYXNlIiwiY2hhckNvZGVBdCIsInNldFNjb3BlIiwic2NvcGUiLCJnZXRTY29wZSIsImVhY2hVbmJpbmQiLCJfcmVmJHNwbGl0S2V5Iiwic3BsaXRLZXkiLCJmb3JFYWNoIiwib3JpZ2luS2V5IiwidW5iaW5kS2V5cyIsImxlbiIsImxhc3RLZXkiLCJrZXlDb2RlIiwiZmlsdGVyIiwicmVjb3JkIiwiYTEiLCJhMiIsImFycjEiLCJhcnIyIiwiaXNJbmRleCIsImNvbXBhcmVBcnJheSIsImV2ZW50SGFuZGxlciIsImhhbmRsZXIiLCJlbGVtZW50IiwibW9kaWZpZXJzTWF0Y2giLCJzaG9ydGN1dCIsInByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJjYW5jZWxCdWJibGUiLCJkaXNwYXRjaCIsImFzdGVyaXNrIiwid2hpY2giLCJjaGFyQ29kZSIsImhvdGtleXMiLCJrZXlOYW1lIiwia2V5TnVtIiwiZ2V0TW9kaWZpZXJTdGF0ZSIsImtleWRvd24iLCJrZXl1cCIsImtleVNob3J0Y3V0IiwiX2Rvd25LZXlzQ3VycmVudCIsImpvaW4iLCJpc0VsZW1lbnRCaW5kIiwiY2xlYXJNb2RpZmllciIsIl9hcGkiLCJkZWxldGVTY29wZSIsIm5ld1Njb3BlIiwiaGFuZGxlcnMiLCJnZXRQcmVzc2VkS2V5Q29kZXMiLCJpc1ByZXNzZWQiLCJzcmNFbGVtZW50IiwidGFnTmFtZSIsImZsYWciLCJpc0NvbnRlbnRFZGl0YWJsZSIsInJlYWRPbmx5IiwidHJpZ2dlciIsImZpbmQiLCJ1bmJpbmQiLCJrZXlzSW5mbyIsImtleU1hcCIsIl9ob3RrZXlzIiwibm9Db25mbGljdCIsImRlZXAiLCJ1c2VJc0hvdGtleVByZXNzZWQiLCJ0YWdGaWx0ZXIiLCJlbmFibGVPblRhZ3MiLCJ0YXJnZXRUYWdOYW1lIiwiQm9vbGVhbiIsImRlcHMiLCJfcmVmMiRmaWx0ZXJQcmV2ZW50RGUiLCJmaWx0ZXJQcmV2ZW50RGVmYXVsdCIsIl9yZWYyJGVuYWJsZWQiLCJlbmFibGVkIiwiX3JlZjIkZW5hYmxlT25Db250ZW50IiwiZW5hYmxlT25Db250ZW50RWRpdGFibGUiLCJtZW1vaXNlZENhbGxiYWNrIiwia2V5Ym9hcmRFdmVudCIsImhvdGtleXNFdmVudCIsIl9rZXlib2FyZEV2ZW50JHRhcmdldCIsImFjdGl2ZUVsZW1lbnQiLCJpc0hvdGtleVByZXNzZWQiXSwibWFwcGluZ3MiOiI2REFDRSxJQUFJQSxFQUFtQixH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RGEsRUFBd0JGLEVBQWM1OUIsU0FBbUI4OUIsRUFBc0J6QixvQkFBc0JxQixLQUluTCxPQUFoQi8vQixFQUFJc0gsU0FBb0JkLFNBQVM0NUIsZ0JBQWtCcGdDLEVBQUlzSCxXQUN6RCtNLEVBQVM0ckIsRUFBZUMsSUFDakIsS0FJUlQsRUFBTyxDQUFDei9CLEVBQUtzL0IsRUFBY3BELEdBQVExdEIsT0FBT2l4QixHQUFRLENBQUN6L0IsRUFBS3MvQixFQUFjcEQsSUFpQnpFLE9BaEJBLHFCQUFVLFdBQ1IsR0FBSzJELEVBV0wsT0FMSWxDLElBQXFCLElBQVpELElBQ1h2cEIsRUFBUXVwQixTQUFVLEdBR3BCSixFQUFRNWtCLEVBQU12RSxHQUFXLEdBQUk2ckIsR0FDdEIsV0FDTCxPQUFPMUMsRUFBUXdCLE9BQU9wbUIsRUFBTXNuQixJQVg1QjFDLEVBQVF3QixPQUFPcG1CLEVBQU1zbkIsS0FhdEIsQ0FBQ0EsRUFBa0J0bkIsRUFBTW1uQixJQUNyQjcvQixFQUdULElBQUlxZ0MsRUFBa0IvQyxFQUFRZ0IiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTMpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwidmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjKG9iaikge1xuICB2YXIgb3V0ID0gXCJcIlxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIpIHJldHVybiBvYmogfHwgXCJcIlxuXG4gIGlmIChpc0FycmF5KG9iaikpXG4gICAgZm9yICh2YXIgayA9IDAsIHRtcDsgayA8IG9iai5sZW5ndGg7IGsrKykge1xuICAgICAgaWYgKCh0bXAgPSBjYyhvYmpba10pKSAhPT0gXCJcIikge1xuICAgICAgICBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyB0bXBcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBrIGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrKSAmJiBvYmpba10pIG91dCArPSAob3V0ICYmIFwiIFwiKSArIGtcbiAgICB9XG5cbiAgcmV0dXJuIG91dFxufVxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uIH0gZnJvbSBcIi4vSWNvblwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGFiZWwgfSBmcm9tIFwiLi9MYWJlbFwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25MaW5rIH0gZnJvbSBcIi4vQnV0dG9uTGlua1wiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclN3YXRjaCB9IGZyb20gXCIuL0NvbG9yU3dhdGNoXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgeyBJdGVtLCBSZW5kZXJEaXNwbGF5UHJvcHMgfSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL0NsaWNrYWJsZS5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBpY29uTWVudSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5cbmV4cG9ydCB0eXBlIENsaWNrYWJsZVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IE9taXQ8XG4gIFJlbmRlckRpc3BsYXlQcm9wczxUPixcbiAgXCJzZWxlY3RlZEl0ZW1cIiB8IFwidG9nZ2xlSXNPcGVuXCJcbj4gJiB7XG4gIG9uQ2xpY2s6IFJlbmRlckRpc3BsYXlQcm9wczxUPltcInRvZ2dsZUlzT3BlblwiXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDbGlja2FibGU8VCBleHRlbmRzIEl0ZW0+KHtcbiAgZGlzcGxheSxcbiAgaXNEaXNhYmxlZCxcbiAgb25DbGljazogaGFuZGxlQ2xpY2ssXG59OiBDbGlja2FibGVQcm9wczxUPikge1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5jb250YWluZXJ9PlxuICAgICAgICB7ZGlzcGxheX1cbiAgICAgICAgPEljb24gYWx0PVwiRHJvcGRvd25cIiBzcmM9e2ljb25NZW51fSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1lbnUgfSBmcm9tIFwiLi9NZW51XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVDb250YWluZXIsIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVJdGVtIH0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUxpbmtJdGVtIH0gZnJvbSBcIi4vTWVudUxpbmtJdGVtXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgUGxhY2VtZW50Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8XG4gIE1lbnVDb250YWluZXJQcm9wc1tcInBsYWNlbWVudFwiXSB8IHVuZGVmaW5lZFxuPih1bmRlZmluZWQpO1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cbiAgICAgIDxQbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1c2VNZW1vKCgpID0+IHBsYWNlbWVudCwgW3BsYWNlbWVudF0pfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1lbnVDb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC52ZXJ0aWNhbF0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9QbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3J3YXJkUmVmKE1lbnVDb250YWluZXIpO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJsaXN0Vmlld0l0ZW1cIjpcIlZLWW9OdFdUWnVpMkFPMUlseUpNVHc9PVwifTsiLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkJhZGdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmlsZUlucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UYWJsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0SW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9hc3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVmlkZW9cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTnVtcGFkXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIEJ1dHRvblByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gIG9uUG9pbnRlckRvd24/OiAoZXZlbnQ6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwibGVmdFwiIHwgXCJyaWdodFwiPjtcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG9uUG9pbnRlckRvd24sXG4gIGNvbnRhaW5lclJlZixcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSxcbn06IEJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBvblBvaW50ZXJEb3duPXtvblBvaW50ZXJEb3dufVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ4eW51TXU4WFpTc29uRHVrc2w2QVFnPT1cIixcImxlZnRcIjpcIlBrcDBIaE5IdHRvV0liMmR3cEdudHc9PVwiLFwic21hbGxcIjpcIndET2VlSkdDWm0wazJacE56RmJlSGc9PVwiLFwibGFyZ2VcIjpcIl81UWpCV3RsN1lYeTRlbTRYM0dQYlJBPT1cIixcInhsYXJnZVwiOlwia04wTGdhNGZCT2djaWdEcXRPRFJkZz09XCIsXCJpbnZlcnRlZFwiOlwiKzVuc1RuTGxOT1g4S0ZRaVVoVDFrUT09XCIsXCJyb3VuZGVkXCI6XCJCalAtSk5XSmpvQmZOTU16dG55V09RPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJsR0p3TmNvbDhDQWtucXhZKzhEZnFnPT1cIixcImxlZnRPZmZzZXRcIjpcIkVWK2c2aFVBMXF2OExROVJxZ3JRUlE9PVwiLFwibm9TaGFkb3dcIjpcIlozdVBMcnJ5cUlOZlJqWnBwd1U2TlE9PVwiLFwibm9Cb3JkZXJcIjpcImVFZ2hHNkdYQjlJenlEM2pyTlpmQUE9PVwiLFwidHJhbnNwYXJlbnRcIjpcInNzN0RoVmdGNUpHc3BDQVNkWlVZQmc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiaThRUFNyNGNIWWhKN0FpdWUrY3gwZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiV1N4aW1VTTlreFlHYzVWUmMwaVpsQT09XCIsXCJub1BhZGRpbmdcIjpcIlNnWGNoano0ZEpyK3RjOHlrTG5FMUE9PVwiLFwiY29udGVudFwiOlwieG44eWZqTjZtZXhSWElneU5obWtpdz09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi9CdXR0b25CYWRnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3NcIjtcblxudHlwZSBCdXR0b25CYWRnZVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbkJhZGdlKHsgY2hpbGRyZW4sIGludmVydGVkID0gZmFsc2UsIGNsYXNzTmFtZSB9OiBCdXR0b25CYWRnZVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuYnV0dG9uQmFkZ2UsIHtbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWR9LCBjbGFzc05hbWVdKX0+e2NoaWxkcmVufTwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYWRnZTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYnV0dG9uQmFkZ2VcIjpcIlJTamJSaVhGV0FmQnpjQ29hTXBYZUE9PVwiLFwiaW52ZXJ0ZWRcIjpcIlg0bzRPS3NTMVQ0bWlJczBDcTV4LWc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwibGVmdFwiIHwgXCJyaWdodFwiO1xuXG50eXBlIEJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gICAgICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBCdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc2l6ZSxcbiAgY29udGFpbmVyUmVmLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgLi4ucHJvcHNcbn06IEJ1dHRvbkxpbmtQcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25MaW5rO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlpJcjl3LS1mU2l2cVdWR29TcDE0dEE9PVwiLFwibGVmdFwiOlwiclJ5dTlBVkd3WCsteGpUT01UU0Uxdz09XCIsXCJzbWFsbFwiOlwiXzBEQmhHSnZjYmpFTWxTcUVvZkYtcnc9PVwiLFwibWVkaXVtXCI6XCJhNit6Y1VZNlhLeTk0ekFxVVlhRTZ3PT1cIixcImxhcmdlXCI6XCJXK3Y0dkZlYlFreHcxY2RpS1ktS3ZnPT1cIixcInhsYXJnZVwiOlwiZFk5MURRUllVYVdUNEV6T0pKK0dCZz09XCIsXCJpbnZlcnRlZFwiOlwieXBsQ3B5bEw0SWRlcytjT3JxU2ltUT09XCIsXCJyb3VuZGVkXCI6XCJNUkVZMDkrZDY5dlY4NGhabkp1TFl3PT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJIc2FvN21GVzNsWVRyTmhmV3ZmeFd3PT1cIixcImxlZnRPZmZzZXRcIjpcIk1YbEwzTzhLVVllVkFZY1Nzbk5zOXc9PVwiLFwibm9TaGFkb3dcIjpcIkhxejRDcVFjTzRzME1UYXdyRHIwb0E9PVwiLFwidHJhbnNwYXJlbnRcIjpcImgxaE53YzJVbE0wQzVGLXhkZ2E1ZHc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiVG15cTQrdUhVK0pKZVlOZEJIOEwyUT09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiSnp6R25UdDRhTTMrOXJWbE5RV2kwQT09XCIsXCJub1BhZGRpbmdcIjpcIlV2SThVbmpjOVgwek4ybDVXK3RtclE9PVwiLFwibm9Cb3JkZXJcIjpcIlFwNXVCblFnSkZvWkhnWVNoekFQY3c9PVwiLFwiZGlzYWJsZWRcIjpcIlpYbGprWXBQV2pESkxDNEJFR01wcnc9PVwiLFwiY29udGVudFwiOlwiXzBuMk1uT2ZKUG0yd3hzNE0ybmJHSEE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vQ2hlY2tib3hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NoZWNrYm94Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBDaGVja2JveFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNpemU/OiBTaXplO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuXG59O1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgcGxhY2Vob2xkZXIsXG4gIGNoZWNrZWQsXG4gIGRpc2FibGVkLFxuICBuYW1lLFxuICBjbGFzc05hbWUsXG4gIGluZGV0ZXJtaW5hdGUsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbn06IENoZWNrYm94UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TGFiZWwgdmFsdWU9e2xhYmVsfSA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjaGVja2JveFwiXG4gICAgICAgIHJlZj17KGlucHV0UmVmKSA9PiB7XG4gICAgICAgICAgaWYgKGlucHV0UmVmKSB7XG4gICAgICAgICAgICBpbnB1dFJlZi5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNoZWNrYm94LCBjbGFzc05hbWUsIHN0eWxlc1tzaXplXV0pfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgLz5cbiAgICA8L0xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGVja2JveDtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMYWJlbElucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MTGFiZWxFbGVtZW50PjtcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9XG4gICAgPlxuICAgICAge3ZhbHVlfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImJSN1BPOHlSRnRVbE4xdnNQN2VjUlE9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNoZWNrYm94XCI6XCJDQlFaNFBwMWNsYis1UjhJbENPNGdRPT1cIixcInNtYWxsXCI6XCJfNWpianV0N0dndDdneGVuanlmOUxiUT09XCIsXCJtZWRpdW1cIjpcImlQQU93MlpzTkpBMG5XRFhxV0MzN2c9PVwiLFwibGFyZ2VcIjpcIkxFeWtYczltRUVTZHdvNmlab01kVXc9PVwiLFwieGxhcmdlXCI6XCJ1cXBBQ0VKMW9iQTRiUmxhZUFUMjdnPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclBpY2tlciB9IGZyb20gXCIuL0NvbG9yUGlja2VyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IENvbG9yU3dhdGNoIH0gZnJvbSBcIi4uL0NvbG9yU3dhdGNoXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yUGlja2VyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JQaWNrZXJQcm9wcyA9IHtcbiAgY29sb3JzOiBDb2xvcltdO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBkaXJlY3Rpb24/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcbiAgb25TZWxlY3Q6IChjb2xvcjogQ29sb3IpID0+IHZvaWQ7XG4gIHNlbGVjdGVkQ29sb3I/OiBDb2xvcjtcbiAgY2FuVG9nZ2xlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIENvbG9yUGlja2VyKHtcbiAgY29sb3JzLFxuICBjb250YWluZXJSZWYsXG4gIG9uU2VsZWN0LFxuICBzZWxlY3RlZENvbG9yLFxuICBkaXJlY3Rpb24gPSBcInZlcnRpY2FsXCIsXG4gIGNhblRvZ2dsZSA9IGZhbHNlLFxufTogQ29sb3JQaWNrZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbG9yUGlja2VyLCBzdHlsZXNbZGlyZWN0aW9uXV0pfVxuICAgID5cbiAgICAgIHtjb2xvcnMubWFwKChjb2xvcjogQ29sb3IpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChjYW5Ub2dnbGUgJiYgY29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXkpIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvblNlbGVjdChjb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPENvbG9yU3dhdGNoXG4gICAgICAgICAgICBrZXk9e2NvbG9yLmtleX1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2NvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0fVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JQaWNrZXI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JTd2F0Y2gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IsIFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclN3YXRjaFByb3BzID0ge1xuICBjb2xvcjogQ29sb3I7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBDb2xvclN3YXRjaCh7XG4gIGNvbG9yLFxuICBjb250YWluZXJSZWYsXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIG9uQ2xpY2ssXG59OiBDb2xvclN3YXRjaFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbG9yU3dhdGNoLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnNlbGVjdGVkXTogaXNTZWxlY3RlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJjb2xvci1zd2F0Y2hcIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogY29sb3IuaGV4Q29kZSB9fVxuICAgID5cbiAgICAgIHtjb2xvci5sYWJlbCAmJiA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zck9ubHl9PntgU2VsZWN0ICR7Y29sb3IubGFiZWx9IGNvbG9yYH08L3NwYW4+fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclN3YXRjaDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JTd2F0Y2hcIjpcInVUZjdtWWZYZU5UN0duMHpublI4RFE9PVwiLFwic21hbGxcIjpcImFBYmV6ak9tdzJOeVQ5UlU3UHV5T0E9PVwiLFwibGFyZ2VcIjpcIlFjNlNDdnFibm5oSjN6dGd6UFpPRkE9PVwiLFwieGxhcmdlXCI6XCJfNm9CQlpEa1JremY3dEY0Ymh5RHRBQT09XCIsXCJzZWxlY3RlZFwiOlwibmljWmZnTWsrdVFGUHlwSklrUXVidz09XCIsXCJzck9ubHlcIjpcIkdIcEhFQjFRWER5amVSOVZuRWQxVGc9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yUGlja2VyXCI6XCJES3RQNTViT2ZVVEIxa0RhLWlVSHFRPT1cIixcImhvcml6b250YWxcIjpcIl8zNExqOC1iLTEzQzhMMDlSc01pbmVnPT1cIixcInZlcnRpY2FsXCI6XCJfMXl1Z0dRczRFazB0M1Q4dGdvS3hWUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiLi4vTW9kYWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIENvbmZpcm1hdGlvbk1vZGFsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgYnV0dG9uc0xlZnQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgYnV0dG9uc1JpZ2h0PzogUmVhY3RFbGVtZW50W107XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIENvbmZpcm1hdGlvbk1vZGFsKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGlzT3BlbixcbiAgYnV0dG9uc0xlZnQgPSBbXSxcbiAgYnV0dG9uc1JpZ2h0ID0gW10sXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBiYXNlWkluZGV4ID0gMTAxOSxcbn06IENvbmZpcm1hdGlvbk1vZGFsUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgbm9PdmVybGF5PXtub092ZXJsYXl9XG4gICAgICBub1NoYWRvdz17bm9TaGFkb3d9XG4gICAgICBiYXNlWkluZGV4PXtiYXNlWkluZGV4fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgICB7ISFoZWFkZXIgJiYgPGgxIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsSGVhZGVyfT57aGVhZGVyfTwvaDE+fVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWxDb250ZW50LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc0xlZnR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zUmlnaHR9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cblxuQ29uZmlybWF0aW9uTW9kYWwuZGlzcGxheU5hbWUgPSBcIkNvbmZpcm1hdGlvbk1vZGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpcm1hdGlvbk1vZGFsO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlSG90a2V5cyB9IGZyb20gXCJyZWFjdC1ob3RrZXlzLWhvb2tcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTW9kYWxQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYnV0dG9uPzogUmVhY3ROb2RlO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIE1vZGFsKHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaXNPcGVuLFxuICBidXR0b24sXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIGJhc2VaSW5kZXggPSAxMDA5LFxufTogTW9kYWxQcm9wcykge1xuICB1c2VIb3RrZXlzKFwiRXNjYXBlXCIsIG9uQ2xvc2UpO1xuXG4gIGNvbnN0IGhhbmRsZU92ZXJsYXlDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkNsb3NlKCk7XG4gIH0sIFtvbkNsb3NlXSk7XG5cbiAgcmV0dXJuIChcbiAgICBpc09wZW4gJiYgKFxuICAgICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vT3ZlcmxheV06IG5vT3ZlcmxheSB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlT3ZlcmxheUNsaWNrfVxuICAgICAgICAvPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMSB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7YnV0dG9uICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAyIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YnV0dG9ufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwicFU2SUIycjBMcENGUFhnVHZPcjJnQT09XCIsXCJub092ZXJsYXlcIjpcIl81U1VSOUZoLWZIVHk0WHI2bVFDK3BBPT1cIixcIm1vZGFsXCI6XCJMQ0FUODNtdVhzQUdyUFVIUTF5K2hRPT1cIixcInRyYW5zcGFyZW50XCI6XCJXSFU4UWJweitBdlQtWXB1UWVVSy1RPT1cIixcIm5vU2hhZG93XCI6XCJHaTFWVG1nM0dQTnhuWDkxLW0wLTVnPT1cIixcIm1vZGFsQnV0dG9uXCI6XCJsZm5mSHUreHllRWpjUWJBUXdqSVRnPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImp2S1NpLWZLdWZjcEs5ZUJXV0ZDTGc9PVwiLFwibW9kYWxIZWFkZXJcIjpcImN4MVJvUWRnQWJlbnZWWFU4QjdmU3c9PVwiLFwibW9kYWxDb250ZW50XCI6XCJaRDR2M0hFLUFZWlhWMElUV0RGN0dnPT1cIixcIm5vUGFkZGluZ1wiOlwiXzF6RkY4eHF5bzc3VXhHMnY1NDlCZUE9PVwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJfNGhRaENlNVU3WUJ5aG5oTystR3Fpdz09XCIsXCJtb2RhbEJ1dHRvbnNcIjpcIkpvSUxiVzVGblppeGFKN0VUdm84K3c9PVwifTsiLCJleHBvcnQge1xuICBEcm9wZG93bixcbiAgRHJvcGRvd25Qcm9wcyxcbiAgSXRlbSBhcyBEcm9wZG93bkl0ZW0sXG4gIEl0ZW1Cb2R5UmVuZGVyZXJGbiBhcyBEcm9wZG93bkl0ZW1Cb2R5UmVuZGVyZXJGbixcbiAgUmVuZGVyQ2xpY2thYmxlRm4gYXMgRHJvcGRvd25SZW5kZXJDbGlja2FibGVGbixcbiAgUmVuZGVyRGlzcGxheVByb3BzIGFzIERyb3Bkb3duUmVuZGVyRGlzcGxheVByb3BzLFxufSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuZXhwb3J0IHtcbiAgQ2xpY2thYmxlIGFzIERyb3Bkb3duQ2xpY2thYmxlLFxuICBDbGlja2FibGVQcm9wcyBhcyBEcm9wZG93bkNsaWNrYWJsZVByb3BzXG59IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Q2hpbGQsIFJlYWN0RWxlbWVudCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljayB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuXG5pbXBvcnQgeyBDbGlja2FibGUgfSBmcm9tIFwiLi9DbGlja2FibGVcIjtcbmltcG9ydCB7IE1lbnUsIE1lbnVDb250YWluZXIsIE1lbnVJdGVtLCBNZW51UGxhY2VtZW50IH0gZnJvbSBcIi4uL01lbnVcIjtcblxuZXhwb3J0IHR5cGUgSXRlbSA9IHsgaWQ6IG51bWJlciB8IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckRpc3BsYXlQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBQaWNrPFxuICBEcm9wZG93blByb3BzPFQ+LFxuICBcImRpc3BsYXlcIiB8IFwic2VsZWN0ZWRJdGVtXCJcbj4gJiB7IGlzRGlzYWJsZWQ6IGJvb2xlYW47IHRvZ2dsZUlzT3BlbjogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJDbGlja2FibGVGbjxUIGV4dGVuZHMgSXRlbT4gPSAoXG4gIHByb3BzOiBSZW5kZXJEaXNwbGF5UHJvcHM8VD5cbikgPT4gUmVhY3RFbGVtZW50O1xuXG5leHBvcnQgdHlwZSBJdGVtQm9keVJlbmRlcmVyRm48VCBleHRlbmRzIEl0ZW0+ID0gKHN0YXRlOiB7XG4gIGl0ZW06IFQ7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59KSA9PiBSZWFjdENoaWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duUHJvcHM8VCBleHRlbmRzIEl0ZW0+IHtcbiAgaXRlbUJvZHlSZW5kZXJlcj86IEl0ZW1Cb2R5UmVuZGVyZXJGbjxUPjtcbiAgaXRlbXM6IFRbXTtcbiAgb25TZWxlY3Q6IChpdGVtOiBUKSA9PiB2b2lkO1xuICBkaXNwbGF5OiBSZWFjdENoaWxkO1xuICByZW5kZXJDbGlja2FibGU/OiBSZW5kZXJDbGlja2FibGVGbjxUPjtcbiAgc2VsZWN0ZWRJdGVtOiBUIHwgbnVsbDtcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3Bkb3duPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGl0ZW1Cb2R5UmVuZGVyZXIsXG4gIGl0ZW1zLFxuICBvblNlbGVjdDogaGFuZGxlU2VsZWN0LFxuICBkaXNwbGF5LFxuICByZW5kZXJDbGlja2FibGUsXG4gIHNlbGVjdGVkSXRlbSxcbiAgcGxhY2VtZW50ID0geyB2ZXJ0aWNhbDogXCJib3R0b21cIiwgaG9yaXpvbnRhbDogXCJsZWZ0XCIgfVxufTogRHJvcGRvd25Qcm9wczxUPikge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gc2V0SXNPcGVuKGZhbHNlKSk7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGl0ZW06IFQpID0+IHtcbiAgICBoYW5kbGVTZWxlY3QoaXRlbSk7XG4gICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgfTtcbiAgY29uc3QgaXNEaXNhYmxlZCA9ICFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHRvZ2dsZUlzT3BlbiA9ICgpID0+IHNldElzT3BlbighaXNPcGVuKTtcblxuICByZXR1cm4gKFxuICAgIDxNZW51Q29udGFpbmVyXG4gICAgICBidXR0b249e1xuICAgICAgICB0eXBlb2YgcmVuZGVyQ2xpY2thYmxlID09PSBcImZ1bmN0aW9uXCIgPyAoXG4gICAgICAgICAgcmVuZGVyQ2xpY2thYmxlKHtcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLFxuICAgICAgICAgICAgdG9nZ2xlSXNPcGVuLFxuICAgICAgICAgIH0pXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPENsaWNrYWJsZVxuICAgICAgICAgICAgZGlzcGxheT17ZGlzcGxheX1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVJc09wZW59XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcGxhY2VtZW50PXtwbGFjZW1lbnR9XG4gICAgICByZWY9e3JlZn1cbiAgICA+XG4gICAgICA8TWVudSBpc09wZW49e2lzT3Blbn0+XG4gICAgICAgIHtpdGVtcyAmJlxuICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgPE1lbnVJdGVtXG4gICAgICAgICAgICAgIGlzQWN0aXZlPXtpdGVtLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkfVxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNsaWNrKGl0ZW0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aXRlbUJvZHlSZW5kZXJlclxuICAgICAgICAgICAgICAgID8gaXRlbUJvZHlSZW5kZXJlcih7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGl0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWQsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogaXRlbS5uYW1lfVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICApKX1cbiAgICAgIDwvTWVudT5cbiAgICA8L01lbnVDb250YWluZXI+XG4gICk7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uLm1vZHVsZS5jc3NcIjtcblxudHlwZSBJY29uUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxJbWFnZUVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHNyYzogc3RyaW5nO1xuICBzaXplPzogXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIiB8IFwieGxhcmdlXCI7XG59O1xuXG5mdW5jdGlvbiBJY29uKHtcbiAgc3JjLFxuICBhbHQsXG4gIGNvbnRhaW5lclJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGludmVydGVkID0gZmFsc2UsXG59OiBJY29uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8aW1nXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7IFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCB9LFxuICAgICAgXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImljb25cIlxuICAgICAgYWx0PXthbHR9XG4gICAgICBzcmM9e3NyY31cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpY29uXCI6XCJZQTJJSFFENG9wcE9pb1pJQ0h3end3PT1cIixcInNtYWxsXCI6XCJxZHpzMkVNbUJkYjBNek5TMGlEaE1BPT1cIixcIm1lZGl1bVwiOlwiSTZlRUdJQks1OU9rZHB3VW91YWF1UT09XCIsXCJsYXJnZVwiOlwiXzJiaTZJRVloZE1iUGdQSmZ3b1BqdUE9PVwiLFwieGxhcmdlXCI6XCJja2tyNFpGT1ZHdUNONEVqUE1xZUdBPT1cIixcImludmVydGVkXCI6XCJlbTVyTDRuQUgxSXdmM01IZUllUG1nPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIncwQ3Bhc2pZeUxSLWkyUE5JbjlFc2c9PVwifTsiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQgNUw3LjUgMTJMMSA1JyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiaW1wb3J0IFJlYWN0LCB7XG4gIFJlYWN0Tm9kZSxcbiAgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IFBsYWNlbWVudENvbnRleHQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnUubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGZvb3Rlcj86IFJlYWN0Tm9kZTtcbiAgc21hcnRMYXlvdXQ/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gTWVudSh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGNsYXNzTmFtZSxcbiAgaXNPcGVuID0gdHJ1ZSxcbiAgaGVhZGVyLFxuICBmb290ZXIsXG4gIHNtYXJ0TGF5b3V0ID0gdHJ1ZSxcbn06IE1lbnVQcm9wcykge1xuICBjb25zdCBtZW51UGxhY2VtZW50ID0gdXNlQ29udGV4dChQbGFjZW1lbnRDb250ZXh0KTtcbiAgY29uc3QgaW5uZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVmID0gY29udGFpbmVyUmVmIHx8IGlubmVyUmVmO1xuXG4gIGlmICghbWVudVBsYWNlbWVudClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIk1lbnUgY29tcG9uZW50IG11c3QgYmUgd3JhcHBlZCBieSBhIE1lbnVDb250YWluZXIgY29tcG9uZW50LlwiXG4gICAgKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzbWFydExheW91dCAmJiByZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgeyB0b3AsIGJvdHRvbSB9ID0gcmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBkaXN0YW5jZVRvRWRnZSA9XG4gICAgICAgIG1lbnVQbGFjZW1lbnQudmVydGljYWwgPT09IFwidG9wXCIgPyB0b3AgOiB3aW5kb3cuaW5uZXJIZWlnaHQgLSBib3R0b207XG5cbiAgICAgIGlmIChkaXN0YW5jZVRvRWRnZSA8IDApIHtcbiAgICAgICAgY29uc3QgdWxFbCA9IHJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJ1bFwiKTtcbiAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50cyA9IHVsRWwucXVlcnlTZWxlY3RvckFsbChcImxpLGFcIik7XG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IHVsRWwuY2xpZW50SGVpZ2h0ICsgZGlzdGFuY2VUb0VkZ2U7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGNoaWxkRWxlbWVudHMubGVuZ3RoXG4gICAgICAgICAgPyBnZXRDb21wdXRlZFN0eWxlKGNoaWxkRWxlbWVudHNbMF0pLm1pbkhlaWdodFxuICAgICAgICAgIDogMDtcbiAgICAgICAgdWxFbC5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygke25ld0hlaWdodH1weCAtICR7b2Zmc2V0fSlgO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgbWVudVBsYWNlbWVudCwgc21hcnRMYXlvdXRdKTtcblxuICBpZiAoIWlzT3Blbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLm1lbnUsXG4gICAgICAgICAgeyBbc3R5bGVzLm9wZW5dOiBpc09wZW4gfSxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIF0pfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHtoZWFkZXIgJiYgaXNPcGVuICYmIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PntoZWFkZXJ9PC9oMz59XG4gICAgICAgICAgPHVsPntjaGlsZHJlbn08L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2Zvb3RlciAmJiBpc09wZW4gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICBzdHlsZXMuZm9vdGVyLFxuICAgICAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiAhY2hpbGRyZW4gfSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmb290ZXJ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJxY3ZEU2ZGdCt3MGphMmZxUGMwUzV3PT1cIixcIm1lbnVDb250YWluZXJcIjpcIkx3cjFhM2JQLTk1YWV6em1hY29KZnc9PVwiLFwidG9wXCI6XCJiQkhicytGV2k2LXp3V01aSW1GK05BPT1cIixcInJpZ2h0XCI6XCJCOE00Mk53b1o4cFVWbTVSNEpKdjFnPT1cIixcImxlZnRcIjpcInBPRzd0WGZURms4cXFYdE5DMEUtT3c9PVwiLFwiYm90dG9tXCI6XCJ1Y3ZOMEVGTW5zOGJmVnZzaTlqOXlRPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJyU0Jmc0ZOampvb0pzREgtWCtZWGJ3PT1cIixcIm9wZW5cIjpcInZYN3ZnQTlabEY3VDlFUjlWSm9kYlE9PVwiLFwiZW50cmFuY2VcIjpcIkdwQjJMc2FkaHVHSlp2S29OT2RvekE9PVwiLFwiaGVhZGVyXCI6XCJvQVRsQkZnZXBaNWdBWkFyLUN4bkFBPT1cIixcImZvb3RlclwiOlwid0tlRTczellmYi03Y1JOLUY4T1kxZz09XCIsXCJub0JvcmRlclwiOlwiTEQ2TER2cy15bE1yUGdzbGo0eDNoZz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUl0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTExJRWxlbWVudD4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBNZW51SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBpc0FjdGl2ZSA9IGZhbHNlLFxufTogTWVudUl0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51SXRlbSxcbiAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlIH0sXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUl0ZW1cIjpcIm1KZDdkUlpOT3dZZThJOUNxRmx6cmc9PVwiLFwibm9QYWRkaW5nXCI6XCJ4Y2tET2RuUFBZS1RreW0yYXd0cmpBPT1cIixcImFjdGl2ZVwiOlwieCt5ckNxNUJ1K2pnWDdTUlVyOWZldz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUxpbmtJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgYXM6IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBNZW51TGlua0l0ZW0oe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IE1lbnVMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIGRhdGEtdGVzdGlkPVwibWVudS1saW5rLWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51TGlua0l0ZW0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51TGlua0l0ZW07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVMaW5rSXRlbVwiOlwib0VyOFpKWExuWnlESkJPUlp0SVY0dz09XCIsXCJub1BhZGRpbmdcIjpcIl8zVE5JSkFldEFTeXpiSStLbExUSEN3PT1cIixcImFjdGl2ZVwiOlwiZ2hhdUNUUFRCRUpBdUFvNjMyejVmUT09XCIsXCJtZW51SXRlbVwiOlwibjF4bjRFWXV4RXFPYzNmQ0VhbXozUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUlucHV0IH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcblxudHlwZSBQcm9wcyA9IHtcbiAgb25DaGFuZ2U6IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYWNjZXB0Pzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIHNpemU/OiBGaWxlSW5wdXRTaXplO1xufTtcblxuZnVuY3Rpb24gRmlsZUlucHV0KHtcbiAgY2hpbGRyZW4sXG4gIGFjY2VwdCxcbiAgb25DaGFuZ2UsXG4gIGlucHV0UmVmLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubGFiZWwsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGlkPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxlSW5wdXQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImlucHV0XCI6XCJlVXFhMzUrRW0yTGNoMjZOeGpidStRPT1cIixcImxhYmVsXCI6XCJueFcyMWg4VUkwTU50d28ya2NBZEl3PT1cIixcInNtYWxsXCI6XCJOZGExcEFjR0pjeURERVM1RVZKc293PT1cIixcImxhcmdlXCI6XCJ6cUxTM1lIWHRqbE1Cc0ZPenJ2RVpnPT1cIixcInhsYXJnZVwiOlwiVlpsNVd5QWt2MzAxLWhDQ3plNU1uUT09XCIsXCJpbnZlcnRlZFwiOlwidmxTYUpRSmh6dDZJTnZXaThOdFV3Zz09XCIsXCJyb3VuZGVkXCI6XCJiLXg1VHJ5U05HQ0Y5SFk4SjNIdEFBPT1cIixcIm5vU2hhZG93XCI6XCJfNXdsMTRKamYxeXhId0FMeG1FdzZNUT09XCIsXCJub0JvcmRlclwiOlwiZGxYV1FPbE5lK2FGa1ZiUHhETG00QT09XCIsXCJub1BhZGRpbmdcIjpcImlQeFVHLU9OMVhMT2tmVlB6dDdOWVE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkJQWEk5dTNoZ0F5ZEFjNUJ6emtDTmc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSk0zSlZYdDc3bkg5dXIrYUwrUllEZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiTVhhc2tmZld6MmstaHF0SFJ0MnZPUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDpcbiAgICB8IFwicmlnaHRcIlxuICAgIHwgXCJyaWdodEVkZ2VcIlxuICAgIHwgXCJyaWdodE9uRWRnZVwiXG4gICAgfCBcImxlZnRcIlxuICAgIHwgXCJsZWZ0RWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsOlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJ0b3BFZGdlXCJcbiAgICB8IFwidG9wT25FZGdlXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwiYm90dG9tRWRnZVwiXG4gICAgfCBcImJvdHRvbU9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XG59O1xuXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvbHVtblwiIHwgXCJyb3dcIjtcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50O1xufTtcblxuZnVuY3Rpb24gRmxvYXRpbmdQYW5lbCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgbGF5b3V0ID0gXCJjb2x1bW5cIixcbiAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImNlbnRlclwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiwgcGFyZW50OiBcInZpZXdwb3J0XCIgfSxcbn06IEZsb2F0aW5nUGFuZWxQcm9wcykge1xuICBjb25zdCBob3Jpem9udGFsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQuaG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIlxuICAgICAgPyBcImhvcml6b250YWxDZW50ZXJcIlxuICAgICAgOiBwbGFjZW1lbnQuaG9yaXpvbnRhbDtcblxuICBjb25zdCB2ZXJ0aWNhbFBsYWNlbWVudCA9XG4gICAgcGxhY2VtZW50LnZlcnRpY2FsID09PSBcImNlbnRlclwiID8gXCJ2ZXJ0aWNhbENlbnRlclwiIDogcGxhY2VtZW50LnZlcnRpY2FsO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImZsb2F0aW5nLXBhbmVsXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbaG9yaXpvbnRhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1t2ZXJ0aWNhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1tsYXlvdXRdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IHBsYWNlbWVudC5wYXJlbnQgIT09IFwiY29udGFpbmVyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvYXRpbmdQYW5lbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrVVRDcTdzTzVjUUhybjIwUEpVQ213PT1cIixcInJvd1wiOlwidGRuYzFiREhEbUdiZ0FjN1NKcjY5UT09XCIsXCJjb2x1bW5cIjpcIk1tdDA3Nk42QXh5SDROUkRwQ083V0E9PVwiLFwiZml4ZWRcIjpcIl85MmViUXZKNXhOS0pTOHpha0s3UzJBPT1cIixcInBsYWluXCI6XCJ5K2lkRHhaKzVNcHA3T0kzR1BMQUVnPT1cIixcInRyYW5zcGFyZW50XCI6XCJDRHFvaUswZ0NUSnBuSmdWb1lnSkRRPT1cIixcInRvcFwiOlwiR1BzSGxOUERiRDZLZE5RRUdqOHpRUT09XCIsXCJ0b3BFZGdlXCI6XCJ4Umcwb0FOcnhzeFhOQnlJcG5OSnZ3PT1cIixcInRvcE9uRWRnZVwiOlwiUUF5ZUZGR1JvbnhYUzlGZ0oyZCtXdz09XCIsXCJyaWdodFwiOlwiSThFRENKem8wWndUdGdiVlRNbXpkZz09XCIsXCJyaWdodEVkZ2VcIjpcIlcyQWhtM3h1YTJ2ZUMzSUNUMktRTkE9PVwiLFwicmlnaHRPbkVkZ2VcIjpcInlqQkNRWUVBOG1XaUk5OENGWDVMc3c9PVwiLFwiYm90dG9tXCI6XCJXSnh6WFFMLTVOUHZEZ25lVmdrVndBPT1cIixcImJvdHRvbUVkZ2VcIjpcIkdWSnMtLXBMRGpXdnU5Qy15MzR5Y3c9PVwiLFwiYm90dG9tT25FZGdlXCI6XCJERFZkLVBwbHhuTHBTTEZsR3RGaG53PT1cIixcImxlZnRcIjpcIm9VVE12akwwSHhHZW5VN2tKZFN4SEE9PVwiLFwibGVmdEVkZ2VcIjpcIkJpTnNBa01adWkrNWktS3pZeHEwY1E9PVwiLFwibGVmdE9uRWRnZVwiOlwiXzF2OGltSDBNVGotck1aMHJDLWloUWc9PVwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiRDRwNUFhMDYzVG5tN20wdWFHaExrdz09XCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiXzJkZUctWTJBM3p3NmtGK1dCbkVtanc9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBzcmM6IHN0cmluZztcbiAgYWx0OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiPjtcbn07XG5cbmZ1bmN0aW9uIEljb25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgY2hpbGRyZW4sXG4gIHNyYyxcbiAgYWx0LFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxufTogSWNvbkJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiQnZRdHNVQWEtZlFQbVhidlZTVkNOUT09XCIsXCJzbWFsbFwiOlwiXzhaZjRMemNlaUlvZXI3UElWUjhCWUE9PVwiLFwibWVkaXVtXCI6XCJfN1BGMmRuSmdaeElFK3RTMzN4SzRLQT09XCIsXCJsYXJnZVwiOlwiRWJPWXZHS1hpQWFib2hpNE95MUNNdz09XCIsXCJ4bGFyZ2VcIjpcInVPZlo5TGlHem5hQkdJdXg0MHBGR2c9PVwiLFwicm91bmRlZFwiOlwidkFqMHhtalhKVGZEYldJQ1ZLQm8yZz09XCIsXCJ0b3BPZmZzZXRcIjpcIl84WVNzLWtoSUR6SWVmUlJoNXpIMytRPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJxNGpJbDJYRk9idnNETS00UXh2dHV3PT1cIixcImJvdHRvbU9mZnNldFwiOlwiXzgyS2JFY0VaemNSNVZxSGx4ODYyUFE9PVwiLFwibGVmdE9mZnNldFwiOlwieG5jMStPREZtQlBpaWY1Sm9xVG5kQT09XCIsXCJpbnZlcnRlZFwiOlwiYmhWVVRka1FsdGN0bXJaZTBUNzJrdz09XCIsXCJub1NoYWRvd1wiOlwibnNnaDJjNmNIdHp4YVJyTGt2NkZ6dz09XCIsXCJub0JvcmRlclwiOlwiVnp5NkM0ZGp0cGZMMnBWNW9ZY09Qdz09XCIsXCJ0cmFuc3BhcmVudFwiOlwiRnZkUFMtKzF0bHNUWjFjaUVsc3Z4UT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9JY29uQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIjtcblxudHlwZSBJY29uQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIHNyYzogc3RyaW5nO1xuICAgICAgYWx0OiBzdHJpbmc7XG4gICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEljb25CdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzcmMsXG4gIGFsdCxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IEljb25CdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImljb24tYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uTGluaztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJtVWhDN1hCWWVoTmwxZitONWhSTzRBPT1cIixcInNtYWxsXCI6XCJzTVMxRmdNM3d3TGcrTGd1dmNYRHdnPT1cIixcIm1lZGl1bVwiOlwiXzFqVTg1bUVQNWlhV3luY0xMYjhsU0E9PVwiLFwibGFyZ2VcIjpcImNJZ2dnUzJmNVBhQkNJVGZ0czByQWc9PVwiLFwieGxhcmdlXCI6XCJUMnphb213TFlIUXgtWUYtdkR0d0h3PT1cIixcInJvdW5kZWRcIjpcIkZNQWg2Z3NGUnJVZkYtQytoeEZKU0E9PVwiLFwidG9wT2Zmc2V0XCI6XCJ5WXZySW1RWnlwS3RKMGNiK2hFZFdRPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJFaUxRVWUrQkQ4dWJ4ZGorSlF1SHp3PT1cIixcImJvdHRvbU9mZnNldFwiOlwiXzBxSE5JUnNtK01SOXJ5WHBKbUVOUVE9PVwiLFwibGVmdE9mZnNldFwiOlwiTG1JTWx4dnFrUmppSWdZTEh4YVpCZz09XCIsXCJpbnZlcnRlZFwiOlwiQmMrUmg2Qjk3Kzc0amtlTWRDdHJ6Zz09XCIsXCJub1NoYWRvd1wiOlwiaUdHQ0dpZjJ5U2NNSVNEay0ybWtGUT09XCIsXCJub0JvcmRlclwiOlwiZG5qbjFvRnROVkZOMmZSV21La1ozQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiWndpRjB1NktUSkRnd1JDNFdTTDNyQT09XCIsXCJkaXNhYmxlZFwiOlwibWNaTEp6VDdWczdibFE5Unh3N1JVdz09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiLi9JbWFnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ltYWdlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgSW1hZ2VQcm9wcyA9IHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNyY1dpZHRoPzogbnVtYmVyO1xuICBzcmNIZWlnaHQ/OiBudW1iZXI7XG4gIGRlY29kaW5nPzogXCJhc3luY1wiIHwgXCJzeW5jXCIgfCBcImF1dG9cIjtcbiAgbG9hZGluZz86IFwiZWFnZXJcIiB8IFwibGF6eVwiO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG59O1xuXG5mdW5jdGlvbiBJbWFnZUNvbXBvbmVudCh7XG4gIHNyYyxcbiAgYWx0LFxuICBzcmNXaWR0aCxcbiAgc3JjSGVpZ2h0LFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbiAgZGVjb2RpbmcgPSBcImF1dG9cIixcbiAgbG9hZGluZyA9IFwiZWFnZXJcIixcbiAgc3R5bGUsXG59OiBJbWFnZVByb3BzKSB7XG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IChcbiAgICA8aW1nXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW1hZ2UsIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImltYWdlXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgICB3aWR0aD17c3JjV2lkdGh9XG4gICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cbiAgICAgIGRlY29kaW5nPXtkZWNvZGluZ31cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgLz5cbiAgKTtcblxuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIHtpbWFnZUVsZW1lbnR9XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIGltYWdlRWxlbWVudFxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZUNvbXBvbmVudDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfOWdRU1ItK2dxbzVyRHZXUG1Rb0FlUT09XCIsXCJoYXNPdmVybGF5XCI6XCJpaTMrNksrRlc0WWplUUZtLUlOM3NBPT1cIixcIm92ZXJsYXlcIjpcIl8wMEV4TmMzS3crSE9mVENGYTM0R0l3PT1cIixcImltYWdlXCI6XCJyd0Q1ckhjWkZSTmE0ZEhvNmozSnlRPT1cIixcImNvdmVyXCI6XCJfNkFhTjFUNlNZNkVlaitGYVF0YTQyZz09XCIsXCJjb250YWluXCI6XCJFUURrUDBGNXp6Sml0Rjh1TzZIK21BPT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkdCS1BrYzhyc3lqVVZ1Q3AxT2xCb1E9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIl81U3p3U0orNlo0Ui1ZYTExZ3dMclNRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0VmlldyB9IGZyb20gXCIuL0xpc3RWaWV3XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3SXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0xpbmtJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdMaW5rSXRlbVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXcubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogeyB0ZXh0OiBzdHJpbmc7IGlkOiBzdHJpbmcgfTtcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGhlYWRlckFjdGlvbnMsXG59OiBMaXN0Vmlld1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgICAge2hlYWRlciAmJiAoXG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9IGlkPXtoZWFkZXIuaWR9PlxuICAgICAgICAgICAgICB7aGVhZGVyLnRleHR9XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDx1bCBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlcj8uaWR9IGNsYXNzTmFtZT17c3R5bGVzLmxpc3R9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0VmlldztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJsSnpkUDBtbmZwZ2xGU1l0S0tZekp3PT1cIixcImhlYWRlclwiOlwiXzgydkNRN3hyME5rWTRVbHlTUGtwa3c9PVwiLFwiaGVhZGVyTGFiZWxcIjpcInVuV2VQZElLbjRYYXdSdUw3Q1BEMGc9PVwiLFwibGlzdFwiOlwiXzVCWCtaWi1BYVF1dGN6YkRTMmU1LXc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld0l0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYWN0aXZlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBMaXN0Vmlld0l0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0l0ZW07XG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b25MaW5rIH0gZnJvbSBcIi4uL0J1dHRvbkxpbmtcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBMaXN0Vmlld0xpbmtJdGVtUHJvcHMgPVxuICB8IHtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgYWN0aXZlOiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc6IGJvb2xlYW47XG4gICAgICBhbGlnbjogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgICAgc2l6ZTogU2l6ZTtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0xpbmtJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFzOiBDb21wb25lbnQsXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IExpc3RWaWV3TGlua0l0ZW1Qcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25MaW5rXG4gICAgICAgIGFzPXtDb21wb25lbnR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uTGluaz5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0xpbmtJdGVtO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPdmVybGF5IH0gZnJvbSBcIi4vT3ZlcmxheVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL092ZXJsYXkubW9kdWxlLmNzc1wiO1xuXG50eXBlIE92ZXJsYXlQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBpc0ZpeGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBPdmVybGF5KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgaXNGaXhlZCA9IGZhbHNlLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBPdmVybGF5UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwib3ZlcmxheVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IGlzRml4ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPdmVybGF5O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJFSUI5LWw1OGdDM1p2dFc4dnRVQUxBPT1cIixcInRyYW5zcGFyZW50XCI6XCJDTTEtbjNzRzhZTmQ3M3FKVlhNMjJnPT1cIixcImZpeGVkXCI6XCJvTzFpVE5sUGpkYTFmanJZZXlMdVVBPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWJsZSB9IGZyb20gXCIuL1RhYmxlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBGaXhlZFNpemVMaXN0LCBMaXN0T25TY3JvbGxQcm9wcyB9IGZyb20gXCJyZWFjdC13aW5kb3dcIjtcbmltcG9ydCBJbmZpbml0ZUxvYWRlciBmcm9tIFwicmVhY3Qtd2luZG93LWluZmluaXRlLWxvYWRlclwiO1xuXG5pbXBvcnQgVGFibGVIZWFkZXIgZnJvbSBcIi4vVGFibGVIZWFkZXJcIjtcbmltcG9ydCBUYWJsZVJvdyBmcm9tIFwiLi9UYWJsZVJvd1wiO1xuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGUubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5UeXBlID0ge1xuICBrZXk6IHN0cmluZztcbiAgdGl0bGU6IEpTWC5FbGVtZW50IHwgc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRhdGFJbmRleDogc3RyaW5nO1xuICByZW5kZXI/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZykgPT4gSlNYLkVsZW1lbnQ7XG59O1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIGRhdGFTb3VyY2U6IFJlY29yZDxzdHJpbmcsIGFueT5bXTtcbiAgdGFibGVIZWlnaHQ6IG51bWJlcjtcbiAgb25Sb3dDbGljaz86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBoYXNBcnJvdz86IGJvb2xlYW47XG4gIG9uTG9hZE1vcmU/OiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBwYWdlPzogbnVtYmVyO1xuICBzZXRQYWdlPzogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIHBsYWNlaG9sZGVyPzogUmVhY3QuUmVhY3RFbGVtZW50O1xuICByb3dIZWlnaHQ/OiBudW1iZXI7XG4gIGRpc2FibGVMYXp5TG9hZGVyPzogYm9vbGVhbjtcbiAgYWN0aXZlUm93cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGl0ZW1zQ291bnQ/OiBudW1iZXI7XG4gIGlzSGVhZGVyU3RpY2t5PzogYm9vbGVhbjtcbiAgaGFzVmlydHVhbFNjcm9sbD86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBUYWJsZSh7XG4gIGNvbHVtbnMsXG4gIGRhdGFTb3VyY2UsXG4gIG9uUm93Q2xpY2ssXG4gIGhhc0Fycm93LFxuICBvbkxvYWRNb3JlLFxuICBwYWdlLFxuICBzZXRQYWdlLFxuICBwYWdlU2l6ZSA9IFRhYmxlQ29uZmlnLlBBR0VfU0laRSxcbiAgdGFibGVIZWlnaHQsXG4gIHBsYWNlaG9sZGVyLFxuICByb3dIZWlnaHQgPSBUYWJsZUNvbmZpZy5ST1dfSEVJR0hULFxuICBkaXNhYmxlTGF6eUxvYWRlcixcbiAgYWN0aXZlUm93cyxcbiAgaXRlbXNDb3VudCxcbiAgaXNIZWFkZXJTdGlja3kgPSBmYWxzZSxcbiAgaGFzVmlydHVhbFNjcm9sbCA9IHRydWUsXG59OiBQcm9wcykge1xuICBjb25zdCBbc2Nyb2xsVG9wLCBzZXRTY3JvbGxUb3BdID0gdXNlU3RhdGUoMCk7XG5cbiAgY29uc3QgcmVuZGVyUm93ID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgZGF0YSwgaW5kZXgsIHN0eWxlIH0pID0+IHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFbaW5kZXhdO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5zdHlsZSwgdG9wOiBzdHlsZS50b3AgfX0+XG4gICAgICAgICAgPFRhYmxlUm93XG4gICAgICAgICAgICBkYXRhPXtyb3d9XG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgb25Sb3dDbGljaz17b25Sb3dDbGlja31cbiAgICAgICAgICAgIGhhc0Fycm93PXtoYXNBcnJvd31cbiAgICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAgICAgaXNBY3RpdmU9eyEhYWN0aXZlUm93cz8uW3Jvdy5pZF19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0sXG4gICAgW2NvbHVtbnMsIGFjdGl2ZVJvd3MsIGhhc0Fycm93LCByb3dIZWlnaHQsIG9uUm93Q2xpY2tdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTGlzdFNjcm9sbCA9IHVzZUNhbGxiYWNrKFxuICAgICh7IHNjcm9sbE9mZnNldCB9OiBMaXN0T25TY3JvbGxQcm9wcykgPT4ge1xuICAgICAgc2V0U2Nyb2xsVG9wKHNjcm9sbE9mZnNldCk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IGxvYWRNb3JlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlTGF6eUxvYWRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA9PT0gaXRlbXNDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA8IHBhZ2VTaXplICogcGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXRQYWdlICYmIG9uTG9hZE1vcmUpIHtcbiAgICAgIHNldFBhZ2UocGFnZSArIDEpO1xuICAgICAgb25Mb2FkTW9yZShwYWdlICsgMSk7XG4gICAgfVxuICB9LCBbXG4gICAgZGlzYWJsZUxhenlMb2FkZXIsXG4gICAgZGF0YVNvdXJjZS5sZW5ndGgsXG4gICAgaXRlbXNDb3VudCxcbiAgICBwYWdlU2l6ZSxcbiAgICBwYWdlLFxuICAgIHNldFBhZ2UsXG4gICAgb25Mb2FkTW9yZSxcbiAgXSk7XG5cbiAgY29uc3QgaXNJdGVtTG9hZGVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlTGF6eUxvYWRlcikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleCA8IGRhdGFTb3VyY2UubGVuZ3RoIC0gVGFibGVDb25maWcuSVRFTVNfTE9BREVEO1xuICAgIH0sXG4gICAgW2RhdGFTb3VyY2UubGVuZ3RoLCBkaXNhYmxlTGF6eUxvYWRlcl1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aGFzVmlydHVhbFNjcm9sbCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGFibGV9PlxuICAgICAgICAgICAgPFRhYmxlSGVhZGVyIGNvbHVtbnM9e2NvbHVtbnN9IHNjcm9sbFRvcD17c2Nyb2xsVG9wfSAvPlxuICAgICAgICAgICAgeyEhcGxhY2Vob2xkZXIgJiYgIWRhdGFTb3VyY2UubGVuZ3RoID8gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucGxhY2Vob2xkZXJDb250YWluZXJ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUhlaWdodCB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxJbmZpbml0ZUxvYWRlclxuICAgICAgICAgICAgICAgIGlzSXRlbUxvYWRlZD17aXNJdGVtTG9hZGVkfVxuICAgICAgICAgICAgICAgIGl0ZW1Db3VudD17ZGF0YVNvdXJjZS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgbG9hZE1vcmVJdGVtcz17bG9hZE1vcmV9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7KHsgb25JdGVtc1JlbmRlcmVkLCByZWYgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPEZpeGVkU2l6ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD17dGFibGVIZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1TaXplPXtyb3dIZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Db3VudD17ZGF0YVNvdXJjZS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhPXtkYXRhU291cmNlfVxuICAgICAgICAgICAgICAgICAgICBvblNjcm9sbD17aGFuZGxlTGlzdFNjcm9sbH1cbiAgICAgICAgICAgICAgICAgICAgb25JdGVtc1JlbmRlcmVkPXtvbkl0ZW1zUmVuZGVyZWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNjcm9sbGJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3JlbmRlclJvd31cbiAgICAgICAgICAgICAgICAgIDwvRml4ZWRTaXplTGlzdD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L0luZmluaXRlTG9hZGVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLnNjcm9sbGJhckNvbnRhaW5lcl0pfVxuICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxUYWJsZUhlYWRlclxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIHNjcm9sbFRvcD17c2Nyb2xsVG9wfVxuICAgICAgICAgICAgaXNIZWFkZXJTdGlja3k9e2lzSGVhZGVyU3RpY2t5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2RhdGFTb3VyY2UubWFwKChyb3csIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8VGFibGVSb3dcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgZGF0YT17cm93fVxuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBvblJvd0NsaWNrPXtvblJvd0NsaWNrfVxuICAgICAgICAgICAgICBoYXNBcnJvdz17aGFzQXJyb3d9XG4gICAgICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAgICAgICBpc0FjdGl2ZT17ISFhY3RpdmVSb3dzPy5bcm93Py5pZF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlO1xuIiwiaW1wb3J0IHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzUmFuZ2VWaXNpYmxlKF9yZWYpIHtcbiAgdmFyIGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSBfcmVmLmxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXggPSBfcmVmLmxhc3RSZW5kZXJlZFN0b3BJbmRleCxcbiAgICAgIHN0YXJ0SW5kZXggPSBfcmVmLnN0YXJ0SW5kZXgsXG4gICAgICBzdG9wSW5kZXggPSBfcmVmLnN0b3BJbmRleDtcblxuICByZXR1cm4gIShzdGFydEluZGV4ID4gbGFzdFJlbmRlcmVkU3RvcEluZGV4IHx8IHN0b3BJbmRleCA8IGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgpO1xufVxuXG5mdW5jdGlvbiBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoX3JlZikge1xuICB2YXIgaXNJdGVtTG9hZGVkID0gX3JlZi5pc0l0ZW1Mb2FkZWQsXG4gICAgICBpdGVtQ291bnQgPSBfcmVmLml0ZW1Db3VudCxcbiAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcmVmLm1pbmltdW1CYXRjaFNpemUsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgdmFyIHVubG9hZGVkUmFuZ2VzID0gW107XG5cbiAgdmFyIHJhbmdlU3RhcnRJbmRleCA9IG51bGw7XG4gIHZhciByYW5nZVN0b3BJbmRleCA9IG51bGw7XG5cbiAgZm9yICh2YXIgX2luZGV4ID0gc3RhcnRJbmRleDsgX2luZGV4IDw9IHN0b3BJbmRleDsgX2luZGV4KyspIHtcbiAgICB2YXIgbG9hZGVkID0gaXNJdGVtTG9hZGVkKF9pbmRleCk7XG5cbiAgICBpZiAoIWxvYWRlZCkge1xuICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXg7XG4gICAgICBpZiAocmFuZ2VTdGFydEluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIHJhbmdlU3RhcnRJbmRleCA9IF9pbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgICB1bmxvYWRlZFJhbmdlcy5wdXNoKHJhbmdlU3RhcnRJbmRleCwgcmFuZ2VTdG9wSW5kZXgpO1xuXG4gICAgICByYW5nZVN0YXJ0SW5kZXggPSByYW5nZVN0b3BJbmRleCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgOnJhbmdlU3RvcEluZGV4IGlzIG5vdCBudWxsIGl0IG1lYW5zIHdlIGhhdmVuJ3QgcmFuIG91dCBvZiB1bmxvYWRlZCByb3dzLlxuICAvLyBTY2FuIGZvcndhcmQgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAocmFuZ2VTdG9wSW5kZXggIT09IG51bGwpIHtcbiAgICB2YXIgcG90ZW50aWFsU3RvcEluZGV4ID0gTWF0aC5taW4oTWF0aC5tYXgocmFuZ2VTdG9wSW5kZXgsIHJhbmdlU3RhcnRJbmRleCArIG1pbmltdW1CYXRjaFNpemUgLSAxKSwgaXRlbUNvdW50IC0gMSk7XG5cbiAgICBmb3IgKHZhciBfaW5kZXgyID0gcmFuZ2VTdG9wSW5kZXggKyAxOyBfaW5kZXgyIDw9IHBvdGVudGlhbFN0b3BJbmRleDsgX2luZGV4MisrKSB7XG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgyKSkge1xuICAgICAgICByYW5nZVN0b3BJbmRleCA9IF9pbmRleDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bmxvYWRlZFJhbmdlcy5wdXNoKHJhbmdlU3RhcnRJbmRleCwgcmFuZ2VTdG9wSW5kZXgpO1xuICB9XG5cbiAgLy8gQ2hlY2sgdG8gc2VlIGlmIG91ciBmaXJzdCByYW5nZSBlbmRlZCBwcmVtYXR1cmVseS5cbiAgLy8gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBzY2FuIGJhY2t3YXJkcyB0byB0cnkgZmlsbGluZyBvdXIgOm1pbmltdW1CYXRjaFNpemUuXG4gIGlmICh1bmxvYWRlZFJhbmdlcy5sZW5ndGgpIHtcbiAgICB3aGlsZSAodW5sb2FkZWRSYW5nZXNbMV0gLSB1bmxvYWRlZFJhbmdlc1swXSArIDEgPCBtaW5pbXVtQmF0Y2hTaXplICYmIHVubG9hZGVkUmFuZ2VzWzBdID4gMCkge1xuICAgICAgdmFyIF9pbmRleDMgPSB1bmxvYWRlZFJhbmdlc1swXSAtIDE7XG5cbiAgICAgIGlmICghaXNJdGVtTG9hZGVkKF9pbmRleDMpKSB7XG4gICAgICAgIHVubG9hZGVkUmFuZ2VzWzBdID0gX2luZGV4MztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmxvYWRlZFJhbmdlcztcbn1cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxudmFyIGluaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufTtcblxudmFyIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gPSBmdW5jdGlvbiAoc2VsZiwgY2FsbCkge1xuICBpZiAoIXNlbGYpIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjtcbn07XG5cbnZhciBJbmZpbml0ZUxvYWRlciA9IGZ1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBpbmhlcml0cyhJbmZpbml0ZUxvYWRlciwgX1B1cmVDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEluZmluaXRlTG9hZGVyKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIEluZmluaXRlTG9hZGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX3JlZiA9IEluZmluaXRlTG9hZGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoSW5maW5pdGVMb2FkZXIpKS5jYWxsLmFwcGx5KF9yZWYsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IC0xLCBfdGhpcy5fbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gLTEsIF90aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gW10sIF90aGlzLl9vbkl0ZW1zUmVuZGVyZWQgPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB2aXNpYmxlU3RhcnRJbmRleCA9IF9yZWYyLnZpc2libGVTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdG9wSW5kZXggPSBfcmVmMi52aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIWlzSW50ZWdlcih2aXNpYmxlU3RhcnRJbmRleCkgfHwgIWlzSW50ZWdlcih2aXNpYmxlU3RvcEluZGV4KSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBvbkl0ZW1zUmVuZGVyZWQgc2lnbmF0dXJlOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgX3RoaXMucHJvcHMubG9hZE1vcmVSb3dzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbmZpbml0ZUxvYWRlciBcImxvYWRNb3JlUm93c1wiIHByb3AgaGFzIGJlZW4gcmVuYW1lZCB0byBcImxvYWRNb3JlSXRlbXNcIi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfdGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IHZpc2libGVTdGFydEluZGV4O1xuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IHZpc2libGVTdG9wSW5kZXg7XG5cbiAgICAgIF90aGlzLl9lbnN1cmVSb3dzTG9hZGVkKHZpc2libGVTdGFydEluZGV4LCB2aXNpYmxlU3RvcEluZGV4KTtcbiAgICB9LCBfdGhpcy5fc2V0UmVmID0gZnVuY3Rpb24gKGxpc3RSZWYpIHtcbiAgICAgIF90aGlzLl9saXN0UmVmID0gbGlzdFJlZjtcbiAgICB9LCBfdGVtcCksIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgY3JlYXRlQ2xhc3MoSW5maW5pdGVMb2FkZXIsIFt7XG4gICAga2V5OiAncmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldGxvYWRNb3JlSXRlbXNDYWNoZSgpIHtcbiAgICAgIHZhciBhdXRvUmVsb2FkID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gICAgICBpZiAoYXV0b1JlbG9hZCkge1xuICAgICAgICB0aGlzLl9lbnN1cmVSb3dzTG9hZGVkKHRoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsIHRoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0aGlzLl9saXN0UmVmID09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgbGlzdCByZWY7IHBsZWFzZSByZWZlciB0byBJbmZpbml0ZUxvYWRlciBkb2N1bWVudGF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcblxuXG4gICAgICByZXR1cm4gY2hpbGRyZW4oe1xuICAgICAgICBvbkl0ZW1zUmVuZGVyZWQ6IHRoaXMuX29uSXRlbXNSZW5kZXJlZCxcbiAgICAgICAgcmVmOiB0aGlzLl9zZXRSZWZcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19lbnN1cmVSb3dzTG9hZGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2Vuc3VyZVJvd3NMb2FkZWQoc3RhcnRJbmRleCwgc3RvcEluZGV4KSB7XG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0l0ZW1Mb2FkZWQgPSBfcHJvcHMuaXNJdGVtTG9hZGVkLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF9wcm9wcy5pdGVtQ291bnQsXG4gICAgICAgICAgX3Byb3BzJG1pbmltdW1CYXRjaFNpID0gX3Byb3BzLm1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgICAgbWluaW11bUJhdGNoU2l6ZSA9IF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9PT0gdW5kZWZpbmVkID8gMTAgOiBfcHJvcHMkbWluaW11bUJhdGNoU2ksXG4gICAgICAgICAgX3Byb3BzJHRocmVzaG9sZCA9IF9wcm9wcy50aHJlc2hvbGQsXG4gICAgICAgICAgdGhyZXNob2xkID0gX3Byb3BzJHRocmVzaG9sZCA9PT0gdW5kZWZpbmVkID8gMTUgOiBfcHJvcHMkdGhyZXNob2xkO1xuXG5cbiAgICAgIHZhciB1bmxvYWRlZFJhbmdlcyA9IHNjYW5Gb3JVbmxvYWRlZFJhbmdlcyh7XG4gICAgICAgIGlzSXRlbUxvYWRlZDogaXNJdGVtTG9hZGVkLFxuICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgbWluaW11bUJhdGNoU2l6ZTogbWluaW11bUJhdGNoU2l6ZSxcbiAgICAgICAgc3RhcnRJbmRleDogTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIHRocmVzaG9sZCksXG4gICAgICAgIHN0b3BJbmRleDogTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgdGhyZXNob2xkKVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgbG9hZC1yb3dzIHVubGVzcyByYW5nZSBoYXMgY2hhbmdlZC5cbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGlzIG1heWJlIG5pY2UgdG8gZG8uXG4gICAgICBpZiAodGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5sZW5ndGggIT09IHVubG9hZGVkUmFuZ2VzLmxlbmd0aCB8fCB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzLnNvbWUoZnVuY3Rpb24gKHN0YXJ0T3JTdG9wLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gdW5sb2FkZWRSYW5nZXNbaW5kZXhdICE9PSBzdGFydE9yU3RvcDtcbiAgICAgIH0pKSB7XG4gICAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSB1bmxvYWRlZFJhbmdlcztcbiAgICAgICAgdGhpcy5fbG9hZFVubG9hZGVkUmFuZ2VzKHVubG9hZGVkUmFuZ2VzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfbG9hZFVubG9hZGVkUmFuZ2VzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIC8vIGxvYWRNb3JlUm93cyB3YXMgcmVuYW1lZCB0byBsb2FkTW9yZUl0ZW1zIGluIHYxLjAuMzsgd2lsbCBiZSByZW1vdmVkIGluIHYyLjBcbiAgICAgIHZhciBsb2FkTW9yZUl0ZW1zID0gdGhpcy5wcm9wcy5sb2FkTW9yZUl0ZW1zIHx8IHRoaXMucHJvcHMubG9hZE1vcmVSb3dzO1xuXG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaV07XG4gICAgICAgIHZhciBzdG9wSW5kZXggPSB1bmxvYWRlZFJhbmdlc1tpICsgMV07XG4gICAgICAgIHZhciBwcm9taXNlID0gbG9hZE1vcmVJdGVtcyhzdGFydEluZGV4LCBzdG9wSW5kZXgpO1xuICAgICAgICBpZiAocHJvbWlzZSAhPSBudWxsKSB7XG4gICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIFJlZnJlc2ggdGhlIHZpc2libGUgcm93cyBpZiBhbnkgb2YgdGhlbSBoYXZlIGp1c3QgYmVlbiBsb2FkZWQuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhleSB3aWxsIHJlbWFpbiBpbiB0aGVpciB1bmxvYWRlZCB2aXN1YWwgc3RhdGUuXG4gICAgICAgICAgICBpZiAoaXNSYW5nZVZpc2libGUoe1xuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdGFydEluZGV4OiBfdGhpczIuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgIGxhc3RSZW5kZXJlZFN0b3BJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgIHN0b3BJbmRleDogc3RvcEluZGV4XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAvLyBIYW5kbGUgYW4gdW5tb3VudCB3aGlsZSBwcm9taXNlcyBhcmUgc3RpbGwgaW4gZmxpZ2h0LlxuICAgICAgICAgICAgICBpZiAoX3RoaXMyLl9saXN0UmVmID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBSZXNpemUgY2FjaGVkIHJvdyBzaXplcyBmb3IgVmFyaWFibGVTaXplTGlzdCxcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGp1c3QgcmUtcmVuZGVyIHRoZSBsaXN0LlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5yZXNldEFmdGVySW5kZXggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4KHN0YXJ0SW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhBQ0sgcmVzZXQgdGVtcG9yYXJpbHkgY2FjaGVkIGl0ZW0gc3R5bGVzIHRvIGZvcmNlIFB1cmVDb21wb25lbnQgdG8gcmUtcmVuZGVyLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGdyb3NzLCBidXQgSSdtIG9rYXkgd2l0aCBpdCBmb3Igbm93LlxuICAgICAgICAgICAgICAgIC8vIERvbid0IGp1ZGdlIG1lLlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMyLl9saXN0UmVmLl9nZXRJdGVtU3R5bGVDYWNoZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5sb2FkZWRSYW5nZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgX2xvb3AoaSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBJbmZpbml0ZUxvYWRlcjtcbn0oUHVyZUNvbXBvbmVudCk7XG5cbmV4cG9ydCBkZWZhdWx0IEluZmluaXRlTG9hZGVyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZUhlYWRlci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgc2Nyb2xsVG9wOiBudW1iZXI7XG4gIGlzSGVhZGVyU3RpY2t5PzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlSGVhZGVyKHsgY29sdW1ucywgc2Nyb2xsVG9wLCBpc0hlYWRlclN0aWNreSB9OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7IFtzdHlsZXMuYm9yZGVyQm90dG9tXTogISFzY3JvbGxUb3AgfSxcbiAgICAgICAgeyBbc3R5bGVzLmlzSGVhZGVyU3RpY2t5XTogaXNIZWFkZXJTdGlja3kgfSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHtjb2x1bW5zLm1hcCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnRhYmxlSGVhZGVyQ2VsbCwgY29sdW1uLmNsYXNzTmFtZV0pfVxuICAgICAgICAgIGtleT17YHRhYmxlLWhlYWQtY2VsbC0ke2NvbHVtbkluZGV4fWB9XG4gICAgICAgID5cbiAgICAgICAgICB7Y29sdW1uLnRpdGxlfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlcjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJwWW5iMkJyeUlZSDU0eU1rQnFnN3BBPT1cIixcImlzSGVhZGVyU3RpY2t5XCI6XCJfOXUxbE1jMFFNUmF2Slp6QzY0bG8yZz09XCIsXCJ0YWJsZUhlYWRlckNlbGxcIjpcIm9VRFl1YzNCdFhZQUtzMnRBY2pYbVE9PVwiLFwiYm9yZGVyQm90dG9tXCI6XCJDdHNWelkwSkYrOVl0SGhyNnBmZEpnPT1cIn07IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IFRhYmxlUm93Q2VsbCBmcm9tIFwiLi9UYWJsZVJvd0NlbGxcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlUm93Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBvblJvd0NsaWNrPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIGhhc0Fycm93PzogYm9vbGVhbjtcbiAgcm93SGVpZ2h0OiBudW1iZXI7XG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlUm93KHtcbiAgZGF0YSxcbiAgY29sdW1ucyxcbiAgb25Sb3dDbGljayxcbiAgaGFzQXJyb3csXG4gIHJvd0hlaWdodCxcbiAgaXNBY3RpdmUsXG59OiBQcm9wcykge1xuICBjb25zdCBoYW5kbGVSb3dDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Sb3dDbGljayAmJiB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgb25Sb3dDbGljayhkYXRhKTtcbiAgICB9XG4gIH0sIFtkYXRhLCBvblJvd0NsaWNrXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgeyBbc3R5bGVzLmhhc0Fycm93XTogaGFzQXJyb3csIFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17aGFuZGxlUm93Q2xpY2t9XG4gICAgPlxuICAgICAge2NvbHVtbnMubWFwKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiAoXG4gICAgICAgIDxUYWJsZVJvd0NlbGxcbiAgICAgICAgICBrZXk9e2B0YWJsZS1yb3ctY2VsbC0ke2NvbHVtbkluZGV4fWB9XG4gICAgICAgICAgaXRlbT17ZGF0YX1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvdztcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVSb3dDZWxsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgaXRlbTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcbiAgY29sdW1uOiBDb2x1bW5UeXBlO1xuICByb3dIZWlnaHQ6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlUm93Q2VsbCh7IGl0ZW0sIGNvbHVtbiwgcm93SGVpZ2h0IH06IFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBkYXRhID0gdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgPyBpdGVtIDogaXRlbVtjb2x1bW4uZGF0YUluZGV4XTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNvbHVtbi5jbGFzc05hbWVdKX1cbiAgICAgIHN0eWxlPXt7IGhlaWdodDogcm93SGVpZ2h0IH19XG4gICAgPlxuICAgICAge2NvbHVtbi5yZW5kZXIgPyBjb2x1bW4ucmVuZGVyKGRhdGEpIDogZGF0YX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3dDZWxsO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl83TGR5dXdHdno5WjJrVlBHN1dzWHN3PT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIk5zT2ZTN0xFdVFwVUs1VVFhMnlNWVE9PVwiLFwidGFibGVSb3dcIjpcIm5BcTJKR2VVREZaZ2xlNk9RS0cwalE9PVwiLFwiYWN0aXZlXCI6XCJZMnRwSjVzNWs4TzdlQWE0QVh1UXZ3PT1cIixcImhhc0Fycm93XCI6XCJDZWp2ckVOLXNNZnZrelFkREJJMm93PT1cIn07IiwiZXhwb3J0ICogZnJvbSBcIi4uL2NvbnN0YW50cy9UYWJsZVwiO1xuIiwiZXhwb3J0IGVudW0gVGFibGVDb25maWcge1xuICBST1dfSEVJR0hUID0gNDgsXG4gIFBBR0VfU0laRSA9IDEwMCxcbiAgSVRFTVNfTE9BREVEID0gNSxcbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ2QlQ4YmJQYmxaenhzMGxCVG50VWFBPT1cIixcInRhYmxlXCI6XCJVWm9EYzUyM3hjVXVsQU4wZWNFUjJnPT1cIixcInBsYWNlaG9sZGVyQ29udGFpbmVyXCI6XCJiVzUrVlNONDNNSjBUZGdxRTc0TGJ3PT1cIixcInNjcm9sbGJhckNvbnRhaW5lclwiOlwiQmRMLWN4ZmhIeDJld3dtNnZNZjlwUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGV4dElucHV0IH0gZnJvbSBcIi4vVGV4dElucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGV4dElucHV0Lm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUsIFRleHRJbnB1dE1vZGUsIFRleHRJbnB1dFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XG4gIG9uS2V5RG93bj86IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBwYXR0ZXJuPzogc3RyaW5nO1xuICB0eXBlPzogVGV4dElucHV0VHlwZTtcbiAgc2l6ZT86IFNpemU7XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGlucHV0TW9kZT86IFRleHRJbnB1dE1vZGU7XG59O1xuXG5mdW5jdGlvbiBUZXh0SW5wdXQoe1xuICBsYWJlbCxcbiAgb25DaGFuZ2UsXG4gIG9uQmx1cixcbiAgb25LZXlEb3duLFxuICBwbGFjZWhvbGRlcixcbiAgdmFsdWUsXG4gIG5hbWUsXG4gIHBhdHRlcm4sXG4gIGlucHV0UmVmLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSA9IFwidGV4dFwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgaW5wdXRNb2RlLFxufTogVGV4dElucHV0UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxuICAgIDxpbnB1dFxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXG4gICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy50ZXh0SW5wdXQsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgeyBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIgfSxcbiAgICAgIF0pfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICBwYXR0ZXJuPXtwYXR0ZXJufVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIGlucHV0TW9kZT17aW5wdXRNb2RlfVxuICAgIC8+XG4gICk7XG4gIGlmIChsYWJlbCkge1xuICAgIHJldHVybiA8TGFiZWwgdmFsdWU9e2xhYmVsfT57aW5wdXRFbGVtZW50fTwvTGFiZWw+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiA8PntpbnB1dEVsZW1lbnR9PC8+O1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBUZXh0SW5wdXQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRleHRJbnB1dFwiOlwiaDZQWUpBenl0Vk9rOUJlSzVaMCtrZz09XCIsXCJzbWFsbFwiOlwiVVhuLUJDVmc4MXlNZDhGb1VmeEtTQT09XCIsXCJtZWRpdW1cIjpcIl80YWlQNmd4TkhocldiYWM0azFnclV3PT1cIixcImxhcmdlXCI6XCJNbG5QWFlPVXlRN2hnSTdzdzFvMHhBPT1cIixcInhsYXJnZVwiOlwiSEdCdUtKYTlYanhCOHVWaEtvcDAzQT09XCIsXCJub0JvcmRlclwiOlwic1BuU0NHVU5aWHJvRWxTUVIxOTNHUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3QgfSBmcm9tIFwiLi9Ub2FzdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdENvbnRhaW5lciB9IGZyb20gXCIuL1RvYXN0Q29udGFpbmVyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9hc3RQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBUb2FzdCh7IGNoaWxkcmVuLCBjb250YWluZXJSZWYsIG9uQ2xpY2sgPSAoKSA9PiB7fSB9OiBUb2FzdFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy50b2FzdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0XCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvYXN0O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdFwiOlwidldhMi0xbU9GVStpVjE0anE3UVBzUT09XCIsXCJlbnRyYW5jZVwiOlwiZlRzV3NLckFLbHdUK0dPRTR3QXlTUT09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9hc3RDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuZnVuY3Rpb24gVG9hc3RDb250YWluZXIoeyBjaGlsZHJlbiwgYmFzZVpJbmRleCB9OiBUb2FzdENvbnRhaW5lclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnRvYXN0Q29udGFpbmVyXSl9XG4gICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3QtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvYXN0Q29udGFpbmVyO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdENvbnRhaW5lclwiOlwiXzItWHUyc1pNdk45dGdEcytpeUxjOVE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFZpZGVvLCBWaWRlb1Byb3BzIH0gZnJvbSBcIi4vVmlkZW9cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1ZpZGVvLm1vZHVsZS5jc3NcIjtcblxuLyoqXG4gKiBUaGVyZSBpcyBhIGtub3duIGlzc3VlIGluIFJlYWN0IGluIHJlZ2FyZHMgdG8gdGhlICdtdXRlZCcgcHJvcGVydHkgd2hpY2ggY2F1c2VzIHRoZSB3YXJuaW5nOlxuICogXCJXYXJuaW5nOiB1bnN0YWJsZV9mbHVzaERpc2NyZXRlVXBkYXRlczogQ2Fubm90IGZsdXNoIHVwZGF0ZXMgd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy5cIlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTAzODlcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjU0NFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Rlc3RpbmctbGlicmFyeS9yZWFjdC10ZXN0aW5nLWxpYnJhcnkvaXNzdWVzLzQ3MFxuICovXG5cbnR5cGUgTGF5b3V0ID0gXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcblxuZXhwb3J0IHR5cGUgVmlkZW9Qcm9wcyA9IHtcbiAgc3JjOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgbGF5b3V0PzogTGF5b3V0O1xuICBhdXRvUGxheT86IGJvb2xlYW47XG4gIGxvb3A/OiBib29sZWFuO1xuICBtdXRlZD86IGJvb2xlYW47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBwb3N0ZXI/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBWaWRlbyh7XG4gIHNyYyxcbiAgdHlwZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgcG9zdGVyLFxuICBtdXRlZCA9IHRydWUsXG4gIGxvb3AgPSB0cnVlLFxuICBhdXRvUGxheSA9IHRydWUsXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxufTogVmlkZW9Qcm9wcykge1xuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIDx2aWRlb1xuICAgICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcbiAgICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICAgIG11dGVkPXttdXRlZH1cbiAgICAgICAgbG9vcD17bG9vcH1cbiAgICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgICBwb3N0ZXI9e3Bvc3Rlcn1cbiAgICAgICAgcGxheXNJbmxpbmVcbiAgICAgID5cbiAgICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxuICAgICAgPC92aWRlbz5cbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XG4gICAgPC9kaXY+XG4gICkgOiAoXG4gICAgPHZpZGVvXG4gICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgIG11dGVkPXttdXRlZH1cbiAgICAgIGxvb3A9e2xvb3B9XG4gICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICBwb3N0ZXI9e3Bvc3Rlcn1cbiAgICAgIHBsYXlzSW5saW5lXG4gICAgPlxuICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxuICAgIDwvdmlkZW8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInVsV0UtRXByODVGMG1VdDdPMWdVVFE9PVwiLFwiaGFzT3ZlcmxheVwiOlwieks3dTFua2pjOHg3WURBZllRQ1Rwdz09XCIsXCJ2aWRlb1wiOlwiZlI0RDU2TGZkdW9CVy1maW1mYlQwdz09XCIsXCJjb3ZlclwiOlwiVlhRczRQVW5XR3l3NTZnNjBadGZXZz09XCIsXCJjb250YWluXCI6XCJneGZsVXpPNHJxQ0JBR3V6c1lFSWV3PT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkktNjNLbTROWTFXNFFnTWhmZ1U1TWc9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcInZOTmhKbGdJVE0rb25mN3pkemF1Zmc9PVwiLFwib3ZlcmxheVwiOlwid3h1bDdVVVpsbWFyRjg2U0dyZC10dz09XCJ9OyIsImV4cG9ydCB7IE51bXBhZCB9IGZyb20gXCIuL051bXBhZFwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcblxuaW1wb3J0IGNzcyBmcm9tIFwiLi9OdW1wYWQubW9kdWxlLmNzc1wiO1xuXG5pbXBvcnQgYmFja3NwYWNlSWNvbiBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2JhY2tzcGFjZS5zdmdcIjtcblxudHlwZSBEaWdpdCA9IDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwgOCB8IDk7XG5cbmNvbnN0IGFwcGVuZERpZ2l0ID0gKG51bWJlcjogbnVtYmVyLCBkaWdpdDogRGlnaXQpID0+IHtcbiAgcmV0dXJuIG51bWJlciAqIDEwICsgZGlnaXQ7XG59O1xuXG5jb25zdCBwb3BEaWdpdCA9IChudW1iZXI6IG51bWJlcikgPT4ge1xuICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIgLyAxMCk7XG59O1xuXG5jb25zdCBldmVudERpZ2l0S2V5cyA9IFtcIjBcIiwgXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtcGFkUHJvcHMge1xuICBudW1iZXI6IG51bWJlcjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBvbkNoYW5nZTogKG5ld051bWJlcjogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgTnVtcGFkID0gUmVhY3QuZm9yd2FyZFJlZjxIVE1MRGl2RWxlbWVudCwgTnVtcGFkUHJvcHM+KFxuICAoeyBudW1iZXIsIG9uQ2hhbmdlLCBkaXNhYmxlZCA9IGZhbHNlIH0sIHJlZikgPT4geyAgICBcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwiQmFja3NwYWNlXCIpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShwb3BEaWdpdChudW1iZXIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnREaWdpdEtleXMuaW5jbHVkZXMoZS5rZXkpKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZGlnaXQgPSBwYXJzZUludChlLmtleSwgMTApIGFzIERpZ2l0O1xuICAgICAgICBvbkNoYW5nZShhcHBlbmREaWdpdChudW1iZXIsIGRpZ2l0KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyID0gKG5ld051bWJlcjogbnVtYmVyKSA9PlxuICAgICAgKGU6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShuZXdOdW1iZXIpO1xuICAgICAgfTtcblxuICAgIGNvbnN0IE51bXBhZEtleXMgPSBBcnJheSgxMClcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBudW1wYWRWYWx1ZSA9ICgoaW5kZXggKyAxKSAlIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihhcHBlbmREaWdpdChudW1iZXIsIG51bXBhZFZhbHVlKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge251bXBhZFZhbHVlfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1wYWR9IHJlZj17cmVmfSB0YWJJbmRleD17LTF9IG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn0gZGF0YS10ZXN0aWQ9XCJudW1wYWRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1iZXJzfT5cbiAgICAgICAgICB7TnVtcGFkS2V5c31cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihwb3BEaWdpdChudW1iZXIpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBhbHQ9XCJCYWNrc3BhY2VcIiBzcmM9e2JhY2tzcGFjZUljb259IC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuKTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibnVtcGFkXCI6XCJQZU8rMnBCSUxtR2h1WGYrbVFQSkNnPT1cIixcIm51bWJlcnNcIjpcIl8zK1k4RGRPNHZCSkp0T09xUkJodHFnPT1cIn07IiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPSc2OScgaGVpZ2h0PScyNycgdmlld0JveD0nMCAwIDY5IDI3JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0LjEzMzMgMjZMMTMuNzg4NiAyNi4zNjIyQzEzLjg4MTYgMjYuNDUwNyAxNC4wMDUgMjYuNSAxNC4xMzMzIDI2LjVWMjZaTTEgMTMuNUwwLjY1NTI4NyAxMy4xMzc4QzAuNTU2MTI3IDEzLjIzMjIgMC41IDEzLjM2MzEgMC41IDEzLjVDMC41IDEzLjYzNjkgMC41NTYxMjcgMTMuNzY3OCAwLjY1NTI4NyAxMy44NjIyTDEgMTMuNVpNMTQuMTMzMyAxVjAuNUMxNC4wMDUgMC41IDEzLjg4MTYgMC41NDkzNDUgMTMuNzg4NiAwLjYzNzgyMkwxNC4xMzMzIDFaTTY3LjUgMlYyNUg2OC41VjJINjcuNVpNNjMuNDY2NyAyNS41SDE0LjEzMzNWMjYuNUg2My40NjY3VjI1LjVaTTE0LjQ3OCAyNS42Mzc4TDEuMzQ0NzEgMTMuMTM3OEwwLjY1NTI4NyAxMy44NjIyTDEzLjc4ODYgMjYuMzYyMkwxNC40NzggMjUuNjM3OFpNMS4zNDQ3MSAxMy44NjIyTDE0LjQ3OCAxLjM2MjE4TDEzLjc4ODYgMC42Mzc4MjJMMC42NTUyODcgMTMuMTM3OEwxLjM0NDcxIDEzLjg2MjJaTTE0LjEzMzMgMS41SDYzLjQ2NjdWMC41SDE0LjEzMzNWMS41Wk02NyAyNS41SDYzLjQ2NjdWMjYuNUg2N1YyNS41Wk02NyAwLjVINjMuNDY2N1YxLjVINjdWMC41Wk02Ny41IDI1QzY3LjUgMjUuMjc2MSA2Ny4yNzYxIDI1LjUgNjcgMjUuNVYyNi41QzY3LjgyODQgMjYuNSA2OC41IDI1LjgyODQgNjguNSAyNUg2Ny41Wk02OC41IDJDNjguNSAxLjE3MTU3IDY3LjgyODQgMC41IDY3IDAuNVYxLjVDNjcuMjc2MSAxLjUgNjcuNSAxLjcyMzg2IDY3LjUgMkg2OC41WicgZmlsbD0nJTIzMjYyNjI2Jy8lM2UgJTNjcGF0aCBkPSdNMzIuNjQ2NCA2LjM1MzU1TDQ2LjY0NjQgMjAuMzUzNkw0Ny4zNTM2IDE5LjY0NjRMMzMuMzUzNiA1LjY0NjQ1TDMyLjY0NjQgNi4zNTM1NVpNNDYuNjQ2NCA1LjY0NjQ1TDMyLjY0NjQgMTkuNjQ2NEwzMy4zNTM2IDIwLjM1MzZMNDcuMzUzNiA2LjM1MzU1TDQ2LjY0NjQgNS42NDY0NVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzYy9zdmclM2VcIiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG52YXIgb3B0aW9ucyA9IHtcbiAgICBjYXB0dXJlOiB0cnVlLFxufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU91dHNpZGVDbGljayhjYWxsYmFjaykge1xuICAgIHZhciByZWYgPSB1c2VSZWYoKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghcmVmLmN1cnJlbnQgfHwgcmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICB9LCBbY2FsbGJhY2tdKTtcbiAgICByZXR1cm4gcmVmO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlT3V0c2lkZUNsaWNrLmpzLm1hcCIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yLCBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVByb21pc2UoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoe1xuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICB9KSwgMiksIHJlc3VsdCA9IF9hWzBdLCBzZXRSZXN1bHQgPSBfYVsxXTtcbiAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgaWYgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB1bm1vdW50ZWRcbiAgICAvLyB3aGlsZSB0aGUgcHJvbWlzZSB3YXMgc3RpbGwgcGVuZGluZyB0byBhdm9pZCBzZXR0aW5nIHN0YXRlXG4gICAgLy8gb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cbiAgICB2YXIgaGFzVW5tb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaGFzVW5tb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocHJvbWlzZSkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSwgZXJyb3JfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDNdKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHByb21pc2VdO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBkYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH0sIFtoYXNVbm1vdW50ZWRdKTtcbiAgICByZXR1cm4gW3Jlc3VsdCwgZGlzcGF0Y2hdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlUHJvbWlzZS5qcy5tYXAiLCJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVN0YXRlLCBjcmVhdGVFbGVtZW50LCB1c2VSZWYsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuXG4vLyBHbG9iYWwgc3RhdGUgdXNlZCB0byBkZWR1cGxpY2F0ZSByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzXG5jb25zdCBTV1JHbG9iYWxTdGF0ZSA9IG5ldyBXZWFrTWFwKCk7XG5cbmNvbnN0IEVNUFRZX0NBQ0hFID0ge307XG5jb25zdCBub29wID0gKCk9Pnt9O1xuLy8gVXNpbmcgbm9vcCgpIGFzIHRoZSB1bmRlZmluZWQgdmFsdWUgYXMgdW5kZWZpbmVkIGNhbiBiZSByZXBsYWNlZFxuLy8gYnkgc29tZXRoaW5nIGVsc2UuIFByZXR0aWVyIGlnbm9yZSBhbmQgZXh0cmEgcGFyZW50aGVzZXMgYXJlIG5lY2Vzc2FyeSBoZXJlXG4vLyB0byBlbnN1cmUgdGhhdCB0c2MgZG9lc24ndCByZW1vdmUgdGhlIF9fTk9JTkxJTkVfXyBjb21tZW50LlxuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBVTkRFRklORUQgPSAvKiNfX05PSU5MSU5FX18qLyBub29wKCk7XG5jb25zdCBPQkpFQ1QgPSBPYmplY3Q7XG5jb25zdCBpc1VuZGVmaW5lZCA9ICh2KT0+diA9PT0gVU5ERUZJTkVEO1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2KT0+dHlwZW9mIHYgPT0gJ2Z1bmN0aW9uJztcbmNvbnN0IG1lcmdlT2JqZWN0cyA9IChhLCBiKT0+KHtcbiAgICAgICAgLi4uYSxcbiAgICAgICAgLi4uYlxuICAgIH0pO1xuY29uc3QgU1RSX1VOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuLy8gTk9URTogVXNlIHRoZSBmdW5jdGlvbiB0byBndWFyYW50ZWUgaXQncyByZS1ldmFsdWF0ZWQgYmV0d2VlbiBqc2RvbSBhbmQgbm9kZSBydW50aW1lIGZvciB0ZXN0cy5cbmNvbnN0IGlzV2luZG93RGVmaW5lZCA9IHR5cGVvZiB3aW5kb3cgIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGlzRG9jdW1lbnREZWZpbmVkID0gdHlwZW9mIGRvY3VtZW50ICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoKT0+aXNXaW5kb3dEZWZpbmVkICYmIHR5cGVvZiB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBjcmVhdGVDYWNoZUhlbHBlciA9IChjYWNoZSwga2V5KT0+e1xuICAgIGNvbnN0IHN0YXRlID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICByZXR1cm4gW1xuICAgICAgICAvLyBHZXR0ZXJcbiAgICAgICAgKCk9PmNhY2hlLmdldChrZXkpIHx8IEVNUFRZX0NBQ0hFLFxuICAgICAgICAvLyBTZXR0ZXJcbiAgICAgICAgKGluZm8pPT57XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgICAgICBzdGF0ZVs1XShrZXksIG1lcmdlT2JqZWN0cyhwcmV2LCBpbmZvKSwgcHJldiB8fCBFTVBUWV9DQUNIRSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFN1YnNjcmliZXJcbiAgICAgICAgc3RhdGVbNl1cbiAgICBdO1xufTtcblxuLy8gdXNlIFdlYWtNYXAgdG8gc3RvcmUgdGhlIG9iamVjdC0+a2V5IG1hcHBpbmdcbi8vIHNvIHRoZSBvYmplY3RzIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZC5cbi8vIFdlYWtNYXAgdXNlcyBhIGhhc2h0YWJsZSB1bmRlciB0aGUgaG9vZCwgc28gdGhlIGxvb2t1cFxuLy8gY29tcGxleGl0eSBpcyBhbG1vc3QgTygxKS5cbmNvbnN0IHRhYmxlID0gbmV3IFdlYWtNYXAoKTtcbi8vIGNvdW50ZXIgb2YgdGhlIGtleVxubGV0IGNvdW50ZXIgPSAwO1xuLy8gQSBzdGFibGUgaGFzaCBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzOlxuLy8gLSBGYXN0IGFuZCBlbnN1cmVzIHVuaXF1ZSBoYXNoIHByb3BlcnRpZXNcbi8vIC0gSGFuZGxlcyB1bnNlcmlhbGl6YWJsZSB2YWx1ZXNcbi8vIC0gSGFuZGxlcyBvYmplY3Qga2V5IG9yZGVyaW5nXG4vLyAtIEdlbmVyYXRlcyBzaG9ydCByZXN1bHRzXG4vL1xuLy8gVGhpcyBpcyBub3QgYSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgdGhlIHJlc3VsdCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZVxuLy8gcGFyc2FibGUuXG5jb25zdCBzdGFibGVIYXNoID0gKGFyZyk9PntcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIGFyZztcbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9IGFyZyAmJiBhcmcuY29uc3RydWN0b3I7XG4gICAgY29uc3QgaXNEYXRlID0gY29uc3RydWN0b3IgPT0gRGF0ZTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGxldCBpbmRleDtcbiAgICBpZiAoT0JKRUNUKGFyZykgPT09IGFyZyAmJiAhaXNEYXRlICYmIGNvbnN0cnVjdG9yICE9IFJlZ0V4cCkge1xuICAgICAgICAvLyBPYmplY3QvZnVuY3Rpb24sIG5vdCBudWxsL2RhdGUvcmVnZXhwLiBVc2UgV2Vha01hcCB0byBzdG9yZSB0aGUgaWQgZmlyc3QuXG4gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBoYXNoZWQsIGRpcmVjdGx5IHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgICByZXN1bHQgPSB0YWJsZS5nZXQoYXJnKTtcbiAgICAgICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGhhc2ggZmlyc3QgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3Rpb24gYmVmb3JlIGVudGVyaW5nIHRoZVxuICAgICAgICAvLyByZWN1cnNpdmUgYHN0YWJsZUhhc2hgIGNhbGxzLlxuICAgICAgICAvLyBGb3Igb3RoZXIgb2JqZWN0cyBsaWtlIHNldCBhbmQgbWFwLCB3ZSB1c2UgdGhpcyBpZCBkaXJlY3RseSBhcyB0aGUgaGFzaC5cbiAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyICsgJ34nO1xuICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gQXJyYXkpIHtcbiAgICAgICAgICAgIC8vIEFycmF5LlxuICAgICAgICAgICAgcmVzdWx0ID0gJ0AnO1xuICAgICAgICAgICAgZm9yKGluZGV4ID0gMDsgaW5kZXggPCBhcmcubGVuZ3RoOyBpbmRleCsrKXtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IE9CSkVDVCkge1xuICAgICAgICAgICAgLy8gT2JqZWN0LCBzb3J0IGtleXMuXG4gICAgICAgICAgICByZXN1bHQgPSAnIyc7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT0JKRUNULmtleXMoYXJnKS5zb3J0KCk7XG4gICAgICAgICAgICB3aGlsZSghaXNVbmRlZmluZWQoaW5kZXggPSBrZXlzLnBvcCgpKSl7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gaW5kZXggKyAnOicgKyBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBpc0RhdGUgPyBhcmcudG9KU09OKCkgOiB0eXBlID09ICdzeW1ib2wnID8gYXJnLnRvU3RyaW5nKCkgOiB0eXBlID09ICdzdHJpbmcnID8gSlNPTi5zdHJpbmdpZnkoYXJnKSA6ICcnICsgYXJnO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBEdWUgdG8gdGhlIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02NzgwNzUsXG4gKiBpdCdzIG5vdCByZWxpYWJsZSB0byBkZXRlY3QgaWYgdGhlIGJyb3dzZXIgaXMgY3VycmVudGx5IG9ubGluZSBvciBvZmZsaW5lXG4gKiBiYXNlZCBvbiBgbmF2aWdhdG9yLm9uTGluZWAuXG4gKiBBcyBhIHdvcmthcm91bmQsIHdlIGFsd2F5cyBhc3N1bWUgaXQncyBvbmxpbmUgb24gdGhlIGZpcnN0IGxvYWQsIGFuZCBjaGFuZ2VcbiAqIHRoZSBzdGF0dXMgdXBvbiBgb25saW5lYCBvciBgb2ZmbGluZWAgZXZlbnRzLlxuICovIGxldCBvbmxpbmUgPSB0cnVlO1xuY29uc3QgaXNPbmxpbmUgPSAoKT0+b25saW5lO1xuLy8gRm9yIG5vZGUgYW5kIFJlYWN0IE5hdGl2ZSwgYGFkZC9yZW1vdmVFdmVudExpc3RlbmVyYCBkb2Vzbid0IGV4aXN0IG9uIHdpbmRvdy5cbmNvbnN0IFtvbldpbmRvd0V2ZW50LCBvZmZXaW5kb3dFdmVudF0gPSBpc1dpbmRvd0RlZmluZWQgJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgPyBbXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpLFxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQod2luZG93KVxuXSA6IFtcbiAgICBub29wLFxuICAgIG5vb3Bcbl07XG5jb25zdCBpc1Zpc2libGUgPSAoKT0+e1xuICAgIGNvbnN0IHZpc2liaWxpdHlTdGF0ZSA9IGlzRG9jdW1lbnREZWZpbmVkICYmIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTtcbiAgICByZXR1cm4gaXNVbmRlZmluZWQodmlzaWJpbGl0eVN0YXRlKSB8fCB2aXNpYmlsaXR5U3RhdGUgIT09ICdoaWRkZW4nO1xufTtcbmNvbnN0IGluaXRGb2N1cyA9IChjYWxsYmFjayk9PntcbiAgICAvLyBmb2N1cyByZXZhbGlkYXRlXG4gICAgaWYgKGlzRG9jdW1lbnREZWZpbmVkKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIG9uV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBpZiAoaXNEb2N1bWVudERlZmluZWQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIH07XG59O1xuY29uc3QgaW5pdFJlY29ubmVjdCA9IChjYWxsYmFjayk9PntcbiAgICAvLyByZXZhbGlkYXRlIG9uIHJlY29ubmVjdGVkXG4gICAgY29uc3Qgb25PbmxpbmUgPSAoKT0+e1xuICAgICAgICBvbmxpbmUgPSB0cnVlO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gICAgLy8gbm90aGluZyB0byByZXZhbGlkYXRlLCBqdXN0IHVwZGF0ZSB0aGUgc3RhdHVzXG4gICAgY29uc3Qgb25PZmZsaW5lID0gKCk9PntcbiAgICAgICAgb25saW5lID0gZmFsc2U7XG4gICAgfTtcbiAgICBvbldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgb25XaW5kb3dFdmVudCgnb2ZmbGluZScsIG9uT2ZmbGluZSk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICB9O1xufTtcbmNvbnN0IHByZXNldCA9IHtcbiAgICBpc09ubGluZSxcbiAgICBpc1Zpc2libGVcbn07XG5jb25zdCBkZWZhdWx0Q29uZmlnT3B0aW9ucyA9IHtcbiAgICBpbml0Rm9jdXMsXG4gICAgaW5pdFJlY29ubmVjdFxufTtcblxuY29uc3QgSVNfUkVBQ1RfTEVHQUNZID0gIVJlYWN0LnVzZUlkO1xuY29uc3QgSVNfU0VSVkVSID0gIWlzV2luZG93RGVmaW5lZCB8fCAnRGVubycgaW4gd2luZG93O1xuLy8gUG9seWZpbGwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5jb25zdCByQUYgPSAoZik9Pmhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSgpID8gd2luZG93WydyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXShmKSA6IHNldFRpbWVvdXQoZiwgMSk7XG4vLyBSZWFjdCBjdXJyZW50bHkgdGhyb3dzIGEgd2FybmluZyB3aGVuIHVzaW5nIHVzZUxheW91dEVmZmVjdCBvbiB0aGUgc2VydmVyLlxuLy8gVG8gZ2V0IGFyb3VuZCBpdCwgd2UgY2FuIGNvbmRpdGlvbmFsbHkgdXNlRWZmZWN0IG9uIHRoZSBzZXJ2ZXIgKG5vLW9wKSBhbmRcbi8vIHVzZUxheW91dEVmZmVjdCBpbiB0aGUgYnJvd3Nlci5cbmNvbnN0IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSBJU19TRVJWRVIgPyB1c2VFZmZlY3QgOiB1c2VMYXlvdXRFZmZlY3Q7XG4vLyBUaGlzIGFzc2lnbm1lbnQgaXMgdG8gZXh0ZW5kIHRoZSBOYXZpZ2F0b3IgdHlwZSB0byB1c2UgZWZmZWN0aXZlVHlwZS5cbmNvbnN0IG5hdmlnYXRvckNvbm5lY3Rpb24gPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbi8vIEFkanVzdCB0aGUgY29uZmlnIGJhc2VkIG9uIHNsb3cgY29ubmVjdGlvbiBzdGF0dXMgKDw9IDcwS2JwcykuXG5jb25zdCBzbG93Q29ubmVjdGlvbiA9ICFJU19TRVJWRVIgJiYgbmF2aWdhdG9yQ29ubmVjdGlvbiAmJiAoW1xuICAgICdzbG93LTJnJyxcbiAgICAnMmcnXG5dLmluY2x1ZGVzKG5hdmlnYXRvckNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZSkgfHwgbmF2aWdhdG9yQ29ubmVjdGlvbi5zYXZlRGF0YSk7XG5cbmNvbnN0IHNlcmlhbGl6ZSA9IChrZXkpPT57XG4gICAgaWYgKGlzRnVuY3Rpb24oa2V5KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAga2V5ID0ga2V5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzIG5vdCByZWFkeVxuICAgICAgICAgICAga2V5ID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBrZXkgYXMgdGhlIGFyZ3VtZW50IG9mIGZldGNoZXIuIFRoaXMgY2FuIGJlIGEgc3RyaW5nIG9yIGFuXG4gICAgLy8gYXJyYXkgb2YgdmFsdWVzLlxuICAgIGNvbnN0IGFyZ3MgPSBrZXk7XG4gICAgLy8gSWYga2V5IGlzIG5vdCBmYWxzeSwgb3Igbm90IGFuIGVtcHR5IGFycmF5LCBoYXNoIGl0LlxuICAgIGtleSA9IHR5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyBrZXkgOiAoQXJyYXkuaXNBcnJheShrZXkpID8ga2V5Lmxlbmd0aCA6IGtleSkgPyBzdGFibGVIYXNoKGtleSkgOiAnJztcbiAgICByZXR1cm4gW1xuICAgICAgICBrZXksXG4gICAgICAgIGFyZ3NcbiAgICBdO1xufTtcblxuLy8gR2xvYmFsIHRpbWVzdGFtcC5cbmxldCBfX3RpbWVzdGFtcCA9IDA7XG5jb25zdCBnZXRUaW1lc3RhbXAgPSAoKT0+KytfX3RpbWVzdGFtcDtcblxuY29uc3QgRk9DVVNfRVZFTlQgPSAwO1xuY29uc3QgUkVDT05ORUNUX0VWRU5UID0gMTtcbmNvbnN0IE1VVEFURV9FVkVOVCA9IDI7XG5cbnZhciBjb25zdGFudHMgPSB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgRk9DVVNfRVZFTlQ6IEZPQ1VTX0VWRU5ULFxuICBSRUNPTk5FQ1RfRVZFTlQ6IFJFQ09OTkVDVF9FVkVOVCxcbiAgTVVUQVRFX0VWRU5UOiBNVVRBVEVfRVZFTlRcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGludGVybmFsTXV0YXRlKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbY2FjaGUsIF9rZXksIF9kYXRhLCBfb3B0c10gPSBhcmdzO1xuICAgIC8vIFdoZW4gcGFzc2luZyBhcyBhIGJvb2xlYW4sIGl0J3MgZXhwbGljaXRseSB1c2VkIHRvIGRpc2FibGUvZW5hYmxlXG4gICAgLy8gcmV2YWxpZGF0aW9uLlxuICAgIGNvbnN0IG9wdGlvbnMgPSBtZXJnZU9iamVjdHMoe1xuICAgICAgICBwb3B1bGF0ZUNhY2hlOiB0cnVlLFxuICAgICAgICB0aHJvd09uRXJyb3I6IHRydWVcbiAgICB9LCB0eXBlb2YgX29wdHMgPT09ICdib29sZWFuJyA/IHtcbiAgICAgICAgcmV2YWxpZGF0ZTogX29wdHNcbiAgICB9IDogX29wdHMgfHwge30pO1xuICAgIGxldCBwb3B1bGF0ZUNhY2hlID0gb3B0aW9ucy5wb3B1bGF0ZUNhY2hlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvck9wdGlvbiA9IG9wdGlvbnMucm9sbGJhY2tPbkVycm9yO1xuICAgIGxldCBvcHRpbWlzdGljRGF0YSA9IG9wdGlvbnMub3B0aW1pc3RpY0RhdGE7XG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IG9wdGlvbnMucmV2YWxpZGF0ZSAhPT0gZmFsc2U7XG4gICAgY29uc3Qgcm9sbGJhY2tPbkVycm9yID0gKGVycm9yKT0+e1xuICAgICAgICByZXR1cm4gdHlwZW9mIHJvbGxiYWNrT25FcnJvck9wdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHJvbGxiYWNrT25FcnJvck9wdGlvbihlcnJvcikgOiByb2xsYmFja09uRXJyb3JPcHRpb24gIT09IGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgdGhyb3dPbkVycm9yID0gb3B0aW9ucy50aHJvd09uRXJyb3I7XG4gICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGtleSBmaWx0ZXIsIHJldHVybiB0aGUgbXV0YXRpb24gcmVzdWx0cyBmb3IgYWxsXG4gICAgLy8gZmlsdGVyZWQga2V5cy5cbiAgICBpZiAoaXNGdW5jdGlvbihfa2V5KSkge1xuICAgICAgICBjb25zdCBrZXlGaWx0ZXIgPSBfa2V5O1xuICAgICAgICBjb25zdCBtYXRjaGVkS2V5cyA9IFtdO1xuICAgICAgICBjb25zdCBpdCA9IGNhY2hlLmtleXMoKTtcbiAgICAgICAgZm9yKGxldCBrZXlJdCA9IGl0Lm5leHQoKTsgIWtleUl0LmRvbmU7IGtleUl0ID0gaXQubmV4dCgpKXtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleUl0LnZhbHVlO1xuICAgICAgICAgICAgaWYgKC8vIFNraXAgdGhlIHNwZWNpYWwgdXNlU1dSSW5maW5pdGUga2V5cy5cbiAgICAgICAgICAgICFrZXkuc3RhcnRzV2l0aCgnJGluZiQnKSAmJiBrZXlGaWx0ZXIoY2FjaGUuZ2V0KGtleSkuX2spKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlZEtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChtYXRjaGVkS2V5cy5tYXAobXV0YXRlQnlLZXkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG11dGF0ZUJ5S2V5KF9rZXkpO1xuICAgIGFzeW5jIGZ1bmN0aW9uIG11dGF0ZUJ5S2V5KF9rKSB7XG4gICAgICAgIC8vIFNlcmlhbGl6ZSBrZXlcbiAgICAgICAgY29uc3QgW2tleV0gPSBzZXJpYWxpemUoX2spO1xuICAgICAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBbZ2V0LCBzZXRdID0gY3JlYXRlQ2FjaGVIZWxwZXIoY2FjaGUsIGtleSk7XG4gICAgICAgIGNvbnN0IFtFVkVOVF9SRVZBTElEQVRPUlMsIE1VVEFUSU9OLCBGRVRDSF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgICAgICBjb25zdCByZXZhbGlkYXRvcnMgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XTtcbiAgICAgICAgY29uc3Qgc3RhcnRSZXZhbGlkYXRlID0gKCk9PntcbiAgICAgICAgICAgIGlmIChyZXZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gSW52YWxpZGF0ZSB0aGUga2V5IGJ5IGRlbGV0aW5nIHRoZSBjb25jdXJyZW50IHJlcXVlc3QgbWFya2VycyBzbyBuZXdcbiAgICAgICAgICAgICAgICAvLyByZXF1ZXN0cyB3aWxsIG5vdCBiZSBkZWR1cGVkLlxuICAgICAgICAgICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChyZXZhbGlkYXRvcnMgJiYgcmV2YWxpZGF0b3JzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRvcnNbMF0oTVVUQVRFX0VWRU5UKS50aGVuKCgpPT5nZXQoKS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2V0KCkuZGF0YTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3IGRhdGEgcHJvdmlkZWQsIHJldmFsaWRhdGUgdGhlIGtleSB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgICAgIC8vIFJldmFsaWRhdGUgYW5kIGJyb2FkY2FzdCBzdGF0ZS5cbiAgICAgICAgICAgIHJldHVybiBzdGFydFJldmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGF0YSA9IF9kYXRhO1xuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIC8vIFVwZGF0ZSBnbG9iYWwgdGltZXN0YW1wcy5cbiAgICAgICAgY29uc3QgYmVmb3JlTXV0YXRpb25UcyA9IGdldFRpbWVzdGFtcCgpO1xuICAgICAgICBNVVRBVElPTltrZXldID0gW1xuICAgICAgICAgICAgYmVmb3JlTXV0YXRpb25UcyxcbiAgICAgICAgICAgIDBcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaGFzT3B0aW1pc3RpY0RhdGEgPSAhaXNVbmRlZmluZWQob3B0aW1pc3RpY0RhdGEpO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IGdldCgpO1xuICAgICAgICAvLyBgZGlzcGxheWVkRGF0YWAgaXMgdGhlIGN1cnJlbnQgdmFsdWUgb24gc2NyZWVuLiBJdCBjb3VsZCBiZSB0aGUgb3B0aW1pc3RpYyB2YWx1ZVxuICAgICAgICAvLyB0aGF0IGlzIGdvaW5nIHRvIGJlIG92ZXJyaWRkZW4gYnkgYSBgY29tbWl0dGVkRGF0YWAsIG9yIGdldCByZXZlcnRlZCBiYWNrLlxuICAgICAgICAvLyBgY29tbWl0dGVkRGF0YWAgaXMgdGhlIHZhbGlkYXRlZCB2YWx1ZSB0aGF0IGNvbWVzIGZyb20gYSBmZXRjaCBvciBtdXRhdGlvbi5cbiAgICAgICAgY29uc3QgZGlzcGxheWVkRGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gc3RhdGUuX2M7XG4gICAgICAgIGNvbnN0IGNvbW1pdHRlZERhdGEgPSBpc1VuZGVmaW5lZChjdXJyZW50RGF0YSkgPyBkaXNwbGF5ZWREYXRhIDogY3VycmVudERhdGE7XG4gICAgICAgIC8vIERvIG9wdGltaXN0aWMgZGF0YSB1cGRhdGUuXG4gICAgICAgIGlmIChoYXNPcHRpbWlzdGljRGF0YSkge1xuICAgICAgICAgICAgb3B0aW1pc3RpY0RhdGEgPSBpc0Z1bmN0aW9uKG9wdGltaXN0aWNEYXRhKSA/IG9wdGltaXN0aWNEYXRhKGNvbW1pdHRlZERhdGEpIDogb3B0aW1pc3RpY0RhdGE7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIHNldCBvcHRpbWlzdGljIGRhdGEsIGJhY2t1cCB0aGUgY3VycmVudCBjb21taXR0ZWREYXRhIGRhdGEgaW4gYF9jYC5cbiAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgZGF0YTogb3B0aW1pc3RpY0RhdGEsXG4gICAgICAgICAgICAgICAgX2M6IGNvbW1pdHRlZERhdGFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgICAvLyBgZGF0YWAgaXMgYSBmdW5jdGlvbiwgY2FsbCBpdCBwYXNzaW5nIGN1cnJlbnQgY2FjaGUgdmFsdWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhKGNvbW1pdHRlZERhdGEpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgaXQgdGhyb3dzIGFuIGVycm9yIHN5bmNocm9ub3VzbHksIHdlIHNob3VsZG4ndCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGBkYXRhYCBpcyBhIHByb21pc2UvdGhlbmFibGUsIHJlc29sdmUgdGhlIGZpbmFsIGRhdGEgZmlyc3QuXG4gICAgICAgIGlmIChkYXRhICYmIGlzRnVuY3Rpb24oZGF0YS50aGVuKSkge1xuICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBtdXRhdGlvbiBpcyBhc3luYywgd2UgbmVlZCB0byBjaGVjayB0aW1lc3RhbXBzIHRvXG4gICAgICAgICAgICAvLyBhdm9pZCByYWNlIGNvbmRpdGlvbnMuXG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgZGF0YS5jYXRjaCgoZXJyKT0+e1xuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBvdGhlciBtdXRhdGlvbnMgaGF2ZSBvY2N1cnJlZCBzaW5jZSB3ZSd2ZSBzdGFydGVkIHRoaXMgbXV0YXRpb24uXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgcmFjZSB3ZSBkb24ndCB1cGRhdGUgY2FjaGUgb3IgYnJvYWRjYXN0IHRoZSBjaGFuZ2UsXG4gICAgICAgICAgICAvLyBqdXN0IHJldHVybiB0aGUgZGF0YS5cbiAgICAgICAgICAgIGlmIChiZWZvcmVNdXRhdGlvblRzICE9PSBNVVRBVElPTltrZXldWzBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgJiYgaGFzT3B0aW1pc3RpY0RhdGEgJiYgcm9sbGJhY2tPbkVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIC8vIFJvbGxiYWNrLiBBbHdheXMgcG9wdWxhdGUgdGhlIGNhY2hlIGluIHRoaXMgY2FzZSBidXQgd2l0aG91dFxuICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybWluZyB0aGUgZGF0YS5cbiAgICAgICAgICAgICAgICBwb3B1bGF0ZUNhY2hlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkYXRhID0gY29tbWl0dGVkRGF0YTtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBkYXRhIHRvIGJlIHRoZSBsYXRlc3QgY29tbWl0dGVkIGRhdGEsIGFuZCBjbGVhciB0aGUgYF9jYCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgd2Ugc2hvdWxkIHdyaXRlIGJhY2sgdGhlIGNhY2hlIGFmdGVyIHJlcXVlc3QuXG4gICAgICAgIGlmIChwb3B1bGF0ZUNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSByZXN1bHQgaW50byBkYXRhLlxuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHBvcHVsYXRlQ2FjaGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwb3B1bGF0ZUNhY2hlKGRhdGEsIGNvbW1pdHRlZERhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBjYWNoZWQgZGF0YSBpZiB0aGVyZSdzIG5vIGVycm9yLiBEYXRhIGNhbiBiZSBgdW5kZWZpbmVkYCBoZXJlLlxuICAgICAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBSZXNldCB0aGUgdGltZXN0YW1wIHRvIG1hcmsgdGhlIG11dGF0aW9uIGhhcyBlbmRlZC5cbiAgICAgICAgTVVUQVRJT05ba2V5XVsxXSA9IGdldFRpbWVzdGFtcCgpO1xuICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgU1dSIEhvb2tzJyBpbnRlcm5hbCBzdGF0ZXM6XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHN0YXJ0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAvLyBUaGUgbXV0YXRpb24gYW5kIHJldmFsaWRhdGlvbiBhcmUgZW5kZWQsIHdlIGNhbiBjbGVhciBpdCBzaW5jZSB0aGUgZGF0YSBpc1xuICAgICAgICAvLyBub3QgYW4gb3B0aW1pc3RpYyB2YWx1ZSBhbnltb3JlLlxuICAgICAgICBzZXQoe1xuICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGhyb3cgZXJyb3Igb3IgcmV0dXJuIGRhdGFcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodGhyb3dPbkVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9wdWxhdGVDYWNoZSA/IHJlcyA6IGRhdGE7XG4gICAgfVxufVxuXG5jb25zdCByZXZhbGlkYXRlQWxsS2V5cyA9IChyZXZhbGlkYXRvcnMsIHR5cGUpPT57XG4gICAgZm9yKGNvbnN0IGtleSBpbiByZXZhbGlkYXRvcnMpe1xuICAgICAgICBpZiAocmV2YWxpZGF0b3JzW2tleV1bMF0pIHJldmFsaWRhdG9yc1trZXldWzBdKHR5cGUpO1xuICAgIH1cbn07XG5jb25zdCBpbml0Q2FjaGUgPSAocHJvdmlkZXIsIG9wdGlvbnMpPT57XG4gICAgLy8gVGhlIGdsb2JhbCBzdGF0ZSBmb3IgYSBzcGVjaWZpYyBwcm92aWRlciB3aWxsIGJlIHVzZWQgdG8gZGVkdXBsaWNhdGVcbiAgICAvLyByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzLiBBcyB3ZWxsIGFzIGEgbXV0YXRlIGZ1bmN0aW9uIHRoYXQgaXMgYm91bmQgdG9cbiAgICAvLyB0aGUgY2FjaGUuXG4gICAgLy8gVGhlIHByb3ZpZGVyJ3MgZ2xvYmFsIHN0YXRlIG1pZ2h0IGJlIGFscmVhZHkgaW5pdGlhbGl6ZWQuIExldCdzIHRyeSB0byBnZXQgdGhlXG4gICAgLy8gZ2xvYmFsIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdmlkZXIgZmlyc3QuXG4gICAgaWYgKCFTV1JHbG9iYWxTdGF0ZS5oYXMocHJvdmlkZXIpKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZ09wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGdsb2JhbCBzdGF0ZSBib3VuZCB0byB0aGUgcHJvdmlkZXIsIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGVcbiAgICAgICAgLy8gbmV3IG11dGF0ZSBmdW5jdGlvbi5cbiAgICAgICAgY29uc3QgRVZFTlRfUkVWQUxJREFUT1JTID0ge307XG4gICAgICAgIGNvbnN0IG11dGF0ZSA9IGludGVybmFsTXV0YXRlLmJpbmQoVU5ERUZJTkVELCBwcm92aWRlcik7XG4gICAgICAgIGxldCB1bm1vdW50ID0gbm9vcDtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IHt9O1xuICAgICAgICBjb25zdCBzdWJzY3JpYmUgPSAoa2V5LCBjYWxsYmFjayk9PntcbiAgICAgICAgICAgIGNvbnN0IHN1YnMgPSBzdWJzY3JpcHRpb25zW2tleV0gfHwgW107XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25zW2tleV0gPSBzdWJzO1xuICAgICAgICAgICAgc3Vicy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIHJldHVybiAoKT0+c3Vicy5zcGxpY2Uoc3Vicy5pbmRleE9mKGNhbGxiYWNrKSwgMSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNldHRlciA9IChrZXksIHZhbHVlLCBwcmV2KT0+e1xuICAgICAgICAgICAgcHJvdmlkZXIuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgc3VicyA9IHN1YnNjcmlwdGlvbnNba2V5XTtcbiAgICAgICAgICAgIGlmIChzdWJzKSB7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBpID0gc3Vicy5sZW5ndGg7IGktLTspe1xuICAgICAgICAgICAgICAgICAgICBzdWJzW2ldKHByZXYsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluaXRQcm92aWRlciA9ICgpPT57XG4gICAgICAgICAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YXRlIGlmIGl0J3MgbmV3LCBvciBpZiB0aGUgcHJvdmlkZXIgaGFzIGJlZW4gZXh0ZW5kZWQuXG4gICAgICAgICAgICAgICAgU1dSR2xvYmFsU3RhdGUuc2V0KHByb3ZpZGVyLCBbXG4gICAgICAgICAgICAgICAgICAgIEVWRU5UX1JFVkFMSURBVE9SUyxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzZXR0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZVxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIGlmICghSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gbGlzdGVuaW5nIHRvIHRoZSBuYXRpdmUgZXZlbnRzIGZvciBhdXRvIHJldmFsaWRhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGludGVudGlvbmFsbHkgcHV0IGEgZGVsYXkgKHNldFRpbWVvdXQpIGhlcmUgdG8gbWFrZSBzdXJlIHRoZXkgYXJlXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpcmVkIGFmdGVyIGltbWVkaWF0ZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbnMsIHdoaWNoIGNhbiBiZVxuICAgICAgICAgICAgICAgICAgICAvLyBSZWFjdCdzIHN0YXRlIHVwZGF0ZXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYXZvaWRzIHNvbWUgdW5uZWNlc3NhcnkgcmV2YWxpZGF0aW9ucyBzdWNoIGFzXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xNjgwLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWxlYXNlRm9jdXMgPSBvcHRzLmluaXRGb2N1cyhzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBGT0NVU19FVkVOVCkpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZVJlY29ubmVjdCA9IG9wdHMuaW5pdFJlY29ubmVjdChzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBSRUNPTk5FQ1RfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIHVubW91bnQgPSAoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZUZvY3VzICYmIHJlbGVhc2VGb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZVJlY29ubmVjdCAmJiByZWxlYXNlUmVjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHVuLW1vdW50aW5nLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgY2FjaGUgcHJvdmlkZXIgZnJvbSB0aGUgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UgdG9vIGJlY2F1c2UgaXQncyBhIHNpZGUtZWZmZWN0LiBPdGhlcndpc2UsIHdoZW4gcmUtbW91bnRpbmcgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgbm90IHJlLXJlZ2lzdGVyIHRob3NlIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLmRlbGV0ZShwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpbml0UHJvdmlkZXIoKTtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm92aWRlciwgd2UgbmVlZCB0byBpbml0aWFsaXplIGl0IGFuZCBzZXR1cCBET00gZXZlbnRzXG4gICAgICAgIC8vIGxpc3RlbmVycyBmb3IgYGZvY3VzYCBhbmQgYHJlY29ubmVjdGAgYWN0aW9ucy5cbiAgICAgICAgLy8gV2UgbWlnaHQgd2FudCB0byBpbmplY3QgYW4gZXh0cmEgbGF5ZXIgb24gdG9wIG9mIGBwcm92aWRlcmAgaW4gdGhlIGZ1dHVyZSxcbiAgICAgICAgLy8gc3VjaCBhcyBrZXkgc2VyaWFsaXphdGlvbiwgYXV0byBHQywgZXRjLlxuICAgICAgICAvLyBGb3Igbm93LCBpdCdzIGp1c3QgYSBgTWFwYCBpbnRlcmZhY2Ugd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9ucy5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgICAgaW5pdFByb3ZpZGVyLFxuICAgICAgICAgICAgdW5tb3VudFxuICAgICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgICBwcm92aWRlcixcbiAgICAgICAgU1dSR2xvYmFsU3RhdGUuZ2V0KHByb3ZpZGVyKVs0XVxuICAgIF07XG59O1xuXG4vLyBlcnJvciByZXRyeVxuY29uc3Qgb25FcnJvclJldHJ5ID0gKF8sIF9fLCBjb25maWcsIHJldmFsaWRhdGUsIG9wdHMpPT57XG4gICAgY29uc3QgbWF4UmV0cnlDb3VudCA9IGNvbmZpZy5lcnJvclJldHJ5Q291bnQ7XG4gICAgY29uc3QgY3VycmVudFJldHJ5Q291bnQgPSBvcHRzLnJldHJ5Q291bnQ7XG4gICAgLy8gRXhwb25lbnRpYWwgYmFja29mZlxuICAgIGNvbnN0IHRpbWVvdXQgPSB+figoTWF0aC5yYW5kb20oKSArIDAuNSkgKiAoMSA8PCAoY3VycmVudFJldHJ5Q291bnQgPCA4ID8gY3VycmVudFJldHJ5Q291bnQgOiA4KSkpICogY29uZmlnLmVycm9yUmV0cnlJbnRlcnZhbDtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1heFJldHJ5Q291bnQpICYmIGN1cnJlbnRSZXRyeUNvdW50ID4gbWF4UmV0cnlDb3VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQocmV2YWxpZGF0ZSwgdGltZW91dCwgb3B0cyk7XG59O1xuY29uc3QgY29tcGFyZSA9IChjdXJyZW50RGF0YSwgbmV3RGF0YSk9PnN0YWJsZUhhc2goY3VycmVudERhdGEpID09IHN0YWJsZUhhc2gobmV3RGF0YSk7XG4vLyBEZWZhdWx0IGNhY2hlIHByb3ZpZGVyXG5jb25zdCBbY2FjaGUsIG11dGF0ZV0gPSBpbml0Q2FjaGUobmV3IE1hcCgpKTtcbi8vIERlZmF1bHQgY29uZmlnXG5jb25zdCBkZWZhdWx0Q29uZmlnID0gbWVyZ2VPYmplY3RzKHtcbiAgICAvLyBldmVudHNcbiAgICBvbkxvYWRpbmdTbG93OiBub29wLFxuICAgIG9uU3VjY2Vzczogbm9vcCxcbiAgICBvbkVycm9yOiBub29wLFxuICAgIG9uRXJyb3JSZXRyeSxcbiAgICBvbkRpc2NhcmRlZDogbm9vcCxcbiAgICAvLyBzd2l0Y2hlc1xuICAgIHJldmFsaWRhdGVPbkZvY3VzOiB0cnVlLFxuICAgIHJldmFsaWRhdGVPblJlY29ubmVjdDogdHJ1ZSxcbiAgICByZXZhbGlkYXRlSWZTdGFsZTogdHJ1ZSxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IHRydWUsXG4gICAgLy8gdGltZW91dHNcbiAgICBlcnJvclJldHJ5SW50ZXJ2YWw6IHNsb3dDb25uZWN0aW9uID8gMTAwMDAgOiA1MDAwLFxuICAgIGZvY3VzVGhyb3R0bGVJbnRlcnZhbDogNSAqIDEwMDAsXG4gICAgZGVkdXBpbmdJbnRlcnZhbDogMiAqIDEwMDAsXG4gICAgbG9hZGluZ1RpbWVvdXQ6IHNsb3dDb25uZWN0aW9uID8gNTAwMCA6IDMwMDAsXG4gICAgLy8gcHJvdmlkZXJzXG4gICAgY29tcGFyZSxcbiAgICBpc1BhdXNlZDogKCk9PmZhbHNlLFxuICAgIGNhY2hlLFxuICAgIG11dGF0ZSxcbiAgICBmYWxsYmFjazoge31cbn0sIC8vIHVzZSB3ZWIgcHJlc2V0IGJ5IGRlZmF1bHRcbnByZXNldCk7XG5cbmNvbnN0IG1lcmdlQ29uZmlncyA9IChhLCBiKT0+e1xuICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IG9iamVjdCB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgaGVyZS5cbiAgICBjb25zdCB2ID0gbWVyZ2VPYmplY3RzKGEsIGIpO1xuICAgIC8vIElmIHR3byBjb25maWdzIGFyZSBwcm92aWRlZCwgbWVyZ2UgdGhlaXIgYHVzZWAgYW5kIGBmYWxsYmFja2Agb3B0aW9ucy5cbiAgICBpZiAoYikge1xuICAgICAgICBjb25zdCB7IHVzZTogdTEgLCBmYWxsYmFjazogZjEgIH0gPSBhO1xuICAgICAgICBjb25zdCB7IHVzZTogdTIgLCBmYWxsYmFjazogZjIgIH0gPSBiO1xuICAgICAgICBpZiAodTEgJiYgdTIpIHtcbiAgICAgICAgICAgIHYudXNlID0gdTEuY29uY2F0KHUyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZjEgJiYgZjIpIHtcbiAgICAgICAgICAgIHYuZmFsbGJhY2sgPSBtZXJnZU9iamVjdHMoZjEsIGYyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cbmNvbnN0IFNXUkNvbmZpZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcbmNvbnN0IFNXUkNvbmZpZyA9IChwcm9wcyk9PntcbiAgICBjb25zdCB7IHZhbHVlICB9ID0gcHJvcHM7XG4gICAgY29uc3QgcGFyZW50Q29uZmlnID0gdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KTtcbiAgICBjb25zdCBpc0Z1bmN0aW9uYWxDb25maWcgPSBpc0Z1bmN0aW9uKHZhbHVlKTtcbiAgICBjb25zdCBjb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyB2YWx1ZShwYXJlbnRDb25maWcpIDogdmFsdWUsIFtcbiAgICAgICAgaXNGdW5jdGlvbmFsQ29uZmlnLFxuICAgICAgICBwYXJlbnRDb25maWcsXG4gICAgICAgIHZhbHVlXG4gICAgXSk7XG4gICAgLy8gRXh0ZW5kIHBhcmVudCBjb250ZXh0IHZhbHVlcyBhbmQgbWlkZGxld2FyZS5cbiAgICBjb25zdCBleHRlbmRlZENvbmZpZyA9IHVzZU1lbW8oKCk9PmlzRnVuY3Rpb25hbENvbmZpZyA/IGNvbmZpZyA6IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyksIFtcbiAgICAgICAgaXNGdW5jdGlvbmFsQ29uZmlnLFxuICAgICAgICBwYXJlbnRDb25maWcsXG4gICAgICAgIGNvbmZpZ1xuICAgIF0pO1xuICAgIC8vIFNob3VsZCBub3QgdXNlIHRoZSBpbmhlcml0ZWQgcHJvdmlkZXIuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBjb25maWcgJiYgY29uZmlnLnByb3ZpZGVyO1xuICAgIC8vIFVzZSBhIGxhenkgaW5pdGlhbGl6ZWQgc3RhdGUgdG8gY3JlYXRlIHRoZSBjYWNoZSBvbiBmaXJzdCBhY2Nlc3MuXG4gICAgY29uc3QgW2NhY2hlQ29udGV4dF0gPSB1c2VTdGF0ZSgoKT0+cHJvdmlkZXIgPyBpbml0Q2FjaGUocHJvdmlkZXIoZXh0ZW5kZWRDb25maWcuY2FjaGUgfHwgY2FjaGUpLCBjb25maWcpIDogVU5ERUZJTkVEKTtcbiAgICAvLyBPdmVycmlkZSB0aGUgY2FjaGUgaWYgYSBuZXcgcHJvdmlkZXIgaXMgZ2l2ZW4uXG4gICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICBleHRlbmRlZENvbmZpZy5jYWNoZSA9IGNhY2hlQ29udGV4dFswXTtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcubXV0YXRlID0gY2FjaGVDb250ZXh0WzFdO1xuICAgIH1cbiAgICAvLyBVbnN1YnNjcmliZSBldmVudHMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoY2FjaGVDb250ZXh0KSB7XG4gICAgICAgICAgICBjYWNoZUNvbnRleHRbMl0gJiYgY2FjaGVDb250ZXh0WzJdKCk7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVDb250ZXh0WzNdO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFNXUkNvbmZpZ0NvbnRleHQuUHJvdmlkZXIsIG1lcmdlT2JqZWN0cyhwcm9wcywge1xuICAgICAgICB2YWx1ZTogZXh0ZW5kZWRDb25maWdcbiAgICB9KSk7XG59O1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yXG5jb25zdCBlbmFibGVEZXZ0b29scyA9IGlzV2luZG93RGVmaW5lZCAmJiB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX187XG5jb25zdCB1c2UgPSBlbmFibGVEZXZ0b29scyA/IHdpbmRvdy5fX1NXUl9ERVZUT09MU19VU0VfXyA6IFtdO1xuY29uc3Qgc2V0dXBEZXZUb29scyA9ICgpPT57XG4gICAgaWYgKGVuYWJsZURldnRvb2xzKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1JFQUNUX18gPSBSZWFjdDtcbiAgICB9XG59O1xuXG5jb25zdCBub3JtYWxpemUgPSAoYXJncyk9PntcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhcmdzWzFdKSA/IFtcbiAgICAgICAgYXJnc1swXSxcbiAgICAgICAgYXJnc1sxXSxcbiAgICAgICAgYXJnc1syXSB8fCB7fVxuICAgIF0gOiBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIChhcmdzWzFdID09PSBudWxsID8gYXJnc1syXSA6IGFyZ3NbMV0pIHx8IHt9XG4gICAgXTtcbn07XG5cbmNvbnN0IHVzZVNXUkNvbmZpZyA9ICgpPT57XG4gICAgcmV0dXJuIG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnLCB1c2VDb250ZXh0KFNXUkNvbmZpZ0NvbnRleHQpKTtcbn07XG5cbmNvbnN0IHByZWxvYWQgPSAoa2V5XywgZmV0Y2hlcik9PntcbiAgICBjb25zdCBrZXkgPSBzZXJpYWxpemUoa2V5XylbMF07XG4gICAgY29uc3QgWywgLCAsIFBSRUxPQURdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAvLyBQcmV2ZW50IHByZWxvYWQgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGJlZm9yZSB1c2VkLlxuICAgIGlmIChQUkVMT0FEW2tleV0pIHJldHVybiBQUkVMT0FEW2tleV07XG4gICAgY29uc3QgcmVxID0gZmV0Y2hlcihrZXlfKTtcbiAgICBQUkVMT0FEW2tleV0gPSByZXE7XG4gICAgcmV0dXJuIHJlcTtcbn07XG5jb25zdCBtaWRkbGV3YXJlID0gKHVzZVNXUk5leHQpPT4oa2V5XywgZmV0Y2hlcl8sIGNvbmZpZyk9PntcbiAgICAgICAgLy8gZmV0Y2hlciBtaWdodCBiZSBhIHN5bmMgZnVuY3Rpb24sIHNvIHRoaXMgc2hvdWxkIG5vdCBiZSBhbiBhc3luYyBmdW5jdGlvblxuICAgICAgICBjb25zdCBmZXRjaGVyID0gZmV0Y2hlcl8gJiYgKCguLi5hcmdzKT0+e1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgICAgICAgICAgY29uc3QgWywgLCAsIFBSRUxPQURdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgUFJFTE9BRFtrZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmV0Y2hlcl8oLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdXNlU1dSTmV4dChrZXlfLCBmZXRjaGVyLCBjb25maWcpO1xuICAgIH07XG5cbmNvbnN0IEJVSUxUX0lOX01JRERMRVdBUkUgPSB1c2UuY29uY2F0KG1pZGRsZXdhcmUpO1xuXG4vLyBJdCdzIHRyaWNreSB0byBwYXNzIGdlbmVyaWMgdHlwZXMgYXMgcGFyYW1ldGVycywgc28gd2UganVzdCBkaXJlY3RseSBvdmVycmlkZVxuLy8gdGhlIHR5cGVzIGhlcmUuXG5jb25zdCB3aXRoQXJncyA9IChob29rKT0+e1xuICAgIHJldHVybiBmdW5jdGlvbiB1c2VTV1JBcmdzKC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBkZWZhdWx0IGFuZCBpbmhlcml0ZWQgY29uZmlndXJhdGlvbi5cbiAgICAgICAgY29uc3QgZmFsbGJhY2tDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICAgICAgLy8gTm9ybWFsaXplIGFyZ3VtZW50cy5cbiAgICAgICAgY29uc3QgW2tleSwgZm4sIF9jb25maWddID0gbm9ybWFsaXplKGFyZ3MpO1xuICAgICAgICAvLyBNZXJnZSBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgY29uc3QgY29uZmlnID0gbWVyZ2VDb25maWdzKGZhbGxiYWNrQ29uZmlnLCBfY29uZmlnKTtcbiAgICAgICAgLy8gQXBwbHkgbWlkZGxld2FyZVxuICAgICAgICBsZXQgbmV4dCA9IGhvb2s7XG4gICAgICAgIGNvbnN0IHsgdXNlICB9ID0gY29uZmlnO1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlID0gKHVzZSB8fCBbXSkuY29uY2F0KEJVSUxUX0lOX01JRERMRVdBUkUpO1xuICAgICAgICBmb3IobGV0IGkgPSBtaWRkbGV3YXJlLmxlbmd0aDsgaS0tOyl7XG4gICAgICAgICAgICBuZXh0ID0gbWlkZGxld2FyZVtpXShuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dChrZXksIGZuIHx8IGNvbmZpZy5mZXRjaGVyIHx8IG51bGwsIGNvbmZpZyk7XG4gICAgfTtcbn07XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2Ygc3RhdGUgd2l0aCBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICovIGNvbnN0IHVzZVN0YXRlV2l0aERlcHMgPSAoc3RhdGUpPT57XG4gICAgY29uc3QgcmVyZW5kZXIgPSB1c2VTdGF0ZSh7fSlbMV07XG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzdGF0ZVJlZiA9IHVzZVJlZihzdGF0ZSk7XG4gICAgLy8gSWYgYSBzdGF0ZSBwcm9wZXJ0eSAoZGF0YSwgZXJyb3IsIG9yIGlzVmFsaWRhdGluZykgaXMgYWNjZXNzZWQgYnkgdGhlIHJlbmRlclxuICAgIC8vIGZ1bmN0aW9uLCB3ZSBtYXJrIHRoZSBwcm9wZXJ0eSBhcyBhIGRlcGVuZGVuY3kgc28gaWYgaXQgaXMgdXBkYXRlZCBhZ2FpblxuICAgIC8vIGluIHRoZSBmdXR1cmUsIHdlIHRyaWdnZXIgYSByZXJlbmRlci5cbiAgICAvLyBUaGlzIGlzIGFsc28ga25vd24gYXMgZGVwZW5kZW5jeS10cmFja2luZy5cbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llc1JlZiA9IHVzZVJlZih7XG4gICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICB9KTtcbiAgICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVG8gY2hhbmdlIHN0YXRlUmVmLCBwYXNzIHRoZSB2YWx1ZXMgZXhwbGljaXRseSB0byBzZXRTdGF0ZTpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogc2V0U3RhdGUoe1xuICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICogICBkYXRhOiBuZXdEYXRhIC8vIHNldCBkYXRhIHRvIG5ld0RhdGFcbiAgICogICBlcnJvcjogdW5kZWZpbmVkIC8vIHNldCBlcnJvciB0byB1bmRlZmluZWRcbiAgICogfSlcbiAgICpcbiAgICogc2V0U3RhdGUoe1xuICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICogICBkYXRhOiB1bmRlZmluZWQgLy8gc2V0IGRhdGEgdG8gdW5kZWZpbmVkXG4gICAqICAgZXJyb3I6IGVyciAvLyBzZXQgZXJyb3IgdG8gZXJyXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKi8gY29uc3Qgc2V0U3RhdGUgPSB1c2VDYWxsYmFjaygocGF5bG9hZCk9PntcbiAgICAgICAgbGV0IHNob3VsZFJlcmVuZGVyID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHN0YXRlUmVmLmN1cnJlbnQ7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHBheWxvYWQpe1xuICAgICAgICAgICAgY29uc3QgayA9IF87XG4gICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgc3RhdGUgYW5kIG1hcmsgcmVyZW5kZXIgYXNcbiAgICAgICAgICAgIC8vIG5lZWRlZC5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGVba10gIT09IHBheWxvYWRba10pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGVba10gPSBwYXlsb2FkW2tdO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCBieSB0aGUgY29tcG9uZW50LCBhIHJlcmVuZGVyIHNob3VsZCBiZVxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudFtrXSkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRSZXJlbmRlciAmJiAhdW5tb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGlmIChJU19SRUFDVF9MRUdBQ1kpIHtcbiAgICAgICAgICAgICAgICByZXJlbmRlcih7fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbigoKT0+cmVyZW5kZXIoe30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIC8vIGNvbmZpZy5zdXNwZW5zZSBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gW1xuICAgICAgICBzdGF0ZVJlZixcbiAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudCxcbiAgICAgICAgc2V0U3RhdGVcbiAgICBdO1xufTtcblxuLy8gQWRkIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBsaXN0IG9mIGtleWVkIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgcmV0dXJuXG4vLyB0aGUgdW5zdWJzY3JpYmUgZnVuY3Rpb24uXG5jb25zdCBzdWJzY3JpYmVDYWxsYmFjayA9IChrZXksIGNhbGxiYWNrcywgY2FsbGJhY2spPT57XG4gICAgY29uc3Qga2V5ZWRSZXZhbGlkYXRvcnMgPSBjYWxsYmFja3Nba2V5XSB8fCAoY2FsbGJhY2tzW2tleV0gPSBbXSk7XG4gICAga2V5ZWRSZXZhbGlkYXRvcnMucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGNvbnN0IGluZGV4ID0ga2V5ZWRSZXZhbGlkYXRvcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBPKDEpOiBmYXN0ZXIgdGhhbiBzcGxpY2VcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzW2luZGV4XSA9IGtleWVkUmV2YWxpZGF0b3JzW2tleWVkUmV2YWxpZGF0b3JzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuLy8gQ3JlYXRlIGEgY3VzdG9tIGhvb2sgd2l0aCBhIG1pZGRsZXdhcmVcbmNvbnN0IHdpdGhNaWRkbGV3YXJlID0gKHVzZVNXUiwgbWlkZGxld2FyZSk9PntcbiAgICByZXR1cm4gKC4uLmFyZ3MpPT57XG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBjb25maWddID0gbm9ybWFsaXplKGFyZ3MpO1xuICAgICAgICBjb25zdCB1c2VzID0gKGNvbmZpZy51c2UgfHwgW10pLmNvbmNhdChtaWRkbGV3YXJlKTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUihrZXksIGZuLCB7XG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICB1c2U6IHVzZXNcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG5cbnNldHVwRGV2VG9vbHMoKTtcblxuZXhwb3J0IHsgSVNfUkVBQ1RfTEVHQUNZLCBJU19TRVJWRVIsIE9CSkVDVCwgU1dSQ29uZmlnLCBTV1JHbG9iYWxTdGF0ZSwgVU5ERUZJTkVELCBjYWNoZSwgY29tcGFyZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGRlZmF1bHRDb25maWcsIGRlZmF1bHRDb25maWdPcHRpb25zLCBnZXRUaW1lc3RhbXAsIGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSwgaW5pdENhY2hlLCBpbnRlcm5hbE11dGF0ZSwgaXNEb2N1bWVudERlZmluZWQsIGlzRnVuY3Rpb24sIGlzVW5kZWZpbmVkLCBpc1dpbmRvd0RlZmluZWQsIG1lcmdlQ29uZmlncywgbWVyZ2VPYmplY3RzLCBtdXRhdGUsIG5vb3AsIG5vcm1hbGl6ZSwgcHJlbG9hZCwgcHJlc2V0LCByQUYsIGNvbnN0YW50cyBhcyByZXZhbGlkYXRlRXZlbnRzLCBzZXJpYWxpemUsIHNsb3dDb25uZWN0aW9uLCBzdGFibGVIYXNoLCBzdWJzY3JpYmVDYWxsYmFjaywgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgdXNlU1dSQ29uZmlnLCB1c2VTdGF0ZVdpdGhEZXBzLCB3aXRoQXJncywgd2l0aE1pZGRsZXdhcmUgfTtcbiIsImltcG9ydCB7IHVzZVJlZiwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMnO1xuaW1wb3J0IHsgT0JKRUNULCBTV1JDb25maWcgYXMgU1dSQ29uZmlnJDEsIGRlZmF1bHRDb25maWcsIHdpdGhBcmdzLCBTV1JHbG9iYWxTdGF0ZSwgc2VyaWFsaXplLCBjcmVhdGVDYWNoZUhlbHBlciwgaXNVbmRlZmluZWQsIGdldFRpbWVzdGFtcCwgVU5ERUZJTkVELCBpc0Z1bmN0aW9uLCBpbnRlcm5hbE11dGF0ZSwgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgc3Vic2NyaWJlQ2FsbGJhY2ssIElTX1NFUlZFUiwgckFGLCBJU19SRUFDVF9MRUdBQ1ksIG1lcmdlT2JqZWN0cywgcmV2YWxpZGF0ZUV2ZW50cyB9IGZyb20gJ3N3ci9faW50ZXJuYWwnO1xuZXhwb3J0IHsgbXV0YXRlLCBwcmVsb2FkLCB1c2VTV1JDb25maWcgfSBmcm9tICdzd3IvX2ludGVybmFsJztcblxuY29uc3QgV0lUSF9ERURVUEUgPSB7XG4gICAgZGVkdXBlOiB0cnVlXG59O1xuY29uc3QgdXNlU1dSSGFuZGxlciA9IChfa2V5LCBmZXRjaGVyLCBjb25maWcpPT57XG4gICAgY29uc3QgeyBjYWNoZSAsIGNvbXBhcmUgLCBzdXNwZW5zZSAsIGZhbGxiYWNrRGF0YSAsIHJldmFsaWRhdGVPbk1vdW50ICwgcmVmcmVzaEludGVydmFsICwgcmVmcmVzaFdoZW5IaWRkZW4gLCByZWZyZXNoV2hlbk9mZmxpbmUgLCBrZWVwUHJldmlvdXNEYXRhICB9ID0gY29uZmlnO1xuICAgIGNvbnN0IFtFVkVOVF9SRVZBTElEQVRPUlMsIE1VVEFUSU9OLCBGRVRDSF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIC8vIGBrZXlgIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBTV1IgYGRhdGFgIHN0YXRlLCBga2V5SW5mb2AgaG9sZHMgZXh0cmFcbiAgICAvLyBzdGF0ZXMgc3VjaCBhcyBgZXJyb3JgIGFuZCBgaXNWYWxpZGF0aW5nYCBpbnNpZGUsXG4gICAgLy8gYWxsIG9mIHRoZW0gYXJlIGRlcml2ZWQgZnJvbSBgX2tleWAuXG4gICAgLy8gYGZuQXJnYCBpcyB0aGUgYXJndW1lbnQvYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBrZXksIHdoaWNoIHdpbGwgYmUgcGFzc2VkXG4gICAgLy8gdG8gdGhlIGZldGNoZXIuXG4gICAgY29uc3QgW2tleSwgZm5BcmddID0gc2VyaWFsaXplKF9rZXkpO1xuICAgIC8vIElmIGl0J3MgdGhlIGluaXRpYWwgcmVuZGVyIG9mIHRoaXMgaG9vay5cbiAgICBjb25zdCBpbml0aWFsTW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgLy8gSWYgdGhlIGhvb2sgaXMgdW5tb3VudGVkIGFscmVhZHkuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByZXZlbnQgc29tZSBlZmZlY3RzXG4gICAgLy8gdG8gYmUgY2FsbGVkIGFmdGVyIHVubW91bnRpbmcuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBSZWZzIHRvIGtlZXAgdGhlIGtleSBhbmQgY29uZmlnLlxuICAgIGNvbnN0IGtleVJlZiA9IHVzZVJlZihrZXkpO1xuICAgIGNvbnN0IGZldGNoZXJSZWYgPSB1c2VSZWYoZmV0Y2hlcik7XG4gICAgY29uc3QgY29uZmlnUmVmID0gdXNlUmVmKGNvbmZpZyk7XG4gICAgY29uc3QgZ2V0Q29uZmlnID0gKCk9PmNvbmZpZ1JlZi5jdXJyZW50O1xuICAgIGNvbnN0IGlzQWN0aXZlID0gKCk9PmdldENvbmZpZygpLmlzVmlzaWJsZSgpICYmIGdldENvbmZpZygpLmlzT25saW5lKCk7XG4gICAgY29uc3QgW2dldENhY2hlLCBzZXRDYWNoZSwgc3Vic2NyaWJlQ2FjaGVdID0gY3JlYXRlQ2FjaGVIZWxwZXIoY2FjaGUsIGtleSk7XG4gICAgY29uc3Qgc3RhdGVEZXBlbmRlbmNpZXMgPSB1c2VSZWYoe30pLmN1cnJlbnQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIGNvbnN0IGZhbGxiYWNrID0gaXNVbmRlZmluZWQoZmFsbGJhY2tEYXRhKSA/IGNvbmZpZy5mYWxsYmFja1trZXldIDogZmFsbGJhY2tEYXRhO1xuICAgIGNvbnN0IGlzRXF1YWwgPSAocHJldiwgY3VycmVudCk9PntcbiAgICAgICAgbGV0IGVxdWFsID0gdHJ1ZTtcbiAgICAgICAgZm9yKGNvbnN0IF8gaW4gc3RhdGVEZXBlbmRlbmNpZXMpe1xuICAgICAgICAgICAgY29uc3QgdCA9IF87XG4gICAgICAgICAgICBpZiAoIWNvbXBhcmUoY3VycmVudFt0XSwgcHJldlt0XSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodCA9PT0gJ2RhdGEnICYmIGlzVW5kZWZpbmVkKHByZXZbdF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCByZXR1cm5lZERhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVxdWFsO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U25hcHNob3QgPSB1c2VNZW1vKCgpPT57XG4gICAgICAgIGNvbnN0IHNob3VsZFN0YXJ0UmVxdWVzdCA9ICgoKT0+e1xuICAgICAgICAgICAgaWYgKCFrZXkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghZmV0Y2hlcikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChyZXZhbGlkYXRlT25Nb3VudCkpIHJldHVybiByZXZhbGlkYXRlT25Nb3VudDtcbiAgICAgICAgICAgIC8vIElmIGl0J3MgcGF1c2VkLCB3ZSBza2lwIHJldmFsaWRhdGlvbi5cbiAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc3VzcGVuc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSgpO1xuICAgICAgICBjb25zdCBnZXRTZWxlY3RlZENhY2hlID0gKCk9PntcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gZ2V0Q2FjaGUoKTtcbiAgICAgICAgICAgIC8vIFdlIG9ubHkgc2VsZWN0IHRoZSBuZWVkZWQgZmllbGRzIGZyb20gdGhlIHN0YXRlLlxuICAgICAgICAgICAgY29uc3Qgc25hcHNob3QgPSBtZXJnZU9iamVjdHMoc3RhdGUpO1xuICAgICAgICAgICAgZGVsZXRlIHNuYXBzaG90Ll9rO1xuICAgICAgICAgICAgaWYgKCFzaG91bGRTdGFydFJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgLi4uc25hcHNob3RcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIGxldCBtZW1vcml6ZWRTbmFwc2hvdCA9IGdldFNlbGVjdGVkQ2FjaGUoKTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IGdldFNlbGVjdGVkQ2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybiBpc0VxdWFsKHNuYXBzaG90LCBtZW1vcml6ZWRTbmFwc2hvdCkgPyBtZW1vcml6ZWRTbmFwc2hvdCA6IG1lbW9yaXplZFNuYXBzaG90ID0gc25hcHNob3Q7XG4gICAgICAgIH07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFtcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIGtleVxuICAgIF0pO1xuICAgIC8vIEdldCB0aGUgY3VycmVudCBzdGF0ZSB0aGF0IFNXUiBzaG91bGQgcmV0dXJuLlxuICAgIGNvbnN0IGNhY2hlZCA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlKHVzZUNhbGxiYWNrKChjYWxsYmFjayk9PnN1YnNjcmliZUNhY2hlKGtleSwgKHByZXYsIGN1cnJlbnQpPT57XG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwocHJldiwgY3VycmVudCkpIGNhbGxiYWNrKCk7XG4gICAgICAgIH0pLCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW1xuICAgICAgICBjYWNoZSxcbiAgICAgICAga2V5XG4gICAgXSksIGdldFNuYXBzaG90LCBnZXRTbmFwc2hvdCk7XG4gICAgY29uc3QgaXNJbml0aWFsTW91bnQgPSAhaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudDtcbiAgICBjb25zdCBjYWNoZWREYXRhID0gY2FjaGVkLmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IGlzVW5kZWZpbmVkKGNhY2hlZERhdGEpID8gZmFsbGJhY2sgOiBjYWNoZWREYXRhO1xuICAgIGNvbnN0IGVycm9yID0gY2FjaGVkLmVycm9yO1xuICAgIC8vIFVzZSBhIHJlZiB0byBzdG9yZSBwcmV2aW91c2x5IHJldHVybmVkIGRhdGEuIFVzZSB0aGUgaW5pdGlhbCBkYXRhIGFzIGl0cyBpbml0aWFsIHZhbHVlLlxuICAgIGNvbnN0IGxhZ2d5RGF0YVJlZiA9IHVzZVJlZihkYXRhKTtcbiAgICBjb25zdCByZXR1cm5lZERhdGEgPSBrZWVwUHJldmlvdXNEYXRhID8gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBsYWdneURhdGFSZWYuY3VycmVudCA6IGNhY2hlZERhdGEgOiBkYXRhO1xuICAgIC8vIC0gU3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUncyBzdGFsZSBkYXRhIGZvciB0aGUgaW5pdGlhbCByZW5kZXIuXG4gICAgLy8gLSBOb3Qgc3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUgaXMgbm8gZmFsbGJhY2sgZGF0YSBhbmQgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkLlxuICAgIC8vIC0gYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkIGJ1dCBgZGF0YWAgaXMgbm90IGRlZmluZWQuXG4gICAgY29uc3Qgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uID0gKCgpPT57XG4gICAgICAgIC8vIElmIGByZXZhbGlkYXRlT25Nb3VudGAgaXMgc2V0LCB3ZSB0YWtlIHRoZSB2YWx1ZSBkaXJlY3RseS5cbiAgICAgICAgaWYgKGlzSW5pdGlhbE1vdW50ICYmICFpc1VuZGVmaW5lZChyZXZhbGlkYXRlT25Nb3VudCkpIHJldHVybiByZXZhbGlkYXRlT25Nb3VudDtcbiAgICAgICAgLy8gSWYgaXQncyBwYXVzZWQsIHdlIHNraXAgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBVbmRlciBzdXNwZW5zZSBtb2RlLCBpdCB3aWxsIGFsd2F5cyBmZXRjaCBvbiByZW5kZXIgaWYgdGhlcmUgaXMgbm9cbiAgICAgICAgLy8gc3RhbGUgZGF0YSBzbyBubyBuZWVkIHRvIHJldmFsaWRhdGUgaW1tZWRpYXRlbHkgbW91bnQgaXQgYWdhaW4uXG4gICAgICAgIC8vIElmIGRhdGEgZXhpc3RzLCBvbmx5IHJldmFsaWRhdGUgaWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyB0cnVlLlxuICAgICAgICBpZiAoc3VzcGVuc2UpIHJldHVybiBpc1VuZGVmaW5lZChkYXRhKSA/IGZhbHNlIDogY29uZmlnLnJldmFsaWRhdGVJZlN0YWxlO1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzdGFsZSBkYXRhLCB3ZSBuZWVkIHRvIHJldmFsaWRhdGUgd2hlbiBtb3VudDtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBzZXQgdG8gdHJ1ZSwgd2Ugd2lsbCBhbHdheXMgcmV2YWxpZGF0ZS5cbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpIHx8IGNvbmZpZy5yZXZhbGlkYXRlSWZTdGFsZTtcbiAgICB9KSgpO1xuICAgIC8vIFJlc29sdmUgdGhlIGRlZmF1bHQgdmFsaWRhdGluZyBzdGF0ZTpcbiAgICAvLyBJZiBpdCdzIGFibGUgdG8gdmFsaWRhdGUsIGFuZCBpdCBzaG91bGQgcmV2YWxpZGF0ZSB3aGVuIG1vdW50LCB0aGlzIHdpbGwgYmUgdHJ1ZS5cbiAgICBjb25zdCBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlID0gISEoa2V5ICYmIGZldGNoZXIgJiYgaXNJbml0aWFsTW91bnQgJiYgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKTtcbiAgICBjb25zdCBpc1ZhbGlkYXRpbmcgPSBpc1VuZGVmaW5lZChjYWNoZWQuaXNWYWxpZGF0aW5nKSA/IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgOiBjYWNoZWQuaXNWYWxpZGF0aW5nO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc0xvYWRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc0xvYWRpbmc7XG4gICAgLy8gVGhlIHJldmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBhIGNhcmVmdWxseSBjcmFmdGVkIHdyYXBwZXIgb2YgdGhlIG9yaWdpbmFsXG4gICAgLy8gYGZldGNoZXJgLCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBtYW55IGVkZ2UgY2FzZXMuXG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChyZXZhbGlkYXRlT3B0cyk9PntcbiAgICAgICAgY29uc3QgY3VycmVudEZldGNoZXIgPSBmZXRjaGVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICgha2V5IHx8ICFjdXJyZW50RmV0Y2hlciB8fCB1bm1vdW50ZWRSZWYuY3VycmVudCB8fCBnZXRDb25maWcoKS5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0RhdGE7XG4gICAgICAgIGxldCBzdGFydEF0O1xuICAgICAgICBsZXQgbG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IG9wdHMgPSByZXZhbGlkYXRlT3B0cyB8fCB7fTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gb25nb2luZyBjb25jdXJyZW50IHJlcXVlc3QsIG9yIGBkZWR1cGVgIGlzIG5vdCBzZXQsIGFcbiAgICAgICAgLy8gbmV3IHJlcXVlc3Qgc2hvdWxkIGJlIGluaXRpYXRlZC5cbiAgICAgICAgY29uc3Qgc2hvdWxkU3RhcnROZXdSZXF1ZXN0ID0gIUZFVENIW2tleV0gfHwgIW9wdHMuZGVkdXBlO1xuICAgICAgICAvKlxuICAgICAgICAgRm9yIFJlYWN0IDE3XG4gICAgICAgICBEbyB1bm1vdW50IGNoZWNrIGZvciBjYWxsczpcbiAgICAgICAgIElmIGtleSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIHJldmFsaWRhdGlvbiwgb3IgdGhlIGNvbXBvbmVudCBoYXMgYmVlblxuICAgICAgICAgdW5tb3VudGVkLCBvbGQgZGlzcGF0Y2ggYW5kIG9sZCBldmVudCBjYWxsYmFja3Mgc2hvdWxkIG5vdCB0YWtlIGFueVxuICAgICAgICAgZWZmZWN0XG5cbiAgICAgICAgRm9yIFJlYWN0IDE4XG4gICAgICAgIG9ubHkgY2hlY2sgaWYga2V5IGhhcyBjaGFuZ2VkXG4gICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdHdnL3JlYWN0LTE4L2Rpc2N1c3Npb25zLzgyXG4gICAgICAqLyBjb25zdCBjYWxsYmFja1NhZmVndWFyZCA9ICgpPT57XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF1bm1vdW50ZWRSZWYuY3VycmVudCAmJiBrZXkgPT09IGtleVJlZi5jdXJyZW50ICYmIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5ID09PSBrZXlSZWYuY3VycmVudDtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVGhlIGZpbmFsIHN0YXRlIG9iamVjdCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzLlxuICAgICAgICBjb25zdCBmaW5hbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlID0gKCk9PntcbiAgICAgICAgICAgIHNldENhY2hlKGZpbmFsU3RhdGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjbGVhbnVwU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBzdGlsbCB0aGUgc2FtZSByZXF1ZXN0IGJlZm9yZSBkZWxldGluZyBpdC5cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJbmZvID0gRkVUQ0hba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SW5mbyAmJiByZXF1ZXN0SW5mb1sxXSA9PT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBTdGFydCBmZXRjaGluZy4gQ2hhbmdlIHRoZSBgaXNWYWxpZGF0aW5nYCBzdGF0ZSwgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIC8vIEl0IGlzIGluIHRoZSBgaXNMb2FkaW5nYCBzdGF0ZSwgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgbm8gY2FjaGVkIGRhdGEuXG4gICAgICAgIC8vIFRoaXMgYnlwYXNzZXMgZmFsbGJhY2sgZGF0YSBhbmQgbGFnZ3kgZGF0YS5cbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGdldENhY2hlKCkuZGF0YSkpIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgc2V0Q2FjaGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAvLyBJZiBubyBjYWNoZSBpcyBiZWluZyByZW5kZXJlZCBjdXJyZW50bHkgKGl0IHNob3dzIGEgYmxhbmsgcGFnZSksXG4gICAgICAgICAgICAgICAgLy8gd2UgdHJpZ2dlciB0aGUgbG9hZGluZyBzbG93IGV2ZW50LlxuICAgICAgICAgICAgICAgIGlmIChjb25maWcubG9hZGluZ1RpbWVvdXQgJiYgaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZyAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25Mb2FkaW5nU2xvdyhrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSByZXF1ZXN0IGFuZCBzYXZlIHRoZSB0aW1lc3RhbXAuXG4gICAgICAgICAgICAgICAgLy8gS2V5IG11c3QgYmUgdHJ1dGh5IGlmIGVudGVyaW5nIGhlcmUuXG4gICAgICAgICAgICAgICAgRkVUQ0hba2V5XSA9IFtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZldGNoZXIoZm5BcmcpLFxuICAgICAgICAgICAgICAgICAgICBnZXRUaW1lc3RhbXAoKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbbmV3RGF0YSwgc3RhcnRBdF0gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgbmV3RGF0YSA9IGF3YWl0IG5ld0RhdGE7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXNuJ3QgaW50ZXJydXB0ZWQsIGNsZWFuIGl0IHVwIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIGRlZHVwbGljYXRpb24gaW50ZXJ2YWwuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChjbGVhbnVwU3RhdGUsIGNvbmZpZy5kZWR1cGluZ0ludGVydmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG9uZ29pbmcgcmVxdWVzdChzKSwgc3RhcnRlZCBhZnRlciB0aGUgY3VycmVudCBvbmUsXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgY3VycmVudCBvbmUgdG8gYXZvaWQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zOlxuICAgICAgICAgICAgLy8gICByZXExLS0tLS0tLS0tLS0tLS0tLS0tPnJlczEgICAgICAgIChjdXJyZW50IG9uZSlcbiAgICAgICAgICAgIC8vICAgICAgICByZXEyLS0tLS0tLS0tLS0tLS0tLT5yZXMyXG4gICAgICAgICAgICAvLyB0aGUgcmVxdWVzdCB0aGF0IGZpcmVkIGxhdGVyIHdpbGwgYWx3YXlzIGJlIGtlcHQuXG4gICAgICAgICAgICAvLyBUaGUgdGltZXN0YW1wIG1heWJlIGJlIGB1bmRlZmluZWRgIG9yIGEgbnVtYmVyXG4gICAgICAgICAgICBpZiAoIUZFVENIW2tleV0gfHwgRkVUQ0hba2V5XVsxXSAhPT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2xlYXIgZXJyb3IuXG4gICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gVU5ERUZJTkVEO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgbXV0YXRpb25zKHMpLCB0aGF0IG92ZXJsYXBwZWQgd2l0aCB0aGUgY3VycmVudCByZXZhbGlkYXRpb246XG4gICAgICAgICAgICAvLyBjYXNlIDE6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMjpcbiAgICAgICAgICAgIC8vICAgICAgICAgcmVxLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICBtdXRhdGUtLS0tLS0+ZW5kXG4gICAgICAgICAgICAvLyBjYXNlIDM6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLS0uLi4tLS0tLS0tLS0tPlxuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBpZ25vcmUgdGhlIHJldmFsaWRhdGlvbiByZXN1bHQgKHJlcykgYmVjYXVzZSBpdCdzIG5vIGxvbmdlciBmcmVzaC5cbiAgICAgICAgICAgIC8vIG1lYW53aGlsZSwgYSBuZXcgcmV2YWxpZGF0aW9uIHNob3VsZCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbXV0YXRpb24gZW5kcy5cbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uSW5mbyA9IE1VVEFUSU9OW2tleV07XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKG11dGF0aW9uSW5mbykgJiYgLy8gY2FzZSAxXG4gICAgICAgICAgICAoc3RhcnRBdCA8PSBtdXRhdGlvbkluZm9bMF0gfHwgLy8gY2FzZSAyXG4gICAgICAgICAgICBzdGFydEF0IDw9IG11dGF0aW9uSW5mb1sxXSB8fCAvLyBjYXNlIDNcbiAgICAgICAgICAgIG11dGF0aW9uSW5mb1sxXSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlZXAgY29tcGFyZSB3aXRoIHRoZSBsYXRlc3Qgc3RhdGUgdG8gYXZvaWQgZXh0cmEgcmUtcmVuZGVycy5cbiAgICAgICAgICAgIC8vIEZvciBsb2NhbCBzdGF0ZSwgY29tcGFyZSBhbmQgYXNzaWduLlxuICAgICAgICAgICAgY29uc3QgY2FjaGVEYXRhID0gZ2V0Q2FjaGUoKS5kYXRhO1xuICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbXBhcmUgZm4gY291bGQgYmUgY3VzdG9tIGZuXG4gICAgICAgICAgICAvLyBjYWNoZURhdGEgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gbmV3RGF0YSBldmVuIHdoZW4gY29tcGFyZSBmbiByZXR1cm5zIFRydWVcbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZGF0YSA9IGNvbXBhcmUoY2FjaGVEYXRhLCBuZXdEYXRhKSA/IGNhY2hlRGF0YSA6IG5ld0RhdGE7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIHRoZSBzdWNjZXNzZnVsIGNhbGxiYWNrIGlmIGl0J3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25TdWNjZXNzKG5ld0RhdGEsIGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY2xlYW51cFN0YXRlKCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICBjb25zdCB7IHNob3VsZFJldHJ5T25FcnJvciAgfSA9IGN1cnJlbnRDb25maWc7XG4gICAgICAgICAgICAvLyBOb3QgcGF1c2VkLCB3ZSBjb250aW51ZSBoYW5kbGluZyB0aGUgZXJyb3IuIE90aGVyd2lzZSwgZGlzY2FyZCBpdC5cbiAgICAgICAgICAgIGlmICghY3VycmVudENvbmZpZy5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGEgbmV3IGVycm9yLCBkb24ndCB1c2UgZGVlcCBjb21wYXJpc29uIGZvciBlcnJvcnMuXG4gICAgICAgICAgICAgICAgZmluYWxTdGF0ZS5lcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAvLyBFcnJvciBldmVudCBhbmQgcmV0cnkgbG9naWMuIE9ubHkgZm9yIHRoZSBhY3R1YWwgcmVxdWVzdCwgbm90XG4gICAgICAgICAgICAgICAgLy8gZGVkdXBlZCBvbmVzLlxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QgJiYgY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3IoZXJyLCBrZXksIGN1cnJlbnRDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmV0cnlPbkVycm9yID09PSB0cnVlIHx8IGlzRnVuY3Rpb24oc2hvdWxkUmV0cnlPbkVycm9yKSAmJiBzaG91bGRSZXRyeU9uRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGluYWN0aXZlLCBzdG9wLiBJdCB3aWxsIGF1dG8tcmV2YWxpZGF0ZSB3aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmb2N1c2luZyBvciByZWNvbm5lY3RpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXRyeWluZywgZGVkdXBsaWNhdGlvbiBpcyBhbHdheXMgZW5hYmxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3JSZXRyeShlcnIsIGtleSwgY3VycmVudENvbmZpZywgcmV2YWxpZGF0ZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50OiAob3B0cy5yZXRyeUNvdW50IHx8IDApICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkdXBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFyayBsb2FkaW5nIGFzIHN0b3BwZWQuXG4gICAgICAgIGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IGhvb2sncyBzdGF0ZS5cbiAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIC8vIGBzZXRTdGF0ZWAgaXMgaW1tdXRhYmxlLCBhbmQgYGV2ZW50c0NhbGxiYWNrYCwgYGZuQXJnYCwgYW5kXG4gICAgLy8gYGtleVZhbGlkYXRpbmdgIGFyZSBkZXBlbmRpbmcgb24gYGtleWAsIHNvIHdlIGNhbiBleGNsdWRlIHRoZW0gZnJvbVxuICAgIC8vIHRoZSBkZXBzIGFycmF5LlxuICAgIC8vXG4gICAgLy8gRklYTUU6XG4gICAgLy8gYGZuYCBhbmQgYGNvbmZpZ2AgbWlnaHQgYmUgY2hhbmdlZCBkdXJpbmcgdGhlIGxpZmVjeWNsZSxcbiAgICAvLyBidXQgdGhleSBtaWdodCBiZSBjaGFuZ2VkIGV2ZXJ5IHJlbmRlciBsaWtlIHRoaXMuXG4gICAgLy8gYHVzZVNXUigna2V5JywgKCkgPT4gZmV0Y2goJy9hcGkvJyksIHsgc3VzcGVuc2U6IHRydWUgfSlgXG4gICAgLy8gU28gd2Ugb21pdCB0aGUgdmFsdWVzIGZyb20gdGhlIGRlcHMgYXJyYXlcbiAgICAvLyBldmVuIHRob3VnaCBpdCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW1xuICAgICAgICBrZXksXG4gICAgICAgIGNhY2hlXG4gICAgXSk7XG4gICAgLy8gU2ltaWxhciB0byB0aGUgZ2xvYmFsIG11dGF0ZSBidXQgYm91bmQgdG8gdGhlIGN1cnJlbnQgY2FjaGUgYW5kIGtleS5cbiAgICAvLyBgY2FjaGVgIGlzbid0IGFsbG93ZWQgdG8gY2hhbmdlIGR1cmluZyB0aGUgbGlmZWN5Y2xlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBjb25zdCBib3VuZE11dGF0ZSA9IHVzZUNhbGxiYWNrKC8vIFVzZSBjYWxsYmFjayB0byBtYWtlIHN1cmUgYGtleVJlZi5jdXJyZW50YCByZXR1cm5zIGxhdGVzdCByZXN1bHQgZXZlcnkgdGltZVxuICAgICguLi5hcmdzKT0+e1xuICAgICAgICByZXR1cm4gaW50ZXJuYWxNdXRhdGUoY2FjaGUsIGtleVJlZi5jdXJyZW50LCAuLi5hcmdzKTtcbiAgICB9LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIC8vIFRoZSBsb2dpYyBmb3IgdXBkYXRpbmcgcmVmcy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGZldGNoZXJSZWYuY3VycmVudCA9IGZldGNoZXI7XG4gICAgICAgIGNvbmZpZ1JlZi5jdXJyZW50ID0gY29uZmlnO1xuICAgICAgICAvLyBIYW5kbGUgbGFnZ3kgZGF0YSB1cGRhdGVzLiBJZiB0aGVyZSdzIGNhY2hlZCBkYXRhIG9mIHRoZSBjdXJyZW50IGtleSxcbiAgICAgICAgLy8gaXQnbGwgYmUgdGhlIGNvcnJlY3QgcmVmZXJlbmNlLlxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGNhY2hlZERhdGEpKSB7XG4gICAgICAgICAgICBsYWdneURhdGFSZWYuY3VycmVudCA9IGNhY2hlZERhdGE7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBZnRlciBtb3VudGVkIG9yIGtleSBjaGFuZ2VkLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc29mdFJldmFsaWRhdGUgPSByZXZhbGlkYXRlLmJpbmQoVU5ERUZJTkVELCBXSVRIX0RFRFVQRSk7XG4gICAgICAgIC8vIEV4cG9zZSByZXZhbGlkYXRvcnMgdG8gZ2xvYmFsIGV2ZW50IGxpc3RlbmVycy4gU28gd2UgY2FuIHRyaWdnZXJcbiAgICAgICAgLy8gcmV2YWxpZGF0aW9uIGZyb20gdGhlIG91dHNpZGUuXG4gICAgICAgIGxldCBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ID0gMDtcbiAgICAgICAgY29uc3Qgb25SZXZhbGlkYXRlID0gKHR5cGUpPT57XG4gICAgICAgICAgICBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLkZPQ1VTX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uRm9jdXMgJiYgbm93ID4gbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSBub3cgKyBnZXRDb25maWcoKS5mb2N1c1Rocm90dGxlSW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuUkVDT05ORUNUX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPblJlY29ubmVjdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuTVVUQVRFX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdW5zdWJFdmVudHMgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIEVWRU5UX1JFVkFMSURBVE9SUywgb25SZXZhbGlkYXRlKTtcbiAgICAgICAgLy8gTWFyayB0aGUgY29tcG9uZW50IGFzIG1vdW50ZWQgYW5kIHVwZGF0ZSBjb3JyZXNwb25kaW5nIHJlZnMuXG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIGtleVJlZi5jdXJyZW50ID0ga2V5O1xuICAgICAgICBpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gS2VlcCB0aGUgb3JpZ2luYWwga2V5IGluIHRoZSBjYWNoZS5cbiAgICAgICAgc2V0Q2FjaGUoe1xuICAgICAgICAgICAgX2s6IGZuQXJnXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUcmlnZ2VyIGEgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEZWxheSB0aGUgcmV2YWxpZGF0ZSBpZiB3ZSBoYXZlIGRhdGEgdG8gcmV0dXJuIHNvIHdlIHdvbid0IGJsb2NrXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nLlxuICAgICAgICAgICAgICAgIHJBRihzb2Z0UmV2YWxpZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICAvLyBNYXJrIGl0IGFzIHVubW91bnRlZC5cbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHVuc3ViRXZlbnRzKCk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBQb2xsaW5nXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBsZXQgdGltZXI7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIHBhc3NlZCBpbnRlcnZhbFxuICAgICAgICAgICAgLy8gLi4ub3IgaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSB1cGRhdGVkIGRhdGEgdG8gZ2V0IHRoZSBpbnRlcnZhbFxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBpc0Z1bmN0aW9uKHJlZnJlc2hJbnRlcnZhbCkgPyByZWZyZXNoSW50ZXJ2YWwoZGF0YSkgOiByZWZyZXNoSW50ZXJ2YWw7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHN0YXJ0IHRoZSBuZXh0IGludGVydmFsIGlmIGByZWZyZXNoSW50ZXJ2YWxgIGlzIG5vdCAwLCBhbmQ6XG4gICAgICAgICAgICAvLyAtIGBmb3JjZWAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHBvbGxpbmdcbiAgICAgICAgICAgIC8vIC0gb3IgYHRpbWVyYCBpcyBub3QgMCwgd2hpY2ggbWVhbnMgdGhlIGVmZmVjdCB3YXNuJ3QgY2FuY2VsZWRcbiAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiB0aW1lciAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY3V0ZSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIE9LIHRvIGV4ZWN1dGU6XG4gICAgICAgICAgICAvLyBPbmx5IHJldmFsaWRhdGUgd2hlbiB0aGUgcGFnZSBpcyB2aXNpYmxlLCBvbmxpbmUsIGFuZCBub3QgZXJyb3JlZC5cbiAgICAgICAgICAgIGlmICghZ2V0Q2FjaGUoKS5lcnJvciAmJiAocmVmcmVzaFdoZW5IaWRkZW4gfHwgZ2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkpICYmIChyZWZyZXNoV2hlbk9mZmxpbmUgfHwgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXZhbGlkYXRlKFdJVEhfREVEVVBFKS50aGVuKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGUgbmV4dCBpbnRlcnZhbCB0byBjaGVjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmICh0aW1lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgdGltZXIgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbCxcbiAgICAgICAgcmVmcmVzaFdoZW5IaWRkZW4sXG4gICAgICAgIHJlZnJlc2hXaGVuT2ZmbGluZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gRGlzcGxheSBkZWJ1ZyBpbmZvIGluIFJlYWN0IERldlRvb2xzLlxuICAgIHVzZURlYnVnVmFsdWUocmV0dXJuZWREYXRhKTtcbiAgICAvLyBJbiBTdXNwZW5zZSBtb2RlLCB3ZSBjYW4ndCByZXR1cm4gdGhlIGVtcHR5IGBkYXRhYCBzdGF0ZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBgZXJyb3JgLCB0aGUgYGVycm9yYCBuZWVkcyB0byBiZSB0aHJvd24gdG8gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGBlcnJvcmAsIHRoZSBgcmV2YWxpZGF0aW9uYCBwcm9taXNlIG5lZWRzIHRvIGJlIHRocm93biB0b1xuICAgIC8vIHRoZSBzdXNwZW5zZSBib3VuZGFyeS5cbiAgICBpZiAoc3VzcGVuc2UgJiYgaXNVbmRlZmluZWQoZGF0YSkgJiYga2V5KSB7XG4gICAgICAgIC8vIFNXUiBzaG91bGQgdGhyb3cgd2hlbiB0cnlpbmcgdG8gdXNlIFN1c3BlbnNlIG9uIHRoZSBzZXJ2ZXIgd2l0aCBSZWFjdCAxOCxcbiAgICAgICAgLy8gd2l0aG91dCBwcm92aWRpbmcgYW55IGluaXRpYWwgZGF0YS4gU2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTgzMlxuICAgICAgICBpZiAoIUlTX1JFQUNUX0xFR0FDWSAmJiBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFsbGJhY2sgZGF0YSBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHN1c3BlbnNlIGluIFNTUi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbHdheXMgdXBkYXRlIGZldGNoZXIgYW5kIGNvbmZpZyByZWZzIGV2ZW4gd2l0aCB0aGUgU3VzcGVuc2UgbW9kZS5cbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHRocm93IGlzVW5kZWZpbmVkKGVycm9yKSA/IHJldmFsaWRhdGUoV0lUSF9ERURVUEUpIDogZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG11dGF0ZTogYm91bmRNdXRhdGUsXG4gICAgICAgIGdldCBkYXRhICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkRGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVycm9yICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzVmFsaWRhdGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc1ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRhdGluZztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzTG9hZGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGluZztcbiAgICAgICAgfVxuICAgIH07XG59O1xuY29uc3QgU1dSQ29uZmlnID0gT0JKRUNULmRlZmluZVByb3BlcnR5KFNXUkNvbmZpZyQxLCAnZGVmYXVsdFZhbHVlJywge1xuICAgIHZhbHVlOiBkZWZhdWx0Q29uZmlnXG59KTtcbmNvbnN0IHVuc3RhYmxlX3NlcmlhbGl6ZSA9IChrZXkpPT5zZXJpYWxpemUoa2V5KVswXTtcbi8qKlxuICogQSBob29rIHRvIGZldGNoIGRhdGEuXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9zd3IudmVyY2VsLmFwcFxuICogQGV4YW1wbGVcbiAqIGBgYGpzeFxuICogaW1wb3J0IHVzZVNXUiBmcm9tICdzd3InXG4gKiBmdW5jdGlvbiBQcm9maWxlKCkge1xuICogICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSB1c2VTV1IoJy9hcGkvdXNlcicsIGZldGNoZXIpXG4gKiAgIGlmIChlcnJvcikgcmV0dXJuIDxkaXY+ZmFpbGVkIHRvIGxvYWQ8L2Rpdj5cbiAqICAgaWYgKCFkYXRhKSByZXR1cm4gPGRpdj5sb2FkaW5nLi4uPC9kaXY+XG4gKiAgIHJldHVybiA8ZGl2PmhlbGxvIHtkYXRhLm5hbWV9ITwvZGl2PlxuICogfVxuICogYGBgXG4gKi8gdmFyIHVzZVNXUiA9IHdpdGhBcmdzKHVzZVNXUkhhbmRsZXIpO1xuXG4vLyB1c2VTV1JcblxuZXhwb3J0IHsgU1dSQ29uZmlnLCB1c2VTV1IgYXMgZGVmYXVsdCwgdW5zdGFibGVfc2VyaWFsaXplIH07XG4iLCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTV1JDb25maWcgfSBmcm9tIFwic3dyXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTV1JIb29rc0NvbmZpZygpIHtcbiAgICB2YXIgc3dyQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgdmFyIHZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBtdXRhdGU6IHN3ckNvbmZpZy5tdXRhdGUsIGNhY2hlOiBzd3JDb25maWcuY2FjaGUgfSk7IH0sIFtzd3JDb25maWcubXV0YXRlLCBzd3JDb25maWcuY2FjaGVdKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VTV1JIb29rc0NvbmZpZy5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG9nZ2xlKGluaXRpYWxWYWx1ZSkge1xuICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgeyBpbml0aWFsVmFsdWUgPSBmYWxzZTsgfVxuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZShpbml0aWFsVmFsdWUpLCAyKSwgdmFsdWUgPSBfYVswXSwgc2V0VmFsdWUgPSBfYVsxXTtcbiAgICB2YXIgdG9nZ2xlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShmdW5jdGlvbiAocHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlVG9nZ2xlLmpzLm1hcCIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsInZhciBzYWZlSXNOYU4gPSBOdW1iZXIuaXNOYU4gfHxcbiAgICBmdW5jdGlvbiBwb255ZmlsbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gdmFsdWU7XG4gICAgfTtcbmZ1bmN0aW9uIGlzRXF1YWwoZmlyc3QsIHNlY29uZCkge1xuICAgIGlmIChmaXJzdCA9PT0gc2Vjb25kKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoc2FmZUlzTmFOKGZpcnN0KSAmJiBzYWZlSXNOYU4oc2Vjb25kKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gYXJlSW5wdXRzRXF1YWwobmV3SW5wdXRzLCBsYXN0SW5wdXRzKSB7XG4gICAgaWYgKG5ld0lucHV0cy5sZW5ndGggIT09IGxhc3RJbnB1dHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdJbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpc0VxdWFsKG5ld0lucHV0c1tpXSwgbGFzdElucHV0c1tpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWVtb2l6ZU9uZShyZXN1bHRGbiwgaXNFcXVhbCkge1xuICAgIGlmIChpc0VxdWFsID09PSB2b2lkIDApIHsgaXNFcXVhbCA9IGFyZUlucHV0c0VxdWFsOyB9XG4gICAgdmFyIGxhc3RUaGlzO1xuICAgIHZhciBsYXN0QXJncyA9IFtdO1xuICAgIHZhciBsYXN0UmVzdWx0O1xuICAgIHZhciBjYWxsZWRPbmNlID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gbWVtb2l6ZWQoKSB7XG4gICAgICAgIHZhciBuZXdBcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBuZXdBcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxlZE9uY2UgJiYgbGFzdFRoaXMgPT09IHRoaXMgJiYgaXNFcXVhbChuZXdBcmdzLCBsYXN0QXJncykpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxhc3RSZXN1bHQgPSByZXN1bHRGbi5hcHBseSh0aGlzLCBuZXdBcmdzKTtcbiAgICAgICAgY2FsbGVkT25jZSA9IHRydWU7XG4gICAgICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICAgICAgbGFzdEFyZ3MgPSBuZXdBcmdzO1xuICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplT25lO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkJztcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlJztcbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSc7XG5cbi8vIEFuaW1hdGlvbiBmcmFtZSBiYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBzZXRUaW1lb3V0LlxuLy8gSW5zcGlyZWQgYnkgSm9lIExhbWJlcnQsIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2pvZWxhbWJlcnQvMTAwMjExNiNmaWxlLXJlcXVlc3R0aW1lb3V0LWpzXG52YXIgaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG52YXIgbm93ID0gaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbn0gOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBEYXRlLm5vdygpO1xufTtcbmZ1bmN0aW9uIGNhbmNlbFRpbWVvdXQodGltZW91dElEKSB7XG4gIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVvdXRJRC5pZCk7XG59XG5mdW5jdGlvbiByZXF1ZXN0VGltZW91dChjYWxsYmFjaywgZGVsYXkpIHtcbiAgdmFyIHN0YXJ0ID0gbm93KCk7XG5cbiAgZnVuY3Rpb24gdGljaygpIHtcbiAgICBpZiAobm93KCkgLSBzdGFydCA+PSBkZWxheSkge1xuICAgICAgY2FsbGJhY2suY2FsbChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dElELmlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgIH1cbiAgfVxuXG4gIHZhciB0aW1lb3V0SUQgPSB7XG4gICAgaWQ6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICB9O1xuICByZXR1cm4gdGltZW91dElEO1xufVxuXG52YXIgc2l6ZSA9IC0xOyAvLyBUaGlzIHV0aWxpdHkgY29waWVkIGZyb20gXCJkb20taGVscGVyc1wiIHBhY2thZ2UuXG5cbmZ1bmN0aW9uIGdldFNjcm9sbGJhclNpemUocmVjYWxjdWxhdGUpIHtcbiAgaWYgKHJlY2FsY3VsYXRlID09PSB2b2lkIDApIHtcbiAgICByZWNhbGN1bGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHNpemUgPT09IC0xIHx8IHJlY2FsY3VsYXRlKSB7XG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHZhciBzdHlsZSA9IGRpdi5zdHlsZTtcbiAgICBzdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBzdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG4gICAgc2l6ZSA9IGRpdi5vZmZzZXRXaWR0aCAtIGRpdi5jbGllbnRXaWR0aDtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG4gIH1cblxuICByZXR1cm4gc2l6ZTtcbn1cbnZhciBjYWNoZWRSVExSZXN1bHQgPSBudWxsOyAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4vLyBDaHJvbWUgZG9lcyBub3Qgc2VlbSB0byBhZGhlcmU7IGl0cyBzY3JvbGxMZWZ0IHZhbHVlcyBhcmUgcG9zaXRpdmUgKG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbi8vIFNhZmFyaSdzIGVsYXN0aWMgYm91bmNlIG1ha2VzIGRldGVjdGluZyB0aGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCB3cnQgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcy5cbi8vIFRoZSBzYWZlc3Qgd2F5IHRvIGNoZWNrIHRoaXMgaXMgdG8gaW50ZW50aW9uYWxseSBzZXQgYSBuZWdhdGl2ZSBvZmZzZXQsXG4vLyBhbmQgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgc3Vic2VxdWVudCBcInNjcm9sbFwiIGV2ZW50IG1hdGNoZXMgdGhlIG5lZ2F0aXZlIG9mZnNldC5cbi8vIElmIGl0IGRvZXMgbm90IG1hdGNoLCB0aGVuIHdlIGNhbiBhc3N1bWUgYSBub24tc3RhbmRhcmQgUlRMIHNjcm9sbCBpbXBsZW1lbnRhdGlvbi5cblxuZnVuY3Rpb24gZ2V0UlRMT2Zmc2V0VHlwZShyZWNhbGN1bGF0ZSkge1xuICBpZiAocmVjYWxjdWxhdGUgPT09IHZvaWQgMCkge1xuICAgIHJlY2FsY3VsYXRlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoY2FjaGVkUlRMUmVzdWx0ID09PSBudWxsIHx8IHJlY2FsY3VsYXRlKSB7XG4gICAgdmFyIG91dGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdmFyIG91dGVyU3R5bGUgPSBvdXRlckRpdi5zdHlsZTtcbiAgICBvdXRlclN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBvdXRlclN0eWxlLmRpcmVjdGlvbiA9ICdydGwnO1xuICAgIHZhciBpbm5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHZhciBpbm5lclN0eWxlID0gaW5uZXJEaXYuc3R5bGU7XG4gICAgaW5uZXJTdHlsZS53aWR0aCA9ICcxMDBweCc7XG4gICAgaW5uZXJTdHlsZS5oZWlnaHQgPSAnMTAwcHgnO1xuICAgIG91dGVyRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyRGl2KTtcblxuICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID4gMCkge1xuICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRlckRpdi5zY3JvbGxMZWZ0ID0gMTtcblxuICAgICAgaWYgKG91dGVyRGl2LnNjcm9sbExlZnQgPT09IDApIHtcbiAgICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ25lZ2F0aXZlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICdwb3NpdGl2ZS1hc2NlbmRpbmcnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQob3V0ZXJEaXYpO1xuICAgIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gY2FjaGVkUlRMUmVzdWx0O1xufVxuXG52YXIgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMID0gMTUwO1xuXG52YXIgZGVmYXVsdEl0ZW1LZXkgPSBmdW5jdGlvbiBkZWZhdWx0SXRlbUtleShfcmVmKSB7XG4gIHZhciBjb2x1bW5JbmRleCA9IF9yZWYuY29sdW1uSW5kZXgsXG4gICAgICBkYXRhID0gX3JlZi5kYXRhLFxuICAgICAgcm93SW5kZXggPSBfcmVmLnJvd0luZGV4O1xuICByZXR1cm4gcm93SW5kZXggKyBcIjpcIiArIGNvbHVtbkluZGV4O1xufTsgLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5cblxudmFyIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IG51bGw7XG52YXIgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgPSBudWxsO1xudmFyIGRldldhcm5pbmdzVGFnTmFtZSA9IG51bGw7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc1RhZ05hbWUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVHcmlkQ29tcG9uZW50KF9yZWYyKSB7XG4gIHZhciBfY2xhc3M7XG5cbiAgdmFyIGdldENvbHVtbk9mZnNldCA9IF9yZWYyLmdldENvbHVtbk9mZnNldCxcbiAgICAgIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQgPSBfcmVmMi5nZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYyLmdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gICAgICBnZXRDb2x1bW5XaWR0aCA9IF9yZWYyLmdldENvbHVtbldpZHRoLFxuICAgICAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQgPSBfcmVmMi5nZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgICAgIGdldEVzdGltYXRlZFRvdGFsV2lkdGggPSBfcmVmMi5nZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICAgICAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50ID0gX3JlZjIuZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50LFxuICAgICAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50ID0gX3JlZjIuZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50LFxuICAgICAgZ2V0Um93SGVpZ2h0ID0gX3JlZjIuZ2V0Um93SGVpZ2h0LFxuICAgICAgZ2V0Um93T2Zmc2V0ID0gX3JlZjIuZ2V0Um93T2Zmc2V0LFxuICAgICAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCA9IF9yZWYyLmdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gICAgICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gX3JlZjIuZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgICAgIGluaXRJbnN0YW5jZVByb3BzID0gX3JlZjIuaW5pdEluc3RhbmNlUHJvcHMsXG4gICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlID0gX3JlZjIuc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgICAgIHZhbGlkYXRlUHJvcHMgPSBfcmVmMi52YWxpZGF0ZVByb3BzO1xuICByZXR1cm4gX2NsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKEdyaWQsIF9QdXJlQ29tcG9uZW50KTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBHcmlkKHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX1B1cmVDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICAgIF90aGlzLl9pbnN0YW5jZVByb3BzID0gaW5pdEluc3RhbmNlUHJvcHMoX3RoaXMucHJvcHMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcbiAgICAgIF90aGlzLl9vdXRlclJlZiA9IHZvaWQgMDtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICBpbnN0YW5jZTogX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksXG4gICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgICBzY3JvbGxMZWZ0OiB0eXBlb2YgX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnQgPT09ICdudW1iZXInID8gX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnQgOiAwLFxuICAgICAgICBzY3JvbGxUb3A6IHR5cGVvZiBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJyA/IF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgOiAwLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnXG4gICAgICB9O1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCwgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsIG92ZXJzY2FuUm93U3RhcnRJbmRleCwgb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsIHZpc2libGVDb2x1bW5TdGFydEluZGV4LCB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LCB2aXNpYmxlUm93U3RhcnRJbmRleCwgdmlzaWJsZVJvd1N0b3BJbmRleCkge1xuICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkKHtcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4OiBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4OiB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4OiB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4OiB2aXNpYmxlUm93U3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4OiB2aXNpYmxlUm93U3RvcEluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCkge1xuICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25TY3JvbGwoe1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSB2b2lkIDA7XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSBmdW5jdGlvbiAocm93SW5kZXgsIGNvbHVtbkluZGV4KSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgICAgY29sdW1uV2lkdGggPSBfdGhpcyRwcm9wcy5jb2x1bW5XaWR0aCxcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzLnJvd0hlaWdodDtcblxuICAgICAgICB2YXIgaXRlbVN0eWxlQ2FjaGUgPSBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBjb2x1bW5XaWR0aCwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb24sIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgcm93SGVpZ2h0KTtcblxuICAgICAgICB2YXIga2V5ID0gcm93SW5kZXggKyBcIjpcIiArIGNvbHVtbkluZGV4O1xuICAgICAgICB2YXIgc3R5bGU7XG5cbiAgICAgICAgaWYgKGl0ZW1TdHlsZUNhY2hlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBzdHlsZSA9IGl0ZW1TdHlsZUNhY2hlW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9vZmZzZXQgPSBnZXRDb2x1bW5PZmZzZXQoX3RoaXMucHJvcHMsIGNvbHVtbkluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyk7XG5cbiAgICAgICAgICB2YXIgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICAgIGl0ZW1TdHlsZUNhY2hlW2tleV0gPSBzdHlsZSA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBfb2Zmc2V0LFxuICAgICAgICAgICAgcmlnaHQ6IGlzUnRsID8gX29mZnNldCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRvcDogZ2V0Um93T2Zmc2V0KF90aGlzLnByb3BzLCByb3dJbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICAgICAgaGVpZ2h0OiBnZXRSb3dIZWlnaHQoX3RoaXMucHJvcHMsIHJvd0luZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgICB3aWR0aDogZ2V0Q29sdW1uV2lkdGgoX3RoaXMucHJvcHMsIGNvbHVtbkluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoXywgX18sIF9fXykge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuX29uU2Nyb2xsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfZXZlbnQkY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICBjbGllbnRIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgICBjbGllbnRXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxUb3AgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxUb3AsXG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbFdpZHRoO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiYgcHJldlN0YXRlLnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSBfdGhpcy5wcm9wcy5kaXJlY3Rpb247IC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAvLyBJdCdzIGFsc28gZWFzaWVyIGZvciB0aGlzIGNvbXBvbmVudCBpZiB3ZSBjb252ZXJ0IG9mZnNldHMgdG8gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZXkgd291bGQgYmUgaW4gZm9yIGx0ci5cbiAgICAgICAgICAvLyBTbyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgY29udmVydCBiYXNlZCBvbiBpdC5cblxuICAgICAgICAgIHZhciBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG5cbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuXG5cbiAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKSk7XG4gICAgICAgICAgdmFyIGNhbGN1bGF0ZWRTY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxMZWZ0OiBjYWxjdWxhdGVkU2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIHNjcm9sbFRvcDogY2FsY3VsYXRlZFNjcm9sbFRvcCxcbiAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fb3V0ZXJSZWZTZXR0ZXIgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IF90aGlzLnByb3BzLm91dGVyUmVmO1xuICAgICAgICBfdGhpcy5fb3V0ZXJSZWYgPSByZWY7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICAgIH0gZWxzZSBpZiAob3V0ZXJSZWYgIT0gbnVsbCAmJiB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsVGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nLCBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAgIC8vIFRoaXMgd2F5IHdlIGRvbid0IGJyZWFrIHB1cmUgc0NVIGZvciBpdGVtcyB0aGF0IGRvbid0IHVzZSBpc1Njcm9sbGluZyBwYXJhbS5cbiAgICAgICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICBHcmlkLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFsaWRhdGVTaGFyZWRQcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB2YWxpZGF0ZVByb3BzKG5leHRQcm9wcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIF9wcm90byA9IEdyaWQucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvID0gZnVuY3Rpb24gc2Nyb2xsVG8oX3JlZjMpIHtcbiAgICAgIHZhciBzY3JvbGxMZWZ0ID0gX3JlZjMuc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfcmVmMy5zY3JvbGxUb3A7XG5cbiAgICAgIGlmIChzY3JvbGxMZWZ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2Nyb2xsVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gcHJldlN0YXRlLnNjcm9sbExlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2Nyb2xsVG9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxUb3AgPSBwcmV2U3RhdGUuc2Nyb2xsVG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxMZWZ0ID09PSBzY3JvbGxMZWZ0ICYmIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJ1xuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9wcm90by5zY3JvbGxUb0l0ZW0gPSBmdW5jdGlvbiBzY3JvbGxUb0l0ZW0oX3JlZjQpIHtcbiAgICAgIHZhciBfcmVmNCRhbGlnbiA9IF9yZWY0LmFsaWduLFxuICAgICAgICAgIGFsaWduID0gX3JlZjQkYWxpZ24gPT09IHZvaWQgMCA/ICdhdXRvJyA6IF9yZWY0JGFsaWduLFxuICAgICAgICAgIGNvbHVtbkluZGV4ID0gX3JlZjQuY29sdW1uSW5kZXgsXG4gICAgICAgICAgcm93SW5kZXggPSBfcmVmNC5yb3dJbmRleDtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHMyLmNvbHVtbkNvdW50LFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzMi5oZWlnaHQsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczIucm93Q291bnQsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczIud2lkdGg7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSBfdGhpcyRzdGF0ZS5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlLnNjcm9sbFRvcDtcbiAgICAgIHZhciBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZSgpO1xuXG4gICAgICBpZiAoY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2x1bW5JbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkluZGV4LCBjb2x1bW5Db3VudCAtIDEpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcm93SW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dJbmRleCwgcm93Q291bnQgLSAxKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsV2lkdGggPSBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBUaGUgc2Nyb2xsYmFyIHNpemUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBzY3JvbGxpbmcgYW4gaXRlbSBpbnRvIHZpZXcsXG4gICAgICAvLyB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cblxuICAgICAgdmFyIGhvcml6b250YWxTY3JvbGxiYXJTaXplID0gZXN0aW1hdGVkVG90YWxXaWR0aCA+IHdpZHRoID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG4gICAgICB2YXIgdmVydGljYWxTY3JvbGxiYXJTaXplID0gZXN0aW1hdGVkVG90YWxIZWlnaHQgPiBoZWlnaHQgPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIHRoaXMuc2Nyb2xsVG8oe1xuICAgICAgICBzY3JvbGxMZWZ0OiBjb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkID8gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KHRoaXMucHJvcHMsIGNvbHVtbkluZGV4LCBhbGlnbiwgc2Nyb2xsTGVmdCwgdGhpcy5faW5zdGFuY2VQcm9wcywgdmVydGljYWxTY3JvbGxiYXJTaXplKSA6IHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcDogcm93SW5kZXggIT09IHVuZGVmaW5lZCA/IGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCh0aGlzLnByb3BzLCByb3dJbmRleCwgYWxpZ24sIHNjcm9sbFRvcCwgdGhpcy5faW5zdGFuY2VQcm9wcywgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUpIDogc2Nyb2xsVG9wXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpbml0aWFsU2Nyb2xsTGVmdCA9IF90aGlzJHByb3BzMy5pbml0aWFsU2Nyb2xsTGVmdCxcbiAgICAgICAgICBpbml0aWFsU2Nyb2xsVG9wID0gX3RoaXMkcHJvcHMzLmluaXRpYWxTY3JvbGxUb3A7XG5cbiAgICAgIGlmICh0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbExlZnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5wcm9wcy5kaXJlY3Rpb247XG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUyLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGUyLnNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7XG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHZhciBjbGllbnRXaWR0aCA9IG91dGVyUmVmLmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBvdXRlclJlZi5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM0LmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzNC5jbGFzc05hbWUsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczQuY29sdW1uQ291bnQsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHM0LmRpcmVjdGlvbixcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczQuaGVpZ2h0LFxuICAgICAgICAgIGlubmVyUmVmID0gX3RoaXMkcHJvcHM0LmlubmVyUmVmLFxuICAgICAgICAgIGlubmVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczQuaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBpbm5lclRhZ05hbWUgPSBfdGhpcyRwcm9wczQuaW5uZXJUYWdOYW1lLFxuICAgICAgICAgIGl0ZW1EYXRhID0gX3RoaXMkcHJvcHM0Lml0ZW1EYXRhLFxuICAgICAgICAgIF90aGlzJHByb3BzNCRpdGVtS2V5ID0gX3RoaXMkcHJvcHM0Lml0ZW1LZXksXG4gICAgICAgICAgaXRlbUtleSA9IF90aGlzJHByb3BzNCRpdGVtS2V5ID09PSB2b2lkIDAgPyBkZWZhdWx0SXRlbUtleSA6IF90aGlzJHByb3BzNCRpdGVtS2V5LFxuICAgICAgICAgIG91dGVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczQub3V0ZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBvdXRlclRhZ05hbWUgPSBfdGhpcyRwcm9wczQub3V0ZXJUYWdOYW1lLFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM0LnJvd0NvdW50LFxuICAgICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHM0LnN0eWxlLFxuICAgICAgICAgIHVzZUlzU2Nyb2xsaW5nID0gX3RoaXMkcHJvcHM0LnVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHM0LndpZHRoO1xuICAgICAgdmFyIGlzU2Nyb2xsaW5nID0gdGhpcy5zdGF0ZS5pc1Njcm9sbGluZztcblxuICAgICAgdmFyIF90aGlzJF9nZXRIb3Jpem9udGFsUiA9IHRoaXMuX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgY29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUlswXSxcbiAgICAgICAgICBjb2x1bW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFJbMV07XG5cbiAgICAgIHZhciBfdGhpcyRfZ2V0VmVydGljYWxSYW4gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICByb3dTdGFydEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuWzBdLFxuICAgICAgICAgIHJvd1N0b3BJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhblsxXTtcblxuICAgICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQpIHtcbiAgICAgICAgZm9yICh2YXIgX3Jvd0luZGV4ID0gcm93U3RhcnRJbmRleDsgX3Jvd0luZGV4IDw9IHJvd1N0b3BJbmRleDsgX3Jvd0luZGV4KyspIHtcbiAgICAgICAgICBmb3IgKHZhciBfY29sdW1uSW5kZXggPSBjb2x1bW5TdGFydEluZGV4OyBfY29sdW1uSW5kZXggPD0gY29sdW1uU3RvcEluZGV4OyBfY29sdW1uSW5kZXgrKykge1xuICAgICAgICAgICAgaXRlbXMucHVzaChjcmVhdGVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBfY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICBpc1Njcm9sbGluZzogdXNlSXNTY3JvbGxpbmcgPyBpc1Njcm9sbGluZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAga2V5OiBpdGVtS2V5KHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogX2NvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICAgIHJvd0luZGV4OiBfcm93SW5kZXhcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHJvd0luZGV4OiBfcm93SW5kZXgsXG4gICAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoX3Jvd0luZGV4LCBfY29sdW1uSW5kZXgpXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG5cblxuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgb25TY3JvbGw6IHRoaXMuX29uU2Nyb2xsLFxuICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH0sIHN0eWxlKVxuICAgICAgfSwgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjaGlsZHJlbjogaXRlbXMsXG4gICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgaGVpZ2h0OiBlc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB3aWR0aDogZXN0aW1hdGVkVG90YWxXaWR0aFxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2FsbFByb3BzQ2FsbGJhY2tzID0gZnVuY3Rpb24gX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM1LmNvbHVtbkNvdW50LFxuICAgICAgICAgIG9uSXRlbXNSZW5kZXJlZCA9IF90aGlzJHByb3BzNS5vbkl0ZW1zUmVuZGVyZWQsXG4gICAgICAgICAgb25TY3JvbGwgPSBfdGhpcyRwcm9wczUub25TY3JvbGwsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczUucm93Q291bnQ7XG5cbiAgICAgIGlmICh0eXBlb2Ygb25JdGVtc1JlbmRlcmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQgPiAwKSB7XG4gICAgICAgICAgdmFyIF90aGlzJF9nZXRIb3Jpem9udGFsUjIgPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlswXSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuQ29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlsxXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVDb2x1bW5TdGFydEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlsyXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVDb2x1bW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzNdO1xuXG4gICAgICAgICAgdmFyIF90aGlzJF9nZXRWZXJ0aWNhbFJhbjIgPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuUm93U3RhcnRJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbMF0sXG4gICAgICAgICAgICAgIF9vdmVyc2NhblJvd1N0b3BJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbMV0sXG4gICAgICAgICAgICAgIF92aXNpYmxlUm93U3RhcnRJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbMl0sXG4gICAgICAgICAgICAgIF92aXNpYmxlUm93U3RvcEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlszXTtcblxuICAgICAgICAgIHRoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQoX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCwgX292ZXJzY2FuQ29sdW1uU3RvcEluZGV4LCBfb3ZlcnNjYW5Sb3dTdGFydEluZGV4LCBfb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsIF92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCwgX3Zpc2libGVDb2x1bW5TdG9wSW5kZXgsIF92aXNpYmxlUm93U3RhcnRJbmRleCwgX3Zpc2libGVSb3dTdG9wSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIF90aGlzJHN0YXRlMyA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgICBfaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMy5ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgICAgX3Njcm9sbExlZnQgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIF9zY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlMy5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgICAgICBfdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTMudmVydGljYWxTY3JvbGxEaXJlY3Rpb247XG5cbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKF9zY3JvbGxMZWZ0LCBfc2Nyb2xsVG9wLCBfaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiwgX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLCBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKTtcbiAgICAgIH1cbiAgICB9IC8vIExhemlseSBjcmVhdGUgYW5kIGNhY2hlIGl0ZW0gc3R5bGVzIHdoaWxlIHNjcm9sbGluZyxcbiAgICAvLyBTbyB0aGF0IHB1cmUgY29tcG9uZW50IHNDVSB3aWxsIHByZXZlbnQgcmUtcmVuZGVycy5cbiAgICAvLyBXZSBtYWludGFpbiB0aGlzIGNhY2hlLCBhbmQgcGFzcyBhIHN0eWxlIHByb3AgcmF0aGVyIHRoYW4gaW5kZXgsXG4gICAgLy8gU28gdGhhdCBMaXN0IGNhbiBjbGVhciBjYWNoZWQgc3R5bGVzIGFuZCBmb3JjZSBpdGVtIHJlLXJlbmRlciBpZiBuZWNlc3NhcnkuXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlciA9IGZ1bmN0aW9uIF9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM2LmNvbHVtbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db2x1bW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ291bnQsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczYucm93Q291bnQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGU0ID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGU0Lmhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgaXNTY3JvbGxpbmcgPSBfdGhpcyRzdGF0ZTQuaXNTY3JvbGxpbmcsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlNC5zY3JvbGxMZWZ0O1xuICAgICAgdmFyIG92ZXJzY2FuQ291bnRSZXNvbHZlZCA9IG92ZXJzY2FuQ29sdW1uQ291bnQgfHwgb3ZlcnNjYW5Db2x1bW5zQ291bnQgfHwgb3ZlcnNjYW5Db3VudCB8fCAxO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPT09IDAgfHwgcm93Q291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0KHRoaXMucHJvcHMsIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIHN0b3BJbmRleCA9IGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgodGhpcy5wcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsTGVmdCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cblxuICAgICAgdmFyIG92ZXJzY2FuQmFja3dhcmQgPSAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgdmFyIG92ZXJzY2FuRm9yd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHJldHVybiBbTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLCBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLCBzdGFydEluZGV4LCBzdG9wSW5kZXhdO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlciA9IGZ1bmN0aW9uIF9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNy5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvdW50ID0gX3RoaXMkcHJvcHM3Lm92ZXJzY2FuQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dDb3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhblJvd0NvdW50LFxuICAgICAgICAgIG92ZXJzY2FuUm93c0NvdW50ID0gX3RoaXMkcHJvcHM3Lm92ZXJzY2FuUm93c0NvdW50LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM3LnJvd0NvdW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlNSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaXNTY3JvbGxpbmcgPSBfdGhpcyRzdGF0ZTUuaXNTY3JvbGxpbmcsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTUudmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGU1LnNjcm9sbFRvcDtcbiAgICAgIHZhciBvdmVyc2NhbkNvdW50UmVzb2x2ZWQgPSBvdmVyc2NhblJvd0NvdW50IHx8IG92ZXJzY2FuUm93c0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEluZGV4ID0gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCh0aGlzLnByb3BzLCBzY3JvbGxUb3AsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIHN0b3BJbmRleCA9IGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgodGhpcy5wcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsVG9wLCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuXG4gICAgICB2YXIgb3ZlcnNjYW5CYWNrd2FyZCA9ICFpc1Njcm9sbGluZyB8fCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgdmFyIG92ZXJzY2FuRm9yd2FyZCA9ICFpc1Njcm9sbGluZyB8fCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSwgc3RhcnRJbmRleCwgc3RvcEluZGV4XTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIEdyaWQ7XG4gIH0oUHVyZUNvbXBvbmVudCksIF9jbGFzcy5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICBpdGVtRGF0YTogdW5kZWZpbmVkLFxuICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZVxuICB9LCBfY2xhc3M7XG59XG5cbnZhciB2YWxpZGF0ZVNoYXJlZFByb3BzID0gZnVuY3Rpb24gdmFsaWRhdGVTaGFyZWRQcm9wcyhfcmVmNSwgX3JlZjYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjUuY2hpbGRyZW4sXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmNS5kaXJlY3Rpb24sXG4gICAgICBoZWlnaHQgPSBfcmVmNS5oZWlnaHQsXG4gICAgICBpbm5lclRhZ05hbWUgPSBfcmVmNS5pbm5lclRhZ05hbWUsXG4gICAgICBvdXRlclRhZ05hbWUgPSBfcmVmNS5vdXRlclRhZ05hbWUsXG4gICAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCA9IF9yZWY1Lm92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgICAgb3ZlcnNjYW5Db3VudCA9IF9yZWY1Lm92ZXJzY2FuQ291bnQsXG4gICAgICBvdmVyc2NhblJvd3NDb3VudCA9IF9yZWY1Lm92ZXJzY2FuUm93c0NvdW50LFxuICAgICAgd2lkdGggPSBfcmVmNS53aWR0aDtcbiAgdmFyIGluc3RhbmNlID0gX3JlZjYuaW5zdGFuY2U7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJzY2FuQ291bnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ICYmICFkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgb3ZlcnNjYW5Db3VudCBwcm9wIGhhcyBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db2x1bW5zQ291bnQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBvdmVyc2NhblJvd3NDb3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCAmJiAhZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBvdmVyc2NhbkNvbHVtbnNDb3VudCBhbmQgb3ZlcnNjYW5Sb3dzQ291bnQgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIGlubmVyRWxlbWVudFR5cGUgYW5kIG91dGVyRWxlbWVudFR5cGUgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArIChcIlxcXCJcIiArIChjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbikgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdsdHInOlxuICAgICAgY2FzZSAncnRsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICsgKFwiXFxcIlwiICsgZGlyZWN0aW9uICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgKyAoXCJcXFwiXCIgKyAod2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciBoZWlnaHQuICcgKyAoXCJcXFwiXCIgKyAoaGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGhlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSA9IDUwO1xuXG52YXIgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQgPSBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChfcmVmLCBfcmVmMikge1xuICB2YXIgcm93Q291bnQgPSBfcmVmLnJvd0NvdW50O1xuICB2YXIgcm93TWV0YWRhdGFNYXAgPSBfcmVmMi5yb3dNZXRhZGF0YU1hcCxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodCA9IF9yZWYyLmVzdGltYXRlZFJvd0hlaWdodCxcbiAgICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4ID0gX3JlZjIubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIHZhciB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IDA7IC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG5cbiAgaWYgKGxhc3RNZWFzdXJlZFJvd0luZGV4ID49IHJvd0NvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkUm93SW5kZXggPSByb3dDb3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gMCkge1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSByb3dNZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRSb3dJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICB2YXIgbnVtVW5tZWFzdXJlZEl0ZW1zID0gcm93Q291bnQgLSBsYXN0TWVhc3VyZWRSb3dJbmRleCAtIDE7XG4gIHZhciB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZFJvd0hlaWdodDtcbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG52YXIgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsV2lkdGgoX3JlZjMsIF9yZWY0KSB7XG4gIHZhciBjb2x1bW5Db3VudCA9IF9yZWYzLmNvbHVtbkNvdW50O1xuICB2YXIgY29sdW1uTWV0YWRhdGFNYXAgPSBfcmVmNC5jb2x1bW5NZXRhZGF0YU1hcCxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoID0gX3JlZjQuZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IF9yZWY0Lmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB2YXIgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwOyAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuXG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSBjb2x1bW5Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gY29sdW1uQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IDApIHtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gY29sdW1uTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgdmFyIG51bVVubWVhc3VyZWRJdGVtcyA9IGNvbHVtbkNvdW50IC0gbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggLSAxO1xuICB2YXIgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRDb2x1bW5XaWR0aDtcbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG52YXIgZ2V0SXRlbU1ldGFkYXRhID0gZnVuY3Rpb24gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCwgaXRlbVNpemUsIGxhc3RNZWFzdXJlZEluZGV4O1xuXG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGl0ZW1TaXplID0gcHJvcHMuY29sdW1uV2lkdGg7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSBwcm9wcy5yb3dIZWlnaHQ7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICB2YXIgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIHZhciBzaXplID0gaXRlbVNpemUoaSk7XG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBzaXplOiBzaXplXG4gICAgICB9O1xuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSB7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAsIGxhc3RNZWFzdXJlZEluZGV4O1xuXG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIHZhciBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID0gbGFzdE1lYXN1cmVkSW5kZXggPiAwID8gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XS5vZmZzZXQgOiAwO1xuXG4gIGlmIChsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID49IG9mZnNldCkge1xuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgbWVhc3VyZWQgaXRlbXMgd2l0aGluIHRoaXMgcmFuZ2UganVzdCB1c2UgYSBiaW5hcnkgc2VhcmNoIGFzIGl0J3MgZmFzdGVyLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBsYXN0TWVhc3VyZWRJbmRleCwgMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCBtZWFzdXJlZCB0aGlzIGhpZ2gsIGZhbGxiYWNrIHRvIGFuIGV4cG9uZW50aWFsIHNlYXJjaCB3aXRoIGFuIGlubmVyIGJpbmFyeSBzZWFyY2guXG4gICAgLy8gVGhlIGV4cG9uZW50aWFsIHNlYXJjaCBhdm9pZHMgcHJlLWNvbXB1dGluZyBzaXplcyBmb3IgdGhlIGZ1bGwgc2V0IG9mIGl0ZW1zIGFzIGEgYmluYXJ5IHNlYXJjaCB3b3VsZC5cbiAgICAvLyBUaGUgb3ZlcmFsbCBjb21wbGV4aXR5IGZvciB0aGlzIGFwcHJvYWNoIGlzIE8obG9nIG4pLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWF4KDAsIGxhc3RNZWFzdXJlZEluZGV4KSwgb2Zmc2V0KTtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIGhpZ2gsIGxvdywgb2Zmc2V0KSB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIHZhciBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgbWlkZGxlLCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG5cbiAgICBpZiAoY3VycmVudE9mZnNldCA9PT0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbWlkZGxlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA8IG9mZnNldCkge1xuICAgICAgbG93ID0gbWlkZGxlICsgMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHtcbiAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsb3cgPiAwKSB7XG4gICAgcmV0dXJuIGxvdyAtIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgaW5kZXgsIG9mZnNldCkge1xuICB2YXIgaXRlbUNvdW50ID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gcHJvcHMuY29sdW1uQ291bnQgOiBwcm9wcy5yb3dDb3VudDtcbiAgdmFyIGludGVydmFsID0gMTtcblxuICB3aGlsZSAoaW5kZXggPCBpdGVtQ291bnQgJiYgZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldCkge1xuICAgIGluZGV4ICs9IGludGVydmFsO1xuICAgIGludGVydmFsICo9IDI7XG4gIH1cblxuICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpLCBNYXRoLmZsb29yKGluZGV4IC8gMiksIG9mZnNldCk7XG59O1xuXG52YXIgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSBmdW5jdGlvbiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gIHZhciBzaXplID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gcHJvcHMud2lkdGggOiBwcm9wcy5oZWlnaHQ7XG4gIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcyk7IC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG5cbiAgdmFyIGVzdGltYXRlZFRvdGFsU2l6ZSA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IGdldEVzdGltYXRlZFRvdGFsV2lkdGgocHJvcHMsIGluc3RhbmNlUHJvcHMpIDogZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQocHJvcHMsIGluc3RhbmNlUHJvcHMpO1xuICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZXN0aW1hdGVkVG90YWxTaXplIC0gc2l6ZSwgaXRlbU1ldGFkYXRhLm9mZnNldCkpO1xuICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBzY3JvbGxiYXJTaXplICsgaXRlbU1ldGFkYXRhLnNpemUpO1xuXG4gIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZSkge1xuICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoIChhbGlnbikge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICBjYXNlICdlbmQnOlxuICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgY2FzZSAnYXV0byc6XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICB9XG5cbiAgfVxufTtcblxudmFyIFZhcmlhYmxlU2l6ZUdyaWQgPSAvKiNfX1BVUkVfXyovY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uT2Zmc2V0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuICB9LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0KHByb3BzLCBzY3JvbGxMZWZ0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbSgnY29sdW1uJywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbExlZnQpO1xuICB9LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KHByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxMZWZ0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgdmFyIGNvbHVtbkNvdW50ID0gcHJvcHMuY29sdW1uQ291bnQsXG4gICAgICAgIHdpZHRoID0gcHJvcHMud2lkdGg7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBzY3JvbGxMZWZ0ICsgd2lkdGg7XG4gICAgdmFyIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB2YXIgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCBjb2x1bW5Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcbiAgZ2V0Q29sdW1uV2lkdGg6IGZ1bmN0aW9uIGdldENvbHVtbldpZHRoKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwW2luZGV4XS5zaXplO1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodDogZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6IGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHJldHVybiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCgnY29sdW1uJywgcHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKTtcbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQocHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KCdyb3cnLCBwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpO1xuICB9LFxuICBnZXRSb3dPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd09mZnNldChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcbiAgfSxcbiAgZ2V0Um93SGVpZ2h0OiBmdW5jdGlvbiBnZXRSb3dIZWlnaHQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXBbaW5kZXhdLnNpemU7XG4gIH0sXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQocHJvcHMsIHNjcm9sbFRvcCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW0oJ3JvdycsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxUb3ApO1xuICB9LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KHByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxUb3AsIGluc3RhbmNlUHJvcHMpIHtcbiAgICB2YXIgcm93Q291bnQgPSBwcm9wcy5yb3dDb3VudCxcbiAgICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0O1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gc2Nyb2xsVG9wICsgaGVpZ2h0O1xuICAgIHZhciBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgdmFyIHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgcm93Q291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcywgaW5zdGFuY2UpIHtcbiAgICB2YXIgX3JlZjUgPSBwcm9wcyxcbiAgICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGggPSBfcmVmNS5lc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0ID0gX3JlZjUuZXN0aW1hdGVkUm93SGVpZ2h0O1xuICAgIHZhciBpbnN0YW5jZVByb3BzID0ge1xuICAgICAgY29sdW1uTWV0YWRhdGFNYXA6IHt9LFxuICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IGVzdGltYXRlZENvbHVtbldpZHRoIHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodDogZXN0aW1hdGVkUm93SGVpZ2h0IHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSxcbiAgICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4OiAtMSxcbiAgICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4OiAtMSxcbiAgICAgIHJvd01ldGFkYXRhTWFwOiB7fVxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVyQ29sdW1uSW5kZXggPSBmdW5jdGlvbiAoY29sdW1uSW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHtcbiAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZTogc2hvdWxkRm9yY2VVcGRhdGVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVyUm93SW5kZXggPSBmdW5jdGlvbiAocm93SW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHtcbiAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZTogc2hvdWxkRm9yY2VVcGRhdGVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyA9IGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgdmFyIGNvbHVtbkluZGV4ID0gX3JlZjYuY29sdW1uSW5kZXgsXG4gICAgICAgICAgcm93SW5kZXggPSBfcmVmNi5yb3dJbmRleCxcbiAgICAgICAgICBfcmVmNiRzaG91bGRGb3JjZVVwZGEgPSBfcmVmNi5zaG91bGRGb3JjZVVwZGF0ZSxcbiAgICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IF9yZWY2JHNob3VsZEZvcmNlVXBkYSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWY2JHNob3VsZEZvcmNlVXBkYTtcblxuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5JbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IE1hdGgubWluKGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgsIGNvbHVtbkluZGV4IC0gMSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygcm93SW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBNYXRoLm1pbihpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4LCByb3dJbmRleCAtIDEpO1xuICAgICAgfSAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cblxuXG4gICAgICBpbnN0YW5jZS5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHM7XG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWY3KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjcuY29sdW1uV2lkdGgsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWY3LnJvd0hlaWdodDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbldpZHRoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY29sdW1uV2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArIChcIlxcXCJcIiArIChjb2x1bW5XaWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjb2x1bW5XaWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoXCJcXFwiXCIgKyAocm93SGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJvd0hlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbnZhciBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwkMSA9IDE1MDtcblxudmFyIGRlZmF1bHRJdGVtS2V5JDEgPSBmdW5jdGlvbiBkZWZhdWx0SXRlbUtleShpbmRleCwgZGF0YSkge1xuICByZXR1cm4gaW5kZXg7XG59OyAvLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cblxuXG52YXIgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSBudWxsO1xudmFyIGRldldhcm5pbmdzVGFnTmFtZSQxID0gbnVsbDtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSQxID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlzdENvbXBvbmVudChfcmVmKSB7XG4gIHZhciBfY2xhc3M7XG5cbiAgdmFyIGdldEl0ZW1PZmZzZXQgPSBfcmVmLmdldEl0ZW1PZmZzZXQsXG4gICAgICBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSBfcmVmLmdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgICAgIGdldEl0ZW1TaXplID0gX3JlZi5nZXRJdGVtU2l6ZSxcbiAgICAgIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50ID0gX3JlZi5nZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCxcbiAgICAgIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQgPSBfcmVmLmdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gICAgICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gX3JlZi5nZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICAgICAgaW5pdEluc3RhbmNlUHJvcHMgPSBfcmVmLmluaXRJbnN0YW5jZVByb3BzLFxuICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSA9IF9yZWYuc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgICAgIHZhbGlkYXRlUHJvcHMgPSBfcmVmLnZhbGlkYXRlUHJvcHM7XG4gIHJldHVybiBfY2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoTGlzdCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGZ1bmN0aW9uIExpc3QocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfUHVyZUNvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgX3RoaXMuX2luc3RhbmNlUHJvcHMgPSBpbml0SW5zdGFuY2VQcm9wcyhfdGhpcy5wcm9wcywgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgX3RoaXMuX291dGVyUmVmID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIGluc3RhbmNlOiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSxcbiAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgICAgICBzY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgICAgc2Nyb2xsT2Zmc2V0OiB0eXBlb2YgX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldCA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0IDogMCxcbiAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChvdmVyc2NhblN0YXJ0SW5kZXgsIG92ZXJzY2FuU3RvcEluZGV4LCB2aXNpYmxlU3RhcnRJbmRleCwgdmlzaWJsZVN0b3BJbmRleCkge1xuICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkKHtcbiAgICAgICAgICBvdmVyc2NhblN0YXJ0SW5kZXg6IG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblN0b3BJbmRleDogb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXg6IHZpc2libGVTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdG9wSW5kZXg6IHZpc2libGVTdG9wSW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxPZmZzZXQsIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCkge1xuICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25TY3JvbGwoe1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gdm9pZCAwO1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICAgICAgaXRlbVNpemUgPSBfdGhpcyRwcm9wcy5pdGVtU2l6ZSxcbiAgICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzLmxheW91dDtcblxuICAgICAgICB2YXIgaXRlbVN0eWxlQ2FjaGUgPSBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBpdGVtU2l6ZSwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBsYXlvdXQsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgZGlyZWN0aW9uKTtcblxuICAgICAgICB2YXIgc3R5bGU7XG5cbiAgICAgICAgaWYgKGl0ZW1TdHlsZUNhY2hlLmhhc093blByb3BlcnR5KGluZGV4KSkge1xuICAgICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVbaW5kZXhdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfb2Zmc2V0ID0gZ2V0SXRlbU9mZnNldChfdGhpcy5wcm9wcywgaW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAgIHZhciBzaXplID0gZ2V0SXRlbVNpemUoX3RoaXMucHJvcHMsIGluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICAgICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgICAgICAgIHZhciBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgICAgdmFyIG9mZnNldEhvcml6b250YWwgPSBpc0hvcml6b250YWwgPyBfb2Zmc2V0IDogMDtcbiAgICAgICAgICBpdGVtU3R5bGVDYWNoZVtpbmRleF0gPSBzdHlsZSA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBvZmZzZXRIb3Jpem9udGFsLFxuICAgICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0SG9yaXpvbnRhbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRvcDogIWlzSG9yaXpvbnRhbCA/IF9vZmZzZXQgOiAwLFxuICAgICAgICAgICAgaGVpZ2h0OiAhaXNIb3Jpem9udGFsID8gc2l6ZSA6ICcxMDAlJyxcbiAgICAgICAgICAgIHdpZHRoOiBpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKF8sIF9fLCBfX18pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLl9vblNjcm9sbEhvcml6b250YWwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9ldmVudCRjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgIGNsaWVudFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICBzY3JvbGxMZWZ0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsV2lkdGg7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSBfdGhpcy5wcm9wcy5kaXJlY3Rpb247XG4gICAgICAgICAgdmFyIHNjcm9sbE9mZnNldCA9IHNjcm9sbExlZnQ7XG5cbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgICAvLyBJdCdzIGFsc28gZWFzaWVyIGZvciB0aGlzIGNvbXBvbmVudCBpZiB3ZSBjb252ZXJ0IG9mZnNldHMgdG8gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZXkgd291bGQgYmUgaW4gZm9yIGx0ci5cbiAgICAgICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG5cblxuICAgICAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbE9mZnNldCwgc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX29uU2Nyb2xsVmVydGljYWwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9ldmVudCRjdXJyZW50VGFyZ2V0MiA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICBjbGllbnRIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldDIuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQyLnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0Mi5zY3JvbGxUb3A7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgdmFyIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9vdXRlclJlZlNldHRlciA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gX3RoaXMucHJvcHMub3V0ZXJSZWY7XG4gICAgICAgIF90aGlzLl9vdXRlclJlZiA9IHJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb3V0ZXJSZWYocmVmKTtcbiAgICAgICAgfSBlbHNlIGlmIChvdXRlclJlZiAhPSBudWxsICYmIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiYgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gcmVxdWVzdFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcsIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCQxKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xLCBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgTGlzdC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMkMShuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB2YWxpZGF0ZVByb3BzKG5leHRQcm9wcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIF9wcm90byA9IExpc3QucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvID0gZnVuY3Rpb24gc2Nyb2xsVG8oc2Nyb2xsT2Zmc2V0KSB7XG4gICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBzY3JvbGxPZmZzZXQpO1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG9JdGVtID0gZnVuY3Rpb24gc2Nyb2xsVG9JdGVtKGluZGV4LCBhbGlnbikge1xuICAgICAgaWYgKGFsaWduID09PSB2b2lkIDApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF90aGlzJHByb3BzMi5pdGVtQ291bnQsXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMyLmxheW91dDtcbiAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSB0aGlzLnN0YXRlLnNjcm9sbE9mZnNldDtcbiAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpKTsgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LCB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIC8vIFRoaXMgaXMgYW4gZWRnZSBjYXNlIGZvciBsaXN0czsgbm9ybWFsbHkgdGhleSBvbmx5IHNjcm9sbCBpbiB0aGUgZG9taW5hbnQgZGlyZWN0aW9uLlxuXG4gICAgICB2YXIgc2Nyb2xsYmFyU2l6ZSA9IDA7XG5cbiAgICAgIGlmICh0aGlzLl9vdXRlclJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAobGF5b3V0ID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9IG91dGVyUmVmLnNjcm9sbFdpZHRoID4gb3V0ZXJSZWYuY2xpZW50V2lkdGggPyBnZXRTY3JvbGxiYXJTaXplKCkgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjcm9sbGJhclNpemUgPSBvdXRlclJlZi5zY3JvbGxIZWlnaHQgPiBvdXRlclJlZi5jbGllbnRIZWlnaHQgPyBnZXRTY3JvbGxiYXJTaXplKCkgOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIHRoaXMuX2luc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczMuZGlyZWN0aW9uLFxuICAgICAgICAgIGluaXRpYWxTY3JvbGxPZmZzZXQgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbE9mZnNldCxcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczMubGF5b3V0O1xuXG4gICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczQuZGlyZWN0aW9uLFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzNC5sYXlvdXQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCA9IF90aGlzJHN0YXRlLnNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZS5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG5cbiAgICAgIGlmIChzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gLXNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB2YXIgY2xpZW50V2lkdGggPSBvdXRlclJlZi5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBvdXRlclJlZi5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzNS5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczUuY2xhc3NOYW1lLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNS5kaXJlY3Rpb24sXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHM1LmhlaWdodCxcbiAgICAgICAgICBpbm5lclJlZiA9IF90aGlzJHByb3BzNS5pbm5lclJlZixcbiAgICAgICAgICBpbm5lckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM1LmlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgaW5uZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM1LmlubmVyVGFnTmFtZSxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfdGhpcyRwcm9wczUuaXRlbUNvdW50LFxuICAgICAgICAgIGl0ZW1EYXRhID0gX3RoaXMkcHJvcHM1Lml0ZW1EYXRhLFxuICAgICAgICAgIF90aGlzJHByb3BzNSRpdGVtS2V5ID0gX3RoaXMkcHJvcHM1Lml0ZW1LZXksXG4gICAgICAgICAgaXRlbUtleSA9IF90aGlzJHByb3BzNSRpdGVtS2V5ID09PSB2b2lkIDAgPyBkZWZhdWx0SXRlbUtleSQxIDogX3RoaXMkcHJvcHM1JGl0ZW1LZXksXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHM1LmxheW91dCxcbiAgICAgICAgICBvdXRlckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM1Lm91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgb3V0ZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM1Lm91dGVyVGFnTmFtZSxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNS5zdHlsZSxcbiAgICAgICAgICB1c2VJc1Njcm9sbGluZyA9IF90aGlzJHByb3BzNS51c2VJc1Njcm9sbGluZyxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzNS53aWR0aDtcbiAgICAgIHZhciBpc1Njcm9sbGluZyA9IHRoaXMuc3RhdGUuaXNTY3JvbGxpbmc7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICB2YXIgb25TY3JvbGwgPSBpc0hvcml6b250YWwgPyB0aGlzLl9vblNjcm9sbEhvcml6b250YWwgOiB0aGlzLl9vblNjcm9sbFZlcnRpY2FsO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldFJhbmdlVG9SZW5kID0gdGhpcy5fZ2V0UmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIHN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmRbMF0sXG4gICAgICAgICAgc3RvcEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kWzFdO1xuXG4gICAgICB2YXIgaXRlbXMgPSBbXTtcblxuICAgICAgaWYgKGl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgX2luZGV4ID0gc3RhcnRJbmRleDsgX2luZGV4IDw9IHN0b3BJbmRleDsgX2luZGV4KyspIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAga2V5OiBpdGVtS2V5KF9pbmRleCwgaXRlbURhdGEpLFxuICAgICAgICAgICAgaW5kZXg6IF9pbmRleCxcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShfaW5kZXgpXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG5cblxuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZSh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBvblNjcm9sbDogb25TY3JvbGwsXG4gICAgICAgIHJlZjogdGhpcy5fb3V0ZXJSZWZTZXR0ZXIsXG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgICAgfSwgc3R5bGUpXG4gICAgICB9LCBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgcmVmOiBpbm5lclJlZixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBoZWlnaHQ6IGlzSG9yaXpvbnRhbCA/ICcxMDAlJyA6IGVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gZXN0aW1hdGVkVG90YWxTaXplIDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jYWxsUHJvcHNDYWxsYmFja3MgPSBmdW5jdGlvbiBfY2FsbFByb3BzQ2FsbGJhY2tzKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaXRlbUNvdW50ID0gdGhpcy5wcm9wcy5pdGVtQ291bnQ7XG5cbiAgICAgICAgaWYgKGl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX2dldFJhbmdlVG9SZW5kMiA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuU3RhcnRJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbMF0sXG4gICAgICAgICAgICAgIF9vdmVyc2NhblN0b3BJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbMV0sXG4gICAgICAgICAgICAgIF92aXNpYmxlU3RhcnRJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbMl0sXG4gICAgICAgICAgICAgIF92aXNpYmxlU3RvcEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlszXTtcblxuICAgICAgICAgIHRoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQoX292ZXJzY2FuU3RhcnRJbmRleCwgX292ZXJzY2FuU3RvcEluZGV4LCBfdmlzaWJsZVN0YXJ0SW5kZXgsIF92aXNpYmxlU3RvcEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgICBfc2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUyLnNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICAgIF9zY3JvbGxPZmZzZXQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgICAgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlMi5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG5cbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKF9zY3JvbGxEaXJlY3Rpb24sIF9zY3JvbGxPZmZzZXQsIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpO1xuICAgICAgfVxuICAgIH0gLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICA7XG5cbiAgICBfcHJvdG8uX2dldFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0UmFuZ2VUb1JlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF90aGlzJHByb3BzNi5pdGVtQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvdW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlMyA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaXNTY3JvbGxpbmcgPSBfdGhpcyRzdGF0ZTMuaXNTY3JvbGxpbmcsXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLnNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsT2Zmc2V0O1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEluZGV4ID0gZ2V0U3RhcnRJbmRleEZvck9mZnNldCh0aGlzLnByb3BzLCBzY3JvbGxPZmZzZXQsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIHN0b3BJbmRleCA9IGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgodGhpcy5wcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsT2Zmc2V0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuXG4gICAgICB2YXIgb3ZlcnNjYW5CYWNrd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KSA6IDE7XG4gICAgICB2YXIgb3ZlcnNjYW5Gb3J3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLCBzdGFydEluZGV4LCBzdG9wSW5kZXhdO1xuICAgIH07XG5cbiAgICByZXR1cm4gTGlzdDtcbiAgfShQdXJlQ29tcG9uZW50KSwgX2NsYXNzLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgbGF5b3V0OiAndmVydGljYWwnLFxuICAgIG92ZXJzY2FuQ291bnQ6IDIsXG4gICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlXG4gIH0sIF9jbGFzcztcbn0gLy8gTk9URTogSSBjb25zaWRlcmVkIGZ1cnRoZXIgd3JhcHBpbmcgaW5kaXZpZHVhbCBpdGVtcyB3aXRoIGEgcHVyZSBMaXN0SXRlbSBjb21wb25lbnQuXG4vLyBUaGlzIHdvdWxkIGF2b2lkIGV2ZXIgY2FsbGluZyB0aGUgcmVuZGVyIGZ1bmN0aW9uIGZvciB0aGUgc2FtZSBpbmRleCBtb3JlIHRoYW4gb25jZSxcbi8vIEJ1dCBpdCB3b3VsZCBhbHNvIGFkZCB0aGUgb3ZlcmhlYWQgb2YgYSBsb3Qgb2YgY29tcG9uZW50cy9maWJlcnMuXG4vLyBJIGFzc3VtZSBwZW9wbGUgYWxyZWFkeSBkbyB0aGlzIChyZW5kZXIgZnVuY3Rpb24gcmV0dXJuaW5nIGEgY2xhc3MgY29tcG9uZW50KSxcbi8vIFNvIG15IGRvaW5nIGl0IHdvdWxkIGp1c3QgdW5uZWNlc3NhcmlseSBkb3VibGUgdGhlIHdyYXBwZXJzLlxuXG52YXIgdmFsaWRhdGVTaGFyZWRQcm9wcyQxID0gZnVuY3Rpb24gdmFsaWRhdGVTaGFyZWRQcm9wcyhfcmVmMiwgX3JlZjMpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmMi5kaXJlY3Rpb24sXG4gICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQsXG4gICAgICBsYXlvdXQgPSBfcmVmMi5sYXlvdXQsXG4gICAgICBpbm5lclRhZ05hbWUgPSBfcmVmMi5pbm5lclRhZ05hbWUsXG4gICAgICBvdXRlclRhZ05hbWUgPSBfcmVmMi5vdXRlclRhZ05hbWUsXG4gICAgICB3aWR0aCA9IF9yZWYyLndpZHRoO1xuICB2YXIgaW5zdGFuY2UgPSBfcmVmMy5pbnN0YW5jZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSQxICYmICFkZXZXYXJuaW5nc1RhZ05hbWUkMS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZSQxLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIGlubmVyRWxlbWVudFR5cGUgYW5kIG91dGVyRWxlbWVudFR5cGUgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG5cbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIGlmIChkZXZXYXJuaW5nc0RpcmVjdGlvbiAmJiAhZGV2V2FybmluZ3NEaXJlY3Rpb24uaGFzKGluc3RhbmNlKSkge1xuICAgICAgICAgIGRldldhcm5pbmdzRGlyZWN0aW9uLmFkZChpbnN0YW5jZSk7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgZGlyZWN0aW9uIHByb3Agc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIChkZWZhdWx0KSBvciBcInJ0bFwiLiAnICsgJ1BsZWFzZSB1c2UgdGhlIGxheW91dCBwcm9wIHRvIHNwZWNpZnkgXCJ2ZXJ0aWNhbFwiIChkZWZhdWx0KSBvciBcImhvcml6b250YWxcIiBvcmllbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdsdHInOlxuICAgICAgY2FzZSAncnRsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICsgKFwiXFxcIlwiICsgZGlyZWN0aW9uICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGxheW91dCkge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJsYXlvdXRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwiaG9yaXpvbnRhbFwiIG9yIFwidmVydGljYWxcIi4gJyArIChcIlxcXCJcIiArIGxheW91dCArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBSZWFjdCBjb21wb25lbnQuICcgKyAoXCJcXFwiXCIgKyAoY2hpbGRyZW4gPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY2hpbGRyZW4pICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsICYmIHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdIb3Jpem9udGFsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgKyAoXCJcXFwiXCIgKyAod2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9IGVsc2UgaWYgKCFpc0hvcml6b250YWwgJiYgdHlwZW9mIGhlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmVydGljYWwgbGlzdHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciBoZWlnaHQuICcgKyAoXCJcXFwiXCIgKyAoaGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGhlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSQxID0gNTA7XG5cbnZhciBnZXRJdGVtTWV0YWRhdGEkMSA9IGZ1bmN0aW9uIGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgdmFyIF9yZWYgPSBwcm9wcyxcbiAgICAgIGl0ZW1TaXplID0gX3JlZi5pdGVtU2l6ZTtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4O1xuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZSA9IGl0ZW1TaXplKGkpO1xuICAgICAgaXRlbU1ldGFkYXRhTWFwW2ldID0ge1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfTtcbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbSQxID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtKHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4O1xuICB2YXIgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9IGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIGxhc3RNZWFzdXJlZEluZGV4LCAwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWF4KDAsIGxhc3RNZWFzdXJlZEluZGV4KSwgb2Zmc2V0KTtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKHByb3BzLCBpbnN0YW5jZVByb3BzLCBoaWdoLCBsb3csIG9mZnNldCkge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICB2YXIgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICB2YXIgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChwcm9wcywgaW5zdGFuY2VQcm9wcywgaW5kZXgsIG9mZnNldCkge1xuICB2YXIgaXRlbUNvdW50ID0gcHJvcHMuaXRlbUNvdW50O1xuICB2YXIgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChpbmRleCA8IGl0ZW1Db3VudCAmJiBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldCkge1xuICAgIGluZGV4ICs9IGludGVydmFsO1xuICAgIGludGVydmFsICo9IDI7XG4gIH1cblxuICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSwgTWF0aC5mbG9vcihpbmRleCAvIDIpLCBvZmZzZXQpO1xufTtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsU2l6ZSA9IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsU2l6ZShfcmVmMiwgX3JlZjMpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IF9yZWYyLml0ZW1Db3VudDtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCA9IF9yZWYzLml0ZW1NZXRhZGF0YU1hcCxcbiAgICAgIGVzdGltYXRlZEl0ZW1TaXplID0gX3JlZjMuZXN0aW1hdGVkSXRlbVNpemUsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCA9IF9yZWYzLmxhc3RNZWFzdXJlZEluZGV4O1xuICB2YXIgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gaXRlbUNvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpdGVtQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICB2YXIgbnVtVW5tZWFzdXJlZEl0ZW1zID0gaXRlbUNvdW50IC0gbGFzdE1lYXN1cmVkSW5kZXggLSAxO1xuICB2YXIgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRJdGVtU2l6ZTtcbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIFZhcmlhYmxlU2l6ZUxpc3QgPSAvKiNfX1BVUkVfXyovY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQ6IGZ1bmN0aW9uIGdldEl0ZW1PZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuICB9LFxuICBnZXRJdGVtU2l6ZTogZnVuY3Rpb24gZ2V0SXRlbVNpemUocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwW2luZGV4XS5zaXplO1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodCxcbiAgICAgICAgbGF5b3V0ID0gcHJvcHMubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpOyAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAgIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG5cbiAgICB2YXIgZXN0aW1hdGVkVG90YWxTaXplID0gZ2V0RXN0aW1hdGVkVG90YWxTaXplKHByb3BzLCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZXN0aW1hdGVkVG90YWxTaXplIC0gc2l6ZSwgaXRlbU1ldGFkYXRhLm9mZnNldCkpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBpdGVtTWV0YWRhdGEub2Zmc2V0IC0gc2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplICsgc2Nyb2xsYmFyU2l6ZSk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZSkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KHByb3BzLCBvZmZzZXQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCk7XG4gIH0sXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgocHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciBkaXJlY3Rpb24gPSBwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodCxcbiAgICAgICAgaXRlbUNvdW50ID0gcHJvcHMuaXRlbUNvdW50LFxuICAgICAgICBsYXlvdXQgPSBwcm9wcy5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gcHJvcHMud2lkdGg7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0ICsgc2l6ZTtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGl0ZW1Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcywgaW5zdGFuY2UpIHtcbiAgICB2YXIgX3JlZjQgPSBwcm9wcyxcbiAgICAgICAgZXN0aW1hdGVkSXRlbVNpemUgPSBfcmVmNC5lc3RpbWF0ZWRJdGVtU2l6ZTtcbiAgICB2YXIgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZTogZXN0aW1hdGVkSXRlbVNpemUgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFJDEsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleDogLTFcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGV4ID0gZnVuY3Rpb24gKGluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCwgaW5kZXggLSAxKTsgLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogZmFsc2UsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjUpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmNS5pdGVtU2l6ZTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW1TaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArIChcIlxcXCJcIiArIChpdGVtU2l6ZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBpdGVtU2l6ZSkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbnZhciBGaXhlZFNpemVHcmlkID0gLyojX19QVVJFX18qL2NyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtbk9mZnNldChfcmVmLCBpbmRleCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYuY29sdW1uV2lkdGg7XG4gICAgcmV0dXJuIGluZGV4ICogY29sdW1uV2lkdGg7XG4gIH0sXG4gIGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiBnZXRDb2x1bW5XaWR0aChfcmVmMiwgaW5kZXgpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmMi5jb2x1bW5XaWR0aDtcbiAgICByZXR1cm4gY29sdW1uV2lkdGg7XG4gIH0sXG4gIGdldFJvd09mZnNldDogZnVuY3Rpb24gZ2V0Um93T2Zmc2V0KF9yZWYzLCBpbmRleCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmMy5yb3dIZWlnaHQ7XG4gICAgcmV0dXJuIGluZGV4ICogcm93SGVpZ2h0O1xuICB9LFxuICBnZXRSb3dIZWlnaHQ6IGZ1bmN0aW9uIGdldFJvd0hlaWdodChfcmVmNCwgaW5kZXgpIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjQucm93SGVpZ2h0O1xuICAgIHJldHVybiByb3dIZWlnaHQ7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChfcmVmNSkge1xuICAgIHZhciByb3dDb3VudCA9IF9yZWY1LnJvd0NvdW50LFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmNS5yb3dIZWlnaHQ7XG4gICAgcmV0dXJuIHJvd0hlaWdodCAqIHJvd0NvdW50O1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKF9yZWY2KSB7XG4gICAgdmFyIGNvbHVtbkNvdW50ID0gX3JlZjYuY29sdW1uQ291bnQsXG4gICAgICAgIGNvbHVtbldpZHRoID0gX3JlZjYuY29sdW1uV2lkdGg7XG4gICAgcmV0dXJuIGNvbHVtbldpZHRoICogY29sdW1uQ291bnQ7XG4gIH0sXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KF9yZWY3LCBjb2x1bW5JbmRleCwgYWxpZ24sIHNjcm9sbExlZnQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgY29sdW1uQ291bnQgPSBfcmVmNy5jb2x1bW5Db3VudCxcbiAgICAgICAgY29sdW1uV2lkdGggPSBfcmVmNy5jb2x1bW5XaWR0aCxcbiAgICAgICAgd2lkdGggPSBfcmVmNy53aWR0aDtcbiAgICB2YXIgbGFzdENvbHVtbk9mZnNldCA9IE1hdGgubWF4KDAsIGNvbHVtbkNvdW50ICogY29sdW1uV2lkdGggLSB3aWR0aCk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWluKGxhc3RDb2x1bW5PZmZzZXQsIGNvbHVtbkluZGV4ICogY29sdW1uV2lkdGgpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBjb2x1bW5JbmRleCAqIGNvbHVtbldpZHRoIC0gd2lkdGggKyBzY3JvbGxiYXJTaXplICsgY29sdW1uV2lkdGgpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgLSB3aWR0aCAmJiBzY3JvbGxMZWZ0IDw9IG1heE9mZnNldCArIHdpZHRoKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdENvbHVtbk9mZnNldCArIE1hdGguZmxvb3Iod2lkdGggLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0Q29sdW1uT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbExlZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbExlZnQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQoX3JlZjgsIHJvd0luZGV4LCBhbGlnbiwgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWY4LnJvd0hlaWdodCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjguaGVpZ2h0LFxuICAgICAgICByb3dDb3VudCA9IF9yZWY4LnJvd0NvdW50O1xuICAgIHZhciBsYXN0Um93T2Zmc2V0ID0gTWF0aC5tYXgoMCwgcm93Q291bnQgKiByb3dIZWlnaHQgLSBoZWlnaHQpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1pbihsYXN0Um93T2Zmc2V0LCByb3dJbmRleCAqIHJvd0hlaWdodCk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIHJvd0luZGV4ICogcm93SGVpZ2h0IC0gaGVpZ2h0ICsgc2Nyb2xsYmFyU2l6ZSArIHJvd0hlaWdodCk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0IC0gaGVpZ2h0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQgKyBoZWlnaHQpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdFJvd09mZnNldCArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdFJvd09mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsVG9wO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxUb3AgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChfcmVmOSwgc2Nyb2xsTGVmdCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWY5LmNvbHVtbldpZHRoLFxuICAgICAgICBjb2x1bW5Db3VudCA9IF9yZWY5LmNvbHVtbkNvdW50O1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIE1hdGguZmxvb3Ioc2Nyb2xsTGVmdCAvIGNvbHVtbldpZHRoKSkpO1xuICB9LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KF9yZWYxMCwgc3RhcnRJbmRleCwgc2Nyb2xsTGVmdCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYxMC5jb2x1bW5XaWR0aCxcbiAgICAgICAgY29sdW1uQ291bnQgPSBfcmVmMTAuY29sdW1uQ291bnQsXG4gICAgICAgIHdpZHRoID0gX3JlZjEwLndpZHRoO1xuICAgIHZhciBsZWZ0ID0gc3RhcnRJbmRleCAqIGNvbHVtbldpZHRoO1xuICAgIHZhciBudW1WaXNpYmxlQ29sdW1ucyA9IE1hdGguY2VpbCgod2lkdGggKyBzY3JvbGxMZWZ0IC0gbGVmdCkgLyBjb2x1bW5XaWR0aCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgc3RhcnRJbmRleCArIG51bVZpc2libGVDb2x1bW5zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQoX3JlZjExLCBzY3JvbGxUb3ApIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjExLnJvd0hlaWdodCxcbiAgICAgICAgcm93Q291bnQgPSBfcmVmMTEucm93Q291bnQ7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgTWF0aC5mbG9vcihzY3JvbGxUb3AgLyByb3dIZWlnaHQpKSk7XG4gIH0sXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgoX3JlZjEyLCBzdGFydEluZGV4LCBzY3JvbGxUb3ApIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjEyLnJvd0hlaWdodCxcbiAgICAgICAgcm93Q291bnQgPSBfcmVmMTIucm93Q291bnQsXG4gICAgICAgIGhlaWdodCA9IF9yZWYxMi5oZWlnaHQ7XG4gICAgdmFyIHRvcCA9IHN0YXJ0SW5kZXggKiByb3dIZWlnaHQ7XG4gICAgdmFyIG51bVZpc2libGVSb3dzID0gTWF0aC5jZWlsKChoZWlnaHQgKyBzY3JvbGxUb3AgLSB0b3ApIC8gcm93SGVpZ2h0KTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZVJvd3MgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICApKTtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzKSB7Ly8gTm9vcFxuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiB0cnVlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWYxMykge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYxMy5jb2x1bW5XaWR0aCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjEzLnJvd0hlaWdodDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbldpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICsgKFwiXFxcIlwiICsgKGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArIChcIlxcXCJcIiArIChyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxudmFyIEZpeGVkU2l6ZUxpc3QgPSAvKiNfX1BVUkVfXyovY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQ6IGZ1bmN0aW9uIGdldEl0ZW1PZmZzZXQoX3JlZiwgaW5kZXgpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmLml0ZW1TaXplO1xuICAgIHJldHVybiBpbmRleCAqIGl0ZW1TaXplO1xuICB9LFxuICBnZXRJdGVtU2l6ZTogZnVuY3Rpb24gZ2V0SXRlbVNpemUoX3JlZjIsIGluZGV4KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZjIuaXRlbVNpemU7XG4gICAgcmV0dXJuIGl0ZW1TaXplO1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsU2l6ZShfcmVmMykge1xuICAgIHZhciBpdGVtQ291bnQgPSBfcmVmMy5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjMuaXRlbVNpemU7XG4gICAgcmV0dXJuIGl0ZW1TaXplICogaXRlbUNvdW50O1xuICB9LFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoX3JlZjQsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IF9yZWY0LmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjQuaGVpZ2h0LFxuICAgICAgICBpdGVtQ291bnQgPSBfcmVmNC5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjQuaXRlbVNpemUsXG4gICAgICAgIGxheW91dCA9IF9yZWY0LmxheW91dCxcbiAgICAgICAgd2lkdGggPSBfcmVmNC53aWR0aDtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgbGFzdEl0ZW1PZmZzZXQgPSBNYXRoLm1heCgwLCBpdGVtQ291bnQgKiBpdGVtU2l6ZSAtIHNpemUpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1pbihsYXN0SXRlbU9mZnNldCwgaW5kZXggKiBpdGVtU2l6ZSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGluZGV4ICogaXRlbVNpemUgLSBzaXplICsgaXRlbVNpemUgKyBzY3JvbGxiYXJTaXplKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbChzaXplIC8gMikpIHtcbiAgICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RJdGVtT2Zmc2V0ICsgTWF0aC5mbG9vcihzaXplIC8gMikpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0SXRlbU9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQoX3JlZjUsIG9mZnNldCkge1xuICAgIHZhciBpdGVtQ291bnQgPSBfcmVmNS5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjUuaXRlbVNpemU7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIE1hdGguZmxvb3Iob2Zmc2V0IC8gaXRlbVNpemUpKSk7XG4gIH0sXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgoX3JlZjYsIHN0YXJ0SW5kZXgsIHNjcm9sbE9mZnNldCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBfcmVmNi5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IF9yZWY2LmhlaWdodCxcbiAgICAgICAgaXRlbUNvdW50ID0gX3JlZjYuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWY2Lml0ZW1TaXplLFxuICAgICAgICBsYXlvdXQgPSBfcmVmNi5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gX3JlZjYud2lkdGg7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBvZmZzZXQgPSBzdGFydEluZGV4ICogaXRlbVNpemU7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgbnVtVmlzaWJsZUl0ZW1zID0gTWF0aC5jZWlsKChzaXplICsgc2Nyb2xsT2Zmc2V0IC0gb2Zmc2V0KSAvIGl0ZW1TaXplKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RhcnRJbmRleCArIG51bVZpc2libGVJdGVtcyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICkpO1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMpIHsvLyBOb29wXG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjcpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmNy5pdGVtU2l6ZTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW1TaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICsgKFwiXFxcIlwiICsgKGl0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxuLy8gUHVsbGVkIGZyb20gcmVhY3QtY29tcGF0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvYmxvYi83YzVkZTAwZTdjODVlMmZmZDAxMWJmM2FmMDI4OTliNjNmNjk5ZDNhL3NyYy9pbmRleC5qcyNMMzQ5XG5mdW5jdGlvbiBzaGFsbG93RGlmZmVycyhwcmV2LCBuZXh0KSB7XG4gIGZvciAodmFyIGF0dHJpYnV0ZSBpbiBwcmV2KSB7XG4gICAgaWYgKCEoYXR0cmlidXRlIGluIG5leHQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfYXR0cmlidXRlIGluIG5leHQpIHtcbiAgICBpZiAocHJldltfYXR0cmlidXRlXSAhPT0gbmV4dFtfYXR0cmlidXRlXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wic3R5bGVcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcInN0eWxlXCJdO1xuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdG1lbW9cblxuZnVuY3Rpb24gYXJlRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcbiAgdmFyIHByZXZTdHlsZSA9IHByZXZQcm9wcy5zdHlsZSxcbiAgICAgIHByZXZSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJldlByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBuZXh0U3R5bGUgPSBuZXh0UHJvcHMuc3R5bGUsXG4gICAgICBuZXh0UmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG5leHRQcm9wcywgX2V4Y2x1ZGVkMik7XG5cbiAgcmV0dXJuICFzaGFsbG93RGlmZmVycyhwcmV2U3R5bGUsIG5leHRTdHlsZSkgJiYgIXNoYWxsb3dEaWZmZXJzKHByZXZSZXN0LCBuZXh0UmVzdCk7XG59XG5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtY29tcG9uZW50Lmh0bWwjc2hvdWxkY29tcG9uZW50dXBkYXRlXG5cbmZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICByZXR1cm4gIWFyZUVxdWFsKHRoaXMucHJvcHMsIG5leHRQcm9wcykgfHwgc2hhbGxvd0RpZmZlcnModGhpcy5zdGF0ZSwgbmV4dFN0YXRlKTtcbn1cblxuZXhwb3J0IHsgRml4ZWRTaXplR3JpZCwgRml4ZWRTaXplTGlzdCwgVmFyaWFibGVTaXplR3JpZCwgVmFyaWFibGVTaXplTGlzdCwgYXJlRXF1YWwsIHNob3VsZENvbXBvbmVudFVwZGF0ZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguZXNtLmpzLm1hcFxuIiwiLyoqISBcbiAqIGhvdGtleXMtanMgdjMuOS4zIFxuICogQSBzaW1wbGUgbWljcm8tbGlicmFyeSBmb3IgZGVmaW5pbmcgYW5kIGRpc3BhdGNoaW5nIGtleWJvYXJkIHNob3J0Y3V0cy4gSXQgaGFzIG5vIGRlcGVuZGVuY2llcy4gXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAyMiBrZW5ueSB3b25nIDx3b3dvaG9vQHFxLmNvbT4gXG4gKiBodHRwOi8vamF5d2NqbG92ZS5naXRodWIuaW8vaG90a2V5cyBcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBcbiAqL1xuXG52YXIgaXNmZiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnID8gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IDAgOiBmYWxzZTsgLy8g57uR5a6a5LqL5Lu2XG5cbmZ1bmN0aW9uIGFkZEV2ZW50KG9iamVjdCwgZXZlbnQsIG1ldGhvZCwgdXNlQ2FwdHVyZSkge1xuICBpZiAob2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKTtcbiAgfSBlbHNlIGlmIChvYmplY3QuYXR0YWNoRXZlbnQpIHtcbiAgICBvYmplY3QuYXR0YWNoRXZlbnQoXCJvblwiLmNvbmNhdChldmVudCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1ldGhvZCh3aW5kb3cuZXZlbnQpO1xuICAgIH0pO1xuICB9XG59IC8vIOS/rumlsOmUrui9rOaNouaIkOWvueW6lOeahOmUrueggVxuXG5cbmZ1bmN0aW9uIGdldE1vZHMobW9kaWZpZXIsIGtleSkge1xuICB2YXIgbW9kcyA9IGtleS5zbGljZSgwLCBrZXkubGVuZ3RoIC0gMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgbW9kc1tpXSA9IG1vZGlmaWVyW21vZHNbaV0udG9Mb3dlckNhc2UoKV07XG4gIH1cblxuICByZXR1cm4gbW9kcztcbn0gLy8g5aSE55CG5Lyg55qEa2V55a2X56ym5Liy6L2s5o2i5oiQ5pWw57uEXG5cblxuZnVuY3Rpb24gZ2V0S2V5cyhrZXkpIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBrZXkgPSAnJztcbiAga2V5ID0ga2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7IC8vIOWMuemFjeS7u+S9leepuueZveWtl+espizljIXmi6znqbrmoLzjgIHliLbooajnrKbjgIHmjaLpobXnrKbnrYnnrYlcblxuICB2YXIga2V5cyA9IGtleS5zcGxpdCgnLCcpOyAvLyDlkIzml7borr7nva7lpJrkuKrlv6vmjbfplK7vvIzku6UnLCfliIblibJcblxuICB2YXIgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTsgLy8g5b+r5o236ZSu5Y+v6IO95YyF5ZCrJywn77yM6ZyA54m55q6K5aSE55CGXG5cbiAgZm9yICg7IGluZGV4ID49IDA7KSB7XG4gICAga2V5c1tpbmRleCAtIDFdICs9ICcsJztcbiAgICBrZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufSAvLyDmr5TovoPkv67ppbDplK7nmoTmlbDnu4RcblxuXG5mdW5jdGlvbiBjb21wYXJlQXJyYXkoYTEsIGEyKSB7XG4gIHZhciBhcnIxID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGExIDogYTI7XG4gIHZhciBhcnIyID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGEyIDogYTE7XG4gIHZhciBpc0luZGV4ID0gdHJ1ZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyMi5pbmRleE9mKGFycjFbaV0pID09PSAtMSkgaXNJbmRleCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzSW5kZXg7XG59XG5cbnZhciBfa2V5TWFwID0ge1xuICBiYWNrc3BhY2U6IDgsXG4gIHRhYjogOSxcbiAgY2xlYXI6IDEyLFxuICBlbnRlcjogMTMsXG4gIHJldHVybjogMTMsXG4gIGVzYzogMjcsXG4gIGVzY2FwZTogMjcsXG4gIHNwYWNlOiAzMixcbiAgbGVmdDogMzcsXG4gIHVwOiAzOCxcbiAgcmlnaHQ6IDM5LFxuICBkb3duOiA0MCxcbiAgZGVsOiA0NixcbiAgZGVsZXRlOiA0NixcbiAgaW5zOiA0NSxcbiAgaW5zZXJ0OiA0NSxcbiAgaG9tZTogMzYsXG4gIGVuZDogMzUsXG4gIHBhZ2V1cDogMzMsXG4gIHBhZ2Vkb3duOiAzNCxcbiAgY2Fwc2xvY2s6IDIwLFxuICBudW1fMDogOTYsXG4gIG51bV8xOiA5NyxcbiAgbnVtXzI6IDk4LFxuICBudW1fMzogOTksXG4gIG51bV80OiAxMDAsXG4gIG51bV81OiAxMDEsXG4gIG51bV82OiAxMDIsXG4gIG51bV83OiAxMDMsXG4gIG51bV84OiAxMDQsXG4gIG51bV85OiAxMDUsXG4gIG51bV9tdWx0aXBseTogMTA2LFxuICBudW1fYWRkOiAxMDcsXG4gIG51bV9lbnRlcjogMTA4LFxuICBudW1fc3VidHJhY3Q6IDEwOSxcbiAgbnVtX2RlY2ltYWw6IDExMCxcbiAgbnVtX2RpdmlkZTogMTExLFxuICAn4oeqJzogMjAsXG4gICcsJzogMTg4LFxuICAnLic6IDE5MCxcbiAgJy8nOiAxOTEsXG4gICdgJzogMTkyLFxuICAnLSc6IGlzZmYgPyAxNzMgOiAxODksXG4gICc9JzogaXNmZiA/IDYxIDogMTg3LFxuICAnOyc6IGlzZmYgPyA1OSA6IDE4NixcbiAgJ1xcJyc6IDIyMixcbiAgJ1snOiAyMTksXG4gICddJzogMjIxLFxuICAnXFxcXCc6IDIyMFxufTsgLy8gTW9kaWZpZXIgS2V5c1xuXG52YXIgX21vZGlmaWVyID0ge1xuICAvLyBzaGlmdEtleVxuICAn4oenJzogMTYsXG4gIHNoaWZ0OiAxNixcbiAgLy8gYWx0S2V5XG4gICfijKUnOiAxOCxcbiAgYWx0OiAxOCxcbiAgb3B0aW9uOiAxOCxcbiAgLy8gY3RybEtleVxuICAn4oyDJzogMTcsXG4gIGN0cmw6IDE3LFxuICBjb250cm9sOiAxNyxcbiAgLy8gbWV0YUtleVxuICAn4oyYJzogOTEsXG4gIGNtZDogOTEsXG4gIGNvbW1hbmQ6IDkxXG59O1xudmFyIG1vZGlmaWVyTWFwID0ge1xuICAxNjogJ3NoaWZ0S2V5JyxcbiAgMTg6ICdhbHRLZXknLFxuICAxNzogJ2N0cmxLZXknLFxuICA5MTogJ21ldGFLZXknLFxuICBzaGlmdEtleTogMTYsXG4gIGN0cmxLZXk6IDE3LFxuICBhbHRLZXk6IDE4LFxuICBtZXRhS2V5OiA5MVxufTtcbnZhciBfbW9kcyA9IHtcbiAgMTY6IGZhbHNlLFxuICAxODogZmFsc2UsXG4gIDE3OiBmYWxzZSxcbiAgOTE6IGZhbHNlXG59O1xudmFyIF9oYW5kbGVycyA9IHt9OyAvLyBGMX5GMTIgc3BlY2lhbCBrZXlcblxuZm9yICh2YXIgayA9IDE7IGsgPCAyMDsgaysrKSB7XG4gIF9rZXlNYXBbXCJmXCIuY29uY2F0KGspXSA9IDExMSArIGs7XG59XG5cbnZhciBfZG93bktleXMgPSBbXTsgLy8g6K6w5b2V5pGB5LiL55qE57uR5a6a6ZSuXG5cbnZhciB3aW5MaXN0ZW5kRm9jdXMgPSBmYWxzZTsgLy8gd2luZG935piv5ZCm5bey57uP55uR5ZCs5LqGZm9jdXPkuovku7ZcblxudmFyIF9zY29wZSA9ICdhbGwnOyAvLyDpu5jorqTng63plK7ojIPlm7RcblxudmFyIGVsZW1lbnRIYXNCaW5kRXZlbnQgPSBbXTsgLy8g5bey57uR5a6a5LqL5Lu255qE6IqC54K56K6w5b2VXG4vLyDov5Tlm57plK7noIFcblxudmFyIGNvZGUgPSBmdW5jdGlvbiBjb2RlKHgpIHtcbiAgcmV0dXJuIF9rZXlNYXBbeC50b0xvd2VyQ2FzZSgpXSB8fCBfbW9kaWZpZXJbeC50b0xvd2VyQ2FzZSgpXSB8fCB4LnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKTtcbn07IC8vIOiuvue9ruiOt+WPluW9k+WJjeiMg+WbtO+8iOm7mOiupOS4uifmiYDmnIkn77yJXG5cblxuZnVuY3Rpb24gc2V0U2NvcGUoc2NvcGUpIHtcbiAgX3Njb3BlID0gc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluW9k+WJjeiMg+WbtFxuXG5cbmZ1bmN0aW9uIGdldFNjb3BlKCkge1xuICByZXR1cm4gX3Njb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5bmkYHkuIvnu5HlrprplK7nmoTplK7lgLxcblxuXG5mdW5jdGlvbiBnZXRQcmVzc2VkS2V5Q29kZXMoKSB7XG4gIHJldHVybiBfZG93bktleXMuc2xpY2UoMCk7XG59IC8vIOihqOWNleaOp+S7tuaOp+S7tuWIpOaWrSDov5Tlm54gQm9vbGVhblxuLy8gaG90a2V5IGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gZmlsdGVyIHJldHVybiB0cnVlXG5cblxuZnVuY3Rpb24gZmlsdGVyKGV2ZW50KSB7XG4gIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgdmFyIHRhZ05hbWUgPSB0YXJnZXQudGFnTmFtZTtcbiAgdmFyIGZsYWcgPSB0cnVlOyAvLyBpZ25vcmU6IGlzQ29udGVudEVkaXRhYmxlID09PSAndHJ1ZScsIDxpbnB1dD4gYW5kIDx0ZXh0YXJlYT4gd2hlbiByZWFkT25seSBzdGF0ZSBpcyBmYWxzZSwgPHNlbGVjdD5cblxuICBpZiAodGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlIHx8ICh0YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgdGFnTmFtZSA9PT0gJ1NFTEVDVCcpICYmICF0YXJnZXQucmVhZE9ubHkpIHtcbiAgICBmbGFnID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmxhZztcbn0gLy8g5Yik5pat5pGB5LiL55qE6ZSu5piv5ZCm5Li65p+Q5Liq6ZSu77yM6L+U5ZuedHJ1ZeaIluiAhWZhbHNlXG5cblxuZnVuY3Rpb24gaXNQcmVzc2VkKGtleUNvZGUpIHtcbiAgaWYgKHR5cGVvZiBrZXlDb2RlID09PSAnc3RyaW5nJykge1xuICAgIGtleUNvZGUgPSBjb2RlKGtleUNvZGUpOyAvLyDovazmjaLmiJDplK7noIFcbiAgfVxuXG4gIHJldHVybiBfZG93bktleXMuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTE7XG59IC8vIOW+queOr+WIoOmZpGhhbmRsZXJz5Lit55qE5omA5pyJIHNjb3BlKOiMg+WbtClcblxuXG5mdW5jdGlvbiBkZWxldGVTY29wZShzY29wZSwgbmV3U2NvcGUpIHtcbiAgdmFyIGhhbmRsZXJzO1xuICB2YXIgaTsgLy8g5rKh5pyJ5oyH5a6ac2NvcGXvvIzojrflj5ZzY29wZVxuXG4gIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gX2hhbmRsZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfaGFuZGxlcnMsIGtleSkpIHtcbiAgICAgIGhhbmRsZXJzID0gX2hhbmRsZXJzW2tleV07XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7KSB7XG4gICAgICAgIGlmIChoYW5kbGVyc1tpXS5zY29wZSA9PT0gc2NvcGUpIGhhbmRsZXJzLnNwbGljZShpLCAxKTtlbHNlIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8g5aaC5p6cc2NvcGXooqvliKDpmaTvvIzlsIZzY29wZemHjee9ruS4umFsbFxuXG5cbiAgaWYgKGdldFNjb3BlKCkgPT09IHNjb3BlKSBzZXRTY29wZShuZXdTY29wZSB8fCAnYWxsJyk7XG59IC8vIOa4hemZpOS/rumlsOmUrlxuXG5cbmZ1bmN0aW9uIGNsZWFyTW9kaWZpZXIoZXZlbnQpIHtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7XG5cbiAgdmFyIGkgPSBfZG93bktleXMuaW5kZXhPZihrZXkpOyAvLyDku47liJfooajkuK3muIXpmaTmjInljovov4fnmoTplK5cblxuXG4gIGlmIChpID49IDApIHtcbiAgICBfZG93bktleXMuc3BsaWNlKGksIDEpO1xuICB9IC8vIOeJueauiuWkhOeQhiBjbW1hbmQg6ZSu77yM5ZyoIGNtbWFuZCDnu4TlkIjlv6vmjbfplK4ga2V5dXAg5Y+q5omn6KGM5LiA5qyh55qE6Zeu6aKYXG5cblxuICBpZiAoZXZlbnQua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbWV0YScpIHtcbiAgICBfZG93bktleXMuc3BsaWNlKDAsIF9kb3duS2V5cy5sZW5ndGgpO1xuICB9IC8vIOS/rumlsOmUriBzaGlmdEtleSBhbHRLZXkgY3RybEtleSAoY29tbWFuZHx8bWV0YUtleSkg5riF6ZmkXG5cblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSBmYWxzZTsgLy8g5bCG5L+u6aWw6ZSu6YeN572u5Li6ZmFsc2VcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5iaW5kKGtleXNJbmZvKSB7XG4gIC8vIHVuYmluZCgpLCB1bmJpbmQgYWxsIGtleXNcbiAgaWYgKCFrZXlzSW5mbykge1xuICAgIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gZGVsZXRlIF9oYW5kbGVyc1trZXldO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5c0luZm8pKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIDogdW5iaW5kKFt7a2V5OiAnY3RybCthJywgc2NvcGU6ICdzMSd9LCB7a2V5OiAnY3RybC1hJywgc2NvcGU6ICdzMicsIHNwbGl0S2V5OiAnLSd9XSlcbiAgICBrZXlzSW5mby5mb3JFYWNoKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICBpZiAoaW5mby5rZXkpIGVhY2hVbmJpbmQoaW5mbyk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnb2JqZWN0Jykge1xuICAgIC8vIHN1cHBvcnQgbGlrZSB1bmJpbmQoe2tleTogJ2N0cmwrYSwgY3RybCtiJywgc2NvcGU6J2FiYyd9KVxuICAgIGlmIChrZXlzSW5mby5rZXkpIGVhY2hVbmJpbmQoa2V5c0luZm8pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IG9sZCBtZXRob2RcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdmFyIHNjb3BlID0gYXJnc1swXSxcbiAgICAgICAgbWV0aG9kID0gYXJnc1sxXTtcblxuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1ldGhvZCA9IHNjb3BlO1xuICAgICAgc2NvcGUgPSAnJztcbiAgICB9XG5cbiAgICBlYWNoVW5iaW5kKHtcbiAgICAgIGtleToga2V5c0luZm8sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHNwbGl0S2V5OiAnKydcbiAgICB9KTtcbiAgfVxufSAvLyDop6PpmaTnu5Hlrprmn5DkuKrojIPlm7TnmoTlv6vmjbfplK5cblxuXG52YXIgZWFjaFVuYmluZCA9IGZ1bmN0aW9uIGVhY2hVbmJpbmQoX3JlZikge1xuICB2YXIga2V5ID0gX3JlZi5rZXksXG4gICAgICBzY29wZSA9IF9yZWYuc2NvcGUsXG4gICAgICBtZXRob2QgPSBfcmVmLm1ldGhvZCxcbiAgICAgIF9yZWYkc3BsaXRLZXkgPSBfcmVmLnNwbGl0S2V5LFxuICAgICAgc3BsaXRLZXkgPSBfcmVmJHNwbGl0S2V5ID09PSB2b2lkIDAgPyAnKycgOiBfcmVmJHNwbGl0S2V5O1xuICB2YXIgbXVsdGlwbGVLZXlzID0gZ2V0S2V5cyhrZXkpO1xuICBtdWx0aXBsZUtleXMuZm9yRWFjaChmdW5jdGlvbiAob3JpZ2luS2V5KSB7XG4gICAgdmFyIHVuYmluZEtleXMgPSBvcmlnaW5LZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgIHZhciBsZW4gPSB1bmJpbmRLZXlzLmxlbmd0aDtcbiAgICB2YXIgbGFzdEtleSA9IHVuYmluZEtleXNbbGVuIC0gMV07XG4gICAgdmFyIGtleUNvZGUgPSBsYXN0S2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGxhc3RLZXkpO1xuICAgIGlmICghX2hhbmRsZXJzW2tleUNvZGVdKSByZXR1cm47IC8vIOWIpOaWreaYr+WQpuS8oOWFpeiMg+WbtO+8jOayoeacieWwseiOt+WPluiMg+WbtFxuXG4gICAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIHZhciBtb2RzID0gbGVuID4gMSA/IGdldE1vZHMoX21vZGlmaWVyLCB1bmJpbmRLZXlzKSA6IFtdO1xuICAgIF9oYW5kbGVyc1trZXlDb2RlXSA9IF9oYW5kbGVyc1trZXlDb2RlXS5maWx0ZXIoZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgLy8g6YCa6L+H5Ye95pWw5Yik5pat77yM5piv5ZCm6Kej6Zmk57uR5a6a77yM5Ye95pWw55u4562J55u05o6l6L+U5ZueXG4gICAgICB2YXIgaXNNYXRjaGluZ01ldGhvZCA9IG1ldGhvZCA/IHJlY29yZC5tZXRob2QgPT09IG1ldGhvZCA6IHRydWU7XG4gICAgICByZXR1cm4gIShpc01hdGNoaW5nTWV0aG9kICYmIHJlY29yZC5zY29wZSA9PT0gc2NvcGUgJiYgY29tcGFyZUFycmF5KHJlY29yZC5tb2RzLCBtb2RzKSk7XG4gICAgfSk7XG4gIH0pO1xufTsgLy8g5a+555uR5ZCs5a+55bqU5b+r5o236ZSu55qE5Zue6LCD5Ye95pWw6L+b6KGM5aSE55CGXG5cblxuZnVuY3Rpb24gZXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBzY29wZSwgZWxlbWVudCkge1xuICBpZiAoaGFuZGxlci5lbGVtZW50ICE9PSBlbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1vZGlmaWVyc01hdGNoOyAvLyDnnIvlroPmmK/lkKblnKjlvZPliY3ojIPlm7RcblxuICBpZiAoaGFuZGxlci5zY29wZSA9PT0gc2NvcGUgfHwgaGFuZGxlci5zY29wZSA9PT0gJ2FsbCcpIHtcbiAgICAvLyDmo4Dmn6XmmK/lkKbljLnphY3kv67ppbDnrKbvvIjlpoLmnpzmnInov5Tlm550cnVl77yJXG4gICAgbW9kaWZpZXJzTWF0Y2ggPSBoYW5kbGVyLm1vZHMubGVuZ3RoID4gMDtcblxuICAgIGZvciAodmFyIHkgaW4gX21vZHMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIHkpKSB7XG4gICAgICAgIGlmICghX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID4gLTEgfHwgX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID09PSAtMSkge1xuICAgICAgICAgIG1vZGlmaWVyc01hdGNoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIOiwg+eUqOWkhOeQhueoi+W6j++8jOWmguaenOaYr+S/rumlsOmUruS4jeWBmuWkhOeQhlxuXG5cbiAgICBpZiAoaGFuZGxlci5tb2RzLmxlbmd0aCA9PT0gMCAmJiAhX21vZHNbMTZdICYmICFfbW9kc1sxOF0gJiYgIV9tb2RzWzE3XSAmJiAhX21vZHNbOTFdIHx8IG1vZGlmaWVyc01hdGNoIHx8IGhhbmRsZXIuc2hvcnRjdXQgPT09ICcqJykge1xuICAgICAgaWYgKGhhbmRsZXIubWV0aG9kKGV2ZW50LCBoYW5kbGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChldmVudC5jYW5jZWxCdWJibGUpIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWkhOeQhmtleWRvd27kuovku7ZcblxuXG5mdW5jdGlvbiBkaXNwYXRjaChldmVudCwgZWxlbWVudCkge1xuICB2YXIgYXN0ZXJpc2sgPSBfaGFuZGxlcnNbJyonXTtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7IC8vIOihqOWNleaOp+S7tui/h+a7pCDpu5jorqTooajljZXmjqfku7bkuI3op6blj5Hlv6vmjbfplK5cblxuICBpZiAoIWhvdGtleXMuZmlsdGVyLmNhbGwodGhpcywgZXZlbnQpKSByZXR1cm47IC8vIEdlY2tvKEZpcmVmb3gp55qEY29tbWFuZOmUruWAvDIyNO+8jOWcqFdlYmtpdChDaHJvbWUp5Lit5L+d5oyB5LiA6Ie0XG4gIC8vIFdlYmtpdOW3puWPsyBjb21tYW5kIOmUruWAvOS4jeS4gOagt1xuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcbiAgLyoqXG4gICAqIENvbGxlY3QgYm91bmQga2V5c1xuICAgKiBJZiBhbiBJbnB1dCBNZXRob2QgRWRpdG9yIGlzIHByb2Nlc3Npbmcga2V5IGlucHV0IGFuZCB0aGUgZXZlbnQgaXMga2V5ZG93biwgcmV0dXJuIDIyOS5cbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjUwNDM5MzQvaXMtaXQtb2stdG8taWdub3JlLWtleWRvd24tZXZlbnRzLXdpdGgta2V5Y29kZS0yMjlcbiAgICogaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvd3d3LWRvbS8yMDEwSnVsU2VwL2F0dC0wMTgyL2tleUNvZGUtc3BlYy5odG1sXG4gICAqL1xuXG4gIGlmIChfZG93bktleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJiBrZXkgIT09IDIyOSkgX2Rvd25LZXlzLnB1c2goa2V5KTtcbiAgLyoqXG4gICAqIEplc3QgdGVzdCBjYXNlcyBhcmUgcmVxdWlyZWQuXG4gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICovXG5cbiAgWydjdHJsS2V5JywgJ2FsdEtleScsICdzaGlmdEtleScsICdtZXRhS2V5J10uZm9yRWFjaChmdW5jdGlvbiAoa2V5TmFtZSkge1xuICAgIHZhciBrZXlOdW0gPSBtb2RpZmllck1hcFtrZXlOYW1lXTtcblxuICAgIGlmIChldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goa2V5TnVtKTtcbiAgICB9IGVsc2UgaWYgKCFldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID4gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5zcGxpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSwgMSk7XG4gICAgfSBlbHNlIGlmIChrZXlOYW1lID09PSAnbWV0YUtleScgJiYgZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmxlbmd0aCA9PT0gMykge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXggaWYgQ29tbWFuZCBpcyBwcmVzc2VkOlxuICAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICovXG4gICAgICBpZiAoIShldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmFsdEtleSkpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gX2Rvd25LZXlzLnNsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gdHJ1ZTsgLy8g5bCG54m55q6K5a2X56ym55qEa2V55rOo5YaM5YiwIGhvdGtleXMg5LiKXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFzdGVyaXNrKSByZXR1cm47XG4gIH0gLy8g5bCGIG1vZGlmaWVyTWFwIOmHjOmdoueahOS/rumlsOmUrue7keWumuWIsCBldmVudCDkuK1cblxuXG4gIGZvciAodmFyIGUgaW4gX21vZHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCBlKSkge1xuICAgICAgX21vZHNbZV0gPSBldmVudFttb2RpZmllck1hcFtlXV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vamF5d2NqbG92ZS9ob3RrZXlzL3B1bGwvMTI5XG4gICAqIFRoaXMgc29sdmVzIHRoZSBpc3N1ZSBpbiBGaXJlZm94IG9uIFdpbmRvd3Mgd2hlcmUgaG90a2V5cyBjb3JyZXNwb25kaW5nIHRvIHNwZWNpYWwgY2hhcmFjdGVycyB3b3VsZCBub3QgdHJpZ2dlci5cbiAgICogQW4gZXhhbXBsZSBvZiB0aGlzIGlzIGN0cmwrYWx0K20gb24gYSBTd2VkaXNoIGtleWJvYXJkIHdoaWNoIGlzIHVzZWQgdG8gdHlwZSDOvC5cbiAgICogQnJvd3NlciBzdXBwb3J0OiBodHRwczovL2Nhbml1c2UuY29tLyNmZWF0PWtleWJvYXJkZXZlbnQtZ2V0bW9kaWZpZXJzdGF0ZVxuICAgKi9cblxuXG4gIGlmIChldmVudC5nZXRNb2RpZmllclN0YXRlICYmICEoZXZlbnQuYWx0S2V5ICYmICFldmVudC5jdHJsS2V5KSAmJiBldmVudC5nZXRNb2RpZmllclN0YXRlKCdBbHRHcmFwaCcpKSB7XG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE3KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE3KTtcbiAgICB9XG5cbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTgpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTgpO1xuICAgIH1cblxuICAgIF9tb2RzWzE3XSA9IHRydWU7XG4gICAgX21vZHNbMThdID0gdHJ1ZTtcbiAgfSAvLyDojrflj5bojIPlm7Qg6buY6K6k5Li6IGBhbGxgXG5cblxuICB2YXIgc2NvcGUgPSBnZXRTY29wZSgpOyAvLyDlr7nku7vkvZXlv6vmjbfplK7pg73pnIDopoHlgZrnmoTlpITnkIZcblxuICBpZiAoYXN0ZXJpc2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzdGVyaXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXN0ZXJpc2tbaV0uc2NvcGUgPT09IHNjb3BlICYmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgYXN0ZXJpc2tbaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGFzdGVyaXNrW2ldLmtleXVwKSkge1xuICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIGFzdGVyaXNrW2ldLCBzY29wZSwgZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGtleSDkuI3lnKggX2hhbmRsZXJzIOS4rei/lOWbnlxuXG5cbiAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIHJldHVybjtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgX2hhbmRsZXJzW2tleV0ubGVuZ3RoOyBfaSsrKSB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXl1cCkge1xuICAgICAgaWYgKF9oYW5kbGVyc1trZXldW19pXS5rZXkpIHtcbiAgICAgICAgdmFyIHJlY29yZCA9IF9oYW5kbGVyc1trZXldW19pXTtcbiAgICAgICAgdmFyIHNwbGl0S2V5ID0gcmVjb3JkLnNwbGl0S2V5O1xuICAgICAgICB2YXIga2V5U2hvcnRjdXQgPSByZWNvcmQua2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICAgICAgdmFyIF9kb3duS2V5c0N1cnJlbnQgPSBbXTsgLy8g6K6w5b2V5b2T5YmN5oyJ6ZSu6ZSu5YC8XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBrZXlTaG9ydGN1dC5sZW5ndGg7IGErKykge1xuICAgICAgICAgIF9kb3duS2V5c0N1cnJlbnQucHVzaChjb2RlKGtleVNob3J0Y3V0W2FdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2Rvd25LZXlzQ3VycmVudC5zb3J0KCkuam9pbignJykgPT09IF9kb3duS2V5cy5zb3J0KCkuam9pbignJykpIHtcbiAgICAgICAgICAvLyDmib7liLDlpITnkIblhoXlrrlcbiAgICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIHJlY29yZCwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWIpOaWrSBlbGVtZW50IOaYr+WQpuW3sue7j+e7keWumuS6i+S7tlxuXG5cbmZ1bmN0aW9uIGlzRWxlbWVudEJpbmQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudEhhc0JpbmRFdmVudC5pbmRleE9mKGVsZW1lbnQpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGhvdGtleXMoa2V5LCBvcHRpb24sIG1ldGhvZCkge1xuICBfZG93bktleXMgPSBbXTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKGtleSk7IC8vIOmcgOimgeWkhOeQhueahOW/q+aNt+mUruWIl+ihqFxuXG4gIHZhciBtb2RzID0gW107XG4gIHZhciBzY29wZSA9ICdhbGwnOyAvLyBzY29wZem7mOiupOS4umFsbO+8jOaJgOacieiMg+WbtOmDveacieaViFxuXG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQ7IC8vIOW/q+aNt+mUruS6i+S7tue7keWumuiKgueCuVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIGtleXVwID0gZmFsc2U7XG4gIHZhciBrZXlkb3duID0gdHJ1ZTtcbiAgdmFyIHNwbGl0S2V5ID0gJysnO1xuICB2YXIgY2FwdHVyZSA9IGZhbHNlOyAvLyDlr7nkuLrorr7lrprojIPlm7TnmoTliKTmlq1cblxuICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG1ldGhvZCA9IG9wdGlvbjtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob3B0aW9uKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBpZiAob3B0aW9uLnNjb3BlKSBzY29wZSA9IG9wdGlvbi5zY29wZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5lbGVtZW50KSBlbGVtZW50ID0gb3B0aW9uLmVsZW1lbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5dXApIGtleXVwID0gb3B0aW9uLmtleXVwOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleWRvd24gIT09IHVuZGVmaW5lZCkga2V5ZG93biA9IG9wdGlvbi5rZXlkb3duOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmNhcHR1cmUgIT09IHVuZGVmaW5lZCkgY2FwdHVyZSA9IG9wdGlvbi5jYXB0dXJlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbi5zcGxpdEtleSA9PT0gJ3N0cmluZycpIHNwbGl0S2V5ID0gb3B0aW9uLnNwbGl0S2V5OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHNjb3BlID0gb3B0aW9uOyAvLyDlr7nkuo7mr4/kuKrlv6vmjbfplK7ov5vooYzlpITnkIZcblxuICBmb3IgKDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldLnNwbGl0KHNwbGl0S2V5KTsgLy8g5oyJ6ZSu5YiX6KGoXG5cbiAgICBtb2RzID0gW107IC8vIOWmguaenOaYr+e7hOWQiOW/q+aNt+mUruWPluW+l+e7hOWQiOW/q+aNt+mUrlxuXG4gICAgaWYgKGtleS5sZW5ndGggPiAxKSBtb2RzID0gZ2V0TW9kcyhfbW9kaWZpZXIsIGtleSk7IC8vIOWwhumdnuS/rumlsOmUrui9rOWMluS4uumUrueggVxuXG4gICAga2V5ID0ga2V5W2tleS5sZW5ndGggLSAxXTtcbiAgICBrZXkgPSBrZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUoa2V5KTsgLy8gKuihqOekuuWMuemFjeaJgOacieW/q+aNt+mUrlxuICAgIC8vIOWIpOaWrWtleeaYr+WQpuWcqF9oYW5kbGVyc+S4re+8jOS4jeWcqOWwsei1i+S4gOS4quepuuaVsOe7hFxuXG4gICAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIF9oYW5kbGVyc1trZXldID0gW107XG5cbiAgICBfaGFuZGxlcnNba2V5XS5wdXNoKHtcbiAgICAgIGtleXVwOiBrZXl1cCxcbiAgICAgIGtleWRvd246IGtleWRvd24sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtb2RzOiBtb2RzLFxuICAgICAgc2hvcnRjdXQ6IGtleXNbaV0sXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGtleToga2V5c1tpXSxcbiAgICAgIHNwbGl0S2V5OiBzcGxpdEtleSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfSAvLyDlnKjlhajlsYBkb2N1bWVudOS4iuiuvue9ruW/q+aNt+mUrlxuXG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhaXNFbGVtZW50QmluZChlbGVtZW50KSAmJiB3aW5kb3cpIHtcbiAgICBlbGVtZW50SGFzQmluZEV2ZW50LnB1c2goZWxlbWVudCk7XG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgfSwgY2FwdHVyZSk7XG5cbiAgICBpZiAoIXdpbkxpc3RlbmRGb2N1cykge1xuICAgICAgd2luTGlzdGVuZEZvY3VzID0gdHJ1ZTtcbiAgICAgIGFkZEV2ZW50KHdpbmRvdywgJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBfZG93bktleXMgPSBbXTtcbiAgICAgIH0sIGNhcHR1cmUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXl1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlLCBlbGVtZW50KTtcbiAgICAgIGNsZWFyTW9kaWZpZXIoZSk7XG4gICAgfSwgY2FwdHVyZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJpZ2dlcihzaG9ydGN1dCkge1xuICB2YXIgc2NvcGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdhbGwnO1xuICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBkYXRhID0gX2hhbmRsZXJzW2tleV0uZmluZChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uc2NvcGUgPT09IHNjb3BlICYmIGl0ZW0uc2hvcnRjdXQgPT09IHNob3J0Y3V0O1xuICAgIH0pO1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5tZXRob2QpIHtcbiAgICAgIGRhdGEubWV0aG9kKCk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIF9hcGkgPSB7XG4gIHNldFNjb3BlOiBzZXRTY29wZSxcbiAgZ2V0U2NvcGU6IGdldFNjb3BlLFxuICBkZWxldGVTY29wZTogZGVsZXRlU2NvcGUsXG4gIGdldFByZXNzZWRLZXlDb2RlczogZ2V0UHJlc3NlZEtleUNvZGVzLFxuICBpc1ByZXNzZWQ6IGlzUHJlc3NlZCxcbiAgZmlsdGVyOiBmaWx0ZXIsXG4gIHRyaWdnZXI6IHRyaWdnZXIsXG4gIHVuYmluZDogdW5iaW5kLFxuICBrZXlNYXA6IF9rZXlNYXAsXG4gIG1vZGlmaWVyOiBfbW9kaWZpZXIsXG4gIG1vZGlmaWVyTWFwOiBtb2RpZmllck1hcFxufTtcblxuZm9yICh2YXIgYSBpbiBfYXBpKSB7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2FwaSwgYSkpIHtcbiAgICBob3RrZXlzW2FdID0gX2FwaVthXTtcbiAgfVxufVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmFyIF9ob3RrZXlzID0gd2luZG93LmhvdGtleXM7XG5cbiAgaG90a2V5cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKGRlZXApIHtcbiAgICBpZiAoZGVlcCAmJiB3aW5kb3cuaG90a2V5cyA9PT0gaG90a2V5cykge1xuICAgICAgd2luZG93LmhvdGtleXMgPSBfaG90a2V5cztcbiAgICB9XG5cbiAgICByZXR1cm4gaG90a2V5cztcbiAgfTtcblxuICB3aW5kb3cuaG90a2V5cyA9IGhvdGtleXM7XG59XG5cbmV4cG9ydCB7IGhvdGtleXMgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGhvdGtleXMgZnJvbSAnaG90a2V5cy1qcyc7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCBVc2UgaXNIb3RrZXlQcmVzc2VkIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCB2ZXJzaW9uIDQuXHJcbiAqL1xuXG5mdW5jdGlvbiB1c2VJc0hvdGtleVByZXNzZWQoKSB7XG4gIHJldHVybiBob3RrZXlzLmlzUHJlc3NlZDtcbn1cblxuaG90a2V5cy5maWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIHRhZ0ZpbHRlciA9IGZ1bmN0aW9uIHRhZ0ZpbHRlcihfcmVmLCBlbmFibGVPblRhZ3MpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0O1xuICB2YXIgdGFyZ2V0VGFnTmFtZSA9IHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZTtcbiAgcmV0dXJuIEJvb2xlYW4odGFyZ2V0VGFnTmFtZSAmJiBlbmFibGVPblRhZ3MgJiYgZW5hYmxlT25UYWdzLmluY2x1ZGVzKHRhcmdldFRhZ05hbWUpKTtcbn07XG5cbnZhciBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0ID0gZnVuY3Rpb24gaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChldikge1xuICByZXR1cm4gdGFnRmlsdGVyKGV2LCBbJ0lOUFVUJywgJ1RFWFRBUkVBJywgJ1NFTEVDVCddKTtcbn07XG5cbmZ1bmN0aW9uIHVzZUhvdGtleXMoa2V5cywgY2FsbGJhY2ssIG9wdGlvbnMsIGRlcHMpIHtcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGRlcHMgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgX3JlZjIgPSBvcHRpb25zIHx8IHt9LFxuICAgICAgZW5hYmxlT25UYWdzID0gX3JlZjIuZW5hYmxlT25UYWdzLFxuICAgICAgZmlsdGVyID0gX3JlZjIuZmlsdGVyLFxuICAgICAga2V5dXAgPSBfcmVmMi5rZXl1cCxcbiAgICAgIGtleWRvd24gPSBfcmVmMi5rZXlkb3duLFxuICAgICAgX3JlZjIkZmlsdGVyUHJldmVudERlID0gX3JlZjIuZmlsdGVyUHJldmVudERlZmF1bHQsXG4gICAgICBmaWx0ZXJQcmV2ZW50RGVmYXVsdCA9IF9yZWYyJGZpbHRlclByZXZlbnREZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGZpbHRlclByZXZlbnREZSxcbiAgICAgIF9yZWYyJGVuYWJsZWQgPSBfcmVmMi5lbmFibGVkLFxuICAgICAgZW5hYmxlZCA9IF9yZWYyJGVuYWJsZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRlbmFibGVkLFxuICAgICAgX3JlZjIkZW5hYmxlT25Db250ZW50ID0gX3JlZjIuZW5hYmxlT25Db250ZW50RWRpdGFibGUsXG4gICAgICBlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSA9IF9yZWYyJGVuYWJsZU9uQ29udGVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRlbmFibGVPbkNvbnRlbnQ7XG5cbiAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTsgLy8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGNhbGxiYWNrIGRldGVybWluZXMgaWYgdGhlIGJyb3dzZXJzIGRlZmF1bHQgYmVoYXZpb3IgaXMgcHJldmVudGVkLlxuXG4gIHZhciBtZW1vaXNlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCkge1xuICAgIHZhciBfa2V5Ym9hcmRFdmVudCR0YXJnZXQ7XG5cbiAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoa2V5Ym9hcmRFdmVudCkpIHtcbiAgICAgIHJldHVybiAhZmlsdGVyUHJldmVudERlZmF1bHQ7XG4gICAgfSAvLyBDaGVjayB3aGV0aGVyIHRoZSBob3RrZXlzIHdhcyB0cmlnZ2VyZWQgaW5zaWRlIGFuIGlucHV0IGFuZCB0aGF0IGlucHV0IGlzIGVuYWJsZWQgb3IgaWYgaXQgd2FzIHRyaWdnZXJlZCBieSBhIGNvbnRlbnQgZWRpdGFibGUgdGFnIGFuZCBpdCBpcyBlbmFibGVkLlxuXG5cbiAgICBpZiAoaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChrZXlib2FyZEV2ZW50KSAmJiAhdGFnRmlsdGVyKGtleWJvYXJkRXZlbnQsIGVuYWJsZU9uVGFncykgfHwgKF9rZXlib2FyZEV2ZW50JHRhcmdldCA9IGtleWJvYXJkRXZlbnQudGFyZ2V0KSAhPSBudWxsICYmIF9rZXlib2FyZEV2ZW50JHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhZW5hYmxlT25Db250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZWYuY3VycmVudCA9PT0gbnVsbCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSByZWYuY3VycmVudCkge1xuICAgICAgY2FsbGJhY2soa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgZGVwcyA/IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXS5jb25jYXQoZGVwcykgOiBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJbiB0aGlzIGNhc2Uga2V5ZG93biBpcyBsaWtlbHkgdW5kZWZpbmVkLCBzbyB3ZSBzZXQgaXQgdG8gZmFsc2UsIHNpbmNlIGhvdGtleXMgbmVlZHMgdGhlIGBrZXlkb3duYCBrZXkgdG8gaGF2ZSBhIHZhbHVlLlxuXG5cbiAgICBpZiAoa2V5dXAgJiYga2V5ZG93biAhPT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5rZXlkb3duID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaG90a2V5cyhrZXlzLCBvcHRpb25zIHx8IHt9LCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIH07XG4gIH0sIFttZW1vaXNlZENhbGxiYWNrLCBrZXlzLCBlbmFibGVkXSk7XG4gIHJldHVybiByZWY7XG59XG5cbnZhciBpc0hvdGtleVByZXNzZWQgPSBob3RrZXlzLmlzUHJlc3NlZDtcblxuZXhwb3J0IHsgaXNIb3RrZXlQcmVzc2VkLCB1c2VIb3RrZXlzLCB1c2VJc0hvdGtleVByZXNzZWQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlYWN0LWhvdGtleXMtaG9vay5lc20uanMubWFwXG4iXSwic291cmNlUm9vdCI6IiJ9
|