-
Notifications
You must be signed in to change notification settings - Fork 2
/
3881.86405ad3.iframe.bundle.js
2 lines (2 loc) · 55 KB
/
3881.86405ad3.iframe.bundle.js
1
2
"use strict";(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[3881],{"./src/legacySharedComponents/Dialog.jsx":(__unused_webpack_module,exports,__webpack_require__)=>{function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.Body=Body,exports.Buttons=Buttons,exports.Cancel=Cancel,exports.Confirm=Confirm,exports.Footer=Footer,exports.Icon=void 0,exports.Title=Title,exports.styles=exports.default=void 0;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_radium=_interopRequireDefault(__webpack_require__("./node_modules/radium/es/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_locale=_interopRequireDefault(__webpack_require__("./src/util/locale-do-not-import.js")),_propTypes2=__webpack_require__("./src/propTypes.js"),_BaseDialog=_interopRequireDefault(__webpack_require__("./src/templates/BaseDialog.jsx")),_color=_interopRequireDefault(__webpack_require__("./src/util/color.js")),_LegacyButton=_interopRequireDefault(__webpack_require__("./src/legacySharedComponents/LegacyButton.jsx")),_excluded=["type"];function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach((function(r){_defineProperty(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _extends(){return _extends=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)({}).hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},_extends.apply(null,arguments)}var styles=exports.styles={icon:{backgroundSize:100,backgroundPosition:"bottom",backgroundRepeat:"no-repeat",marginTop:-165,width:120,height:200,float:"left"},title:{fontSize:27,lineHeight:"30px",marginBottom:15,color:_color.default.purple},body:{fontSize:24,lineHeight:"27px",color:_color.default.purple,whiteSpace:"normal"},buttons:{marginTop:10},rightButton:{float:"right"},buttonClear:{clear:"both"},footer:{borderColor:_color.default.light_gray,borderStyle:"solid",borderWidth:0,borderTopWidth:2,marginTop:15,paddingTop:15}};function Title(_ref){var children=_ref.children;return _react.default.createElement("h1",{style:styles.title},children)}function Body(_ref2){var children=_ref2.children;return _react.default.createElement("div",{style:styles.body},children)}function Confirm(props){var type=props.type,other=function _objectWithoutProperties(e,t){if(null==e)return{};var o,r,i=function _objectWithoutPropertiesLoose(r,e){if(null==r)return{};var t={};for(var n in r)if({}.hasOwnProperty.call(r,n)){if(e.includes(n))continue;t[n]=r[n]}return t}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)o=s[r],t.includes(o)||{}.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}(props,_excluded);return type=type||"primary",_react.default.createElement(_LegacyButton.default,_extends({type},other),props.children||_locale.default.dialogOK())}function Cancel(props){return _react.default.createElement(_LegacyButton.default,_extends({type:"cancel"},props),props.children||_locale.default.dialogCancel())}function Buttons(_ref3){var children=_ref3.children,leftChildren=(children=_react.default.Children.toArray(children)).slice(0,children.length-1),rightChild=children[children.length-1];return _react.default.createElement("div",{style:styles.buttons},leftChildren,_react.default.createElement("div",{style:styles.rightButton},rightChild),_react.default.createElement("div",{style:styles.buttonClear}))}function Footer(_ref4){var children=_ref4.children;return _react.default.createElement("div",{style:styles.footer},children)}Title.propTypes={children:_propTypes.default.node},Body.propTypes={children:_propTypes.default.node},Confirm.propTypes={children:_propTypes.default.node,type:_propTypes.default.string},Cancel.propTypes={children:_propTypes.default.node},Buttons.propTypes={children:(0,_propTypes2.childrenOfType)(Cancel,Confirm)},Footer.propTypes={children:_propTypes.default.node};var Icon=exports.Icon=(0,_radium.default)((function Icon(_ref5){var src=_ref5.src;return _react.default.createElement("span",{style:[styles.icon,{backgroundImage:"url(".concat(src,")")}]})}));Icon.propTypes={src:_propTypes.default.string.isRequired};var Dialog=exports.default=function(_React$Component){function Dialog(){for(var _this,_len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _defineProperty(_this=_React$Component.call.apply(_React$Component,[this].concat(args))||this,"handleKeyDown",(function(event){if("Tab"===event.key){var elements=_this.baseDialog.getTabbableElements();if(elements.length){var curIndex=elements.findIndex((function(btn){return btn===document.activeElement}));elements[(curIndex+1)%elements.length].focus()}event.preventDefault()}})),_this}return function _inheritsLoose(t,o){t.prototype=Object.create(o.prototype),t.prototype.constructor=t,_setPrototypeOf(t,o)}(Dialog,_React$Component),Dialog.prototype.render=function render(){var _this2=this,children=[];if(this.props.icon&&children.push(_react.default.createElement(Icon,{key:"icon",src:this.props.icon})),this.props.title&&children.push(_react.default.createElement(Title,{key:"title"},this.props.title)),this.props.body&&children.push(_react.default.createElement(Body,{key:"body"},this.props.body)),children=children.concat(this.props.children),this.props.cancelText||this.props.onCancel||this.props.confirmText||this.props.onConfirm||this.props.confirmType){var buttons=_react.default.createElement(Buttons,{key:"buttons"},this.props.onCancel&&_react.default.createElement(Cancel,{onClick:this.props.onCancel},this.props.cancelText),this.props.onConfirm&&_react.default.createElement(Confirm,{onClick:this.props.onConfirm,type:this.props.confirmType},this.props.confirmText)),lastChild=children[children.length-1];lastChild&&lastChild.type===Footer?children.splice(children.length-1,0,buttons):children.push(buttons)}return this.props.footer&&children.push(_react.default.createElement(Footer,{key:"footer"},this.props.footer)),_react.default.createElement(_BaseDialog.default,_extends({},this.props,{ref:function ref(baseDialog){return _this2.baseDialog=baseDialog},handleKeyDown:this.handleKeyDown}),children)},Dialog}(_react.default.Component);_defineProperty(Dialog,"propTypes",_objectSpread(_objectSpread({},_BaseDialog.default.propTypes),{},{children:(0,_propTypes2.childrenOfType)(Icon,Title,Body,Buttons,Footer),icon:(0,_propTypes2.whenNoChildOfTypes)(Icon),title:(0,_propTypes2.whenNoChildOfTypes)(Title),body:(0,_propTypes2.whenNoChildOfTypes)(Body),footer:(0,_propTypes2.whenNoChildOfTypes)(Footer),cancelText:(0,_propTypes2.whenNoChildOfTypes)(Buttons),onCancel:(0,_propTypes2.whenNoChildOfTypes)(Buttons),confirmText:(0,_propTypes2.whenNoChildOfTypes)(Buttons),onConfirm:(0,_propTypes2.whenNoChildOfTypes)(Buttons),confirmType:(0,_propTypes2.whenNoChildOfTypes)(Buttons)}))},"./src/legacySharedComponents/LegacyButton.jsx":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.style=exports.default=exports.BUTTON_TYPES=void 0;var _propTypes=_interopRequireDefault(__webpack_require__("./node_modules/prop-types/index.js")),_radium=_interopRequireDefault(__webpack_require__("./node_modules/radium/es/index.js")),_react=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_color=_interopRequireDefault(__webpack_require__("./src/util/color.js")),_excluded=["type","children","size"],_excluded2=["arrow"];function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _extends(){return _extends=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)({}).hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},_extends.apply(null,arguments)}function _objectWithoutProperties(e,t){if(null==e)return{};var o,r,i=function _objectWithoutPropertiesLoose(r,e){if(null==r)return{};var t={};for(var n in r)if({}.hasOwnProperty.call(r,n)){if(e.includes(n))continue;t[n]=r[n]}return t}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)o=s[r],t.includes(o)||{}.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var style=exports.style={base:{borderWidth:1,borderStyle:"solid",minWidth:100,marginTop:0,marginBottom:0,marginLeft:0,marginRight:0,":hover":{boxShadow:"2px 2px 5px rgba(0, 0, 0, 0.3)"}},large:{fontSize:35,lineHeight:"normal",paddingLeft:14,paddingRight:14},arrow:{base:{position:"relative",height:116,textAlign:"left",display:"inline-block"},left:{paddingLeft:58},right:{paddingRight:58}},arrowHead:{base:{position:"absolute",width:0,height:0,borderColor:"transparent",borderWidth:58,borderStyle:"solid"},left:function left(color){return{left:-48,borderRightColor:color}},right:function right(color){return{right:-48,borderLeftColor:color}}}};style.withArrow={base:{position:"relative",top:(116-style.base.borderWidth-20-44)/2,marginTop:0,marginBottom:0,marginLeft:0,marginRight:0,":hover":{boxShadow:"none"}},left:{paddingLeft:0},right:{paddingRight:0}};var BUTTON_TYPES=exports.BUTTON_TYPES={default:{style:{backgroundColor:_color.default.white,borderColor:_color.default.charcoal,color:_color.default.charcoal}},cancel:{style:{backgroundColor:_color.default.neutral_white,borderWidth:2,borderStyle:"solid",borderColor:_color.default.neutral_dark,color:_color.default.neutral_dark,":hover":{backgroundColor:_color.default.neutral_dark20,boxShadow:"none"},":focus":{backgroundColor:_color.default.neutral_dark20,boxShadow:"none"}}},primary:{style:{backgroundColor:_color.default.brand_secondary_default,borderColor:_color.default.brand_secondary_default,color:_color.default.neutral_white,":hover":{backgroundColor:_color.default.brand_secondary_dark,borderColor:_color.default.brand_secondary_dark,boxShadow:"none"}}},legacyPrimary:{style:{backgroundColor:_color.default.orange,borderColor:_color.default.orange,color:_color.default.neutral_white}},danger:{style:{backgroundColor:_color.default.product_negative_default,borderColor:_color.default.product_negative_default,color:_color.default.neutral_white,":hover":{backgroundColor:_color.default.product_negative_dark,borderColor:_color.default.product_negative_dark,boxShadow:"none"}}},action:{style:{backgroundColor:_color.default.purple,borderColor:_color.default.purple,color:_color.default.white}}},BaseButton=(0,_radium.default)((function BaseButton(_ref){var type=_ref.type,children=_ref.children,size=_ref.size,props=_objectWithoutProperties(_ref,_excluded),sizeStyle=style[size||"normal"],config=BUTTON_TYPES[type],styleArray=[style.base,config.style,sizeStyle];return _react.default.createElement("button",_extends({type:"button"},props,{style:[styleArray,props.style]}),children)}));BaseButton.propTypes={type:_propTypes.default.oneOf(Object.keys(BUTTON_TYPES)),children:_propTypes.default.node,size:_propTypes.default.oneOf(["normal","large"])};var ArrowButton=(0,_radium.default)((function ArrowButton(_ref2){var arrow=_ref2.arrow,props=_objectWithoutProperties(_ref2,_excluded2),config=BUTTON_TYPES[props.type];return _react.default.createElement("div",{style:[style.arrow.base,style.arrow[arrow],props.style]},_react.default.createElement("div",{style:[style.arrowHead.base,style.arrowHead[arrow](config.style.backgroundColor)]}),_react.default.createElement(BaseButton,_extends({},props,{style:[style.withArrow.base,style.withArrow[arrow]]})))}));ArrowButton.propTypes=Object.assign({},BaseButton.propTypes,{arrow:_propTypes.default.oneOf(["left","right"]).isRequired});var LegacyButton=(0,_radium.default)((function Button(props){return props.arrow?_react.default.createElement(ArrowButton,props):_react.default.createElement(BaseButton,props)}));LegacyButton.propTypes=Object.assign({},BaseButton.propTypes,{arrow:_propTypes.default.oneOf(["left","right"])});exports.default=LegacyButton},"./src/propTypes.js":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.childrenOfType=function childrenOfType(){for(var _len=arguments.length,validChildrenTypes=new Array(_len),_key=0;_key<_len;_key++)validChildrenTypes[_key]=arguments[_key];return function(props,propName,componentName){if("children"!==propName)return new Error("The childrenOfType prop type should only be used on the children prop.");var prop=props[propName];if(prop){var actualChildrenTypes=_react.default.Children.map(prop,(function(el){return el&&el.type}))||[];return(0,_utils.isSubsequence)(validChildrenTypes,actualChildrenTypes)?void 0:new Error(componentName+" was given children of types "+actualChildrenTypes.map((function(t){return"<".concat(t.name,">")})).join(", ")+" but only accepts one of each child in the following order: "+validChildrenTypes.map((function(t){return"<".concat(t.name,">")})).join(", ")+".")}}},exports.whenNoChildOfTypes=function whenNoChildOfTypes(){for(var _len2=arguments.length,unexpectedChildTypes=new Array(_len2),_key2=0;_key2<_len2;_key2++)unexpectedChildTypes[_key2]=arguments[_key2];return function(props,propName,componentName){if(props.children&&props[propName]){var error,_step,_iterator=function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t.return||t.return()}finally{if(u)throw o}}}}(_react.default.Children.map(props.children,(function(el){return el.type})));try{for(_iterator.s();!(_step=_iterator.n()).done;){var childType=_step.value;if(unexpectedChildTypes.includes(childType)){error=new Error("".concat(componentName," was given a ").concat(propName," prop and a ")+"<".concat(childType.name,"> child, but only one of those is allowed."));break}}}catch(err){_iterator.e(err)}finally{_iterator.f()}return error}}};var _react=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}(__webpack_require__("./node_modules/react/index.js")),_utils=__webpack_require__("./src/utils.js");function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFNBQUF5TyxrQkFBQTdOLEVBQUE0TixJQUFBLE1BQUFBLEdBQUFBLEVBQUE1TixFQUFBYSxVQUFBK00sRUFBQTVOLEVBQUFhLFFBQUEsUUFBQWhCLEVBQUEsRUFBQXlDLEVBQUE4RSxNQUFBd0csR0FBQS9OLEVBQUErTixFQUFBL04sSUFBQXlDLEVBQUF6QyxHQUFBRyxFQUFBSCxHQUFBLE9BQUF5QyxDQUFBLEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvbGVnYWN5U2hhcmVkQ29tcG9uZW50cy9EaWFsb2cuanN4Iiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL3NyYy9sZWdhY3lTaGFyZWRDb21wb25lbnRzL0xlZ2FjeUJ1dHRvbi5qc3giLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vc3JjL3Byb3BUeXBlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJhZGl1bSBmcm9tICdyYWRpdW0nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IGxvY2FsZSBmcm9tICdAY2RvL2xvY2FsZSc7XG5cbmltcG9ydCB7Y2hpbGRyZW5PZlR5cGUsIHdoZW5Ob0NoaWxkT2ZUeXBlc30gZnJvbSAnLi4vcHJvcFR5cGVzJztcbmltcG9ydCBCYXNlRGlhbG9nIGZyb20gJy4uL3RlbXBsYXRlcy9CYXNlRGlhbG9nJztcbmltcG9ydCBjb2xvciBmcm9tICcuLi91dGlsL2NvbG9yJztcblxuaW1wb3J0IExlZ2FjeUJ1dHRvbiBmcm9tICcuL0xlZ2FjeUJ1dHRvbic7XG5cbmV4cG9ydCBjb25zdCBzdHlsZXMgPSB7XG4gIGljb246IHtcbiAgICBiYWNrZ3JvdW5kU2l6ZTogMTAwLFxuICAgIGJhY2tncm91bmRQb3NpdGlvbjogJ2JvdHRvbScsXG4gICAgYmFja2dyb3VuZFJlcGVhdDogJ25vLXJlcGVhdCcsXG4gICAgbWFyZ2luVG9wOiAtMTY1LFxuICAgIHdpZHRoOiAxMjAsXG4gICAgaGVpZ2h0OiAyMDAsXG4gICAgZmxvYXQ6ICdsZWZ0JyxcbiAgfSxcbiAgdGl0bGU6IHtcbiAgICBmb250U2l6ZTogMjcsXG4gICAgbGluZUhlaWdodDogJzMwcHgnLFxuICAgIG1hcmdpbkJvdHRvbTogMTUsXG4gICAgY29sb3I6IGNvbG9yLnB1cnBsZSxcbiAgfSxcbiAgYm9keToge1xuICAgIGZvbnRTaXplOiAyNCxcbiAgICBsaW5lSGVpZ2h0OiAnMjdweCcsXG4gICAgY29sb3I6IGNvbG9yLnB1cnBsZSxcbiAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcbiAgfSxcbiAgYnV0dG9uczoge1xuICAgIG1hcmdpblRvcDogMTAsXG4gIH0sXG4gIHJpZ2h0QnV0dG9uOiB7XG4gICAgZmxvYXQ6ICdyaWdodCcsXG4gIH0sXG4gIGJ1dHRvbkNsZWFyOiB7XG4gICAgY2xlYXI6ICdib3RoJyxcbiAgfSxcbiAgZm9vdGVyOiB7XG4gICAgYm9yZGVyQ29sb3I6IGNvbG9yLmxpZ2h0X2dyYXksXG4gICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgYm9yZGVyVG9wV2lkdGg6IDIsXG4gICAgbWFyZ2luVG9wOiAxNSxcbiAgICBwYWRkaW5nVG9wOiAxNSxcbiAgfSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUaXRsZSh7Y2hpbGRyZW59KSB7XG4gIHJldHVybiA8aDEgc3R5bGU9e3N0eWxlcy50aXRsZX0+e2NoaWxkcmVufTwvaDE+O1xufVxuVGl0bGUucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQm9keSh7Y2hpbGRyZW59KSB7XG4gIHJldHVybiA8ZGl2IHN0eWxlPXtzdHlsZXMuYm9keX0+e2NoaWxkcmVufTwvZGl2Pjtcbn1cbkJvZHkucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ29uZmlybShwcm9wcykge1xuICBsZXQge3R5cGUsIC4uLm90aGVyfSA9IHByb3BzO1xuICB0eXBlID0gdHlwZSB8fCAncHJpbWFyeSc7XG4gIHJldHVybiAoXG4gICAgPExlZ2FjeUJ1dHRvbiB0eXBlPXt0eXBlfSB7Li4ub3RoZXJ9PlxuICAgICAge3Byb3BzLmNoaWxkcmVuIHx8IGxvY2FsZS5kaWFsb2dPSygpfVxuICAgIDwvTGVnYWN5QnV0dG9uPlxuICApO1xufVxuQ29uZmlybS5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDYW5jZWwocHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8TGVnYWN5QnV0dG9uIHR5cGU9XCJjYW5jZWxcIiB7Li4ucHJvcHN9PlxuICAgICAge3Byb3BzLmNoaWxkcmVuIHx8IGxvY2FsZS5kaWFsb2dDYW5jZWwoKX1cbiAgICA8L0xlZ2FjeUJ1dHRvbj5cbiAgKTtcbn1cbkNhbmNlbC5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBCdXR0b25zKHtjaGlsZHJlbn0pIHtcbiAgY2hpbGRyZW4gPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKTtcbiAgdmFyIGxlZnRDaGlsZHJlbiA9IGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLmxlbmd0aCAtIDEpO1xuICB2YXIgcmlnaHRDaGlsZCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3N0eWxlcy5idXR0b25zfT5cbiAgICAgIHtsZWZ0Q2hpbGRyZW59XG4gICAgICA8ZGl2IHN0eWxlPXtzdHlsZXMucmlnaHRCdXR0b259PntyaWdodENoaWxkfTwvZGl2PlxuICAgICAgPGRpdiBzdHlsZT17c3R5bGVzLmJ1dHRvbkNsZWFyfSAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuQnV0dG9ucy5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBjaGlsZHJlbk9mVHlwZShDYW5jZWwsIENvbmZpcm0pLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEZvb3Rlcih7Y2hpbGRyZW59KSB7XG4gIHJldHVybiA8ZGl2IHN0eWxlPXtzdHlsZXMuZm9vdGVyfT57Y2hpbGRyZW59PC9kaXY+O1xufVxuRm9vdGVyLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxufTtcblxuZXhwb3J0IHZhciBJY29uID0gUmFkaXVtKGZ1bmN0aW9uIEljb24oe3NyY30pIHtcbiAgcmV0dXJuIDxzcGFuIHN0eWxlPXtbc3R5bGVzLmljb24sIHtiYWNrZ3JvdW5kSW1hZ2U6IGB1cmwoJHtzcmN9KWB9XX0gLz47XG59KTtcbkljb24ucHJvcFR5cGVzID0ge1xuICBzcmM6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbn07XG5cbi8qKiBAZGVwcmVjYXRlZCB1c2UgRFNDTyBTdHlsaXplZEJhc2VEaWFsb2cgb3IgQWNjZXNzaWJsZURpYWxvZyBpbnN0ZWFkICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaWFsb2cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIC4uLkJhc2VEaWFsb2cucHJvcFR5cGVzLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbk9mVHlwZShJY29uLCBUaXRsZSwgQm9keSwgQnV0dG9ucywgRm9vdGVyKSxcbiAgICBpY29uOiB3aGVuTm9DaGlsZE9mVHlwZXMoSWNvbiksXG4gICAgdGl0bGU6IHdoZW5Ob0NoaWxkT2ZUeXBlcyhUaXRsZSksXG4gICAgYm9keTogd2hlbk5vQ2hpbGRPZlR5cGVzKEJvZHkpLFxuICAgIGZvb3Rlcjogd2hlbk5vQ2hpbGRPZlR5cGVzKEZvb3RlciksXG4gICAgY2FuY2VsVGV4dDogd2hlbk5vQ2hpbGRPZlR5cGVzKEJ1dHRvbnMpLFxuICAgIG9uQ2FuY2VsOiB3aGVuTm9DaGlsZE9mVHlwZXMoQnV0dG9ucyksXG4gICAgY29uZmlybVRleHQ6IHdoZW5Ob0NoaWxkT2ZUeXBlcyhCdXR0b25zKSxcbiAgICBvbkNvbmZpcm06IHdoZW5Ob0NoaWxkT2ZUeXBlcyhCdXR0b25zKSxcbiAgICBjb25maXJtVHlwZTogd2hlbk5vQ2hpbGRPZlR5cGVzKEJ1dHRvbnMpLFxuICB9O1xuXG4gIGhhbmRsZUtleURvd24gPSBldmVudCA9PiB7XG4gICAgLy8gRm9jdXMgdGhlIG5leHQgYnV0dG9uLCBpbnB1dCBvciBsaW5rIHdoZW4gdGFiIGlzIHByZXNzZWQsIHRvIHByZXZlbnQgdGhlXG4gICAgLy8gdXNlciBmcm9tIHNlbGVjdGluZyBlbGVtZW50cyBvdXRzaWRlIG9mIHRoZSBkaWFsb2cuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5iYXNlRGlhbG9nLmdldFRhYmJhYmxlRWxlbWVudHMoKTtcbiAgICAgIGlmIChlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gRm9jdXMgdGhlIG5leHQgZWxlbWVudCwgb3IgdGhlIGZpcnN0IGVsZW1lbnQgaWYgbm9uZSBpcyBmb2N1c2VkLlxuICAgICAgICBjb25zdCBjdXJJbmRleCA9IGVsZW1lbnRzLmZpbmRJbmRleChcbiAgICAgICAgICBidG4gPT4gYnRuID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9IChjdXJJbmRleCArIDEpICUgZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICBlbGVtZW50c1tuZXh0SW5kZXhdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gW107XG4gICAgaWYgKHRoaXMucHJvcHMuaWNvbikge1xuICAgICAgY2hpbGRyZW4ucHVzaCg8SWNvbiBrZXk9XCJpY29uXCIgc3JjPXt0aGlzLnByb3BzLmljb259IC8+KTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMudGl0bGUpIHtcbiAgICAgIGNoaWxkcmVuLnB1c2goPFRpdGxlIGtleT1cInRpdGxlXCI+e3RoaXMucHJvcHMudGl0bGV9PC9UaXRsZT4pO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5ib2R5KSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKDxCb2R5IGtleT1cImJvZHlcIj57dGhpcy5wcm9wcy5ib2R5fTwvQm9keT4pO1xuICAgIH1cbiAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmNvbmNhdCh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLnByb3BzLmNhbmNlbFRleHQgfHxcbiAgICAgIHRoaXMucHJvcHMub25DYW5jZWwgfHxcbiAgICAgIHRoaXMucHJvcHMuY29uZmlybVRleHQgfHxcbiAgICAgIHRoaXMucHJvcHMub25Db25maXJtIHx8XG4gICAgICB0aGlzLnByb3BzLmNvbmZpcm1UeXBlXG4gICAgKSB7XG4gICAgICB2YXIgYnV0dG9ucyA9IChcbiAgICAgICAgPEJ1dHRvbnMga2V5PVwiYnV0dG9uc1wiPlxuICAgICAgICAgIHt0aGlzLnByb3BzLm9uQ2FuY2VsICYmIChcbiAgICAgICAgICAgIDxDYW5jZWwgb25DbGljaz17dGhpcy5wcm9wcy5vbkNhbmNlbH0+XG4gICAgICAgICAgICAgIHt0aGlzLnByb3BzLmNhbmNlbFRleHR9XG4gICAgICAgICAgICA8L0NhbmNlbD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHt0aGlzLnByb3BzLm9uQ29uZmlybSAmJiAoXG4gICAgICAgICAgICA8Q29uZmlybVxuICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ29uZmlybX1cbiAgICAgICAgICAgICAgdHlwZT17dGhpcy5wcm9wcy5jb25maXJtVHlwZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3RoaXMucHJvcHMuY29uZmlybVRleHR9XG4gICAgICAgICAgICA8L0NvbmZpcm0+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9CdXR0b25zPlxuICAgICAgKTtcbiAgICAgIGNvbnN0IGxhc3RDaGlsZCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQudHlwZSA9PT0gRm9vdGVyKSB7XG4gICAgICAgIGNoaWxkcmVuLnNwbGljZShjaGlsZHJlbi5sZW5ndGggLSAxLCAwLCBidXR0b25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goYnV0dG9ucyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmZvb3Rlcikge1xuICAgICAgY2hpbGRyZW4ucHVzaCg8Rm9vdGVyIGtleT1cImZvb3RlclwiPnt0aGlzLnByb3BzLmZvb3Rlcn08L0Zvb3Rlcj4pO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPEJhc2VEaWFsb2dcbiAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgIHJlZj17YmFzZURpYWxvZyA9PiAodGhpcy5iYXNlRGlhbG9nID0gYmFzZURpYWxvZyl9XG4gICAgICAgIGhhbmRsZUtleURvd249e3RoaXMuaGFuZGxlS2V5RG93bn1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CYXNlRGlhbG9nPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmFkaXVtIGZyb20gJ3JhZGl1bSc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1pbXBvcnRzXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgY29sb3IgZnJvbSAnLi4vdXRpbC9jb2xvcic7XG5cbmNvbnN0IEFSUk9XX1dJRFRIID0gNTg7XG5jb25zdCBBUlJPV19IRUlHSFQgPSBBUlJPV19XSURUSCAqIDI7XG5jb25zdCBBUlJPV19CVVRUT05fSEVJR0hUID0gNDQ7IC8vIG9yaWdpbmFsbHkgZnJvbSBjb21tb24uc2NzcyAuYXJyb3ctdGV4dCBydWxlXG5jb25zdCBBUlJPV19CVVRUT05fUEFERElORyA9IDEwOyAvLyBvcmlnaW5hbGx5IGZyb20gY29tbW9uLnNjc3MgLmFycm93LWxlZnQgLmFycm93LXRleHQgcnVsZVxuZXhwb3J0IGNvbnN0IHN0eWxlID0ge1xuICBiYXNlOiB7XG4gICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgYm9yZGVyU3R5bGU6ICdzb2xpZCcsXG4gICAgbWluV2lkdGg6IDEwMCxcbiAgICBtYXJnaW5Ub3A6IDAsXG4gICAgbWFyZ2luQm90dG9tOiAwLFxuICAgIG1hcmdpbkxlZnQ6IDAsXG4gICAgbWFyZ2luUmlnaHQ6IDAsXG4gICAgJzpob3Zlcic6IHtcbiAgICAgIGJveFNoYWRvdzogJzJweCAycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4zKScsXG4gICAgfSxcbiAgfSxcbiAgbGFyZ2U6IHtcbiAgICBmb250U2l6ZTogMzUsXG4gICAgbGluZUhlaWdodDogJ25vcm1hbCcsXG4gICAgcGFkZGluZ0xlZnQ6IDE0LFxuICAgIHBhZGRpbmdSaWdodDogMTQsXG4gIH0sXG4gIGFycm93OiB7XG4gICAgYmFzZToge1xuICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICBoZWlnaHQ6IEFSUk9XX0hFSUdIVCxcbiAgICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgfSxcbiAgICBsZWZ0OiB7XG4gICAgICBwYWRkaW5nTGVmdDogQVJST1dfV0lEVEgsXG4gICAgfSxcbiAgICByaWdodDoge1xuICAgICAgcGFkZGluZ1JpZ2h0OiBBUlJPV19XSURUSCxcbiAgICB9LFxuICB9LFxuICBhcnJvd0hlYWQ6IHtcbiAgICBiYXNlOiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgYm9yZGVyQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICBib3JkZXJXaWR0aDogQVJST1dfV0lEVEgsXG4gICAgICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgICB9LFxuICAgIGxlZnQ6IGNvbG9yID0+ICh7XG4gICAgICBsZWZ0OiAxMCAtIEFSUk9XX1dJRFRILFxuICAgICAgYm9yZGVyUmlnaHRDb2xvcjogY29sb3IsXG4gICAgfSksXG4gICAgcmlnaHQ6IGNvbG9yID0+ICh7XG4gICAgICByaWdodDogMTAgLSBBUlJPV19XSURUSCxcbiAgICAgIGJvcmRlckxlZnRDb2xvcjogY29sb3IsXG4gICAgfSksXG4gIH0sXG59O1xuXG5zdHlsZS53aXRoQXJyb3cgPSB7XG4gIGJhc2U6IHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB0b3A6XG4gICAgICAoQVJST1dfSEVJR0hUIC1cbiAgICAgICAgc3R5bGUuYmFzZS5ib3JkZXJXaWR0aCAtXG4gICAgICAgIEFSUk9XX0JVVFRPTl9QQURESU5HICogMiAtXG4gICAgICAgIEFSUk9XX0JVVFRPTl9IRUlHSFQpIC9cbiAgICAgIDIsXG4gICAgbWFyZ2luVG9wOiAwLFxuICAgIG1hcmdpbkJvdHRvbTogMCxcbiAgICBtYXJnaW5MZWZ0OiAwLFxuICAgIG1hcmdpblJpZ2h0OiAwLFxuICAgICc6aG92ZXInOiB7XG4gICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICB9LFxuICB9LFxuICBsZWZ0OiB7XG4gICAgcGFkZGluZ0xlZnQ6IDAsXG4gIH0sXG4gIHJpZ2h0OiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAwLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEJVVFRPTl9UWVBFUyA9IHtcbiAgZGVmYXVsdDoge1xuICAgIHN0eWxlOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLndoaXRlLFxuICAgICAgYm9yZGVyQ29sb3I6IGNvbG9yLmNoYXJjb2FsLFxuICAgICAgY29sb3I6IGNvbG9yLmNoYXJjb2FsLFxuICAgIH0sXG4gIH0sXG4gIGNhbmNlbDoge1xuICAgIHN0eWxlOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLm5ldXRyYWxfd2hpdGUsXG4gICAgICBib3JkZXJXaWR0aDogMixcbiAgICAgIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICAgICAgYm9yZGVyQ29sb3I6IGNvbG9yLm5ldXRyYWxfZGFyayxcbiAgICAgIGNvbG9yOiBjb2xvci5uZXV0cmFsX2RhcmssXG4gICAgICAnOmhvdmVyJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLm5ldXRyYWxfZGFyazIwLFxuICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgIH0sXG4gICAgICAnOmZvY3VzJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLm5ldXRyYWxfZGFyazIwLFxuICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgcHJpbWFyeToge1xuICAgIHN0eWxlOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmJyYW5kX3NlY29uZGFyeV9kZWZhdWx0LFxuICAgICAgYm9yZGVyQ29sb3I6IGNvbG9yLmJyYW5kX3NlY29uZGFyeV9kZWZhdWx0LFxuICAgICAgY29sb3I6IGNvbG9yLm5ldXRyYWxfd2hpdGUsXG4gICAgICAnOmhvdmVyJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmJyYW5kX3NlY29uZGFyeV9kYXJrLFxuICAgICAgICBib3JkZXJDb2xvcjogY29sb3IuYnJhbmRfc2Vjb25kYXJ5X2RhcmssXG4gICAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBsZWdhY3lQcmltYXJ5OiB7XG4gICAgc3R5bGU6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3Iub3JhbmdlLFxuICAgICAgYm9yZGVyQ29sb3I6IGNvbG9yLm9yYW5nZSxcbiAgICAgIGNvbG9yOiBjb2xvci5uZXV0cmFsX3doaXRlLFxuICAgIH0sXG4gIH0sXG4gIGRhbmdlcjoge1xuICAgIHN0eWxlOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLnByb2R1Y3RfbmVnYXRpdmVfZGVmYXVsdCxcbiAgICAgIGJvcmRlckNvbG9yOiBjb2xvci5wcm9kdWN0X25lZ2F0aXZlX2RlZmF1bHQsXG4gICAgICBjb2xvcjogY29sb3IubmV1dHJhbF93aGl0ZSxcbiAgICAgICc6aG92ZXInOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IucHJvZHVjdF9uZWdhdGl2ZV9kYXJrLFxuICAgICAgICBib3JkZXJDb2xvcjogY29sb3IucHJvZHVjdF9uZWdhdGl2ZV9kYXJrLFxuICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgYWN0aW9uOiB7XG4gICAgc3R5bGU6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IucHVycGxlLFxuICAgICAgYm9yZGVyQ29sb3I6IGNvbG9yLnB1cnBsZSxcbiAgICAgIGNvbG9yOiBjb2xvci53aGl0ZSxcbiAgICB9LFxuICB9LFxufTtcblxuY29uc3QgQmFzZUJ1dHRvbiA9IFJhZGl1bShmdW5jdGlvbiBCYXNlQnV0dG9uKHtcbiAgdHlwZSxcbiAgY2hpbGRyZW4sXG4gIHNpemUsXG4gIC4uLnByb3BzXG59KSB7XG4gIGNvbnN0IHNpemVTdHlsZSA9IHN0eWxlW3NpemUgfHwgJ25vcm1hbCddO1xuICBjb25zdCBjb25maWcgPSBCVVRUT05fVFlQRVNbdHlwZV07XG4gIGxldCBzdHlsZUFycmF5ID0gW3N0eWxlLmJhc2UsIGNvbmZpZy5zdHlsZSwgc2l6ZVN0eWxlXTtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB7Li4ucHJvcHN9IHN0eWxlPXtbc3R5bGVBcnJheSwgcHJvcHMuc3R5bGVdfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn0pO1xuQmFzZUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihPYmplY3Qua2V5cyhCVVRUT05fVFlQRVMpKSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoWydub3JtYWwnLCAnbGFyZ2UnXSksXG59O1xuXG5jb25zdCBBcnJvd0J1dHRvbiA9IFJhZGl1bShmdW5jdGlvbiBBcnJvd0J1dHRvbih7YXJyb3csIC4uLnByb3BzfSkge1xuICBjb25zdCBjb25maWcgPSBCVVRUT05fVFlQRVNbcHJvcHMudHlwZV07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgIGlmICghcHJvcHMuc2l6ZSA9PT0gJ2xhcmdlJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIFwiJHtwcm9wcy5zaXplfVwiIGJ1dHRvbiBjYW4ndCB1c2UgYXJyb3dzLmApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e1tzdHlsZS5hcnJvdy5iYXNlLCBzdHlsZS5hcnJvd1thcnJvd10sIHByb3BzLnN0eWxlXX0+XG4gICAgICA8ZGl2XG4gICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgc3R5bGUuYXJyb3dIZWFkLmJhc2UsXG4gICAgICAgICAgc3R5bGUuYXJyb3dIZWFkW2Fycm93XShjb25maWcuc3R5bGUuYmFja2dyb3VuZENvbG9yKSxcbiAgICAgICAgXX1cbiAgICAgIC8+XG4gICAgICA8QmFzZUJ1dHRvblxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIHN0eWxlPXtbc3R5bGUud2l0aEFycm93LmJhc2UsIHN0eWxlLndpdGhBcnJvd1thcnJvd11dfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuQXJyb3dCdXR0b24ucHJvcFR5cGVzID0gT2JqZWN0LmFzc2lnbih7fSwgQmFzZUJ1dHRvbi5wcm9wVHlwZXMsIHtcbiAgYXJyb3c6IFByb3BUeXBlcy5vbmVPZihbJ2xlZnQnLCAncmlnaHQnXSkuaXNSZXF1aXJlZCxcbn0pO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSBEU0NPIEJ1dHRvbiBpbnN0ZWFkXG4gKi9cbmNvbnN0IExlZ2FjeUJ1dHRvbiA9IFJhZGl1bShmdW5jdGlvbiBCdXR0b24ocHJvcHMpIHtcbiAgaWYgKHByb3BzLmFycm93KSB7XG4gICAgcmV0dXJuIDxBcnJvd0J1dHRvbiB7Li4ucHJvcHN9IC8+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiA8QmFzZUJ1dHRvbiB7Li4ucHJvcHN9IC8+O1xuICB9XG59KTtcbkxlZ2FjeUJ1dHRvbi5wcm9wVHlwZXMgPSBPYmplY3QuYXNzaWduKHt9LCBCYXNlQnV0dG9uLnByb3BUeXBlcywge1xuICBhcnJvdzogUHJvcFR5cGVzLm9uZU9mKFsnbGVmdCcsICdyaWdodCddKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBMZWdhY3lCdXR0b247XG4iLCIvKipcbiAqIENvZGUub3JnIGN1c3RvbSByZWFjdCBwcm9wdHlwZXMuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7aXNTdWJzZXF1ZW5jZX0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQSBjdXN0b20gUmVhY3QgUHJvcFR5cGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNwZWNpZmllZFxuICogY29tcG9uZW50IHR5cGVzIGFyZSBnaXZlbiBpbiB0aGUgc3BlY2lmaWVkIG9yZGVyXG4gKiBhcyBjaGlsZHJlbiBvZiB0aGUgY29tcG9uZW50IHRoYXQgdGhpcyBwcm9wIHR5cGUgaXMgdXNlZCBvbi5cbiAqXG4gKiBFeGFtcGxlOlxuICogICBwcm9wVHlwZXM6IHtcbiAqICAgICBjaGlsZHJlbjogY2hpbGRyZW5PZlR5cGUoSGVhZGluZywgQm9keSlcbiAqICAgfVxuICpcbiAqIEluIHRoaXMgZXhhbXBsZSwgdGhlIHByb3AgdHlwZSBkb2VzIG5vdCB2YWxpZGF0ZSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuXG4gKiBvbmUgPEhlYWRpbmc+IGNvbXBvbmVudHMgaW4gdGhlIGNoaWxkcmVuIG9yIGlmIDxIZWFkaW5nPiBjb21lcyBhZnRlciA8Qm9keT4uXG4gKiBIb3dldmVyLCB0aGUgcHJvcCB0eXBlIHdpbGwgYmUgdmFsaWQgaWYgeW91IG9taXQgPEhlYWRpbmc+IGFuZC9vciA8Qm9keT4uXG4gKlxuICogQHBhcmFtIC4uLnZhbGlkQ2hpbGRyZW5UeXBlcyBhcnJheTxjb25zdHJ1Y3Rvcj4gLSBhIGxpc3Qgb2YgdHlwZXMgdG8gYWxsb3cgYXMgY2hpbGRyZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkcmVuT2ZUeXBlKC4uLnZhbGlkQ2hpbGRyZW5UeXBlcykge1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGlmIChwcm9wTmFtZSAhPT0gJ2NoaWxkcmVuJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSBjaGlsZHJlbk9mVHlwZSBwcm9wIHR5cGUgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiB0aGUgY2hpbGRyZW4gcHJvcC4nXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBwcm9wID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIGlmICghcHJvcCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhY3R1YWxDaGlsZHJlblR5cGVzID1cbiAgICAgIFJlYWN0LkNoaWxkcmVuLm1hcChwcm9wLCBlbCA9PiBlbCAmJiBlbC50eXBlKSB8fCBbXTtcbiAgICBpZiAoIWlzU3Vic2VxdWVuY2UodmFsaWRDaGlsZHJlblR5cGVzLCBhY3R1YWxDaGlsZHJlblR5cGVzKSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgY29tcG9uZW50TmFtZSArXG4gICAgICAgICAgJyB3YXMgZ2l2ZW4gY2hpbGRyZW4gb2YgdHlwZXMgJyArXG4gICAgICAgICAgYWN0dWFsQ2hpbGRyZW5UeXBlcy5tYXAodCA9PiBgPCR7dC5uYW1lfT5gKS5qb2luKCcsICcpICtcbiAgICAgICAgICAnIGJ1dCBvbmx5IGFjY2VwdHMgb25lIG9mIGVhY2ggY2hpbGQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogJyArXG4gICAgICAgICAgdmFsaWRDaGlsZHJlblR5cGVzLm1hcCh0ID0+IGA8JHt0Lm5hbWV9PmApLmpvaW4oJywgJykgK1xuICAgICAgICAgICcuJ1xuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQSBjdXN0b20gUmVhY3QgUHJvcFR5cGUgZm9yIGEgcHJvcCB0aGF0IGNhbiBvbmx5IGJlIHNwZWNpZmllZFxuICogd2hlbiBhIGNoaWxkIG5vZGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSBoYXMgbm90IGJlZW4gc3BlY2lmaWVkLlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIGhhdmluZyBhbiBBUEkgd2hlcmUgeW91ciBjb21wb25lbnQgYWNjZXB0cyBcImNvbmZpZ3VyYXRpb25cIlxuICogZWl0aGVyIGluIHRoZSBmb3JtIG9mIGEgcHJvcCwgb3IgYXMgYSBjaGlsZCBub2RlLiBGb3IgZXhhbXBsZSwgdG8gYWxsb3cgZm9yOlxuICpcbiAqIDxJY29uQnV0dG9uPlxuICogICA8SWNvbiBzcmM9XCIvaW1hZ2VzL2ljb25zL2Nvdy5wbmdcIi8+XG4gKiAgIENsaWNrIHRoZSBjb3chXG4gKiA8L0ljb25CdXR0b24+XG4gKlxuICogLS0tIG9yIC0tLVxuICpcbiAqIDxJY29uQnV0dG9uIGljb249XCIvaW1hZ2VzL2ljb25zL2Nvdy5wbmdcIj5DbGljayB0aGUgY293ITwvSWNvbkJ1dHRvbj5cbiAqXG4gKiBXaHkgd291bGQgeW91IHdhbnQgdG8gZG8gdGhpcz8gSXQgYWxsb3dzIGNhbGxzaXRlcyB0byB1c2Ugbm9uLWRlZmF1bHQgSWNvblxuICogY29tcG9uZW50cyBpZiB0aGV5IHdhbnQuIExpa2Ugc286XG4gKlxuICogPEljb25CdXR0b24+XG4gKiAgIDxBbmltYXRlZEljb24gYW5pbWF0aW9uPVwic3BpblwiIHN2Zz1cIi9pbWFnZXMvaWNvbnMvY293LnN2Z1wiLz5cbiAqICAgQ2xpY2sgdGhlIGNvdyFcbiAqIDwvSWNvbkJ1dHRvbj5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgcHJvcFR5cGVzOiB7XG4gKiAgICAgaWNvbjogd2hlbk5vQ2hpbGRPZlR5cGVzKEljb24sIEFuaW1hdGVkSWNvbilcbiAqICAgfVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoZW5Ob0NoaWxkT2ZUeXBlcyguLi51bmV4cGVjdGVkQ2hpbGRUeXBlcykge1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGlmICghcHJvcHMuY2hpbGRyZW4gfHwgIXByb3BzW3Byb3BOYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZXJyb3I7XG4gICAgY29uc3QgYWN0dWFsQ2hpbGRyZW5UeXBlcyA9IFJlYWN0LkNoaWxkcmVuLm1hcChcbiAgICAgIHByb3BzWydjaGlsZHJlbiddLFxuICAgICAgZWwgPT4gZWwudHlwZVxuICAgICk7XG4gICAgZm9yIChjb25zdCBjaGlsZFR5cGUgb2YgYWN0dWFsQ2hpbGRyZW5UeXBlcykge1xuICAgICAgaWYgKHVuZXhwZWN0ZWRDaGlsZFR5cGVzLmluY2x1ZGVzKGNoaWxkVHlwZSkpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgYCR7Y29tcG9uZW50TmFtZX0gd2FzIGdpdmVuIGEgJHtwcm9wTmFtZX0gcHJvcCBhbmQgYSBgICtcbiAgICAgICAgICAgIGA8JHtjaGlsZFR5cGUubmFtZX0+IGNoaWxkLCBidXQgb25seSBvbmUgb2YgdGhvc2UgaXMgYWxsb3dlZC5gXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3I7XG4gIH07XG59XG4iXSwibmFtZXMiOlsiX3Byb3BUeXBlcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3JhZGl1bSIsIl9yZWFjdCIsIl9sb2NhbGUiLCJfcHJvcFR5cGVzMiIsIl9CYXNlRGlhbG9nIiwiX2NvbG9yIiwiX0xlZ2FjeUJ1dHRvbiIsIl9leGNsdWRlZCIsImUiLCJfX2VzTW9kdWxlIiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3NldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJiaW5kIiwiX19wcm90b19fIiwiX3RvUHJvcGVydHlLZXkiLCJpIiwiX3RvUHJpbWl0aXZlIiwiX3R5cGVvZiIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfZXh0ZW5kcyIsImFzc2lnbiIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsInN0eWxlcyIsImV4cG9ydHMiLCJpY29uIiwiYmFja2dyb3VuZFNpemUiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kUmVwZWF0IiwibWFyZ2luVG9wIiwid2lkdGgiLCJoZWlnaHQiLCJmbG9hdCIsInRpdGxlIiwiZm9udFNpemUiLCJsaW5lSGVpZ2h0IiwibWFyZ2luQm90dG9tIiwiY29sb3IiLCJwdXJwbGUiLCJib2R5Iiwid2hpdGVTcGFjZSIsImJ1dHRvbnMiLCJyaWdodEJ1dHRvbiIsImJ1dHRvbkNsZWFyIiwiY2xlYXIiLCJmb290ZXIiLCJib3JkZXJDb2xvciIsImxpZ2h0X2dyYXkiLCJib3JkZXJTdHlsZSIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wV2lkdGgiLCJwYWRkaW5nVG9wIiwiVGl0bGUiLCJfcmVmIiwiY2hpbGRyZW4iLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJCb2R5IiwiX3JlZjIiLCJDb25maXJtIiwicHJvcHMiLCJ0eXBlIiwib3RoZXIiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImluY2x1ZGVzIiwicyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwibG9jYWxlIiwiZGlhbG9nT0siLCJDYW5jZWwiLCJkaWFsb2dDYW5jZWwiLCJCdXR0b25zIiwiX3JlZjMiLCJsZWZ0Q2hpbGRyZW4iLCJSZWFjdCIsIkNoaWxkcmVuIiwidG9BcnJheSIsInNsaWNlIiwicmlnaHRDaGlsZCIsIkZvb3RlciIsIl9yZWY0IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwibm9kZSIsInN0cmluZyIsImNoaWxkcmVuT2ZUeXBlIiwiSWNvbiIsIlJhZGl1bSIsIl9yZWY1Iiwic3JjIiwiYmFja2dyb3VuZEltYWdlIiwiY29uY2F0IiwiaXNSZXF1aXJlZCIsIkRpYWxvZyIsIl9SZWFjdCRDb21wb25lbnQiLCJfdGhpcyIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiZXZlbnQiLCJrZXkiLCJlbGVtZW50cyIsImJhc2VEaWFsb2ciLCJnZXRUYWJiYWJsZUVsZW1lbnRzIiwiY3VySW5kZXgiLCJmaW5kSW5kZXgiLCJidG4iLCJkb2N1bWVudCIsImFjdGl2ZUVsZW1lbnQiLCJmb2N1cyIsInByZXZlbnREZWZhdWx0IiwiX2luaGVyaXRzTG9vc2UiLCJwcm90b3R5cGUiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsInJlbmRlciIsIl90aGlzMiIsInRoaXMiLCJjYW5jZWxUZXh0Iiwib25DYW5jZWwiLCJjb25maXJtVGV4dCIsIm9uQ29uZmlybSIsImNvbmZpcm1UeXBlIiwib25DbGljayIsImxhc3RDaGlsZCIsInNwbGljZSIsInJlZiIsImhhbmRsZUtleURvd24iLCJDb21wb25lbnQiLCJCYXNlRGlhbG9nIiwid2hlbk5vQ2hpbGRPZlR5cGVzIiwiX2V4Y2x1ZGVkMiIsImJhc2UiLCJtaW5XaWR0aCIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsImJveFNoYWRvdyIsImxhcmdlIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJhcnJvdyIsInBvc2l0aW9uIiwiQVJST1dfV0lEVEgiLCJ0ZXh0QWxpZ24iLCJkaXNwbGF5IiwibGVmdCIsInJpZ2h0IiwiYXJyb3dIZWFkIiwiYm9yZGVyUmlnaHRDb2xvciIsImJvcmRlckxlZnRDb2xvciIsIndpdGhBcnJvdyIsInRvcCIsIkFSUk9XX0JVVFRPTl9QQURESU5HIiwiQlVUVE9OX1RZUEVTIiwiZGVmYXVsdCIsImJhY2tncm91bmRDb2xvciIsIndoaXRlIiwiY2hhcmNvYWwiLCJjYW5jZWwiLCJuZXV0cmFsX3doaXRlIiwibmV1dHJhbF9kYXJrIiwibmV1dHJhbF9kYXJrMjAiLCJwcmltYXJ5IiwiYnJhbmRfc2Vjb25kYXJ5X2RlZmF1bHQiLCJicmFuZF9zZWNvbmRhcnlfZGFyayIsImxlZ2FjeVByaW1hcnkiLCJvcmFuZ2UiLCJkYW5nZXIiLCJwcm9kdWN0X25lZ2F0aXZlX2RlZmF1bHQiLCJwcm9kdWN0X25lZ2F0aXZlX2RhcmsiLCJhY3Rpb24iLCJCYXNlQnV0dG9uIiwic2l6ZSIsInNpemVTdHlsZSIsImNvbmZpZyIsInN0eWxlQXJyYXkiLCJvbmVPZiIsIkFycm93QnV0dG9uIiwiTGVnYWN5QnV0dG9uIiwiQnV0dG9uIiwidmFsaWRDaGlsZHJlblR5cGVzIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwiRXJyb3IiLCJwcm9wIiwiYWN0dWFsQ2hpbGRyZW5UeXBlcyIsIm1hcCIsImVsIiwiaXNTdWJzZXF1ZW5jZSIsIm5hbWUiLCJqb2luIiwiX2xlbjIiLCJ1bmV4cGVjdGVkQ2hpbGRUeXBlcyIsIl9rZXkyIiwiZXJyb3IiLCJfc3RlcCIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiaXRlcmF0b3IiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiYSIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJmcm9tIiwidGVzdCIsIl9uIiwiRiIsImRvbmUiLCJmIiwidSIsIm5leHQiLCJjaGlsZFR5cGUiLCJlcnIiLCJfdXRpbHMiXSwic291cmNlUm9vdCI6IiJ9